From 4a5b10c5ca95f49cf3700619e1033da645c9de89 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 23 十一月 2018 11:37:37 +0800
Subject: [PATCH] 4969 上古战场退出副本清除buff

---
 Tool/Robot/Protocol/PacketsSendPY.py | 2996 ++++++++++++++++++++++++++++++-----------------------------
 1 files changed, 1,536 insertions(+), 1,460 deletions(-)

diff --git a/Tool/Robot/Protocol/PacketsSendPY.py b/Tool/Robot/Protocol/PacketsSendPY.py
index 0af2d67..ff5f5b4 100644
--- a/Tool/Robot/Protocol/PacketsSendPY.py
+++ b/Tool/Robot/Protocol/PacketsSendPY.py
@@ -588,58 +588,6 @@
 
 
 #------------------------------------------------------
-# A4 04 抢家族红包 #tagCGGrabFamilyRedPacket
-
-class  tagCGGrabFamilyRedPacket(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RedPaketID", c_int),    # 红包ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA4
-        self.SubCmd = 0x04
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA4
-        self.SubCmd = 0x04
-        self.RedPaketID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGGrabFamilyRedPacket)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A4 04 抢家族红包 //tagCGGrabFamilyRedPacket:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RedPaketID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RedPaketID
-                                )
-        return DumpString
-
-
-m_NAtagCGGrabFamilyRedPacket=tagCGGrabFamilyRedPacket()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGrabFamilyRedPacket.Cmd,m_NAtagCGGrabFamilyRedPacket.SubCmd))] = m_NAtagCGGrabFamilyRedPacket
-
-
-#------------------------------------------------------
 #A4 03 加入家族审核情况 #tagCGJoinFamilyReply
 
 class  tagCGJoinFamilyReply(Structure):
@@ -793,6 +741,155 @@
 
 m_NAtagCGOpenFamilyBossFB=tagCGOpenFamilyBossFB()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGOpenFamilyBossFB.Cmd,m_NAtagCGOpenFamilyBossFB.SubCmd))] = m_NAtagCGOpenFamilyBossFB
+
+
+#------------------------------------------------------
+# A4 04 创建家族 #tagCGPyCreatFamily
+
+class  tagCGPyCreatFamily(Structure):
+    Head = tagHead()
+    Name = ""    #(char Name[33])
+    FakeID = 0    #(WORD FakeID)//假仙盟编号
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.FakeID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x04
+        self.Name = ""
+        self.FakeID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 33
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteWORD(data, self.FakeID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Name:%s,
+                                FakeID:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Name,
+                                self.FakeID
+                                )
+        return DumpString
+
+
+m_NAtagCGPyCreatFamily=tagCGPyCreatFamily()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPyCreatFamily.Head.Cmd,m_NAtagCGPyCreatFamily.Head.SubCmd))] = m_NAtagCGPyCreatFamily
+
+
+#------------------------------------------------------
+# A4 12 搜索家族 #tagCGPySearchFamily
+
+class  tagCGPySearchFamily(Structure):
+    Head = tagHead()
+    MsgLen = 0    #(BYTE MsgLen)//模糊搜索家族,如果输入为空,则为不限制该条件
+    Msg = ""    #(String Msg)//size = MsgLen
+    LV = 0    #(BYTE LV)//最低家族等级,如果为0,则不限制该条件
+    MaxCount = 0    #(BYTE MaxCount)//搜索结果所需最大条数,后端限制最多返回20条
+    IsSearching = 0    #(BYTE IsSearching)//默认1,如果有指定其他值,则返回指定值
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MsgLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.MsgLen)
+        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MaxCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x12
+        self.MsgLen = 0
+        self.Msg = ""
+        self.LV = 0
+        self.MaxCount = 0
+        self.IsSearching = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.Msg)
+        length += 1
+        length += 1
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.MsgLen)
+        data = CommFunc.WriteString(data, self.MsgLen, self.Msg)
+        data = CommFunc.WriteBYTE(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.MaxCount)
+        data = CommFunc.WriteBYTE(data, self.IsSearching)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MsgLen:%d,
+                                Msg:%s,
+                                LV:%d,
+                                MaxCount:%d,
+                                IsSearching:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MsgLen,
+                                self.Msg,
+                                self.LV,
+                                self.MaxCount,
+                                self.IsSearching
+                                )
+        return DumpString
+
+
+m_NAtagCGPySearchFamily=tagCGPySearchFamily()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPySearchFamily.Head.Cmd,m_NAtagCGPySearchFamily.Head.SubCmd))] = m_NAtagCGPySearchFamily
 
 
 #------------------------------------------------------
@@ -1347,19 +1444,20 @@
 
 
 #------------------------------------------------------
-#A9 10 请求魔方寻宝记录 #tagCGMagicTreasureRecord
+# AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss
 
