From 09d233e9f8a9586d63df4562a4209a5d7c97355f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 14 五月 2019 21:08:27 +0800
Subject: [PATCH] 6788 【后端】【2.0】增加灵根丹

---
 Tool/Robot/Protocol/PacketsSendPY.py | 4267 ++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 2,615 insertions(+), 1,652 deletions(-)

diff --git a/Tool/Robot/Protocol/PacketsSendPY.py b/Tool/Robot/Protocol/PacketsSendPY.py
index 0af2d67..14cdda3 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
 
 
 #------------------------------------------------------
@@ -1137,6 +1234,73 @@
 
 
 #------------------------------------------------------
+# A9 04 查询boss信息 #tagCGQueryBossInfo
+
+class  tagCGQueryBossInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)//数量
+    BossIDList = list()    #(vector<DWORD> BossIDList)//boosid
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.BossIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x04
+        self.Count = 0
+        self.BossIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.Count
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteDWORD(data, self.BossIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BossIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCGQueryBossInfo=tagCGQueryBossInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryBossInfo.Head.Cmd,m_NAtagCGQueryBossInfo.Head.SubCmd))] = m_NAtagCGQueryBossInfo
+
+
+#------------------------------------------------------
 #A9 A1 查询玩家补偿#tagCGQueryCompensation
 
 class  tagCGQueryCompensation(Structure):
@@ -1347,19 +1511,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 +1533,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 +1641,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 +1686,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 +2205,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):
@@ -2400,6 +2711,62 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 # B9 05 查询推荐组队的附近玩家 #tagCGQueryRecommendNearbyPlayer
 
 class  tagCGQueryRecommendNearbyPlayer(Structure):
@@ -2616,20 +2983,21 @@
 
 
 #------------------------------------------------------
-#C0 11 上传数据的活动类型 #tagActionMergeRegister
+# C0 01 查看跨服竞技场赛季排行榜 #tagCGViewCrossPKBillboard
 
-class  tagActionMergeRegister(Structure):
+class  tagCGViewCrossPKBillboard(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("ActionType", c_ubyte),    #活动类型        
+                  ("ZoneID", c_ubyte),    # 赛区ID    
+                  ("SeasonID", c_ubyte),    # 赛季ID    
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xC0
-        self.SubCmd = 0x11
+        self.SubCmd = 0x01
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -2639,49 +3007,52 @@
 
     def Clear(self):
         self.Cmd = 0xC0
-        self.SubCmd = 0x11
-        self.ActionType = 0
+        self.SubCmd = 0x01
+        self.ZoneID = 0
+        self.SeasonID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagActionMergeRegister)
+        return sizeof(tagCGViewCrossPKBillboard)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//C0 11 上传数据的活动类型 //tagActionMergeRegister:
+        DumpString = '''// C0 01 查看跨服竞技场赛季排行榜 //tagCGViewCrossPKBillboard:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                ActionType:%d
+                                ZoneID:%d,
+                                SeasonID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.ActionType
+                                self.ZoneID,
+                                self.SeasonID
                                 )
         return DumpString
 
 
-m_NAtagActionMergeRegister=tagActionMergeRegister()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagActionMergeRegister.Cmd,m_NAtagActionMergeRegister.SubCmd))] = m_NAtagActionMergeRegister
+m_NAtagCGViewCrossPKBillboard=tagCGViewCrossPKBillboard()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossPKBillboard.Cmd,m_NAtagCGViewCrossPKBillboard.SubCmd))] = m_NAtagCGViewCrossPKBillboard
 
 
 #------------------------------------------------------
-#C0 12 跨服上传数据账号查询 #tagMergeRegisterAccQuery
+# C0 02 查看跨服玩家信息 #tagCGViewCrossPlayerInfo
 
-class  tagMergeRegisterAccQuery(Structure):
+class  tagCGViewCrossPlayerInfo(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("ActionType", c_ubyte),    #活动类型        
+                  ("PlayerID", c_int),    # 跨服玩家ID
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xC0
-        self.SubCmd = 0x12
+        self.SubCmd = 0x02
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -2691,80 +3062,32 @@
 
     def Clear(self):
         self.Cmd = 0xC0
-        self.SubCmd = 0x12
-        self.ActionType = 0
+        self.SubCmd = 0x02
+        self.PlayerID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMergeRegisterAccQuery)
+        return sizeof(tagCGViewCrossPlayerInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//C0 12 跨服上传数据账号查询 //tagMergeRegisterAccQuery:
+        DumpString = '''// C0 02 查看跨服玩家信息 //tagCGViewCrossPlayerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                ActionType:%d
+                                PlayerID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.ActionType
+                                self.PlayerID
                                 )
         return DumpString
 
 
-m_NAtagMergeRegisterAccQuery=tagMergeRegisterAccQuery()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeRegisterAccQuery.Cmd,m_NAtagMergeRegisterAccQuery.SubCmd))] = m_NAtagMergeRegisterAccQuery
-
-
-#------------------------------------------------------
-# C0 15 通知即将登录跳转到跨服服务器 #tagCGGotoMergeServer
-
-class  tagCGGotoMergeServer(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        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 = 0xC0
-        self.SubCmd = 0x15
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGGotoMergeServer)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 15 通知即将登录跳转到跨服服务器 //tagCGGotoMergeServer:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCGGotoMergeServer=tagCGGotoMergeServer()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGotoMergeServer.Cmd,m_NAtagCGGotoMergeServer.SubCmd))] = m_NAtagCGGotoMergeServer
+m_NAtagCGViewCrossPlayerInfo=tagCGViewCrossPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossPlayerInfo.Cmd,m_NAtagCGViewCrossPlayerInfo.SubCmd))] = m_NAtagCGViewCrossPlayerInfo
 
 
 #------------------------------------------------------
