From 1c96b414fcd15749131c8eeb1857de82cfbe981e Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 18 九月 2018 20:04:58 +0800
Subject: [PATCH] 3647 【后端】思璞游戏SDK接入 同步脱机挂封包

---
 Tool/Robot/AI/AIFile/AILoginout.py       |    2 
 Tool/Robot/Protocol/PacketsReceivedPY.py | 7703 ++++++++++++++++++++++++++----------------
 Tool/Robot/Protocol/PacketsSend.py       |   18 
 Tool/Robot/Protocol/PacketsSendPY.py     | 2996 ++++++++--------
 Tool/Robot/Protocol/PacketsReceived.py   |  106 
 5 files changed, 6,447 insertions(+), 4,378 deletions(-)

diff --git a/Tool/Robot/AI/AIFile/AILoginout.py b/Tool/Robot/AI/AIFile/AILoginout.py
index 29b8732..814360a 100644
--- a/Tool/Robot/AI/AIFile/AILoginout.py
+++ b/Tool/Robot/AI/AIFile/AILoginout.py
@@ -269,6 +269,8 @@
         cAccessLogin.AppID = appID
         cAccessLogin.ServerID = int(sid[1:])
         cAccessLogin.Adult = self.robot.GetRobotConfig()[3]
+        cAccessLogin.ExtraLen = 0
+        cAccessLogin.Extra = ""
         
         self.robot.Send(cAccessLogin)
         #print "New Player Login ---------- ", self.robot.GetRobotConfig()[1]
diff --git a/Tool/Robot/Protocol/PacketsReceived.py b/Tool/Robot/Protocol/PacketsReceived.py
index c927066..fe93a7f 100644
--- a/Tool/Robot/Protocol/PacketsReceived.py
+++ b/Tool/Robot/Protocol/PacketsReceived.py
@@ -2552,6 +2552,70 @@
 
 
 #------------------------------------------------------
+#01 32 创角成功 #tagCreateRoleSucess
+
+class  tagCreateRoleSucess(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0x01
+        self.Head.SubCmd = 0x32
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0x01
+        self.Head.SubCmd = 0x32
+        self.PlayerID = 0
+        self.PlayerName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                PlayerName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.PlayerName
+                                )
+        return DumpString
+
+
+m_NAtagCreateRoleSucess=tagCreateRoleSucess()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCreateRoleSucess.Head.Cmd,m_NAtagCreateRoleSucess.Head.SubCmd))] = m_NAtagCreateRoleSucess
+
+
+#------------------------------------------------------
 #01 2A领取计时新手包结果#tagGetNewGuyCountBackwardsAwardResult对性能影响小
 
 class  tagGetNewGuyCountBackwardsAwardResult(Structure):
@@ -6543,6 +6607,7 @@
     GradID = 0    #(DWORD GradID)//头衔ID
     State = 0    #(BYTE State)//装备和使用状态 按位判定,第一位0未装备1已装备 第二位0未使用 1使用
     CreateTime = ""    #(char CreateTime[30])//获得时间
+    ExpireTime = 0    #(DWORD ExpireTime)// 持续时间,0为配表固定时间
     data = None
 
     def __init__(self):
@@ -6554,12 +6619,14 @@
         self.GradID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
+        self.ExpireTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
         self.GradID = 0
         self.State = 0
         self.CreateTime = ""
+        self.ExpireTime = 0
         return
 
     def GetLength(self):
@@ -6567,6 +6634,7 @@
         length += 4
         length += 1
         length += 30
+        length += 4
 
         return length
 
@@ -6575,18 +6643,21 @@
         data = CommFunc.WriteDWORD(data, self.GradID)
         data = CommFunc.WriteBYTE(data, self.State)
         data = CommFunc.WriteString(data, 30, self.CreateTime)
+        data = CommFunc.WriteDWORD(data, self.ExpireTime)
         return data
 
     def OutputString(self):
         DumpString = '''
                                 GradID:%d,
                                 State:%d,
-                                CreateTime:%s
+                                CreateTime:%s,
+                                ExpireTime:%d
                                 '''\
                                 %(
                                 self.GradID,
                                 self.State,
-                                self.CreateTime
+                                self.CreateTime,
+                                self.ExpireTime
                                 )
         return DumpString
 
@@ -6664,6 +6735,7 @@
     Head = tagHead()
     GradID = 0    #(DWORD GradID)//头衔ID
     CreateTime = ""    #(char CreateTime[30])//获得时间
+    ExpireTime = 0    #(DWORD ExpireTime)// 持续时间,0为配表固定时间
     data = None
 
     def __init__(self):
@@ -6677,6 +6749,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.GradID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
+        self.ExpireTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -6686,6 +6759,7 @@
         self.Head.SubCmd = 0x36
         self.GradID = 0
         self.CreateTime = ""
+        self.ExpireTime = 0
         return
 
     def GetLength(self):
@@ -6693,6 +6767,7 @@
         length += self.Head.GetLength()
         length += 4
         length += 30
+        length += 4
 
         return length
 
@@ -6701,18 +6776,21 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteDWORD(data, self.GradID)
         data = CommFunc.WriteString(data, 30, self.CreateTime)
+        data = CommFunc.WriteDWORD(data, self.ExpireTime)
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
                                 GradID:%d,
-                                CreateTime:%s
+                                CreateTime:%s,
+                                ExpireTime:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.GradID,
-                                self.CreateTime
+                                self.CreateTime,
+                                self.ExpireTime
                                 )
         return DumpString
 
@@ -9485,6 +9563,7 @@
                   ("ObjType", c_ubyte),    #对象类型
                   ("PosX", c_ushort),    
                   ("PosY", c_ushort),    
+                  ("Reason", c_int),    # 0为游戏通用,其他未决定的为技能ID
                   ]
 
     def __init__(self):
@@ -9505,6 +9584,7 @@
         self.ObjType = 0
         self.PosX = 0
         self.PosY = 0
+        self.Reason = 0
         return
 
     def GetLength(self):
@@ -9520,7 +9600,8 @@
                                 ObjID:%d,
                                 ObjType:%d,
                                 PosX:%d,
-                                PosY:%d
+                                PosY:%d,
+                                Reason:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -9528,7 +9609,8 @@
                                 self.ObjID,
                                 self.ObjType,
                                 self.PosX,
-                                self.PosY
+                                self.PosY,
+                                self.Reason
                                 )
         return DumpString
 
@@ -12424,6 +12506,8 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("PlayerID", c_int),    
+                  ("KillerID", c_int),    
+                  ("KillerType", c_ubyte),    
                   ]
 
     def __init__(self):
@@ -12441,6 +12525,8 @@
         self.Cmd = 0x06
         self.SubCmd = 0x09
         self.PlayerID = 0
+        self.KillerID = 0
+        self.KillerType = 0
         return
 
     def GetLength(self):
@@ -12453,12 +12539,16 @@
         DumpString = '''//06 09 玩家死亡//tagPlayerDie:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PlayerID:%d
+                                PlayerID:%d,
+                                KillerID:%d,
+                                KillerType:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PlayerID
+                                self.PlayerID,
+                                self.KillerID,
+                                self.KillerType
                                 )
         return DumpString
 
diff --git a/Tool/Robot/Protocol/PacketsReceivedPY.py b/Tool/Robot/Protocol/PacketsReceivedPY.py
index 22f9a78..a8171fe 100644
--- a/Tool/Robot/Protocol/PacketsReceivedPY.py
+++ b/Tool/Robot/Protocol/PacketsReceivedPY.py
@@ -311,60 +311,78 @@
 #A0 05 同步开服天数 #tagOpenServerDay
 
 class  tagOpenServerDay(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Day", c_ushort),    # 已开服天数,从0开始
-                  ("IsMixServer", c_ubyte),    #是否是合服服务器
-                  ("MixDay", c_ushort),    # 已合服天数,从0开始
-                  ]
+    Head = tagHead()
+    Day = 0    #(WORD Day)// 已开服天数,从0开始
+    IsMixServer = 0    #(BYTE IsMixServer)//是否是合服服务器
+    MixDay = 0    #(WORD MixDay)// 已合服天数,从0开始
+    OpenServerTime = ""    #(char OpenServerTime[19])//开服时间yyyy-MM-dd HH:mm:ss
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA0
-        self.SubCmd = 0x05
+        self.Head.Cmd = 0xA0
+        self.Head.SubCmd = 0x05
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Day,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsMixServer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MixDay,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OpenServerTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xA0
-        self.SubCmd = 0x05
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA0
+        self.Head.SubCmd = 0x05
         self.Day = 0
         self.IsMixServer = 0
         self.MixDay = 0
+        self.OpenServerTime = ""
         return
 
     def GetLength(self):
-        return sizeof(tagOpenServerDay)
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 1
+        length += 2
+        length += 19
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Day)
+        data = CommFunc.WriteBYTE(data, self.IsMixServer)
+        data = CommFunc.WriteWORD(data, self.MixDay)
+        data = CommFunc.WriteString(data, 19, self.OpenServerTime)
+        return data
 
     def OutputString(self):
-        DumpString = '''//A0 05 同步开服天数 //tagOpenServerDay:
-                                Cmd:%s,
-                                SubCmd:%s,
+        DumpString = '''
+                                Head:%s,
                                 Day:%d,
                                 IsMixServer:%d,
-                                MixDay:%d
+                                MixDay:%d,
+                                OpenServerTime:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.Head.OutputString(),
                                 self.Day,
                                 self.IsMixServer,
-                                self.MixDay
+                                self.MixDay,
+                                self.OpenServerTime
                                 )
         return DumpString
 
 
 m_NAtagOpenServerDay=tagOpenServerDay()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Cmd,m_NAtagOpenServerDay.SubCmd))] = m_NAtagOpenServerDay
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Head.Cmd,m_NAtagOpenServerDay.Head.SubCmd))] = m_NAtagOpenServerDay
 
 
 #------------------------------------------------------
@@ -847,6 +865,73 @@
 
 
 #------------------------------------------------------
+# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo
+
+class  tagGCFakeFamilyInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    FakeIDList = list()    #(vector<DWORD> FakeIDList)// 假仙盟名字索引1开始
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0A
+        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.FakeIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0A
+        self.Count = 0
+        self.FakeIDList = 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.FakeIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                FakeIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFakeFamilyInfo=tagGCFakeFamilyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFakeFamilyInfo.Head.Cmd,m_NAtagGCFakeFamilyInfo.Head.SubCmd))] = m_NAtagGCFakeFamilyInfo
+
+
+#------------------------------------------------------
 # A4 03 家族行为信息 #tagGCFamilyActionInfo
 
 class  tagGCFamilyAction(Structure):
@@ -1045,7 +1130,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("IsOpen", c_ubyte),    # 是否已开启
+                  ("IsOpen", c_int),    # 是否已开启
                   ("OpenCnt", c_ubyte),    # 本周已开启次数
                   ]
 
@@ -1537,18 +1622,91 @@
 # A4 07 家族仓库物品清除 #tagGCFamilyStoreItemClear
 
 class  tagGCFamilyStoreItemClear(Structure):
+    Head = tagHead()
+    ClearType = 0    #(BYTE ClearType)//0-指定格子清除; 1-所有物品清除
+    IndexCount = 0    #(BYTE IndexCount)
+    IndexList = list()    #(vector<BYTE> IndexList)//清除的格子索引, 仅指定格子清除时有效,从0开始代表第一格
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ClearType,_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)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x07
+        self.ClearType = 0
+        self.IndexCount = 0
+        self.IndexList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        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.ClearType)
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteBYTE(data, self.IndexList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ClearType:%d,
+                                IndexCount:%d,
+                                IndexList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ClearType,
+                                self.IndexCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyStoreItemClear=tagGCFamilyStoreItemClear()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemClear.Head.Cmd,m_NAtagGCFamilyStoreItemClear.Head.SubCmd))] = m_NAtagGCFamilyStoreItemClear
+
+
+#------------------------------------------------------
+# A4 09 家族守卫人皇信息通知 #tagGCFamilySWRHInfo
+
+class  tagGCFamilySWRHInfo(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("ClearType", c_ubyte),    #0-单格子清除; 1-所有物品清除
-                  ("Index", c_ubyte),    #清除的格子索引, 仅单格子清除时有效,从0开始代表第一格
+                  ("HasJoin", c_ubyte),    # 是否已参与
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA4
-        self.SubCmd = 0x07
+        self.SubCmd = 0x09
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -1558,35 +1716,103 @@
 
     def Clear(self):
         self.Cmd = 0xA4
-        self.SubCmd = 0x07
-        self.ClearType = 0
-        self.Index = 0
+        self.SubCmd = 0x09
+        self.HasJoin = 0
         return
 
     def GetLength(self):
-        return sizeof(tagGCFamilyStoreItemClear)
+        return sizeof(tagGCFamilySWRHInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A4 07 家族仓库物品清除 //tagGCFamilyStoreItemClear:
+        DumpString = '''// A4 09 家族守卫人皇信息通知 //tagGCFamilySWRHInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                ClearType:%d,
-                                Index:%d
+                                HasJoin:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.ClearType,
-                                self.Index
+                                self.HasJoin
                                 )
         return DumpString
 
 
-m_NAtagGCFamilyStoreItemClear=tagGCFamilyStoreItemClear()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemClear.Cmd,m_NAtagGCFamilyStoreItemClear.SubCmd))] = m_NAtagGCFamilyStoreItemClear
+m_NAtagGCFamilySWRHInfo=tagGCFamilySWRHInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilySWRHInfo.Cmd,m_NAtagGCFamilySWRHInfo.SubCmd))] = m_NAtagGCFamilySWRHInfo
+
+
+#------------------------------------------------------
+# A4 0B 玩家参与的仙盟联赛仙盟信息 #tagGCPlayerJoinFamilyWarInfo
+
+class  tagGCPlayerJoinFamilyWarInfo(Structure):
+    Head = tagHead()
+    JoinFamilyID = 0    #(DWORD JoinFamilyID)//参与的仙盟ID,默认0本仙盟,仙盟不同时才会收到本包
+    JoinFamilyNameLen = 0    #(BYTE JoinFamilyNameLen)
+    JoinFamilyName = ""    #(String JoinFamilyName)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0B
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.JoinFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.JoinFamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.JoinFamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.JoinFamilyNameLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0B
+        self.JoinFamilyID = 0
+        self.JoinFamilyNameLen = 0
+        self.JoinFamilyName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.JoinFamilyName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.JoinFamilyID)
+        data = CommFunc.WriteBYTE(data, self.JoinFamilyNameLen)
+        data = CommFunc.WriteString(data, self.JoinFamilyNameLen, self.JoinFamilyName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                JoinFamilyID:%d,
+                                JoinFamilyNameLen:%d,
+                                JoinFamilyName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.JoinFamilyID,
+                                self.JoinFamilyNameLen,
+                                self.JoinFamilyName
+                                )
+        return DumpString
+
+
+m_NAtagGCPlayerJoinFamilyWarInfo=tagGCPlayerJoinFamilyWarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerJoinFamilyWarInfo.Head.Cmd,m_NAtagGCPlayerJoinFamilyWarInfo.Head.SubCmd))] = m_NAtagGCPlayerJoinFamilyWarInfo
 
 
 #------------------------------------------------------
@@ -2073,6 +2299,130 @@
 
 
 #------------------------------------------------------
+# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo
+
+class  tagGCBossShuntLineState(Structure):
+    BossID = 0    #(DWORD BossID)// bossID
+    DeadLineCount = 0    #(BYTE DeadLineCount)
+    DeadLineList = list()    #(vector<BYTE> DeadLineList)// 已死亡的线路列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DeadLineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DeadLineCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.DeadLineList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.BossID = 0
+        self.DeadLineCount = 0
+        self.DeadLineList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1 * self.DeadLineCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.BossID)
+        data = CommFunc.WriteBYTE(data, self.DeadLineCount)
+        for i in range(self.DeadLineCount):
+            data = CommFunc.WriteBYTE(data, self.DeadLineList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BossID:%d,
+                                DeadLineCount:%d,
+                                DeadLineList:%s
+                                '''\
+                                %(
+                                self.BossID,
+                                self.DeadLineCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCBossShuntLineStateInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BossLineStateInfo = list()    #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x01
+        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):
+            temBossLineStateInfo = tagGCBossShuntLineState()
+            _pos = temBossLineStateInfo.ReadData(_lpData, _pos)
+            self.BossLineStateInfo.append(temBossLineStateInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x01
+        self.Count = 0
+        self.BossLineStateInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.BossLineStateInfo[i].GetLength()
+
+        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.WriteString(data, self.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BossLineStateInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo
+
+
+#------------------------------------------------------
 # A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice
 
 class  tagGCBourseItemPrice(Structure):
@@ -2335,24 +2685,17 @@
 
 
 #------------------------------------------------------
-# A9 A5 通知摇骰子数据 #tagGCDiceData
+# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime
 
-class  tagGCDiceData(Structure):
+class  tagDogzTimeInfoObj(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("HasDiceCnt", c_ubyte),    #已摇次数
-                  ("HasBestCnt", c_ubyte),    #已出状元数量
-                  ("DiceState", c_ubyte),    #活动状态0 结束 1第一轮 99暂停    
-                  ("CurPoint", c_int),    #当前积分
-                  ("PointPrizeState", c_int),    # 积分奖励 按二进制位标示领取记录
+                  ("NPCID", c_int),    # npcid
+                  ("RefreshSecond", c_int),    # 刷新倒计时, 秒
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA9
-        self.SubCmd = 0xA5
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -2361,137 +2704,92 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA9
-        self.SubCmd = 0xA5
-        self.HasDiceCnt = 0
-        self.HasBestCnt = 0
-        self.DiceState = 0
-        self.CurPoint = 0
-        self.PointPrizeState = 0
+        self.NPCID = 0
+        self.RefreshSecond = 0
         return
 
     def GetLength(self):
-        return sizeof(tagGCDiceData)
+        return sizeof(tagDogzTimeInfoObj)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A9 A5 通知摇骰子数据 //tagGCDiceData:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                HasDiceCnt:%d,
-                                HasBestCnt:%d,
-                                DiceState:%d,
-                                CurPoint:%d,
-                                PointPrizeState:%d
+        DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime:
+                                NPCID:%d,
+                                RefreshSecond:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.HasDiceCnt,
-                                self.HasBestCnt,
-                                self.DiceState,
-                                self.CurPoint,
-                                self.PointPrizeState
+                                self.NPCID,
+                                self.RefreshSecond
                                 )
         return DumpString
 
 
-m_NAtagGCDiceData=tagGCDiceData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDiceData.Cmd,m_NAtagGCDiceData.SubCmd))] = m_NAtagGCDiceData
-
-
-#------------------------------------------------------
-# A9 A4 通知摇骰子结果 #tagGCDiceResult
-
-class  tagGCDiceResult(Structure):
+class  tagGCDogzNPCRefreshTime(Structure):
     Head = tagHead()
-    DiceType = 0    #(BYTE DiceType)//骰子组合类型
-    AddPoint = 0    #(DWORD AddPoint)//增加的积分
-    MoneyType = 0    #(BYTE MoneyType)//获得金钱类型
-    MoneyNum = 0    #(DWORD MoneyNum)//获得金钱数量
-    DataSize = 0    #(DWORD DataSize)
-    DiceNum = ""    #(String DiceNum)//具体骰子数
+    Cnt = 0    #(BYTE Cnt)//信息个数
+    InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA4
+        self.Head.SubCmd = 0x04
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.DiceType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AddPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DiceNum,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temInfoList = tagDogzTimeInfoObj()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA4
-        self.DiceType = 0
-        self.AddPoint = 0
-        self.MoneyType = 0
-        self.MoneyNum = 0
-        self.DataSize = 0
-        self.DiceNum = ""
+        self.Head.SubCmd = 0x04
+        self.Cnt = 0
+        self.InfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        length += 4
-        length += 1
-        length += 4
-        length += 4
-        length += len(self.DiceNum)
+        for i in range(self.Cnt):
+            length += self.InfoList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.DiceType)
-        data = CommFunc.WriteDWORD(data, self.AddPoint)
-        data = CommFunc.WriteBYTE(data, self.MoneyType)
-        data = CommFunc.WriteDWORD(data, self.MoneyNum)
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.DiceNum)
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                DiceType:%d,
-                                AddPoint:%d,
-                                MoneyType:%d,
-                                MoneyNum:%d,
-                                DataSize:%d,
-                                DiceNum:%s
+                                Cnt:%d,
+                                InfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.DiceType,
-                                self.AddPoint,
-                                self.MoneyType,
-                                self.MoneyNum,
-                                self.DataSize,
-                                self.DiceNum
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
 
-m_NAtagGCDiceResult=tagGCDiceResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDiceResult.Head.Cmd,m_NAtagGCDiceResult.Head.SubCmd))] = m_NAtagGCDiceResult
+m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime
 
 
 #------------------------------------------------------
@@ -3301,7 +3599,7 @@
     NameLen = 0    #(BYTE NameLen)
     Name = ""    #(String Name)//size = NameLen
     SpeakerType = 0    #(BYTE SpeakerType)
-    TextLen = 0    #(BYTE TextLen)
+    TextLen = 0    #(WORD TextLen)
     Text = ""    #(String Text)//size = TextLen
     ExtraValue = 0    #(DWORD ExtraValue)//附加值
     Extras = ""    #(char Extras[256])//附加值列表
@@ -3322,7 +3620,7 @@
         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.SpeakerType,_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)
         self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
@@ -3354,7 +3652,7 @@
         length += 1
         length += len(self.Name)
         length += 1
-        length += 1
+        length += 2
         length += len(self.Text)
         length += 4
         length += 256
@@ -3370,7 +3668,7 @@
         data = CommFunc.WriteBYTE(data, self.NameLen)
         data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteBYTE(data, self.SpeakerType)
-        data = CommFunc.WriteBYTE(data, self.TextLen)
+        data = CommFunc.WriteWORD(data, self.TextLen)
         data = CommFunc.WriteString(data, self.TextLen, self.Text)
         data = CommFunc.WriteDWORD(data, self.ExtraValue)
         data = CommFunc.WriteString(data, 256, self.Extras)
@@ -3659,6 +3957,7 @@
     Name = ""    #(char Name[33])
     LV = 0    #(DWORD LV)//等级
     Job = 0    #(BYTE Job)
+    RealmLV = 0    #(WORD RealmLV)//境界    
     data = None
 
     def __init__(self):
@@ -3671,6 +3970,7 @@
         self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
         self.LV,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -3678,6 +3978,7 @@
         self.Name = ""
         self.LV = 0
         self.Job = 0
+        self.RealmLV = 0
         return
 
     def GetLength(self):
@@ -3686,6 +3987,7 @@
         length += 33
         length += 4
         length += 1
+        length += 2
 
         return length
 
@@ -3695,6 +3997,7 @@
         data = CommFunc.WriteString(data, 33, self.Name)
         data = CommFunc.WriteDWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
         return data
 
     def OutputString(self):
@@ -3702,13 +4005,15 @@
                                 ID:%d,
                                 Name:%s,
                                 LV:%d,
-                                Job:%d
+                                Job:%d,
+                                RealmLV:%d
                                 '''\
                                 %(
                                 self.ID,
                                 self.Name,
                                 self.LV,
-                                self.Job
+                                self.Job,
+                                self.RealmLV
                                 )
         return DumpString
 
@@ -3950,177 +4255,297 @@
 
 
 #------------------------------------------------------
-# AC 15 嘉年华抽奖结果 #tagGCCarnivalResult
+# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList
 
-class  tagGCCarnivalResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    # 抽奖索引
-                  ("Multiple", c_int),    # 倍数150代表1.5倍
-                  ]
+class  tagGCFamilyBossHurtInfo(Structure):
+    NPCID = 0    #(DWORD NPCID)
+    CurHP = 0    #(DWORD CurHP)
+    CurHPEx = 0    #(DWORD CurHPEx)
+    MaxHP = 0    #(DWORD MaxHP)
+    MaxHPEx = 0    #(DWORD MaxHPEx)
+    FamilyID = 0    #(DWORD FamilyID)// 最大实时伤血仙盟
+    NameLen = 0    #(BYTE NameLen)
+    FamilyName = ""    #(String FamilyName)
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x15
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xAC
-        self.SubCmd = 0x15
-        self.Index = 0
-        self.Multiple = 0
+        self.NPCID = 0
+        self.CurHP = 0
+        self.CurHPEx = 0
+        self.MaxHP = 0
+        self.MaxHPEx = 0
+        self.FamilyID = 0
+        self.NameLen = 0
+        self.FamilyName = ""
         return
 
     def GetLength(self):
-        return sizeof(tagGCCarnivalResult)
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.FamilyName)
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteDWORD(data, self.CurHP)
+        data = CommFunc.WriteDWORD(data, self.CurHPEx)
+        data = CommFunc.WriteDWORD(data, self.MaxHP)
+        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.FamilyName)
+        return data
 
     def OutputString(self):
-        DumpString = '''// AC 15 嘉年华抽奖结果 //tagGCCarnivalResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Index:%d,
-                                Multiple:%d
+        DumpString = '''
+                                NPCID:%d,
+                                CurHP:%d,
+                                CurHPEx:%d,
+                                MaxHP:%d,
+                                MaxHPEx:%d,
+                                FamilyID:%d,
+                                NameLen:%d,
+                                FamilyName:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Index,
-                                self.Multiple
+                                self.NPCID,
+                                self.CurHP,
+                                self.CurHPEx,
+                                self.MaxHP,
+                                self.MaxHPEx,
+                                self.FamilyID,
+                                self.NameLen,
+                                self.FamilyName
                                 )
         return DumpString
 
 
-m_NAtagGCCarnivalResult=tagGCCarnivalResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCarnivalResult.Cmd,m_NAtagGCCarnivalResult.SubCmd))] = m_NAtagGCCarnivalResult
-
-
-#------------------------------------------------------
-# AC 13 通知活动怪信息 #tagGCFestivalNPCInfoList
-
-class  tagGCFestivalNPCInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MapID", c_int),    # 活动地图ID
-                  ("NPCCnt", c_ushort),    # 剩余活动怪数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        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 = 0xAC
-        self.SubCmd = 0x13
-        self.MapID = 0
-        self.NPCCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFestivalNPCInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 13 通知活动怪信息 //tagGCFestivalNPCInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MapID:%d,
-                                NPCCnt:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MapID,
-                                self.NPCCnt
-                                )
-        return DumpString
-
-
-class  tagGCFestivalNPCInfoList(Structure):
+class  tagGCAllFamilyBossHurtInfoList(Structure):
     Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)//信息个数
-    MapNPCInfoList = list()    #(vector<tagGCFestivalNPCInfo> MapNPCInfoList)//地图活动怪列表
+    NPCCount = 0    #(BYTE NPCCount)// 个数
+    NPCHurtInfo = list()    #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
+        self.Head.SubCmd = 0x10
         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):
-            temMapNPCInfoList = tagGCFestivalNPCInfo()
-            _pos = temMapNPCInfoList.ReadData(_lpData, _pos)
-            self.MapNPCInfoList.append(temMapNPCInfoList)
+        self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.NPCCount):
+            temNPCHurtInfo = tagGCFamilyBossHurtInfo()
+            _pos = temNPCHurtInfo.ReadData(_lpData, _pos)
+            self.NPCHurtInfo.append(temNPCHurtInfo)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
-        self.Cnt = 0
-        self.MapNPCInfoList = list()
+        self.Head.SubCmd = 0x10
+        self.NPCCount = 0
+        self.NPCHurtInfo = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        for i in range(self.Cnt):
-            length += self.MapNPCInfoList[i].GetLength()
+        for i in range(self.NPCCount):
+            length += self.NPCHurtInfo[i].GetLength()
 
         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.WriteString(data, self.MapNPCInfoList[i].GetLength(), self.MapNPCInfoList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.NPCCount)
+        for i in range(self.NPCCount):
+            data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                Cnt:%d,
-                                MapNPCInfoList:%s
+                                NPCCount:%d,
+                                NPCHurtInfo:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.Cnt,
+                                self.NPCCount,
                                 "..."
                                 )
         return DumpString
 
 
-m_NAtagGCFestivalNPCInfoList=tagGCFestivalNPCInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFestivalNPCInfoList.Head.Cmd,m_NAtagGCFestivalNPCInfoList.Head.SubCmd))] = m_NAtagGCFestivalNPCInfoList
+m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList
+
+
+#------------------------------------------------------
+# AC 08 boss复活点数通知 #tagGCBossRebornPoint
+
+class  tagGCBossRebornPoint(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Point", c_int),    # 复活点数
+                  ("TotalPoint", c_int),    # 复活总点数
+                  ("RebornCnt", c_ushort),    # 复活次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        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 = 0xAC
+        self.SubCmd = 0x08
+        self.Point = 0
+        self.TotalPoint = 0
+        self.RebornCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCBossRebornPoint)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Point:%d,
+                                TotalPoint:%d,
+                                RebornCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Point,
+                                self.TotalPoint,
+                                self.RebornCnt
+                                )
+        return DumpString
+
+
+m_NAtagGCBossRebornPoint=tagGCBossRebornPoint()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint
+
+
+#------------------------------------------------------
+# AC 09 仙界盛典活动信息 #tagGCFairyCeremonyInfo
+
+class  tagGCFairyCeremonyInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    WorldLV = 0    #(WORD WorldLV)// 世界等级
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x09
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.WorldLV = 0
+        self.LimitLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.WorldLV)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                WorldLV:%d,
+                                LimitLV:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.WorldLV,
+                                self.LimitLV
+                                )
+        return DumpString
+
+
+m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo
 
 
 #------------------------------------------------------
@@ -4308,62 +4733,6 @@
 
 
 #------------------------------------------------------