-class  tagCGMagicTreasureRecord(Structure):
+class  tagCGCallupFamilyMemberToBoss(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("NPCID", c_int),    
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA9
-        self.SubCmd = 0x10
+        self.Cmd = 0xAC
+        self.SubCmd = 0x05
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -1368,30 +1466,33 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA9
-        self.SubCmd = 0x10
+        self.Cmd = 0xAC
+        self.SubCmd = 0x05
+        self.NPCID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCGMagicTreasureRecord)
+        return sizeof(tagCGCallupFamilyMemberToBoss)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A9 10 请求魔方寻宝记录 //tagCGMagicTreasureRecord:
+        DumpString = '''// AC 05 召集仙盟成员打boss //tagCGCallupFamilyMemberToBoss:
                                 Cmd:%s,
-                                SubCmd:%s
+                                SubCmd:%s,
+                                NPCID:%d
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd
+                                self.SubCmd,
+                                self.NPCID
                                 )
         return DumpString
 
 
-m_NAtagCGMagicTreasureRecord=tagCGMagicTreasureRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMagicTreasureRecord.Cmd,m_NAtagCGMagicTreasureRecord.SubCmd))] = m_NAtagCGMagicTreasureRecord
+m_NAtagCGCallupFamilyMemberToBoss=tagCGCallupFamilyMemberToBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCallupFamilyMemberToBoss.Cmd,m_NAtagCGCallupFamilyMemberToBoss.SubCmd))] = m_NAtagCGCallupFamilyMemberToBoss
 
 
 #------------------------------------------------------
@@ -1473,54 +1574,6 @@
 
 
 #------------------------------------------------------
-# AC 09  查询活动怪信息 #tagCGQueryFestivalNPC
-
-class  tagCGQueryFestivalNPC(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x09
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAC
-        self.SubCmd = 0x09
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGQueryFestivalNPC)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 09  查询活动怪信息 //tagCGQueryFestivalNPC:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCGQueryFestivalNPC=tagCGQueryFestivalNPC()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryFestivalNPC.Cmd,m_NAtagCGQueryFestivalNPC.SubCmd))] = m_NAtagCGQueryFestivalNPC
-
-
-#------------------------------------------------------
 # AC 01 仙魔之争报名 #tagCGJoinXMZZ
 
 class  tagCGJoinXMZZ(Structure):
@@ -1566,6 +1619,102 @@
 
 m_NAtagCGJoinXMZZ=tagCGJoinXMZZ()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGJoinXMZZ.Cmd,m_NAtagCGJoinXMZZ.SubCmd))] = m_NAtagCGJoinXMZZ
+
+
+#------------------------------------------------------
+# AC 04 查询仙盟抢Boss所有Boss当前进度 #tagCGQueryAllFamilyBossHurt
+
+class  tagCGQueryAllFamilyBossHurt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x04
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAC
+        self.SubCmd = 0x04
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGQueryAllFamilyBossHurt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 04 查询仙盟抢Boss所有Boss当前进度 //tagCGQueryAllFamilyBossHurt:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCGQueryAllFamilyBossHurt=tagCGQueryAllFamilyBossHurt()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryAllFamilyBossHurt.Cmd,m_NAtagCGQueryAllFamilyBossHurt.SubCmd))] = m_NAtagCGQueryAllFamilyBossHurt
+
+
+#------------------------------------------------------
+# AC 03 仙魔之争信息查询 #tagCGXMZZInfoQuery
+
+class  tagCGXMZZInfoQuery(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x03
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAC
+        self.SubCmd = 0x03
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGXMZZInfoQuery)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 03 仙魔之争信息查询 //tagCGXMZZInfoQuery:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCGXMZZInfoQuery=tagCGXMZZInfoQuery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGXMZZInfoQuery.Cmd,m_NAtagCGXMZZInfoQuery.SubCmd))] = m_NAtagCGXMZZInfoQuery
 
 
 #------------------------------------------------------
@@ -1989,6 +2138,101 @@
 
 
 #------------------------------------------------------
+#B3 07 语音聊天 #tagCGVoiceChat
+
+class  tagCGVoiceChat(Structure):
+    Head = tagHead()
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域    
+    TargetNameLen = 0    #(BYTE TargetNameLen)
+    TargetName = ""    #(String TargetName)//size = TargetNameLen
+    TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
+    Len = 0    #(WORD Len)
+    Content = list()    #(vector<BYTE> Content)//size = Len
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen)
+        self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.Content.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x07
+        self.ChannelType = 0
+        self.TargetNameLen = 0
+        self.TargetName = ""
+        self.TargetID = 0
+        self.Len = 0
+        self.Content = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.TargetName)
+        length += 4
+        length += 2
+        length += 1 * self.Len
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ChannelType)
+        data = CommFunc.WriteBYTE(data, self.TargetNameLen)
+        data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName)
+        data = CommFunc.WriteDWORD(data, self.TargetID)
+        data = CommFunc.WriteWORD(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteBYTE(data, self.Content[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ChannelType:%d,
+                                TargetNameLen:%d,
+                                TargetName:%s,
+                                TargetID:%d,
+                                Len:%d,
+                                Content:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ChannelType,
+                                self.TargetNameLen,
+                                self.TargetName,
+                                self.TargetID,
+                                self.Len,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCGVoiceChat=tagCGVoiceChat()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGVoiceChat.Head.Cmd,m_NAtagCGVoiceChat.Head.SubCmd))] = m_NAtagCGVoiceChat
+
+
+#------------------------------------------------------
 #B3 03 是否允许加入好友的回应#tagCGJoinFriendAnswer
 
 class  tagCGJoinFriendAnswer(Structure):
@@ -2397,6 +2641,62 @@
 
 m_NAtagCGInvitePlayerJoinTeam=tagCGInvitePlayerJoinTeam()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeam.Cmd,m_NAtagCGInvitePlayerJoinTeam.SubCmd))] = m_NAtagCGInvitePlayerJoinTeam
+
+
+#------------------------------------------------------
+# B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV
+
+class  tagCGInvitePlayerJoinTeamByLV(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LVLimit", c_ushort),    # 目标玩家大于等于此等级
+                  ("InviteCnt", c_ubyte),    # 邀请玩家个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        self.SubCmd = 0x0A
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB9
+        self.SubCmd = 0x0A
+        self.LVLimit = 0
+        self.InviteCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGInvitePlayerJoinTeamByLV)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 0A 按条件邀请玩家加入队伍 //tagCGInvitePlayerJoinTeamByLV:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                LVLimit:%d,
+                                InviteCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.LVLimit,
+                                self.InviteCnt
+                                )
+        return DumpString
+
+
+m_NAtagCGInvitePlayerJoinTeamByLV=tagCGInvitePlayerJoinTeamByLV()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeamByLV.Cmd,m_NAtagCGInvitePlayerJoinTeamByLV.SubCmd))] = m_NAtagCGInvitePlayerJoinTeamByLV
 
 
 #------------------------------------------------------
@@ -3748,7 +4048,7 @@
     SpeakerType = 0    #(BYTE SpeakerType)//1-本服;2-跨服
     IsUseGold = 0    #(BYTE IsUseGold)//是否使用钻石
     ItemIndex = 0    #(BYTE ItemIndex)//使用物品说话时, 物品Index
-    TextLen = 0    #(BYTE TextLen)//字符长度
+    TextLen = 0    #(WORD TextLen)//字符长度
     Text = ""    #(String Text)//size = TextLen
     data = None
 
@@ -3764,7 +4064,7 @@
         self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IsUseGold,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.ItemIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TextLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
         return _pos
 
@@ -3786,7 +4086,7 @@
         length += 1
         length += 1
         length += 1
-        length += 1
+        length += 2
         length += len(self.Text)
 
         return length
@@ -3797,7 +4097,7 @@
         data = CommFunc.WriteBYTE(data, self.SpeakerType)
         data = CommFunc.WriteBYTE(data, self.IsUseGold)
         data = CommFunc.WriteBYTE(data, self.ItemIndex)
-        data = CommFunc.WriteBYTE(data, self.TextLen)
+        data = CommFunc.WriteWORD(data, self.TextLen)
         data = CommFunc.WriteString(data, self.TextLen, self.Text)
         return data
 
@@ -3950,6 +4250,151 @@
 
 m_NAtagCMQueryBossHurtList=tagCMQueryBossHurtList()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryBossHurtList.Cmd,m_NAtagCMQueryBossHurtList.SubCmd))] = m_NAtagCMQueryBossHurtList
+
+
+#------------------------------------------------------
+# A2 28 查询仙盟抢Boss伤血列表 #tagCMQueryFamilyBossHurt
+
+class  tagCMQueryFamilyBossHurt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ObjID", c_int),    
+                  ("NPCID", c_int),    
+                  ("QueryType", c_ubyte),    # 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA2
+        self.SubCmd = 0x28
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA2
+        self.SubCmd = 0x28
+        self.ObjID = 0
+        self.NPCID = 0
+        self.QueryType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMQueryFamilyBossHurt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A2 28 查询仙盟抢Boss伤血列表 //tagCMQueryFamilyBossHurt:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ObjID:%d,
+                                NPCID:%d,
+                                QueryType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ObjID,
+                                self.NPCID,
+                                self.QueryType
+                                )
+        return DumpString
+
+
+m_NAtagCMQueryFamilyBossHurt=tagCMQueryFamilyBossHurt()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryFamilyBossHurt.Cmd,m_NAtagCMQueryFamilyBossHurt.SubCmd))] = m_NAtagCMQueryFamilyBossHurt
+
+
+#------------------------------------------------------
+# A2 27 查询地图NPC数量信息 #tagCMQueryNPCCntInfo
+
+class  tagCMQueryNPCCntInfo(Structure):
+    Head = tagHead()
+    MapID = 0    #(DWORD MapID)// 目标地图ID
+    LineID = 0    #(WORD LineID)// 线路ID
+    IsNoTimeLimit = 0    #(BYTE IsNoTimeLimit)//是否没有查询时间限制,默认有限制
+    NPCIDListLen = 0    #(BYTE NPCIDListLen)
+    NPCIDList = ""    #(String NPCIDList)// 需要查询的NPCID列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x27
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsNoTimeLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NPCIDListLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NPCIDList,_pos = CommFunc.ReadString(_lpData, _pos,self.NPCIDListLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x27
+        self.MapID = 0
+        self.LineID = 0
+        self.IsNoTimeLimit = 0
+        self.NPCIDListLen = 0
+        self.NPCIDList = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 2
+        length += 1
+        length += 1
+        length += len(self.NPCIDList)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteWORD(data, self.LineID)
+        data = CommFunc.WriteBYTE(data, self.IsNoTimeLimit)
+        data = CommFunc.WriteBYTE(data, self.NPCIDListLen)
+        data = CommFunc.WriteString(data, self.NPCIDListLen, self.NPCIDList)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MapID:%d,
+                                LineID:%d,
+                                IsNoTimeLimit:%d,
+                                NPCIDListLen:%d,
+                                NPCIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MapID,
+                                self.LineID,
+                                self.IsNoTimeLimit,
+                                self.NPCIDListLen,
+                                self.NPCIDList
+                                )
+        return DumpString
+
+
+m_NAtagCMQueryNPCCntInfo=tagCMQueryNPCCntInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryNPCCntInfo.Head.Cmd,m_NAtagCMQueryNPCCntInfo.Head.SubCmd))] = m_NAtagCMQueryNPCCntInfo
 
 
 #------------------------------------------------------
@@ -4470,6 +4915,101 @@
 
 
 #------------------------------------------------------
+#A2 26 语音聊天 #tagCMVoiceChat
+
+class  tagCMVoiceChat(Structure):
+    Head = tagHead()
+    ChannelType = 0    #(BYTE ChannelType)//  5 区域 --- 查看封包tagCGVoiceChat 1 世界 2 仙盟 3 私聊(好友) 4 队伍
+    TargetNameLen = 0    #(BYTE TargetNameLen)
+    TargetName = ""    #(String TargetName)//size = TargetNameLen
+    TargetID = 0    #(DWORD TargetID)// 私聊默认发玩家ID,没有ID才发名称
+    Len = 0    #(WORD Len)
+    Content = list()    #(vector<BYTE> Content)//size = Len
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen)
+        self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.Content.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x26
+        self.ChannelType = 0
+        self.TargetNameLen = 0
+        self.TargetName = ""
+        self.TargetID = 0
+        self.Len = 0
+        self.Content = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.TargetName)
+        length += 4
+        length += 2
+        length += 1 * self.Len
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ChannelType)
+        data = CommFunc.WriteBYTE(data, self.TargetNameLen)
+        data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName)
+        data = CommFunc.WriteDWORD(data, self.TargetID)
+        data = CommFunc.WriteWORD(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteBYTE(data, self.Content[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ChannelType:%d,
+                                TargetNameLen:%d,
+                                TargetName:%s,
+                                TargetID:%d,
+                                Len:%d,
+                                Content:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ChannelType,
+                                self.TargetNameLen,
+                                self.TargetName,
+                                self.TargetID,
+                                self.Len,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMVoiceChat=tagCMVoiceChat()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVoiceChat.Head.Cmd,m_NAtagCMVoiceChat.Head.SubCmd))] = m_NAtagCMVoiceChat
+
+
+#------------------------------------------------------
 #A2 12 查看玩家详细信息#tagCMViewPlayerInfo
 
 class  tagCMViewPlayerInfo(Structure):
@@ -4519,66 +5059,6 @@
 
 m_NAtagCMViewPlayerInfo=tagCMViewPlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMViewPlayerInfo.Cmd,m_NAtagCMViewPlayerInfo.SubCmd))] = m_NAtagCMViewPlayerInfo
-
-
-#------------------------------------------------------
-# A3 16 购买物品 #tagCMBuyItem
-
-class  tagCMBuyItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ItemID", c_int),    #物品id
-                  ("Cnt", c_int),    #个数
-                  ("MoneyType", c_ubyte),    #金钱类型
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x16
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x16
-        self.ItemID = 0
-        self.Cnt = 0
-        self.MoneyType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMBuyItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 16 购买物品 //tagCMBuyItem:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ItemID:%d,
-                                Cnt:%d,
-                                MoneyType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ItemID,
-                                self.Cnt,
-                                self.MoneyType
-                                )
-        return DumpString
-
-
-m_NAtagCMBuyItem=tagCMBuyItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItem.Cmd,m_NAtagCMBuyItem.SubCmd))] = m_NAtagCMBuyItem
 
 
 #------------------------------------------------------
@@ -4706,6 +5186,122 @@
 
 
 #------------------------------------------------------
+# A3 2D 装备分解设置 #tagCMDecomposeSeting
+
+class  tagCMDecomposeSeting(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Seting", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2D
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2D
+        self.Seting = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDecomposeSeting)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 2D 装备分解设置 //tagCMDecomposeSeting:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Seting:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Seting
+                                )
+        return DumpString
+
+
+m_NAtagCMDecomposeSeting=tagCMDecomposeSeting()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDecomposeSeting.Cmd,m_NAtagCMDecomposeSeting.SubCmd))] = m_NAtagCMDecomposeSeting
+
+
+#------------------------------------------------------
+# A3 09 转移物品到其他背包 #tagCMDropItemToOtherPack
+
+class  tagCMDropItemToOtherPack(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("SrcBackpack", c_ubyte),    #源背包类型
+                  ("DesBackPack", c_ubyte),    #目标背包类型
+                  ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
+                  ("IsAll", c_ubyte),    #是否全部转移        
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x09
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x09
+        self.SrcBackpack = 0
+        self.DesBackPack = 0
+        self.SrcIndex = 0
+        self.IsAll = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDropItemToOtherPack)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 09 转移物品到其他背包 //tagCMDropItemToOtherPack:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                SrcBackpack:%d,
+                                DesBackPack:%d,
+                                SrcIndex:%d,
+                                IsAll:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.SrcBackpack,
+                                self.DesBackPack,
+                                self.SrcIndex,
+                                self.IsAll
+                                )
+        return DumpString
+
+
+m_NAtagCMDropItemToOtherPack=tagCMDropItemToOtherPack()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDropItemToOtherPack.Cmd,m_NAtagCMDropItemToOtherPack.SubCmd))] = m_NAtagCMDropItemToOtherPack
+
+
+#------------------------------------------------------
 #A3 15 装备打孔 # tagCMEquipAddHole
 
 class  tagCMEquipAddHole(Structure):
@@ -4770,7 +5366,6 @@
 
 class  tagCMEquipDecompose(Structure):
     Head = tagHead()
-    PackType = 0    #(BYTE PackType)//背包类型
     IndexCount = 0    #(BYTE IndexCount)//材料所在背包索引的数量
     IndexList = list()    #(vector<BYTE> IndexList)//材料所在背包索引列表
     data = None
@@ -4784,7 +5379,6 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.PackType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.IndexCount):
             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
@@ -4796,7 +5390,6 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x2C
-        self.PackType = 0
         self.IndexCount = 0
         self.IndexList = list()
         return
@@ -4805,7 +5398,6 @@
         length = 0
         length += self.Head.GetLength()
         length += 1
-        length += 1
         length += 1 * self.IndexCount
 
         return length
@@ -4813,7 +5405,6 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PackType)
         data = CommFunc.WriteBYTE(data, self.IndexCount)
         for i in range(self.IndexCount):
             data = CommFunc.WriteBYTE(data, self.IndexList[i])
@@ -4822,13 +5413,11 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                PackType:%d,
                                 IndexCount:%d,
                                 IndexList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.PackType,
                                 self.IndexCount,
                                 "..."
                                 )
@@ -5303,78 +5892,6 @@
 
 
 #------------------------------------------------------
-#A3 13 装备继承#tagCMInheritEquip
-
-class  tagCMInheritEquip(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SrcPackType", c_ubyte),    #背包类型:rptItem, rptEquip, rptPetEquip1~5
-                  ("SrcEquipIndex", c_ubyte),    #材料装备在对应背包中索引
-                  ("DesPackType", c_ubyte),    #目标装备所在背包类型:rptItem, rptEquip, rptPetEquip1~5
-                  ("DesEquipIndex", c_ubyte),    #目标装备所在背包索引    
-                  ("AutoBuy", c_ubyte),    #自动购买
-                  ("InheritGreatAttr", c_ubyte),    #是否继承主装备卓越属性
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x13
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x13
-        self.SrcPackType = 0
-        self.SrcEquipIndex = 0
-        self.DesPackType = 0
-        self.DesEquipIndex = 0
-        self.AutoBuy = 0
-        self.InheritGreatAttr = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMInheritEquip)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 13 装备继承//tagCMInheritEquip:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SrcPackType:%d,
-                                SrcEquipIndex:%d,
-                                DesPackType:%d,
-                                DesEquipIndex:%d,
-                                AutoBuy:%d,
-                                InheritGreatAttr:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SrcPackType,
-                                self.SrcEquipIndex,
-                                self.DesPackType,
-                                self.DesEquipIndex,
-                                self.AutoBuy,
-                                self.InheritGreatAttr
-                                )
-        return DumpString
-
-
-m_NAtagCMInheritEquip=tagCMInheritEquip()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMInheritEquip.Cmd,m_NAtagCMInheritEquip.SubCmd))] = m_NAtagCMInheritEquip
-
-
-#------------------------------------------------------
 #A3 02 丢弃背包物品 #tagPlayerDropItem
 
 class  tagPlayerDropItem(Structure):
@@ -5436,6 +5953,83 @@
 
 m_NAtagPlayerDropItem=tagPlayerDropItem()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerDropItem.Cmd,m_NAtagPlayerDropItem.SubCmd))] = m_NAtagPlayerDropItem
+
+
+#------------------------------------------------------
+# A3 2A 回收魂石 #tagCMRecycleAttrFruit
+
+class  tagCMRecycleAttrFruit(Structure):
+    Head = tagHead()
+    IndexCount = 0    #(BYTE IndexCount)//索引个数
+    IndexList = list()    #(vector<BYTE> IndexList)//物品在背包中索引列表
+    RecycleCountList = list()    #(vector<WORD> RecycleCountList)//索引对应回收个数列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x2A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.IndexList.append(value)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.RecycleCountList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x2A
+        self.IndexCount = 0
+        self.IndexList = list()
+        self.RecycleCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.IndexCount
+        length += 2 * self.IndexCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteBYTE(data, self.IndexList[i])
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteWORD(data, self.RecycleCountList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                IndexCount:%d,
+                                IndexList:%s,
+                                RecycleCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.IndexCount,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMRecycleAttrFruit=tagCMRecycleAttrFruit()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecycleAttrFruit.Head.Cmd,m_NAtagCMRecycleAttrFruit.Head.SubCmd))] = m_NAtagCMRecycleAttrFruit
 
 
 #------------------------------------------------------
@@ -5676,62 +6270,6 @@
 
 
 #------------------------------------------------------
-# A3 2D 红装剥离 #tagCMSuitEquipStrip
-
-class  tagCMSuitEquipStrip(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PackType", c_ubyte),    #背包类型
-                  ("ItemIndex", c_ubyte),    #材料所在背包索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2D
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2D
-        self.PackType = 0
-        self.ItemIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMSuitEquipStrip)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 2D 红装剥离 //tagCMSuitEquipStrip:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PackType:%d,
-                                ItemIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PackType,
-                                self.ItemIndex
-                                )
-        return DumpString
-
-
-m_NAtagCMSuitEquipStrip=tagCMSuitEquipStrip()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSuitEquipStrip.Cmd,m_NAtagCMSuitEquipStrip.SubCmd))] = m_NAtagCMSuitEquipStrip
-
-
-#------------------------------------------------------
 #A3 20 将魔方背包中的物品转移到人物背包中 #tagCMMagicItemPutInItemPack
 
 class  tagCMMagicItemPutInItemPack(Structure):
@@ -5926,6 +6464,58 @@
 
 
 #------------------------------------------------------
+# A3 2F 宗门试炼兑换 #tagCMTrialExchange
+
+class  tagCMTrialExchange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ID", c_int),    #兑换ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2F
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2F
+        self.ID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMTrialExchange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 2F 宗门试炼兑换 //tagCMTrialExchange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ID
+                                )
+        return DumpString
+
+
+m_NAtagCMTrialExchange=tagCMTrialExchange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTrialExchange.Cmd,m_NAtagCMTrialExchange.SubCmd))] = m_NAtagCMTrialExchange
+
+
+#------------------------------------------------------
 # A3 2B 一键使用属性果实 #tagCMUseAllAttrFruit
 
 class  tagCMUseAllAttrFruit(Structure):
@@ -5975,122 +6565,6 @@
 
 m_NAtagCMUseAllAttrFruit=tagCMUseAllAttrFruit()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllAttrFruit.Cmd,m_NAtagCMUseAllAttrFruit.SubCmd))] = m_NAtagCMUseAllAttrFruit
-
-
-#------------------------------------------------------
-#A3 10 一键使用图鉴 #tagCMUseAllCard
-
-class  tagCMUseAllCard(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CardColor", c_ushort),    #使用的图鉴颜色品质,可配置多个颜色品质,颜色品质从0开始,对应到二进制位
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x10
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x10
-        self.CardColor = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMUseAllCard)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 10 一键使用图鉴 //tagCMUseAllCard:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CardColor:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CardColor
-                                )
-        return DumpString
-
-
-m_NAtagCMUseAllCard=tagCMUseAllCard()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllCard.Cmd,m_NAtagCMUseAllCard.SubCmd))] = m_NAtagCMUseAllCard
-
-
-#------------------------------------------------------
-# A3 2A 使用皇室宝箱 #tagCMUseCRBox
-
-class  tagCMUseCRBox(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncIndex", c_ubyte),    #功能索引
-                  ("BoxIndex", c_ubyte),    #宝箱格子索引
-                  ("UseItemIndex", c_ubyte),    # 物品在背包中的索引
-                  ("UseType", c_ubyte),    #使用类型<0-开始使用,1-开始解锁,2-立即开启>
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2A
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2A
-        self.FuncIndex = 0
-        self.BoxIndex = 0
-        self.UseItemIndex = 0
-        self.UseType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMUseCRBox)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 2A 使用皇室宝箱 //tagCMUseCRBox:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncIndex:%d,
-                                BoxIndex:%d,
-                                UseItemIndex:%d,
-                                UseType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncIndex,
-                                self.BoxIndex,
-                                self.UseItemIndex,
-                                self.UseType
-                                )
-        return DumpString
-
-
-m_NAtagCMUseCRBox=tagCMUseCRBox()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseCRBox.Cmd,m_NAtagCMUseCRBox.SubCmd))] = m_NAtagCMUseCRBox
 
 
 #------------------------------------------------------
@@ -6151,66 +6625,6 @@
 
 m_NAtagCMUseItems=tagCMUseItems()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Cmd,m_NAtagCMUseItems.SubCmd))] = m_NAtagCMUseItems
-
-
-#------------------------------------------------------
-# A3 27 使用过程物品 #tagCMUseProcessItem
-
-class  tagCMUseProcessItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("UseType", c_ubyte),    # 使用类型 <0-开始使用, 1-使用操作, 2-结束使用>
-                  ("UseItemIndex", c_ubyte),    # 物品在背包中的索引
-                  ("ExtraInfo", c_ubyte),    # 预留信息
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x27
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x27
-        self.UseType = 0
-        self.UseItemIndex = 0
-        self.ExtraInfo = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMUseProcessItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 27 使用过程物品 //tagCMUseProcessItem:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                UseType:%d,
-                                UseItemIndex:%d,
-                                ExtraInfo:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.UseType,
-                                self.UseItemIndex,
-                                self.ExtraInfo
-                                )
-        return DumpString
-
-
-m_NAtagCMUseProcessItem=tagCMUseProcessItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseProcessItem.Cmd,m_NAtagCMUseProcessItem.SubCmd))] = m_NAtagCMUseProcessItem
 
 
 #------------------------------------------------------
@@ -6400,7 +6814,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("HorseID", c_ubyte),    #坐骑ID
+                  ("HorseID", c_int),    #坐骑ID
                   ]
 
     def __init__(self):
@@ -6498,6 +6912,58 @@
 
 m_NAtagCMActiveAllEquipAttr=tagCMActiveAllEquipAttr()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveAllEquipAttr.Cmd,m_NAtagCMActiveAllEquipAttr.SubCmd))] = m_NAtagCMActiveAllEquipAttr
+
+
+#------------------------------------------------------
+# A5 12 激活法宝之魂 #tagCMActiveMWSoul
+
+class  tagCMActiveMWSoul(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ID", c_ubyte),    #编号
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x12
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x12
+        self.ID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActiveMWSoul)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 12 激活法宝之魂 //tagCMActiveMWSoul:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ID
+                                )
+        return DumpString
+
+
+m_NAtagCMActiveMWSoul=tagCMActiveMWSoul()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveMWSoul.Cmd,m_NAtagCMActiveMWSoul.SubCmd))] = m_NAtagCMActiveMWSoul
 
 
 #------------------------------------------------------
@@ -6964,58 +7430,6 @@
 
 
 #------------------------------------------------------
-#A5 12 购买每日一购商品 #tagCMBuyDailyGoldShopItem
-
-class  tagCMBuyDailyGoldShopItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    #购买物品的索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x12
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x12
-        self.Index = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMBuyDailyGoldShopItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 12 购买每日一购商品 //tagCMBuyDailyGoldShopItem:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Index:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Index
-                                )
-        return DumpString
-
-
-m_NAtagCMBuyDailyGoldShopItem=tagCMBuyDailyGoldShopItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyDailyGoldShopItem.Cmd,m_NAtagCMBuyDailyGoldShopItem.SubCmd))] = m_NAtagCMBuyDailyGoldShopItem
-
-
-#------------------------------------------------------
 #A5 75 购买副本进入次数#tagCMBuyEnterCount
 
 class  tagCMBuyEnterCount(Structure):
@@ -7065,58 +7479,6 @@
 
 m_NAtagCMBuyEnterCount=tagCMBuyEnterCount()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyEnterCount.Cmd,m_NAtagCMBuyEnterCount.SubCmd))] = m_NAtagCMBuyEnterCount
-
-
-#------------------------------------------------------
-#A5 14 开通表情包#tagPyCMBuyFacePackage
-
-class  tagPyCMBuyFacePackage(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PackageID", c_ubyte),    #购买表情包的索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x14
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x14
-        self.PackageID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagPyCMBuyFacePackage)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 14 开通表情包//tagPyCMBuyFacePackage:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PackageID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PackageID
-                                )
-        return DumpString
-
-
-m_NAtagPyCMBuyFacePackage=tagPyCMBuyFacePackage()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMBuyFacePackage.Cmd,m_NAtagPyCMBuyFacePackage.SubCmd))] = m_NAtagPyCMBuyFacePackage
 
 
 #------------------------------------------------------
@@ -7577,62 +7939,6 @@
 
 
 #------------------------------------------------------
-# A5 62 装备收集属性激活 #tagCMCollectEquipAttrActive
-
-class  tagCMCollectEquipAttrActive(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CollectType", c_ubyte),    #收集类型 0-目标收集 1-战装收集
-                  ("Data", c_ubyte),    #额外数据
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x62
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x62
-        self.CollectType = 0
-        self.Data = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMCollectEquipAttrActive)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 62 装备收集属性激活 //tagCMCollectEquipAttrActive:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CollectType:%d,
-                                Data:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CollectType,
-                                self.Data
-                                )
-        return DumpString
-
-
-m_NAtagCMCollectEquipAttrActive=tagCMCollectEquipAttrActive()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCollectEquipAttrActive.Cmd,m_NAtagCMCollectEquipAttrActive.SubCmd))] = m_NAtagCMCollectEquipAttrActive
-
-
-#------------------------------------------------------
 # A5 28 常规副本扫荡 #tagCMCommFBWipeOut
 
 class  tagCMCommFBWipeOut(Structure):
@@ -7794,6 +8100,303 @@
 
 m_NAtagCMDoFBAction=tagCMDoFBAction()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDoFBAction.Cmd,m_NAtagCMDoFBAction.SubCmd))] = m_NAtagCMDoFBAction
+
+
+#------------------------------------------------------
+# A5 C2 神兽变更助战状态 #tagCMDogzBattleStateChange
+
+class  tagCMDogzBattleStateChange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("BatteState", c_ubyte),    #助战状态,0-召回,1-助战
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC2
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC2
+        self.DogzID = 0
+        self.BatteState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzBattleStateChange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C2 神兽变更助战状态 //tagCMDogzBattleStateChange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DogzID:%d,
+                                BatteState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DogzID,
+                                self.BatteState
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzBattleStateChange=tagCMDogzBattleStateChange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBattleStateChange.Cmd,m_NAtagCMDogzBattleStateChange.SubCmd))] = m_NAtagCMDogzBattleStateChange
+
+
+#------------------------------------------------------
+# A5 C3 神兽购买助战位 #tagCMDogzBuyBatteCount
+
+class  tagCMDogzBuyBatteCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC3
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC3
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzBuyBatteCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C3 神兽购买助战位 //tagCMDogzBuyBatteCount:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzBuyBatteCount=tagCMDogzBuyBatteCount()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBuyBatteCount.Cmd,m_NAtagCMDogzBuyBatteCount.SubCmd))] = m_NAtagCMDogzBuyBatteCount
+
+
+#------------------------------------------------------
+# A5 C0 神兽穿戴装备 #tagCMDogzEquipItem
+
+class  tagCMDogzEquipItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("EquipIndex", c_ubyte),    #神兽装备所在神兽背包索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC0
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC0
+        self.DogzID = 0
+        self.EquipIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzEquipItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C0 神兽穿戴装备 //tagCMDogzEquipItem:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DogzID:%d,
+                                EquipIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DogzID,
+                                self.EquipIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Cmd,m_NAtagCMDogzEquipItem.SubCmd))] = m_NAtagCMDogzEquipItem
+
+
+#------------------------------------------------------
+# A5 C4 神兽装备强化 #tagCMDogzEquipPlus
+
+class  tagCMDogzEquipPlus(Structure):
+    Head = tagHead()
+    EquipIndex = 0    #(BYTE EquipIndex)//神兽装备背包中索引
+    IndexCount = 0    #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
+    IndexList = list()    #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
+    IsDouble = 0    #(BYTE IsDouble)//是否双倍强化
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC4
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.IndexList.append(value)
+        self.IsDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC4
+        self.EquipIndex = 0
+        self.IndexCount = 0
+        self.IndexList = list()
+        self.IsDouble = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1 * self.IndexCount
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.EquipIndex)
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteBYTE(data, self.IndexList[i])
+        data = CommFunc.WriteBYTE(data, self.IsDouble)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EquipIndex:%d,
+                                IndexCount:%d,
+                                IndexList:%s,
+                                IsDouble:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.EquipIndex,
+                                self.IndexCount,
+                                "...",
+                                self.IsDouble
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzEquipPlus=tagCMDogzEquipPlus()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipPlus.Head.Cmd,m_NAtagCMDogzEquipPlus.Head.SubCmd))] = m_NAtagCMDogzEquipPlus
+
+
+#------------------------------------------------------
+# A5 C1 神兽卸下装备 #tagCMDogzUnEquipItem
+
+class  tagCMDogzUnEquipItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("EquipPlace", c_ubyte),    #卸下的装备位, 0代表卸下全部
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC1
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC1
+        self.DogzID = 0
+        self.EquipPlace = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzUnEquipItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C1 神兽卸下装备 //tagCMDogzUnEquipItem:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DogzID:%d,
+                                EquipPlace:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DogzID,
+                                self.EquipPlace
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzUnEquipItem=tagCMDogzUnEquipItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzUnEquipItem.Cmd,m_NAtagCMDogzUnEquipItem.SubCmd))] = m_NAtagCMDogzUnEquipItem
 
 
 #------------------------------------------------------
@@ -8181,114 +8784,6 @@
 
 
 #------------------------------------------------------
-# A5 64 抢红包 #tagCMGrabRedPacket
-
-class  tagCMGrabRedPacket(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    #  0抢 1 查询
-                  ("RedPacketID", c_int),    # 红包ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x64
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x64
-        self.Type = 0
-        self.RedPacketID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMGrabRedPacket)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 64 抢红包 //tagCMGrabRedPacket:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Type:%d,
-                                RedPacketID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Type,
-                                self.RedPacketID
-                                )
-        return DumpString
-
-
-m_NAtagCMGrabRedPacket=tagCMGrabRedPacket()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabRedPacket.Cmd,m_NAtagCMGrabRedPacket.SubCmd))] = m_NAtagCMGrabRedPacket
-
-
-#------------------------------------------------------
-# A5 56 守护升级 #tagCMGuardUp
-
-class  tagCMGuardUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("GuardID", c_int),    # 守护物品id
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x56
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x56
-        self.GuardID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMGuardUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 56 守护升级 //tagCMGuardUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                GuardID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.GuardID
-                                )
-        return DumpString
-
-
-m_NAtagCMGuardUp=tagCMGuardUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGuardUp.Cmd,m_NAtagCMGuardUp.SubCmd))] = m_NAtagCMGuardUp
-
-
-#------------------------------------------------------
 #A5 37 天梯增加挑战次数#tagCMHighLadderAddCount
 
 class  tagCMHighLadderAddCount(Structure):
@@ -8344,7 +8839,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("HorseID", c_ubyte),    #坐骑ID
+                  ("HorseID", c_int),    #坐骑ID
                   ("UseItemCnt", c_ubyte),    #消耗材料个数
                   ("IsAutoBuy", c_ubyte),    #是否自动购买
                   ]
@@ -8394,54 +8889,6 @@
 
 m_NAtagCMHorseUp=tagCMHorseUp()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseUp.Cmd,m_NAtagCMHorseUp.SubCmd))] = m_NAtagCMHorseUp
-
-
-#------------------------------------------------------
-# A5 5B 寻宝免费次数倒计时结束 #tagCMMagicTreasureFreeCnt
-
-class  tagCMMagicTreasureFreeCnt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x5B
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x5B
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMagicTreasureFreeCnt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 5B 寻宝免费次数倒计时结束 //tagCMMagicTreasureFreeCnt:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMMagicTreasureFreeCnt=tagCMMagicTreasureFreeCnt()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasureFreeCnt.Cmd,m_NAtagCMMagicTreasureFreeCnt.SubCmd))] = m_NAtagCMMagicTreasureFreeCnt
 
 
 #------------------------------------------------------
@@ -8501,21 +8948,20 @@
 
 
 #------------------------------------------------------
-#A5 21 抽取图鉴卡片#tagCMMonsterCardLottery
+# A5 16 法宝状态记录 #tagCMMagicWeaponState
 
-class  tagCMMonsterCardLottery(Structure):
+class  tagCMMagicWeaponState(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    #抽奖类型  0 普通 1 高级
-                  ("AutoBuy", c_ubyte),    #是否自动购买道具
+                  ("MWID", c_int),    #法宝ID
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA5
-        self.SubCmd = 0x21
+        self.SubCmd = 0x16
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -8525,35 +8971,84 @@
 
     def Clear(self):
         self.Cmd = 0xA5
-        self.SubCmd = 0x21
-        self.Type = 0
-        self.AutoBuy = 0
+        self.SubCmd = 0x16
+        self.MWID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMMonsterCardLottery)
+        return sizeof(tagCMMagicWeaponState)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A5 21 抽取图鉴卡片//tagCMMonsterCardLottery:
+        DumpString = '''// A5 16 法宝状态记录 //tagCMMagicWeaponState:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Type:%d,
-                                AutoBuy:%d
+                                MWID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Type,
-                                self.AutoBuy
+                                self.MWID
                                 )
         return DumpString
 
 