@@ -3748,7 +4071,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 +4087,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 +4109,7 @@
         length += 1
         length += 1
         length += 1
-        length += 1
+        length += 2
         length += len(self.Text)
 
         return length
@@ -3797,7 +4120,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 +4273,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
 
 
 #------------------------------------------------------
@@ -4310,6 +4778,58 @@
 
 
 #------------------------------------------------------
+# A2 30 设置聊天气泡框 #tagCMSetChatBubbleBox
+
+class  tagCMSetChatBubbleBox(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BubbleBoxType", c_ubyte),    #气泡框类型
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA2
+        self.SubCmd = 0x30
+        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 = 0x30
+        self.BubbleBoxType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMSetChatBubbleBox)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A2 30 设置聊天气泡框 //tagCMSetChatBubbleBox:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BubbleBoxType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BubbleBoxType
+                                )
+        return DumpString
+
+
+m_NAtagCMSetChatBubbleBox=tagCMSetChatBubbleBox()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSetChatBubbleBox.Cmd,m_NAtagCMSetChatBubbleBox.SubCmd))] = m_NAtagCMSetChatBubbleBox
+
+
+#------------------------------------------------------
 # A2 22 设置引导成功 #tagCMSetGuideOK
 
 class  tagCMSetGuideOK(Structure):
@@ -4363,6 +4883,82 @@
 
 m_NAtagCMSetGuideOK=tagCMSetGuideOK()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSetGuideOK.Cmd,m_NAtagCMSetGuideOK.SubCmd))] = m_NAtagCMSetGuideOK
+
+
+#------------------------------------------------------
+# A2 29 设置小助手 #tagCMSetLittleHelper
+
+class  tagCMSetLittleHelper(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("SetNum", c_ubyte),    # 托管功能设置编号1~20,每个编号对应的托管功能前端自定义
+                  ("Value1", c_int),    # 自定义值1
+                  ("Value2", c_int),    # 自定义值2
+                  ("Value3", c_int),    # 自定义值3
+                  ("Value4", c_int),    # 自定义值4
+                  ("Value5", c_int),    # 自定义值5
+                  ("Value6", c_int),    # 自定义值6
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA2
+        self.SubCmd = 0x29
+        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 = 0x29
+        self.SetNum = 0
+        self.Value1 = 0
+        self.Value2 = 0
+        self.Value3 = 0
+        self.Value4 = 0
+        self.Value5 = 0
+        self.Value6 = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMSetLittleHelper)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A2 29 设置小助手 //tagCMSetLittleHelper:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                SetNum:%d,
+                                Value1:%d,
+                                Value2:%d,
+                                Value3:%d,
+                                Value4:%d,
+                                Value5:%d,
+                                Value6:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.SetNum,
+                                self.Value1,
+                                self.Value2,
+                                self.Value3,
+                                self.Value4,
+                                self.Value5,
+                                self.Value6
+                                )
+        return DumpString
+
+
+m_NAtagCMSetLittleHelper=tagCMSetLittleHelper()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSetLittleHelper.Cmd,m_NAtagCMSetLittleHelper.SubCmd))] = m_NAtagCMSetLittleHelper
 
 
 #------------------------------------------------------
@@ -4470,6 +5066,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 +5210,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 +5337,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,9 +5517,10 @@
 
 class  tagCMEquipDecompose(Structure):
     Head = tagHead()
-    PackType = 0    #(BYTE PackType)//背包类型
-    IndexCount = 0    #(BYTE IndexCount)//材料所在背包索引的数量
-    IndexList = list()    #(vector<BYTE> IndexList)//材料所在背包索引列表
+    Count = 0    #(BYTE Count)//材料所在背包索引的数量
+    IndexList = list()    #(vector<WORD> IndexList)//材料所在背包索引列表
+    ItemIDList = list()    #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表
+    IsAuto = 0    #(BYTE IsAuto)//是否自动分解
     data = None
 
     def __init__(self):
@@ -4784,11 +5532,14 @@
     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)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
             self.IndexList.append(value)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.ItemIDList.append(value)
+        self.IsAuto,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -4796,41 +5547,47 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x2C
-        self.PackType = 0
-        self.IndexCount = 0
+        self.Count = 0
         self.IndexList = list()
+        self.ItemIDList = list()
+        self.IsAuto = 0
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
+        length += 2 * self.Count
+        length += 4 * self.Count
         length += 1
-        length += 1 * self.IndexCount
 
         return length
 
     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])
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteWORD(data, self.IndexList[i])
+        for i in range(self.Count):
+            data = CommFunc.WriteDWORD(data, self.ItemIDList[i])
+        data = CommFunc.WriteBYTE(data, self.IsAuto)
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                PackType:%d,
-                                IndexCount:%d,
-                                IndexList:%s
+                                Count:%d,
+                                IndexList:%s,
+                                ItemIDList:%s,
+                                IsAuto:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.PackType,
-                                self.IndexCount,
-                                "..."
+                                self.Count,
+                                "...",
+                                "...",
+                                self.IsAuto
                                 )
         return DumpString
 
@@ -5303,19 +6060,14 @@
 
 
 #------------------------------------------------------
-#A3 13 装备继承#tagCMInheritEquip
+# A3 13 物品拆解 #tagCMItemDecompound
 