-# AC 14 百服活动状态 #tagGCHundredServerAction
-
-class  tagGCHundredServerAction(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("StartDate", c_int),    # 开始时间time
-                  ("IsHundredServer", c_ubyte),    # 是否百服服务器
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        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 = 0xAC
-        self.SubCmd = 0x14
-        self.StartDate = 0
-        self.IsHundredServer = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCHundredServerAction)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 14 百服活动状态 //tagGCHundredServerAction:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                StartDate:%d,
-                                IsHundredServer:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.StartDate,
-                                self.IsHundredServer
-                                )
-        return DumpString
-
-
-m_NAtagGCHundredServerAction=tagGCHundredServerAction()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCHundredServerAction.Cmd,m_NAtagGCHundredServerAction.SubCmd))] = m_NAtagGCHundredServerAction
-
-
-#------------------------------------------------------
 # AC 01 通知领地争夺占领情况 #tagGCManorWarInfo
 
 class  tagGCManorInfo(Structure):
@@ -4529,6 +4898,293 @@
 
 m_NAtagGCManorWarInfo=tagGCManorWarInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCManorWarInfo.Head.Cmd,m_NAtagGCManorWarInfo.Head.SubCmd))] = m_NAtagGCManorWarInfo
+
+
+#------------------------------------------------------
+# AC 06 多倍经验活动信息 #tagGCMultiExpRateInfo
+
+class  tagGCMultiExpRateTime(Structure):
+    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
+    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.StartTime = ""
+        self.EndtTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 5
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 5, self.StartTime)
+        data = CommFunc.WriteString(data, 5, self.EndtTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                StartTime:%s,
+                                EndtTime:%s
+                                '''\
+                                %(
+                                self.StartTime,
+                                self.EndtTime
+                                )
+        return DumpString
+
+
+class  tagGCMultiExpRateInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagGCMultiExpRateTime> ActivityTime)//活动时间
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AddExpRate = 0    #(DWORD AddExpRate)// 增加的经验倍率,万分率
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagGCMultiExpRateTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddExpRate,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x06
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.LimitLV = 0
+        self.AddExpRate = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 2
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteDWORD(data, self.AddExpRate)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                LimitLV:%d,
+                                AddExpRate:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.LimitLV,
+                                self.AddExpRate
+                                )
+        return DumpString
+
+
+m_NAtagGCMultiExpRateInfo=tagGCMultiExpRateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiExpRateInfo.Head.Cmd,m_NAtagGCMultiExpRateInfo.Head.SubCmd))] = m_NAtagGCMultiExpRateInfo
+
+
+#------------------------------------------------------
+# AC 0A 多倍修行点活动信息 #tagGCMultiRealmPointInfo
+
+class  tagGCMultiRealmPointInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    Multiple = 0    #(BYTE Multiple)// 倍数
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0A
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.Multiple = 0
+        self.LimitLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.Multiple)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                Multiple:%d,
+                                LimitLV:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.Multiple,
+                                self.LimitLV
+                                )
+        return DumpString
+
+
+m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo
+
+
+#------------------------------------------------------
+# AC 05 红包删除 #tagGCRedPacketDel
+
+class  tagGCRedPacketDel(Structure):
+    Head = tagHead()
+    Cnt = 0    #(DWORD Cnt)// 个数
+    DelRedPacketID = list()    #(vector<DWORD> DelRedPacketID)// 红包ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        for i in range(self.Cnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.DelRedPacketID.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x05
+        self.Cnt = 0
+        self.DelRedPacketID = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4 * self.Cnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteDWORD(data, self.DelRedPacketID[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                DelRedPacketID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCRedPacketDel=tagGCRedPacketDel()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRedPacketDel.Head.Cmd,m_NAtagGCRedPacketDel.Head.SubCmd))] = m_NAtagGCRedPacketDel
 
 
 #------------------------------------------------------
@@ -5650,6 +6306,136 @@
 
 m_NAtagGCSocialRefreshType=tagGCSocialRefreshType()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialRefreshType.Cmd,m_NAtagGCSocialRefreshType.SubCmd))] = m_NAtagGCSocialRefreshType
+
+
+#------------------------------------------------------
+#B3 10 语音聊天 #tagGCVoiceChat
+
+class  tagGCVoiceChat(Structure):
+    Head = tagHead()
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域    
+    SrcNameLen = 0    #(BYTE SrcNameLen)
+    SrcName = ""    #(String SrcName)//size = SrcNameLen
+    PlayerID = 0    #(DWORD PlayerID)
+    ToNameLen = 0    #(BYTE ToNameLen)
+    ToName = ""    #(String ToName)//size = ToNameLen
+    ToPlayerID = 0    #(DWORD ToPlayerID)
+    Len = 0    #(WORD Len)
+    Content = list()    #(vector<BYTE> Content)//size = Len
+    ExtraValue = 0    #(DWORD ExtraValue)//附加值
+    Extras = ""    #(char Extras[256])//附加值列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x10
+        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.SrcNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SrcName,_pos = CommFunc.ReadString(_lpData, _pos,self.SrcNameLen)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ToNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ToName,_pos = CommFunc.ReadString(_lpData, _pos,self.ToNameLen)
+        self.ToPlayerID,_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)
+        self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x10
+        self.ChannelType = 0
+        self.SrcNameLen = 0
+        self.SrcName = ""
+        self.PlayerID = 0
+        self.ToNameLen = 0
+        self.ToName = ""
+        self.ToPlayerID = 0
+        self.Len = 0
+        self.Content = list()
+        self.ExtraValue = 0
+        self.Extras = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.SrcName)
+        length += 4
+        length += 1
+        length += len(self.ToName)
+        length += 4
+        length += 2
+        length += 1 * self.Len
+        length += 4
+        length += 256
+
+        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.SrcNameLen)
+        data = CommFunc.WriteString(data, self.SrcNameLen, self.SrcName)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.ToNameLen)
+        data = CommFunc.WriteString(data, self.ToNameLen, self.ToName)
+        data = CommFunc.WriteDWORD(data, self.ToPlayerID)
+        data = CommFunc.WriteWORD(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteBYTE(data, self.Content[i])
+        data = CommFunc.WriteDWORD(data, self.ExtraValue)
+        data = CommFunc.WriteString(data, 256, self.Extras)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ChannelType:%d,
+                                SrcNameLen:%d,
+                                SrcName:%s,
+                                PlayerID:%d,
+                                ToNameLen:%d,
+                                ToName:%s,
+                                ToPlayerID:%d,
+                                Len:%d,
+                                Content:%s,
+                                ExtraValue:%d,
+                                Extras:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ChannelType,
+                                self.SrcNameLen,
+                                self.SrcName,
+                                self.PlayerID,
+                                self.ToNameLen,
+                                self.ToName,
+                                self.ToPlayerID,
+                                self.Len,
+                                "...",
+                                self.ExtraValue,
+                                self.Extras
+                                )
+        return DumpString
+
+
+m_NAtagGCVoiceChat=tagGCVoiceChat()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCVoiceChat.Head.Cmd,m_NAtagGCVoiceChat.Head.SubCmd))] = m_NAtagGCVoiceChat
 
 
 #------------------------------------------------------
@@ -8000,6 +8786,118 @@
 
 
 #------------------------------------------------------
+# A1 10 充值购买次数信息 #tagMCCoinToGoldCountInfo
+
+class  tagMCCoinToGoldCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RecordID", c_ubyte),    
+                  ("TodayPayCount", c_ushort),    # 今日已购买次数
+                  ("TotalPayCount", c_int),    # 累计总购买次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.RecordID = 0
+        self.TodayPayCount = 0
+        self.TotalPayCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCoinToGoldCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A1 10 充值购买次数信息 //tagMCCoinToGoldCountInfo:
+                                RecordID:%d,
+                                TodayPayCount:%d,
+                                TotalPayCount:%d
+                                '''\
+                                %(
+                                self.RecordID,
+                                self.TodayPayCount,
+                                self.TotalPayCount
+                                )
+        return DumpString
+
+
+class  tagMCCoinToGoldCountInfo(Structure):
+    Head = tagHead()
+    RecordCount = 0    #(BYTE RecordCount)
+    CTGCountInfoList = list()    #(vector<tagMCCoinToGoldCount> CTGCountInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA1
+        self.Head.SubCmd = 0x10
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temCTGCountInfoList = tagMCCoinToGoldCount()
+            _pos = temCTGCountInfoList.ReadData(_lpData, _pos)
+            self.CTGCountInfoList.append(temCTGCountInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA1
+        self.Head.SubCmd = 0x10
+        self.RecordCount = 0
+        self.CTGCountInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.CTGCountInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCount:%d,
+                                CTGCountInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCoinToGoldCountInfo=tagMCCoinToGoldCountInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCoinToGoldCountInfo.Head.Cmd,m_NAtagMCCoinToGoldCountInfo.Head.SubCmd))] = m_NAtagMCCoinToGoldCountInfo
+
+
+#------------------------------------------------------
 #A1 06 点卷转化元宝充值记录 #tagMCCoinToGoldReport
 
 class  tagMCCoinToGoldReport(Structure):
@@ -8295,94 +9193,6 @@
 
 
 #------------------------------------------------------
-#A1 04 玩家经验加成 #tagMCPlayerExpRate
-
-class  tagMCPlayerExpRate(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SysExpRate", c_int),    #系统经验
-                  ("VipExpRate", c_int),    #VIP经验
-                  ("CaromExpRate", c_int),    #连斩经验
-                  ("FightExpRate", c_int),    #buff经验等
-                  ("ActionExpRate", c_int),    #节日活动经验
-                  ("WorldAverageExpRate", c_int),    #世界等级经验
-                  ("GameEventExpRate", c_int),    #小游戏事件经验倍率
-                  ("WeiClientExpRate", c_int),    #微端登录经验倍率
-                  ("NobleExpRate", c_int),    #贵族经验倍率
-                  ("CommMapExpRate", c_int),    #野外常规地图经验倍率
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA1
-        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 = 0xA1
-        self.SubCmd = 0x04
-        self.SysExpRate = 0
-        self.VipExpRate = 0
-        self.CaromExpRate = 0
-        self.FightExpRate = 0
-        self.ActionExpRate = 0
-        self.WorldAverageExpRate = 0
-        self.GameEventExpRate = 0
-        self.WeiClientExpRate = 0
-        self.NobleExpRate = 0
-        self.CommMapExpRate = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCPlayerExpRate)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A1 04 玩家经验加成 //tagMCPlayerExpRate:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SysExpRate:%d,
-                                VipExpRate:%d,
-                                CaromExpRate:%d,
-                                FightExpRate:%d,
-                                ActionExpRate:%d,
-                                WorldAverageExpRate:%d,
-                                GameEventExpRate:%d,
-                                WeiClientExpRate:%d,
-                                NobleExpRate:%d,
-                                CommMapExpRate:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SysExpRate,
-                                self.VipExpRate,
-                                self.CaromExpRate,
-                                self.FightExpRate,
-                                self.ActionExpRate,
-                                self.WorldAverageExpRate,
-                                self.GameEventExpRate,
-                                self.WeiClientExpRate,
-                                self.NobleExpRate,
-                                self.CommMapExpRate
-                                )
-        return DumpString
-
-
-m_NAtagMCPlayerExpRate=tagMCPlayerExpRate()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerExpRate.Cmd,m_NAtagMCPlayerExpRate.SubCmd))] = m_NAtagMCPlayerExpRate
-
-
-#------------------------------------------------------
 # A1 24 玩家初始化扩展信息 #tagMCPlayerInfo
 
 class  tagMCPlayerInfo(Structure):
@@ -8502,6 +9312,8 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("MapID", c_ushort),    
+                  ("FuncLineID", c_ushort),    #功能线路ID
                   ]
 
     def __init__(self):
@@ -8518,6 +9330,8 @@
     def Clear(self):
         self.Cmd = 0xA1
         self.SubCmd = 0x26
+        self.MapID = 0
+        self.FuncLineID = 0
         return
 
     def GetLength(self):
@@ -8529,11 +9343,15 @@
     def OutputString(self):
         DumpString = '''//A1 26 准备切换地图 //tagMCPrepareChangeMap:
                                 Cmd:%s,
-                                SubCmd:%s
+                                SubCmd:%s,
+                                MapID:%d,
+                                FuncLineID:%d
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd
+                                self.SubCmd,
+                                self.MapID,
+                                self.FuncLineID
                                 )
         return DumpString
 
@@ -8551,6 +9369,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("MapID", c_int),    
+                  ("FuncLineID", c_ushort),    #功能线路ID
                   ]
 
     def __init__(self):
@@ -8568,6 +9387,7 @@
         self.Cmd = 0xA1
         self.SubCmd = 0x27
         self.MapID = 0
+        self.FuncLineID = 0
         return
 
     def GetLength(self):
@@ -8580,12 +9400,14 @@
         DumpString = '''//A1 27 开始切换地图 //tagMCStartChangeMap:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                MapID:%d
+                                MapID:%d,
+                                FuncLineID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.MapID
+                                self.MapID,
+                                self.FuncLineID
                                 )
         return DumpString
 
@@ -9002,7 +9824,8 @@
     _pack_ = 1
     _fields_ = [
                   ("Type", c_ubyte),    #14铜钱,15经验
-                  ("BuyCnt", c_ubyte),    #已购买次数
+                  ("BuyCnt", c_ubyte),    #今日已购买次数
+                  ("HistoryBuyCnt", c_ubyte),    #历史已购买次数
                   ("LastFreeTime", c_int),    #上次的免费时间
                   ]
 
@@ -9018,6 +9841,7 @@
     def Clear(self):
         self.Type = 0
         self.BuyCnt = 0
+        self.HistoryBuyCnt = 0
         self.LastFreeTime = 0
         return
 
@@ -9031,11 +9855,13 @@
         DumpString = '''//A3 30 购买魔魂铜钱经验什么的通知 //tagMCBuySomething:
                                 Type:%d,
                                 BuyCnt:%d,
+                                HistoryBuyCnt:%d,
                                 LastFreeTime:%d
                                 '''\
                                 %(
                                 self.Type,
                                 self.BuyCnt,
+                                self.HistoryBuyCnt,
                                 self.LastFreeTime
                                 )
         return DumpString
@@ -9105,6 +9931,114 @@
 
 m_NAtagMCBuySomething=tagMCBuySomething()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuySomething.Head.Cmd,m_NAtagMCBuySomething.Head.SubCmd))] = m_NAtagMCBuySomething
+
+
+#------------------------------------------------------
+# A3 17 全身属性激活数量通知 #tagMCAllEquipAttrActiveInfo
+
+class  tagMCEquipActiveInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Type", c_ubyte),    # 0强化 1星数
+                  ("Cnt", c_int),    # 激活数量
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.Type = 0
+        self.Cnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCEquipActiveInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 17 全身属性激活数量通知 //tagMCAllEquipAttrActiveInfo:
+                                Type:%d,
+                                Cnt:%d
+                                '''\
+                                %(
+                                self.Type,
+                                self.Cnt
+                                )
+        return DumpString
+
+
+class  tagMCAllEquipAttrActiveInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 个数
+    ActiveInfo = list()    #(vector<tagMCEquipActiveInfo> ActiveInfo)//信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x17
+        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):
+            temActiveInfo = tagMCEquipActiveInfo()
+            _pos = temActiveInfo.ReadData(_lpData, _pos)
+            self.ActiveInfo.append(temActiveInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x17
+        self.Count = 0
+        self.ActiveInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.ActiveInfo[i].GetLength()
+
+        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.WriteString(data, self.ActiveInfo[i].GetLength(), self.ActiveInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ActiveInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCAllEquipAttrActiveInfo=tagMCAllEquipAttrActiveInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAllEquipAttrActiveInfo.Head.Cmd,m_NAtagMCAllEquipAttrActiveInfo.Head.SubCmd))] = m_NAtagMCAllEquipAttrActiveInfo
 
 
 #------------------------------------------------------
@@ -9304,95 +10238,18 @@
 
 
 #------------------------------------------------------
-# A3 27 玩家命格信息 #tagMCBirthChartInfo
+#A3 B7 当日累计攻击boss次数 #tagMCBOSSAttactCnt
 
-class  tagMCBirthChartInfo(Structure):
-    Head = tagHead()
-    OpenState = 0    #(DWORD OpenState)//命格孔状态, 按索引表示激活状态
-    Count = 0    #(BYTE Count)// 命格孔信息数
-    BirthChartDataList = list()    #(vector<DWORD> BirthChartDataList)// 命格孔数据信息, 数据与背包数据相同
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x27
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.OpenState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.BirthChartDataList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x27
-        self.OpenState = 0
-        self.Count = 0
-        self.BirthChartDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.OpenState)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteDWORD(data, self.BirthChartDataList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                OpenState:%d,
-                                Count:%d,
-                                BirthChartDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.OpenState,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCBirthChartInfo=tagMCBirthChartInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBirthChartInfo.Head.Cmd,m_NAtagMCBirthChartInfo.Head.SubCmd))] = m_NAtagMCBirthChartInfo
-
-
-#------------------------------------------------------
-# A3 47 当前精血和获取次数信息 #tagMCBloodAndGetNumInfo
-
-class  tagMCBloodAndGetNumInfo(Structure):
+class  tagMCBossCntInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Blood", c_int),    # 精血
-                  ("GetNum", c_int),    # 当日获取次数
+                  ("BossType", c_ubyte),    #编号类型0-世界boss 1-boss之家
+                  ("KillCnt", c_ubyte),    #击杀次数
+                  ("ItemAddCnt", c_ubyte),    #物品增加次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x47
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9401,45 +10258,35 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x47
-        self.Blood = 0
-        self.GetNum = 0
+        self.BossType = 0
+        self.KillCnt = 0
+        self.ItemAddCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCBloodAndGetNumInfo)
+        return sizeof(tagMCBossCntInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A3 47 当前精血和获取次数信息 //tagMCBloodAndGetNumInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Blood:%d,
-                                GetNum:%d
+        DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt:
+                                BossType:%d,
+                                KillCnt:%d,
+                                ItemAddCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Blood,
-                                self.GetNum
+                                self.BossType,
+                                self.KillCnt,
+                                self.ItemAddCnt
                                 )
         return DumpString
 
 
-m_NAtagMCBloodAndGetNumInfo=tagMCBloodAndGetNumInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBloodAndGetNumInfo.Cmd,m_NAtagMCBloodAndGetNumInfo.SubCmd))] = m_NAtagMCBloodAndGetNumInfo
-
-
-#------------------------------------------------------
-#A3 B7 当日累计攻击boss次数 #tagMCBOSSAttactCnt
-
 class  tagMCBOSSAttactCnt(Structure):
     Head = tagHead()
-    DataSize = 0    #(DWORD DataSize)
-    KillCntInfo = ""    #(String KillCntInfo)//'{编号:击杀次数}'
+    Cnt = 0    #(BYTE Cnt)
+    KillCntInfoList = list()    #(vector<tagMCBossCntInfo> KillCntInfoList)
     data = None
 
     def __init__(self):
@@ -9451,8 +10298,11 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.KillCntInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temKillCntInfoList = tagMCBossCntInfo()
+            _pos = temKillCntInfoList.ReadData(_lpData, _pos)
+            self.KillCntInfoList.append(temKillCntInfoList)
         return _pos
 
     def Clear(self):
@@ -9460,35 +10310,37 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0xB7
-        self.DataSize = 0
-        self.KillCntInfo = ""
+        self.Cnt = 0
+        self.KillCntInfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 4
-        length += len(self.KillCntInfo)
+        length += 1
+        for i in range(self.Cnt):
+            length += self.KillCntInfoList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.KillCntInfo)
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.KillCntInfoList[i].GetLength(), self.KillCntInfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                DataSize:%d,
-                                KillCntInfo:%s
+                                Cnt:%d,
+                                KillCntInfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.DataSize,
-                                self.KillCntInfo
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
@@ -9667,119 +10519,6 @@
 
 m_NAtagMCBuySomethingReward=tagMCBuySomethingReward()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuySomethingReward.Cmd,m_NAtagMCBuySomethingReward.SubCmd))] = m_NAtagMCBuySomethingReward
-
-
-#------------------------------------------------------
-# A3 B5 通知收集装备信息 #tagMCCollectEquipInfo
-
-class  tagMCCollectEquipInfo(Structure):
-    Head = tagHead()
-    DataSize = 0    #(DWORD DataSize)
-    CollectData = ""    #(String CollectData)//收集记录
-    ActiveSize = 0    #(DWORD ActiveSize)
-    ActiveData = ""    #(String ActiveData)//属性激活记录
-    GoalDataSize = 0    #(DWORD GoalDataSize)
-    GoalCollectData = ""    #(String GoalCollectData)//目标收集记录
-    GoalActiveData = 0    #(DWORD GoalActiveData)//目标属性激活记录
-    GoaAwardSize = 0    #(DWORD GoaAwardSize)
-    GoalAwardData = ""    #(String GoalAwardData)//目标收集领奖记录
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB5
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CollectData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
-        self.ActiveSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ActiveData,_pos = CommFunc.ReadString(_lpData, _pos,self.ActiveSize)
-        self.GoalDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoalCollectData,_pos = CommFunc.ReadString(_lpData, _pos,self.GoalDataSize)
-        self.GoalActiveData,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoaAwardSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoalAwardData,_pos = CommFunc.ReadString(_lpData, _pos,self.GoaAwardSize)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB5
-        self.DataSize = 0
-        self.CollectData = ""
-        self.ActiveSize = 0
-        self.ActiveData = ""
-        self.GoalDataSize = 0
-        self.GoalCollectData = ""
-        self.GoalActiveData = 0
-        self.GoaAwardSize = 0
-        self.GoalAwardData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += len(self.CollectData)
-        length += 4
-        length += len(self.ActiveData)
-        length += 4
-        length += len(self.GoalCollectData)
-        length += 4
-        length += 4
-        length += len(self.GoalAwardData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.CollectData)
-        data = CommFunc.WriteDWORD(data, self.ActiveSize)
-        data = CommFunc.WriteString(data, self.ActiveSize, self.ActiveData)
-        data = CommFunc.WriteDWORD(data, self.GoalDataSize)
-        data = CommFunc.WriteString(data, self.GoalDataSize, self.GoalCollectData)
-        data = CommFunc.WriteDWORD(data, self.GoalActiveData)
-        data = CommFunc.WriteDWORD(data, self.GoaAwardSize)
-        data = CommFunc.WriteString(data, self.GoaAwardSize, self.GoalAwardData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                DataSize:%d,
-                                CollectData:%s,
-                                ActiveSize:%d,
-                                ActiveData:%s,
-                                GoalDataSize:%d,
-                                GoalCollectData:%s,
-                                GoalActiveData:%d,
-                                GoaAwardSize:%d,
-                                GoalAwardData:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.DataSize,
-                                self.CollectData,
-                                self.ActiveSize,
-                                self.ActiveData,
-                                self.GoalDataSize,
-                                self.GoalCollectData,
-                                self.GoalActiveData,
-                                self.GoaAwardSize,
-                                self.GoalAwardData
-                                )
-        return DumpString
-
-
-m_NAtagMCCollectEquipInfo=tagMCCollectEquipInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectEquipInfo.Head.Cmd,m_NAtagMCCollectEquipInfo.Head.SubCmd))] = m_NAtagMCCollectEquipInfo
 
 
 #------------------------------------------------------
@@ -10085,6 +10824,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("CurValue", c_int),    # 当前总活跃度
+                  ("RealmPoint", c_int),    # 可领取修行点
                   ("StageIndex", c_ubyte),    # 当前阶段索引
                   ("AwardRecord", c_int),    # 领奖记录 按位存储
                   ]
@@ -10104,6 +10844,7 @@
         self.Cmd = 0xA3
         self.SubCmd = 0x33
         self.CurValue = 0
+        self.RealmPoint = 0
         self.StageIndex = 0
         self.AwardRecord = 0
         return
@@ -10119,6 +10860,7 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 CurValue:%d,
+                                RealmPoint:%d,
                                 StageIndex:%d,
                                 AwardRecord:%d
                                 '''\
@@ -10126,6 +10868,7 @@
                                 self.Cmd,
                                 self.SubCmd,
                                 self.CurValue,
+                                self.RealmPoint,
                                 self.StageIndex,
                                 self.AwardRecord
                                 )
@@ -10134,66 +10877,6 @@
 
 m_NAtagMCDailyActivityInfoList=tagMCDailyActivityInfoList()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyActivityInfoList.Cmd,m_NAtagMCDailyActivityInfoList.SubCmd))] = m_NAtagMCDailyActivityInfoList
-
-
-#------------------------------------------------------
-#A3 A2 每日一购购物记录 # tagMCDailyGoldShop
-
-class  tagMCDailyGoldShop(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("BuyRecord", c_int),    # 当日购买记录, 按二进制位表示是否购买对应索引物品,0-未购买,1-已购买
-                  ("BuyCnt", c_int),    # 累积购买次数
-                  ("AwardRecord", c_int),    # 累积购买次数奖励记录
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xA2
-        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 = 0xA2
-        self.BuyRecord = 0
-        self.BuyCnt = 0
-        self.AwardRecord = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCDailyGoldShop)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 A2 每日一购购物记录 // tagMCDailyGoldShop:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                BuyRecord:%d,
-                                BuyCnt:%d,
-                                AwardRecord:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.BuyRecord,
-                                self.BuyCnt,
-                                self.AwardRecord
-                                )
-        return DumpString
-
-
-m_NAtagMCDailyGoldShop=tagMCDailyGoldShop()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGoldShop.Cmd,m_NAtagMCDailyGoldShop.SubCmd))] = m_NAtagMCDailyGoldShop
 
 
 #------------------------------------------------------
@@ -10208,6 +10891,7 @@
                   ("ReplenishSignCount", c_ubyte),    # 可以补签天数
                   ("IsSign", c_ubyte),    #当天是否已经签到,发送0和1
                   ("IsFrist", c_ubyte),    #是否是第一个月
+                  ("TotalSignCount", c_ushort),    #累计总签到天数
                   ]
 
     def __init__(self):
@@ -10228,6 +10912,7 @@
         self.ReplenishSignCount = 0
         self.IsSign = 0
         self.IsFrist = 0
+        self.TotalSignCount = 0
         return
 
     def GetLength(self):
@@ -10243,7 +10928,8 @@
                                 DaySignCount:%d,
                                 ReplenishSignCount:%d,
                                 IsSign:%d,
-                                IsFrist:%d
+                                IsFrist:%d,
+                                TotalSignCount:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -10251,7 +10937,8 @@
                                 self.DaySignCount,
                                 self.ReplenishSignCount,
                                 self.IsSign,
-                                self.IsFrist
+                                self.IsFrist,
+                                self.TotalSignCount
                                 )
         return DumpString
 
@@ -10261,20 +10948,21 @@
 
 
 #------------------------------------------------------
-# A3 B6 通知是否参与过天降钻石 #tagMCDiceRecord
+# A3 C1 神兽助战状态刷新 #tagMCDogzHelpbattleState
 