-m_NAtagCMMonsterCardLottery=tagCMMonsterCardLottery()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMonsterCardLottery.Cmd,m_NAtagCMMonsterCardLottery.SubCmd))] = m_NAtagCMMonsterCardLottery
+m_NAtagCMMagicWeaponState=tagCMMagicWeaponState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponState.Cmd,m_NAtagCMMagicWeaponState.SubCmd))] = m_NAtagCMMagicWeaponState
+
+
+#------------------------------------------------------
+# A5 15 提升法宝等级 #tagCMMagicWeaponUp
+
+class  tagCMMagicWeaponUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MWID", c_int),    #法宝ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x15
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x15
+        self.MWID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMagicWeaponUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 15 提升法宝等级 //tagCMMagicWeaponUp:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MWID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MWID
+                                )
+        return DumpString
+
+
+m_NAtagCMMagicWeaponUp=tagCMMagicWeaponUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponUp.Cmd,m_NAtagCMMagicWeaponUp.SubCmd))] = m_NAtagCMMagicWeaponUp
 
 
 #------------------------------------------------------
@@ -8720,7 +9215,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    #选择索引
+                  ("Index", c_int),    #选择索引
                   ]
 
     def __init__(self):
@@ -8762,54 +9257,6 @@
 
 m_NAtagPlayerChooseHorse=tagPlayerChooseHorse()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerChooseHorse.Cmd,m_NAtagPlayerChooseHorse.SubCmd))] = m_NAtagPlayerChooseHorse