-class  tagCMInheritEquip(Structure):
+class  tagCMItemDecompound(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),    #是否继承主装备卓越属性
+                  ("Index", c_ubyte),    # 拆解物品所在背包索引
                   ]
 
     def __init__(self):
@@ -5332,46 +6084,31 @@
     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
+        self.Index = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMInheritEquip)
+        return sizeof(tagCMItemDecompound)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A3 13 装备继承//tagCMInheritEquip:
+        DumpString = '''// A3 13 物品拆解 //tagCMItemDecompound:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                SrcPackType:%d,
-                                SrcEquipIndex:%d,
-                                DesPackType:%d,
-                                DesEquipIndex:%d,
-                                AutoBuy:%d,
-                                InheritGreatAttr:%d
+                                Index:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.SrcPackType,
-                                self.SrcEquipIndex,
-                                self.DesPackType,
-                                self.DesEquipIndex,
-                                self.AutoBuy,
-                                self.InheritGreatAttr
+                                self.Index
                                 )
         return DumpString
 
 
-m_NAtagCMInheritEquip=tagCMInheritEquip()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMInheritEquip.Cmd,m_NAtagCMInheritEquip.SubCmd))] = m_NAtagCMInheritEquip
+m_NAtagCMItemDecompound=tagCMItemDecompound()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMItemDecompound.Cmd,m_NAtagCMItemDecompound.SubCmd))] = m_NAtagCMItemDecompound
 
 
 #------------------------------------------------------
@@ -5439,6 +6176,83 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 #A3 03 物品合成 #tagCMItemCompound
 
 class  tagCMItemCompound(Structure):
@@ -5452,6 +6266,8 @@
     AddonsItemIndexCnt = 0    #(BYTE AddonsItemIndexCnt)// 附加物品在背包中索引个数
     AddonsItemIndex = list()    #(vector<BYTE> AddonsItemIndex)// 附加物品在背包的索引列表
     AddonsItemCount = list()    #(vector<BYTE> AddonsItemCount)// 附加物品在背包的索引对应扣除数量列表
+    RateIncreaseItemIndexCnt = 0    #(BYTE RateIncreaseItemIndexCnt)// 提升概率物品在背包中索引个数
+    RateIncreaseItemIndex = list()    #(vector<BYTE> RateIncreaseItemIndex)// 提升概率物品在背包的索引列表
     data = None
 
     def __init__(self):
@@ -5480,6 +6296,10 @@
         for i in range(self.AddonsItemIndexCnt):
             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
             self.AddonsItemCount.append(value)
+        self.RateIncreaseItemIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RateIncreaseItemIndexCnt):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.RateIncreaseItemIndex.append(value)
         return _pos
 
     def Clear(self):
@@ -5496,6 +6316,8 @@
         self.AddonsItemIndexCnt = 0
         self.AddonsItemIndex = list()
         self.AddonsItemCount = list()
+        self.RateIncreaseItemIndexCnt = 0
+        self.RateIncreaseItemIndex = list()
         return
 
     def GetLength(self):
@@ -5510,6 +6332,8 @@
         length += 1
         length += 1 * self.AddonsItemIndexCnt
         length += 1 * self.AddonsItemIndexCnt
+        length += 1
+        length += 1 * self.RateIncreaseItemIndexCnt
 
         return length
 
@@ -5529,6 +6353,9 @@
             data = CommFunc.WriteBYTE(data, self.AddonsItemIndex[i])
         for i in range(self.AddonsItemIndexCnt):
             data = CommFunc.WriteBYTE(data, self.AddonsItemCount[i])
+        data = CommFunc.WriteBYTE(data, self.RateIncreaseItemIndexCnt)
+        for i in range(self.RateIncreaseItemIndexCnt):
+            data = CommFunc.WriteBYTE(data, self.RateIncreaseItemIndex[i])
         return data
 
     def OutputString(self):
@@ -5542,7 +6369,9 @@
                                 FixedItemIndex:%s,
                                 AddonsItemIndexCnt:%d,
                                 AddonsItemIndex:%s,
-                                AddonsItemCount:%s
+                                AddonsItemCount:%s,
+                                RateIncreaseItemIndexCnt:%d,
+                                RateIncreaseItemIndex:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -5554,6 +6383,8 @@
                                 "...",
                                 self.AddonsItemIndexCnt,
                                 "...",
+                                "...",
+                                self.RateIncreaseItemIndexCnt,
                                 "..."
                                 )
         return DumpString
@@ -5673,62 +6504,6 @@
 
 m_NAtagCMSuiteDecompose=tagCMSuiteDecompose()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSuiteDecompose.Cmd,m_NAtagCMSuiteDecompose.SubCmd))] = m_NAtagCMSuiteDecompose
-
-
-#------------------------------------------------------
-# 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
 
 
 #------------------------------------------------------
@@ -5926,6 +6701,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 +6802,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 +6862,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 +7051,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("HorseID", c_ubyte),    #坐骑ID
+                  ("HorseID", c_int),    #坐骑ID
                   ]
 
     def __init__(self):
@@ -6498,6 +7149,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
 
 
 #------------------------------------------------------
@@ -6629,8 +7332,9 @@
                   ("MapID", c_int),    
                   ("LineID", c_ushort),    
                   ("Cnt", c_ubyte),    # 扫荡次数
-                  ("IsFinish", c_ubyte),    # 是否立即完成
+                  ("IsFinish", c_ubyte),    # 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
                   ("DataEx", c_int),    #附带信息
+                  ("IsLittleHelper", c_ubyte),    # 是否小助手扫荡
                   ]
 
     def __init__(self):
@@ -6652,6 +7356,7 @@
         self.Cnt = 0
         self.IsFinish = 0
         self.DataEx = 0
+        self.IsLittleHelper = 0
         return
 
     def GetLength(self):
@@ -6668,7 +7373,8 @@
                                 LineID:%d,
                                 Cnt:%d,
                                 IsFinish:%d,
-                                DataEx:%d
+                                DataEx:%d,
+                                IsLittleHelper:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -6677,7 +7383,8 @@
                                 self.LineID,
                                 self.Cnt,
                                 self.IsFinish,
-                                self.DataEx
+                                self.DataEx,
+                                self.IsLittleHelper
                                 )
         return DumpString
 
@@ -6964,58 +7671,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 +7720,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 +8180,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):
@@ -7797,6 +8344,331 @@
 
 
 #------------------------------------------------------
+# 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):
+    Head = tagHead()
+    DogzID = 0    #(BYTE DogzID)// 神兽ID
+    EquipIndexCount = 0    #(BYTE EquipIndexCount)
+    EquipIndexList = list()    #(vector<BYTE> EquipIndexList)//神兽装备所在神兽背包索引列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC0
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.DogzID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.EquipIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.EquipIndexCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.EquipIndexList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC0
+        self.DogzID = 0
+        self.EquipIndexCount = 0
+        self.EquipIndexList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1 * self.EquipIndexCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.DogzID)
+        data = CommFunc.WriteBYTE(data, self.EquipIndexCount)
+        for i in range(self.EquipIndexCount):
+            data = CommFunc.WriteBYTE(data, self.EquipIndexList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                DogzID:%d,
+                                EquipIndexCount:%d,
+                                EquipIndexList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.DogzID,
+                                self.EquipIndexCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Head.Cmd,m_NAtagCMDogzEquipItem.Head.SubCmd))] = m_NAtagCMDogzEquipItem
+
+
+#------------------------------------------------------
+# A5 C4 神兽装备强化 #tagCMDogzEquipPlus
+
+class  tagCMDogzEquipPlus(Structure):
+    Head = tagHead()
+    EquipIndex = 0    #(BYTE EquipIndex)//神兽装备背包中索引
+    IndexCount = 0    #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
+    IndexList = list()    #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
+    IndexUseCountList = list()    #(vector<DWORD> IndexUseCountList)//材料所在神兽物品背包索引对应使用个数列表
+    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)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.IndexUseCountList.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.IndexUseCountList = list()
+        self.IsDouble = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1 * self.IndexCount
+        length += 4 * 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])
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteDWORD(data, self.IndexUseCountList[i])
+        data = CommFunc.WriteBYTE(data, self.IsDouble)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EquipIndex:%d,
+                                IndexCount:%d,
+                                IndexList:%s,
+                                IndexUseCountList:%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
+
+
+#------------------------------------------------------
 # A5 48 兑换大师等级经验 #tagCMExchangeMasterEXP
 
 class  tagCMExchangeMasterEXP(Structure):
@@ -7906,6 +8778,220 @@
 
 m_NAtagCMExchangeReiki=tagCMExchangeReiki()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExchangeReiki.Cmd,m_NAtagCMExchangeReiki.SubCmd))] = m_NAtagCMExchangeReiki
+
+
+#------------------------------------------------------
+# A5 1C 聚魂合成 #tagCMGatherSoulCompound
+
+class  tagCMGatherSoulCompound(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)
+    PackList = list()    #(vector<BYTE> PackList)//所在位置 0-背包 1-孔
+    IndexList = list()    #(vector<WORD> IndexList)//物品索引
+    TagItemID = 0    #(DWORD TagItemID)//合成目标物品ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0x1C
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.PackList.append(value)
+        for i in range(self.Cnt):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.IndexList.append(value)
+        self.TagItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0x1C
+        self.Cnt = 0
+        self.PackList = list()
+        self.IndexList = list()
+        self.TagItemID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.Cnt
+        length += 2 * self.Cnt
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteBYTE(data, self.PackList[i])
+        for i in range(self.Cnt):
+            data = CommFunc.WriteWORD(data, self.IndexList[i])
+        data = CommFunc.WriteDWORD(data, self.TagItemID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                PackList:%s,
+                                IndexList:%s,
+                                TagItemID:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "...",
+                                "...",
+                                self.TagItemID
+                                )
+        return DumpString
+
+
+m_NAtagCMGatherSoulCompound=tagCMGatherSoulCompound()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherSoulCompound.Head.Cmd,m_NAtagCMGatherSoulCompound.Head.SubCmd))] = m_NAtagCMGatherSoulCompound
+
+
+#------------------------------------------------------
+# A5 19 聚魂分解 #tagCMGatherSoulDecompose
+
+class  tagCMGatherSoulDecompose(Structure):
+    Head = tagHead()
+    IsAuto = 0    #(BYTE IsAuto)// 是否自动分解
+    Count = 0    #(BYTE Count)// 指定批量分解数,最大不超过50个
+    PlaceIndexList = list()    #(vector<WORD> PlaceIndexList)// 批量分解位置索引列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0x19
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.IsAuto,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.PlaceIndexList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0x19
+        self.IsAuto = 0
+        self.Count = 0
+        self.PlaceIndexList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 2 * self.Count
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsAuto)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteWORD(data, self.PlaceIndexList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                IsAuto:%d,
+                                Count:%d,
+                                PlaceIndexList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.IsAuto,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMGatherSoulDecompose=tagCMGatherSoulDecompose()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherSoulDecompose.Head.Cmd,m_NAtagCMGatherSoulDecompose.Head.SubCmd))] = m_NAtagCMGatherSoulDecompose
+
+
+#------------------------------------------------------
+# A5 18 聚魂升级 #tagCMGatherSoulUp
+
+class  tagCMGatherSoulUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlaceType", c_ubyte),    # 位置类型;0-背包,1-孔
+                  ("PlaceIndex", c_ushort),    # 位置索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x18
+        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 = 0x18
+        self.PlaceType = 0
+        self.PlaceIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMGatherSoulUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 18 聚魂升级 //tagCMGatherSoulUp:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlaceType:%d,
+                                PlaceIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlaceType,
+                                self.PlaceIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMGatherSoulUp=tagCMGatherSoulUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherSoulUp.Cmd,m_NAtagCMGatherSoulUp.SubCmd))] = m_NAtagCMGatherSoulUp
 
 
 #------------------------------------------------------
@@ -8069,6 +9155,58 @@
 
 
 #------------------------------------------------------
+# A5 56 神兵激活 #tagCMGodWeaponActivate
+
+class  tagCMGodWeaponActivate(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("WeaponType", c_int),    # 神兵类型
+                  ]
+
+    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.WeaponType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMGodWeaponActivate)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 56 神兵激活 //tagCMGodWeaponActivate:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                WeaponType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.WeaponType
+                                )
+        return DumpString
+
+
+m_NAtagCMGodWeaponActivate=tagCMGodWeaponActivate()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGodWeaponActivate.Cmd,m_NAtagCMGodWeaponActivate.SubCmd))] = m_NAtagCMGodWeaponActivate
+
+
+#------------------------------------------------------
 # A5 55 神兵升级 #tagCMGodWeaponPlus
 
 class  tagCMGodWeaponPlus(Structure):
@@ -8078,6 +9216,8 @@
                   ("SubCmd", c_ubyte),
                   ("WeaponType", c_int),    # 神兵类型
                   ("ItemID", c_int),    #消耗的物品ID
+                  ("ItemCount", c_ubyte),    #消耗个数,默认1
+                  ("IsAutoBuy", c_ubyte),    #是否自动购买,默认0
                   ]
 
     def __init__(self):
@@ -8096,6 +9236,8 @@
         self.SubCmd = 0x55
         self.WeaponType = 0
         self.ItemID = 0
+        self.ItemCount = 0
+        self.IsAutoBuy = 0
         return
 
     def GetLength(self):
@@ -8109,13 +9251,17 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 WeaponType:%d,
-                                ItemID:%d
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsAutoBuy:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.WeaponType,
-                                self.ItemID
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsAutoBuy
                                 )
         return DumpString
 
@@ -8181,114 +9327,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 +9382,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("HorseID", c_ubyte),    #坐骑ID
+                  ("HorseID", c_int),    #坐骑ID
                   ("UseItemCnt", c_ubyte),    #消耗材料个数
                   ("IsAutoBuy", c_ubyte),    #是否自动购买
                   ]
@@ -8394,54 +9432,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 +9491,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 +9514,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 +9758,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    #选择索引
+                  ("Index", c_int),    #选择索引
                   ]
 
     def __init__(self):
@@ -8762,54 +9800,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 +9937,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 +9949,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 +9959,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 +9980,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 +10078,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 +10420,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 +10439,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 +10454,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 +10790,19 @@
 
 
 #------------------------------------------------------
-#A5 33 开始魔方寻宝 #tagCMMagicTreasure
+# A5 17 绑玉转盘开始 #tagCMStartBindJadeWheel
 
-class  tagCMMagicTreasure(Structure):
+class  tagCMStartBindJadeWheel(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 = 0x17
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9920,35 +10812,77 @@
 
     def Clear(self):
         self.Cmd = 0xA5
-        self.SubCmd = 0x33
-        self.Type = 0
-        self.Count = 0
+        self.SubCmd = 0x17
         return
 
     def GetLength(self):
-        return sizeof(tagCMMagicTreasure)
+        return sizeof(tagCMStartBindJadeWheel)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A5 33 开始魔方寻宝 //tagCMMagicTreasure:
+        DumpString = '''// A5 17 绑玉转盘开始 //tagCMStartBindJadeWheel:
                                 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_NAtagCMStartBindJadeWheel=tagCMStartBindJadeWheel()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMStartBindJadeWheel.Cmd,m_NAtagCMStartBindJadeWheel.SubCmd))] = m_NAtagCMStartBindJadeWheel