-class  tagMCDiceRecord(Structure):
+class  tagMCDogzHelpbattleState(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("IsJoin", c_ubyte),    #是否参加过
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("BatteState", c_ubyte),    #是否已助战, 0否1是
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA3
-        self.SubCmd = 0xB6
+        self.SubCmd = 0xC1
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -10284,32 +10972,179 @@
 
     def Clear(self):
         self.Cmd = 0xA3
-        self.SubCmd = 0xB6
-        self.IsJoin = 0
+        self.SubCmd = 0xC1
+        self.DogzID = 0
+        self.BatteState = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCDiceRecord)
+        return sizeof(tagMCDogzHelpbattleState)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A3 B6 通知是否参与过天降钻石 //tagMCDiceRecord:
+        DumpString = '''// A3 C1 神兽助战状态刷新 //tagMCDogzHelpbattleState:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                IsJoin:%d
+                                DogzID:%d,
+                                BatteState:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.IsJoin
+                                self.DogzID,
+                                self.BatteState
                                 )
         return DumpString
 
 
-m_NAtagMCDiceRecord=tagMCDiceRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceRecord.Cmd,m_NAtagMCDiceRecord.SubCmd))] = m_NAtagMCDiceRecord
+m_NAtagMCDogzHelpbattleState=tagMCDogzHelpbattleState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzHelpbattleState.Cmd,m_NAtagMCDogzHelpbattleState.SubCmd))] = m_NAtagMCDogzHelpbattleState
+
+
+#------------------------------------------------------
+# A3 C0 神兽信息 #tagMCDogzInfo
+
+class  tagMCDogzInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BuyHelpbattleCount", c_ubyte),    #额外购买的助战数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0xC0
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0xC0
+        self.BuyHelpbattleCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCDogzInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 C0 神兽信息 //tagMCDogzInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BuyHelpbattleCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BuyHelpbattleCount
+                                )
+        return DumpString
+
+
+m_NAtagMCDogzInfo=tagMCDogzInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzInfo.Cmd,m_NAtagMCDogzInfo.SubCmd))] = m_NAtagMCDogzInfo
+
+
+#------------------------------------------------------
+# A3 1C 通知装备分解信息 #tagMCEquipDecomposeInfo
+
+class  tagMCEquipDecomposeInfo(Structure):
+    Head = tagHead()
+    LV = 0    #(WORD LV)// 等级
+    Exp = 0    #(DWORD Exp)// 升级经验
+    Seting = 0    #(DWORD Seting)// 操作数据记录
+    DecomposeCnt = 0    #(BYTE DecomposeCnt)// 分解件数进度
+    GetItemLen = 0    #(WORD GetItemLen)
+    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] 
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x1C
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Seting,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DecomposeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x1C
+        self.LV = 0
+        self.Exp = 0
+        self.Seting = 0
+        self.DecomposeCnt = 0
+        self.GetItemLen = 0
+        self.GetItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 4
+        length += 4
+        length += 1
+        length += 2
+        length += len(self.GetItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.Exp)
+        data = CommFunc.WriteDWORD(data, self.Seting)
+        data = CommFunc.WriteBYTE(data, self.DecomposeCnt)
+        data = CommFunc.WriteWORD(data, self.GetItemLen)
+        data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                LV:%d,
+                                Exp:%d,
+                                Seting:%d,
+                                DecomposeCnt:%d,
+                                GetItemLen:%d,
+                                GetItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.LV,
+                                self.Exp,
+                                self.Seting,
+                                self.DecomposeCnt,
+                                self.GetItemLen,
+                                self.GetItemData
+                                )
+        return DumpString
+
+
+m_NAtagMCEquipDecomposeInfo=tagMCEquipDecomposeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeInfo.Head.Cmd,m_NAtagMCEquipDecomposeInfo.Head.SubCmd))] = m_NAtagMCEquipDecomposeInfo
 
 
 #------------------------------------------------------
@@ -10606,118 +11441,6 @@
 
 
 #------------------------------------------------------
-# A3 45 转生灵力信息 #tagMCExchangeReikiCnt
-
-class  tagMCExchangeReikiCnt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ExCnt", c_ubyte),    #今日降级兑换灵力次数
-                  ("AddChangeReikiCnt", c_ubyte),    #增加的兑换灵力次数
-                  ("CurReiki", c_int),    #当前灵力
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x45
-        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 = 0x45
-        self.ExCnt = 0
-        self.AddChangeReikiCnt = 0
-        self.CurReiki = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCExchangeReikiCnt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 45 转生灵力信息 //tagMCExchangeReikiCnt:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ExCnt:%d,
-                                AddChangeReikiCnt:%d,
-                                CurReiki:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ExCnt,
-                                self.AddChangeReikiCnt,
-                                self.CurReiki
-                                )
-        return DumpString
-
-
-m_NAtagMCExchangeReikiCnt=tagMCExchangeReikiCnt()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCExchangeReikiCnt.Cmd,m_NAtagMCExchangeReikiCnt.SubCmd))] = m_NAtagMCExchangeReikiCnt
-
-
-#------------------------------------------------------
-#A3 A4 表情包开通状态#tagMCFacePackageState
-
-class  tagMCFacePackageState(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PackageInfo", c_int),    # 按二进制位标示表情包开启状态
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xA4
-        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 = 0xA4
-        self.PackageInfo = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFacePackageState)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 A4 表情包开通状态//tagMCFacePackageState:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PackageInfo:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PackageInfo
-                                )
-        return DumpString
-
-
-m_NAtagMCFacePackageState=tagMCFacePackageState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFacePackageState.Cmd,m_NAtagMCFacePackageState.SubCmd))] = m_NAtagMCFacePackageState
-
-
-#------------------------------------------------------
 # A3 16 仙盟活跃信息通知 #tagMCFamilyActivityInfo
 
 class  tagMCFamilyActionCnt(Structure):
@@ -10835,18 +11558,15 @@
 #------------------------------------------------------
 #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
 
-class  tagMCFBEncourageInfo(Structure):
+class  tagMCFBEncourageCnt(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LV", c_ubyte),    # 当前鼓舞等级
+                  ("MoneyType", c_ubyte),    # 金钱类型
+                  ("EncourageCnt", c_ubyte),    # 当前鼓舞次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0A
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -10855,33 +11575,92 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0A
-        self.LV = 0
+        self.MoneyType = 0
+        self.EncourageCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCFBEncourageInfo)
+        return sizeof(tagMCFBEncourageCnt)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''//A3 0A 副本鼓舞信息通知 //tagMCFBEncourageInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LV:%d
+                                MoneyType:%d,
+                                EncourageCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LV
+                                self.MoneyType,
+                                self.EncourageCnt
+                                )
+        return DumpString
+
+
+class  tagMCFBEncourageInfo(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)// 
+    InfoList = list()    #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x0A
+        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):
+            temInfoList = tagMCFBEncourageCnt()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x0A
+        self.Cnt = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Cnt):
+            length += self.InfoList[i].GetLength()
+
+        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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCFBEncourageInfo=tagMCFBEncourageInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Cmd,m_NAtagMCFBEncourageInfo.SubCmd))] = m_NAtagMCFBEncourageInfo
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Head.Cmd,m_NAtagMCFBEncourageInfo.Head.SubCmd))] = m_NAtagMCFBEncourageInfo
 
 
 #------------------------------------------------------
@@ -11005,6 +11784,121 @@
 
 m_NAtagMCFBWipeOutData=tagMCFBWipeOutData()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBWipeOutData.Head.Cmd,m_NAtagMCFBWipeOutData.Head.SubCmd))] = m_NAtagMCFBWipeOutData
+
+
+#------------------------------------------------------
+# A3 18 极品白拿信息 #tagMCFreeGoodsInfo
+
+class  tagMCFreeGoods(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ID", c_ubyte),    # 礼包ID
+                  ("BuyState", c_int),    # 购买状态 0-未购买 1-已领返还 time值-购买时间
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ID = 0
+        self.BuyState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFreeGoods)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 18 极品白拿信息 //tagMCFreeGoodsInfo:
+                                ID:%d,
+                                BuyState:%d
+                                '''\
+                                %(
+                                self.ID,
+                                self.BuyState
+                                )
+        return DumpString
+
+
+class  tagMCFreeGoodsInfo(Structure):
+    Head = tagHead()
+    OpenTime = 0    #(DWORD OpenTime)// 活动开启时间
+    Count = 0    #(BYTE Count)// 个数
+    FreeGoodsList = list()    #(vector<tagMCFreeGoods> FreeGoodsList)// 信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OpenTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temFreeGoodsList = tagMCFreeGoods()
+            _pos = temFreeGoodsList.ReadData(_lpData, _pos)
+            self.FreeGoodsList.append(temFreeGoodsList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x18
+        self.OpenTime = 0
+        self.Count = 0
+        self.FreeGoodsList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.FreeGoodsList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OpenTime)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.FreeGoodsList[i].GetLength(), self.FreeGoodsList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OpenTime:%d,
+                                Count:%d,
+                                FreeGoodsList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OpenTime,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFreeGoodsInfo=tagMCFreeGoodsInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFreeGoodsInfo.Head.Cmd,m_NAtagMCFreeGoodsInfo.Head.SubCmd))] = m_NAtagMCFreeGoodsInfo
 
 
 #------------------------------------------------------
@@ -11290,19 +12184,15 @@
 #------------------------------------------------------
 # A3 37 投资理财信息 #tagMCGoldInvestInfo
 
-class  tagMCLVInvestReward(Structure):
+class  tagMCInvestReward(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RewardLV", c_ushort),    # 回报等级
-                  ("RewardValue", c_int),    # 该等级已领取回报额度,0可认为未领取
+                  ("RewardIndex", c_ushort),    # 索引
+                  ("RewardValue", c_ubyte),    # 该等级已领取数据,0可认为未领取
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x37
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -11311,29 +12201,23 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x37
-        self.RewardLV = 0
+        self.RewardIndex = 0
         self.RewardValue = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCLVInvestReward)
+        return sizeof(tagMCInvestReward)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// A3 37 投资理财信息 //tagMCGoldInvestInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RewardLV:%d,
+                                RewardIndex:%d,
                                 RewardValue:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RewardLV,
+                                self.RewardIndex,
                                 self.RewardValue
                                 )
         return DumpString
@@ -11342,11 +12226,10 @@
 class  tagMCGoldInvestInfo(Structure):
     Head = tagHead()
     InvestType = 0    #(BYTE InvestType)// 投资类型
-    ServerDay = 0    #(DWORD ServerDay)// 投资时的开服天数
+    CurDay = 0    #(DWORD CurDay)// 当前天数
     InvestGold = 0    #(DWORD InvestGold)// 投资额度
-    RewardRecord = 0    #(DWORD RewardRecord)// 回报领取记录, 按位表示每一档回报是否已领取
-    LVRewardRecordCnt = 0    #(BYTE LVRewardRecordCnt)// 等级投资回报个数
-    LVInvestRewardList = list()    #(vector<tagMCLVInvestReward> LVInvestRewardList)// 等级投资回报记录
+    RewardRecordCnt = 0    #(BYTE RewardRecordCnt)// 投资回报个数
+    InvestRewardList = list()    #(vector<tagMCInvestReward> InvestRewardList)// 投资回报记录
     data = None
 
     def __init__(self):
@@ -11359,14 +12242,13 @@
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
         self.InvestType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerDay,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurDay,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.InvestGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RewardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LVRewardRecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.LVRewardRecordCnt):
-            temLVInvestRewardList = tagMCLVInvestReward()
-            _pos = temLVInvestRewardList.ReadData(_lpData, _pos)
-            self.LVInvestRewardList.append(temLVInvestRewardList)
+        self.RewardRecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RewardRecordCnt):
+            temInvestRewardList = tagMCInvestReward()
+            _pos = temInvestRewardList.ReadData(_lpData, _pos)
+            self.InvestRewardList.append(temInvestRewardList)
         return _pos
 
     def Clear(self):
@@ -11375,11 +12257,10 @@
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x37
         self.InvestType = 0
-        self.ServerDay = 0
+        self.CurDay = 0
         self.InvestGold = 0
-        self.RewardRecord = 0
-        self.LVRewardRecordCnt = 0
-        self.LVInvestRewardList = list()
+        self.RewardRecordCnt = 0
+        self.InvestRewardList = list()
         return
 
     def GetLength(self):
@@ -11388,10 +12269,9 @@
         length += 1
         length += 4
         length += 4
-        length += 4
         length += 1
-        for i in range(self.LVRewardRecordCnt):
-            length += self.LVInvestRewardList[i].GetLength()
+        for i in range(self.RewardRecordCnt):
+            length += self.InvestRewardList[i].GetLength()
 
         return length
 
@@ -11399,31 +12279,28 @@
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteBYTE(data, self.InvestType)
-        data = CommFunc.WriteDWORD(data, self.ServerDay)
+        data = CommFunc.WriteDWORD(data, self.CurDay)
         data = CommFunc.WriteDWORD(data, self.InvestGold)
-        data = CommFunc.WriteDWORD(data, self.RewardRecord)
-        data = CommFunc.WriteBYTE(data, self.LVRewardRecordCnt)
-        for i in range(self.LVRewardRecordCnt):
-            data = CommFunc.WriteString(data, self.LVInvestRewardList[i].GetLength(), self.LVInvestRewardList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RewardRecordCnt)
+        for i in range(self.RewardRecordCnt):
+            data = CommFunc.WriteString(data, self.InvestRewardList[i].GetLength(), self.InvestRewardList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
                                 InvestType:%d,
-                                ServerDay:%d,
+                                CurDay:%d,
                                 InvestGold:%d,
-                                RewardRecord:%d,
-                                LVRewardRecordCnt:%d,
-                                LVInvestRewardList:%s
+                                RewardRecordCnt:%d,
+                                InvestRewardList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.InvestType,
-                                self.ServerDay,
+                                self.CurDay,
                                 self.InvestGold,
-                                self.RewardRecord,
-                                self.LVRewardRecordCnt,
+                                self.RewardRecordCnt,
                                 "..."
                                 )
         return DumpString
@@ -11483,272 +12360,6 @@
 
 m_NAtagMCGrabRedPacketCnt=tagMCGrabRedPacketCnt()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGrabRedPacketCnt.Cmd,m_NAtagMCGrabRedPacketCnt.SubCmd))] = m_NAtagMCGrabRedPacketCnt
-
-
-#------------------------------------------------------
-#A3 07 该组玩家激活的卡片等级信息 #tagMCGroupMonsterTags
-
-class  tagMCGroupMonsterTags(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MonsterTags1", c_int),    #字典一中的数据(以数位存卡片等级)
-                  ("MonsterTags2", c_int),    #字典二中的数据
-                  ("GroupIndex", c_ubyte),    #怪物组别索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        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 = 0xA3
-        self.SubCmd = 0x07
-        self.MonsterTags1 = 0
-        self.MonsterTags2 = 0
-        self.GroupIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCGroupMonsterTags)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 07 该组玩家激活的卡片等级信息 //tagMCGroupMonsterTags:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MonsterTags1:%d,
-                                MonsterTags2:%d,
-                                GroupIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MonsterTags1,
-                                self.MonsterTags2,
-                                self.GroupIndex
-                                )
-        return DumpString
-
-
-m_NAtagMCGroupMonsterTags=tagMCGroupMonsterTags()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGroupMonsterTags.Cmd,m_NAtagMCGroupMonsterTags.SubCmd))] = m_NAtagMCGroupMonsterTags
-
-
-#------------------------------------------------------
-# A3 B1 守护激活信息 #tagMCGuardData
-
-class  tagMCGuard(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("GuardID", c_int),    #守护ID
-                  ("StarLV", c_ubyte),    # 星级(从0开始)
-                  ("ClassLV", c_ubyte),    # 当前品质等级(0为未激活)
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xB1
-        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 = 0xB1
-        self.GuardID = 0
-        self.StarLV = 0
-        self.ClassLV = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCGuard)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 B1 守护激活信息 //tagMCGuardData:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                GuardID:%d,
-                                StarLV:%d,
-                                ClassLV:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.GuardID,
-                                self.StarLV,
-                                self.ClassLV
-                                )
-        return DumpString
-
-
-class  tagMCGuardData(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)// 守护信息个数
-    InfoList = list()    #(vector<tagMCGuard> InfoList)// 守护信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB1
-        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):
-            temInfoList = tagMCGuard()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB1
-        self.Count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.InfoList[i].GetLength()
-
-        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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCGuardData=tagMCGuardData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuardData.Head.Cmd,m_NAtagMCGuardData.Head.SubCmd))] = m_NAtagMCGuardData
-
-
-#------------------------------------------------------
-# A3 29 魔方寻宝信息 #tagMCMagicTreasureInfo
-
-class  tagMCMagicTreasureInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MTCnt", c_int),    # 今日已寻宝次数
-                  ("GiftState", c_int),    # 寻宝次数返利领取状态, 按位表示0-未领, 1-已领
-                  ("SpecialType", c_int),    # 特殊寻宝活动类型
-                  ("CurLucky", c_int),    # 当前幸运值
-                  ("LuckyTime", c_int),    # 幸运寻宝开始时间, time值
-                  ("CurFreeCnt", c_ubyte),    # 当前可用免费次数
-                  ("OLTotalFreeCnt", c_ubyte),    # 今日在线时长总累计免费次数
-                  ("OLFreeTick", c_int),    # 单次在线奖励次数累计时长, 毫秒
-                  ("OLFreeLastRefreshTick", c_int),    # 上次刷新在线奖励寻宝次数tick
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        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 = 0xA3
-        self.SubCmd = 0x29
-        self.MTCnt = 0
-        self.GiftState = 0
-        self.SpecialType = 0
-        self.CurLucky = 0
-        self.LuckyTime = 0
-        self.CurFreeCnt = 0
-        self.OLTotalFreeCnt = 0
-        self.OLFreeTick = 0
-        self.OLFreeLastRefreshTick = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMagicTreasureInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 29 魔方寻宝信息 //tagMCMagicTreasureInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MTCnt:%d,
-                                GiftState:%d,
-                                SpecialType:%d,
-                                CurLucky:%d,
-                                LuckyTime:%d,
-                                CurFreeCnt:%d,
-                                OLTotalFreeCnt:%d,
-                                OLFreeTick:%d,
-                                OLFreeLastRefreshTick:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MTCnt,
-                                self.GiftState,
-                                self.SpecialType,
-                                self.CurLucky,
-                                self.LuckyTime,
-                                self.CurFreeCnt,
-                                self.OLTotalFreeCnt,
-                                self.OLFreeTick,
-                                self.OLFreeLastRefreshTick
-                                )
-        return DumpString
-
-
-m_NAtagMCMagicTreasureInfo=tagMCMagicTreasureInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicTreasureInfo.Cmd,m_NAtagMCMagicTreasureInfo.SubCmd))] = m_NAtagMCMagicTreasureInfo
 
 
 #------------------------------------------------------
@@ -11816,6 +12427,122 @@
 
 m_NAtagMCMagicWeaponData=tagMCMagicWeaponData()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponData.Head.Cmd,m_NAtagMCMagicWeaponData.Head.SubCmd))] = m_NAtagMCMagicWeaponData
+
+
+#------------------------------------------------------
+# A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo
+
+class  tagMCMagicWeaponInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("MWID", c_int),    
+                  ("LV", c_ubyte),    
+                  ("Exp", c_int),    
+                  ("State", c_ubyte),    #是否点击法宝认主
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.MWID = 0
+        self.LV = 0
+        self.Exp = 0
+        self.State = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMagicWeaponInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 52 法宝等级信息 //tagMCMagicWeaponLVInfo:
+                                MWID:%d,
+                                LV:%d,
+                                Exp:%d,
+                                State:%d
+                                '''\
+                                %(
+                                self.MWID,
+                                self.LV,
+                                self.Exp,
+                                self.State
+                                )
+        return DumpString
+
+
+class  tagMCMagicWeaponLVInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 信息个数
+    InfoList = list()    #(vector<tagMCMagicWeaponInfo> InfoList)// 信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x52
+        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):
+            temInfoList = tagMCMagicWeaponInfo()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x52
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.InfoList[i].GetLength()
+
+        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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCMagicWeaponLVInfo=tagMCMagicWeaponLVInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponLVInfo.Head.Cmd,m_NAtagMCMagicWeaponLVInfo.Head.SubCmd))] = m_NAtagMCMagicWeaponLVInfo
 
 
 #------------------------------------------------------
@@ -12342,18 +13069,69 @@
 
 
 #------------------------------------------------------
-#A3 AB 抽取图鉴卡片结果 #tagCMMonsterCardLottery
+# A3 53 法宝特权数据 #tagMCMWPrivilegeDataInfo
 
-class  tagCMMonsterCardLottery(Structure):
+class  tagMCMWPrivilegeData(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PriID", c_int),    # 特权ID
+                  ("State", c_ubyte),    #激活状态
+                  ("CurValue", c_int),    #当前总进度
+                  ("GotValue", c_int),    #已领取进度
+                  ("ItemAwardState", c_ubyte),    #物品奖励是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.PriID = 0
+        self.State = 0
+        self.CurValue = 0
+        self.GotValue = 0
+        self.ItemAwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMWPrivilegeData)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 53 法宝特权数据 //tagMCMWPrivilegeDataInfo:
+                                PriID:%d,
+                                State:%d,
+                                CurValue:%d,
+                                GotValue:%d,
+                                ItemAwardState:%d
+                                '''\
+                                %(
+                                self.PriID,
+                                self.State,
+                                self.CurValue,
+                                self.GotValue,
+                                self.ItemAwardState
+                                )
+        return DumpString
+
+
+class  tagMCMWPrivilegeDataInfo(Structure):
     Head = tagHead()
-    Count = 0    #(BYTE Count)//抽奖结果数
-    ResultList = list()    #(vector<DWORD> ResultList)//抽奖结果列表size = Count    
+    Count = 0    #(BYTE Count)// 信息个数
+    InfoList = list()    #(vector<tagMCMWPrivilegeData> InfoList)// 信息列表
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xAB
+        self.Head.SubCmd = 0x53
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
@@ -12361,24 +13139,26 @@
         _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.ResultList.append(value)
+            temInfoList = tagMCMWPrivilegeData()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xAB
+        self.Head.SubCmd = 0x53
         self.Count = 0
-        self.ResultList = list()
+        self.InfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        length += 4 * self.Count
+        for i in range(self.Count):
+            length += self.InfoList[i].GetLength()
 
         return length
 
@@ -12387,14 +13167,14 @@
         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.ResultList[i])
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
                                 Count:%d,
-                                ResultList:%s
+                                InfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -12404,64 +13184,8 @@
         return DumpString
 
 
-m_NAtagCMMonsterCardLottery=tagCMMonsterCardLottery()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMonsterCardLottery.Head.Cmd,m_NAtagCMMonsterCardLottery.Head.SubCmd))] = m_NAtagCMMonsterCardLottery
-
-
-#------------------------------------------------------
-#A3 06 怪物图鉴馆等级,经验信息 #tagMCMonsterLabInfo
-
-class  tagMCMonsterLabInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LabLV", c_int),    #图鉴馆等级
-                  ("LabExp", c_int),    #图鉴馆经验
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        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 = 0xA3
-        self.SubCmd = 0x06
-        self.LabLV = 0
-        self.LabExp = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMonsterLabInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 06 怪物图鉴馆等级,经验信息 //tagMCMonsterLabInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LabLV:%d,
-                                LabExp:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LabLV,
-                                self.LabExp
-                                )
-        return DumpString
-
-
-m_NAtagMCMonsterLabInfo=tagMCMonsterLabInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMonsterLabInfo.Cmd,m_NAtagMCMonsterLabInfo.SubCmd))] = m_NAtagMCMonsterLabInfo
+m_NAtagMCMWPrivilegeDataInfo=tagMCMWPrivilegeDataInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMWPrivilegeDataInfo.Head.Cmd,m_NAtagMCMWPrivilegeDataInfo.Head.SubCmd))] = m_NAtagMCMWPrivilegeDataInfo
 
 
 #------------------------------------------------------
@@ -12470,16 +13194,12 @@
 class  tagMCNPCIDCollectionCnt(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
                   ("NPCID", c_int),    #NPCID
                   ("CollectionCnt", c_ubyte),    #已采集次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x26
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -12488,8 +13208,6 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x26
         self.NPCID = 0
         self.CollectionCnt = 0
         return
@@ -12502,14 +13220,10 @@
 
     def OutputString(self):
         DumpString = '''// A3 26 NPCID已采集次数信息 //tagMCNPCIDCollectionCntInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
                                 NPCID:%d,
                                 CollectionCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
                                 self.NPCID,
                                 self.CollectionCnt
                                 )
@@ -12586,18 +13300,91 @@
 #A3 08 在线奖励信息 #tagMCOnlinePrize
 
 class  tagMCOnlinePrize(Structure):
+    Head = tagHead()
+    OnlineTime = 0    #(DWORD OnlineTime)//在线时间毫秒
+    Len = 0    #(BYTE Len)
+    PrizeInfo = list()    #(vector<DWORD> PrizeInfo)//领奖记录
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.PrizeInfo.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x08
+        self.OnlineTime = 0
+        self.Len = 0
+        self.PrizeInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 4 * self.Len
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OnlineTime)
+        data = CommFunc.WriteBYTE(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteDWORD(data, self.PrizeInfo[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OnlineTime:%d,
+                                Len:%d,
+                                PrizeInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OnlineTime,
+                                self.Len,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCOnlinePrize=tagMCOnlinePrize()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrize.Head.Cmd,m_NAtagMCOnlinePrize.Head.SubCmd))] = m_NAtagMCOnlinePrize
+
+
+#------------------------------------------------------
+# A3 19 分包下载奖励记录 #tagMCPackDownloadRecord
+
+class  tagMCPackDownloadRecord(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("OnlineTime", c_int),    #在线时间毫秒
-                  ("PrizeInfo", c_int),    #领奖记录
+                  ("Record", c_ubyte),    #0-未领取 1-已领取    
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA3
-        self.SubCmd = 0x08
+        self.SubCmd = 0x19
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -12607,35 +13394,32 @@
 
     def Clear(self):
         self.Cmd = 0xA3
-        self.SubCmd = 0x08
-        self.OnlineTime = 0
-        self.PrizeInfo = 0
+        self.SubCmd = 0x19
+        self.Record = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCOnlinePrize)
+        return sizeof(tagMCPackDownloadRecord)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A3 08 在线奖励信息 //tagMCOnlinePrize:
+        DumpString = '''// A3 19 分包下载奖励记录 //tagMCPackDownloadRecord:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                OnlineTime:%d,
-                                PrizeInfo:%d
+                                Record:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.OnlineTime,
-                                self.PrizeInfo
+                                self.Record
                                 )
         return DumpString
 
 
-m_NAtagMCOnlinePrize=tagMCOnlinePrize()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrize.Cmd,m_NAtagMCOnlinePrize.SubCmd))] = m_NAtagMCOnlinePrize
+m_NAtagMCPackDownloadRecord=tagMCPackDownloadRecord()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPackDownloadRecord.Cmd,m_NAtagMCPackDownloadRecord.SubCmd))] = m_NAtagMCPackDownloadRecord
 
 
 #------------------------------------------------------
@@ -12645,6 +13429,7 @@
     FBID = 0    #(DWORD FBID)//fbId
     EnterCnt = 0    #(WORD EnterCnt)//当日进入次数
     RecoverCnt = 0    #(WORD RecoverCnt)//找回次数
+    ItemAddCnt = 0    #(WORD ItemAddCnt)//物品增加次数
     PassGradeCnt = 0    #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID
     PassGrade = list()    #(vector<DWORD> PassGrade)//副本线路对应星级值列表
     data = None
@@ -12658,6 +13443,7 @@
         self.FBID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.EnterCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RecoverCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemAddCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PassGradeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.PassGradeCnt):
             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
@@ -12668,6 +13454,7 @@
         self.FBID = 0
         self.EnterCnt = 0
         self.RecoverCnt = 0
+        self.ItemAddCnt = 0
         self.PassGradeCnt = 0
         self.PassGrade = list()
         return
@@ -12675,6 +13462,7 @@
     def GetLength(self):
         length = 0
         length += 4
+        length += 2
         length += 2
         length += 2
         length += 1
@@ -12687,6 +13475,7 @@
         data = CommFunc.WriteDWORD(data, self.FBID)
         data = CommFunc.WriteWORD(data, self.EnterCnt)
         data = CommFunc.WriteWORD(data, self.RecoverCnt)
+        data = CommFunc.WriteWORD(data, self.ItemAddCnt)
         data = CommFunc.WriteBYTE(data, self.PassGradeCnt)
         for i in range(self.PassGradeCnt):
             data = CommFunc.WriteDWORD(data, self.PassGrade[i])
@@ -12697,6 +13486,7 @@
                                 FBID:%d,
                                 EnterCnt:%d,
                                 RecoverCnt:%d,
+                                ItemAddCnt:%d,
                                 PassGradeCnt:%d,
                                 PassGrade:%s
                                 '''\
@@ -12704,6 +13494,7 @@
                                 self.FBID,
                                 self.EnterCnt,
                                 self.RecoverCnt,
+                                self.ItemAddCnt,
                                 self.PassGradeCnt,
                                 "..."
                                 )
@@ -12785,6 +13576,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("LVAwardGetRecord", c_int),    # 按二进制位标示领取记录,每位对应的等级在配表中配置,服务端客户端对应
+                  ("VIPAwardRecord", c_int),    # 按二进制位标示vip领取记录,每位对应的等级在配表中配置,服务端客户端对应
                   ]
 
     def __init__(self):
@@ -12802,6 +13594,7 @@
         self.Cmd = 0xA3
         self.SubCmd = 0x0B
         self.LVAwardGetRecord = 0
+        self.VIPAwardRecord = 0
         return
 
     def GetLength(self):
@@ -12814,12 +13607,14 @@
         DumpString = '''//A3 0B 玩家等级奖励领取记录信息 //tagMCPlayerLVAwardGetRecord:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                LVAwardGetRecord:%d
+                                LVAwardGetRecord:%d,
+                                VIPAwardRecord:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.LVAwardGetRecord
+                                self.LVAwardGetRecord,
+                                self.VIPAwardRecord
                                 )
         return DumpString
 
@@ -13024,58 +13819,6 @@
 
 
 #------------------------------------------------------
-#A3 0E 玩家累计签到次数 # tagMCPlayerSignCntTotal
-
-class  tagMCPlayerSignCntTotal(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SignCount", c_ubyte),    # 累计签到次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0E
-        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 = 0x0E
-        self.SignCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCPlayerSignCntTotal)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 0E 玩家累计签到次数 // tagMCPlayerSignCntTotal:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SignCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SignCount
-                                )
-        return DumpString
-
-
-m_NAtagMCPlayerSignCntTotal=tagMCPlayerSignCntTotal()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerSignCntTotal.Cmd,m_NAtagMCPlayerSignCntTotal.SubCmd))] = m_NAtagMCPlayerSignCntTotal
-
-
-#------------------------------------------------------
 # A3 BF 通知客户端炼丹炉信息 #tagMCPlayerStoveMsg
 
 class  tagMCPlayerStoveMsg(Structure):
@@ -13136,18 +13879,21 @@
 
 
 #------------------------------------------------------
-#A3 38    新符文系统符文信息#tagMCPropEnhanceInfo
+# A3 21 祈福丹药结果 #tagMCPrayElixirResult
 
-class  tagPropEnhanceStone(Structure):
+class  tagMCPrayElixirResult(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("index", c_ubyte),    #符文索引
-                  ("LV", c_ubyte),    #当前等级
-                  ("Exp", c_int),    #当前经验    
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ItemID", c_int),    # 物品ID
+                  ("PrayCnt", c_ubyte),    # 今日祈福次数
                   ]
 
     def __init__(self):
         self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x21
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -13156,95 +13902,36 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.index = 0
-        self.LV = 0
-        self.Exp = 0
+        self.Cmd = 0xA3
+        self.SubCmd = 0x21
+        self.ItemID = 0
+        self.PrayCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagPropEnhanceStone)
+        return sizeof(tagMCPrayElixirResult)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A3 38    新符文系统符文信息//tagMCPropEnhanceInfo:
-                                index:%d,
-                                LV:%d,
-                                Exp:%d
+        DumpString = '''// A3 21 祈福丹药结果 //tagMCPrayElixirResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ItemID:%d,
+                                PrayCnt:%d
                                 '''\
                                 %(
-                                self.index,
-                                self.LV,
-                                self.Exp
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ItemID,
+                                self.PrayCnt
                                 )
         return DumpString
 
 