-
-
-#------------------------------------------------------
-# A5 61 掷骰子 #tagCMPlayerDice
-
-class  tagCMPlayerDice(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x61
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x61
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMPlayerDice)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 61 掷骰子 //tagCMPlayerDice:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMPlayerDice=tagCMPlayerDice()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPlayerDice.Cmd,m_NAtagCMPlayerDice.SubCmd))] = m_NAtagCMPlayerDice
 
 
 #------------------------------------------------------
@@ -8947,65 +9394,9 @@
 
 
 #------------------------------------------------------
-#A5 3A    新符文系统符文升级#tagCMPropEnhanceLVUp
+# A5 14 祈福丹药 #tagCMPrayElixir
 
-class  tagCMPropEnhanceLVUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("index", c_ubyte),    #要升级的符文索引 (从0开始)
-                  ("count", c_ushort),    #连续升级次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x3A
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x3A
-        self.index = 0
-        self.count = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMPropEnhanceLVUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 3A    新符文系统符文升级//tagCMPropEnhanceLVUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                index:%d,
-                                count:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.index,
-                                self.count
-                                )
-        return DumpString
-
-
-m_NAtagCMPropEnhanceLVUp=tagCMPropEnhanceLVUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPropEnhanceLVUp.Cmd,m_NAtagCMPropEnhanceLVUp.SubCmd))] = m_NAtagCMPropEnhanceLVUp
-
-
-#------------------------------------------------------
-#A5 13 查询表情包开通状态#tagPyCMQueryFacePackage
-
-class  tagPyCMQueryFacePackage(Structure):
+class  tagCMPrayElixir(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
@@ -9015,7 +9406,7 @@
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA5
-        self.SubCmd = 0x13
+        self.SubCmd = 0x14
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9025,17 +9416,17 @@
 
     def Clear(self):
         self.Cmd = 0xA5
-        self.SubCmd = 0x13
+        self.SubCmd = 0x14
         return
 
     def GetLength(self):
-        return sizeof(tagPyCMQueryFacePackage)
+        return sizeof(tagCMPrayElixir)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A5 13 查询表情包开通状态//tagPyCMQueryFacePackage:
+        DumpString = '''// A5 14 祈福丹药 //tagCMPrayElixir:
                                 Cmd:%s,
                                 SubCmd:%s
                                 '''\
@@ -9046,8 +9437,8 @@
         return DumpString
 
 
-m_NAtagPyCMQueryFacePackage=tagPyCMQueryFacePackage()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMQueryFacePackage.Cmd,m_NAtagPyCMQueryFacePackage.SubCmd))] = m_NAtagPyCMQueryFacePackage
+m_NAtagCMPrayElixir=tagCMPrayElixir()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPrayElixir.Cmd,m_NAtagCMPrayElixir.SubCmd))] = m_NAtagCMPrayElixir
 
 
 #------------------------------------------------------