+
+
+#------------------------------------------------------
+# A5 11 试用首充武器 #tagCMTryFirstGoldItem
+
+class  tagCMTryFirstGoldItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x11
+        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 = 0x11
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMTryFirstGoldItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 11 试用首充武器 //tagCMTryFirstGoldItem:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMTryFirstGoldItem=tagCMTryFirstGoldItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTryFirstGoldItem.Cmd,m_NAtagCMTryFirstGoldItem.SubCmd))] = m_NAtagCMTryFirstGoldItem
 
 
 #------------------------------------------------------
@@ -10001,6 +10935,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
 
 
 #------------------------------------------------------
@@ -10065,6 +11051,62 @@
 
 m_NAtagUseNewGuyCard=tagUseNewGuyCard()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUseNewGuyCard.Head.Cmd,m_NAtagUseNewGuyCard.Head.SubCmd))] = m_NAtagUseNewGuyCard
+
+
+#------------------------------------------------------
+# A5 1D 法宝佩戴 #tagCMWearMagicWeapon
+
+class  tagCMWearMagicWeapon(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MWID", c_int),    #法宝ID
+                  ("State", c_ubyte),    #0-卸下 1-佩戴
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x1D
+        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 = 0x1D
+        self.MWID = 0
+        self.State = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMWearMagicWeapon)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 1D 法宝佩戴 //tagCMWearMagicWeapon:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MWID:%d,
+                                State:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MWID,
+                                self.State
+                                )
+        return DumpString
+
+
+m_NAtagCMWearMagicWeapon=tagCMWearMagicWeapon()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWearMagicWeapon.Cmd,m_NAtagCMWearMagicWeapon.SubCmd))] = m_NAtagCMWearMagicWeapon
 
 
 #------------------------------------------------------
