From 53519c064001fe345843b306123cadbf3231e84c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 28 十二月 2020 10:38:01 +0800
Subject: [PATCH] 8678 【主干】【BT】GM工具:按跨服Boss分区查询;(LogInOut流向增加记录登录的地图及线路,跨服登录记录分区信息)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 4631 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 4,343 insertions(+), 288 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index d3f3dda..ba2b798 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -2121,6 +2121,58 @@
 
 
 #------------------------------------------------------
+# A4 0D 通知建盟次数 #tagGCServerCreatFamilyTimes
+
+class  tagGCServerCreatFamilyTimes(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Times", c_int),    #建盟次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA4
+        self.SubCmd = 0x0D
+        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 = 0x0D
+        self.Times = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCServerCreatFamilyTimes)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A4 0D 通知建盟次数 //tagGCServerCreatFamilyTimes:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Times:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Times
+                                )
+        return DumpString
+
+
+m_NAtagGCServerCreatFamilyTimes=tagGCServerCreatFamilyTimes()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCServerCreatFamilyTimes.Cmd,m_NAtagGCServerCreatFamilyTimes.SubCmd))] = m_NAtagGCServerCreatFamilyTimes
+
+
+#------------------------------------------------------
 #A4 01  查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo
 
 class  tagtMemberInfo(Structure):
@@ -2274,6 +2326,325 @@
 
 m_NAtagGCViewFamilyRequestInfo=tagGCViewFamilyRequestInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCViewFamilyRequestInfo.Head.Cmd,m_NAtagGCViewFamilyRequestInfo.Head.SubCmd))] = m_NAtagGCViewFamilyRequestInfo
+
+
+#------------------------------------------------------
+# A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
+
+class  tagGCArenaBattleRecord(Structure):
+    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
+    AddScoreLen = 0    #(BYTE AddScoreLen)
+    AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
+    IsWin = 0    #(BYTE IsWin)//是否获胜
+    Time = 0    #(DWORD Time)//时间戳
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen)
+        self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.AddScoreLen = 0
+        self.AddScore = ""
+        self.IsWin = 0
+        self.Time = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 1
+        length += len(self.AddScore)
+        length += 1
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteBYTE(data, self.AddScoreLen)
+        data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore)
+        data = CommFunc.WriteBYTE(data, self.IsWin)
+        data = CommFunc.WriteDWORD(data, self.Time)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                AddScoreLen:%d,
+                                AddScore:%s,
+                                IsWin:%d,
+                                Time:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.AddScoreLen,
+                                self.AddScore,
+                                self.IsWin,
+                                self.Time
+                                )
+        return DumpString
+
+
+class  tagGCArenaBattleRecordList(Structure):
+    Head = tagHead()
+    RecordCount = 0    #(BYTE RecordCount)
+    BattleRecordList = list()    #(vector<tagGCArenaBattleRecord> BattleRecordList)// 对战列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x23
+        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):
+            temBattleRecordList = tagGCArenaBattleRecord()
+            _pos = temBattleRecordList.ReadData(_lpData, _pos)
+            self.BattleRecordList.append(temBattleRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x23
+        self.RecordCount = 0
+        self.BattleRecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.BattleRecordList[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.BattleRecordList[i].GetLength(), self.BattleRecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCount:%d,
+                                BattleRecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCArenaBattleRecordList=tagGCArenaBattleRecordList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattleRecordList.Head.Cmd,m_NAtagGCArenaBattleRecordList.Head.SubCmd))] = m_NAtagGCArenaBattleRecordList
+
+
+#------------------------------------------------------
+# A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList
+
+class  tagGCArenaMatchInfo(Structure):
+    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.Score = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                Score:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.Score
+                                )
+        return DumpString
+
+
+class  tagGCArenaMatchList(Structure):
+    Head = tagHead()
+    MatchCount = 0    #(BYTE MatchCount)
+    MatchList = list()    #(vector<tagGCArenaMatchInfo> MatchList)// 匹配列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x22
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MatchCount):
+            temMatchList = tagGCArenaMatchInfo()
+            _pos = temMatchList.ReadData(_lpData, _pos)
+            self.MatchList.append(temMatchList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x22
+        self.MatchCount = 0
+        self.MatchList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.MatchCount):
+            length += self.MatchList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.MatchCount)
+        for i in range(self.MatchCount):
+            data = CommFunc.WriteString(data, self.MatchList[i].GetLength(), self.MatchList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MatchCount:%d,
+                                MatchList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MatchCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCArenaMatchList=tagGCArenaMatchList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaMatchList.Head.Cmd,m_NAtagGCArenaMatchList.Head.SubCmd))] = m_NAtagGCArenaMatchList
 
 
 #------------------------------------------------------
@@ -3371,6 +3742,190 @@
 
 
 #------------------------------------------------------
+# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo
+
+class  tagGCNotifyEquipClassEquip(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("Star", 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.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCNotifyEquipClassEquip)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo:
+                                ItemID:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagGCNotifyEquipDetailInfo(Structure):
+    Head = tagHead()
+    ItemGUID = ""    #(char ItemGUID[40])
+    ItemID = 0    #(DWORD ItemID)
+    Star = 0    #(BYTE Star)//星级
+    PlusLV = 0    #(WORD PlusLV)//强化等级
+    EvolveLV = 0    #(BYTE EvolveLV)//进化等级
+    WashLV = 0    #(BYTE WashLV)//洗练等级
+    WashValueCount = 0    #(BYTE WashValueCount)
+    WashValueList = list()    #(vector<WORD> WashValueList)//洗练值
+    StoneIDCount = 0    #(BYTE StoneIDCount)
+    StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
+    ClassEquipCount = 0    #(BYTE ClassEquipCount)
+    ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.WashValueCount):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.WashValueList.append(value)
+        self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.StoneIDCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.StoneIDList.append(value)
+        self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ClassEquipCount):
+            temClassEquipList = tagGCNotifyEquipClassEquip()
+            _pos = temClassEquipList.ReadData(_lpData, _pos)
+            self.ClassEquipList.append(temClassEquipList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x05
+        self.ItemGUID = ""
+        self.ItemID = 0
+        self.Star = 0
+        self.PlusLV = 0
+        self.EvolveLV = 0
+        self.WashLV = 0
+        self.WashValueCount = 0
+        self.WashValueList = list()
+        self.StoneIDCount = 0
+        self.StoneIDList = list()
+        self.ClassEquipCount = 0
+        self.ClassEquipList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+        length += 4
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        length += 1
+        length += 2 * self.WashValueCount
+        length += 1
+        length += 4 * self.StoneIDCount
+        length += 1
+        for i in range(self.ClassEquipCount):
+            length += self.ClassEquipList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteBYTE(data, self.Star)
+        data = CommFunc.WriteWORD(data, self.PlusLV)
+        data = CommFunc.WriteBYTE(data, self.EvolveLV)
+        data = CommFunc.WriteBYTE(data, self.WashLV)
+        data = CommFunc.WriteBYTE(data, self.WashValueCount)
+        for i in range(self.WashValueCount):
+            data = CommFunc.WriteWORD(data, self.WashValueList[i])
+        data = CommFunc.WriteBYTE(data, self.StoneIDCount)
+        for i in range(self.StoneIDCount):
+            data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
+        data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
+        for i in range(self.ClassEquipCount):
+            data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemGUID:%s,
+                                ItemID:%d,
+                                Star:%d,
+                                PlusLV:%d,
+                                EvolveLV:%d,
+                                WashLV:%d,
+                                WashValueCount:%d,
+                                WashValueList:%s,
+                                StoneIDCount:%d,
+                                StoneIDList:%s,
+                                ClassEquipCount:%d,
+                                ClassEquipList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemGUID,
+                                self.ItemID,
+                                self.Star,
+                                self.PlusLV,
+                                self.EvolveLV,
+                                self.WashLV,
+                                self.WashValueCount,
+                                "...",
+                                self.StoneIDCount,
+                                "...",
+                                self.ClassEquipCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
+
+
+#------------------------------------------------------
 #A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount
 
 class  tagGCOpenServerCampaignAwardCount(Structure):
@@ -4457,7 +5012,8 @@
                   ("SubCmd", c_ubyte),
                   ("Point", c_int),    # 复活点数
                   ("TotalPoint", c_int),    # 复活总点数
-                  ("RebornCnt", c_ushort),    # 复活次数
+                  ("RebornCnt", c_ushort),    # 今日已复活次数
+                  ("TotalRebornCnt", c_ushort),    # 每日可复活总次数,0为不限制
                   ]
 
     def __init__(self):
@@ -4477,6 +5033,7 @@
         self.Point = 0
         self.TotalPoint = 0
         self.RebornCnt = 0
+        self.TotalRebornCnt = 0
         return
 
     def GetLength(self):
@@ -4491,14 +5048,16 @@
                                 SubCmd:%s,
                                 Point:%d,
                                 TotalPoint:%d,
-                                RebornCnt:%d
+                                RebornCnt:%d,
+                                TotalRebornCnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.Point,
                                 self.TotalPoint,
-                                self.RebornCnt
+                                self.RebornCnt,
+                                self.TotalRebornCnt
                                 )
         return DumpString
 
@@ -4590,6 +5149,58 @@
 
 m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo
+
+
+#------------------------------------------------------
+# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo
+
+class  tagGCFamilyWarInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("WorldLV", c_ushort),    # 当前进行中的联赛世界等级
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        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 = 0xAC
+        self.SubCmd = 0x01
+        self.WorldLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyWarInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                WorldLV:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.WorldLV
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo
 
 
 #------------------------------------------------------
@@ -5490,6 +6101,427 @@
 
 
 #------------------------------------------------------