-class  tagMCPropEnhanceInfo(Structure):
-    Head = tagHead()
-    count = 0    #(BYTE count)//符文信息个数
-    InfoList = list()    #(vector<tagPropEnhanceStone> InfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x38
-        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):
-            temInfoList = tagPropEnhanceStone()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x38
-        self.count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.count):
-            length += self.InfoList[i].GetLength()
-
-        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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCPropEnhanceInfo=tagMCPropEnhanceInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPropEnhanceInfo.Head.Cmd,m_NAtagMCPropEnhanceInfo.Head.SubCmd))] = m_NAtagMCPropEnhanceInfo
+m_NAtagMCPrayElixirResult=tagMCPrayElixirResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrayElixirResult.Cmd,m_NAtagMCPrayElixirResult.SubCmd))] = m_NAtagMCPrayElixirResult
 
 
 #------------------------------------------------------
@@ -13256,7 +13943,8 @@
                   ("Index", c_ubyte),    # 找回项索引
                   ("RecoverCnt", c_ubyte),    # 可找回次数
                   ("ExtraCnt", c_ubyte),    # VIP额外次数
-                  ("ExtraData", c_ubyte),    # 额外参数
+                  ("ExtraData", c_ubyte),    # 额外参数1
+                  ("ExtraData2", c_ubyte),    # 额外参数2
                   ]
 
     def __init__(self):
@@ -13273,6 +13961,7 @@
         self.RecoverCnt = 0
         self.ExtraCnt = 0
         self.ExtraData = 0
+        self.ExtraData2 = 0
         return
 
     def GetLength(self):
@@ -13286,13 +13975,15 @@
                                 Index:%d,
                                 RecoverCnt:%d,
                                 ExtraCnt:%d,
-                                ExtraData:%d
+                                ExtraData:%d,
+                                ExtraData2:%d
                                 '''\
                                 %(
                                 self.Index,
                                 self.RecoverCnt,
                                 self.ExtraCnt,
-                                self.ExtraData
+                                self.ExtraData,
+                                self.ExtraData2
                                 )
         return DumpString
 
@@ -13500,6 +14191,7 @@
     EquipPlace = 0    #(BYTE EquipPlace)// 装备位    
     MaxStoneCount = 0    #(BYTE MaxStoneCount)// 最大孔数
     StoneInfo = list()    #(vector<DWORD> StoneInfo)// 孔内宝石信息
+    StoneBind = list()    #(vector<BYTE> StoneBind)// 孔内宝石是否绑定
     data = None
 
     def __init__(self):
@@ -13513,12 +14205,16 @@
         for i in range(self.MaxStoneCount):
             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
             self.StoneInfo.append(value)
+        for i in range(self.MaxStoneCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.StoneBind.append(value)
         return _pos
 
     def Clear(self):
         self.EquipPlace = 0
         self.MaxStoneCount = 0
         self.StoneInfo = list()
+        self.StoneBind = list()
         return
 
     def GetLength(self):
@@ -13526,6 +14222,7 @@
         length += 1
         length += 1
         length += 4 * self.MaxStoneCount
+        length += 1 * self.MaxStoneCount
 
         return length
 
@@ -13535,17 +14232,21 @@
         data = CommFunc.WriteBYTE(data, self.MaxStoneCount)
         for i in range(self.MaxStoneCount):
             data = CommFunc.WriteDWORD(data, self.StoneInfo[i])
+        for i in range(self.MaxStoneCount):
+            data = CommFunc.WriteBYTE(data, self.StoneBind[i])
         return data
 
     def OutputString(self):
         DumpString = '''
                                 EquipPlace:%d,
                                 MaxStoneCount:%d,
-                                StoneInfo:%s
+                                StoneInfo:%s,
+                                StoneBind:%s
                                 '''\
                                 %(
                                 self.EquipPlace,
                                 self.MaxStoneCount,
+                                "...",
                                 "..."
                                 )
         return DumpString
@@ -13672,10 +14373,49 @@
 #------------------------------------------------------
 #A3 42  成就完成领奖记录列表 #tagMCSuccessFinishAwardRecordList
 
+class  tagMCSuccessFinishAwardRecord(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个succid   0-30为0, 31-61为1..
+                  ("Record", c_int),    #对应是否领取值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.RecordIndex = 0
+        self.Record = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSuccessFinishAwardRecord)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//A3 42  成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList:
+                                RecordIndex:%d,
+                                Record:%d
+                                '''\
+                                %(
+                                self.RecordIndex,
+                                self.Record
+                                )
+        return DumpString
+
+
 class  tagMCSuccessFinishAwardRecordList(Structure):
     Head = tagHead()
-    RecordCnt = 0    #(BYTE RecordCnt)//记录值对应个数, 每个key存31个succid
-    RecordList = list()    #(vector<DWORD> RecordList)//对应是否领取值列表
+    RecordCnt = 0    #(WORD RecordCnt)//记录个数
+    RecordList = list()    #(vector<tagMCSuccessFinishAwardRecord> RecordList)//记录列表
     data = None
 
     def __init__(self):
@@ -13687,10 +14427,11 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.RecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         for i in range(self.RecordCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.RecordList.append(value)
+            temRecordList = tagMCSuccessFinishAwardRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
         return _pos
 
     def Clear(self):
@@ -13705,17 +14446,18 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 1
-        length += 4 * self.RecordCnt
+        length += 2
+        for i in range(self.RecordCnt):
+            length += self.RecordList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RecordCnt)
+        data = CommFunc.WriteWORD(data, self.RecordCnt)
         for i in range(self.RecordCnt):
-            data = CommFunc.WriteDWORD(data, self.RecordList[i])
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
         return data
 
     def OutputString(self):
@@ -13740,39 +14482,59 @@
 # A3 40  成就信息列表 #tagMCSuccessInfoList
 
 class  tagMCSuccessInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("SuccID", c_int),    #成就ID
-                  ("CntValue", c_int),    #当前完成进度值
-                  ]
+    SuccType = 0    #(WORD SuccType)//成就类型
+    Len = 0    #(WORD Len)//条件长度
+    Condition = ""    #(String Condition)//成就条件
+    CntValue = 0    #(DWORD CntValue)//当前完成进度值
+    data = None
 
     def __init__(self):
         self.Clear()
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        self.SuccType,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Condition,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
+        self.CntValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
 
     def Clear(self):
-        self.SuccID = 0
+        self.SuccType = 0
+        self.Len = 0
+        self.Condition = ""
         self.CntValue = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCSuccessInfo)
+        length = 0
+        length += 2
+        length += 2
+        length += len(self.Condition)
+        length += 4
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteWORD(data, self.SuccType)
+        data = CommFunc.WriteWORD(data, self.Len)
+        data = CommFunc.WriteString(data, self.Len, self.Condition)
+        data = CommFunc.WriteDWORD(data, self.CntValue)
+        return data
 
     def OutputString(self):
-        DumpString = '''// A3 40  成就信息列表 //tagMCSuccessInfoList:
-                                SuccID:%d,
+        DumpString = '''
+                                SuccType:%d,
+                                Len:%d,
+                                Condition:%s,
                                 CntValue:%d
                                 '''\
                                 %(
-                                self.SuccID,
+                                self.SuccType,
+                                self.Len,
+                                self.Condition,
                                 self.CntValue
                                 )
         return DumpString
@@ -14095,70 +14857,6 @@
 
 
 #------------------------------------------------------
-#A3 32 通知魔方寻宝获得物品 #tagMCMagicTreasureGetItem
-
-class  tagMCMagicTreasureGetItem(Structure):
-    Head = tagHead()
-    MTItemLen = 0    #(DWORD MTItemLen)
-    MTItemData = ""    #(String MTItemData)//  获得物品信息 [[物品1参数列表], [物品2参数列表], ...] ; 参数列表索引0为itemID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x32
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.MTItemLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MTItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.MTItemLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x32
-        self.MTItemLen = 0
-        self.MTItemData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += len(self.MTItemData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.MTItemLen)
-        data = CommFunc.WriteString(data, self.MTItemLen, self.MTItemData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                MTItemLen:%d,
-                                MTItemData:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.MTItemLen,
-                                self.MTItemData
-                                )
-        return DumpString
-
-
-m_NAtagMCMagicTreasureGetItem=tagMCMagicTreasureGetItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicTreasureGetItem.Head.Cmd,m_NAtagMCMagicTreasureGetItem.Head.SubCmd))] = m_NAtagMCMagicTreasureGetItem
-
-
-#------------------------------------------------------
 #A3 01 坐骑培养信息 #tagTrainHorseData
 
 class  tagMCHorseInfo(Structure):
@@ -14280,76 +14978,72 @@
 #------------------------------------------------------
 # A3 51 寻宝功能信息 #tagMCTreasureInfo
 
-class  tagMCTreasureNumInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TreasureNum", c_ubyte),    # 自定义的寻宝编号
-                  ("CurFreeCnt", c_ubyte),    # 当前可用免费次数
-                  ("TodayFreeCnt", c_ubyte),    # 今日已累计免费次数
-                  ("StartCalcFreeCntTime", c_int),    # 开始计算免费次数时间time值
-                  ("IsPlayTreasure", c_ubyte),    # 是否寻宝过,含免费次数
-                  ("IsPlayGoldTreasure", c_ubyte),    # 是否钻石寻宝过
-                  ]
+class  tagMCTreasureTypeInfo(Structure):
+    TreasureType = 0    #(BYTE TreasureType)//寻宝类型
+    LuckValue = 0    #(WORD LuckValue)//当前幸运值
+    IndexCount = 0    #(BYTE IndexCount)//索引个数
+    FreeCountTime = list()    #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x51
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.FreeCountTime.append(value)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x51
-        self.TreasureNum = 0
-        self.CurFreeCnt = 0
-        self.TodayFreeCnt = 0
-        self.StartCalcFreeCntTime = 0
-        self.IsPlayTreasure = 0
-        self.IsPlayGoldTreasure = 0
+        self.TreasureType = 0
+        self.LuckValue = 0
+        self.IndexCount = 0
+        self.FreeCountTime = list()
         return
 
     def GetLength(self):
-        return sizeof(tagMCTreasureNumInfo)
+        length = 0
+        length += 1
+        length += 2
+        length += 1
+        length += 4 * self.IndexCount
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TreasureType)
+        data = CommFunc.WriteWORD(data, self.LuckValue)
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteDWORD(data, self.FreeCountTime[i])
+        return data
 
     def OutputString(self):
-        DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TreasureNum:%d,
-                                CurFreeCnt:%d,
-                                TodayFreeCnt:%d,
-                                StartCalcFreeCntTime:%d,
-                                IsPlayTreasure:%d,
-                                IsPlayGoldTreasure:%d
+        DumpString = '''
+                                TreasureType:%d,
+                                LuckValue:%d,
+                                IndexCount:%d,
+                                FreeCountTime:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TreasureNum,
-                                self.CurFreeCnt,
-                                self.TodayFreeCnt,
-                                self.StartCalcFreeCntTime,
-                                self.IsPlayTreasure,
-                                self.IsPlayGoldTreasure
+                                self.TreasureType,
+                                self.LuckValue,
+                                self.IndexCount,
+                                "..."
                                 )
         return DumpString
 
 
 class  tagMCTreasureInfo(Structure):
     Head = tagHead()
-    TreauserActionType = 0    #(DWORD TreauserActionType)// 当前寻宝活动类型, 默认0
-    TreasuerNumInfoCnt = 0    #(BYTE TreasuerNumInfoCnt)// 寻宝编号信息数
-    TreasuerNumInfo = list()    #(vector<tagMCTreasureNumInfo> TreasuerNumInfo)// 寻宝编号信息列表
+    InfoCount = 0    #(BYTE InfoCount)// 寻宝类型信息数
+    TreasuerInfoList = list()    #(vector<tagMCTreasureTypeInfo> TreasuerInfoList)// 寻宝类型信息列表
     data = None
 
     def __init__(self):
@@ -14361,12 +15055,11 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.TreauserActionType,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TreasuerNumInfoCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TreasuerNumInfoCnt):
-            temTreasuerNumInfo = tagMCTreasureNumInfo()
-            _pos = temTreasuerNumInfo.ReadData(_lpData, _pos)
-            self.TreasuerNumInfo.append(temTreasuerNumInfo)
+        self.InfoCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.InfoCount):
+            temTreasuerInfoList = tagMCTreasureTypeInfo()
+            _pos = temTreasuerInfoList.ReadData(_lpData, _pos)
+            self.TreasuerInfoList.append(temTreasuerInfoList)
         return _pos
 
     def Clear(self):
@@ -14374,41 +15067,36 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x51
-        self.TreauserActionType = 0
-        self.TreasuerNumInfoCnt = 0
-        self.TreasuerNumInfo = list()
+        self.InfoCount = 0
+        self.TreasuerInfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 4
         length += 1
-        for i in range(self.TreasuerNumInfoCnt):
-            length += self.TreasuerNumInfo[i].GetLength()
+        for i in range(self.InfoCount):
+            length += self.TreasuerInfoList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.TreauserActionType)
-        data = CommFunc.WriteBYTE(data, self.TreasuerNumInfoCnt)
-        for i in range(self.TreasuerNumInfoCnt):
-            data = CommFunc.WriteString(data, self.TreasuerNumInfo[i].GetLength(), self.TreasuerNumInfo[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.InfoCount)
+        for i in range(self.InfoCount):
+            data = CommFunc.WriteString(data, self.TreasuerInfoList[i].GetLength(), self.TreasuerInfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                TreauserActionType:%d,
-                                TreasuerNumInfoCnt:%d,
-                                TreasuerNumInfo:%s
+                                InfoCount:%d,
+                                TreasuerInfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.TreauserActionType,
-                                self.TreasuerNumInfoCnt,
+                                self.InfoCount,
                                 "..."
                                 )
         return DumpString
@@ -14423,9 +15111,10 @@
 
 class  tagMCTreasureResult(Structure):
     Head = tagHead()
-    AddTreasureMoney = 0    #(WORD AddTreasureMoney)// 本次寻宝增加的货币碎片
+    AddTreasureScore = 0    #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分
+    AddTreasureLuck = 0    #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
     TreasureResultLen = 0    #(WORD TreasureResultLen)
-    TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[物品ID,个数,是否绑定,是否好物品], ...]
+    TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
     data = None
 
     def __init__(self):
@@ -14437,7 +15126,8 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.AddTreasureMoney,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
         return _pos
@@ -14447,7 +15137,8 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x50
-        self.AddTreasureMoney = 0
+        self.AddTreasureScore = 0
+        self.AddTreasureLuck = 0
         self.TreasureResultLen = 0
         self.TreasureResult = ""
         return
@@ -14457,6 +15148,7 @@
         length += self.Head.GetLength()
         length += 2
         length += 2
+        length += 2
         length += len(self.TreasureResult)
 
         return length
@@ -14464,7 +15156,8 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.AddTreasureMoney)
+        data = CommFunc.WriteWORD(data, self.AddTreasureScore)
+        data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
         data = CommFunc.WriteWORD(data, self.TreasureResultLen)
         data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
         return data
@@ -14472,13 +15165,15 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                AddTreasureMoney:%d,
+                                AddTreasureScore:%d,
+                                AddTreasureLuck:%d,
                                 TreasureResultLen:%d,
                                 TreasureResult:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.AddTreasureMoney,
+                                self.AddTreasureScore,
+                                self.AddTreasureLuck,
                                 self.TreasureResultLen,
                                 self.TreasureResult
                                 )
@@ -14498,6 +15193,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("PassLV", c_int),    
+                  ("YesterDayPassLV", c_int),    
                   ]
 
     def __init__(self):
@@ -14515,6 +15211,7 @@
         self.Cmd = 0xA3
         self.SubCmd = 0xBA
         self.PassLV = 0
+        self.YesterDayPassLV = 0
         return
 
     def GetLength(self):
@@ -14527,122 +15224,20 @@
         DumpString = '''// A3 BA 通知试炼之塔过关数 //tagMCTrialTowerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PassLV:%d
+                                PassLV:%d,
+                                YesterDayPassLV:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PassLV
+                                self.PassLV,
+                                self.YesterDayPassLV
                                 )
         return DumpString
 
 
 m_NAtagMCTrialTowerInfo=tagMCTrialTowerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTrialTowerInfo.Cmd,m_NAtagMCTrialTowerInfo.SubCmd))] = m_NAtagMCTrialTowerInfo
-
-
-#------------------------------------------------------
-#A3 AA 刷新玩家图鉴兑换点数#tagMCUpdatePlayerMonsterCurrency
-
-class  tagMCUpdatePlayerMonsterCurrency(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Value", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xAA
-        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 = 0xAA
-        self.Value = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCUpdatePlayerMonsterCurrency)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 AA 刷新玩家图鉴兑换点数//tagMCUpdatePlayerMonsterCurrency:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Value:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Value
-                                )
-        return DumpString
-
-
-m_NAtagMCUpdatePlayerMonsterCurrency=tagMCUpdatePlayerMonsterCurrency()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUpdatePlayerMonsterCurrency.Cmd,m_NAtagMCUpdatePlayerMonsterCurrency.SubCmd))] = m_NAtagMCUpdatePlayerMonsterCurrency
-
-
-#------------------------------------------------------
-# A3 25 VIP副本过关情况 #tagMCVIPFBPassInfo
-
-class  tagMCVIPFBPassInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PassInfo", c_int),    #按位表示通关次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x25
-        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 = 0x25
-        self.PassInfo = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCVIPFBPassInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 25 VIP副本过关情况 //tagMCVIPFBPassInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PassInfo:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PassInfo
-                                )
-        return DumpString
-
-
-m_NAtagMCVIPFBPassInfo=tagMCVIPFBPassInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVIPFBPassInfo.Cmd,m_NAtagMCVIPFBPassInfo.SubCmd))] = m_NAtagMCVIPFBPassInfo
 
 
 #------------------------------------------------------
@@ -14845,6 +15440,114 @@
 
 m_NAtagPyMCWorldAverageLv=tagPyMCWorldAverageLv()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyMCWorldAverageLv.Cmd,m_NAtagPyMCWorldAverageLv.SubCmd))] = m_NAtagPyMCWorldAverageLv
+
+
+#------------------------------------------------------
+# A3 48 仙宝寻主领奖记录 #tagMCXBXZAwardRecordList
+
+class  tagMCXBXZAwardRecord(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个id   0-30为0, 31-61为1..
+                  ("Record", c_int),    #对应是否领取值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.RecordIndex = 0
+        self.Record = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCXBXZAwardRecord)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 48 仙宝寻主领奖记录 //tagMCXBXZAwardRecordList:
+                                RecordIndex:%d,
+                                Record:%d
+                                '''\
+                                %(
+                                self.RecordIndex,
+                                self.Record
+                                )
+        return DumpString
+
+
+class  tagMCXBXZAwardRecordList(Structure):
+    Head = tagHead()
+    RecordCnt = 0    #(WORD RecordCnt)//记录个数
+    RecordList = list()    #(vector<tagMCXBXZAwardRecord> RecordList)//记录列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x48
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.RecordCnt):
+            temRecordList = tagMCXBXZAwardRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x48
+        self.RecordCnt = 0
+        self.RecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.RecordCnt):
+            length += self.RecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.RecordCnt)
+        for i in range(self.RecordCnt):
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCnt:%d,
+                                RecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCXBXZAwardRecordList=tagMCXBXZAwardRecordList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXBXZAwardRecordList.Head.Cmd,m_NAtagMCXBXZAwardRecordList.Head.SubCmd))] = m_NAtagMCXBXZAwardRecordList
 
 
 #------------------------------------------------------
@@ -15932,6 +16635,183 @@
 
 
 #------------------------------------------------------
+# A7 15 通知仙盟抢Boss伤血信息 #tagMCFamilyBossHurtList
+
+class  tagMCFamilyBossHurt(Structure):
+    FamilyID = 0    #(DWORD FamilyID)// 所属仙盟ID
+    HurtID = 0    #(DWORD HurtID)// 伤血的ID, 根据伤血类型表示不同的ID, 如仙盟ID或玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    HurtName = ""    #(String HurtName)
+    HurtValue = 0    #(DWORD HurtValue)// 累计伤血,求余1亿的值
+    HurtValueEx = 0    #(DWORD HurtValueEx)// 累计伤血,整除1亿的值
+    InitTick = 0    #(DWORD InitTick)// 伤血初始tick,用于排序,先按伤血倒序排,再按tick正序排
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HurtName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.InitTick,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.FamilyID = 0
+        self.HurtID = 0
+        self.NameLen = 0
+        self.HurtName = ""
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        self.InitTick = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.HurtName)
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteDWORD(data, self.HurtID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.HurtName)
+        data = CommFunc.WriteDWORD(data, self.HurtValue)
+        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
+        data = CommFunc.WriteDWORD(data, self.InitTick)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                FamilyID:%d,
+                                HurtID:%d,
+                                NameLen:%d,
+                                HurtName:%s,
+                                HurtValue:%d,
+                                HurtValueEx:%d,
+                                InitTick:%d
+                                '''\
+                                %(
+                                self.FamilyID,
+                                self.HurtID,
+                                self.NameLen,
+                                self.HurtName,
+                                self.HurtValue,
+                                self.HurtValueEx,
+                                self.InitTick
+                                )
+        return DumpString
+
+
+class  tagMCFamilyBossHurtList(Structure):
+    Head = tagHead()
+    ObjID = 0    #(DWORD ObjID)
+    NPCID = 0    #(DWORD NPCID)
+    HurtType = 0    #(BYTE HurtType)// 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血
+    IsSort = 0    #(BYTE IsSort)// 是否排序过的,一般boss被击杀后会统一同步一次排序过的最终结果,其他情况下客户端自己排序
+    HurtCount = 0    #(WORD HurtCount)// 伤血个数
+    HurtList = list()    #(vector<tagMCFamilyBossHurt> HurtList)// 伤血列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsSort,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HurtCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.HurtCount):
+            temHurtList = tagMCFamilyBossHurt()
+            _pos = temHurtList.ReadData(_lpData, _pos)
+            self.HurtList.append(temHurtList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x15
+        self.ObjID = 0
+        self.NPCID = 0
+        self.HurtType = 0
+        self.IsSort = 0
+        self.HurtCount = 0
+        self.HurtList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 1
+        length += 1
+        length += 2
+        for i in range(self.HurtCount):
+            length += self.HurtList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ObjID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteBYTE(data, self.HurtType)
+        data = CommFunc.WriteBYTE(data, self.IsSort)
+        data = CommFunc.WriteWORD(data, self.HurtCount)
+        for i in range(self.HurtCount):
+            data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ObjID:%d,
+                                NPCID:%d,
+                                HurtType:%d,
+                                IsSort:%d,
+                                HurtCount:%d,
+                                HurtList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ObjID,
+                                self.NPCID,
+                                self.HurtType,
+                                self.IsSort,
+                                self.HurtCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFamilyBossHurtList=tagMCFamilyBossHurtList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyBossHurtList.Head.Cmd,m_NAtagMCFamilyBossHurtList.Head.SubCmd))] = m_NAtagMCFamilyBossHurtList
+
+
+#------------------------------------------------------
 # A7 03 通知进入副本时间 #tagMCFBEnterTickList
 
 class  tagMCFBEnterTick(Structure):
@@ -16107,6 +16987,121 @@
 
 
 #------------------------------------------------------
+# A7 14 通知查询的NPC数量 #tagMCNPCCntList
+
+class  tagMCNPCCntInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NPCID", c_int),    
+                  ("Cnt", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.NPCID = 0
+        self.Cnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCNPCCntInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 14 通知查询的NPC数量 //tagMCNPCCntList:
+                                NPCID:%d,
+                                Cnt:%d
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.Cnt
+                                )
+        return DumpString
+
+
+class  tagMCNPCCntList(Structure):
+    Head = tagHead()
+    MapID = 0    #(DWORD MapID)
+    NPCInfoCnt = 0    #(BYTE NPCInfoCnt)
+    NPCInfoList = list()    #(vector<tagMCNPCCntInfo> NPCInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x14
+        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.NPCInfoCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.NPCInfoCnt):
+            temNPCInfoList = tagMCNPCCntInfo()
+            _pos = temNPCInfoList.ReadData(_lpData, _pos)
+            self.NPCInfoList.append(temNPCInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x14
+        self.MapID = 0
+        self.NPCInfoCnt = 0
+        self.NPCInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.NPCInfoCnt):
+            length += self.NPCInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteBYTE(data, self.NPCInfoCnt)
+        for i in range(self.NPCInfoCnt):
+            data = CommFunc.WriteString(data, self.NPCInfoList[i].GetLength(), self.NPCInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MapID:%d,
+                                NPCInfoCnt:%d,
+                                NPCInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MapID,
+                                self.NPCInfoCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCNPCCntList=tagMCNPCCntList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCCntList.Head.Cmd,m_NAtagMCNPCCntList.Head.SubCmd))] = m_NAtagMCNPCCntList
+
+
+#------------------------------------------------------
 #A7 01 通知选中对象 # tagMCNotifySelectObj
 
 class  tagMCNotifySelectObj(Structure):
@@ -16172,8 +17167,6 @@
 class  tagMCNPCInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
                   ("ObjID", c_int),    
                   ("NPCID", c_int),    
                   ("NPCHP", c_int),    
@@ -16186,8 +17179,6 @@
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA7
-        self.SubCmd = 0x06
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -16196,8 +17187,6 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA7
-        self.SubCmd = 0x06
         self.ObjID = 0
         self.NPCID = 0
         self.NPCHP = 0
@@ -16216,8 +17205,6 @@
 
     def OutputString(self):
         DumpString = '''// A7 06 通知查询的NPC信息 //tagMCNPCInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
                                 ObjID:%d,
                                 NPCID:%d,
                                 NPCHP:%d,
@@ -16228,8 +17215,6 @@
                                 RefreshSecond:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
                                 self.ObjID,
                                 self.NPCID,
                                 self.NPCHP,
@@ -16926,132 +17911,6 @@
 
 
 #------------------------------------------------------
-# A8 07 通知使用皇室宝箱情况 #tagMCCRBoxInfoList
-
-class  tagMCCRBoxInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncIndex", c_ubyte),    #功能索引
-                  ("BoxIndex", c_ubyte),    #宝箱格子索引
-                  ("ItemID", c_int),    #物品ID
-                  ("UnlockTime", c_int),    # 解锁时间
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA8
-        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 = 0xA8
-        self.SubCmd = 0x07
-        self.FuncIndex = 0
-        self.BoxIndex = 0
-        self.ItemID = 0
-        self.UnlockTime = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCCRBoxInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A8 07 通知使用皇室宝箱情况 //tagMCCRBoxInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncIndex:%d,
-                                BoxIndex:%d,
-                                ItemID:%d,
-                                UnlockTime:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncIndex,
-                                self.BoxIndex,
-                                self.ItemID,
-                                self.UnlockTime
-                                )
-        return DumpString
-
-
-class  tagMCCRBoxInfoList(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)//通知个数
-    InfoList = list()    #(vector<tagMCCRBoxInfo> InfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x07
-        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):
-            temInfoList = tagMCCRBoxInfo()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x07
-        self.Count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.InfoList[i].GetLength()
-
-        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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCRBoxInfoList=tagMCCRBoxInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCRBoxInfoList.Head.Cmd,m_NAtagMCCRBoxInfoList.Head.SubCmd))] = m_NAtagMCCRBoxInfoList
-
-
-#------------------------------------------------------
 # A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
 
 class  tagMCGuradPickupItemSucc(Structure):
@@ -17227,6 +18086,66 @@
 
 
 #------------------------------------------------------
+# A8 14 合成结果通知 #tagMCMakeItemAnswer
+
+class  tagMCMakeItemAnswer(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MakeType", c_ubyte),    #类型        TMakeItemType
+                  ("Result", c_ubyte),    #是否成功
+                  ("MakeItemID", c_int),    #合成的物品ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA8
+        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 = 0xA8
+        self.SubCmd = 0x14
+        self.MakeType = 0
+        self.Result = 0
+        self.MakeItemID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMakeItemAnswer)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A8 14 合成结果通知 //tagMCMakeItemAnswer:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MakeType:%d,
+                                Result:%d,
+                                MakeItemID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MakeType,
+                                self.Result,
+                                self.MakeItemID
+                                )
+        return DumpString
+
+
+m_NAtagMCMakeItemAnswer=tagMCMakeItemAnswer()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMakeItemAnswer.Cmd,m_NAtagMCMakeItemAnswer.SubCmd))] = m_NAtagMCMakeItemAnswer
+
+
+#------------------------------------------------------
 # A8 11 商店购买结果 #tagMCShoppingResult
 
 class  tagMCShoppingResult(Structure):
@@ -17372,84 +18291,6 @@
 
 m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem
-
-
-#------------------------------------------------------
-# A8 08 通知开启皇室宝箱后奖励结果 #tagMCOpenCRBoxResult
-
-class  tagMCOpenCRBoxResult(Structure):
-    Head = tagHead()
-    UseItemID = 0    #(DWORD UseItemID)// 使用的物品ID
-    IsBind = 0    #(BYTE IsBind)// 奖励是否绑定
-    Num = 0    #(BYTE Num)// 奖励个数
-    RewardList = ""    #(String RewardList)// 奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RewardList,_pos = CommFunc.ReadString(_lpData, _pos,self.Num)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x08
-        self.UseItemID = 0
-        self.IsBind = 0
-        self.Num = 0
-        self.RewardList = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 1
-        length += len(self.RewardList)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.UseItemID)
-        data = CommFunc.WriteBYTE(data, self.IsBind)
-        data = CommFunc.WriteBYTE(data, self.Num)
-        data = CommFunc.WriteString(data, self.Num, self.RewardList)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                UseItemID:%d,
-                                IsBind:%d,
-                                Num:%d,
-                                RewardList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.UseItemID,
-                                self.IsBind,
-                                self.Num,
-                                self.RewardList
-                                )
-        return DumpString
-
-
-m_NAtagMCOpenCRBoxResult=tagMCOpenCRBoxResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOpenCRBoxResult.Head.Cmd,m_NAtagMCOpenCRBoxResult.Head.SubCmd))] = m_NAtagMCOpenCRBoxResult
 
 
 #------------------------------------------------------
@@ -17918,90 +18759,6 @@
 
 
 #------------------------------------------------------