@@ -10593,73 +11635,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 +11643,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("PetItemIndex", c_ubyte),    #宠物数据背包索引
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
                   ]
 
     def __init__(self):
@@ -10685,6 +11661,7 @@
         self.Cmd = 0xA7
         self.SubCmd = 0x04
         self.PetItemIndex = 0
+        self.UseItemCnt = 0
         return
 
     def GetLength(self):
@@ -10697,137 +11674,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
 
 
 #------------------------------------------------------
@@ -11036,6 +11896,178 @@
 
 m_NAtagCMVIPKillNPCLVInfoSwitch=tagCMVIPKillNPCLVInfoSwitch()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVIPKillNPCLVInfoSwitch.Cmd,m_NAtagCMVIPKillNPCLVInfoSwitch.SubCmd))] = m_NAtagCMVIPKillNPCLVInfoSwitch
+
+
+#------------------------------------------------------
+# AA 07 许愿池活动刷新奖池 #tagCMActWishingRefresh
+
+class  tagCMActWishingRefresh(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsFree", c_ubyte),    # 是否免费刷新
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x07
+        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 = 0xAA
+        self.SubCmd = 0x07
+        self.IsFree = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActWishingRefresh)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 07 许愿池活动刷新奖池 //tagCMActWishingRefresh:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsFree:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsFree
+                                )
+        return DumpString
+
+
+m_NAtagCMActWishingRefresh=tagCMActWishingRefresh()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishingRefresh.Cmd,m_NAtagCMActWishingRefresh.SubCmd))] = m_NAtagCMActWishingRefresh
+
+
+#------------------------------------------------------
+# AA 06 许愿池活动许愿 #tagCMActWishing
+
+class  tagCMActWishing(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("SrcWellType", c_ubyte),    # 来源库 0-可选库 1-结果库
+                  ("SrcIndex", c_ubyte),    # 来源索引
+                  ("DesWellType", c_ubyte),    # 目标库 0-可选库 1-结果库
+                  ("DesIndex", c_ubyte),    # 目标索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x06
+        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 = 0xAA
+        self.SubCmd = 0x06
+        self.SrcWellType = 0
+        self.SrcIndex = 0
+        self.DesWellType = 0
+        self.DesIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActWishing)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 06 许愿池活动许愿 //tagCMActWishing:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                SrcWellType:%d,
+                                SrcIndex:%d,
+                                DesWellType:%d,
+                                DesIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.SrcWellType,
+                                self.SrcIndex,
+                                self.DesWellType,
+                                self.DesIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMActWishing=tagCMActWishing()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishing.Cmd,m_NAtagCMActWishing.SubCmd))] = m_NAtagCMActWishing
+
+
+#------------------------------------------------------
+# AA 05 限时抢购预约 #tagCMFlashSaleAppointment
+
+class  tagCMFlashSaleAppointment(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GoodsID", c_int),    # 抢购商品标识
+                  ("State", c_ubyte),    # 1-预约 0-取消
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        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 = 0xAA
+        self.SubCmd = 0x05
+        self.GoodsID = 0
+        self.State = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFlashSaleAppointment)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 05 限时抢购预约 //tagCMFlashSaleAppointment:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GoodsID:%d,
+                                State:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GoodsID,
+                                self.State
+                                )
+        return DumpString
+
+
+m_NAtagCMFlashSaleAppointment=tagCMFlashSaleAppointment()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFlashSaleAppointment.Cmd,m_NAtagCMFlashSaleAppointment.SubCmd))] = m_NAtagCMFlashSaleAppointment
 
 
 #------------------------------------------------------