+# B0 01 新增协助 #tagGCAssistInfoList
+
+class  tagGCAssistInfo(Structure):
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(BYTE RealmLV)//境界
+    MapID = 0    #(DWORD MapID)
+    LineID = 0    #(DWORD LineID)
+    NPCID = 0    #(DWORD NPCID)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        return _pos
+
+    def Clear(self):
+        self.AssistGUID = ""
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteDWORD(data, self.LineID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AssistGUID:%s,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s
+                                '''\
+                                %(
+                                self.AssistGUID,
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData
+                                )
+        return DumpString
+
+
+class  tagGCAssistInfoList(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    AssistInfoList = list()    #(vector<tagGCAssistInfo> AssistInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        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):
+            temAssistInfoList = tagGCAssistInfo()
+            _pos = temAssistInfoList.ReadData(_lpData, _pos)
+            self.AssistInfoList.append(temAssistInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x01
+        self.Count = 0
+        self.AssistInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.AssistInfoList[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.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                AssistInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistInfoList=tagGCAssistInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
+
+
+#------------------------------------------------------
+# B0 03 正在进行中的协助 #tagGCAssistingInfo
+
+class  tagGCAssistingInfo(Structure):
+    Head = tagHead()
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x03
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistingInfo=tagGCAssistingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo
+
+
+#------------------------------------------------------
+# B0 08 协助结束 #tagGCAssistOver
+
+class  tagGCAssistOver(Structure):
+    Head = tagHead()
+    IsTagPlayerReason = 0    #(BYTE IsTagPlayerReason)//是否发布方原因
+    ReasonLen = 0    #(BYTE ReasonLen)
+    Reason = ""    #(String Reason)//原因
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.IsTagPlayerReason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ReasonLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Reason,_pos = CommFunc.ReadString(_lpData, _pos,self.ReasonLen)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x08
+        self.IsTagPlayerReason = 0
+        self.ReasonLen = 0
+        self.Reason = ""
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.Reason)
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsTagPlayerReason)
+        data = CommFunc.WriteBYTE(data, self.ReasonLen)
+        data = CommFunc.WriteString(data, self.ReasonLen, self.Reason)
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                IsTagPlayerReason:%d,
+                                ReasonLen:%d,
+                                Reason:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.IsTagPlayerReason,
+                                self.ReasonLen,
+                                self.Reason,
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistOver=tagGCAssistOver()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistOver.Head.Cmd,m_NAtagGCAssistOver.Head.SubCmd))] = m_NAtagGCAssistOver
+
+
+#------------------------------------------------------
+# B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount
+
+class  tagGCCanGetAssistThanksGiftCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CanGetCount", c_ubyte),    
+                  ]
+
+    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.CanGetCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCanGetAssistThanksGiftCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CanGetCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CanGetCount
+                                )
+        return DumpString
+
+
+m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount
+
+
+#------------------------------------------------------
+# B0 02 删除协助 #tagGCClearAssist
+
+class  tagGCClearAssist(Structure):
+    Head = tagHead()
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x02
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCClearAssist=tagGCClearAssist()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
+
+
+#------------------------------------------------------
 #B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
 
 class  tagFamilyArrestOverState(Structure):
@@ -5615,6 +6647,324 @@
 
 m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo
+
+
+#------------------------------------------------------
+# B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
+
+class  tagGCGetAssistThanksGiftPreview(Structure):
+    Head = tagHead()
+    ItemID = 0    #(DWORD ItemID)//礼盒ID
+    PlayerID = 0    #(DWORD PlayerID)//发起玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    RealmLV = 0    #(BYTE RealmLV)//境界
+    MapID = 0    #(DWORD MapID)
+    LineID = 0    #(DWORD LineID)
+    NPCID = 0    #(DWORD NPCID)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    TimeStr = ""    #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss
+    ExtraAward = 0    #(BYTE ExtraAward)//是否有额外奖励
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x05
+        self.ItemID = 0
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        self.TimeStr = ""
+        self.ExtraAward = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+        length += 19
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteDWORD(data, self.LineID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        data = CommFunc.WriteString(data, 19, self.TimeStr)
+        data = CommFunc.WriteBYTE(data, self.ExtraAward)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemID:%d,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s,
+                                TimeStr:%s,
+                                ExtraAward:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemID,
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData,
+                                self.TimeStr,
+                                self.ExtraAward
+                                )
+        return DumpString
+
+
+m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview
+
+
+#------------------------------------------------------
+# B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
+
+class  tagGCAssistPlayerInfo(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    RealmLV = 0    #(BYTE RealmLV)//境界
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV
+                                )
+        return DumpString
+
+
+class  tagGCUseAssistThanksGiftPreview(Structure):
+    Head = tagHead()
+    ItemID = 0    #(DWORD ItemID)//礼盒ID
+    MapID = 0    #(DWORD MapID)
+    LineID = 0    #(DWORD LineID)
+    NPCID = 0    #(DWORD NPCID)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    AssistPlayerCount = 0    #(BYTE AssistPlayerCount)
+    AssistPlayerList = list()    #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AssistPlayerCount):
+            temAssistPlayerList = tagGCAssistPlayerInfo()
+            _pos = temAssistPlayerList.ReadData(_lpData, _pos)
+            self.AssistPlayerList.append(temAssistPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x04
+        self.ItemID = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        self.AssistPlayerCount = 0
+        self.AssistPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+        length += 1
+        for i in range(self.AssistPlayerCount):
+            length += self.AssistPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteDWORD(data, self.LineID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        data = CommFunc.WriteBYTE(data, self.AssistPlayerCount)
+        for i in range(self.AssistPlayerCount):
+            data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemID:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s,
+                                AssistPlayerCount:%d,
+                                AssistPlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemID,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData,
+                                self.AssistPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
 
 
 #------------------------------------------------------
@@ -6485,6 +7835,162 @@
 
 
 #------------------------------------------------------
+# B3 11 聊天缓存通知 #tagGCTalkCache
+
+class  tagGCTalkCacheInfo(Structure):
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)//size = SrcNameLen
+    PlayerID = 0    #(DWORD PlayerID)
+    Time = 0    #(DWORD Time)
+    Len = 0    #(WORD Len)
+    Content = ""    #(String Content)//size = Len
+    Extras = ""    #(char Extras[256])//附加值列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Content,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
+        self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
+        return _pos
+
+    def Clear(self):
+        self.ChannelType = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.PlayerID = 0
+        self.Time = 0
+        self.Len = 0
+        self.Content = ""
+        self.Extras = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += len(self.Name)
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.Content)
+        length += 256
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.ChannelType)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteDWORD(data, self.Time)
+        data = CommFunc.WriteWORD(data, self.Len)
+        data = CommFunc.WriteString(data, self.Len, self.Content)
+        data = CommFunc.WriteString(data, 256, self.Extras)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ChannelType:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                PlayerID:%d,
+                                Time:%d,
+                                Len:%d,
+                                Content:%s,
+                                Extras:%s
+                                '''\
+                                %(
+                                self.ChannelType,
+                                self.NameLen,
+                                self.Name,
+                                self.PlayerID,
+                                self.Time,
+                                self.Len,
+                                self.Content,
+                                self.Extras
+                                )
+        return DumpString
+
+
+class  tagGCTalkCache(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)
+    InfoList = list()    #(vector<tagGCTalkCacheInfo> InfoList)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x11
+        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):
+            temInfoList = tagGCTalkCacheInfo()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x11
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        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.WriteWORD(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_NAtagGCTalkCache=tagGCTalkCache()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTalkCache.Head.Cmd,m_NAtagGCTalkCache.Head.SubCmd))] = m_NAtagGCTalkCache
+
+
+#------------------------------------------------------
 # B5 04 拍卖行新上架拍品 #tagGCAddAuctionItemInfo
 
 class  tagGCAddAuctionItem(Structure):
@@ -7342,6 +8848,74 @@
 
 m_NAtagGCClearAuctionItemInfo=tagGCClearAuctionItemInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAuctionItemInfo.Head.Cmd,m_NAtagGCClearAuctionItemInfo.Head.SubCmd))] = m_NAtagGCClearAuctionItemInfo
+
+
+#------------------------------------------------------
+# B5 11 部位升星自动购买拍品消耗信息 #tagGCEquipStarAutoBuyCostInfo
+
+class  tagGCEquipStarAutoBuyCostInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ClassLV", c_ubyte),    # 当前要升星的境界阶
+                  ("EquipPlace", c_ubyte),    #当前要升星的装备位
+                  ("CurStar", c_ubyte),    #当前星级
+                  ("CurRate", c_ubyte),    #当前自动购买后的总概率,不满100则代表拍品库存不足
+                  ("AutoBuyCostMoney", c_int),    #自动购买所需总消耗
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB5
+        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 = 0xB5
+        self.SubCmd = 0x11
+        self.ClassLV = 0
+        self.EquipPlace = 0
+        self.CurStar = 0
+        self.CurRate = 0
+        self.AutoBuyCostMoney = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCEquipStarAutoBuyCostInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B5 11 部位升星自动购买拍品消耗信息 //tagGCEquipStarAutoBuyCostInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ClassLV:%d,
+                                EquipPlace:%d,
+                                CurStar:%d,
+                                CurRate:%d,
+                                AutoBuyCostMoney:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ClassLV,
+                                self.EquipPlace,
+                                self.CurStar,
+                                self.CurRate,
+                                self.AutoBuyCostMoney
+                                )
+        return DumpString
+
+
+m_NAtagGCEquipStarAutoBuyCostInfo=tagGCEquipStarAutoBuyCostInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEquipStarAutoBuyCostInfo.Cmd,m_NAtagGCEquipStarAutoBuyCostInfo.SubCmd))] = m_NAtagGCEquipStarAutoBuyCostInfo
 
 
 #------------------------------------------------------
@@ -10241,6 +11815,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("IsRobot", c_ubyte),    # 是否匹配机器人
                   ]
 
     def __init__(self):
@@ -10257,6 +11832,7 @@
     def Clear(self):
         self.Cmd = 0xC0
         self.SubCmd = 0x02
+        self.IsRobot = 0
         return
 
     def GetLength(self):
@@ -10268,11 +11844,13 @@
     def OutputString(self):
         DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch:
                                 Cmd:%s,
-                                SubCmd:%s
+                                SubCmd:%s,
+                                IsRobot:%d
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd
+                                self.SubCmd,
+                                self.IsRobot
                                 )
         return DumpString
 
@@ -12294,6 +13872,74 @@
 
 
 #------------------------------------------------------
+# A3 C3 竞技场玩家信息 #tagMCArenaPlayerInfo
+
+class  tagMCArenaPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsReset", c_ubyte),    #是否是重置的
+                  ("Score", c_int),    #当前积分
+                  ("BattleCountToday", c_ubyte),    #今日已挑战次数
+                  ("MatchRefreshCount", c_ubyte),    #当前已刷新匹配列表次数,每次挑战后会重置
+                  ("ItemAddBattleCountToday", c_ubyte),    #今日已使用物品增加的挑战次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        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 = 0xA3
+        self.SubCmd = 0xC3
+        self.IsReset = 0
+        self.Score = 0
+        self.BattleCountToday = 0
+        self.MatchRefreshCount = 0
+        self.ItemAddBattleCountToday = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCArenaPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 C3 竞技场玩家信息 //tagMCArenaPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsReset:%d,
+                                Score:%d,
+                                BattleCountToday:%d,
+                                MatchRefreshCount:%d,
+                                ItemAddBattleCountToday:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsReset,
+                                self.Score,
+                                self.BattleCountToday,
+                                self.MatchRefreshCount,
+                                self.ItemAddBattleCountToday
+                                )
+        return DumpString
+
+
+m_NAtagMCArenaPlayerInfo=tagMCArenaPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCArenaPlayerInfo.Cmd,m_NAtagMCArenaPlayerInfo.SubCmd))] = m_NAtagMCArenaPlayerInfo
+
+
+#------------------------------------------------------
 # A3 0F 通知玩家悬赏任务信息 #tagMCArrestTaskInfo
 
 class  tagMCArrestTaskInfo(Structure):