@@ -9144,54 +9535,6 @@
 
 m_NAtagCMQueryOnlinePrizeInfo=tagCMQueryOnlinePrizeInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryOnlinePrizeInfo.Cmd,m_NAtagCMQueryOnlinePrizeInfo.SubCmd))] = m_NAtagCMQueryOnlinePrizeInfo
-
-
-#------------------------------------------------------
-#A5 20 查询图鉴兑换点数#tagCMQueryPlayerMonsterCurrency
-
-class  tagCMQueryPlayerMonsterCurrency(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x20
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x20
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMQueryPlayerMonsterCurrency)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 20 查询图鉴兑换点数//tagCMQueryPlayerMonsterCurrency:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMQueryPlayerMonsterCurrency=tagCMQueryPlayerMonsterCurrency()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryPlayerMonsterCurrency.Cmd,m_NAtagCMQueryPlayerMonsterCurrency.SubCmd))] = m_NAtagCMQueryPlayerMonsterCurrency
 
 
 #------------------------------------------------------
@@ -9534,7 +9877,9 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("TreasureNum", c_ubyte),    # 自定义的寻宝编号
+                  ("TreasureType", c_ubyte),    #寻宝类型
+                  ("TreasureIndex", c_ubyte),    #寻宝索引
+                  ("CostType", c_ubyte),    #消耗类型:0-默认仙玉;1-免费次数;2-寻宝道具
                   ]
 
     def __init__(self):