@@ -11307,21 +12339,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 +12362,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 +12793,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 +12842,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 +13269,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 +13561,210 @@
 
 
 #------------------------------------------------------
+# 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 06 助战召唤 #tagCMHelpBattleCall
+
+class  tagCMHelpBattleCall(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsOneKeyCall", c_ubyte),    # 是否一键召唤
+                  ("PlayerID", c_int),    # 召唤的玩家ID,大于1小于100代表机器人
+                  ("IsGoldCall", c_ubyte),    # 是否仙玉召唤
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        self.SubCmd = 0x06
+        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 = 0x06
+        self.IsOneKeyCall = 0
+        self.PlayerID = 0
+        self.IsGoldCall = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMHelpBattleCall)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 06 助战召唤 //tagCMHelpBattleCall:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsOneKeyCall:%d,
+                                PlayerID:%d,
+                                IsGoldCall:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsOneKeyCall,
+                                self.PlayerID,
+                                self.IsGoldCall
+                                )
+        return DumpString
+
+
+m_NAtagCMHelpBattleCall=tagCMHelpBattleCall()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHelpBattleCall.Cmd,m_NAtagCMHelpBattleCall.SubCmd))] = m_NAtagCMHelpBattleCall
+
+
+#------------------------------------------------------
+# B1 05 助战登记 #tagCMHelpBattleCheckIn
+
+class  tagCMHelpBattleCheckIn(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        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 = 0xB1
+        self.SubCmd = 0x05
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMHelpBattleCheckIn)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 05 助战登记 //tagCMHelpBattleCheckIn:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMHelpBattleCheckIn=tagCMHelpBattleCheckIn()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHelpBattleCheckIn.Cmd,m_NAtagCMHelpBattleCheckIn.SubCmd))] = m_NAtagCMHelpBattleCheckIn
+
+
+#------------------------------------------------------
+# B1 07 助战刷新 #tagCMHelpBattleRefresh
+
+class  tagCMHelpBattleRefresh(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        self.SubCmd = 0x07
+        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 = 0x07
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMHelpBattleRefresh)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 07 助战刷新 //tagCMHelpBattleRefresh:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMHelpBattleRefresh=tagCMHelpBattleRefresh()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHelpBattleRefresh.Cmd,m_NAtagCMHelpBattleRefresh.SubCmd))] = m_NAtagCMHelpBattleRefresh
+
+
+#------------------------------------------------------
 # B1 02 领取多倍副本奖励 #tagCMGetMultiFBPrize
 
 class  tagCMGetMultiFBPrize(Structure):