@@ -12389,7 +14035,8 @@
     _fields_ = [
                   ("ItemID", c_int),    #果实物品ID
                   ("EatCnt", c_ushort),    #已使用个数
-                  ("AddItemCnt", c_int),    #增幅丹使用个数
+                  ("ItemAddCnt", c_int),    #增幅丹增加上限
+                  ("ItemBreakCnt", c_int),    #增幅丹突破次数
                   ]
 
     def __init__(self):
@@ -12404,7 +14051,8 @@
     def Clear(self):
         self.ItemID = 0
         self.EatCnt = 0
-        self.AddItemCnt = 0
+        self.ItemAddCnt = 0
+        self.ItemBreakCnt = 0
         return
 
     def GetLength(self):
@@ -12417,12 +14065,14 @@
         DumpString = '''// A3 39 玩家属性果实已使用个数信息//tagMCAttrFruitEatCntList:
                                 ItemID:%d,
                                 EatCnt:%d,
-                                AddItemCnt:%d
+                                ItemAddCnt:%d,
+                                ItemBreakCnt:%d
                                 '''\
                                 %(
                                 self.ItemID,
                                 self.EatCnt,
-                                self.AddItemCnt
+                                self.ItemAddCnt,
+                                self.ItemBreakCnt
                                 )
         return DumpString
 
@@ -12558,6 +14208,7 @@
                   ("BossType", c_ubyte),    #编号类型0-世界boss 1-boss之家
                   ("KillCnt", c_int),    #击杀次数
                   ("ItemAddCnt", c_int),    #物品增加次数
+                  ("BuyCnt", c_ubyte),    #购买次数
                   ]
 
     def __init__(self):
@@ -12573,6 +14224,7 @@
         self.BossType = 0
         self.KillCnt = 0
         self.ItemAddCnt = 0
+        self.BuyCnt = 0
         return
 
     def GetLength(self):
@@ -12585,12 +14237,14 @@
         DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt:
                                 BossType:%d,
                                 KillCnt:%d,
-                                ItemAddCnt:%d
+                                ItemAddCnt:%d,
+                                BuyCnt:%d
                                 '''\
                                 %(
                                 self.BossType,
                                 self.KillCnt,
-                                self.ItemAddCnt
+                                self.ItemAddCnt,
+                                self.BuyCnt
                                 )
         return DumpString
 
@@ -13577,6 +15231,73 @@
 
 m_NAtagMCEquipPartStarInfo=tagMCEquipPartStarInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarInfo.Head.Cmd,m_NAtagMCEquipPartStarInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarInfo
+
+
+#------------------------------------------------------
+# A3 B2 装备部位星级套装激活信息 #tagMCEquipPartSuiteActivateInfo
+
+class  tagMCEquipPartSuiteActivateInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    SuiteActivateStateInfo = list()    #(vector<DWORD> SuiteActivateStateInfo)//激活状态值列表,每个数按位存31个激活索引,每个位代表对应的激活索引是否已激活
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xB2
+        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.SuiteActivateStateInfo.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xB2
+        self.Count = 0
+        self.SuiteActivateStateInfo = 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.SuiteActivateStateInfo[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                SuiteActivateStateInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCEquipPartSuiteActivateInfo=tagMCEquipPartSuiteActivateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartSuiteActivateInfo.Head.Cmd,m_NAtagMCEquipPartSuiteActivateInfo.Head.SubCmd))] = m_NAtagMCEquipPartSuiteActivateInfo
 
 
 #------------------------------------------------------
@@ -14993,6 +16714,178 @@
 
 
 #------------------------------------------------------
+# A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
+
+class  tagMCHistoryReChargeAwardRecord(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("AwardGetRecord", c_int),    # 按二进制位标示领取记录 配置奖励ID代表第几位
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        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 = 0xA3
+        self.SubCmd = 0x28
+        self.AwardGetRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCHistoryReChargeAwardRecord)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 28 历史累积充值奖励领取记录 //tagMCHistoryReChargeAwardRecord:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                AwardGetRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.AwardGetRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCHistoryReChargeAwardRecord=tagMCHistoryReChargeAwardRecord()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHistoryReChargeAwardRecord.Cmd,m_NAtagMCHistoryReChargeAwardRecord.SubCmd))] = m_NAtagMCHistoryReChargeAwardRecord
+
+
+#------------------------------------------------------
+# A3 12 通知骑宠觉醒信息 #tagMCHorsePetSkinData
+
+class  tagMCHorsePetSkinInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Type", c_ubyte),    # 1-坐骑 2-灵宠
+                  ("ID", c_int),    # 对应坐骑表灵宠表ID
+                  ("Exp", c_int),    #经验
+                  ("SkinLV", c_ubyte),    #觉醒等级
+                  ("SkinIndex", 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.Type = 0
+        self.ID = 0
+        self.Exp = 0
+        self.SkinLV = 0
+        self.SkinIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCHorsePetSkinInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 12 通知骑宠觉醒信息 //tagMCHorsePetSkinData:
+                                Type:%d,
+                                ID:%d,
+                                Exp:%d,
+                                SkinLV:%d,
+                                SkinIndex:%d
+                                '''\
+                                %(
+                                self.Type,
+                                self.ID,
+                                self.Exp,
+                                self.SkinLV,
+                                self.SkinIndex
+                                )
+        return DumpString
+
+
+class  tagMCHorsePetSkinData(Structure):
+    Head = tagHead()
+    Num = 0    #(BYTE Num)//个数
+    InfoList = list()    #(vector<tagMCHorsePetSkinInfo> InfoList)// 数据列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Num):
+            temInfoList = tagMCHorsePetSkinInfo()
+            _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 = 0x12
+        self.Num = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Num):
+            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.Num)
+        for i in range(self.Num):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Num:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Num,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCHorsePetSkinData=tagMCHorsePetSkinData()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorsePetSkinData.Head.Cmd,m_NAtagMCHorsePetSkinData.Head.SubCmd))] = m_NAtagMCHorsePetSkinData
+
+
+#------------------------------------------------------
 # A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo
 
 class  tagMCMagicWeaponInfo(Structure):
@@ -15166,6 +17059,114 @@
 
 m_NAtagMCGreatMasterExp=tagMCGreatMasterExp()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGreatMasterExp.Cmd,m_NAtagMCGreatMasterExp.SubCmd))] = m_NAtagMCGreatMasterExp
+
+
+#------------------------------------------------------
+# A3 C2 大师强化等级激活信息 #tagMCMasterPlusLVInfo
+
+class  tagMCMasterPlusLV(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ClassLV", c_ubyte),    
+                  ("MasterPlusLV", 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.ClassLV = 0
+        self.MasterPlusLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMasterPlusLV)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 C2 大师强化等级激活信息 //tagMCMasterPlusLVInfo:
+                                ClassLV:%d,
+                                MasterPlusLV:%d
+                                '''\
+                                %(
+                                self.ClassLV,
+                                self.MasterPlusLV
+                                )
+        return DumpString
+
+
+class  tagMCMasterPlusLVInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 信息个数
+    MasterPlusLVInfoList = list()    #(vector<tagMCMasterPlusLV> MasterPlusLVInfoList)// 信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC2
+        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):
+            temMasterPlusLVInfoList = tagMCMasterPlusLV()
+            _pos = temMasterPlusLVInfoList.ReadData(_lpData, _pos)
+            self.MasterPlusLVInfoList.append(temMasterPlusLVInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC2
+        self.Count = 0
+        self.MasterPlusLVInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.MasterPlusLVInfoList[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.MasterPlusLVInfoList[i].GetLength(), self.MasterPlusLVInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                MasterPlusLVInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCMasterPlusLVInfo=tagMCMasterPlusLVInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMasterPlusLVInfo.Head.Cmd,m_NAtagMCMasterPlusLVInfo.Head.SubCmd))] = m_NAtagMCMasterPlusLVInfo
 
 
 #------------------------------------------------------
@@ -15529,6 +17530,114 @@
 
 m_NAtagMCModuleFightPowerInfo=tagMCModuleFightPowerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCModuleFightPowerInfo.Head.Cmd,m_NAtagMCModuleFightPowerInfo.Head.SubCmd))] = m_NAtagMCModuleFightPowerInfo
+
+
+#------------------------------------------------------
+# A3 25 NPC已攻击次数信息 #tagMCNPCAttackCountInfo
+
+class  tagMCNPCAttackCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NPCID", c_int),    
+                  ("AttackCount", 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.NPCID = 0
+        self.AttackCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCNPCAttackCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 25 NPC已攻击次数信息 //tagMCNPCAttackCountInfo:
+                                NPCID:%d,
+                                AttackCount:%d
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.AttackCount
+                                )
+        return DumpString
+
+
+class  tagMCNPCAttackCountInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    NPCAttackCountList = list()    #(vector<tagMCNPCAttackCount> NPCAttackCountList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x25
+        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):
+            temNPCAttackCountList = tagMCNPCAttackCount()
+            _pos = temNPCAttackCountList.ReadData(_lpData, _pos)
+            self.NPCAttackCountList.append(temNPCAttackCountList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x25
+        self.Count = 0
+        self.NPCAttackCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.NPCAttackCountList[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.NPCAttackCountList[i].GetLength(), self.NPCAttackCountList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                NPCAttackCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCNPCAttackCountInfo=tagMCNPCAttackCountInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCAttackCountInfo.Head.Cmd,m_NAtagMCNPCAttackCountInfo.Head.SubCmd))] = m_NAtagMCNPCAttackCountInfo
 
 
 #------------------------------------------------------
@@ -16169,6 +18278,7 @@
     _fields_ = [
                   ("AlchemyID", c_int),    # 丹 ID
                   ("StartTime", c_int),    # 开始炼的时间 
+                  ("AlchemyTimes", c_ushort),    # 炼的次数
                   ]
 
     def __init__(self):
@@ -16183,6 +18293,7 @@
     def Clear(self):
         self.AlchemyID = 0
         self.StartTime = 0
+        self.AlchemyTimes = 0
         return
 
     def GetLength(self):
@@ -16194,11 +18305,13 @@
     def OutputString(self):
         DumpString = '''// A3 BF 通知客户端炼丹炉信息 //tagMCPlayerStoveMsg:
                                 AlchemyID:%d,
-                                StartTime:%d
+                                StartTime:%d,
+                                AlchemyTimes:%d
                                 '''\
                                 %(
                                 self.AlchemyID,
-                                self.StartTime
+                                self.StartTime,
+                                self.AlchemyTimes
                                 )
         return DumpString
 
@@ -16208,7 +18321,7 @@
     StoveLV = 0    #(BYTE StoveLV)// 炼丹炉等级
     StoveExp = 0    #(DWORD StoveExp)// 炼丹炉经验
     ItemID = 0    #(DWORD ItemID)// 合成物品id
-    ItemCnt = 0    #(BYTE ItemCnt)// 丹药数量
+    ItemCnt = 0    #(WORD ItemCnt)// 丹药数量
     StoveCnt = 0    #(WORD StoveCnt)// 丹药数量
     InfoList = list()    #(vector<tagMCPlayerStoveInfo> InfoList)
     data = None
@@ -16225,7 +18338,7 @@
         self.StoveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.StoveExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.StoveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         for i in range(self.StoveCnt):
             temInfoList = tagMCPlayerStoveInfo()
@@ -16252,7 +18365,7 @@
         length += 1
         length += 4
         length += 4
-        length += 1
+        length += 2
         length += 2
         for i in range(self.StoveCnt):
             length += self.InfoList[i].GetLength()
@@ -16265,7 +18378,7 @@
         data = CommFunc.WriteBYTE(data, self.StoveLV)
         data = CommFunc.WriteDWORD(data, self.StoveExp)
         data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteBYTE(data, self.ItemCnt)
+        data = CommFunc.WriteWORD(data, self.ItemCnt)
         data = CommFunc.WriteWORD(data, self.StoveCnt)
         for i in range(self.StoveCnt):
             data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
@@ -16362,6 +18475,8 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("BeginTime", c_int),    #开始计时时间
+                  ("BuffTime", c_int),    #buff剩余时间
+                  ("BuffAddRate", c_int),    #buff加成万分率
                   ("CurExp", c_int),    #当前总经验
                   ("CurExpPoint", c_int),    #当前总经验点
                   ]
@@ -16381,6 +18496,8 @@
         self.Cmd = 0xA3
         self.SubCmd = 0x27
         self.BeginTime = 0
+        self.BuffTime = 0
+        self.BuffAddRate = 0
         self.CurExp = 0
         self.CurExpPoint = 0
         return
@@ -16396,6 +18513,8 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 BeginTime:%d,
+                                BuffTime:%d,
+                                BuffAddRate:%d,
                                 CurExp:%d,
                                 CurExpPoint:%d
                                 '''\
@@ -16403,6 +18522,8 @@
                                 self.Cmd,
                                 self.SubCmd,
                                 self.BeginTime,
+                                self.BuffTime,
+                                self.BuffAddRate,
                                 self.CurExp,
                                 self.CurExpPoint
                                 )