@@ -9551,7 +9896,9 @@
     def Clear(self):
         self.Cmd = 0xA5
         self.SubCmd = 0x68
-        self.TreasureNum = 0
+        self.TreasureType = 0
+        self.TreasureIndex = 0
+        self.CostType = 0
         return
 
     def GetLength(self):
@@ -9564,12 +9911,16 @@
         DumpString = '''// A5 68 请求寻宝 //tagCMRequestTreasure:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                TreasureNum:%d
+                                TreasureType:%d,
+                                TreasureIndex:%d,
+                                CostType:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.TreasureNum
+                                self.TreasureType,
+                                self.TreasureIndex,
+                                self.CostType
                                 )
         return DumpString
 
@@ -9896,21 +10247,19 @@
 
 
 #------------------------------------------------------
-#A5 33 开始魔方寻宝 #tagCMMagicTreasure
+# A5 11 试用首充武器 #tagCMTryFirstGoldItem
 
-class  tagCMMagicTreasure(Structure):
+class  tagCMTryFirstGoldItem(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    #寻宝类型 1玩家装备 2玩家首饰 3坐骑装备
-                  ("Count", c_ubyte),    #寻宝次数
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA5
-        self.SubCmd = 0x33
+        self.SubCmd = 0x11
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9920,35 +10269,29 @@
 
     def Clear(self):
         self.Cmd = 0xA5
-        self.SubCmd = 0x33
-        self.Type = 0
-        self.Count = 0
+        self.SubCmd = 0x11
         return
 
     def GetLength(self):
-        return sizeof(tagCMMagicTreasure)
+        return sizeof(tagCMTryFirstGoldItem)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A5 33 开始魔方寻宝 //tagCMMagicTreasure:
+        DumpString = '''// A5 11 试用首充武器 //tagCMTryFirstGoldItem:
                                 Cmd:%s,