-# A8 06 使用翻牌物品结果 #tagMCUseTurnCardItemResult
-
-class  tagMCUseTurnCardItemResult(Structure):
-    Head = tagHead()
-    UseItemID = 0    #(DWORD UseItemID)// 使用的物品ID
-    AllCardNum = 0    #(BYTE AllCardNum)// 总牌数
-    AllCfgIndexList = list()    #(vector<WORD> AllCfgIndexList)// 总牌配置索引列表
-    TurnCardList = list()    #(vector<WORD> TurnCardList)// 已翻牌配置索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x06
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AllCardNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AllCardNum):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.AllCfgIndexList.append(value)
-        for i in range(self.AllCardNum):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.TurnCardList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x06
-        self.UseItemID = 0
-        self.AllCardNum = 0
-        self.AllCfgIndexList = list()
-        self.TurnCardList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 2 * self.AllCardNum
-        length += 2 * self.AllCardNum
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.UseItemID)
-        data = CommFunc.WriteBYTE(data, self.AllCardNum)
-        for i in range(self.AllCardNum):
-            data = CommFunc.WriteWORD(data, self.AllCfgIndexList[i])
-        for i in range(self.AllCardNum):
-            data = CommFunc.WriteWORD(data, self.TurnCardList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                UseItemID:%d,
-                                AllCardNum:%d,
-                                AllCfgIndexList:%s,
-                                TurnCardList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.UseItemID,
-                                self.AllCardNum,
-                                "...",
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCUseTurnCardItemResult=tagMCUseTurnCardItemResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseTurnCardItemResult.Head.Cmd,m_NAtagMCUseTurnCardItemResult.Head.SubCmd))] = m_NAtagMCUseTurnCardItemResult
-
-
-#------------------------------------------------------
 # A8 13 虚拟掉落物品 #tagMCVirtualItemDrop
 
 class  tagMCVirtualItemDrop(Structure):
@@ -18084,6 +18841,128 @@
 
 m_NAtagMCVirtualItemDrop=tagMCVirtualItemDrop()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVirtualItemDrop.Head.Cmd,m_NAtagMCVirtualItemDrop.Head.SubCmd))] = m_NAtagMCVirtualItemDrop
+
+
+#------------------------------------------------------
+# AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo
+
+class  tagMCAllPeoplePartyCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ActID", c_int),    #活动ID
+                  ("CurTimes", c_ushort),    #已完成次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ActID = 0
+        self.CurTimes = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCAllPeoplePartyCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 15 仙界盛典全民来嗨玩家信息 //tagMCAllPeoplePartyInfo:
+                                ActID:%d,
+                                CurTimes:%d
+                                '''\
+                                %(
+                                self.ActID,
+                                self.CurTimes
+                                )
+        return DumpString
+
+
+class  tagMCAllPeoplePartyInfo(Structure):
+    Head = tagHead()
+    CurPoint = 0    #(DWORD CurPoint)//当前总点数
+    AwardRecord = 0    #(DWORD AwardRecord)//领奖记录 按奖励索引二进制位存储是否已领取
+    Count = 0    #(BYTE Count)
+    BuyCountList = list()    #(vector<tagMCAllPeoplePartyCount> BuyCountList)//活动完成次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temBuyCountList = tagMCAllPeoplePartyCount()
+            _pos = temBuyCountList.ReadData(_lpData, _pos)
+            self.BuyCountList.append(temBuyCountList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x15
+        self.CurPoint = 0
+        self.AwardRecord = 0
+        self.Count = 0
+        self.BuyCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.BuyCountList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.CurPoint)
+        data = CommFunc.WriteDWORD(data, self.AwardRecord)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CurPoint:%d,
+                                AwardRecord:%d,
+                                Count:%d,
+                                BuyCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CurPoint,
+                                self.AwardRecord,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCAllPeoplePartyInfo=tagMCAllPeoplePartyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAllPeoplePartyInfo.Head.Cmd,m_NAtagMCAllPeoplePartyInfo.Head.SubCmd))] = m_NAtagMCAllPeoplePartyInfo
 
 
 #------------------------------------------------------
@@ -18321,14 +19200,325 @@
 
 
 #------------------------------------------------------
-# AA 02 天天首充活动开启状态 #tagMCDailyGoldState
+# AA 09 消费返利活动信息 #tagMCCostRebateInfo
 
-class  tagMCDailyGoldState(Structure):
+class  tagMCCostRebateAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCostRebateAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 09 消费返利活动信息 //tagMCCostRebateInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCCostRebateAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedGold = 0    #(DWORD NeedGold)// 所需仙玉数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCCostRebateAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCCostRebateAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedGold = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedGold)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedGold:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedGold,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCCostRebateAwardDay(Structure):
+    AwardCount = 0    #(BYTE AwardCount)// 奖励档数
+    AwardInfo = list()    #(vector<tagMCCostRebateAward> AwardInfo)// 奖励档信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardInfo = tagMCCostRebateAward()
+            _pos = temAwardInfo.ReadData(_lpData, _pos)
+            self.AwardInfo.append(temAwardInfo)
+        return _pos
+
+    def Clear(self):
+        self.AwardCount = 0
+        self.AwardInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardCount:%d,
+                                AwardInfo:%s
+                                '''\
+                                %(
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCCostRebateInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AwardDays = 0    #(BYTE AwardDays)
+    AwardDayInfo = list()    #(vector<tagMCCostRebateAwardDay> AwardDayInfo)//每天对应返利信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardDays):
+            temAwardDayInfo = tagMCCostRebateAwardDay()
+            _pos = temAwardDayInfo.ReadData(_lpData, _pos)
+            self.AwardDayInfo.append(temAwardDayInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x09
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.AwardDays = 0
+        self.AwardDayInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.AwardDays):
+            length += self.AwardDayInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.AwardDays)
+        for i in range(self.AwardDays):
+            data = CommFunc.WriteString(data, self.AwardDayInfo[i].GetLength(), self.AwardDayInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                AwardDays:%d,
+                                AwardDayInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.AwardDays,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCostRebateInfo=tagMCCostRebateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebateInfo.Head.Cmd,m_NAtagMCCostRebateInfo.Head.SubCmd))] = m_NAtagMCCostRebateInfo
+
+
+#------------------------------------------------------
+# AA 10 消费返利玩家活动信息 #tagMCCostRebatePlayerInfo
+
+class  tagMCCostRebatePlayerInfo(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("State", c_ubyte),    # 0-未开启;1-已开启
+                  ("CostGoldTotal", c_int),    #本次活动已累计消费仙玉数
+                  ("AwardRecord", c_int),    #返利奖励领奖记录,按奖励索引二进制位存储是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        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 = 0xAA
+        self.SubCmd = 0x10
+        self.CostGoldTotal = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCostRebatePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CostGoldTotal:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CostGoldTotal,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo
+
+
+#------------------------------------------------------
+# AA 02 首充信息 #tagMCFirstGoldInfo
+
+class  tagMCFirstGoldInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FirstGoldRewardState", c_ubyte),    #首充奖励是否已领奖
+                  ("FirstGoldTry", c_ubyte),    #首充试用状态0-不可试用 1-可试用 2-已试用
                   ]
 
     def __init__(self):
@@ -18345,31 +19535,551 @@
     def Clear(self):
         self.Cmd = 0xAA
         self.SubCmd = 0x02
-        self.State = 0
+        self.FirstGoldRewardState = 0
+        self.FirstGoldTry = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCDailyGoldState)
+        return sizeof(tagMCFirstGoldInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AA 02 天天首充活动开启状态 //tagMCDailyGoldState:
+        DumpString = '''// AA 02 首充信息 //tagMCFirstGoldInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                State:%d
+                                FirstGoldRewardState:%d,
+                                FirstGoldTry:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.State
+                                self.FirstGoldRewardState,
+                                self.FirstGoldTry
                                 )
         return DumpString
 
 
-m_NAtagMCDailyGoldState=tagMCDailyGoldState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGoldState.Cmd,m_NAtagMCDailyGoldState.SubCmd))] = m_NAtagMCDailyGoldState
+m_NAtagMCFirstGoldInfo=tagMCFirstGoldInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldInfo.Cmd,m_NAtagMCFirstGoldInfo.SubCmd))] = m_NAtagMCFirstGoldInfo
+
+
+#------------------------------------------------------
+# AA 08 首充提示剩余时间 #tagMCFirstGoldTime
+
+class  tagMCFirstGoldTime(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FirstGoldRemainTime", c_int),    #首充提示剩余时间
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        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 = 0xAA
+        self.SubCmd = 0x08
+        self.FirstGoldRemainTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFirstGoldTime)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 08 首充提示剩余时间 //tagMCFirstGoldTime:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                FirstGoldRemainTime:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.FirstGoldRemainTime
+                                )
+        return DumpString
+
+
+m_NAtagMCFirstGoldTime=tagMCFirstGoldTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldTime.Cmd,m_NAtagMCFirstGoldTime.SubCmd))] = m_NAtagMCFirstGoldTime
+
+
+#------------------------------------------------------
+# AA 12 限时礼包活动信息 #tagMCFlashGiftbagInfo
+
+class  tagMCFlashGiftbagItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ("IsMainItem", c_ubyte),    #是否标的物
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        self.IsMainItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFlashGiftbagItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 12 限时礼包活动信息 //tagMCFlashGiftbagInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d,
+                                IsMainItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind,
+                                self.IsMainItem
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbag(Structure):
+    GiftID = 0    #(DWORD GiftID)//礼包ID
+    OrderInfoLen = 0    #(BYTE OrderInfoLen)
+    OrderInfo = ""    #(String OrderInfo)//商品编号
+    BuyCountLimit = 0    #(BYTE BuyCountLimit)//限购数
+    RMB = 0    #(DWORD RMB)//所需RMB,元
+    RMBOriginal = 0    #(DWORD RMBOriginal)//原价
+    GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
+    ItemInfo = list()    #(vector<tagMCFlashGiftbagItem> ItemInfo)// 物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen)
+        self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RMBOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftItemCount):
+            temItemInfo = tagMCFlashGiftbagItem()
+            _pos = temItemInfo.ReadData(_lpData, _pos)
+            self.ItemInfo.append(temItemInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftID = 0
+        self.OrderInfoLen = 0
+        self.OrderInfo = ""
+        self.BuyCountLimit = 0
+        self.RMB = 0
+        self.RMBOriginal = 0
+        self.GiftItemCount = 0
+        self.ItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.OrderInfo)
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.GiftItemCount):
+            length += self.ItemInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.GiftID)
+        data = CommFunc.WriteBYTE(data, self.OrderInfoLen)
+        data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo)
+        data = CommFunc.WriteBYTE(data, self.BuyCountLimit)
+        data = CommFunc.WriteDWORD(data, self.RMB)
+        data = CommFunc.WriteDWORD(data, self.RMBOriginal)
+        data = CommFunc.WriteBYTE(data, self.GiftItemCount)
+        for i in range(self.GiftItemCount):
+            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftID:%d,
+                                OrderInfoLen:%d,
+                                OrderInfo:%s,
+                                BuyCountLimit:%d,
+                                RMB:%d,
+                                RMBOriginal:%d,
+                                GiftItemCount:%d,
+                                ItemInfo:%s
+                                '''\
+                                %(
+                                self.GiftID,
+                                self.OrderInfoLen,
+                                self.OrderInfo,
+                                self.BuyCountLimit,
+                                self.RMB,
+                                self.RMBOriginal,
+                                self.GiftItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbagType(Structure):
+    GiftbagCount = 0    #(BYTE GiftbagCount)// 礼包数
+    GiftbagInfo = list()    #(vector<tagMCFlashGiftbag> GiftbagInfo)// 礼包信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagCount):
+            temGiftbagInfo = tagMCFlashGiftbag()
+            _pos = temGiftbagInfo.ReadData(_lpData, _pos)
+            self.GiftbagInfo.append(temGiftbagInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftbagCount = 0
+        self.GiftbagInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.GiftbagCount):
+            length += self.GiftbagInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GiftbagCount)
+        for i in range(self.GiftbagCount):
+            data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftbagCount:%d,
+                                GiftbagInfo:%s
+                                '''\
+                                %(
+                                self.GiftbagCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbagTime(Structure):
+    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
+    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.StartTime = ""
+        self.EndtTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 5
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 5, self.StartTime)
+        data = CommFunc.WriteString(data, 5, self.EndtTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                StartTime:%s,
+                                EndtTime:%s
+                                '''\
+                                %(
+                                self.StartTime,
+                                self.EndtTime
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbagInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagMCFlashGiftbagTime> ActivityTime)//活动时间
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    GiftbagTypeCount = 0    #(BYTE GiftbagTypeCount)// 礼包类型数
+    GiftbagTypeInfo = list()    #(vector<tagMCFlashGiftbagType> GiftbagTypeInfo)// 礼包类型信息, 当有多个且有多个活动时间段时则每个时间段对应一个礼包类型;
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagMCFlashGiftbagTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GiftbagTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagTypeCount):
+            temGiftbagTypeInfo = tagMCFlashGiftbagType()
+            _pos = temGiftbagTypeInfo.ReadData(_lpData, _pos)
+            self.GiftbagTypeInfo.append(temGiftbagTypeInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x12
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AdvanceMinutes = 0
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.GiftbagTypeCount = 0
+        self.GiftbagTypeInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.GiftbagTypeCount):
+            length += self.GiftbagTypeInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.GiftbagTypeCount)
+        for i in range(self.GiftbagTypeCount):
+            data = CommFunc.WriteString(data, self.GiftbagTypeInfo[i].GetLength(), self.GiftbagTypeInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AdvanceMinutes:%d,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                GiftbagTypeCount:%d,
+                                GiftbagTypeInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AdvanceMinutes,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.GiftbagTypeCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFlashGiftbagInfo=tagMCFlashGiftbagInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagInfo.Head.Cmd,m_NAtagMCFlashGiftbagInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagInfo
+
+
+#------------------------------------------------------
+# AA 13 限时礼包玩家活动信息 #tagMCFlashGiftbagPlayerInfo
+
+class  tagMCFlashGiftbagBuyCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GiftbagID", c_int),    #礼包ID
+                  ("BuyCount", c_ushort),    #本次活动已购买次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.GiftbagID = 0
+        self.BuyCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFlashGiftbagBuyCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 13 限时礼包玩家活动信息 //tagMCFlashGiftbagPlayerInfo:
+                                GiftbagID:%d,
+                                BuyCount:%d
+                                '''\
+                                %(
+                                self.GiftbagID,
+                                self.BuyCount
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbagPlayerInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BuyCountList = list()    #(vector<tagMCFlashGiftbagBuyCount> BuyCountList)//礼包购买次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x13
+        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):
+            temBuyCountList = tagMCFlashGiftbagBuyCount()
+            _pos = temBuyCountList.ReadData(_lpData, _pos)
+            self.BuyCountList.append(temBuyCountList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x13
+        self.Count = 0
+        self.BuyCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.BuyCountList[i].GetLength()
+
+        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.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BuyCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFlashGiftbagPlayerInfo=tagMCFlashGiftbagPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagPlayerInfo.Head.Cmd,m_NAtagMCFlashGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagPlayerInfo
 
 
 #------------------------------------------------------
@@ -18565,6 +20275,420 @@
 
 
 #------------------------------------------------------
+# AA 11 限时特惠活动信息 #tagMCSpringSaleInfo
+
+class  tagMCSpringSaleItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ("IsMainItem", c_ubyte),    #是否标的物
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        self.IsMainItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSpringSaleItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 11 限时特惠活动信息 //tagMCSpringSaleInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d,
+                                IsMainItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind,
+                                self.IsMainItem
+                                )
+        return DumpString
+
+
+class  tagMCSpringSaleGiftbag(Structure):
+    GiftID = 0    #(DWORD GiftID)//商城表的物品ID
+    BuyCountLimit = 0    #(BYTE BuyCountLimit)//限购数
+    MoneyType = 0    #(BYTE MoneyType)//消耗货币类型
+    MoneyNumber = 0    #(DWORD MoneyNumber)//消耗货币数量
+    MoneyOriginal = 0    #(DWORD MoneyOriginal)//原价
+    GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
+    ItemInfo = list()    #(vector<tagMCSpringSaleItem> ItemInfo)// 物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyNumber,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MoneyOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftItemCount):
+            temItemInfo = tagMCSpringSaleItem()
+            _pos = temItemInfo.ReadData(_lpData, _pos)
+            self.ItemInfo.append(temItemInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftID = 0
+        self.BuyCountLimit = 0
+        self.MoneyType = 0
+        self.MoneyNumber = 0
+        self.MoneyOriginal = 0
+        self.GiftItemCount = 0
+        self.ItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.GiftItemCount):
+            length += self.ItemInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.GiftID)
+        data = CommFunc.WriteBYTE(data, self.BuyCountLimit)
+        data = CommFunc.WriteBYTE(data, self.MoneyType)
+        data = CommFunc.WriteDWORD(data, self.MoneyNumber)
+        data = CommFunc.WriteDWORD(data, self.MoneyOriginal)
+        data = CommFunc.WriteBYTE(data, self.GiftItemCount)
+        for i in range(self.GiftItemCount):
+            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftID:%d,
+                                BuyCountLimit:%d,
+                                MoneyType:%d,
+                                MoneyNumber:%d,
+                                MoneyOriginal:%d,
+                                GiftItemCount:%d,
+                                ItemInfo:%s
+                                '''\
+                                %(
+                                self.GiftID,
+                                self.BuyCountLimit,
+                                self.MoneyType,
+                                self.MoneyNumber,
+                                self.MoneyOriginal,
+                                self.GiftItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCSpringSaleShop(Structure):
+    GiftbagCount = 0    #(BYTE GiftbagCount)// 商店礼包数
+    GiftbagInfo = list()    #(vector<tagMCSpringSaleGiftbag> GiftbagInfo)// 礼包信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagCount):
+            temGiftbagInfo = tagMCSpringSaleGiftbag()
+            _pos = temGiftbagInfo.ReadData(_lpData, _pos)
+            self.GiftbagInfo.append(temGiftbagInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftbagCount = 0
+        self.GiftbagInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.GiftbagCount):
+            length += self.GiftbagInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GiftbagCount)
+        for i in range(self.GiftbagCount):
+            data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftbagCount:%d,
+                                GiftbagInfo:%s
+                                '''\
+                                %(
+                                self.GiftbagCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCSpringSaleTime(Structure):
+    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
+    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.StartTime = ""
+        self.EndtTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 5
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 5, self.StartTime)
+        data = CommFunc.WriteString(data, 5, self.EndtTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                StartTime:%s,
+                                EndtTime:%s
+                                '''\
+                                %(
+                                self.StartTime,
+                                self.EndtTime
+                                )
+        return DumpString
+
+
+class  tagMCSpringSaleInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagMCSpringSaleTime> ActivityTime)//活动时间
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ShopCount = 0    #(BYTE ShopCount)// 商店数
+    ShopInfo = list()    #(vector<tagMCSpringSaleShop> ShopInfo)// 商店信息, 当有多个商店且有多个活动时间段时则每个时间段对应一个商店;
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagMCSpringSaleTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ShopCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ShopCount):
+            temShopInfo = tagMCSpringSaleShop()
+            _pos = temShopInfo.ReadData(_lpData, _pos)
+            self.ShopInfo.append(temShopInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x11
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AdvanceMinutes = 0
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.ShopCount = 0
+        self.ShopInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.ShopCount):
+            length += self.ShopInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ShopCount)
+        for i in range(self.ShopCount):
+            data = CommFunc.WriteString(data, self.ShopInfo[i].GetLength(), self.ShopInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AdvanceMinutes:%d,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                ShopCount:%d,
+                                ShopInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AdvanceMinutes,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.ShopCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCSpringSaleInfo=tagMCSpringSaleInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSpringSaleInfo.Head.Cmd,m_NAtagMCSpringSaleInfo.Head.SubCmd))] = m_NAtagMCSpringSaleInfo
+
+
+#------------------------------------------------------
+# AA 16 通知超值礼包信息 #tagMCSuperGiftInfo
+
+class  tagMCSuperGiftInfo(Structure):
+    Head = tagHead()
+    GiftID = 0    #(DWORD GiftID)//商品ID
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x16
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x16
+        self.GiftID = 0
+        self.EndtDate = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 10
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.GiftID)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                GiftID:%d,
+                                EndtDate:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.GiftID,
+                                self.EndtDate
+                                )
+        return DumpString
+
+
+m_NAtagMCSuperGiftInfo=tagMCSuperGiftInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Head.Cmd,m_NAtagMCSuperGiftInfo.Head.SubCmd))] = m_NAtagMCSuperGiftInfo
+
+
+#------------------------------------------------------
 #AA 01 累计登陆天数信息 #tagMCTotalLoginDayCntInfo
 
 class  tagMCTotalLoginDayCntInfo(Structure):
@@ -18621,20 +20745,20 @@
 
 
 #------------------------------------------------------
-# AB 20 嘉年华抽奖记录 #tagMCCarnivalRecord
+# AA 14 仙界盛典充值大礼 #tagMCXJSDRecharge
 
-class  tagMCCarnivalRecord(Structure):
+class  tagMCXJSDRecharge(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("JoinRecord", c_int),    
+                  ("State", c_ubyte),    #0-不可领 1-可领 2-已领取
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x20
+        self.Cmd = 0xAA
+        self.SubCmd = 0x14
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -18643,55 +20767,48 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x20
-        self.JoinRecord = 0
+        self.Cmd = 0xAA
+        self.SubCmd = 0x14
+        self.State = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCCarnivalRecord)
+        return sizeof(tagMCXJSDRecharge)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AB 20 嘉年华抽奖记录 //tagMCCarnivalRecord:
+        DumpString = '''// AA 14 仙界盛典充值大礼 //tagMCXJSDRecharge:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                JoinRecord:%d
+                                State:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.JoinRecord
+                                self.State
                                 )
         return DumpString
 
 
-m_NAtagMCCarnivalRecord=tagMCCarnivalRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCarnivalRecord.Cmd,m_NAtagMCCarnivalRecord.SubCmd))] = m_NAtagMCCarnivalRecord
+m_NAtagMCXJSDRecharge=tagMCXJSDRecharge()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXJSDRecharge.Cmd,m_NAtagMCXJSDRecharge.SubCmd))] = m_NAtagMCXJSDRecharge
 
 
 #------------------------------------------------------
-# AB 15 骰子投掷结果 #tagMCDiceTakeResult
+# AB 03 Boss复活玩家活动信息 #tagMCBossRebornPlayerInfo
 
-class  tagMCDiceTakeResult(Structure):
+class  tagMCBossRebornData(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PosIndex", c_int),    # 骰子的位置
-                  ("CfgIndex", c_ushort),    # 物品配置索引
-                  ("TakeNum", c_ushort),    # 已投掷次数
-                  ("TimeNum", c_ushort),    # 按时间增加的次数
-                  ("BuyNum", c_ushort),    # 已购买的次数
-                  ("AwardNum", c_ushort),    # 奖励的次数
+                  ("ActID", c_ubyte),    #活动ID
+                  ("CurTimes", c_ushort),    #已完成次数
+                  ("GotTimes", c_ushort),    #已领取次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x15
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -18700,48 +20817,95 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x15
-        self.PosIndex = 0
-        self.CfgIndex = 0
-        self.TakeNum = 0
-        self.TimeNum = 0
-        self.BuyNum = 0
-        self.AwardNum = 0
+        self.ActID = 0
+        self.CurTimes = 0
+        self.GotTimes = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCDiceTakeResult)
+        return sizeof(tagMCBossRebornData)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AB 15 骰子投掷结果 //tagMCDiceTakeResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PosIndex:%d,
-                                CfgIndex:%d,
-                                TakeNum:%d,
-                                TimeNum:%d,
-                                BuyNum:%d,
-                                AwardNum:%d
+        DumpString = '''// AB 03 Boss复活玩家活动信息 //tagMCBossRebornPlayerInfo:
+                                ActID:%d,
+                                CurTimes:%d,
+                                GotTimes:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PosIndex,
-                                self.CfgIndex,
-                                self.TakeNum,
-                                self.TimeNum,
-                                self.BuyNum,
-                                self.AwardNum
+                                self.ActID,
+                                self.CurTimes,
+                                self.GotTimes
                                 )
         return DumpString
 
 
-m_NAtagMCDiceTakeResult=tagMCDiceTakeResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceTakeResult.Cmd,m_NAtagMCDiceTakeResult.SubCmd))] = m_NAtagMCDiceTakeResult
+class  tagMCBossRebornPlayerInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)//活动个数
+    DataList = list()    #(vector<tagMCBossRebornData> DataList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x03
+        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):
+            temDataList = tagMCBossRebornData()
+            _pos = temDataList.ReadData(_lpData, _pos)
+            self.DataList.append(temDataList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x03
+        self.Count = 0
+        self.DataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.DataList[i].GetLength()
+
+        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.WriteString(data, self.DataList[i].GetLength(), self.DataList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                DataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossRebornPlayerInfo=tagMCBossRebornPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornPlayerInfo.Head.Cmd,m_NAtagMCBossRebornPlayerInfo.Head.SubCmd))] = m_NAtagMCBossRebornPlayerInfo
 
 
 #------------------------------------------------------
@@ -18933,294 +21097,6 @@
 
 
 #------------------------------------------------------
-# AB 11  全民进阶总动员活动奖励情况 #tagMCFuncUpgrade
-
-class  tagMCFuncUpgrade(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncAwardState1", c_int),    
-                  ("FuncAwardState2", c_int),    
-                  ("FuncAwardState3", c_int),    
-                  ("FuncAwardState4", c_int),    
-                  ("FuncAwardState5", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        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 = 0xAB
-        self.SubCmd = 0x11
-        self.FuncAwardState1 = 0
-        self.FuncAwardState2 = 0
-        self.FuncAwardState3 = 0
-        self.FuncAwardState4 = 0
-        self.FuncAwardState5 = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFuncUpgrade)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 11  全民进阶总动员活动奖励情况 //tagMCFuncUpgrade:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncAwardState1:%d,
-                                FuncAwardState2:%d,
-                                FuncAwardState3:%d,
-                                FuncAwardState4:%d,
-                                FuncAwardState5:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncAwardState1,
-                                self.FuncAwardState2,
-                                self.FuncAwardState3,
-                                self.FuncAwardState4,
-                                self.FuncAwardState5
-                                )
-        return DumpString
-
-
-m_NAtagMCFuncUpgrade=tagMCFuncUpgrade()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncUpgrade.Cmd,m_NAtagMCFuncUpgrade.SubCmd))] = m_NAtagMCFuncUpgrade
-
-
-#------------------------------------------------------
-# AB 10  首充团购每日充值钻石数 #tagMCGroupFirstRechargeGold
-
-class  tagMCGroupFirstRechargeGold(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    GoldList = list()    #(vector<DWORD> GoldList)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x10
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.GoldList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x10
-        self.Count = 0
-        self.GoldList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 4 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteDWORD(data, self.GoldList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                GoldList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCGroupFirstRechargeGold=tagMCGroupFirstRechargeGold()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGroupFirstRechargeGold.Head.Cmd,m_NAtagMCGroupFirstRechargeGold.Head.SubCmd))] = m_NAtagMCGroupFirstRechargeGold
-
-
-#------------------------------------------------------
-# AB 21 领主之路活动信息 #tagMCLingZhuZhiLuInfo
-
-class  tagMCLingZhuZhiLuScore(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LingZhuZLScoreNum", c_ubyte),    # 积分类型编号
-                  ("LingZhuZLScore", c_int),    # 已获得积分
-                  ("LingZhuZLData", c_int),    # 积分类型数据
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x21
-        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 = 0x21
-        self.LingZhuZLScoreNum = 0
-        self.LingZhuZLScore = 0
-        self.LingZhuZLData = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCLingZhuZhiLuScore)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 21 领主之路活动信息 //tagMCLingZhuZhiLuInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LingZhuZLScoreNum:%d,
-                                LingZhuZLScore:%d,
-                                LingZhuZLData:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LingZhuZLScoreNum,
-                                self.LingZhuZLScore,
-                                self.LingZhuZLData
-                                )
-        return DumpString
-
-
-class  tagMCLingZhuZhiLuInfo(Structure):
-    Head = tagHead()
-    LingZhuZLActionNum = 0    #(DWORD LingZhuZLActionNum)// 领主之路活动当前活动编号
-    LingZhuZLPrizeRecordCnt = 0    #(BYTE LingZhuZLPrizeRecordCnt)// 进度奖励领取记录个数
-    LingZhuZLPrizeRecord = list()    #(vector<DWORD> LingZhuZLPrizeRecord)// 进度奖励领取记录, 每级奖励一个值, 按奖励索引位二进制存储是否已领
-    LingZhuZLTotalScore = 0    #(DWORD LingZhuZLTotalScore)// 当前总积分
-    LingZhuZLScoreCount = 0    #(BYTE LingZhuZLScoreCount)// 同步的积分个数, 有变更的才会同步
-    LingZhuZLScoreList = list()    #(vector<tagMCLingZhuZhiLuScore> LingZhuZLScoreList)// 同步积分信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x21
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.LingZhuZLActionNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LingZhuZLPrizeRecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.LingZhuZLPrizeRecordCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.LingZhuZLPrizeRecord.append(value)
-        self.LingZhuZLTotalScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LingZhuZLScoreCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.LingZhuZLScoreCount):
-            temLingZhuZLScoreList = tagMCLingZhuZhiLuScore()
-            _pos = temLingZhuZLScoreList.ReadData(_lpData, _pos)
-            self.LingZhuZLScoreList.append(temLingZhuZLScoreList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x21
-        self.LingZhuZLActionNum = 0
-        self.LingZhuZLPrizeRecordCnt = 0
-        self.LingZhuZLPrizeRecord = list()
-        self.LingZhuZLTotalScore = 0
-        self.LingZhuZLScoreCount = 0
-        self.LingZhuZLScoreList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.LingZhuZLPrizeRecordCnt
-        length += 4
-        length += 1
-        for i in range(self.LingZhuZLScoreCount):
-            length += self.LingZhuZLScoreList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.LingZhuZLActionNum)
-        data = CommFunc.WriteBYTE(data, self.LingZhuZLPrizeRecordCnt)
-        for i in range(self.LingZhuZLPrizeRecordCnt):
-            data = CommFunc.WriteDWORD(data, self.LingZhuZLPrizeRecord[i])
-        data = CommFunc.WriteDWORD(data, self.LingZhuZLTotalScore)
-        data = CommFunc.WriteBYTE(data, self.LingZhuZLScoreCount)
-        for i in range(self.LingZhuZLScoreCount):
-            data = CommFunc.WriteString(data, self.LingZhuZLScoreList[i].GetLength(), self.LingZhuZLScoreList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                LingZhuZLActionNum:%d,
-                                LingZhuZLPrizeRecordCnt:%d,
-                                LingZhuZLPrizeRecord:%s,
-                                LingZhuZLTotalScore:%d,
-                                LingZhuZLScoreCount:%d,
-                                LingZhuZLScoreList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.LingZhuZLActionNum,
-                                self.LingZhuZLPrizeRecordCnt,
-                                "...",
-                                self.LingZhuZLTotalScore,
-                                self.LingZhuZLScoreCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCLingZhuZhiLuInfo=tagMCLingZhuZhiLuInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingZhuZhiLuInfo.Head.Cmd,m_NAtagMCLingZhuZhiLuInfo.Head.SubCmd))] = m_NAtagMCLingZhuZhiLuInfo
-
-
-#------------------------------------------------------
 # AB 02  领地占领每日奖励领奖情况 #tagMCManorDailyAward
 
 class  tagMCManorDailyAward(Structure):