@@ -16424,6 +18545,7 @@
                   ("ExtraCnt", c_ubyte),    # VIP额外次数
                   ("ExtraData", c_ubyte),    # 额外参数1
                   ("ExtraData2", c_ubyte),    # 额外参数2
+                  ("HaveRecover", c_ubyte),    # 已找回 1-全部已找回 2-非VIP已找回
                   ]
 
     def __init__(self):
@@ -16441,6 +18563,7 @@
         self.ExtraCnt = 0
         self.ExtraData = 0
         self.ExtraData2 = 0
+        self.HaveRecover = 0
         return
 
     def GetLength(self):
@@ -16455,14 +18578,16 @@
                                 RecoverCnt:%d,
                                 ExtraCnt:%d,
                                 ExtraData:%d,
-                                ExtraData2:%d
+                                ExtraData2:%d,
+                                HaveRecover:%d
                                 '''\
                                 %(
                                 self.Index,
                                 self.RecoverCnt,
                                 self.ExtraCnt,
                                 self.ExtraData,
-                                self.ExtraData2
+                                self.ExtraData2,
+                                self.HaveRecover
                                 )
         return DumpString
 
@@ -16664,6 +18789,178 @@
 
 
 #------------------------------------------------------
+# A3 09 技能五行专精信息 #tagMCSkillElementInfo
+
+class  tagMCSkillElementActiveData(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("SkillID", c_int),    # 技能ID
+                  ("ActiveLV", 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.SkillID = 0
+        self.ActiveLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSkillElementActiveData)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 09 技能五行专精信息 //tagMCSkillElementInfo:
+                                SkillID:%d,
+                                ActiveLV:%d
+                                '''\
+                                %(
+                                self.SkillID,
+                                self.ActiveLV
+                                )
+        return DumpString
+
+
+class  tagMCSkillElementData(Structure):
+    MainSkillID = 0    #(DWORD MainSkillID)// 主技能ID
+    ElementSkillID = 0    #(DWORD ElementSkillID)// 选择的专精技能ID
+    SkillCnt = 0    #(BYTE SkillCnt)// 数量
+    ActiveSkill = list()    #(vector<tagMCSkillElementActiveData> ActiveSkill)// 激活的技能ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.MainSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ElementSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SkillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SkillCnt):
+            temActiveSkill = tagMCSkillElementActiveData()
+            _pos = temActiveSkill.ReadData(_lpData, _pos)
+            self.ActiveSkill.append(temActiveSkill)
+        return _pos
+
+    def Clear(self):
+        self.MainSkillID = 0
+        self.ElementSkillID = 0
+        self.SkillCnt = 0
+        self.ActiveSkill = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.SkillCnt):
+            length += self.ActiveSkill[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.MainSkillID)
+        data = CommFunc.WriteDWORD(data, self.ElementSkillID)
+        data = CommFunc.WriteBYTE(data, self.SkillCnt)
+        for i in range(self.SkillCnt):
+            data = CommFunc.WriteString(data, self.ActiveSkill[i].GetLength(), self.ActiveSkill[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                MainSkillID:%d,
+                                ElementSkillID:%d,
+                                SkillCnt:%d,
+                                ActiveSkill:%s
+                                '''\
+                                %(
+                                self.MainSkillID,
+                                self.ElementSkillID,
+                                self.SkillCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCSkillElementInfo(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)// 数量
+    InfoList = list()    #(vector<tagMCSkillElementData> InfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x09
+        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 = tagMCSkillElementData()
+            _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 = 0x09
+        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_NAtagMCSkillElementInfo=tagMCSkillElementInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkillElementInfo.Head.Cmd,m_NAtagMCSkillElementInfo.Head.SubCmd))] = m_NAtagMCSkillElementInfo
+
+
+#------------------------------------------------------
 # A3 BC 通知装备位孔位宝石ID #tagMCStoneInfo
 
 class  tagMCStoneMsg(Structure):
@@ -16857,6 +19154,7 @@
     _fields_ = [
                   ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个succid   0-30为0, 31-61为1..
                   ("Record", c_int),    #对应是否领取值
+                  ("PassportRecord", c_int),    #通行证奖励是否领取值
                   ]
 
     def __init__(self):
@@ -16871,6 +19169,7 @@
     def Clear(self):
         self.RecordIndex = 0
         self.Record = 0
+        self.PassportRecord = 0
         return
 
     def GetLength(self):
@@ -16882,11 +19181,13 @@
     def OutputString(self):
         DumpString = '''//A3 42  成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList:
                                 RecordIndex:%d,
-                                Record:%d
+                                Record:%d,
+                                PassportRecord:%d
                                 '''\
                                 %(
                                 self.RecordIndex,
-                                self.Record
+                                self.Record,
+                                self.PassportRecord
                                 )
         return DumpString
 
@@ -17322,16 +19623,20 @@
 #------------------------------------------------------
 #A3 01 坐骑培养信息 #tagTrainHorseData
 
-class  tagMCHorseInfo(Structure):
+class  tagTrainHorseData(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("HorseID", c_int),    #ID
-                  ("LV", c_ubyte),    #等级
-                  ("Exp", c_int),    #经验
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LV", c_ubyte),    #等阶
+                  ("EatItemCount", c_int),    #当前阶已吃丹个数
+                  ("SkinPlusState", c_int),    #幻化激活状态,按位存储是否激活,幻化编号ID对应位
                   ]
 
     def __init__(self):
         self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x01
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -17340,102 +19645,39 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.HorseID = 0
+        self.Cmd = 0xA3
+        self.SubCmd = 0x01
         self.LV = 0
-        self.Exp = 0
+        self.EatItemCount = 0
+        self.SkinPlusState = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCHorseInfo)
+        return sizeof(tagTrainHorseData)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData:
-                                HorseID:%d,
+                                Cmd:%s,
+                                SubCmd:%s,
                                 LV:%d,
-                                Exp:%d
+                                EatItemCount:%d,
+                                SkinPlusState:%d
                                 '''\
                                 %(
-                                self.HorseID,
+                                self.Cmd,
+                                self.SubCmd,
                                 self.LV,
-                                self.Exp
-                                )
-        return DumpString
-
-
-class  tagTrainHorseData(Structure):
-    Head = tagHead()
-    Multiple = 0    #(BYTE Multiple)//下次暴击倍数
-    Num = 0    #(BYTE Num)//个数
-    InfoList = list()    #(vector<tagMCHorseInfo> InfoList)// 坐骑数据列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Num):
-            temInfoList = tagMCHorseInfo()
-            _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 = 0x01
-        self.Multiple = 0
-        self.Num = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.Num):
-            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.Multiple)
-        data = CommFunc.WriteBYTE(data, self.Num)
-        for i in range(self.Num):
-            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Multiple:%d,
-                                Num:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Multiple,
-                                self.Num,
-                                "..."
+                                self.EatItemCount,
+                                self.SkinPlusState
                                 )
         return DumpString
 
 
 m_NAtagTrainHorseData=tagTrainHorseData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Head.Cmd,m_NAtagTrainHorseData.Head.SubCmd))] = m_NAtagTrainHorseData
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Cmd,m_NAtagTrainHorseData.SubCmd))] = m_NAtagTrainHorseData
 
 
 #------------------------------------------------------
@@ -18063,6 +20305,58 @@
 
 m_NAtagMCChampionFamilyDailyReward=tagMCChampionFamilyDailyReward()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChampionFamilyDailyReward.Cmd,m_NAtagMCChampionFamilyDailyReward.SubCmd))] = m_NAtagMCChampionFamilyDailyReward
+
+
+#------------------------------------------------------
+# A5 02 家族活跃令兑换结果 #tagMCFamilyActivityExchangeResult
+
+class  tagMCFamilyActivityExchangeResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Point", c_int),    # 活跃令
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x02
+        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 = 0x02
+        self.Point = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFamilyActivityExchangeResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 02 家族活跃令兑换结果 //tagMCFamilyActivityExchangeResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Point:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Point
+                                )
+        return DumpString
+
+
+m_NAtagMCFamilyActivityExchangeResult=tagMCFamilyActivityExchangeResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityExchangeResult.Cmd,m_NAtagMCFamilyActivityExchangeResult.SubCmd))] = m_NAtagMCFamilyActivityExchangeResult
 
 
 #------------------------------------------------------