@@ -12946,6 +13926,77 @@
 
 m_NAtagCMLoginState=tagCMLoginState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoginState.Cmd,m_NAtagCMLoginState.SubCmd))] = m_NAtagCMLoginState
+
+
+#------------------------------------------------------
+#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
 
 
 #------------------------------------------------------
@@ -14098,61 +15149,9 @@
 
 
 #------------------------------------------------------
-#C1 03 领取奖励表奖励 #tagMSGetReward
+# C1 02 跨服PK购买次数 #tagCMCrossRealmPKBuy
 
-class  tagMSGetReward(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RewardType", c_ubyte),    #奖励表奖励类型
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC1
-        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 = 0xC1
-        self.SubCmd = 0x03
-        self.RewardType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMSGetReward)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//C1 03 领取奖励表奖励 //tagMSGetReward:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RewardType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RewardType
-                                )
-        return DumpString
-
-
-m_NAtagMSGetReward=tagMSGetReward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMSGetReward.Cmd,m_NAtagMSGetReward.SubCmd))] = m_NAtagMSGetReward
-
-
-#------------------------------------------------------
-#C1 08 玩家执行膜拜 #tagPlayerMergeWorship
-
-class  tagPlayerMergeWorship(Structure):
+class  tagCMCrossRealmPKBuy(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
@@ -14162,7 +15161,7 @@
     def __init__(self):
         self.Clear()
         self.Cmd = 0xC1
-        self.SubCmd = 0x08
+        self.SubCmd = 0x02
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -14172,17 +15171,17 @@
 
     def Clear(self):
         self.Cmd = 0xC1
-        self.SubCmd = 0x08
+        self.SubCmd = 0x02
         return
 
     def GetLength(self):
-        return sizeof(tagPlayerMergeWorship)
+        return sizeof(tagCMCrossRealmPKBuy)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//C1 08 玩家执行膜拜 //tagPlayerMergeWorship:
+        DumpString = '''// C1 02 跨服PK购买次数 //tagCMCrossRealmPKBuy:
                                 Cmd:%s,
                                 SubCmd:%s
                                 '''\
@@ -14193,106 +15192,70 @@
         return DumpString
 
 
-m_NAtagPlayerMergeWorship=tagPlayerMergeWorship()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerMergeWorship.Cmd,m_NAtagPlayerMergeWorship.SubCmd))] = m_NAtagPlayerMergeWorship
+m_NAtagCMCrossRealmPKBuy=tagCMCrossRealmPKBuy()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossRealmPKBuy.Cmd,m_NAtagCMCrossRealmPKBuy.SubCmd))] = m_NAtagCMCrossRealmPKBuy
 
 
 #------------------------------------------------------
-# C1 11 跨服王者争霸押注 #tagCMMergeKingSupport
+# C1 03 跨服PK领取奖励 #tagCMCrossRealmPKGetAward
 
-class  tagCMMergeKingSupport(Structure):
-    Head = tagHead()
-    SupportType = 0    #(BYTE SupportType)// 0-押注; 1-贿赂
-    GroupType = 0    #(BYTE GroupType)// 组类型;如32强、16强等
-    BattleIndex = 0    #(BYTE BattleIndex)// 对战组索引,每种组类型的索引从1开始
-    MoneyType = 0    #(BYTE MoneyType)// 押注的货币类型
-    AccIDLen = 0    #(BYTE AccIDLen)
-    TagAccID = ""    #(String TagAccID)// 支持的目标账号
-    data = None
+class  tagCMCrossRealmPKGetAward(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("AwardType", c_ubyte),    # 奖励类型;1-每日匹配奖励,2-每日胜利奖励,3-段位达标奖励,4-赛季结算奖励
+                  ("AwardData", c_ubyte),    # 奖励类型对应领取值;每日匹配奖励时为匹配次数,每日胜利奖励时为胜利次数,段位达标奖励时为领取的段位
+                  ]
 
     def __init__(self):
         self.Clear()
-        self.Head.Cmd = 0xC1
-        self.Head.SubCmd = 0x11
+        self.Cmd = 0xC1
+        self.SubCmd = 0x03
         return
 
-    def ReadData(self, _lpData, _pos=0, _Len=0):
+    def ReadData(self, stringData, _pos=0, _len=0):
         self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.SupportType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.GroupType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.BattleIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TagAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen)
-        return _pos
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
 
     def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC1