@@ -19334,6 +21210,217 @@
 
 m_NAtagMCManorWarResult=tagMCManorWarResult()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCManorWarResult.Cmd,m_NAtagMCManorWarResult.SubCmd))] = m_NAtagMCManorWarResult
+
+
+#------------------------------------------------------
+# AB 04 Boss复活活动信息 #tagMCBossRebornInfo
+
+class  tagMCBossRebornAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        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.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBossRebornAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornTaskInfo(Structure):
+    TaskID = 0    #(BYTE TaskID)// id
+    TotalTimes = 0    #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
+    SingleTimes = 0    #(BYTE SingleTimes)// 单次领奖需要次数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCBossRebornAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.TaskID = 0
+        self.TotalTimes = 0
+        self.SingleTimes = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TaskID)
+        data = CommFunc.WriteBYTE(data, self.TotalTimes)
+        data = CommFunc.WriteBYTE(data, self.SingleTimes)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                TaskID:%d,
+                                TotalTimes:%d,
+                                SingleTimes:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.TaskID,
+                                self.TotalTimes,
+                                self.SingleTimes,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    TaskCnt = 0    #(BYTE TaskCnt)
+    TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TaskCnt):
+            temTaskInfo = tagMCBossRebornTaskInfo()
+            _pos = temTaskInfo.ReadData(_lpData, _pos)
+            self.TaskInfo.append(temTaskInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.ResetType = 0
+        self.LimitLV = 0
+        self.TaskCnt = 0
+        self.TaskInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.TaskCnt):
+            length += self.TaskInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.TaskCnt)
+        for i in range(self.TaskCnt):
+            data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                ResetType:%d,
+                                LimitLV:%d,
+                                TaskCnt:%d,
+                                TaskInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.ResetType,
+                                self.LimitLV,
+                                self.TaskCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
 
 
 #------------------------------------------------------
@@ -19505,157 +21592,63 @@
 
 
 #------------------------------------------------------
-# AB 18 二维码红包 #tagMCQRCodeRedpack
+# AB 24 开服红包信息 #tagMCOpenServerRedPacketInfo
 
-class  tagMCQRCodeRedpackUrl(Structure):
-    Head = tagHead()
-    PackMoneyMark = 0    #(BYTE PackMoneyMark)// 红包金额标识, 1是1元, 2是1.88元, 依次递增
-    PackOpenTime = 0    #(DWORD PackOpenTime)// 红包开启时间
-    RedpackUrlLen = 0    #(WORD RedpackUrlLen)
-    RedpackUrl = ""    #(String RedpackUrl)
-    data = None
+class  tagMCOpenServerRedPacketInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MoneyNum", c_int),    # 累积抢到多少钱
+                  ("GrabCnt", c_ushort),    # 已抢红包次数
+                  ("StartTime", c_int),    # 开始倒计时时间
+                  ]
 
     def __init__(self):
         self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x18
+        self.Cmd = 0xAB
+        self.SubCmd = 0x24
         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.PackMoneyMark,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PackOpenTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RedpackUrlLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RedpackUrl,_pos = CommFunc.ReadString(_lpData, _pos,self.RedpackUrlLen)
-        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 = 0xAB
-        self.Head.SubCmd = 0x18
-        self.PackMoneyMark = 0
-        self.PackOpenTime = 0
-        self.RedpackUrlLen = 0
-        self.RedpackUrl = ""
+        self.Cmd = 0xAB
+        self.SubCmd = 0x24
+        self.MoneyNum = 0
+        self.GrabCnt = 0
+        self.StartTime = 0
         return
 
     def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 2
-        length += len(self.RedpackUrl)
-
-        return length
+        return sizeof(tagMCOpenServerRedPacketInfo)
 
     def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PackMoneyMark)
-        data = CommFunc.WriteDWORD(data, self.PackOpenTime)
-        data = CommFunc.WriteWORD(data, self.RedpackUrlLen)
-        data = CommFunc.WriteString(data, self.RedpackUrlLen, self.RedpackUrl)
-        return data
+        return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PackMoneyMark:%d,
-                                PackOpenTime:%d,
-                                RedpackUrlLen:%d,
-                                RedpackUrl:%s
+        DumpString = '''// AB 24 开服红包信息 //tagMCOpenServerRedPacketInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MoneyNum:%d,
+                                GrabCnt:%d,
+                                StartTime:%d
                                 '''\
                                 %(
-                                self.Head.OutputString(),
-                                self.PackMoneyMark,
-                                self.PackOpenTime,
-                                self.RedpackUrlLen,
-                                self.RedpackUrl
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MoneyNum,
+                                self.GrabCnt,
+                                self.StartTime
                                 )
         return DumpString
 
 
-class  tagMCQRCodeRedpack(Structure):
-    Head = tagHead()
-    CanOpenCnt = 0    #(BYTE CanOpenCnt)//总共可打开红包次数
-    TotalOpenCnt = 0    #(BYTE TotalOpenCnt)//总共已打开红包次数
-    TodayOpenCnt = 0    #(BYTE TodayOpenCnt)//今日已打开红包次数
-    RedpackUrlList = list()    #(vector<tagMCQRCodeRedpackUrl> RedpackUrlList)// 红包二维码领取地址
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x18
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.CanOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TotalOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TodayOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TotalOpenCnt):
-            temRedpackUrlList = tagMCQRCodeRedpackUrl()
-            _pos = temRedpackUrlList.ReadData(_lpData, _pos)
-            self.RedpackUrlList.append(temRedpackUrlList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x18
-        self.CanOpenCnt = 0
-        self.TotalOpenCnt = 0
-        self.TodayOpenCnt = 0
-        self.RedpackUrlList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.TotalOpenCnt):
-            length += self.RedpackUrlList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.CanOpenCnt)
-        data = CommFunc.WriteBYTE(data, self.TotalOpenCnt)
-        data = CommFunc.WriteBYTE(data, self.TodayOpenCnt)
-        for i in range(self.TotalOpenCnt):
-            data = CommFunc.WriteString(data, self.RedpackUrlList[i].GetLength(), self.RedpackUrlList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                CanOpenCnt:%d,
-                                TotalOpenCnt:%d,
-                                TodayOpenCnt:%d,
-                                RedpackUrlList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.CanOpenCnt,
-                                self.TotalOpenCnt,
-                                self.TodayOpenCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCQRCodeRedpack=tagMCQRCodeRedpack()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCQRCodeRedpack.Head.Cmd,m_NAtagMCQRCodeRedpack.Head.SubCmd))] = m_NAtagMCQRCodeRedpack
+m_NAtagMCOpenServerRedPacketInfo=tagMCOpenServerRedPacketInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOpenServerRedPacketInfo.Cmd,m_NAtagMCOpenServerRedPacketInfo.SubCmd))] = m_NAtagMCOpenServerRedPacketInfo
 
 
 #------------------------------------------------------
@@ -19723,191 +21716,6 @@
 
 
 #------------------------------------------------------
-# AB 16 天神信息 #tagMCSkyGodInfo
-
-class  tagMCSkyGodInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SkyGodLV", c_ushort),    # 天神等级
-                  ("SkyGodExp", c_int),    # 天神经验
-                  ("SummonNum", c_ushort),    # 已召唤次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        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 = 0xAB
-        self.SubCmd = 0x16
-        self.SkyGodLV = 0
-        self.SkyGodExp = 0
-        self.SummonNum = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCSkyGodInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 16 天神信息 //tagMCSkyGodInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SkyGodLV:%d,
-                                SkyGodExp:%d,
-                                SummonNum:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SkyGodLV,
-                                self.SkyGodExp,
-                                self.SummonNum
-                                )
-        return DumpString
-
-
-m_NAtagMCSkyGodInfo=tagMCSkyGodInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyGodInfo.Cmd,m_NAtagMCSkyGodInfo.SubCmd))] = m_NAtagMCSkyGodInfo
-
-
-#------------------------------------------------------
-# AB 14 老虎机抽奖结果 #tagMCSlotsTakeResult
-
-class  tagMCSlotsItemInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RecordType", c_ubyte),    # 记录类型
-                  ("Index", c_ushort),    # 物品在老虎机上索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        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 = 0xAB
-        self.SubCmd = 0x14
-        self.RecordType = 0
-        self.Index = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCSlotsItemInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 14 老虎机抽奖结果 //tagMCSlotsTakeResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RecordType:%d,
-                                Index:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RecordType,
-                                self.Index
-                                )
-        return DumpString
-
-
-class  tagMCSlotsTakeResult(Structure):
-    Head = tagHead()
-    Type = 0    #(BYTE Type)// 老虎机类型
-    Num = 0    #(WORD Num)// 物品个数
-    ItemList = list()    #(vector<tagMCSlotsItemInfo> ItemList)// 物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Num,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Num):
-            temItemList = tagMCSlotsItemInfo()
-            _pos = temItemList.ReadData(_lpData, _pos)
-            self.ItemList.append(temItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x14
-        self.Type = 0
-        self.Num = 0
-        self.ItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 2
-        for i in range(self.Num):
-            length += self.ItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Type)
-        data = CommFunc.WriteWORD(data, self.Num)
-        for i in range(self.Num):
-            data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Type:%d,
-                                Num:%d,
-                                ItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Type,
-                                self.Num,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCSlotsTakeResult=tagMCSlotsTakeResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSlotsTakeResult.Head.Cmd,m_NAtagMCSlotsTakeResult.Head.SubCmd))] = m_NAtagMCSlotsTakeResult
-
-
-#------------------------------------------------------
 # AB 22 摇骰子结果 #tagMCDiceExResult
 
 class  tagMCDiceExResult(Structure):
@@ -19965,58 +21773,6 @@
 
 m_NAtagMCDiceExResult=tagMCDiceExResult()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceExResult.Cmd,m_NAtagMCDiceExResult.SubCmd))] = m_NAtagMCDiceExResult
-
-
-#------------------------------------------------------
-# AB 09 许愿值 #tagMCWishTreeValue
-
-class  tagMCWishTreeValue(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("WishValue", c_int),    #当前许愿值
-                  ]
-
-    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.WishValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCWishTreeValue)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 09 许愿值 //tagMCWishTreeValue:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                WishValue:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.WishValue
-                                )
-        return DumpString
-
-
-m_NAtagMCWishTreeValue=tagMCWishTreeValue()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWishTreeValue.Cmd,m_NAtagMCWishTreeValue.SubCmd))] = m_NAtagMCWishTreeValue
 
 
 #------------------------------------------------------
@@ -20433,170 +22189,6 @@
 
 m_NAtagMCMixLoginDayAwardState=tagMCMixLoginDayAwardState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMixLoginDayAwardState.Cmd,m_NAtagMCMixLoginDayAwardState.SubCmd))] = m_NAtagMCMixLoginDayAwardState
-
-
-#------------------------------------------------------
-#B0 06 转转乐盘面信息 #tagGamblingDiskInfo
-
-class  tagGamblingDiskInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MerchantLv", c_ubyte),    #商人等级
-                  ("DiskIndex", c_ubyte),    # 盘面索引
-                  ("DiskItemSequence", c_ushort),    #盘面物品顺序
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        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 = 0xB0
-        self.SubCmd = 0x06
-        self.MerchantLv = 0
-        self.DiskIndex = 0
-        self.DiskItemSequence = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingDiskInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 06 转转乐盘面信息 //tagGamblingDiskInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MerchantLv:%d,
-                                DiskIndex:%d,
-                                DiskItemSequence:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MerchantLv,
-                                self.DiskIndex,
-                                self.DiskItemSequence
-                                )
-        return DumpString
-
-
-m_NAtagGamblingDiskInfo=tagGamblingDiskInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingDiskInfo.Cmd,m_NAtagGamblingDiskInfo.SubCmd))] = m_NAtagGamblingDiskInfo
-
-
-#------------------------------------------------------
-#B0 07 转转乐结果 #tagGamblingResult
-
-class  tagGamblingResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ItemIndex", c_ushort),    #物品索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        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 = 0xB0
-        self.SubCmd = 0x07
-        self.ItemIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 07 转转乐结果 //tagGamblingResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ItemIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ItemIndex
-                                )
-        return DumpString
-
-
-m_NAtagGamblingResult=tagGamblingResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingResult.Cmd,m_NAtagGamblingResult.SubCmd))] = m_NAtagGamblingResult
-
-
-#------------------------------------------------------
-#B0 08 转转乐次数 #tagGamblingCount
-
-class  tagGamblingCount(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Count", c_ushort),    #次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        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 = 0xB0
-        self.SubCmd = 0x08
-        self.Count = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingCount)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 08 转转乐次数 //tagGamblingCount:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Count:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Count
-                                )
-        return DumpString
-
-
-m_NAtagGamblingCount=tagGamblingCount()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingCount.Cmd,m_NAtagGamblingCount.SubCmd))] = m_NAtagGamblingCount
 
 
 #------------------------------------------------------
@@ -21045,6 +22637,62 @@
 
 
 #------------------------------------------------------
+#B1 05 防沉迷 #tagMCPlayerWallow
+
+class  tagMCPlayerWallow(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Open", c_ubyte),    #  0 关 1开
+                  ("OnlineTime", c_int),    #  在线时间
+                  ]
+
+    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
+        self.Open = 0
+        self.OnlineTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCPlayerWallow)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B1 05 防沉迷 //tagMCPlayerWallow:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Open:%d,
+                                OnlineTime:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Open,
+                                self.OnlineTime
+                                )
+        return DumpString
+
+
+m_NAtagMCPlayerWallow=tagMCPlayerWallow()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerWallow.Cmd,m_NAtagMCPlayerWallow.SubCmd))] = m_NAtagMCPlayerWallow
+
+
+#------------------------------------------------------
 # B2 10 仙盟联赛玩家排名信息 #tagMCFamilyWarBillboard
 
 class  tagMCFamilyWarPlayer(Structure):
@@ -21337,6 +22985,58 @@
 
 
 #------------------------------------------------------
+# B2 01 通知封魔坛双倍击杀状态 #tagMCFMTDoubleState
+
+class  tagMCFMTDoubleState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsDouble", c_ubyte),    #是否双倍
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x01
+        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 = 0xB2
+        self.SubCmd = 0x01
+        self.IsDouble = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFMTDoubleState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 01 通知封魔坛双倍击杀状态 //tagMCFMTDoubleState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsDouble:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsDouble
+                                )
+        return DumpString
+
+
+m_NAtagMCFMTDoubleState=tagMCFMTDoubleState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFMTDoubleState.Cmd,m_NAtagMCFMTDoubleState.SubCmd))] = m_NAtagMCFMTDoubleState
+
+
+#------------------------------------------------------
 # B2 03 公共副本扫荡信息 #tagMCPubFBSweepData
 
 class  tagMCPubFBSweep(Structure):
@@ -21464,6 +23164,77 @@
 
 m_NAtagMCPubFBSweepData=tagMCPubFBSweepData()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPubFBSweepData.Head.Cmd,m_NAtagMCPubFBSweepData.Head.SubCmd))] = m_NAtagMCPubFBSweepData
+
+
+#------------------------------------------------------
+#B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting
+
+class  tagMCPushNotificationsSetting(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 = 0x02
+        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 = 0x02
+        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_NAtagMCPushNotificationsSetting=tagMCPushNotificationsSetting()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPushNotificationsSetting.Head.Cmd,m_NAtagMCPushNotificationsSetting.Head.SubCmd))] = m_NAtagMCPushNotificationsSetting
 
 
 #------------------------------------------------------
@@ -21782,6 +23553,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("SkillID", c_int),    #技能ID
+                  ("Reason", c_ubyte),    #原因 默认0
                   ]
 
     def __init__(self):
@@ -21799,6 +23571,7 @@
         self.Cmd = 0xB4
         self.SubCmd = 0x03
         self.SkillID = 0
+        self.Reason = 0
         return
 
     def GetLength(self):
@@ -21811,12 +23584,14 @@
         DumpString = '''//B4 03 技能攻击失败  //tagMCAttackFail:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                SkillID:%d
+                                SkillID:%d,
+                                Reason:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.SkillID
+                                self.SkillID,
+                                self.Reason
                                 )
         return DumpString
 
@@ -22052,6 +23827,90 @@
 
 m_NAtagMCPassiveSetAnswer=tagMCPassiveSetAnswer()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPassiveSetAnswer.Cmd,m_NAtagMCPassiveSetAnswer.SubCmd))] = m_NAtagMCPassiveSetAnswer
+
+
+#------------------------------------------------------
+#B4 0A 玩家移动 #tagMCPYPlayerMove
+
+class  tagMCPYPlayerMove(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Dir", c_ushort),    # 朝向
+                  ("ClientPosX", c_ushort),    # 客户端坐标X 毫米
+                  ("ClientPosY", c_ushort),    # 客户端坐标Y
+                  ("SeverPosX", c_ushort),    # 服务端坐标X 格子
+                  ("SeverPosY", c_ushort),    # 服务端坐标Y
+                  ("ObjID", c_int),    
+                  ("ObjType", c_ubyte),    
+                  ("Speed", c_ushort),    
+                  ("MoveType", c_ubyte),    # 0 停止 1移动
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB4
+        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 = 0xB4
+        self.SubCmd = 0x0A
+        self.Dir = 0
+        self.ClientPosX = 0
+        self.ClientPosY = 0
+        self.SeverPosX = 0
+        self.SeverPosY = 0
+        self.ObjID = 0
+        self.ObjType = 0
+        self.Speed = 0
+        self.MoveType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCPYPlayerMove)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B4 0A 玩家移动 //tagMCPYPlayerMove:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Dir:%d,
+                                ClientPosX:%d,
+                                ClientPosY:%d,
+                                SeverPosX:%d,
+                                SeverPosY:%d,
+                                ObjID:%d,
+                                ObjType:%d,
+                                Speed:%d,
+                                MoveType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Dir,
+                                self.ClientPosX,
+                                self.ClientPosY,
+                                self.SeverPosX,
+                                self.SeverPosY,
+                                self.ObjID,
+                                self.ObjType,
+                                self.Speed,
+                                self.MoveType
+                                )
+        return DumpString
+
+
+m_NAtagMCPYPlayerMove=tagMCPYPlayerMove()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPYPlayerMove.Cmd,m_NAtagMCPYPlayerMove.SubCmd))] = m_NAtagMCPYPlayerMove
 
 
 #------------------------------------------------------
@@ -22340,23 +24199,15 @@
 #------------------------------------------------------
 #B4 09 通知脱机挂结果 #tagMCTJGInfo
 
-class  tagMCTJGInfo(Structure):
+class  tagMCTJGItems(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Exp1", c_int),    # 经验
-                  ("Exp2", c_int),    # 超亿经验
-                  ("Times", c_int),    # 使用时间秒
-                  ("PurpleEquip", c_ushort),    # 产出紫装数量
-                  ("OrangeEquip", c_ushort),    # 产出橙装数量
-                  ("EatPurpleEquip", c_ushort),    # 吞噬紫装数量
+                  ("ItemID", c_int),    
+                  ("Count", c_ushort),    
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xB4
-        self.SubCmd = 0x09
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -22365,112 +24216,148 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xB4
-        self.SubCmd = 0x09
-        self.Exp1 = 0
-        self.Exp2 = 0
-        self.Times = 0
-        self.PurpleEquip = 0
-        self.OrangeEquip = 0
-        self.EatPurpleEquip = 0
+        self.ItemID = 0
+        self.Count = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCTJGInfo)
+        return sizeof(tagMCTJGItems)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''//B4 09 通知脱机挂结果 //tagMCTJGInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
+                                ItemID:%d,
+                                Count:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Count
+                                )
+        return DumpString
+
+
+class  tagMCTJGInfo(Structure):
+    Head = tagHead()
+    Exp1 = 0    #(DWORD Exp1)// 经验
+    Exp2 = 0    #(DWORD Exp2)// 超亿经验
+    Times = 0    #(DWORD Times)// 使用时间秒
+    PurpleEquip = 0    #(WORD PurpleEquip)// 产出紫装数量
+    OrangeEquip = 0    #(WORD OrangeEquip)// 产出橙装数量
+    EatPurpleEquip = 0    #(WORD EatPurpleEquip)// 吞噬紫装数量
+    BeforeLV = 0    #(WORD BeforeLV)//脱机前记录的等级
+    GiveCnt = 0    #(WORD GiveCnt)//获得炼丹材料数量
+    Cnt = 0    #(BYTE Cnt)//物品类别数量
+    Items = list()    #(vector<tagMCTJGItems> Items)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB4
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Exp1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Exp2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Times,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OrangeEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.EatPurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.BeforeLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GiveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temItems = tagMCTJGItems()
+            _pos = temItems.ReadData(_lpData, _pos)
+            self.Items.append(temItems)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB4
+        self.Head.SubCmd = 0x09
+        self.Exp1 = 0
+        self.Exp2 = 0
+        self.Times = 0
+        self.PurpleEquip = 0
+        self.OrangeEquip = 0
+        self.EatPurpleEquip = 0
+        self.BeforeLV = 0
+        self.GiveCnt = 0
+        self.Cnt = 0
+        self.Items = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += 2
+        length += 2
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.Cnt):
+            length += self.Items[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Exp1)
+        data = CommFunc.WriteDWORD(data, self.Exp2)
+        data = CommFunc.WriteDWORD(data, self.Times)
+        data = CommFunc.WriteWORD(data, self.PurpleEquip)
+        data = CommFunc.WriteWORD(data, self.OrangeEquip)
+        data = CommFunc.WriteWORD(data, self.EatPurpleEquip)
+        data = CommFunc.WriteWORD(data, self.BeforeLV)
+        data = CommFunc.WriteWORD(data, self.GiveCnt)
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
                                 Exp1:%d,
                                 Exp2:%d,
                                 Times:%d,
                                 PurpleEquip:%d,
                                 OrangeEquip:%d,
-                                EatPurpleEquip:%d
+                                EatPurpleEquip:%d,
+                                BeforeLV:%d,
+                                GiveCnt:%d,
+                                Cnt:%d,
+                                Items:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.Head.OutputString(),
                                 self.Exp1,
                                 self.Exp2,
                                 self.Times,
                                 self.PurpleEquip,
                                 self.OrangeEquip,
-                                self.EatPurpleEquip
+                                self.EatPurpleEquip,
+                                self.BeforeLV,
+                                self.GiveCnt,
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCTJGInfo=tagMCTJGInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Cmd,m_NAtagMCTJGInfo.SubCmd))] = m_NAtagMCTJGInfo
-
-
-#------------------------------------------------------
-# B7 01 宠物等级 #tagMCPetLV
-
-class  tagMCPetLV(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PetLV", c_ushort),    # 等级
-                  ("PetExp", c_int),    # 升级经验
-                  ("PetClassExp", c_int),    # 升阶经验
-                  ("PetSeting", c_int),    # 宠物操作数据记录
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB7
-        self.SubCmd = 0x01
-        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 = 0xB7
-        self.SubCmd = 0x01
-        self.PetLV = 0
-        self.PetExp = 0
-        self.PetClassExp = 0
-        self.PetSeting = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCPetLV)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B7 01 宠物等级 //tagMCPetLV:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PetLV:%d,
-                                PetExp:%d,
-                                PetClassExp:%d,
-                                PetSeting:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PetLV,
-                                self.PetExp,
-                                self.PetClassExp,
-                                self.PetSeting
-                                )
-        return DumpString
-
-
-m_NAtagMCPetLV=tagMCPetLV()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetLV.Cmd,m_NAtagMCPetLV.SubCmd))] = m_NAtagMCPetLV
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Head.Cmd,m_NAtagMCTJGInfo.Head.SubCmd))] = m_NAtagMCTJGInfo
 
 
 #------------------------------------------------------
diff --git a/Tool/Robot/Protocol/PacketsSend.py b/Tool/Robot/Protocol/PacketsSend.py
index 2c3f4c8..df74de3 100644
--- a/Tool/Robot/Protocol/PacketsSend.py
+++ b/Tool/Robot/Protocol/PacketsSend.py
@@ -5204,6 +5204,8 @@
     Phone = 0    #(BYTE Phone)//是否绑定手机
     ServerID = 0    #(DWORD ServerID)//服务器ID
     Adult = 0    #(BYTE Adult)//是否成年 0未成年 1成年
+    ExtraLen = 0    #(BYTE ExtraLen)//扩展长度
+    Extra = ""    #(String Extra)//扩展内容,根据不同平台而定
     data = None
 
     def __init__(self):
@@ -5227,6 +5229,8 @@
         self.Phone,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Adult,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ExtraLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Extra,_pos = CommFunc.ReadString(_lpData, _pos,self.ExtraLen)
         return _pos
 
     def Clear(self):
@@ -5246,6 +5250,8 @@
         self.Phone = 0
         self.ServerID = 0
         self.Adult = 0
+        self.ExtraLen = 0
+        self.Extra = ""
         return
 
     def GetLength(self):
@@ -5263,6 +5269,8 @@
         length += 1
         length += 4
         length += 1
+        length += 1
+        length += len(self.Extra)
 
         return length
 
@@ -5281,6 +5289,8 @@
         data = CommFunc.WriteBYTE(data, self.Phone)
         data = CommFunc.WriteDWORD(data, self.ServerID)
         data = CommFunc.WriteBYTE(data, self.Adult)
+        data = CommFunc.WriteBYTE(data, self.ExtraLen)
+        data = CommFunc.WriteString(data, self.ExtraLen, self.Extra)
         return data
 
     def OutputString(self):
@@ -5297,7 +5307,9 @@
                                 TokenExpire:%s,
                                 Phone:%d,
                                 ServerID:%d,
-                                Adult:%d
+                                Adult:%d,
+                                ExtraLen:%d,
+                                Extra:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -5312,7 +5324,9 @@
                                 self.TokenExpire,
                                 self.Phone,
                                 self.ServerID,
-                                self.Adult
+                                self.Adult,
+                                self.ExtraLen,
+                                self.Extra
                                 )
         return DumpString
 
diff --git a/Tool/Robot/Protocol/PacketsSendPY.py b/Tool/Robot/Protocol/PacketsSendPY.py
index 0af2d67..ff5f5b4 100644
--- a/Tool/Robot/Protocol/PacketsSendPY.py
+++ b/Tool/Robot/Protocol/PacketsSendPY.py
@@ -588,58 +588,6 @@
 
 
 #------------------------------------------------------
-# A4 04 抢家族红包 #tagCGGrabFamilyRedPacket
-
-class  tagCGGrabFamilyRedPacket(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RedPaketID", c_int),    # 红包ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA4
-        self.SubCmd = 0x04
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA4
-        self.SubCmd = 0x04
-        self.RedPaketID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGGrabFamilyRedPacket)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A4 04 抢家族红包 //tagCGGrabFamilyRedPacket:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RedPaketID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RedPaketID
-                                )
-        return DumpString
-
-
-m_NAtagCGGrabFamilyRedPacket=tagCGGrabFamilyRedPacket()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGrabFamilyRedPacket.Cmd,m_NAtagCGGrabFamilyRedPacket.SubCmd))] = m_NAtagCGGrabFamilyRedPacket
-
-
-#------------------------------------------------------
 #A4 03 加入家族审核情况 #tagCGJoinFamilyReply
 
 class  tagCGJoinFamilyReply(Structure):
@@ -793,6 +741,155 @@
 
 m_NAtagCGOpenFamilyBossFB=tagCGOpenFamilyBossFB()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGOpenFamilyBossFB.Cmd,m_NAtagCGOpenFamilyBossFB.SubCmd))] = m_NAtagCGOpenFamilyBossFB
+
+
+#------------------------------------------------------
+# A4 04 创建家族 #tagCGPyCreatFamily
+
+class  tagCGPyCreatFamily(Structure):
+    Head = tagHead()
+    Name = ""    #(char Name[33])
+    FakeID = 0    #(WORD FakeID)//假仙盟编号
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.FakeID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x04
+        self.Name = ""
+        self.FakeID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 33
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteWORD(data, self.FakeID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Name:%s,
+                                FakeID:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Name,
+                                self.FakeID
+                                )
+        return DumpString
+
+
+m_NAtagCGPyCreatFamily=tagCGPyCreatFamily()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPyCreatFamily.Head.Cmd,m_NAtagCGPyCreatFamily.Head.SubCmd))] = m_NAtagCGPyCreatFamily
+
+
+#------------------------------------------------------
+# A4 12 搜索家族 #tagCGPySearchFamily
+
+class  tagCGPySearchFamily(Structure):
+    Head = tagHead()
+    MsgLen = 0    #(BYTE MsgLen)//模糊搜索家族,如果输入为空,则为不限制该条件
+    Msg = ""    #(String Msg)//size = MsgLen
+    LV = 0    #(BYTE LV)//最低家族等级,如果为0,则不限制该条件
+    MaxCount = 0    #(BYTE MaxCount)//搜索结果所需最大条数,后端限制最多返回20条
+    IsSearching = 0    #(BYTE IsSearching)//默认1,如果有指定其他值,则返回指定值
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MsgLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.MsgLen)
+        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MaxCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x12
+        self.MsgLen = 0
+        self.Msg = ""
+        self.LV = 0
+        self.MaxCount = 0
+        self.IsSearching = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.Msg)
+        length += 1
+        length += 1
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.MsgLen)
+        data = CommFunc.WriteString(data, self.MsgLen, self.Msg)
+        data = CommFunc.WriteBYTE(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.MaxCount)
+        data = CommFunc.WriteBYTE(data, self.IsSearching)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MsgLen:%d,
+                                Msg:%s,
+                                LV:%d,
+                                MaxCount:%d,
+                                IsSearching:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MsgLen,
+                                self.Msg,
+                                self.LV,
+                                self.MaxCount,
+                                self.IsSearching
+                                )
+        return DumpString
+
+
+m_NAtagCGPySearchFamily=tagCGPySearchFamily()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGPySearchFamily.Head.Cmd,m_NAtagCGPySearchFamily.Head.SubCmd))] = m_NAtagCGPySearchFamily
 
 
 #------------------------------------------------------
@@ -1347,19 +1444,20 @@
 
 
 #------------------------------------------------------
-#A9 10 请求魔方寻宝记录 #tagCGMagicTreasureRecord
+# AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss
 
-class  tagCGMagicTreasureRecord(Structure):
+class  tagCGCallupFamilyMemberToBoss(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("NPCID", c_int),    
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA9
-        self.SubCmd = 0x10
+        self.Cmd = 0xAC
+        self.SubCmd = 0x05
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -1368,30 +1466,33 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA9
-        self.SubCmd = 0x10
+        self.Cmd = 0xAC
+        self.SubCmd = 0x05
+        self.NPCID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCGMagicTreasureRecord)
+        return sizeof(tagCGCallupFamilyMemberToBoss)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A9 10 请求魔方寻宝记录 //tagCGMagicTreasureRecord:
+        DumpString = '''// AC 05 召集仙盟成员打boss //tagCGCallupFamilyMemberToBoss:
                                 Cmd:%s,