@@ -19075,6 +21369,58 @@
 
 m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo
+
+
+#------------------------------------------------------
+# A7 20 创角奖励领奖状态 #tagMCCreateRoleAwardState
+
+class  tagMCCreateRoleAwardState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GetState", c_ubyte),    # 是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA7
+        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 = 0xA7
+        self.SubCmd = 0x20
+        self.GetState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCreateRoleAwardState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 20 创角奖励领奖状态 //tagMCCreateRoleAwardState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GetState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GetState
+                                )
+        return DumpString
+
+
+m_NAtagMCCreateRoleAwardState=tagMCCreateRoleAwardState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCreateRoleAwardState.Cmd,m_NAtagMCCreateRoleAwardState.SubCmd))] = m_NAtagMCCreateRoleAwardState
 
 
 #------------------------------------------------------
@@ -20118,6 +22464,84 @@
 
 
 #------------------------------------------------------
+# A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
+
+class  tagSCPlayerEquipCacheResult(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    EquipClassLV = 0    #(BYTE EquipClassLV)
+    ItemDataSize = 0    #(WORD ItemDataSize)
+    ItemData = ""    #(String ItemData)//物品记录    
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x19
+        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.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x19
+        self.PlayerID = 0
+        self.EquipClassLV = 0
+        self.ItemDataSize = 0
+        self.ItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 2
+        length += len(self.ItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.EquipClassLV)
+        data = CommFunc.WriteWORD(data, self.ItemDataSize)
+        data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                EquipClassLV:%d,
+                                ItemDataSize:%d,
+                                ItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.EquipClassLV,
+                                self.ItemDataSize,
+                                self.ItemData
+                                )
+        return DumpString
+
+
+m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
+
+
+#------------------------------------------------------
 # A7 07 通知玩家自定义聊天 #tagMCPyTalk
 
 class  tagMCPyTalk(Structure):
@@ -20784,6 +23208,58 @@
 
 
 #------------------------------------------------------
+# A8 15 灵器突破结果 #tagMCLingQiEquipBreakResult
+
+class  tagMCLingQiEquipBreakResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MakeItemID", c_int),    #突破后的物品ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA8
+        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 = 0xA8
+        self.SubCmd = 0x15
+        self.MakeItemID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCLingQiEquipBreakResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A8 15 灵器突破结果 //tagMCLingQiEquipBreakResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MakeItemID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MakeItemID
+                                )
+        return DumpString
+
+
+m_NAtagMCLingQiEquipBreakResult=tagMCLingQiEquipBreakResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiEquipBreakResult.Cmd,m_NAtagMCLingQiEquipBreakResult.SubCmd))] = m_NAtagMCLingQiEquipBreakResult
+
+
+#------------------------------------------------------
 # A8 14 合成结果通知 #tagMCMakeItemAnswer
 
 class  tagMCMakeItemAnswer(Structure):
@@ -21408,14 +23884,14 @@
 
 
 #------------------------------------------------------
-# A8 15 诛仙装备分解结果通知 #tagMCZhuXianDecomposeResult
+# AA 40 集字活动信息 #tagMCActCollectWordsInfo
 
-class  tagMCZhuXianDecomposeItem(Structure):
+class  tagMCActCollectWordsNeedItem(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("ItemID", c_int),    #物品ID
-                  ("ItemCnt", c_ubyte),    #物品数量
-                  ("IsBind", c_ubyte),    #是否绑定
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
                   ]
 
     def __init__(self):
@@ -21429,94 +23905,467 @@
 
     def Clear(self):
         self.ItemID = 0
-        self.ItemCnt = 0
+        self.ItemCount = 0
         self.IsBind = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCZhuXianDecomposeItem)
+        return sizeof(tagMCActCollectWordsNeedItem)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A8 15 诛仙装备分解结果通知 //tagMCZhuXianDecomposeResult:
+        DumpString = '''// AA 40 集字活动信息 //tagMCActCollectWordsInfo:
                                 ItemID:%d,
-                                ItemCnt:%d,
+                                ItemCount:%d,
                                 IsBind:%d
                                 '''\
                                 %(
                                 self.ItemID,
-                                self.ItemCnt,
+                                self.ItemCount,
                                 self.IsBind
                                 )
         return DumpString
 
 
-class  tagMCZhuXianDecomposeResult(Structure):
-    Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)//数量
-    ItemList = list()    #(vector<tagMCZhuXianDecomposeItem> ItemList)
+class  tagMCActCollectWordsExchangeItem(Structure):
+    ExchangeNum = 0    #(BYTE ExchangeNum)//兑换编号
+    ExchangeCountMax = 0    #(BYTE ExchangeCountMax)//最大兑换次数,0不限制
+    ItemID = 0    #(DWORD ItemID)//目标物品
+    ItemCount = 0    #(WORD ItemCount)
+    IsBind = 0    #(BYTE IsBind)
+    NeedItemCount = 0    #(BYTE NeedItemCount)
+    NeedItemList = list()    #(vector<tagMCActCollectWordsNeedItem> NeedItemList)// 所需物品列表
     data = None
 
     def __init__(self):
         self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ExchangeNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ExchangeCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.NeedItemCount):