-                                SubCmd:%s,
-                                Type:%d,
-                                Count:%d
+                                SubCmd:%s
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd,
-                                self.Type,
-                                self.Count
+                                self.SubCmd
                                 )
         return DumpString
 
 
-m_NAtagCMMagicTreasure=tagCMMagicTreasure()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasure.Cmd,m_NAtagCMMagicTreasure.SubCmd))] = m_NAtagCMMagicTreasure
+m_NAtagCMTryFirstGoldItem=tagCMTryFirstGoldItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTryFirstGoldItem.Cmd,m_NAtagCMTryFirstGoldItem.SubCmd))] = m_NAtagCMTryFirstGoldItem
 
 
 #------------------------------------------------------
@@ -10001,6 +10344,58 @@
 
 m_NAtagCMUnLockBirthChartHole=tagCMUnLockBirthChartHole()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnLockBirthChartHole.Cmd,m_NAtagCMUnLockBirthChartHole.SubCmd))] = m_NAtagCMUnLockBirthChartHole
+
+
+#------------------------------------------------------
+# A5 13 解锁符印孔 #tagCMUnlockRuneHole
+
+class  tagCMUnlockRuneHole(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("HoleIndex", c_ubyte),    # 孔索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x13
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x13
+        self.HoleIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMUnlockRuneHole)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 13 解锁符印孔 //tagCMUnlockRuneHole:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                HoleIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.HoleIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMUnlockRuneHole=tagCMUnlockRuneHole()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnlockRuneHole.Cmd,m_NAtagCMUnlockRuneHole.SubCmd))] = m_NAtagCMUnlockRuneHole
 
 
 #------------------------------------------------------
@@ -10593,73 +10988,6 @@
 
 
 #------------------------------------------------------
-# A7 03 宠物精华分解 #tagCMPetAddClassExp
-
-class  tagCMPetAddClassExp(Structure):
-    Head = tagHead()
-    IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数
-    IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.IndexCnt):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.IndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x03
-        self.IndexCnt = 0
-        self.IndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2 * self.IndexCnt
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.IndexCnt)
-        for i in range(self.IndexCnt):
-            data = CommFunc.WriteWORD(data, self.IndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                IndexCnt:%d,
-                                IndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.IndexCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMPetAddClassExp=tagCMPetAddClassExp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetAddClassExp.Head.Cmd,m_NAtagCMPetAddClassExp.Head.SubCmd))] = m_NAtagCMPetAddClassExp
-
-
-#------------------------------------------------------
 # A7 04 宠物升阶 #tagCMPetClassUP
 
 class  tagCMPetClassUP(Structure):
@@ -10668,6 +10996,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("PetItemIndex", c_ubyte),    #宠物数据背包索引
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
                   ]
 
     def __init__(self):
@@ -10685,6 +11014,7 @@
         self.Cmd = 0xA7
         self.SubCmd = 0x04
         self.PetItemIndex = 0
+        self.UseItemCnt = 0
         return
 
     def GetLength(self):