-        self.Head.SubCmd = 0x11
-        self.SupportType = 0
-        self.GroupType = 0
-        self.BattleIndex = 0
-        self.MoneyType = 0
-        self.AccIDLen = 0
-        self.TagAccID = ""
+        self.Cmd = 0xC1
+        self.SubCmd = 0x03
+        self.AwardType = 0
+        self.AwardData = 0
         return
 
     def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1
-        length += 1
-        length += 1
-        length += len(self.TagAccID)
-
-        return length
+        return sizeof(tagCMCrossRealmPKGetAward)
 
     def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.SupportType)
-        data = CommFunc.WriteBYTE(data, self.GroupType)
-        data = CommFunc.WriteBYTE(data, self.BattleIndex)
-        data = CommFunc.WriteBYTE(data, self.MoneyType)
-        data = CommFunc.WriteBYTE(data, self.AccIDLen)
-        data = CommFunc.WriteString(data, self.AccIDLen, self.TagAccID)
-        return data
+        return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                SupportType:%d,
-                                GroupType:%d,
-                                BattleIndex:%d,
-                                MoneyType:%d,
-                                AccIDLen:%d,
-                                TagAccID:%s
+        DumpString = '''// C1 03 跨服PK领取奖励 //tagCMCrossRealmPKGetAward:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                AwardType:%d,
+                                AwardData:%d
                                 '''\
                                 %(
-                                self.Head.OutputString(),
-                                self.SupportType,
-                                self.GroupType,
-                                self.BattleIndex,
-                                self.MoneyType,
-                                self.AccIDLen,
-                                self.TagAccID
+                                self.Cmd,
+                                self.SubCmd,
+                                self.AwardType,
+                                self.AwardData
                                 )
         return DumpString
 
 
-m_NAtagCMMergeKingSupport=tagCMMergeKingSupport()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMergeKingSupport.Head.Cmd,m_NAtagCMMergeKingSupport.Head.SubCmd))] = m_NAtagCMMergeKingSupport
+m_NAtagCMCrossRealmPKGetAward=tagCMCrossRealmPKGetAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossRealmPKGetAward.Cmd,m_NAtagCMCrossRealmPKGetAward.SubCmd))] = m_NAtagCMCrossRealmPKGetAward
 
 
 #------------------------------------------------------
-# C1 09 跨服PK匹配 #tagCMMergePKMatch
+# C1 01 跨服PK匹配 #tagCMCrossRealmPKMatch
 
-class  tagCMMergePKMatch(Structure):
+class  tagCMCrossRealmPKMatch(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
@@ -14303,7 +15266,7 @@
     def __init__(self):
         self.Clear()
         self.Cmd = 0xC1
-        self.SubCmd = 0x09
+        self.SubCmd = 0x01
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -14313,18 +15276,18 @@
 
     def Clear(self):
         self.Cmd = 0xC1
-        self.SubCmd = 0x09
+        self.SubCmd = 0x01
         self.Type = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMMergePKMatch)
+        return sizeof(tagCMCrossRealmPKMatch)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// C1 09 跨服PK匹配 //tagCMMergePKMatch:
+        DumpString = '''// C1 01 跨服PK匹配 //tagCMCrossRealmPKMatch:
                                 Cmd:%s,
                                 SubCmd:%s,
                                 Type:%d
@@ -14337,14 +15300,14 @@
         return DumpString
 
 
-m_NAtagCMMergePKMatch=tagCMMergePKMatch()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMergePKMatch.Cmd,m_NAtagCMMergePKMatch.SubCmd))] = m_NAtagCMMergePKMatch
+m_NAtagCMCrossRealmPKMatch=tagCMCrossRealmPKMatch()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossRealmPKMatch.Cmd,m_NAtagCMCrossRealmPKMatch.SubCmd))] = m_NAtagCMCrossRealmPKMatch
 
 
 #------------------------------------------------------
-# C1 10 跨服PK恢复连胜次数 #tagCMRecoverMergePKWin
+# C1 04 主动退出跨服 #tagCMExitCrossRealm
 
-class  tagCMRecoverMergePKWin(Structure):
+class  tagCMExitCrossRealm(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
@@ -14354,7 +15317,7 @@
     def __init__(self):
         self.Clear()
         self.Cmd = 0xC1
-        self.SubCmd = 0x10
+        self.SubCmd = 0x04
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -14364,17 +15327,17 @@
 
     def Clear(self):
         self.Cmd = 0xC1
-        self.SubCmd = 0x10
+        self.SubCmd = 0x04
         return
 
     def GetLength(self):
-        return sizeof(tagCMRecoverMergePKWin)
+        return sizeof(tagCMExitCrossRealm)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// C1 10 跨服PK恢复连胜次数 //tagCMRecoverMergePKWin:
+        DumpString = '''// C1 04 主动退出跨服 //tagCMExitCrossRealm:
                                 Cmd:%s,
                                 SubCmd:%s
                                 '''\
@@ -14385,5 +15348,5 @@
         return DumpString
 
 
-m_NAtagCMRecoverMergePKWin=tagCMRecoverMergePKWin()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecoverMergePKWin.Cmd,m_NAtagCMRecoverMergePKWin.SubCmd))] = m_NAtagCMRecoverMergePKWin
\ No newline at end of file
+m_NAtagCMExitCrossRealm=tagCMExitCrossRealm()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExitCrossRealm.Cmd,m_NAtagCMExitCrossRealm.SubCmd))] = m_NAtagCMExitCrossRealm
\ No newline at end of file

--
Gitblit v1.8.0