+            temNeedItemList = tagMCActCollectWordsNeedItem()
+            _pos = temNeedItemList.ReadData(_lpData, _pos)
+            self.NeedItemList.append(temNeedItemList)
+        return _pos
+
+    def Clear(self):
+        self.ExchangeNum = 0
+        self.ExchangeCountMax = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        self.NeedItemCount = 0
+        self.NeedItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 4
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.NeedItemCount):
+            length += self.NeedItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.ExchangeNum)
+        data = CommFunc.WriteBYTE(data, self.ExchangeCountMax)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemCount)
+        data = CommFunc.WriteBYTE(data, self.IsBind)
+        data = CommFunc.WriteBYTE(data, self.NeedItemCount)
+        for i in range(self.NeedItemCount):
+            data = CommFunc.WriteString(data, self.NeedItemList[i].GetLength(), self.NeedItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ExchangeNum:%d,
+                                ExchangeCountMax:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d,
+                                NeedItemCount:%d,
+                                NeedItemList:%s
+                                '''\
+                                %(
+                                self.ExchangeNum,
+                                self.ExchangeCountMax,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind,
+                                self.NeedItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActCollectWordsInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    LastDayOnlyExchange = 0    #(BYTE LastDayOnlyExchange)//最后一天是否仅兑换
+    ExchangeCount = 0    #(BYTE ExchangeCount)
+    ExchangeItemList = list()    #(vector<tagMCActCollectWordsExchangeItem> ExchangeItemList)//兑换组合列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x40
         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):
-            temItemList = tagMCZhuXianDecomposeItem()
-            _pos = temItemList.ReadData(_lpData, _pos)
-            self.ItemList.append(temItemList)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LastDayOnlyExchange,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ExchangeCount):
+            temExchangeItemList = tagMCActCollectWordsExchangeItem()
+            _pos = temExchangeItemList.ReadData(_lpData, _pos)
+            self.ExchangeItemList.append(temExchangeItemList)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x15
-        self.Cnt = 0
-        self.ItemList = list()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x40
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.LastDayOnlyExchange = 0
+        self.ExchangeCount = 0
+        self.ExchangeItemList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        for i in range(self.Cnt):
-            length += self.ItemList[i].GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.ExchangeCount):
+            length += self.ExchangeItemList[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.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.LastDayOnlyExchange)
+        data = CommFunc.WriteBYTE(data, self.ExchangeCount)
+        for i in range(self.ExchangeCount):
+            data = CommFunc.WriteString(data, self.ExchangeItemList[i].GetLength(), self.ExchangeItemList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                Cnt:%d,
-                                ItemList:%s
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                LastDayOnlyExchange:%d,
+                                ExchangeCount:%d,
+                                ExchangeItemList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.Cnt,
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.LastDayOnlyExchange,
+                                self.ExchangeCount,
                                 "..."
                                 )
         return DumpString
 
 
-m_NAtagMCZhuXianDecomposeResult=tagMCZhuXianDecomposeResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianDecomposeResult.Head.Cmd,m_NAtagMCZhuXianDecomposeResult.Head.SubCmd))] = m_NAtagMCZhuXianDecomposeResult
+m_NAtagMCActCollectWordsInfo=tagMCActCollectWordsInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsInfo.Head.Cmd,m_NAtagMCActCollectWordsInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsInfo
+
+
+#------------------------------------------------------
+# AA 41 集字活动玩家信息 #tagMCActCollectWordsPlayerInfo
+
+class  tagMCActCollectWordsExchangeInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ExchangeNum", c_ubyte),    #兑换编号
+                  ("ExchangeCount", 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.ExchangeNum = 0
+        self.ExchangeCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActCollectWordsExchangeInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 41 集字活动玩家信息 //tagMCActCollectWordsPlayerInfo:
+                                ExchangeNum:%d,
+                                ExchangeCount:%d
+                                '''\
+                                %(
+                                self.ExchangeNum,
+                                self.ExchangeCount
+                                )
+        return DumpString
+
+
+class  tagMCActCollectWordsPlayerInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启
+    ExchangeCount = 0    #(BYTE ExchangeCount)
+    ExchangeInfoList = list()    #(vector<tagMCActCollectWordsExchangeInfo> ExchangeInfoList)//兑换数据列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x41
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ExchangeCount):
+            temExchangeInfoList = tagMCActCollectWordsExchangeInfo()
+            _pos = temExchangeInfoList.ReadData(_lpData, _pos)
+            self.ExchangeInfoList.append(temExchangeInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x41
+        self.ActNum = 0
+        self.ExchangeCount = 0
+        self.ExchangeInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.ExchangeCount):
+            length += self.ExchangeInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteBYTE(data, self.ExchangeCount)
+        for i in range(self.ExchangeCount):
+            data = CommFunc.WriteString(data, self.ExchangeInfoList[i].GetLength(), self.ExchangeInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                ExchangeCount:%d,
+                                ExchangeInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.ExchangeCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActCollectWordsPlayerInfo=tagMCActCollectWordsPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsPlayerInfo.Head.Cmd,m_NAtagMCActCollectWordsPlayerInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsPlayerInfo
+
+
+#------------------------------------------------------
+# AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo
+
+class  tagMCActGrowupBuyGroup(Structure):
+    BuyCount = 0    #(BYTE BuyCount)// 循环购买礼包数
+    BuyCTGIDList = list()    #(vector<DWORD> BuyCTGIDList)// 循环购买礼包充值ID列表
+    PlayerBuyIndex = 0    #(BYTE PlayerBuyIndex)// 玩家当前可购买的礼包充值ID在列表中索引
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BuyCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.BuyCTGIDList.append(value)
+        self.PlayerBuyIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.BuyCount = 0
+        self.BuyCTGIDList = list()
+        self.PlayerBuyIndex = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4 * self.BuyCount
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.BuyCount)
+        for i in range(self.BuyCount):
+            data = CommFunc.WriteDWORD(data, self.BuyCTGIDList[i])
+        data = CommFunc.WriteBYTE(data, self.PlayerBuyIndex)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BuyCount:%d,
+                                BuyCTGIDList:%s,
+                                PlayerBuyIndex:%d
+                                '''\
+                                %(
+                                self.BuyCount,
+                                "...",
+                                self.PlayerBuyIndex
+                                )
+        return DumpString
+
+
+class  tagMCActGrowupBuyInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    GroupCount = 0    #(BYTE GroupCount)// 循环购买礼包组数
+    GroupList = list()    #(vector<tagMCActGrowupBuyGroup> GroupList)//循环购买礼包组列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x31
+        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.GroupCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GroupCount):
+            temGroupList = tagMCActGrowupBuyGroup()
+            _pos = temGroupList.ReadData(_lpData, _pos)
+            self.GroupList.append(temGroupList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x31
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.GroupCount = 0
+        self.GroupList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.GroupCount):
+            length += self.GroupList[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.GroupCount)
+        for i in range(self.GroupCount):
+            data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                GroupCount:%d,
+                                GroupList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.GroupCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo
 
 
 #------------------------------------------------------
@@ -21947,6 +24796,189 @@
 
 
 #------------------------------------------------------
+# AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo
+
+class  tagMCActRechargePrize(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("CTGID", c_ushort),    # 对应充值表充值ID
+                  ("GoldPrize", c_int),    #返利仙玉数
+                  ("PrizeCountLimit", 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.CTGID = 0
+        self.GoldPrize = 0
+        self.PrizeCountLimit = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActRechargePrize)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 27 充值返利活动信息 //tagMCActRechargePrizeInfo:
+                                CTGID:%d,
+                                GoldPrize:%d,
+                                PrizeCountLimit:%d
+                                '''\
+                                %(
+                                self.CTGID,
+                                self.GoldPrize,
+                                self.PrizeCountLimit
+                                )
+        return DumpString
+
+
+class  tagMCActRechargePrizeDay(Structure):
+    Prizes = 0    #(BYTE Prizes)// 返利档数
+    PrizeInfo = list()    #(vector<tagMCActRechargePrize> PrizeInfo)// 返利档信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Prizes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Prizes):
+            temPrizeInfo = tagMCActRechargePrize()
+            _pos = temPrizeInfo.ReadData(_lpData, _pos)
+            self.PrizeInfo.append(temPrizeInfo)
+        return _pos
+
+    def Clear(self):
+        self.Prizes = 0
+        self.PrizeInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.Prizes):
+            length += self.PrizeInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Prizes)
+        for i in range(self.Prizes):
+            data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Prizes:%d,
+                                PrizeInfo:%s
+                                '''\
+                                %(
+                                self.Prizes,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActRechargePrizeInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    PrizeDays = 0    #(BYTE PrizeDays)
+    PrizeDayInfo = list()    #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x27
+        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.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PrizeDays):
+            temPrizeDayInfo = tagMCActRechargePrizeDay()
+            _pos = temPrizeDayInfo.ReadData(_lpData, _pos)
+            self.PrizeDayInfo.append(temPrizeDayInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x27
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.PrizeDays = 0
+        self.PrizeDayInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 1
+        for i in range(self.PrizeDays):
+            length += self.PrizeDayInfo[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.WriteBYTE(data, self.PrizeDays)
+        for i in range(self.PrizeDays):
+            data = CommFunc.WriteString(data, self.PrizeDayInfo[i].GetLength(), self.PrizeDayInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                PrizeDays:%d,
+                                PrizeDayInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.PrizeDays,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo
+
+
+#------------------------------------------------------
 # AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
 
 class  tagMCTotalRechargeAwardItem(Structure):
@@ -22108,6 +25140,7 @@
 
 class  tagMCActTotalRechargeInfo(Structure):
     Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
@@ -22125,6 +25158,7 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_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)
@@ -22141,6 +25175,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x1D
+        self.ActNum = 0
         self.StartDate = ""
         self.EndtDate = ""
         self.IsDayReset = 0
@@ -22152,6 +25187,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 10
         length += 10
         length += 1
@@ -22165,6 +25201,7 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
         data = CommFunc.WriteBYTE(data, self.IsDayReset)
@@ -22177,6 +25214,7 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActNum:%d,
                                 StartDate:%s,
                                 EndtDate:%s,
                                 IsDayReset:%d,
@@ -22186,6 +25224,7 @@
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActNum,
                                 self.StartDate,
                                 self.EndtDate,
                                 self.IsDayReset,
@@ -22776,7 +25815,7 @@
     _pack_ = 1
     _fields_ = [
                   ("ItemID", c_int),    
-                  ("ItemCount", c_ushort),    
+                  ("ItemCount", c_int),    
                   ("IsBind", c_ubyte),    
                   ]
 
@@ -23077,6 +26116,359 @@
 
 m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo
+
+
+#------------------------------------------------------
+# AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo
+
+class  tagMCDailyGiftbagItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", 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.ItemID = 0
+        self.ItemCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCDailyGiftbagItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 25 每日礼包活动信息 //tagMCDailyGiftbagInfo:
+                                ItemID:%d,
+                                ItemCount:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount
+                                )
+        return DumpString
+
+
+class  tagMCDailyGiftbag(Structure):
+    GiftID = 0    #(DWORD GiftID)//礼包ID,0为免费
+    OrderInfoLen = 0    #(BYTE OrderInfoLen)
+    OrderInfo = ""    #(String OrderInfo)//商品编号
+    BuyCountLimit = 0    #(BYTE BuyCountLimit)//限购数
+    RMB = 0    #(DWORD RMB)//所需RMB,元
+    GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
+    ItemInfo = list()    #(vector<tagMCDailyGiftbagItem> 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.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftItemCount):
+            temItemInfo = tagMCDailyGiftbagItem()
+            _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.GiftItemCount = 0
+        self.ItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.OrderInfo)
+        length += 1
+        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.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,
+                                GiftItemCount:%d,
+                                ItemInfo:%s
+                                '''\
+                                %(
+                                self.GiftID,
+                                self.OrderInfoLen,
+                                self.OrderInfo,
+                                self.BuyCountLimit,
+                                self.RMB,
+                                self.GiftItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCDailyGiftbagInfo(Structure):
+    Head = tagHead()
+    GiftbagCount = 0    #(BYTE GiftbagCount)// 礼包数
+    GiftbagInfo = list()    #(vector<tagMCDailyGiftbag> GiftbagInfo)// 礼包信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x25
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagCount):
+            temGiftbagInfo = tagMCDailyGiftbag()
+            _pos = temGiftbagInfo.ReadData(_lpData, _pos)
+            self.GiftbagInfo.append(temGiftbagInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x25
+        self.GiftbagCount = 0
+        self.GiftbagInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.GiftbagCount):
+            length += self.GiftbagInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        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 = '''
+                                Head:%s,
+                                GiftbagCount:%d,
+                                GiftbagInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.GiftbagCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCDailyGiftbagInfo=tagMCDailyGiftbagInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagInfo.Head.Cmd,m_NAtagMCDailyGiftbagInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagInfo
+
+
+#------------------------------------------------------
+# AA 26 每日礼包玩家活动信息 #tagMCDailyGiftbagPlayerInfo
+
+class  tagMCDailyGiftbagBuyCount(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(tagMCDailyGiftbagBuyCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 26 每日礼包玩家活动信息 //tagMCDailyGiftbagPlayerInfo:
+                                GiftbagID:%d,
+                                BuyCount:%d
+                                '''\
+                                %(
+                                self.GiftbagID,
+                                self.BuyCount
+                                )
+        return DumpString
+
+
+class  tagMCDailyGiftbagPlayerInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BuyCountList = list()    #(vector<tagMCDailyGiftbagBuyCount> BuyCountList)//礼包购买次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x26
+        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 = tagMCDailyGiftbagBuyCount()
+            _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 = 0x26
+        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_NAtagMCDailyGiftbagPlayerInfo=tagMCDailyGiftbagPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagPlayerInfo.Head.Cmd,m_NAtagMCDailyGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagPlayerInfo
+
+
+#------------------------------------------------------
+# AA 24 每日免费直购礼包信息 #tagMCDayFreeGoldGiftState
+
+class  tagMCDayFreeGoldGiftState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("DayFreeGoldGiftState", c_ubyte),    #每日免费直购礼包是否已领奖 0-未领 1-已领
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x24
+        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 = 0x24
+        self.DayFreeGoldGiftState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCDayFreeGoldGiftState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 24 每日免费直购礼包信息 //tagMCDayFreeGoldGiftState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DayFreeGoldGiftState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DayFreeGoldGiftState
+                                )
+        return DumpString
+
+
+m_NAtagMCDayFreeGoldGiftState=tagMCDayFreeGoldGiftState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDayFreeGoldGiftState.Cmd,m_NAtagMCDayFreeGoldGiftState.SubCmd))] = m_NAtagMCDayFreeGoldGiftState
 
 
 #------------------------------------------------------
@@ -23599,8 +26991,9 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("FirstGoldRewardState", c_ubyte),    #首充奖励是否已领奖
+                  ("FirstGoldRewardState", c_ubyte),    #首充奖励领奖记录,按位记录首充第X天是否已领取,第1天为第0索引位
                   ("FirstGoldTry", c_ubyte),    #首充试用状态0-不可试用 1-可试用 2-已试用
+                  ("FirstGoldServerDay", c_ushort),    #首充时是开服第几天,从1开始,0代表未记录充值
                   ]
 
     def __init__(self):
@@ -23619,6 +27012,7 @@
         self.SubCmd = 0x02
         self.FirstGoldRewardState = 0
         self.FirstGoldTry = 0
+        self.FirstGoldServerDay = 0
         return
 
     def GetLength(self):
@@ -23632,13 +27026,15 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 FirstGoldRewardState:%d,
-                                FirstGoldTry:%d
+                                FirstGoldTry:%d,
+                                FirstGoldServerDay:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.FirstGoldRewardState,
-                                self.FirstGoldTry
+                                self.FirstGoldTry,
+                                self.FirstGoldServerDay
                                 )
         return DumpString
 
@@ -24968,6 +28364,114 @@
 
 
 #------------------------------------------------------
+# AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
+
+class  tagMCRechargePrizeInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("CTGID", c_ushort),    # 对应充值表充值ID
+                  ("PrizeCount", 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.CTGID = 0
+        self.PrizeCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCRechargePrizeInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 28 充值返利玩家活动信息 //tagMCRechargePrizePlayerInfo:
+                                CTGID:%d,
+                                PrizeCount:%d
+                                '''\
+                                %(
+                                self.CTGID,
+                                self.PrizeCount
+                                )
+        return DumpString
+
+
+class  tagMCRechargePrizePlayerInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    PlayerInfoList = list()    #(vector<tagMCRechargePrizeInfo> PlayerInfoList)//玩家返利信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x28
+        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):
+            temPlayerInfoList = tagMCRechargePrizeInfo()
+            _pos = temPlayerInfoList.ReadData(_lpData, _pos)
+            self.PlayerInfoList.append(temPlayerInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x28
+        self.Count = 0
+        self.PlayerInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.PlayerInfoList[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.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                PlayerInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo
+
+
+#------------------------------------------------------
 # AA 11 限时特惠活动信息 #tagMCSpringSaleInfo
 
 class  tagMCSpringSaleItem(Structure):
@@ -25433,6 +28937,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
                   ("GoldTotal", c_int),    #本次活动已累计充值仙玉数
                   ("AwardRecord", c_int),    #奖励领奖记录,按奖励索引二进制位存储是否已领取
                   ]
@@ -25451,6 +28956,7 @@
     def Clear(self):
         self.Cmd = 0xAA
         self.SubCmd = 0x1C
+        self.ActNum = 0
         self.GoldTotal = 0
         self.AwardRecord = 0
         return
@@ -25465,12 +28971,14 @@
         DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
+                                ActNum:%d,
                                 GoldTotal:%d,
                                 AwardRecord:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
+                                self.ActNum,
                                 self.GoldTotal,
                                 self.AwardRecord
                                 )
@@ -26002,6 +29510,9 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("State", c_ubyte),    #0-不可领 1-可领 2-已领取
+                  ("CTGTotal", c_int),    #本次活动已累计充值,单位元
+                  ("FireworksBuyCount", c_ushort),    #已购买高级烟花数
+                  ("FirewordsScore", c_int),    #当前累计所有烟花总积分
                   ]
 
     def __init__(self):
@@ -26019,6 +29530,9 @@
         self.Cmd = 0xAA
         self.SubCmd = 0x14
         self.State = 0
+        self.CTGTotal = 0
+        self.FireworksBuyCount = 0
+        self.FirewordsScore = 0
         return
 
     def GetLength(self):
@@ -26031,18 +29545,132 @@
         DumpString = '''// AA 14 仙界盛典充值大礼 //tagMCXJSDRecharge:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                State:%d
+                                State:%d,
+                                CTGTotal:%d,
+                                FireworksBuyCount:%d,
+                                FirewordsScore:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.State
+                                self.State,
+                                self.CTGTotal,
+                                self.FireworksBuyCount,
+                                self.FirewordsScore
                                 )
         return DumpString
 
 
 m_NAtagMCXJSDRecharge=tagMCXJSDRecharge()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXJSDRecharge.Cmd,m_NAtagMCXJSDRecharge.SubCmd))] = m_NAtagMCXJSDRecharge
+
+
+#------------------------------------------------------
+# AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo
+
+class  tagMCBossFirstKillState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NPCID", c_int),    
+                  ("FKState", c_int),    # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励
+                  ]
+
+    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.FKState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBossFirstKillState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo:
+                                NPCID:%d,
+                                FKState:%d
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.FKState
+                                )
+        return DumpString
+
+
+class  tagMCBossFirstKillStateInfo(Structure):
+    Head = tagHead()
+    BossCount = 0    #(BYTE BossCount)
+    FirstKillStateList = list()    #(vector<tagMCBossFirstKillState> FirstKillStateList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BossCount):
+            temFirstKillStateList = tagMCBossFirstKillState()
+            _pos = temFirstKillStateList.ReadData(_lpData, _pos)
+            self.FirstKillStateList.append(temFirstKillStateList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x01
+        self.BossCount = 0
+        self.FirstKillStateList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.BossCount):
+            length += self.FirstKillStateList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.BossCount)
+        for i in range(self.BossCount):
+            data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                BossCount:%d,
+                                FirstKillStateList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.BossCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo
 
 
 #------------------------------------------------------
@@ -27193,6 +30821,119 @@
 
 
 #------------------------------------------------------
+# B0 27 活跃放置信息 #tagMCActivityPlaceInfo
+
+class  tagMCActivityPlaceInfo(Structure):
+    Head = tagHead()
+    StartTime = 0    #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间
+    PlaceCount = 0    #(BYTE PlaceCount)// 剩余未完成探索次数
+    RewardCount = 0    #(BYTE RewardCount)// 累计未领取探索奖励次数
+    RewardLen = 0    #(BYTE RewardLen)
+    RewardInfo = ""    #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...]
+    TodayExp = 0    #(DWORD TodayExp)
+    TodayExpPoint = 0    #(DWORD TodayExpPoint)
+    YestordayExp = 0    #(DWORD YestordayExp)
+    YestordayExpPoint = 0    #(DWORD YestordayExpPoint)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x27
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlaceCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen)
+        self.TodayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TodayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.YestordayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.YestordayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x27
+        self.StartTime = 0
+        self.PlaceCount = 0
+        self.RewardCount = 0
+        self.RewardLen = 0
+        self.RewardInfo = ""
+        self.TodayExp = 0
+        self.TodayExpPoint = 0
+        self.YestordayExp = 0
+        self.YestordayExpPoint = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        length += len(self.RewardInfo)
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.StartTime)
+        data = CommFunc.WriteBYTE(data, self.PlaceCount)
+        data = CommFunc.WriteBYTE(data, self.RewardCount)
+        data = CommFunc.WriteBYTE(data, self.RewardLen)
+        data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo)
+        data = CommFunc.WriteDWORD(data, self.TodayExp)
+        data = CommFunc.WriteDWORD(data, self.TodayExpPoint)
+        data = CommFunc.WriteDWORD(data, self.YestordayExp)
+        data = CommFunc.WriteDWORD(data, self.YestordayExpPoint)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartTime:%d,
+                                PlaceCount:%d,
+                                RewardCount:%d,
+                                RewardLen:%d,
+                                RewardInfo:%s,
+                                TodayExp:%d,
+                                TodayExpPoint:%d,
+                                YestordayExp:%d,
+                                YestordayExpPoint:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartTime,
+                                self.PlaceCount,
+                                self.RewardCount,
+                                self.RewardLen,
+                                self.RewardInfo,
+                                self.TodayExp,
+                                self.TodayExpPoint,
+                                self.YestordayExp,
+                                self.YestordayExpPoint
+                                )
+        return DumpString
+
+
+m_NAtagMCActivityPlaceInfo=tagMCActivityPlaceInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActivityPlaceInfo.Head.Cmd,m_NAtagMCActivityPlaceInfo.Head.SubCmd))] = m_NAtagMCActivityPlaceInfo
+
+
+#------------------------------------------------------
 #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState
 
 class  tagFamilyArrestAwardReceiveState(Structure):
@@ -27290,6 +31031,62 @@
 
 m_NAtagMCFishResult=tagMCFishResult()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFishResult.Cmd,m_NAtagMCFishResult.SubCmd))] = m_NAtagMCFishResult
+
+
+#------------------------------------------------------
+# B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo
+
+class  tagMCTodayAssistMoneyInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TodayAssistMoney", c_ushort),    #今日已获得活跃令,不含社交加成
+                  ("SocialMoney", 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.TodayAssistMoney = 0
+        self.SocialMoney = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCTodayAssistMoneyInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 07 今日协助活跃令信息 //tagMCTodayAssistMoneyInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TodayAssistMoney:%d,
+                                SocialMoney:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TodayAssistMoney,
+                                self.SocialMoney
+                                )
+        return DumpString
+
+
+m_NAtagMCTodayAssistMoneyInfo=tagMCTodayAssistMoneyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTodayAssistMoneyInfo.Cmd,m_NAtagMCTodayAssistMoneyInfo.SubCmd))] = m_NAtagMCTodayAssistMoneyInfo
 
 
 #------------------------------------------------------
@@ -27533,7 +31330,7 @@
     Head = tagHead()
     PointAttrIDCount = 0    #(BYTE PointAttrIDCount)// 点类型个数
     PointAttrIDList = list()    #(vector<BYTE> PointAttrIDList)// 点类型列表
-    PointValueList = list()    #(vector<WORD> PointValueList)// 点类型对应已加自由点数列表
+    PointValueList = list()    #(vector<DWORD> PointValueList)// 点类型对应已加自由点数列表
     data = None
 
     def __init__(self):
@@ -27550,7 +31347,7 @@
             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
             self.PointAttrIDList.append(value)
         for i in range(self.PointAttrIDCount):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
             self.PointValueList.append(value)
         return _pos
 
@@ -27569,7 +31366,7 @@
         length += self.Head.GetLength()
         length += 1
         length += 1 * self.PointAttrIDCount
-        length += 2 * self.PointAttrIDCount
+        length += 4 * self.PointAttrIDCount
 
         return length
 
@@ -27580,7 +31377,7 @@
         for i in range(self.PointAttrIDCount):
             data = CommFunc.WriteBYTE(data, self.PointAttrIDList[i])
         for i in range(self.PointAttrIDCount):
-            data = CommFunc.WriteWORD(data, self.PointValueList[i])
+            data = CommFunc.WriteDWORD(data, self.PointValueList[i])
         return data
 
     def OutputString(self):
@@ -27824,6 +31621,54 @@
 
 
 #------------------------------------------------------
+#B1 08 开始印记流失时间 #tagMCYinjiStartTime
+
+class  tagMCYinjiStartTime(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        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 = 0xB1
+        self.SubCmd = 0x08
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCYinjiStartTime)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
+
+
+#------------------------------------------------------
 # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
 
 class  tagMCAddXianyuanCoinMsg(Structure):
@@ -27941,87 +31786,6 @@
 
 m_NAtagMCAddXianyuanCoinMsg=tagMCAddXianyuanCoinMsg()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddXianyuanCoinMsg.Head.Cmd,m_NAtagMCAddXianyuanCoinMsg.Head.SubCmd))] = m_NAtagMCAddXianyuanCoinMsg