-                                SubCmd:%s
+                                SubCmd:%s,
+                                NPCID:%d
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd
+                                self.SubCmd,
+                                self.NPCID
                                 )
         return DumpString
 
 
-m_NAtagCGMagicTreasureRecord=tagCGMagicTreasureRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMagicTreasureRecord.Cmd,m_NAtagCGMagicTreasureRecord.SubCmd))] = m_NAtagCGMagicTreasureRecord
+m_NAtagCGCallupFamilyMemberToBoss=tagCGCallupFamilyMemberToBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCallupFamilyMemberToBoss.Cmd,m_NAtagCGCallupFamilyMemberToBoss.SubCmd))] = m_NAtagCGCallupFamilyMemberToBoss
 
 
 #------------------------------------------------------
@@ -1473,54 +1574,6 @@
 
 
 #------------------------------------------------------
-# AC 09  查询活动怪信息 #tagCGQueryFestivalNPC
-
-class  tagCGQueryFestivalNPC(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x09
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAC
-        self.SubCmd = 0x09
-        return
-
-    def GetLength(self):
-        return sizeof(tagCGQueryFestivalNPC)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 09  查询活动怪信息 //tagCGQueryFestivalNPC:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCGQueryFestivalNPC=tagCGQueryFestivalNPC()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryFestivalNPC.Cmd,m_NAtagCGQueryFestivalNPC.SubCmd))] = m_NAtagCGQueryFestivalNPC
-
-
-#------------------------------------------------------
 # AC 01 仙魔之争报名 #tagCGJoinXMZZ
 
 class  tagCGJoinXMZZ(Structure):
@@ -1566,6 +1619,102 @@
 
 m_NAtagCGJoinXMZZ=tagCGJoinXMZZ()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGJoinXMZZ.Cmd,m_NAtagCGJoinXMZZ.SubCmd))] = m_NAtagCGJoinXMZZ
+
+
+#------------------------------------------------------
+# AC 04 查询仙盟抢Boss所有Boss当前进度 #tagCGQueryAllFamilyBossHurt
+
+class  tagCGQueryAllFamilyBossHurt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x04
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAC
+        self.SubCmd = 0x04
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGQueryAllFamilyBossHurt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 04 查询仙盟抢Boss所有Boss当前进度 //tagCGQueryAllFamilyBossHurt:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCGQueryAllFamilyBossHurt=tagCGQueryAllFamilyBossHurt()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryAllFamilyBossHurt.Cmd,m_NAtagCGQueryAllFamilyBossHurt.SubCmd))] = m_NAtagCGQueryAllFamilyBossHurt
+
+
+#------------------------------------------------------
+# AC 03 仙魔之争信息查询 #tagCGXMZZInfoQuery
+
+class  tagCGXMZZInfoQuery(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x03
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAC
+        self.SubCmd = 0x03
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGXMZZInfoQuery)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 03 仙魔之争信息查询 //tagCGXMZZInfoQuery:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCGXMZZInfoQuery=tagCGXMZZInfoQuery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGXMZZInfoQuery.Cmd,m_NAtagCGXMZZInfoQuery.SubCmd))] = m_NAtagCGXMZZInfoQuery
 
 
 #------------------------------------------------------
@@ -1989,6 +2138,101 @@
 
 
 #------------------------------------------------------
+#B3 07 语音聊天 #tagCGVoiceChat
+
+class  tagCGVoiceChat(Structure):
+    Head = tagHead()
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域    
+    TargetNameLen = 0    #(BYTE TargetNameLen)
+    TargetName = ""    #(String TargetName)//size = TargetNameLen
+    TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
+    Len = 0    #(WORD Len)
+    Content = list()    #(vector<BYTE> Content)//size = Len
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen)
+        self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.Content.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x07
+        self.ChannelType = 0
+        self.TargetNameLen = 0
+        self.TargetName = ""
+        self.TargetID = 0
+        self.Len = 0
+        self.Content = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.TargetName)
+        length += 4
+        length += 2
+        length += 1 * self.Len
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ChannelType)
+        data = CommFunc.WriteBYTE(data, self.TargetNameLen)
+        data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName)
+        data = CommFunc.WriteDWORD(data, self.TargetID)
+        data = CommFunc.WriteWORD(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteBYTE(data, self.Content[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ChannelType:%d,
+                                TargetNameLen:%d,
+                                TargetName:%s,
+                                TargetID:%d,
+                                Len:%d,
+                                Content:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ChannelType,
+                                self.TargetNameLen,
+                                self.TargetName,
+                                self.TargetID,
+                                self.Len,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCGVoiceChat=tagCGVoiceChat()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGVoiceChat.Head.Cmd,m_NAtagCGVoiceChat.Head.SubCmd))] = m_NAtagCGVoiceChat
+
+
+#------------------------------------------------------
 #B3 03 是否允许加入好友的回应#tagCGJoinFriendAnswer
 
 class  tagCGJoinFriendAnswer(Structure):
@@ -2397,6 +2641,62 @@
 
 m_NAtagCGInvitePlayerJoinTeam=tagCGInvitePlayerJoinTeam()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeam.Cmd,m_NAtagCGInvitePlayerJoinTeam.SubCmd))] = m_NAtagCGInvitePlayerJoinTeam
+
+
+#------------------------------------------------------
+# B9 0A 按条件邀请玩家加入队伍 #tagCGInvitePlayerJoinTeamByLV
+
+class  tagCGInvitePlayerJoinTeamByLV(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LVLimit", c_ushort),    # 目标玩家大于等于此等级
+                  ("InviteCnt", c_ubyte),    # 邀请玩家个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        self.SubCmd = 0x0A
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB9
+        self.SubCmd = 0x0A
+        self.LVLimit = 0
+        self.InviteCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGInvitePlayerJoinTeamByLV)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 0A 按条件邀请玩家加入队伍 //tagCGInvitePlayerJoinTeamByLV:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                LVLimit:%d,
+                                InviteCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.LVLimit,
+                                self.InviteCnt
+                                )
+        return DumpString
+
+
+m_NAtagCGInvitePlayerJoinTeamByLV=tagCGInvitePlayerJoinTeamByLV()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeamByLV.Cmd,m_NAtagCGInvitePlayerJoinTeamByLV.SubCmd))] = m_NAtagCGInvitePlayerJoinTeamByLV
 
 
 #------------------------------------------------------
@@ -3748,7 +4048,7 @@
     SpeakerType = 0    #(BYTE SpeakerType)//1-本服;2-跨服
     IsUseGold = 0    #(BYTE IsUseGold)//是否使用钻石
     ItemIndex = 0    #(BYTE ItemIndex)//使用物品说话时, 物品Index
-    TextLen = 0    #(BYTE TextLen)//字符长度
+    TextLen = 0    #(WORD TextLen)//字符长度
     Text = ""    #(String Text)//size = TextLen
     data = None
 
@@ -3764,7 +4064,7 @@
         self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IsUseGold,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.ItemIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TextLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
         return _pos
 
@@ -3786,7 +4086,7 @@
         length += 1
         length += 1
         length += 1
-        length += 1
+        length += 2
         length += len(self.Text)
 
         return length
@@ -3797,7 +4097,7 @@
         data = CommFunc.WriteBYTE(data, self.SpeakerType)
         data = CommFunc.WriteBYTE(data, self.IsUseGold)
         data = CommFunc.WriteBYTE(data, self.ItemIndex)
-        data = CommFunc.WriteBYTE(data, self.TextLen)
+        data = CommFunc.WriteWORD(data, self.TextLen)
         data = CommFunc.WriteString(data, self.TextLen, self.Text)
         return data
 
@@ -3950,6 +4250,151 @@
 
 m_NAtagCMQueryBossHurtList=tagCMQueryBossHurtList()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryBossHurtList.Cmd,m_NAtagCMQueryBossHurtList.SubCmd))] = m_NAtagCMQueryBossHurtList
+
+
+#------------------------------------------------------
+# A2 28 查询仙盟抢Boss伤血列表 #tagCMQueryFamilyBossHurt
+
+class  tagCMQueryFamilyBossHurt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ObjID", c_int),    
+                  ("NPCID", c_int),    
+                  ("QueryType", c_ubyte),    # 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA2
+        self.SubCmd = 0x28
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA2
+        self.SubCmd = 0x28
+        self.ObjID = 0
+        self.NPCID = 0
+        self.QueryType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMQueryFamilyBossHurt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A2 28 查询仙盟抢Boss伤血列表 //tagCMQueryFamilyBossHurt:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ObjID:%d,
+                                NPCID:%d,
+                                QueryType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ObjID,
+                                self.NPCID,
+                                self.QueryType
+                                )
+        return DumpString
+
+
+m_NAtagCMQueryFamilyBossHurt=tagCMQueryFamilyBossHurt()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryFamilyBossHurt.Cmd,m_NAtagCMQueryFamilyBossHurt.SubCmd))] = m_NAtagCMQueryFamilyBossHurt
+
+
+#------------------------------------------------------
+# A2 27 查询地图NPC数量信息 #tagCMQueryNPCCntInfo
+
+class  tagCMQueryNPCCntInfo(Structure):
+    Head = tagHead()
+    MapID = 0    #(DWORD MapID)// 目标地图ID
+    LineID = 0    #(WORD LineID)// 线路ID
+    IsNoTimeLimit = 0    #(BYTE IsNoTimeLimit)//是否没有查询时间限制,默认有限制
+    NPCIDListLen = 0    #(BYTE NPCIDListLen)
+    NPCIDList = ""    #(String NPCIDList)// 需要查询的NPCID列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x27
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsNoTimeLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NPCIDListLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NPCIDList,_pos = CommFunc.ReadString(_lpData, _pos,self.NPCIDListLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x27
+        self.MapID = 0
+        self.LineID = 0
+        self.IsNoTimeLimit = 0
+        self.NPCIDListLen = 0
+        self.NPCIDList = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 2
+        length += 1
+        length += 1
+        length += len(self.NPCIDList)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteWORD(data, self.LineID)
+        data = CommFunc.WriteBYTE(data, self.IsNoTimeLimit)
+        data = CommFunc.WriteBYTE(data, self.NPCIDListLen)
+        data = CommFunc.WriteString(data, self.NPCIDListLen, self.NPCIDList)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MapID:%d,
+                                LineID:%d,
+                                IsNoTimeLimit:%d,
+                                NPCIDListLen:%d,
+                                NPCIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MapID,
+                                self.LineID,
+                                self.IsNoTimeLimit,
+                                self.NPCIDListLen,
+                                self.NPCIDList
+                                )
+        return DumpString
+
+
+m_NAtagCMQueryNPCCntInfo=tagCMQueryNPCCntInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryNPCCntInfo.Head.Cmd,m_NAtagCMQueryNPCCntInfo.Head.SubCmd))] = m_NAtagCMQueryNPCCntInfo
 
 
 #------------------------------------------------------
@@ -4470,6 +4915,101 @@
 
 
 #------------------------------------------------------
+#A2 26 语音聊天 #tagCMVoiceChat
+
+class  tagCMVoiceChat(Structure):
+    Head = tagHead()
+    ChannelType = 0    #(BYTE ChannelType)//  5 区域 --- 查看封包tagCGVoiceChat 1 世界 2 仙盟 3 私聊(好友) 4 队伍
+    TargetNameLen = 0    #(BYTE TargetNameLen)
+    TargetName = ""    #(String TargetName)//size = TargetNameLen
+    TargetID = 0    #(DWORD TargetID)// 私聊默认发玩家ID,没有ID才发名称
+    Len = 0    #(WORD Len)
+    Content = list()    #(vector<BYTE> Content)//size = Len
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TargetName,_pos = CommFunc.ReadString(_lpData, _pos,self.TargetNameLen)
+        self.TargetID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.Content.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA2
+        self.Head.SubCmd = 0x26
+        self.ChannelType = 0
+        self.TargetNameLen = 0
+        self.TargetName = ""
+        self.TargetID = 0
+        self.Len = 0
+        self.Content = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.TargetName)
+        length += 4
+        length += 2
+        length += 1 * self.Len
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ChannelType)
+        data = CommFunc.WriteBYTE(data, self.TargetNameLen)
+        data = CommFunc.WriteString(data, self.TargetNameLen, self.TargetName)
+        data = CommFunc.WriteDWORD(data, self.TargetID)
+        data = CommFunc.WriteWORD(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteBYTE(data, self.Content[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ChannelType:%d,
+                                TargetNameLen:%d,
+                                TargetName:%s,
+                                TargetID:%d,
+                                Len:%d,
+                                Content:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ChannelType,
+                                self.TargetNameLen,
+                                self.TargetName,
+                                self.TargetID,
+                                self.Len,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMVoiceChat=tagCMVoiceChat()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVoiceChat.Head.Cmd,m_NAtagCMVoiceChat.Head.SubCmd))] = m_NAtagCMVoiceChat
+
+
+#------------------------------------------------------
 #A2 12 查看玩家详细信息#tagCMViewPlayerInfo
 
 class  tagCMViewPlayerInfo(Structure):
@@ -4519,66 +5059,6 @@
 
 m_NAtagCMViewPlayerInfo=tagCMViewPlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMViewPlayerInfo.Cmd,m_NAtagCMViewPlayerInfo.SubCmd))] = m_NAtagCMViewPlayerInfo
-
-
-#------------------------------------------------------
-# A3 16 购买物品 #tagCMBuyItem
-
-class  tagCMBuyItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ItemID", c_int),    #物品id
-                  ("Cnt", c_int),    #个数
-                  ("MoneyType", c_ubyte),    #金钱类型
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x16
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x16
-        self.ItemID = 0
-        self.Cnt = 0
-        self.MoneyType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMBuyItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 16 购买物品 //tagCMBuyItem:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ItemID:%d,
-                                Cnt:%d,
-                                MoneyType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ItemID,
-                                self.Cnt,
-                                self.MoneyType
-                                )
-        return DumpString
-
-
-m_NAtagCMBuyItem=tagCMBuyItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItem.Cmd,m_NAtagCMBuyItem.SubCmd))] = m_NAtagCMBuyItem
 
 
 #------------------------------------------------------
@@ -4706,6 +5186,122 @@
 
 
 #------------------------------------------------------
+# A3 2D 装备分解设置 #tagCMDecomposeSeting
+
+class  tagCMDecomposeSeting(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Seting", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2D
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2D
+        self.Seting = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDecomposeSeting)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 2D 装备分解设置 //tagCMDecomposeSeting:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Seting:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Seting
+                                )
+        return DumpString
+
+
+m_NAtagCMDecomposeSeting=tagCMDecomposeSeting()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDecomposeSeting.Cmd,m_NAtagCMDecomposeSeting.SubCmd))] = m_NAtagCMDecomposeSeting
+
+
+#------------------------------------------------------
+# A3 09 转移物品到其他背包 #tagCMDropItemToOtherPack
+
+class  tagCMDropItemToOtherPack(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("SrcBackpack", c_ubyte),    #源背包类型
+                  ("DesBackPack", c_ubyte),    #目标背包类型
+                  ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
+                  ("IsAll", c_ubyte),    #是否全部转移        
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x09
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x09
+        self.SrcBackpack = 0
+        self.DesBackPack = 0
+        self.SrcIndex = 0
+        self.IsAll = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDropItemToOtherPack)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 09 转移物品到其他背包 //tagCMDropItemToOtherPack:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                SrcBackpack:%d,
+                                DesBackPack:%d,
+                                SrcIndex:%d,
+                                IsAll:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.SrcBackpack,
+                                self.DesBackPack,
+                                self.SrcIndex,
+                                self.IsAll
+                                )
+        return DumpString
+
+
+m_NAtagCMDropItemToOtherPack=tagCMDropItemToOtherPack()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDropItemToOtherPack.Cmd,m_NAtagCMDropItemToOtherPack.SubCmd))] = m_NAtagCMDropItemToOtherPack
+
+
+#------------------------------------------------------
 #A3 15 装备打孔 # tagCMEquipAddHole
 
 class  tagCMEquipAddHole(Structure):
@@ -4770,7 +5366,6 @@
 
 class  tagCMEquipDecompose(Structure):
     Head = tagHead()
-    PackType = 0    #(BYTE PackType)//背包类型
     IndexCount = 0    #(BYTE IndexCount)//材料所在背包索引的数量
     IndexList = list()    #(vector<BYTE> IndexList)//材料所在背包索引列表
     data = None
@@ -4784,7 +5379,6 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.PackType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.IndexCount):
             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
@@ -4796,7 +5390,6 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x2C
-        self.PackType = 0
         self.IndexCount = 0
         self.IndexList = list()
         return
@@ -4805,7 +5398,6 @@
         length = 0
         length += self.Head.GetLength()
         length += 1
-        length += 1
         length += 1 * self.IndexCount
 
         return length
@@ -4813,7 +5405,6 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PackType)
         data = CommFunc.WriteBYTE(data, self.IndexCount)
         for i in range(self.IndexCount):
             data = CommFunc.WriteBYTE(data, self.IndexList[i])
@@ -4822,13 +5413,11 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                PackType:%d,
                                 IndexCount:%d,
                                 IndexList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.PackType,
                                 self.IndexCount,
                                 "..."
                                 )
@@ -5303,78 +5892,6 @@
 
 
 #------------------------------------------------------
-#A3 13 装备继承#tagCMInheritEquip
-
-class  tagCMInheritEquip(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SrcPackType", c_ubyte),    #背包类型:rptItem, rptEquip, rptPetEquip1~5
-                  ("SrcEquipIndex", c_ubyte),    #材料装备在对应背包中索引
-                  ("DesPackType", c_ubyte),    #目标装备所在背包类型:rptItem, rptEquip, rptPetEquip1~5
-                  ("DesEquipIndex", c_ubyte),    #目标装备所在背包索引    
-                  ("AutoBuy", c_ubyte),    #自动购买
-                  ("InheritGreatAttr", c_ubyte),    #是否继承主装备卓越属性
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x13
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x13
-        self.SrcPackType = 0
-        self.SrcEquipIndex = 0
-        self.DesPackType = 0
-        self.DesEquipIndex = 0
-        self.AutoBuy = 0
-        self.InheritGreatAttr = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMInheritEquip)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 13 装备继承//tagCMInheritEquip:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SrcPackType:%d,
-                                SrcEquipIndex:%d,
-                                DesPackType:%d,
-                                DesEquipIndex:%d,
-                                AutoBuy:%d,
-                                InheritGreatAttr:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SrcPackType,
-                                self.SrcEquipIndex,
-                                self.DesPackType,
-                                self.DesEquipIndex,
-                                self.AutoBuy,
-                                self.InheritGreatAttr
-                                )
-        return DumpString
-
-
-m_NAtagCMInheritEquip=tagCMInheritEquip()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMInheritEquip.Cmd,m_NAtagCMInheritEquip.SubCmd))] = m_NAtagCMInheritEquip
-
-
-#------------------------------------------------------
 #A3 02 丢弃背包物品 #tagPlayerDropItem
 
 class  tagPlayerDropItem(Structure):
@@ -5436,6 +5953,83 @@
 
 m_NAtagPlayerDropItem=tagPlayerDropItem()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerDropItem.Cmd,m_NAtagPlayerDropItem.SubCmd))] = m_NAtagPlayerDropItem
+
+
+#------------------------------------------------------
+# A3 2A 回收魂石 #tagCMRecycleAttrFruit
+
+class  tagCMRecycleAttrFruit(Structure):
+    Head = tagHead()
+    IndexCount = 0    #(BYTE IndexCount)//索引个数
+    IndexList = list()    #(vector<BYTE> IndexList)//物品在背包中索引列表
+    RecycleCountList = list()    #(vector<WORD> RecycleCountList)//索引对应回收个数列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x2A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.IndexList.append(value)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.RecycleCountList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x2A
+        self.IndexCount = 0
+        self.IndexList = list()
+        self.RecycleCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.IndexCount
+        length += 2 * self.IndexCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteBYTE(data, self.IndexList[i])
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteWORD(data, self.RecycleCountList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                IndexCount:%d,
+                                IndexList:%s,
+                                RecycleCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.IndexCount,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMRecycleAttrFruit=tagCMRecycleAttrFruit()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecycleAttrFruit.Head.Cmd,m_NAtagCMRecycleAttrFruit.Head.SubCmd))] = m_NAtagCMRecycleAttrFruit
 
 
 #------------------------------------------------------
@@ -5676,62 +6270,6 @@
 
 
 #------------------------------------------------------
-# A3 2D 红装剥离 #tagCMSuitEquipStrip
-
-class  tagCMSuitEquipStrip(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PackType", c_ubyte),    #背包类型
-                  ("ItemIndex", c_ubyte),    #材料所在背包索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2D
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2D
-        self.PackType = 0
-        self.ItemIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMSuitEquipStrip)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 2D 红装剥离 //tagCMSuitEquipStrip:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PackType:%d,
-                                ItemIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PackType,
-                                self.ItemIndex
-                                )
-        return DumpString
-
-
-m_NAtagCMSuitEquipStrip=tagCMSuitEquipStrip()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSuitEquipStrip.Cmd,m_NAtagCMSuitEquipStrip.SubCmd))] = m_NAtagCMSuitEquipStrip
-
-
-#------------------------------------------------------
 #A3 20 将魔方背包中的物品转移到人物背包中 #tagCMMagicItemPutInItemPack
 
 class  tagCMMagicItemPutInItemPack(Structure):
@@ -5926,6 +6464,58 @@
 
 
 #------------------------------------------------------
+# A3 2F 宗门试炼兑换 #tagCMTrialExchange
+
+class  tagCMTrialExchange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ID", c_int),    #兑换ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2F
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x2F
+        self.ID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMTrialExchange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 2F 宗门试炼兑换 //tagCMTrialExchange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ID
+                                )
+        return DumpString
+
+
+m_NAtagCMTrialExchange=tagCMTrialExchange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTrialExchange.Cmd,m_NAtagCMTrialExchange.SubCmd))] = m_NAtagCMTrialExchange
+
+
+#------------------------------------------------------
 # A3 2B 一键使用属性果实 #tagCMUseAllAttrFruit
 
 class  tagCMUseAllAttrFruit(Structure):
@@ -5975,122 +6565,6 @@
 
 m_NAtagCMUseAllAttrFruit=tagCMUseAllAttrFruit()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllAttrFruit.Cmd,m_NAtagCMUseAllAttrFruit.SubCmd))] = m_NAtagCMUseAllAttrFruit
-
-
-#------------------------------------------------------
-#A3 10 一键使用图鉴 #tagCMUseAllCard
-
-class  tagCMUseAllCard(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CardColor", c_ushort),    #使用的图鉴颜色品质,可配置多个颜色品质,颜色品质从0开始,对应到二进制位
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x10
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x10
-        self.CardColor = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMUseAllCard)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 10 一键使用图鉴 //tagCMUseAllCard:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CardColor:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CardColor
-                                )
-        return DumpString
-
-
-m_NAtagCMUseAllCard=tagCMUseAllCard()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseAllCard.Cmd,m_NAtagCMUseAllCard.SubCmd))] = m_NAtagCMUseAllCard
-
-
-#------------------------------------------------------
-# A3 2A 使用皇室宝箱 #tagCMUseCRBox
-
-class  tagCMUseCRBox(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncIndex", c_ubyte),    #功能索引
-                  ("BoxIndex", c_ubyte),    #宝箱格子索引
-                  ("UseItemIndex", c_ubyte),    # 物品在背包中的索引
-                  ("UseType", c_ubyte),    #使用类型<0-开始使用,1-开始解锁,2-立即开启>
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2A
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x2A
-        self.FuncIndex = 0
-        self.BoxIndex = 0
-        self.UseItemIndex = 0
-        self.UseType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMUseCRBox)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 2A 使用皇室宝箱 //tagCMUseCRBox:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncIndex:%d,
-                                BoxIndex:%d,
-                                UseItemIndex:%d,
-                                UseType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncIndex,
-                                self.BoxIndex,
-                                self.UseItemIndex,
-                                self.UseType
-                                )
-        return DumpString
-
-
-m_NAtagCMUseCRBox=tagCMUseCRBox()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseCRBox.Cmd,m_NAtagCMUseCRBox.SubCmd))] = m_NAtagCMUseCRBox
 
 
 #------------------------------------------------------
@@ -6151,66 +6625,6 @@
 
 m_NAtagCMUseItems=tagCMUseItems()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Cmd,m_NAtagCMUseItems.SubCmd))] = m_NAtagCMUseItems
-
-
-#------------------------------------------------------
-# A3 27 使用过程物品 #tagCMUseProcessItem
-
-class  tagCMUseProcessItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("UseType", c_ubyte),    # 使用类型 <0-开始使用, 1-使用操作, 2-结束使用>
-                  ("UseItemIndex", c_ubyte),    # 物品在背包中的索引
-                  ("ExtraInfo", c_ubyte),    # 预留信息
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x27
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x27
-        self.UseType = 0
-        self.UseItemIndex = 0
-        self.ExtraInfo = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMUseProcessItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 27 使用过程物品 //tagCMUseProcessItem:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                UseType:%d,
-                                UseItemIndex:%d,
-                                ExtraInfo:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.UseType,
-                                self.UseItemIndex,
-                                self.ExtraInfo
-                                )
-        return DumpString
-
-
-m_NAtagCMUseProcessItem=tagCMUseProcessItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseProcessItem.Cmd,m_NAtagCMUseProcessItem.SubCmd))] = m_NAtagCMUseProcessItem
 
 
 #------------------------------------------------------
@@ -6400,7 +6814,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("HorseID", c_ubyte),    #坐骑ID
+                  ("HorseID", c_int),    #坐骑ID
                   ]
 
     def __init__(self):
@@ -6498,6 +6912,58 @@
 
 m_NAtagCMActiveAllEquipAttr=tagCMActiveAllEquipAttr()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveAllEquipAttr.Cmd,m_NAtagCMActiveAllEquipAttr.SubCmd))] = m_NAtagCMActiveAllEquipAttr
+
+
+#------------------------------------------------------
+# A5 12 激活法宝之魂 #tagCMActiveMWSoul
+
+class  tagCMActiveMWSoul(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ID", c_ubyte),    #编号
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x12
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x12
+        self.ID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActiveMWSoul)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 12 激活法宝之魂 //tagCMActiveMWSoul:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ID
+                                )
+        return DumpString
+
+
+m_NAtagCMActiveMWSoul=tagCMActiveMWSoul()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActiveMWSoul.Cmd,m_NAtagCMActiveMWSoul.SubCmd))] = m_NAtagCMActiveMWSoul
 
 
 #------------------------------------------------------
@@ -6964,58 +7430,6 @@
 
 
 #------------------------------------------------------
-#A5 12 购买每日一购商品 #tagCMBuyDailyGoldShopItem
-
-class  tagCMBuyDailyGoldShopItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    #购买物品的索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x12
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x12
-        self.Index = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMBuyDailyGoldShopItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 12 购买每日一购商品 //tagCMBuyDailyGoldShopItem:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Index:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Index
-                                )
-        return DumpString
-
-
-m_NAtagCMBuyDailyGoldShopItem=tagCMBuyDailyGoldShopItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyDailyGoldShopItem.Cmd,m_NAtagCMBuyDailyGoldShopItem.SubCmd))] = m_NAtagCMBuyDailyGoldShopItem
-
-
-#------------------------------------------------------
 #A5 75 购买副本进入次数#tagCMBuyEnterCount
 
 class  tagCMBuyEnterCount(Structure):