@@ -10697,137 +11027,20 @@
         DumpString = '''// A7 04 宠物升阶 //tagCMPetClassUP:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PetItemIndex:%d
+                                PetItemIndex:%d,
+                                UseItemCnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PetItemIndex
+                                self.PetItemIndex,
+                                self.UseItemCnt
                                 )
         return DumpString
 
 
 m_NAtagCMPetClassUP=tagCMPetClassUP()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetClassUP.Cmd,m_NAtagCMPetClassUP.SubCmd))] = m_NAtagCMPetClassUP
-
-
-#------------------------------------------------------
-# A7 01 灵兽装备吸收 #tagCMPetEatEquip
-
-class  tagCMPetEatEquip(Structure):
-    Head = tagHead()
-    IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数
-    IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.IndexCnt):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.IndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x01
-        self.IndexCnt = 0
-        self.IndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2 * self.IndexCnt
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.IndexCnt)
-        for i in range(self.IndexCnt):
-            data = CommFunc.WriteWORD(data, self.IndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                IndexCnt:%d,
-                                IndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.IndexCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMPetEatEquip=tagCMPetEatEquip()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetEatEquip.Head.Cmd,m_NAtagCMPetEatEquip.Head.SubCmd))] = m_NAtagCMPetEatEquip
-
-
-#------------------------------------------------------
-# A7 05 宠物设置数据 #tagCMPetSeting
-
-class  tagCMPetSeting(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Seting", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA7
-        self.SubCmd = 0x05
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA7
-        self.SubCmd = 0x05
-        self.Seting = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMPetSeting)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A7 05 宠物设置数据 //tagCMPetSeting:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Seting:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Seting
-                                )
-        return DumpString
-
-
-m_NAtagCMPetSeting=tagCMPetSeting()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetSeting.Cmd,m_NAtagCMPetSeting.SubCmd))] = m_NAtagCMPetSeting
 
 
 #------------------------------------------------------
@@ -11307,21 +11520,20 @@
 
 
 #------------------------------------------------------
-#AB 13 嘉年华抽奖 #tagCMCarnivalDraw
+# AB 12 抢红包 #tagCMGrabFamilyRedPacket
 
-class  tagCMCarnivalDraw(Structure):
+class  tagCMGrabFamilyRedPacket(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    # 抽奖索引
-                  ("Type", c_ubyte),    # 抽奖类型 0:只获取结果,1:获取奖励,2:获取结果和奖励
+                  ("RedPaketID", c_int),    # 红包ID
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xAB
-        self.SubCmd = 0x13
+        self.SubCmd = 0x12
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -11331,35 +11543,32 @@
 
     def Clear(self):
         self.Cmd = 0xAB
-        self.SubCmd = 0x13
-        self.Index = 0
-        self.Type = 0
+        self.SubCmd = 0x12
+        self.RedPaketID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMCarnivalDraw)
+        return sizeof(tagCMGrabFamilyRedPacket)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//AB 13 嘉年华抽奖 //tagCMCarnivalDraw:
+        DumpString = '''// AB 12 抢红包 //tagCMGrabFamilyRedPacket:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Index:%d,
-                                Type:%d
+                                RedPaketID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Index,
-                                self.Type
+                                self.RedPaketID
                                 )
         return DumpString
 
 
-m_NAtagCMCarnivalDraw=tagCMCarnivalDraw()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCarnivalDraw.Cmd,m_NAtagCMCarnivalDraw.SubCmd))] = m_NAtagCMCarnivalDraw
+m_NAtagCMGrabFamilyRedPacket=tagCMGrabFamilyRedPacket()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabFamilyRedPacket.Cmd,m_NAtagCMGrabFamilyRedPacket.SubCmd))] = m_NAtagCMGrabFamilyRedPacket
 
 
 #------------------------------------------------------
@@ -11765,66 +11974,6 @@
 
 
 #------------------------------------------------------
-# AB 09 老虎机抽奖 #tagCMSlotsTake
-
-class  tagCMSlotsTake(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    # 老虎机类型
-                  ("Num", c_int),    # 抽奖次数
-                  ("IsAutoBuy", c_ubyte),    # 是否自动购买材料 0-否 1-是
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x09
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x09
-        self.Type = 0
-        self.Num = 0
-        self.IsAutoBuy = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMSlotsTake)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 09 老虎机抽奖 //tagCMSlotsTake:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Type:%d,
-                                Num:%d,
-                                IsAutoBuy:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Type,
-                                self.Num,
-                                self.IsAutoBuy
-                                )
-        return DumpString
-
-
-m_NAtagCMSlotsTake=tagCMSlotsTake()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSlotsTake.Cmd,m_NAtagCMSlotsTake.SubCmd))] = m_NAtagCMSlotsTake
-
-
-#------------------------------------------------------
 # AB 0C 摇骰子 #tagCMDiceEx
 
 class  tagCMDiceEx(Structure):
@@ -11874,54 +12023,6 @@
 
 m_NAtagCMDiceEx=tagCMDiceEx()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDiceEx.Cmd,m_NAtagCMDiceEx.SubCmd))] = m_NAtagCMDiceEx
-
-
-#------------------------------------------------------
-# AB 08 许愿 #tagCMWishingTree
-
-class  tagCMWishingTree(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x08
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x08
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMWishingTree)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 08 许愿 //tagCMWishingTree:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMWishingTree=tagCMWishingTree()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWishingTree.Cmd,m_NAtagCMWishingTree.SubCmd))] = m_NAtagCMWishingTree
 
 
 #------------------------------------------------------
@@ -12349,150 +12450,6 @@
 
 
 #------------------------------------------------------
-#B0 12 开始转转乐 #tagBeginGambling
-
-class  tagBeginGambling(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x12
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x12
-        return
-
-    def GetLength(self):
-        return sizeof(tagBeginGambling)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 12 开始转转乐 //tagBeginGambling:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagBeginGambling=tagBeginGambling()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagBeginGambling.Cmd,m_NAtagBeginGambling.SubCmd))] = m_NAtagBeginGambling
-
-
-#------------------------------------------------------
-#B0 13 转转乐商人升级 #tagGamblingMerchantLvUp
-
-class  tagGamblingMerchantLvUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x13
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x13
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingMerchantLvUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 13 转转乐商人升级 //tagGamblingMerchantLvUp:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagGamblingMerchantLvUp=tagGamblingMerchantLvUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingMerchantLvUp.Cmd,m_NAtagGamblingMerchantLvUp.SubCmd))] = m_NAtagGamblingMerchantLvUp
-
-
-#------------------------------------------------------
-#B0 14 转转乐换盘 #tagGamblingDiskChange
-
-class  tagGamblingDiskChange(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x14
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x14
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingDiskChange)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 14 转转乐换盘 //tagGamblingDiskChange:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagGamblingDiskChange=tagGamblingDiskChange()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingDiskChange.Cmd,m_NAtagGamblingDiskChange.SubCmd))] = m_NAtagGamblingDiskChange
-
-
-#------------------------------------------------------
 # B0 50 钓鱼收杆 #tagCMDoFish
 
 class  tagCMDoFish(Structure):
@@ -12785,6 +12742,54 @@
 
 
 #------------------------------------------------------
+# B1 04 客户端发送开始副本 #tagCMClientStartFB
+
+class  tagCMClientStartFB(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        self.SubCmd = 0x04
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB1
+        self.SubCmd = 0x04
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMClientStartFB)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 04 客户端发送开始副本 //tagCMClientStartFB:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMClientStartFB=tagCMClientStartFB()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMClientStartFB.Cmd,m_NAtagCMClientStartFB.SubCmd))] = m_NAtagCMClientStartFB
+
+
+#------------------------------------------------------
 # B1 02 领取多倍副本奖励 #tagCMGetMultiFBPrize
 
 class  tagCMGetMultiFBPrize(Structure):
@@ -12949,6 +12954,77 @@
 
 
 #------------------------------------------------------
+#B2 05 推送提醒设置 #tagCMPushNotificationsSetting
+
+class  tagCMPushNotificationsSetting(Structure):
+    Head = tagHead()
+    OnoffBit = 0    #(DWORD OnoffBit)// 按位约定开关
+    TimeLen = 0    #(BYTE TimeLen)
+    TimeStr = ""    #(String TimeStr)// 时间字符串  01:02-05:00
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OnoffBit,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x05
+        self.OnoffBit = 0
+        self.TimeLen = 0
+        self.TimeStr = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.TimeStr)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OnoffBit)
+        data = CommFunc.WriteBYTE(data, self.TimeLen)
+        data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OnoffBit:%d,
+                                TimeLen:%d,
+                                TimeStr:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OnoffBit,
+                                self.TimeLen,
+                                self.TimeStr
+                                )
+        return DumpString
+
+
+m_NAtagCMPushNotificationsSetting=tagCMPushNotificationsSetting()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPushNotificationsSetting.Head.Cmd,m_NAtagCMPushNotificationsSetting.Head.SubCmd))] = m_NAtagCMPushNotificationsSetting
+
+
+#------------------------------------------------------
 #B2 02 视野缩放 #tagCMSightZoom
 
 class  tagCMSightZoom(Structure):

--
Gitblit v1.8.0