-
-
-#------------------------------------------------------
-# B2 14 自定义副本奖励信息 #tagMCCuntomFBPrizeInfo
-
-class  tagMCCuntomFBPrizeInfo(Structure):
-    Head = tagHead()
-    MapID = 0    #(DWORD MapID)
-    FuncLineID = 0    #(WORD FuncLineID)
-    PrizeItemCount = 0    #(BYTE PrizeItemCount)
-    PrizeItemIDList = list()    #(vector<DWORD> PrizeItemIDList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB2
-        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.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PrizeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PrizeItemCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.PrizeItemIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB2
-        self.Head.SubCmd = 0x14
-        self.MapID = 0
-        self.FuncLineID = 0
-        self.PrizeItemCount = 0
-        self.PrizeItemIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 2
-        length += 1
-        length += 4 * self.PrizeItemCount
-
-        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.FuncLineID)
-        data = CommFunc.WriteBYTE(data, self.PrizeItemCount)
-        for i in range(self.PrizeItemCount):
-            data = CommFunc.WriteDWORD(data, self.PrizeItemIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                MapID:%d,
-                                FuncLineID:%d,
-                                PrizeItemCount:%d,
-                                PrizeItemIDList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.MapID,
-                                self.FuncLineID,
-                                self.PrizeItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCuntomFBPrizeInfo=tagMCCuntomFBPrizeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCuntomFBPrizeInfo.Head.Cmd,m_NAtagMCCuntomFBPrizeInfo.Head.SubCmd))] = m_NAtagMCCuntomFBPrizeInfo
 
 
 #------------------------------------------------------
@@ -28328,6 +32092,7 @@
     _fields_ = [
                   ("DataMapID", c_int),    # 地图ID
                   ("RemainTime", c_int),    # 剩余时间秒
+                  ("RegainCnt", c_ubyte),    # 今日已恢复次数
                   ]
 
     def __init__(self):
@@ -28342,6 +32107,7 @@
     def Clear(self):
         self.DataMapID = 0
         self.RemainTime = 0
+        self.RegainCnt = 0
         return
 
     def GetLength(self):
@@ -28353,11 +32119,13 @@
     def OutputString(self):
         DumpString = '''// B2 09 副本次数恢复剩余时间 //tagMCFBCntRegainRemainTime:
                                 DataMapID:%d,
-                                RemainTime:%d
+                                RemainTime:%d,
+                                RegainCnt:%d
                                 '''\
                                 %(
                                 self.DataMapID,
-                                self.RemainTime
+                                self.RemainTime,
+                                self.RegainCnt
                                 )
         return DumpString
 
@@ -29159,6 +32927,122 @@
 
 
 #------------------------------------------------------
+# B2 13 天星塔通关层数 #tagMCSkyTowerInfo
+
+class  tagMCSkyTowerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Floor", c_int),    # 已通关层
+                  ("ServerRewardRecord", c_int),    #全服挑战层领奖记录,按奖励记录二进制位存储是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x13
+        self.Floor = 0
+        self.ServerRewardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSkyTowerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Floor:%d,
+                                ServerRewardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Floor,
+                                self.ServerRewardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCSkyTowerInfo=tagMCSkyTowerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Cmd,m_NAtagMCSkyTowerInfo.SubCmd))] = m_NAtagMCSkyTowerInfo
+
+
+#------------------------------------------------------
+# B2 16 开始自定义场景结果 #tagMCStartCustomSceneResult
+
+class  tagMCStartCustomSceneResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MapID", c_int),    
+                  ("FuncLineID", c_ushort),    
+                  ("Result", c_ubyte),    #是否允许
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x16
+        self.MapID = 0
+        self.FuncLineID = 0
+        self.Result = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCStartCustomSceneResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 16 开始自定义场景结果 //tagMCStartCustomSceneResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MapID:%d,
+                                FuncLineID:%d,
+                                Result:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MapID,
+                                self.FuncLineID,
+                                self.Result
+                                )
+        return DumpString
+
+
+m_NAtagMCStartCustomSceneResult=tagMCStartCustomSceneResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartCustomSceneResult.Cmd,m_NAtagMCStartCustomSceneResult.SubCmd))] = m_NAtagMCStartCustomSceneResult
+
+
+#------------------------------------------------------
 #B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting
 
 class  tagMCPushNotificationsSetting(Structure):
@@ -29282,62 +33166,6 @@
 
 
 #------------------------------------------------------
-# B2 13 诛仙塔通关层数 #tagMCZhuXianTowerInfo
-
-class  tagMCZhuXianTowerInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Floor", c_int),    # 已通关层
-                  ("LastFloor", c_int),    # 上次挑战层
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB2
-        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 = 0xB2
-        self.SubCmd = 0x13
-        self.Floor = 0
-        self.LastFloor = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCZhuXianTowerInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B2 13 诛仙塔通关层数 //tagMCZhuXianTowerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Floor:%d,
-                                LastFloor:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Floor,
-                                self.LastFloor
-                                )
-        return DumpString
-
-
-m_NAtagMCZhuXianTowerInfo=tagMCZhuXianTowerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianTowerInfo.Cmd,m_NAtagMCZhuXianTowerInfo.SubCmd))] = m_NAtagMCZhuXianTowerInfo
-
-
-#------------------------------------------------------
 # B4 11 新增恶意攻击玩家 #tagMCAddMaliciousAtkPlayer
 
 class  tagMCAddMaliciousAtkPlayer(Structure):
@@ -29387,6 +33215,226 @@
 
 m_NAtagMCAddMaliciousAtkPlayer=tagMCAddMaliciousAtkPlayer()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddMaliciousAtkPlayer.Cmd,m_NAtagMCAddMaliciousAtkPlayer.SubCmd))] = m_NAtagMCAddMaliciousAtkPlayer
+
+
+#------------------------------------------------------
+# B4 15 Boss伤血排行榜信息 #tagMCBossHurtValueRankInfo
+
+class  tagMCBossHurtValueAssist(Structure):
+    PlayerID = 0    #(DWORD PlayerID)// 助战玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    HurtValue = 0    #(DWORD HurtValue)//不超过亿部分
+    HurtValueEx = 0    #(DWORD HurtValueEx)//支持超过20亿
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteDWORD(data, self.HurtValue)
+        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+class  tagMCBossHurtValue(Structure):
+    HurtType = 0    #(BYTE HurtType)// 伤血类型 1-玩家,2-队伍
+    HurtID = 0    #(DWORD HurtID)//玩家时为玩家ID,队伍时为队伍ID
+    HurtName = ""    #(char HurtName[33])// 名称
+    HurtValue = 0    #(DWORD HurtValue)//不超过亿部分
+    HurtValueEx = 0    #(DWORD HurtValueEx)//支持超过20亿
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.HurtType = 0
+        self.HurtID = 0
+        self.HurtName = ""
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 33
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.HurtType)
+        data = CommFunc.WriteDWORD(data, self.HurtID)
+        data = CommFunc.WriteString(data, 33, self.HurtName)
+        data = CommFunc.WriteDWORD(data, self.HurtValue)
+        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                HurtType:%d,
+                                HurtID:%d,
+                                HurtName:%s,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.HurtType,
+                                self.HurtID,
+                                self.HurtName,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+class  tagMCBossHurtValueRankInfo(Structure):
+    Head = tagHead()
+    ObjID = 0    #(DWORD ObjID)//NPC实例ID
+    HurtCount = 0    #(BYTE HurtCount)//伤血数目
+    HurtValueList = list()    #(vector<tagMCBossHurtValue> HurtValueList)
+    AssistHurtCount = 0    #(BYTE AssistHurtCount)//助战伤血数目
+    AssistHurtValueList = list()    #(vector<tagMCBossHurtValueAssist> AssistHurtValueList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB4
+        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.HurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.HurtCount):
+            temHurtValueList = tagMCBossHurtValue()
+            _pos = temHurtValueList.ReadData(_lpData, _pos)
+            self.HurtValueList.append(temHurtValueList)
+        self.AssistHurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AssistHurtCount):
+            temAssistHurtValueList = tagMCBossHurtValueAssist()
+            _pos = temAssistHurtValueList.ReadData(_lpData, _pos)
+            self.AssistHurtValueList.append(temAssistHurtValueList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB4
+        self.Head.SubCmd = 0x15
+        self.ObjID = 0
+        self.HurtCount = 0
+        self.HurtValueList = list()
+        self.AssistHurtCount = 0
+        self.AssistHurtValueList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.HurtCount):
+            length += self.HurtValueList[i].GetLength()
+        length += 1
+        for i in range(self.AssistHurtCount):
+            length += self.AssistHurtValueList[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.WriteBYTE(data, self.HurtCount)
+        for i in range(self.HurtCount):
+            data = CommFunc.WriteString(data, self.HurtValueList[i].GetLength(), self.HurtValueList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AssistHurtCount)
+        for i in range(self.AssistHurtCount):
+            data = CommFunc.WriteString(data, self.AssistHurtValueList[i].GetLength(), self.AssistHurtValueList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ObjID:%d,
+                                HurtCount:%d,
+                                HurtValueList:%s,
+                                AssistHurtCount:%d,
+                                AssistHurtValueList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ObjID,
+                                self.HurtCount,
+                                "...",
+                                self.AssistHurtCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossHurtValueRankInfo=tagMCBossHurtValueRankInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossHurtValueRankInfo.Head.Cmd,m_NAtagMCBossHurtValueRankInfo.Head.SubCmd))] = m_NAtagMCBossHurtValueRankInfo
 
 
 #------------------------------------------------------
@@ -30316,6 +34364,7 @@
     PosY = 0    #(WORD PosY)
     HurtCount = 0    #(WORD HurtCount)//伤害数目
     HurtList = list()    #(vector<tagSkillPosHurtObj> HurtList)//size = HurtCount
+    SkillElementID = 0    #(WORD SkillElementID)//专精技能ID
     data = None
 
     def __init__(self):
@@ -30337,6 +34386,7 @@
             temHurtList = tagSkillPosHurtObj()
             _pos = temHurtList.ReadData(_lpData, _pos)
             self.HurtList.append(temHurtList)
+        self.SkillElementID,_pos = CommFunc.ReadWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -30351,6 +34401,7 @@
         self.PosY = 0
         self.HurtCount = 0
         self.HurtList = list()
+        self.SkillElementID = 0
         return
 
     def GetLength(self):
@@ -30364,6 +34415,7 @@
         length += 2
         for i in range(self.HurtCount):
             length += self.HurtList[i].GetLength()
+        length += 2
 
         return length
 
@@ -30378,6 +34430,7 @@
         data = CommFunc.WriteWORD(data, self.HurtCount)
         for i in range(self.HurtCount):
             data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.SkillElementID)
         return data
 
     def OutputString(self):
@@ -30389,7 +34442,8 @@
                                 PosX:%d,
                                 PosY:%d,
                                 HurtCount:%d,
-                                HurtList:%s
+                                HurtList:%s,
+                                SkillElementID:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -30399,7 +34453,8 @@
                                 self.PosX,
                                 self.PosY,
                                 self.HurtCount,
-                                "..."
+                                "...",
+                                self.SkillElementID
                                 )
         return DumpString
 

--
Gitblit v1.8.0