@@ -7065,58 +7479,6 @@
 
 m_NAtagCMBuyEnterCount=tagCMBuyEnterCount()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyEnterCount.Cmd,m_NAtagCMBuyEnterCount.SubCmd))] = m_NAtagCMBuyEnterCount
-
-
-#------------------------------------------------------
-#A5 14 开通表情包#tagPyCMBuyFacePackage
-
-class  tagPyCMBuyFacePackage(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PackageID", c_ubyte),    #购买表情包的索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x14
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x14
-        self.PackageID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagPyCMBuyFacePackage)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 14 开通表情包//tagPyCMBuyFacePackage:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PackageID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PackageID
-                                )
-        return DumpString
-
-
-m_NAtagPyCMBuyFacePackage=tagPyCMBuyFacePackage()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMBuyFacePackage.Cmd,m_NAtagPyCMBuyFacePackage.SubCmd))] = m_NAtagPyCMBuyFacePackage
 
 
 #------------------------------------------------------
@@ -7577,62 +7939,6 @@
 
 
 #------------------------------------------------------
-# A5 62 装备收集属性激活 #tagCMCollectEquipAttrActive
-
-class  tagCMCollectEquipAttrActive(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CollectType", c_ubyte),    #收集类型 0-目标收集 1-战装收集
-                  ("Data", c_ubyte),    #额外数据
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x62
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x62
-        self.CollectType = 0
-        self.Data = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMCollectEquipAttrActive)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 62 装备收集属性激活 //tagCMCollectEquipAttrActive:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CollectType:%d,
-                                Data:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CollectType,
-                                self.Data
-                                )
-        return DumpString
-
-
-m_NAtagCMCollectEquipAttrActive=tagCMCollectEquipAttrActive()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCollectEquipAttrActive.Cmd,m_NAtagCMCollectEquipAttrActive.SubCmd))] = m_NAtagCMCollectEquipAttrActive
-
-
-#------------------------------------------------------
 # A5 28 常规副本扫荡 #tagCMCommFBWipeOut
 
 class  tagCMCommFBWipeOut(Structure):
@@ -7794,6 +8100,303 @@
 
 m_NAtagCMDoFBAction=tagCMDoFBAction()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDoFBAction.Cmd,m_NAtagCMDoFBAction.SubCmd))] = m_NAtagCMDoFBAction
+
+
+#------------------------------------------------------
+# A5 C2 神兽变更助战状态 #tagCMDogzBattleStateChange
+
+class  tagCMDogzBattleStateChange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("BatteState", c_ubyte),    #助战状态,0-召回,1-助战
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC2
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC2
+        self.DogzID = 0
+        self.BatteState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzBattleStateChange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C2 神兽变更助战状态 //tagCMDogzBattleStateChange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DogzID:%d,
+                                BatteState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DogzID,
+                                self.BatteState
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzBattleStateChange=tagCMDogzBattleStateChange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBattleStateChange.Cmd,m_NAtagCMDogzBattleStateChange.SubCmd))] = m_NAtagCMDogzBattleStateChange
+
+
+#------------------------------------------------------
+# A5 C3 神兽购买助战位 #tagCMDogzBuyBatteCount
+
+class  tagCMDogzBuyBatteCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC3
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC3
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzBuyBatteCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C3 神兽购买助战位 //tagCMDogzBuyBatteCount:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzBuyBatteCount=tagCMDogzBuyBatteCount()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBuyBatteCount.Cmd,m_NAtagCMDogzBuyBatteCount.SubCmd))] = m_NAtagCMDogzBuyBatteCount
+
+
+#------------------------------------------------------
+# A5 C0 神兽穿戴装备 #tagCMDogzEquipItem
+
+class  tagCMDogzEquipItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("EquipIndex", c_ubyte),    #神兽装备所在神兽背包索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC0
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC0
+        self.DogzID = 0
+        self.EquipIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzEquipItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C0 神兽穿戴装备 //tagCMDogzEquipItem:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DogzID:%d,
+                                EquipIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DogzID,
+                                self.EquipIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Cmd,m_NAtagCMDogzEquipItem.SubCmd))] = m_NAtagCMDogzEquipItem
+
+
+#------------------------------------------------------
+# A5 C4 神兽装备强化 #tagCMDogzEquipPlus
+
+class  tagCMDogzEquipPlus(Structure):
+    Head = tagHead()
+    EquipIndex = 0    #(BYTE EquipIndex)//神兽装备背包中索引
+    IndexCount = 0    #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
+    IndexList = list()    #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
+    IsDouble = 0    #(BYTE IsDouble)//是否双倍强化
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC4
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.IndexList.append(value)
+        self.IsDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC4
+        self.EquipIndex = 0
+        self.IndexCount = 0
+        self.IndexList = list()
+        self.IsDouble = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1 * self.IndexCount
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.EquipIndex)
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteBYTE(data, self.IndexList[i])
+        data = CommFunc.WriteBYTE(data, self.IsDouble)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EquipIndex:%d,
+                                IndexCount:%d,
+                                IndexList:%s,
+                                IsDouble:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.EquipIndex,
+                                self.IndexCount,
+                                "...",
+                                self.IsDouble
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzEquipPlus=tagCMDogzEquipPlus()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipPlus.Head.Cmd,m_NAtagCMDogzEquipPlus.Head.SubCmd))] = m_NAtagCMDogzEquipPlus
+
+
+#------------------------------------------------------
+# A5 C1 神兽卸下装备 #tagCMDogzUnEquipItem
+
+class  tagCMDogzUnEquipItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("EquipPlace", c_ubyte),    #卸下的装备位, 0代表卸下全部
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC1
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0xC1
+        self.DogzID = 0
+        self.EquipPlace = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMDogzUnEquipItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 C1 神兽卸下装备 //tagCMDogzUnEquipItem:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DogzID:%d,
+                                EquipPlace:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DogzID,
+                                self.EquipPlace
+                                )
+        return DumpString
+
+
+m_NAtagCMDogzUnEquipItem=tagCMDogzUnEquipItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzUnEquipItem.Cmd,m_NAtagCMDogzUnEquipItem.SubCmd))] = m_NAtagCMDogzUnEquipItem
 
 
 #------------------------------------------------------
@@ -8181,114 +8784,6 @@
 
 
 #------------------------------------------------------
-# A5 64 抢红包 #tagCMGrabRedPacket
-
-class  tagCMGrabRedPacket(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    #  0抢 1 查询
-                  ("RedPacketID", c_int),    # 红包ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x64
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x64
-        self.Type = 0
-        self.RedPacketID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMGrabRedPacket)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 64 抢红包 //tagCMGrabRedPacket:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Type:%d,
-                                RedPacketID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Type,
-                                self.RedPacketID
-                                )
-        return DumpString
-
-
-m_NAtagCMGrabRedPacket=tagCMGrabRedPacket()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabRedPacket.Cmd,m_NAtagCMGrabRedPacket.SubCmd))] = m_NAtagCMGrabRedPacket
-
-
-#------------------------------------------------------
-# A5 56 守护升级 #tagCMGuardUp
-
-class  tagCMGuardUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("GuardID", c_int),    # 守护物品id
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x56
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x56
-        self.GuardID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMGuardUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 56 守护升级 //tagCMGuardUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                GuardID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.GuardID
-                                )
-        return DumpString
-
-
-m_NAtagCMGuardUp=tagCMGuardUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGuardUp.Cmd,m_NAtagCMGuardUp.SubCmd))] = m_NAtagCMGuardUp
-
-
-#------------------------------------------------------
 #A5 37 天梯增加挑战次数#tagCMHighLadderAddCount
 
 class  tagCMHighLadderAddCount(Structure):
@@ -8344,7 +8839,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("HorseID", c_ubyte),    #坐骑ID
+                  ("HorseID", c_int),    #坐骑ID
                   ("UseItemCnt", c_ubyte),    #消耗材料个数
                   ("IsAutoBuy", c_ubyte),    #是否自动购买
                   ]
@@ -8394,54 +8889,6 @@
 
 m_NAtagCMHorseUp=tagCMHorseUp()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseUp.Cmd,m_NAtagCMHorseUp.SubCmd))] = m_NAtagCMHorseUp
-
-
-#------------------------------------------------------
-# A5 5B 寻宝免费次数倒计时结束 #tagCMMagicTreasureFreeCnt
-
-class  tagCMMagicTreasureFreeCnt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x5B
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x5B
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMagicTreasureFreeCnt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 5B 寻宝免费次数倒计时结束 //tagCMMagicTreasureFreeCnt:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMMagicTreasureFreeCnt=tagCMMagicTreasureFreeCnt()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasureFreeCnt.Cmd,m_NAtagCMMagicTreasureFreeCnt.SubCmd))] = m_NAtagCMMagicTreasureFreeCnt
 
 
 #------------------------------------------------------
@@ -8501,21 +8948,20 @@
 
 
 #------------------------------------------------------
-#A5 21 抽取图鉴卡片#tagCMMonsterCardLottery
+# A5 16 法宝状态记录 #tagCMMagicWeaponState
 
-class  tagCMMonsterCardLottery(Structure):
+class  tagCMMagicWeaponState(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    #抽奖类型  0 普通 1 高级
-                  ("AutoBuy", c_ubyte),    #是否自动购买道具
+                  ("MWID", c_int),    #法宝ID
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA5
-        self.SubCmd = 0x21
+        self.SubCmd = 0x16
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -8525,35 +8971,84 @@
 
     def Clear(self):
         self.Cmd = 0xA5
-        self.SubCmd = 0x21
-        self.Type = 0
-        self.AutoBuy = 0
+        self.SubCmd = 0x16
+        self.MWID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMMonsterCardLottery)
+        return sizeof(tagCMMagicWeaponState)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A5 21 抽取图鉴卡片//tagCMMonsterCardLottery:
+        DumpString = '''// A5 16 法宝状态记录 //tagCMMagicWeaponState:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Type:%d,
-                                AutoBuy:%d
+                                MWID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Type,
-                                self.AutoBuy
+                                self.MWID
                                 )
         return DumpString
 
 
-m_NAtagCMMonsterCardLottery=tagCMMonsterCardLottery()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMonsterCardLottery.Cmd,m_NAtagCMMonsterCardLottery.SubCmd))] = m_NAtagCMMonsterCardLottery
+m_NAtagCMMagicWeaponState=tagCMMagicWeaponState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponState.Cmd,m_NAtagCMMagicWeaponState.SubCmd))] = m_NAtagCMMagicWeaponState
+
+
+#------------------------------------------------------
+# A5 15 提升法宝等级 #tagCMMagicWeaponUp
+
+class  tagCMMagicWeaponUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MWID", c_int),    #法宝ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x15
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x15
+        self.MWID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMagicWeaponUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 15 提升法宝等级 //tagCMMagicWeaponUp:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MWID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MWID
+                                )
+        return DumpString
+
+
+m_NAtagCMMagicWeaponUp=tagCMMagicWeaponUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicWeaponUp.Cmd,m_NAtagCMMagicWeaponUp.SubCmd))] = m_NAtagCMMagicWeaponUp
 
 
 #------------------------------------------------------
@@ -8720,7 +9215,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    #选择索引
+                  ("Index", c_int),    #选择索引
                   ]
 
     def __init__(self):
@@ -8762,54 +9257,6 @@
 
 m_NAtagPlayerChooseHorse=tagPlayerChooseHorse()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerChooseHorse.Cmd,m_NAtagPlayerChooseHorse.SubCmd))] = m_NAtagPlayerChooseHorse
-
-
-#------------------------------------------------------
-# A5 61 掷骰子 #tagCMPlayerDice
-
-class  tagCMPlayerDice(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x61
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x61
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMPlayerDice)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 61 掷骰子 //tagCMPlayerDice:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMPlayerDice=tagCMPlayerDice()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPlayerDice.Cmd,m_NAtagCMPlayerDice.SubCmd))] = m_NAtagCMPlayerDice
 
 
 #------------------------------------------------------
@@ -8947,65 +9394,9 @@
 
 
 #------------------------------------------------------
-#A5 3A    新符文系统符文升级#tagCMPropEnhanceLVUp
+# A5 14 祈福丹药 #tagCMPrayElixir
 
-class  tagCMPropEnhanceLVUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("index", c_ubyte),    #要升级的符文索引 (从0开始)
-                  ("count", c_ushort),    #连续升级次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x3A
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x3A
-        self.index = 0
-        self.count = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMPropEnhanceLVUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 3A    新符文系统符文升级//tagCMPropEnhanceLVUp:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                index:%d,
-                                count:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.index,
-                                self.count
-                                )
-        return DumpString
-
-
-m_NAtagCMPropEnhanceLVUp=tagCMPropEnhanceLVUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPropEnhanceLVUp.Cmd,m_NAtagCMPropEnhanceLVUp.SubCmd))] = m_NAtagCMPropEnhanceLVUp
-
-
-#------------------------------------------------------
-#A5 13 查询表情包开通状态#tagPyCMQueryFacePackage
-
-class  tagPyCMQueryFacePackage(Structure):
+class  tagCMPrayElixir(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
@@ -9015,7 +9406,7 @@
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA5
-        self.SubCmd = 0x13
+        self.SubCmd = 0x14
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9025,17 +9416,17 @@
 
     def Clear(self):
         self.Cmd = 0xA5
-        self.SubCmd = 0x13
+        self.SubCmd = 0x14
         return
 
     def GetLength(self):
-        return sizeof(tagPyCMQueryFacePackage)
+        return sizeof(tagCMPrayElixir)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A5 13 查询表情包开通状态//tagPyCMQueryFacePackage:
+        DumpString = '''// A5 14 祈福丹药 //tagCMPrayElixir:
                                 Cmd:%s,
                                 SubCmd:%s
                                 '''\
@@ -9046,8 +9437,8 @@
         return DumpString
 
 
-m_NAtagPyCMQueryFacePackage=tagPyCMQueryFacePackage()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyCMQueryFacePackage.Cmd,m_NAtagPyCMQueryFacePackage.SubCmd))] = m_NAtagPyCMQueryFacePackage
+m_NAtagCMPrayElixir=tagCMPrayElixir()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPrayElixir.Cmd,m_NAtagCMPrayElixir.SubCmd))] = m_NAtagCMPrayElixir
 
 
 #------------------------------------------------------
@@ -9144,54 +9535,6 @@
 
 m_NAtagCMQueryOnlinePrizeInfo=tagCMQueryOnlinePrizeInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryOnlinePrizeInfo.Cmd,m_NAtagCMQueryOnlinePrizeInfo.SubCmd))] = m_NAtagCMQueryOnlinePrizeInfo
-
-
-#------------------------------------------------------
-#A5 20 查询图鉴兑换点数#tagCMQueryPlayerMonsterCurrency
-
-class  tagCMQueryPlayerMonsterCurrency(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x20
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA5
-        self.SubCmd = 0x20
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMQueryPlayerMonsterCurrency)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A5 20 查询图鉴兑换点数//tagCMQueryPlayerMonsterCurrency:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMQueryPlayerMonsterCurrency=tagCMQueryPlayerMonsterCurrency()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryPlayerMonsterCurrency.Cmd,m_NAtagCMQueryPlayerMonsterCurrency.SubCmd))] = m_NAtagCMQueryPlayerMonsterCurrency
 
 
 #------------------------------------------------------
@@ -9534,7 +9877,9 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("TreasureNum", c_ubyte),    # 自定义的寻宝编号
+                  ("TreasureType", c_ubyte),    #寻宝类型
+                  ("TreasureIndex", c_ubyte),    #寻宝索引
+                  ("CostType", c_ubyte),    #消耗类型:0-默认仙玉;1-免费次数;2-寻宝道具
                   ]
 
     def __init__(self):
@@ -9551,7 +9896,9 @@
     def Clear(self):
         self.Cmd = 0xA5
         self.SubCmd = 0x68
-        self.TreasureNum = 0
+        self.TreasureType = 0
+        self.TreasureIndex = 0
+        self.CostType = 0
         return
 
     def GetLength(self):
@@ -9564,12 +9911,16 @@
         DumpString = '''// A5 68 请求寻宝 //tagCMRequestTreasure:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                TreasureNum:%d
+                                TreasureType:%d,
+                                TreasureIndex:%d,
+                                CostType:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.TreasureNum
+                                self.TreasureType,
+                                self.TreasureIndex,
+                                self.CostType
                                 )
         return DumpString
 
@@ -9896,21 +10247,19 @@
 
 
 #------------------------------------------------------
-#A5 33 开始魔方寻宝 #tagCMMagicTreasure
+# A5 11 试用首充武器 #tagCMTryFirstGoldItem
 
-class  tagCMMagicTreasure(Structure):
+class  tagCMTryFirstGoldItem(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    #寻宝类型 1玩家装备 2玩家首饰 3坐骑装备
-                  ("Count", c_ubyte),    #寻宝次数
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA5
-        self.SubCmd = 0x33
+        self.SubCmd = 0x11
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9920,35 +10269,29 @@
 
     def Clear(self):
         self.Cmd = 0xA5
-        self.SubCmd = 0x33
-        self.Type = 0
-        self.Count = 0
+        self.SubCmd = 0x11
         return
 
     def GetLength(self):
-        return sizeof(tagCMMagicTreasure)
+        return sizeof(tagCMTryFirstGoldItem)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A5 33 开始魔方寻宝 //tagCMMagicTreasure:
+        DumpString = '''// A5 11 试用首充武器 //tagCMTryFirstGoldItem:
                                 Cmd:%s,
-                                SubCmd:%s,
-                                Type:%d,
-                                Count:%d
+                                SubCmd:%s
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd,
-                                self.Type,
-                                self.Count
+                                self.SubCmd
                                 )
         return DumpString
 
 
-m_NAtagCMMagicTreasure=tagCMMagicTreasure()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMagicTreasure.Cmd,m_NAtagCMMagicTreasure.SubCmd))] = m_NAtagCMMagicTreasure
+m_NAtagCMTryFirstGoldItem=tagCMTryFirstGoldItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTryFirstGoldItem.Cmd,m_NAtagCMTryFirstGoldItem.SubCmd))] = m_NAtagCMTryFirstGoldItem
 
 
 #------------------------------------------------------
@@ -10001,6 +10344,58 @@
 
 m_NAtagCMUnLockBirthChartHole=tagCMUnLockBirthChartHole()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnLockBirthChartHole.Cmd,m_NAtagCMUnLockBirthChartHole.SubCmd))] = m_NAtagCMUnLockBirthChartHole
+
+
+#------------------------------------------------------
+# A5 13 解锁符印孔 #tagCMUnlockRuneHole
+
+class  tagCMUnlockRuneHole(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("HoleIndex", c_ubyte),    # 孔索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x13
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x13
+        self.HoleIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMUnlockRuneHole)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 13 解锁符印孔 //tagCMUnlockRuneHole:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                HoleIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.HoleIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMUnlockRuneHole=tagCMUnlockRuneHole()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnlockRuneHole.Cmd,m_NAtagCMUnlockRuneHole.SubCmd))] = m_NAtagCMUnlockRuneHole
 
 
 #------------------------------------------------------
@@ -10593,73 +10988,6 @@
 
 
 #------------------------------------------------------
-# A7 03 宠物精华分解 #tagCMPetAddClassExp
-
-class  tagCMPetAddClassExp(Structure):
-    Head = tagHead()
-    IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数
-    IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.IndexCnt):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.IndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x03
-        self.IndexCnt = 0
-        self.IndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2 * self.IndexCnt
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.IndexCnt)
-        for i in range(self.IndexCnt):
-            data = CommFunc.WriteWORD(data, self.IndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                IndexCnt:%d,
-                                IndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.IndexCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMPetAddClassExp=tagCMPetAddClassExp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetAddClassExp.Head.Cmd,m_NAtagCMPetAddClassExp.Head.SubCmd))] = m_NAtagCMPetAddClassExp
-
-
-#------------------------------------------------------
 # A7 04 宠物升阶 #tagCMPetClassUP
 
 class  tagCMPetClassUP(Structure):
@@ -10668,6 +10996,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("PetItemIndex", c_ubyte),    #宠物数据背包索引
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
                   ]
 
     def __init__(self):
@@ -10685,6 +11014,7 @@
         self.Cmd = 0xA7
         self.SubCmd = 0x04
         self.PetItemIndex = 0
+        self.UseItemCnt = 0
         return
 
     def GetLength(self):
@@ -10697,137 +11027,20 @@
         DumpString = '''// A7 04 宠物升阶 //tagCMPetClassUP:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PetItemIndex:%d
+                                PetItemIndex:%d,
+                                UseItemCnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PetItemIndex
+                                self.PetItemIndex,
+                                self.UseItemCnt
                                 )
         return DumpString
 
 
 m_NAtagCMPetClassUP=tagCMPetClassUP()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetClassUP.Cmd,m_NAtagCMPetClassUP.SubCmd))] = m_NAtagCMPetClassUP
-
-
-#------------------------------------------------------
-# A7 01 灵兽装备吸收 #tagCMPetEatEquip
-
-class  tagCMPetEatEquip(Structure):
-    Head = tagHead()
-    IndexCnt = 0    #(WORD IndexCnt)//被吞噬经验物品索引个数
-    IndexList = list()    #(vector<WORD> IndexList)// 被吞噬经验物品所在背包索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.IndexCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.IndexCnt):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.IndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA7
-        self.Head.SubCmd = 0x01
-        self.IndexCnt = 0
-        self.IndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2 * self.IndexCnt
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.IndexCnt)
-        for i in range(self.IndexCnt):
-            data = CommFunc.WriteWORD(data, self.IndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                IndexCnt:%d,
-                                IndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.IndexCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMPetEatEquip=tagCMPetEatEquip()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetEatEquip.Head.Cmd,m_NAtagCMPetEatEquip.Head.SubCmd))] = m_NAtagCMPetEatEquip
-
-
-#------------------------------------------------------
-# A7 05 宠物设置数据 #tagCMPetSeting
-
-class  tagCMPetSeting(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Seting", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA7
-        self.SubCmd = 0x05
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA7
-        self.SubCmd = 0x05
-        self.Seting = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMPetSeting)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A7 05 宠物设置数据 //tagCMPetSeting:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Seting:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Seting
-                                )
-        return DumpString
-
-
-m_NAtagCMPetSeting=tagCMPetSeting()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetSeting.Cmd,m_NAtagCMPetSeting.SubCmd))] = m_NAtagCMPetSeting
 
 
 #------------------------------------------------------
@@ -11307,21 +11520,20 @@
 
 
 #------------------------------------------------------
-#AB 13 嘉年华抽奖 #tagCMCarnivalDraw
+# AB 12 抢红包 #tagCMGrabFamilyRedPacket
 
-class  tagCMCarnivalDraw(Structure):
+class  tagCMGrabFamilyRedPacket(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    # 抽奖索引
-                  ("Type", c_ubyte),    # 抽奖类型 0:只获取结果,1:获取奖励,2:获取结果和奖励
+                  ("RedPaketID", c_int),    # 红包ID
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xAB
-        self.SubCmd = 0x13
+        self.SubCmd = 0x12
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -11331,35 +11543,32 @@
 
     def Clear(self):
         self.Cmd = 0xAB
-        self.SubCmd = 0x13
-        self.Index = 0
-        self.Type = 0
+        self.SubCmd = 0x12
+        self.RedPaketID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMCarnivalDraw)
+        return sizeof(tagCMGrabFamilyRedPacket)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//AB 13 嘉年华抽奖 //tagCMCarnivalDraw:
+        DumpString = '''// AB 12 抢红包 //tagCMGrabFamilyRedPacket:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Index:%d,
-                                Type:%d
+                                RedPaketID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Index,
-                                self.Type
+                                self.RedPaketID
                                 )
         return DumpString
 
 
-m_NAtagCMCarnivalDraw=tagCMCarnivalDraw()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCarnivalDraw.Cmd,m_NAtagCMCarnivalDraw.SubCmd))] = m_NAtagCMCarnivalDraw
+m_NAtagCMGrabFamilyRedPacket=tagCMGrabFamilyRedPacket()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGrabFamilyRedPacket.Cmd,m_NAtagCMGrabFamilyRedPacket.SubCmd))] = m_NAtagCMGrabFamilyRedPacket
 
 
 #------------------------------------------------------
@@ -11765,66 +11974,6 @@
 
 
 #------------------------------------------------------
-# AB 09 老虎机抽奖 #tagCMSlotsTake
-
-class  tagCMSlotsTake(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    # 老虎机类型
-                  ("Num", c_int),    # 抽奖次数
-                  ("IsAutoBuy", c_ubyte),    # 是否自动购买材料 0-否 1-是
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x09
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x09
-        self.Type = 0
-        self.Num = 0
-        self.IsAutoBuy = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMSlotsTake)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 09 老虎机抽奖 //tagCMSlotsTake:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Type:%d,
-                                Num:%d,
-                                IsAutoBuy:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Type,
-                                self.Num,
-                                self.IsAutoBuy
-                                )
-        return DumpString
-
-
-m_NAtagCMSlotsTake=tagCMSlotsTake()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSlotsTake.Cmd,m_NAtagCMSlotsTake.SubCmd))] = m_NAtagCMSlotsTake
-
-
-#------------------------------------------------------
 # AB 0C 摇骰子 #tagCMDiceEx
 
 class  tagCMDiceEx(Structure):
@@ -11874,54 +12023,6 @@
 
 m_NAtagCMDiceEx=tagCMDiceEx()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDiceEx.Cmd,m_NAtagCMDiceEx.SubCmd))] = m_NAtagCMDiceEx
-
-
-#------------------------------------------------------
-# AB 08 许愿 #tagCMWishingTree
-
-class  tagCMWishingTree(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x08
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x08
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMWishingTree)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 08 许愿 //tagCMWishingTree:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMWishingTree=tagCMWishingTree()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWishingTree.Cmd,m_NAtagCMWishingTree.SubCmd))] = m_NAtagCMWishingTree
 
 
 #------------------------------------------------------
@@ -12349,150 +12450,6 @@
 
 
 #------------------------------------------------------
-#B0 12 开始转转乐 #tagBeginGambling
-
-class  tagBeginGambling(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x12
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x12
-        return
-
-    def GetLength(self):
-        return sizeof(tagBeginGambling)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 12 开始转转乐 //tagBeginGambling:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagBeginGambling=tagBeginGambling()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagBeginGambling.Cmd,m_NAtagBeginGambling.SubCmd))] = m_NAtagBeginGambling
-
-
-#------------------------------------------------------
-#B0 13 转转乐商人升级 #tagGamblingMerchantLvUp
-
-class  tagGamblingMerchantLvUp(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x13
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x13
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingMerchantLvUp)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 13 转转乐商人升级 //tagGamblingMerchantLvUp:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagGamblingMerchantLvUp=tagGamblingMerchantLvUp()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingMerchantLvUp.Cmd,m_NAtagGamblingMerchantLvUp.SubCmd))] = m_NAtagGamblingMerchantLvUp
-
-
-#------------------------------------------------------
-#B0 14 转转乐换盘 #tagGamblingDiskChange
-
-class  tagGamblingDiskChange(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x14
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x14
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingDiskChange)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 14 转转乐换盘 //tagGamblingDiskChange:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagGamblingDiskChange=tagGamblingDiskChange()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingDiskChange.Cmd,m_NAtagGamblingDiskChange.SubCmd))] = m_NAtagGamblingDiskChange
-
-
-#------------------------------------------------------
 # B0 50 钓鱼收杆 #tagCMDoFish
 
 class  tagCMDoFish(Structure):
@@ -12785,6 +12742,54 @@
 
 
 #------------------------------------------------------
+# B1 04 客户端发送开始副本 #tagCMClientStartFB
+
+class  tagCMClientStartFB(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        self.SubCmd = 0x04
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB1
+        self.SubCmd = 0x04
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMClientStartFB)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 04 客户端发送开始副本 //tagCMClientStartFB:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMClientStartFB=tagCMClientStartFB()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMClientStartFB.Cmd,m_NAtagCMClientStartFB.SubCmd))] = m_NAtagCMClientStartFB
+
+
+#------------------------------------------------------
 # B1 02 领取多倍副本奖励 #tagCMGetMultiFBPrize
 
 class  tagCMGetMultiFBPrize(Structure):
@@ -12949,6 +12954,77 @@
 
 
 #------------------------------------------------------
+#B2 05 推送提醒设置 #tagCMPushNotificationsSetting
+
+class  tagCMPushNotificationsSetting(Structure):
+    Head = tagHead()
+    OnoffBit = 0    #(DWORD OnoffBit)// 按位约定开关
+    TimeLen = 0    #(BYTE TimeLen)
+    TimeStr = ""    #(String TimeStr)// 时间字符串  01:02-05:00
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OnoffBit,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x05
+        self.OnoffBit = 0
+        self.TimeLen = 0
+        self.TimeStr = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.TimeStr)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OnoffBit)
+        data = CommFunc.WriteBYTE(data, self.TimeLen)
+        data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OnoffBit:%d,
+                                TimeLen:%d,
+                                TimeStr:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OnoffBit,
+                                self.TimeLen,
+                                self.TimeStr
+                                )
+        return DumpString
+
+
+m_NAtagCMPushNotificationsSetting=tagCMPushNotificationsSetting()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPushNotificationsSetting.Head.Cmd,m_NAtagCMPushNotificationsSetting.Head.SubCmd))] = m_NAtagCMPushNotificationsSetting
+
+
+#------------------------------------------------------
 #B2 02 视野缩放 #tagCMSightZoom
 
 class  tagCMSightZoom(Structure):

--
Gitblit v1.8.0