From daedb61b798873f6fc475172583ad9f8c8b3408d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 五月 2022 18:03:58 +0800
Subject: [PATCH] 9480 【BT6】【后端】炼体系统

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 5168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 5,049 insertions(+), 119 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 7ce2e59..14ebe55 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -346,6 +346,7 @@
                   ("NowMinute", c_ubyte),    
                   ("NowSecond", c_ubyte),    
                   ("NowMicSecond", c_int),    
+                  ("WeekOfYear", c_ubyte),    #一年中的第几周
                   ]
 
     def __init__(self):
@@ -373,6 +374,7 @@
         self.NowMinute = 0
         self.NowSecond = 0
         self.NowMicSecond = 0
+        self.WeekOfYear = 0
         return
 
     def GetLength(self):
@@ -395,7 +397,8 @@
                                 NowHour:%d,
                                 NowMinute:%d,
                                 NowSecond:%d,
-                                NowMicSecond:%d
+                                NowMicSecond:%d,
+                                WeekOfYear:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -410,7 +413,8 @@
                                 self.NowHour,
                                 self.NowMinute,
                                 self.NowSecond,
-                                self.NowMicSecond
+                                self.NowMicSecond,
+                                self.WeekOfYear
                                 )
         return DumpString
 
@@ -557,33 +561,41 @@
 #A0 04 同步客户端时间 #tagServerDateTime
 
 class  tagServerDateTime(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Year", c_ushort),    
-                  ("Month", c_ubyte),    
-                  ("Day", c_ubyte),    
-                  ("Hour", c_ubyte),    
-                  ("Minute", c_ubyte),    
-                  ("Second", c_ubyte),    
-                  ("MicSecond", c_int),    
-                  ]
+    Head = tagHead()
+    Year = 0    #(WORD Year)
+    Month = 0    #(BYTE Month)
+    Day = 0    #(BYTE Day)
+    Hour = 0    #(BYTE Hour)
+    Minute = 0    #(BYTE Minute)
+    Second = 0    #(BYTE Second)
+    MicSecond = 0    #(DWORD MicSecond)
+    CrossServerTime = ""    #(char CrossServerTime[19])
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA0
-        self.SubCmd = 0x04
+        self.Head.Cmd = 0xA0
+        self.Head.SubCmd = 0x04
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Year,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Month,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Day,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Second,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MicSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CrossServerTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xA0
-        self.SubCmd = 0x04
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA0
+        self.Head.SubCmd = 0x04
         self.Year = 0
         self.Month = 0
         self.Day = 0
@@ -591,42 +603,64 @@
         self.Minute = 0
         self.Second = 0
         self.MicSecond = 0
+        self.CrossServerTime = ""
         return
 
     def GetLength(self):
-        return sizeof(tagServerDateTime)
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        length += 4
+        length += 19
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Year)
+        data = CommFunc.WriteBYTE(data, self.Month)
+        data = CommFunc.WriteBYTE(data, self.Day)
+        data = CommFunc.WriteBYTE(data, self.Hour)
+        data = CommFunc.WriteBYTE(data, self.Minute)
+        data = CommFunc.WriteBYTE(data, self.Second)
+        data = CommFunc.WriteDWORD(data, self.MicSecond)
+        data = CommFunc.WriteString(data, 19, self.CrossServerTime)
+        return data
 
     def OutputString(self):
-        DumpString = '''//A0 04 同步客户端时间 //tagServerDateTime:
-                                Cmd:%s,
-                                SubCmd:%s,
+        DumpString = '''
+                                Head:%s,
                                 Year:%d,
                                 Month:%d,
                                 Day:%d,
                                 Hour:%d,
                                 Minute:%d,
                                 Second:%d,
-                                MicSecond:%d
+                                MicSecond:%d,
+                                CrossServerTime:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.Head.OutputString(),
                                 self.Year,
                                 self.Month,
                                 self.Day,
                                 self.Hour,
                                 self.Minute,
                                 self.Second,
-                                self.MicSecond
+                                self.MicSecond,
+                                self.CrossServerTime
                                 )
         return DumpString
 
 
 m_NAtagServerDateTime=tagServerDateTime()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagServerDateTime.Cmd,m_NAtagServerDateTime.SubCmd))] = m_NAtagServerDateTime
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagServerDateTime.Head.Cmd,m_NAtagServerDateTime.Head.SubCmd))] = m_NAtagServerDateTime
 
 
 #------------------------------------------------------
@@ -829,7 +863,7 @@
     Head = tagHead()
     Type = 0    #(BYTE Type)//类型
     Count = 0    #(WORD Count)//数量
-    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count    
+    UniversalGameRec = list()    #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count	
     data = None
 
     def __init__(self):
@@ -1133,7 +1167,7 @@
     FamilyID = 0    #(DWORD FamilyID)//家族ID
     ActionType = 0    #(BYTE ActionType)//类型
     Count = 0    #(WORD Count)//数量
-    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count    
+    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count	
     data = None
 
     def __init__(self):
@@ -1268,7 +1302,8 @@
 # A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo
 
 class  tagFGrabRedPacketInfo(Structure):
-    Name = ""    #(char Name[33])//名字
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)//名字
     PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
     MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
     data = None
@@ -1279,12 +1314,14 @@
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
+        self.NameLen = 0
         self.Name = ""
         self.PlayeJob = 0
         self.MoneyNum = 0
@@ -1292,7 +1329,8 @@
 
     def GetLength(self):
         length = 0
-        length += 33
+        length += 1
+        length += len(self.Name)
         length += 1
         length += 4
 
@@ -1300,18 +1338,21 @@
 
     def GetBuffer(self):
         data = ''
-        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteBYTE(data, self.PlayeJob)
         data = CommFunc.WriteDWORD(data, self.MoneyNum)
         return data
 
     def OutputString(self):
         DumpString = '''
+                                NameLen:%d,
                                 Name:%s,
                                 PlayeJob:%d,
                                 MoneyNum:%d
                                 '''\
                                 %(
+                                self.NameLen,
                                 self.Name,
                                 self.PlayeJob,
                                 self.MoneyNum
@@ -1398,15 +1439,18 @@
 class  tagFRedPacketInfo(Structure):
     RedPacketID = 0    #(DWORD RedPacketID)//红包唯一ID
     PlayerID = 0    #(DWORD PlayerID)//玩家ID
-    Name = ""    #(char Name[33])//玩家名字
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)//玩家名字
     Time = 0    #(DWORD Time)//时间
     PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
     MoneyType = 0    #(BYTE MoneyType)//金钱类型
-    MoneyNum = 0    #(WORD MoneyNum)//金钱数量
+    MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
     GetWay = 0    #(BYTE GetWay)//获得途径
     PacketCnt = 0    #(BYTE PacketCnt)//可抢个数
     State = 0    #(BYTE State)//0未发,1未领取,2已领取,3全部领完
-    Wish = ""    #(char Wish[33])//祝福语
+    WishLen = 0    #(BYTE WishLen)
+    Wish = ""    #(String Wish)//祝福语
+    IsAnonymous = 0    #(BYTE IsAnonymous)//是否匿名
     data = None
 
     def __init__(self):
@@ -1417,20 +1461,24 @@
         self.Clear()
         self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen)
+        self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
         self.RedPacketID = 0
         self.PlayerID = 0
+        self.NameLen = 0
         self.Name = ""
         self.Time = 0
         self.PlayeJob = 0
@@ -1439,22 +1487,27 @@
         self.GetWay = 0
         self.PacketCnt = 0
         self.State = 0
+        self.WishLen = 0
         self.Wish = ""
+        self.IsAnonymous = 0
         return
 
     def GetLength(self):
         length = 0
         length += 4
         length += 4
-        length += 33
+        length += 1
+        length += len(self.Name)
         length += 4
         length += 1
         length += 1
-        length += 2
+        length += 4
         length += 1
         length += 1
         length += 1
-        length += 33
+        length += 1
+        length += len(self.Wish)
+        length += 1
 
         return length
 
@@ -1462,21 +1515,25 @@
         data = ''
         data = CommFunc.WriteDWORD(data, self.RedPacketID)
         data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteDWORD(data, self.Time)
         data = CommFunc.WriteBYTE(data, self.PlayeJob)
         data = CommFunc.WriteBYTE(data, self.MoneyType)
-        data = CommFunc.WriteWORD(data, self.MoneyNum)
+        data = CommFunc.WriteDWORD(data, self.MoneyNum)
         data = CommFunc.WriteBYTE(data, self.GetWay)
         data = CommFunc.WriteBYTE(data, self.PacketCnt)
         data = CommFunc.WriteBYTE(data, self.State)
-        data = CommFunc.WriteString(data, 33, self.Wish)
+        data = CommFunc.WriteBYTE(data, self.WishLen)
+        data = CommFunc.WriteString(data, self.WishLen, self.Wish)
+        data = CommFunc.WriteBYTE(data, self.IsAnonymous)
         return data
 
     def OutputString(self):
         DumpString = '''
                                 RedPacketID:%d,
                                 PlayerID:%d,
+                                NameLen:%d,
                                 Name:%s,
                                 Time:%d,
                                 PlayeJob:%d,
@@ -1485,11 +1542,14 @@
                                 GetWay:%d,
                                 PacketCnt:%d,
                                 State:%d,
-                                Wish:%s
+                                WishLen:%d,
+                                Wish:%s,
+                                IsAnonymous:%d
                                 '''\
                                 %(
                                 self.RedPacketID,
                                 self.PlayerID,
+                                self.NameLen,
                                 self.Name,
                                 self.Time,
                                 self.PlayeJob,
@@ -1498,7 +1558,9 @@
                                 self.GetWay,
                                 self.PacketCnt,
                                 self.State,
-                                self.Wish
+                                self.WishLen,
+                                self.Wish,
+                                self.IsAnonymous
                                 )
         return DumpString
 
@@ -2181,7 +2243,8 @@
     Name = ""    #(String Name)//size=NameLen
     PlayerLV = 0    #(WORD PlayerLV)//玩家等级
     PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
-    PlayeFightPower = 0    #(DWORD PlayeFightPower)//玩家战斗力
+    PlayeFightPower = 0    #(DWORD PlayeFightPower)//玩家战斗力,求余亿部分
+    PlayeFightPowerEx = 0    #(DWORD PlayeFightPowerEx)//玩家战斗力,整除亿部分,1代表1亿
     RequestTime = 0    #(DWORD RequestTime)//申请时间
     IsOnLine = 0    #(BYTE IsOnLine)//是否在线
     data = None
@@ -2198,6 +2261,7 @@
         self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.PlayeFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayeFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.RequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.IsOnLine,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
@@ -2209,6 +2273,7 @@
         self.PlayerLV = 0
         self.PlayeJob = 0
         self.PlayeFightPower = 0
+        self.PlayeFightPowerEx = 0
         self.RequestTime = 0
         self.IsOnLine = 0
         return
@@ -2220,6 +2285,7 @@
         length += len(self.Name)
         length += 2
         length += 1
+        length += 4
         length += 4
         length += 4
         length += 1
@@ -2234,6 +2300,7 @@
         data = CommFunc.WriteWORD(data, self.PlayerLV)
         data = CommFunc.WriteBYTE(data, self.PlayeJob)
         data = CommFunc.WriteDWORD(data, self.PlayeFightPower)
+        data = CommFunc.WriteDWORD(data, self.PlayeFightPowerEx)
         data = CommFunc.WriteDWORD(data, self.RequestTime)
         data = CommFunc.WriteBYTE(data, self.IsOnLine)
         return data
@@ -2246,6 +2313,7 @@
                                 PlayerLV:%d,
                                 PlayeJob:%d,
                                 PlayeFightPower:%d,
+                                PlayeFightPowerEx:%d,
                                 RequestTime:%d,
                                 IsOnLine:%d
                                 '''\
@@ -2256,6 +2324,7 @@
                                 self.PlayerLV,
                                 self.PlayeJob,
                                 self.PlayeFightPower,
+                                self.PlayeFightPowerEx,
                                 self.RequestTime,
                                 self.IsOnLine
                                 )
@@ -2329,6 +2398,112 @@
 
 
 #------------------------------------------------------
+# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
+
+class  tagGCArenaBattlePlayerInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x26
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.Score = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        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.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.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.Score
+                                )
+        return DumpString
+
+
+m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo
+
+
+#------------------------------------------------------
 # A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
 
 class  tagGCArenaBattleRecord(Structure):
@@ -2337,7 +2512,9 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
-    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
     AddScoreLen = 0    #(BYTE AddScoreLen)
     AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
     IsWin = 0    #(BYTE IsWin)//是否获胜
@@ -2356,6 +2533,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_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)
@@ -2369,6 +2548,8 @@
         self.LV = 0
         self.RealmLV = 0
         self.FightPower = 0
+        self.FightPowerEx = 0
+        self.Score = 0
         self.AddScoreLen = 0
         self.AddScore = ""
         self.IsWin = 0
@@ -2382,6 +2563,8 @@
         length += 1
         length += 2
         length += 2
+        length += 4
+        length += 4
         length += 4
         length += 1
         length += len(self.AddScore)
@@ -2398,6 +2581,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.Score)
         data = CommFunc.WriteBYTE(data, self.AddScoreLen)
         data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore)
         data = CommFunc.WriteBYTE(data, self.IsWin)
@@ -2412,6 +2597,8 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d,
                                 AddScoreLen:%d,
                                 AddScore:%s,
                                 IsWin:%d,
@@ -2424,6 +2611,8 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.FightPower,
+                                self.FightPowerEx,
+                                self.Score,
                                 self.AddScoreLen,
                                 self.AddScore,
                                 self.IsWin,
@@ -2507,7 +2696,8 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
-    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
     data = None
 
@@ -2523,6 +2713,7 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
@@ -2533,6 +2724,7 @@
         self.LV = 0
         self.RealmLV = 0
         self.FightPower = 0
+        self.FightPowerEx = 0
         self.Score = 0
         return
 
@@ -2543,6 +2735,7 @@
         length += 1
         length += 2
         length += 2
+        length += 4
         length += 4
         length += 4
 
@@ -2556,6 +2749,7 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
         return data
 
@@ -2567,6 +2761,7 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 FightPower:%d,
+                                FightPowerEx:%d,
                                 Score:%d
                                 '''\
                                 %(
@@ -2576,6 +2771,7 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.FightPower,
+                                self.FightPowerEx,
                                 self.Score
                                 )
         return DumpString
@@ -3352,8 +3548,8 @@
     IsAlive = 0    #(BYTE IsAlive)// 是否存活
     RecordLen = 0    #(WORD RecordLen)// 长度
     KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
-    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒    
-    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒    
+    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒	
+    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒	
     data = None
 
     def __init__(self):
@@ -3792,7 +3988,7 @@
     EvolveLV = 0    #(BYTE EvolveLV)//进化等级
     WashLV = 0    #(BYTE WashLV)//洗练等级
     WashValueCount = 0    #(BYTE WashValueCount)
-    WashValueList = list()    #(vector<WORD> WashValueList)//洗练值
+    WashValueList = list()    #(vector<DWORD> WashValueList)//洗练值
     StoneIDCount = 0    #(BYTE StoneIDCount)
     StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
     ClassEquipCount = 0    #(BYTE ClassEquipCount)
@@ -3816,7 +4012,7 @@
         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)
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
             self.WashValueList.append(value)
         self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.StoneIDCount):
@@ -3858,7 +4054,7 @@
         length += 1
         length += 1
         length += 1
-        length += 2 * self.WashValueCount
+        length += 4 * self.WashValueCount
         length += 1
         length += 4 * self.StoneIDCount
         length += 1
@@ -3878,7 +4074,7 @@
         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.WriteDWORD(data, self.WashValueList[i])
         data = CommFunc.WriteBYTE(data, self.StoneIDCount)
         for i in range(self.StoneIDCount):
             data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
@@ -4318,7 +4514,7 @@
     Count = 0    #(DWORD Count)//数量
     IsBind = 0    #(BYTE IsBind)//是否绑定
     UserDataLen = 0    #(DWORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据    
+    UserData = ""    #(String UserData)//自定义数据	
     data = None
 
     def __init__(self):
@@ -4559,7 +4755,7 @@
     Name = ""    #(char Name[33])
     LV = 0    #(DWORD LV)//等级
     Job = 0    #(BYTE Job)
-    RealmLV = 0    #(WORD RealmLV)//境界    
+    RealmLV = 0    #(WORD RealmLV)//境界	
     data = None
 
     def __init__(self):
@@ -6650,7 +6846,7 @@
 class  tagFamilyArrestOverStateInfo(Structure):
     Head = tagHead()
     Count = 0    #(WORD Count)
-    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count    
+    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count	
     data = None
 
     def __init__(self):
@@ -7110,6 +7306,994 @@
 
 
 #------------------------------------------------------
+# B3 24 喜糖列表 #tagGCCandyList
+
+class  tagGCCandyInfo(Structure):
+    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
+    NameALen = 0    #(BYTE NameALen)
+    PlayerNameA = ""    #(String PlayerNameA)
+    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
+    NameBLen = 0    #(BYTE NameBLen)
+    PlayerNameB = ""    #(String PlayerNameB)
+    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
+    MarryTime = 0    #(DWORD MarryTime)// 成亲时间戳,秒
+    EndTime = 0    #(DWORD EndTime)// 结束时间戳,秒
+    Prosperity = 0    #(DWORD Prosperity)// 当前繁荣度
+    FireworksTotalBuyCount = 0    #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数
+    FireworksPlayerBuyCount = 0    #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数
+    PlayerFreeEatCandyCount = 0    #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
+        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
+        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerIDA = 0
+        self.NameALen = 0
+        self.PlayerNameA = ""
+        self.PlayerIDB = 0
+        self.NameBLen = 0
+        self.PlayerNameB = ""
+        self.BridePriceID = 0
+        self.MarryTime = 0
+        self.EndTime = 0
+        self.Prosperity = 0
+        self.FireworksTotalBuyCount = 0
+        self.FireworksPlayerBuyCount = 0
+        self.PlayerFreeEatCandyCount = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerNameA)
+        length += 4
+        length += 1
+        length += len(self.PlayerNameB)
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
+        data = CommFunc.WriteBYTE(data, self.NameALen)
+        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
+        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
+        data = CommFunc.WriteBYTE(data, self.NameBLen)
+        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
+        data = CommFunc.WriteBYTE(data, self.BridePriceID)
+        data = CommFunc.WriteDWORD(data, self.MarryTime)
+        data = CommFunc.WriteDWORD(data, self.EndTime)
+        data = CommFunc.WriteDWORD(data, self.Prosperity)
+        data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount)
+        data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount)
+        data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerIDA:%d,
+                                NameALen:%d,
+                                PlayerNameA:%s,
+                                PlayerIDB:%d,
+                                NameBLen:%d,
+                                PlayerNameB:%s,
+                                BridePriceID:%d,
+                                MarryTime:%d,
+                                EndTime:%d,
+                                Prosperity:%d,
+                                FireworksTotalBuyCount:%d,
+                                FireworksPlayerBuyCount:%d,
+                                PlayerFreeEatCandyCount:%d
+                                '''\
+                                %(
+                                self.PlayerIDA,
+                                self.NameALen,
+                                self.PlayerNameA,
+                                self.PlayerIDB,
+                                self.NameBLen,
+                                self.PlayerNameB,
+                                self.BridePriceID,
+                                self.MarryTime,
+                                self.EndTime,
+                                self.Prosperity,
+                                self.FireworksTotalBuyCount,
+                                self.FireworksPlayerBuyCount,
+                                self.PlayerFreeEatCandyCount
+                                )
+        return DumpString
+
+
+class  tagGCCandyList(Structure):
+    Head = tagHead()
+    CandyCount = 0    #(WORD CandyCount)
+    CandyInfoList = list()    #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x24
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.CandyCount):
+            temCandyInfoList = tagGCCandyInfo()
+            _pos = temCandyInfoList.ReadData(_lpData, _pos)
+            self.CandyInfoList.append(temCandyInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x24
+        self.CandyCount = 0
+        self.CandyInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.CandyCount):
+            length += self.CandyInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.CandyCount)
+        for i in range(self.CandyCount):
+            data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CandyCount:%d,
+                                CandyInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CandyCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCandyList=tagGCCandyList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList
+
+
+#------------------------------------------------------
+# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList
+
+class  tagGCCharmOfferBillboardData(Structure):
+    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
+    PlayerID = 0    #(DWORD PlayerID)// 玩家ID - 贡献者
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    CharmValue = 0    #(DWORD CharmValue)//贡献魅力值
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.OrderIndex = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.CharmValue = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.OrderIndex)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteDWORD(data, self.CharmValue)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                OrderIndex:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                CharmValue:%d
+                                '''\
+                                %(
+                                self.OrderIndex,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.CharmValue
+                                )
+        return DumpString
+
+
+class  tagGCCharmOfferBillboardDataList(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 魅力玩家ID
+    QueryType = 0    #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜
+    DataCount = 0    #(BYTE DataCount)
+    OfferBillboardDataList = list()    #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        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.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DataCount):
+            temOfferBillboardDataList = tagGCCharmOfferBillboardData()
+            _pos = temOfferBillboardDataList.ReadData(_lpData, _pos)
+            self.OfferBillboardDataList.append(temOfferBillboardDataList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x19
+        self.PlayerID = 0
+        self.QueryType = 0
+        self.DataCount = 0
+        self.OfferBillboardDataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 1
+        for i in range(self.DataCount):
+            length += self.OfferBillboardDataList[i].GetLength()
+
+        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.QueryType)
+        data = CommFunc.WriteBYTE(data, self.DataCount)
+        for i in range(self.DataCount):
+            data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                QueryType:%d,
+                                DataCount:%d,
+                                OfferBillboardDataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.QueryType,
+                                self.DataCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList
+
+
+#------------------------------------------------------
+# B3 26 伴侣信息 #tagGCCoupleInfo
+
+class  tagGCCoupleInfo(Structure):
+    Head = tagHead()
+    CoupleID = 0    #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取
+    NameLen = 0    #(BYTE NameLen)
+    CoupleName = ""    #(String CoupleName)
+    NewMarryTime = 0    #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算
+    MarryTime = 0    #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算
+    BridePriceState = 0    #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次
+    BreakRequestID = 0    #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求
+    BreakRequestTime = 0    #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期
+    PlayerBreakRequestTime = 0    #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x26
+        self.CoupleID = 0
+        self.NameLen = 0
+        self.CoupleName = ""
+        self.NewMarryTime = 0
+        self.MarryTime = 0
+        self.BridePriceState = 0
+        self.BreakRequestID = 0
+        self.BreakRequestTime = 0
+        self.PlayerBreakRequestTime = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.CoupleName)
+        length += 4
+        length += 4
+        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.CoupleID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.CoupleName)
+        data = CommFunc.WriteDWORD(data, self.NewMarryTime)
+        data = CommFunc.WriteDWORD(data, self.MarryTime)
+        data = CommFunc.WriteDWORD(data, self.BridePriceState)
+        data = CommFunc.WriteDWORD(data, self.BreakRequestID)
+        data = CommFunc.WriteDWORD(data, self.BreakRequestTime)
+        data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CoupleID:%d,
+                                NameLen:%d,
+                                CoupleName:%s,
+                                NewMarryTime:%d,
+                                MarryTime:%d,
+                                BridePriceState:%d,
+                                BreakRequestID:%d,
+                                BreakRequestTime:%d,
+                                PlayerBreakRequestTime:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CoupleID,
+                                self.NameLen,
+                                self.CoupleName,
+                                self.NewMarryTime,
+                                self.MarryTime,
+                                self.BridePriceState,
+                                self.BreakRequestID,
+                                self.BreakRequestTime,
+                                self.PlayerBreakRequestTime
+                                )
+        return DumpString
+
+
+m_NAtagGCCoupleInfo=tagGCCoupleInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo
+
+
+#------------------------------------------------------
+# B3 22 收到提亲信息 #tagGCMarryReqInfo
+
+class  tagGCMarryReqInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x22
+        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.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x22
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.BridePriceID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+
+        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.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.BridePriceID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                BridePriceID:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.BridePriceID
+                                )
+        return DumpString
+
+
+m_NAtagGCMarryReqInfo=tagGCMarryReqInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo
+
+
+#------------------------------------------------------
+# B3 21 提亲发送成功 #tagGCMarryReqOK
+
+class  tagGCMarryReqOK(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x21
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x21
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCMarryReqOK)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagGCMarryReqOK=tagGCMarryReqOK()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK
+
+
+#------------------------------------------------------
+# B3 23 提亲回应结果 #tagGCMarryResponseRet
+
+class  tagGCMarryResponseRet(Structure):
+    Head = tagHead()
+    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
+    NameALen = 0    #(BYTE NameALen)
+    PlayerNameA = ""    #(String PlayerNameA)
+    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
+    NameBLen = 0    #(BYTE NameBLen)
+    PlayerNameB = ""    #(String PlayerNameB)
+    IsOK = 0    #(BYTE IsOK)// 是否同意,0-否,1-是;  如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x23
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
+        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
+        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x23
+        self.PlayerIDA = 0
+        self.NameALen = 0
+        self.PlayerNameA = ""
+        self.PlayerIDB = 0
+        self.NameBLen = 0
+        self.PlayerNameB = ""
+        self.IsOK = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.PlayerNameA)
+        length += 4
+        length += 1
+        length += len(self.PlayerNameB)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
+        data = CommFunc.WriteBYTE(data, self.NameALen)
+        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
+        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
+        data = CommFunc.WriteBYTE(data, self.NameBLen)
+        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
+        data = CommFunc.WriteBYTE(data, self.IsOK)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerIDA:%d,
+                                NameALen:%d,
+                                PlayerNameA:%s,
+                                PlayerIDB:%d,
+                                NameBLen:%d,
+                                PlayerNameB:%s,
+                                IsOK:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerIDA,
+                                self.NameALen,
+                                self.PlayerNameA,
+                                self.PlayerIDB,
+                                self.NameBLen,
+                                self.PlayerNameB,
+                                self.IsOK
+                                )
+        return DumpString
+
+
+m_NAtagGCMarryResponseRet=tagGCMarryResponseRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet
+
+
+#------------------------------------------------------
+# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo
+
+class  tagGCPlayerCharmValueInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CharmValueTotal", c_int),    #当前魅力值 - 总
+                  ("CharmValueWeek", c_int),    #当前魅力值 - 周
+                  ("CharmValueDay", c_int),    #当前魅力值 - 日
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x25
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x25
+        self.CharmValueTotal = 0
+        self.CharmValueWeek = 0
+        self.CharmValueDay = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCPlayerCharmValueInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CharmValueTotal:%d,
+                                CharmValueWeek:%d,
+                                CharmValueDay:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CharmValueTotal,
+                                self.CharmValueWeek,
+                                self.CharmValueDay
+                                )
+        return DumpString
+
+
+m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo
+
+
+#------------------------------------------------------
+# B3 20 送礼物成功通知 #tagGCSendGiftsOKList
+
+class  tagGCSendGiftsOK(Structure):
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 赠送方玩家名
+    PlayerID = 0    #(DWORD PlayerID)// 赠送方玩家ID
+    GiftNum = 0    #(WORD GiftNum)// 赠送礼物编号
+    GiftCount = 0    #(DWORD GiftCount)// 赠送礼物数量
+    SendTime = 0    #(DWORD SendTime)// 赠送时间戳
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.NameLen = 0
+        self.Name = ""
+        self.PlayerID = 0
+        self.GiftNum = 0
+        self.GiftCount = 0
+        self.SendTime = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += len(self.Name)
+        length += 4
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteWORD(data, self.GiftNum)
+        data = CommFunc.WriteDWORD(data, self.GiftCount)
+        data = CommFunc.WriteDWORD(data, self.SendTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NameLen:%d,
+                                Name:%s,
+                                PlayerID:%d,
+                                GiftNum:%d,
+                                GiftCount:%d,
+                                SendTime:%d
+                                '''\
+                                %(
+                                self.NameLen,
+                                self.Name,
+                                self.PlayerID,
+                                self.GiftNum,
+                                self.GiftCount,
+                                self.SendTime
+                                )
+        return DumpString
+
+
+class  tagGCSendGiftsOKList(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)
+    SendGiftsOKList = list()    #(vector<tagGCSendGiftsOK> SendGiftsOKList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x20
+        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):
+            temSendGiftsOKList = tagGCSendGiftsOK()
+            _pos = temSendGiftsOKList.ReadData(_lpData, _pos)
+            self.SendGiftsOKList.append(temSendGiftsOKList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x20
+        self.Count = 0
+        self.SendGiftsOKList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.SendGiftsOKList[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.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                SendGiftsOKList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList
+
+
+#------------------------------------------------------
+# B3 14 社交人群伴侣信息 #tagGCSocialCouples
+
+class  tagGCSocialCouple(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    
+                  ("CoupleID", c_int),    #伴侣ID
+                  ]
+
+    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.PlayerID = 0
+        self.CoupleID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCSocialCouple)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 14 社交人群伴侣信息 //tagGCSocialCouples:
+                                PlayerID:%d,
+                                CoupleID:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.CoupleID
+                                )
+        return DumpString
+
+
+class  tagGCSocialCouples(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)
+    Player = list()    #(vector<tagGCSocialCouple> Player)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x14
+        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):
+            temPlayer = tagGCSocialCouple()
+            _pos = temPlayer.ReadData(_lpData, _pos)
+            self.Player.append(temPlayer)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x14
+        self.Count = 0
+        self.Player = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.Player[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.Player[i].GetLength(), self.Player[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                Player:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCSocialCouples=tagGCSocialCouples()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialCouples.Head.Cmd,m_NAtagGCSocialCouples.Head.SubCmd))] = m_NAtagGCSocialCouples
+
+
+#------------------------------------------------------
 #B3 01 添加社交对象 #tagGCAddSocialPlayer
 
 class  tagGCAddSocialPlayer(Structure):
@@ -7480,7 +8664,7 @@
     _pack_ = 1
     _fields_ = [
                   ("PlayerID", c_int),    
-                  ("SortValue", c_int),    
+                  ("SortValue", c_int),    # 亲密组时为亲密度
                   ]
 
     def __init__(self):
@@ -7517,7 +8701,7 @@
 
 class  tagGCGroupPlayers(Structure):
     Head = tagHead()
-    GroupType = 0    #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
+    GroupType = 0    #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 5亲密组
     Count = 0    #(WORD Count)
     Players = list()    #(vector<tagGCGroupPlayer> Players)//size = Count
     data = None
@@ -7717,7 +8901,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("PlayerID", c_int),    
-                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__    
+                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__	
                   ("Value", c_int),    
                   ]
 
@@ -7773,7 +8957,7 @@
 
 class  tagGCVoiceChat(Structure):
     Head = tagHead()
-    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域    
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域	
     SrcNameLen = 0    #(BYTE SrcNameLen)
     SrcName = ""    #(String SrcName)//size = SrcNameLen
     PlayerID = 0    #(DWORD PlayerID)
@@ -9513,7 +10697,7 @@
     ItemGUID = ""    #(char ItemGUID[40])
     AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
     AddTime = ""    #(char AddTime[19])//上架时间
-    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID    
+    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID	
     BidderPrice = 0    #(DWORD BidderPrice)//最高竞拍价格
     BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
     data = None
@@ -11104,6 +12288,290 @@
 
 
 #------------------------------------------------------
+# C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo
+
+class  tagGCCrossBattlefieldPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分
+    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.FightPowerEx,_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.FightPowerEx = 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.FightPowerEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.FightPowerEx
+                                )
+        return DumpString
+
+
+class  tagGCCrossBattlefieldBuyPlayer(Structure):
+    BuyPlayerID = 0    #(DWORD BuyPlayerID)//购买的玩家ID,即召集人
+    Faction = 0    #(BYTE Faction)//阵营 1-红;2-蓝
+    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
+    FactionPlayerCount = 0    #(BYTE FactionPlayerCount)
+    FactionPlayerList = list()    #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FactionPlayerCount):
+            temFactionPlayerList = tagGCCrossBattlefieldPlayer()
+            _pos = temFactionPlayerList.ReadData(_lpData, _pos)
+            self.FactionPlayerList.append(temFactionPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.BuyPlayerID = 0
+        self.Faction = 0
+        self.ServerOnly = 0
+        self.FactionPlayerCount = 0
+        self.FactionPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.FactionPlayerCount):
+            length += self.FactionPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.BuyPlayerID)
+        data = CommFunc.WriteBYTE(data, self.Faction)
+        data = CommFunc.WriteBYTE(data, self.ServerOnly)
+        data = CommFunc.WriteBYTE(data, self.FactionPlayerCount)
+        for i in range(self.FactionPlayerCount):
+            data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BuyPlayerID:%d,
+                                Faction:%d,
+                                ServerOnly:%d,
+                                FactionPlayerCount:%d,
+                                FactionPlayerList:%s
+                                '''\
+                                %(
+                                self.BuyPlayerID,
+                                self.Faction,
+                                self.ServerOnly,
+                                self.FactionPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossBattlefieldBuyHM(Structure):
+    Hour = 0    #(BYTE Hour)//战场开启时
+    Minute = 0    #(BYTE Minute)//战场开启分
+    BuyPlayerCount = 0    #(BYTE BuyPlayerCount)
+    BuyPlayerList = list()    #(vector<tagGCCrossBattlefieldBuyPlayer> BuyPlayerList)//购买本场次的玩家信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.BuyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BuyPlayerCount):
+            temBuyPlayerList = tagGCCrossBattlefieldBuyPlayer()
+            _pos = temBuyPlayerList.ReadData(_lpData, _pos)
+            self.BuyPlayerList.append(temBuyPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Hour = 0
+        self.Minute = 0
+        self.BuyPlayerCount = 0
+        self.BuyPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.BuyPlayerCount):
+            length += self.BuyPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Hour)
+        data = CommFunc.WriteBYTE(data, self.Minute)
+        data = CommFunc.WriteBYTE(data, self.BuyPlayerCount)
+        for i in range(self.BuyPlayerCount):
+            data = CommFunc.WriteString(data, self.BuyPlayerList[i].GetLength(), self.BuyPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Hour:%d,
+                                Minute:%d,
+                                BuyPlayerCount:%d,
+                                BuyPlayerList:%s
+                                '''\
+                                %(
+                                self.Hour,
+                                self.Minute,
+                                self.BuyPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossBattlefieldBuyInfo(Structure):
+    Head = tagHead()
+    HMCount = 0    #(BYTE HMCount)// 为0时清空重置,其他为增量更新
+    HMBuyList = list()    #(vector<tagGCCrossBattlefieldBuyHM> HMBuyList)//购买场次列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.HMCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.HMCount):
+            temHMBuyList = tagGCCrossBattlefieldBuyHM()
+            _pos = temHMBuyList.ReadData(_lpData, _pos)
+            self.HMBuyList.append(temHMBuyList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x09
+        self.HMCount = 0
+        self.HMBuyList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.HMCount):
+            length += self.HMBuyList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.HMCount)
+        for i in range(self.HMCount):
+            data = CommFunc.WriteString(data, self.HMBuyList[i].GetLength(), self.HMBuyList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                HMCount:%d,
+                                HMBuyList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.HMCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossBattlefieldBuyInfo=tagGCCrossBattlefieldBuyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBattlefieldBuyInfo.Head.Cmd,m_NAtagGCCrossBattlefieldBuyInfo.Head.SubCmd))] = m_NAtagGCCrossBattlefieldBuyInfo
+
+
+#------------------------------------------------------
 # C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo
 
 class  tagGCCrossBillboardData(Structure):
@@ -11379,8 +12847,8 @@
 
 class  tagGCCrossRealmPKBillboardInfo(Structure):
     Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 赛区ID    
-    SeasonID = 0    #(BYTE SeasonID)// 赛季ID    
+    ZoneID = 0    #(BYTE ZoneID)// 赛区ID	
+    SeasonID = 0    #(BYTE SeasonID)// 赛季ID	
     Count = 0    #(WORD Count)
     PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
     data = None
@@ -11466,7 +12934,8 @@
     PlayerName = ""    #(String PlayerName)// 跨服名字
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)
-    MaxHP = 0    #(DWORD MaxHP)// 默认满血
+    MaxHP = 0    #(DWORD MaxHP)// 默认满血,求余亿部分
+    MaxHPEx = 0    #(DWORD MaxHPEx)// 默认满血,整除亿部分
     MaxProDef = 0    #(DWORD MaxProDef)// 最大护盾
     data = None
 
@@ -11482,6 +12951,7 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
@@ -11492,6 +12962,7 @@
         self.Job = 0
         self.LV = 0
         self.MaxHP = 0
+        self.MaxHPEx = 0
         self.MaxProDef = 0
         return
 
@@ -11502,6 +12973,7 @@
         length += len(self.PlayerName)
         length += 1
         length += 2
+        length += 4
         length += 4
         length += 4
 
@@ -11515,6 +12987,7 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteDWORD(data, self.MaxHP)
+        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
         data = CommFunc.WriteDWORD(data, self.MaxProDef)
         return data
 
@@ -11526,6 +12999,7 @@
                                 Job:%d,
                                 LV:%d,
                                 MaxHP:%d,
+                                MaxHPEx:%d,
                                 MaxProDef:%d
                                 '''\
                                 %(
@@ -11535,6 +13009,7 @@
                                 self.Job,
                                 self.LV,
                                 self.MaxHP,
+                                self.MaxHPEx,
                                 self.MaxProDef
                                 )
         return DumpString
@@ -12108,6 +13583,501 @@
 
 
 #------------------------------------------------------
+# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo
+
+class  tagGCLuckyCloudBuyLotteryRec(Structure):
+    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
+    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 中奖玩家名
+    LotteryNum = 0    #(WORD LotteryNum)// 开奖号码
+    LotteryTime = 0    #(DWORD LotteryTime)// 开奖时间戳,秒
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.SuperItemID = 0
+        self.SuperItemCount = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.LotteryNum = 0
+        self.LotteryTime = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.SuperItemID)
+        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.LotteryNum)
+        data = CommFunc.WriteDWORD(data, self.LotteryTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                SuperItemID:%d,
+                                SuperItemCount:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                LotteryNum:%d,
+                                LotteryTime:%d
+                                '''\
+                                %(
+                                self.SuperItemID,
+                                self.SuperItemCount,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.LotteryNum,
+                                self.LotteryTime
+                                )
+        return DumpString
+
+
+class  tagGCLuckyCloudBuyLotteryRecInfo(Structure):
+    Head = tagHead()
+    ZoneCount = 0    #(BYTE ZoneCount)// 分区数
+    ZoneIDList = list()    #(vector<BYTE> ZoneIDList)// 所有分区ID列表
+    ZoneID = 0    #(BYTE ZoneID)// 返回记录分区ID
+    Count = 0    #(WORD Count)
+    LotteryRecList = list()    #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x14
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ZoneCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.ZoneIDList.append(value)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temLotteryRecList = tagGCLuckyCloudBuyLotteryRec()
+            _pos = temLotteryRecList.ReadData(_lpData, _pos)
+            self.LotteryRecList.append(temLotteryRecList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x14
+        self.ZoneCount = 0
+        self.ZoneIDList = list()
+        self.ZoneID = 0
+        self.Count = 0
+        self.LotteryRecList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.ZoneCount
+        length += 1
+        length += 2
+        for i in range(self.Count):
+            length += self.LotteryRecList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneCount)
+        for i in range(self.ZoneCount):
+            data = CommFunc.WriteBYTE(data, self.ZoneIDList[i])
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneCount:%d,
+                                ZoneIDList:%s,
+                                ZoneID:%d,
+                                Count:%d,
+                                LotteryRecList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneCount,
+                                "...",
+                                self.ZoneID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo
+
+
+#------------------------------------------------------
+# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo
+
+class  tagGCLuckyCloudBuyNumRec(Structure):
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    BuyNum = 0    #(WORD BuyNum)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.BuyNum = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.BuyNum)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NameLen:%d,
+                                PlayerName:%s,
+                                BuyNum:%d
+                                '''\
+                                %(
+                                self.NameLen,
+                                self.PlayerName,
+                                self.BuyNum
+                                )
+        return DumpString
+
+
+class  tagGCLuckyCloudBuyNumRecInfo(Structure):
+    Head = tagHead()
+    RemainCount = 0    #(WORD RemainCount)// 开奖剩余份数
+    Count = 0    #(WORD Count)
+    BuyNumRecList = list()    #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temBuyNumRecList = tagGCLuckyCloudBuyNumRec()
+            _pos = temBuyNumRecList.ReadData(_lpData, _pos)
+            self.BuyNumRecList.append(temBuyNumRecList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x13
+        self.RemainCount = 0
+        self.Count = 0
+        self.BuyNumRecList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 2
+        for i in range(self.Count):
+            length += self.BuyNumRecList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.RemainCount)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RemainCount:%d,
+                                Count:%d,
+                                BuyNumRecList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RemainCount,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo
+
+
+#------------------------------------------------------
+# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo
+
+class  tagGCLuckyCloudBuyRoundItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    # 是否拍品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCLuckyCloudBuyRoundItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagGCLuckyCloudBuyRoundInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 所属分区ID
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    RoundID = 0    #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存
+    RoundNum = 0    #(BYTE RoundNum)// 今日第几轮
+    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
+    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
+    SuperItemMoneyType = 0    #(BYTE SuperItemMoneyType)// 大奖价值货币类型
+    SuperItemMoneyValue = 0    #(DWORD SuperItemMoneyValue)// 大奖价值
+    LVLimit = 0    #(WORD LVLimit)//开启等级
+    BaseItemCount = 0    #(BYTE BaseItemCount)// 每次购买固定奖励物品数
+    BaseItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息
+    RandItemCount = 0    #(BYTE RandItemCount)// 每次购买随机奖励物品数
+    RandItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LVLimit,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BaseItemCount):
+            temBaseItemList = tagGCLuckyCloudBuyRoundItem()
+            _pos = temBaseItemList.ReadData(_lpData, _pos)
+            self.BaseItemList.append(temBaseItemList)
+        self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RandItemCount):
+            temRandItemList = tagGCLuckyCloudBuyRoundItem()
+            _pos = temRandItemList.ReadData(_lpData, _pos)
+            self.RandItemList.append(temRandItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x12
+        self.ZoneID = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.RoundID = 0
+        self.RoundNum = 0
+        self.SuperItemID = 0
+        self.SuperItemCount = 0
+        self.SuperItemMoneyType = 0
+        self.SuperItemMoneyValue = 0
+        self.LVLimit = 0
+        self.BaseItemCount = 0
+        self.BaseItemList = list()
+        self.RandItemCount = 0
+        self.RandItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 4
+        length += 1
+        length += 4
+        length += 1
+        length += 1
+        length += 4
+        length += 2
+        length += 1
+        for i in range(self.BaseItemCount):
+            length += self.BaseItemList[i].GetLength()
+        length += 1
+        for i in range(self.RandItemCount):
+            length += self.RandItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteDWORD(data, self.RoundID)
+        data = CommFunc.WriteBYTE(data, self.RoundNum)
+        data = CommFunc.WriteDWORD(data, self.SuperItemID)
+        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+        data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType)
+        data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue)
+        data = CommFunc.WriteWORD(data, self.LVLimit)
+        data = CommFunc.WriteBYTE(data, self.BaseItemCount)
+        for i in range(self.BaseItemCount):
+            data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RandItemCount)
+        for i in range(self.RandItemCount):
+            data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                RoundID:%d,
+                                RoundNum:%d,
+                                SuperItemID:%d,
+                                SuperItemCount:%d,
+                                SuperItemMoneyType:%d,
+                                SuperItemMoneyValue:%d,
+                                LVLimit:%d,
+                                BaseItemCount:%d,
+                                BaseItemList:%s,
+                                RandItemCount:%d,
+                                RandItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.RoundID,
+                                self.RoundNum,
+                                self.SuperItemID,
+                                self.SuperItemCount,
+                                self.SuperItemMoneyType,
+                                self.SuperItemMoneyValue,
+                                self.LVLimit,
+                                self.BaseItemCount,
+                                "...",
+                                self.RandItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo
+
+
+#------------------------------------------------------
 #A1 25 请求切换地图失败#tagMCChangeMapFail
 
 class  tagMCChangeMapFail(Structure):
@@ -12397,7 +14367,7 @@
     BackpackLV = 0    #(BYTE BackpackLV)//背包等级
     WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
     TeamID = 0    #(DWORD TeamID)//队伍ID
-    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
+    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票		类型为MoneyType
     UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
     AttackMode = 0    #(BYTE AttackMode)//攻击模式
     LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
@@ -12437,6 +14407,7 @@
     ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
     ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
     ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
+    HPEx = 0    #(DWORD HPEx)//当前血量 超过E的记录
     data = None
 
     def __init__(self):
@@ -12542,6 +14513,7 @@
         self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -12643,6 +14615,7 @@
         self.ExAttr18 = 0
         self.ExAttr19 = 0
         self.ExAttr20 = 0
+        self.HPEx = 0
         return
 
     def GetLength(self):
@@ -12735,6 +14708,7 @@
         length += 4
         length += 4
         length += 15
+        length += 4
         length += 4
         length += 4
         length += 4
@@ -12842,6 +14816,7 @@
         data = CommFunc.WriteDWORD(data, self.ExAttr18)
         data = CommFunc.WriteDWORD(data, self.ExAttr19)
         data = CommFunc.WriteDWORD(data, self.ExAttr20)
+        data = CommFunc.WriteDWORD(data, self.HPEx)
         return data
 
     def OutputString(self):
@@ -12940,7 +14915,8 @@
                                 ExAttr17:%d,
                                 ExAttr18:%d,
                                 ExAttr19:%d,
-                                ExAttr20:%d
+                                ExAttr20:%d,
+                                HPEx:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -13037,7 +15013,8 @@
                                 self.ExAttr17,
                                 self.ExAttr18,
                                 self.ExAttr19,
-                                self.ExAttr20
+                                self.ExAttr20,
+                                self.HPEx
                                 )
         return DumpString
 
@@ -15374,6 +17351,87 @@
 
 
 #------------------------------------------------------
+# A3 C4 装备神装拆解结果 #tagMCEquipDecomposeRet
+
+class  tagMCEquipDecomposeRet(Structure):
+    Head = tagHead()
+    DecomposeEquipIDCount = 0    #(BYTE DecomposeEquipIDCount)// 已分解的装备个数
+    DecomposeEquipIDList = list()    #(vector<DWORD> DecomposeEquipIDList)// 已分解的神装装备ID列表
+    GetItemLen = 0    #(WORD GetItemLen)
+    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] 
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC4
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.DecomposeEquipIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DecomposeEquipIDCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.DecomposeEquipIDList.append(value)
+        self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC4
+        self.DecomposeEquipIDCount = 0
+        self.DecomposeEquipIDList = list()
+        self.GetItemLen = 0
+        self.GetItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.DecomposeEquipIDCount
+        length += 2
+        length += len(self.GetItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.DecomposeEquipIDCount)
+        for i in range(self.DecomposeEquipIDCount):
+            data = CommFunc.WriteDWORD(data, self.DecomposeEquipIDList[i])
+        data = CommFunc.WriteWORD(data, self.GetItemLen)
+        data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                DecomposeEquipIDCount:%d,
+                                DecomposeEquipIDList:%s,
+                                GetItemLen:%d,
+                                GetItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.DecomposeEquipIDCount,
+                                "...",
+                                self.GetItemLen,
+                                self.GetItemData
+                                )
+        return DumpString
+
+
+m_NAtagMCEquipDecomposeRet=tagMCEquipDecomposeRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeRet.Head.Cmd,m_NAtagMCEquipDecomposeRet.Head.SubCmd))] = m_NAtagMCEquipDecomposeRet
+
+
+#------------------------------------------------------
 # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
 
 class  tagMCEquipPartStar(Structure):
@@ -15591,7 +17649,7 @@
 
 
 class  tagMCEquipPartXLAttr(Structure):
-    EquipPlace = 0    #(BYTE EquipPlace)// 装备位    
+    EquipPlace = 0    #(BYTE EquipPlace)// 装备位	
     XLAttrLV = 0    #(BYTE XLAttrLV)// 洗练等级
     XLAttrCnt = 0    #(BYTE XLAttrCnt)// 属性条数
     XLAttrList = list()    #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增
@@ -16081,6 +18139,62 @@
 
 m_NAtagMCFamilyActivityInfo=tagMCFamilyActivityInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityInfo.Head.Cmd,m_NAtagMCFamilyActivityInfo.Head.SubCmd))] = m_NAtagMCFamilyActivityInfo
+
+
+#------------------------------------------------------
+# A3 54 法器信息 #tagMCFaQiInfo
+
+class  tagMCFaQiInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LV", c_ubyte),    #等阶
+                  ("EatItemCount", c_int),    #当前阶已吃丹个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x54
+        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 = 0x54
+        self.LV = 0
+        self.EatItemCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFaQiInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 54 法器信息 //tagMCFaQiInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                LV:%d,
+                                EatItemCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.LV,
+                                self.EatItemCount
+                                )
+        return DumpString
+
+
+m_NAtagMCFaQiInfo=tagMCFaQiInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
 
 
 #------------------------------------------------------
@@ -17134,6 +19248,153 @@
 
 
 #------------------------------------------------------
+# A3 38 投资理财信息 #tagMCInvestInfo
+
+class  tagMCInvestInfo(Structure):
+    Head = tagHead()
+    InvestType = 0    #(BYTE InvestType)// 投资类型
+    CurDay = 0    #(WORD CurDay)// 当前天数,投资第一天为1
+    ValueCount = 0    #(BYTE ValueCount)
+    RewardValue = list()    #(vector<DWORD> RewardValue)//领奖记录值,按投资回报索引位记录是否已领取
+    ProgressValue = list()    #(vector<DWORD> ProgressValue)//投资相关可领取进度记录值:  9登录投资-记录已登录天数;11Boss投资-按回报索引位记录是否已击杀该boss
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x38
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.InvestType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CurDay,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ValueCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.RewardValue.append(value)
+        for i in range(self.ValueCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.ProgressValue.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x38
+        self.InvestType = 0
+        self.CurDay = 0
+        self.ValueCount = 0
+        self.RewardValue = list()
+        self.ProgressValue = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2
+        length += 1
+        length += 4 * self.ValueCount
+        length += 4 * self.ValueCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.InvestType)
+        data = CommFunc.WriteWORD(data, self.CurDay)
+        data = CommFunc.WriteBYTE(data, self.ValueCount)
+        for i in range(self.ValueCount):
+            data = CommFunc.WriteDWORD(data, self.RewardValue[i])
+        for i in range(self.ValueCount):
+            data = CommFunc.WriteDWORD(data, self.ProgressValue[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                InvestType:%d,
+                                CurDay:%d,
+                                ValueCount:%d,
+                                RewardValue:%s,
+                                ProgressValue:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.InvestType,
+                                self.CurDay,
+                                self.ValueCount,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCInvestInfo=tagMCInvestInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCInvestInfo.Head.Cmd,m_NAtagMCInvestInfo.Head.SubCmd))] = m_NAtagMCInvestInfo
+
+
+#------------------------------------------------------
+# A3 55 炼体信息 #tagMCLianTiInfo
+
+class  tagMCLianTiInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LianTiLV", c_ubyte),    #炼体等级
+                  ("EatItemCount", c_int),    #当前等级已吃丹个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x55
+        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 = 0x55
+        self.LianTiLV = 0
+        self.EatItemCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCLianTiInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 55 炼体信息 //tagMCLianTiInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                LianTiLV:%d,
+                                EatItemCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.LianTiLV,
+                                self.EatItemCount
+                                )
+        return DumpString
+
+
+m_NAtagMCLianTiInfo=tagMCLianTiInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLianTiInfo.Cmd,m_NAtagMCLianTiInfo.SubCmd))] = m_NAtagMCLianTiInfo
+
+
+#------------------------------------------------------
 # A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo
 
 class  tagMCMagicWeaponInfo(Structure):
@@ -17709,7 +19970,8 @@
 
 class  tagMCModuleFightPowerInfo(Structure):
     Head = tagHead()
-    TotalFightPower = 0    #(DWORD TotalFightPower)//总战斗力
+    TotalFightPower = 0    #(DWORD TotalFightPower)//总战斗力,求余亿部分
+    TotalFightPoweEx = 0    #(DWORD TotalFightPoweEx)//总战斗力,整除亿部分,1代表1亿
     MFPCnt = 0    #(BYTE MFPCnt)//模块战斗力总数
     MFPList = list()    #(vector<tagMCModuleFightPower> MFPList)
     data = None
@@ -17724,6 +19986,7 @@
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
         self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TotalFightPoweEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MFPCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.MFPCnt):
             temMFPList = tagMCModuleFightPower()
@@ -17737,6 +20000,7 @@
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0xA1
         self.TotalFightPower = 0
+        self.TotalFightPoweEx = 0
         self.MFPCnt = 0
         self.MFPList = list()
         return
@@ -17744,6 +20008,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 4
         length += 4
         length += 1
         for i in range(self.MFPCnt):
@@ -17755,6 +20020,7 @@
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteDWORD(data, self.TotalFightPower)
+        data = CommFunc.WriteDWORD(data, self.TotalFightPoweEx)
         data = CommFunc.WriteBYTE(data, self.MFPCnt)
         for i in range(self.MFPCnt):
             data = CommFunc.WriteString(data, self.MFPList[i].GetLength(), self.MFPList[i].GetBuffer())
@@ -17764,12 +20030,14 @@
         DumpString = '''
                                 Head:%s,
                                 TotalFightPower:%d,
+                                TotalFightPoweEx:%d,
                                 MFPCnt:%d,
                                 MFPList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.TotalFightPower,
+                                self.TotalFightPoweEx,
                                 self.MFPCnt,
                                 "..."
                                 )
@@ -18078,7 +20346,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Record", c_ubyte),    #0-未领取 1-已领取    
+                  ("Record", c_ubyte),    #0-未领取 1-已领取	
                   ]
 
     def __init__(self):
@@ -19872,60 +22140,98 @@
 #A3 01 坐骑培养信息 #tagTrainHorseData
 
 class  tagTrainHorseData(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LV", c_ubyte),    #等阶
-                  ("EatItemCount", c_int),    #当前阶已吃丹个数
-                  ("SkinPlusState", c_int),    #幻化激活状态,按位存储是否激活,幻化编号ID对应位
-                  ]
+    Head = tagHead()
+    LV = 0    #(BYTE LV)//等阶
+    EatItemCount = 0    #(DWORD EatItemCount)//当前阶已吃丹个数
+    SkinPlusState = 0    #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位
+    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
+    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
+    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x01
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x01
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.EatItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SkinPlusState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainLVList.append(value)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainItemCountList.append(value)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x01
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x01
         self.LV = 0
         self.EatItemCount = 0
         self.SkinPlusState = 0
+        self.TrainTypes = 0
+        self.TrainLVList = list()
+        self.TrainItemCountList = list()
         return
 
     def GetLength(self):
-        return sizeof(tagTrainHorseData)
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        length += 4 * self.TrainTypes
+        length += 4 * self.TrainTypes
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.EatItemCount)
+        data = CommFunc.WriteDWORD(data, self.SkinPlusState)
+        data = CommFunc.WriteBYTE(data, self.TrainTypes)
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
+        return data
 
     def OutputString(self):
-        DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData:
-                                Cmd:%s,
-                                SubCmd:%s,
+        DumpString = '''
+                                Head:%s,
                                 LV:%d,
                                 EatItemCount:%d,
-                                SkinPlusState:%d
+                                SkinPlusState:%d,
+                                TrainTypes:%d,
+                                TrainLVList:%s,
+                                TrainItemCountList:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.Head.OutputString(),
                                 self.LV,
                                 self.EatItemCount,
-                                self.SkinPlusState
+                                self.SkinPlusState,
+                                self.TrainTypes,
+                                "...",
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagTrainHorseData=tagTrainHorseData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Cmd,m_NAtagTrainHorseData.SubCmd))] = m_NAtagTrainHorseData
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Head.Cmd,m_NAtagTrainHorseData.Head.SubCmd))] = m_NAtagTrainHorseData
 
 
 #------------------------------------------------------
@@ -20720,6 +23026,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("HasSendGold", c_int),    # 已用额度
+                  ("ServerGrabCnt", c_int),    # 全服红包已抢次数
                   ]
 
     def __init__(self):
@@ -20737,6 +23044,7 @@
         self.Cmd = 0xA5
         self.SubCmd = 0x05
         self.HasSendGold = 0
+        self.ServerGrabCnt = 0
         return
 
     def GetLength(self):
@@ -20749,12 +23057,14 @@
         DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                HasSendGold:%d
+                                HasSendGold:%d,
+                                ServerGrabCnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.HasSendGold
+                                self.HasSendGold,
+                                self.ServerGrabCnt
                                 )
         return DumpString
 
@@ -22719,7 +25029,7 @@
     PlayerID = 0    #(DWORD PlayerID)//玩家ID
     EquipClassLV = 0    #(BYTE EquipClassLV)
     ItemDataSize = 0    #(WORD ItemDataSize)
-    ItemData = ""    #(String ItemData)//物品记录    
+    ItemData = ""    #(String ItemData)//物品记录	
     data = None
 
     def __init__(self):
@@ -23018,7 +25328,7 @@
     ItemDataSize = 0    #(DWORD ItemDataSize)
     ItemData = ""    #(String ItemData)//物品记录
     PlusDataSize = 0    #(DWORD PlusDataSize)
-    PlusData = ""    #(String PlusData)//扩展记录    
+    PlusData = ""    #(String PlusData)//扩展记录	
     data = None
 
     def __init__(self):
@@ -23166,6 +25476,7 @@
     _fields_ = [
                   ("RefreshType", c_ubyte),    
                   ("Value", c_int),    
+                  ("ValueEx", c_int),    
                   ]
 
     def __init__(self):
@@ -23180,6 +25491,7 @@
     def Clear(self):
         self.RefreshType = 0
         self.Value = 0
+        self.ValueEx = 0
         return
 
     def GetLength(self):
@@ -23191,11 +25503,13 @@
     def OutputString(self):
         DumpString = '''//A7 09 周围对象刷新合并包 //tagObjInfoListRefresh:
                                 RefreshType:%d,
-                                Value:%d
+                                Value:%d,
+                                ValueEx:%d
                                 '''\
                                 %(
                                 self.RefreshType,
-                                self.Value
+                                self.Value,
+                                self.ValueEx
                                 )
         return DumpString
 
@@ -23508,6 +25822,90 @@
 
 
 #------------------------------------------------------
+# A8 18 灵器培养信息 #tagMCLingQiTrainInfo
+
+class  tagMCLingQiTrainInfo(Structure):
+    Head = tagHead()
+    EquipPlace = 0    #(BYTE EquipPlace)//灵器装备位
+    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
+    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
+    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.EquipPlace,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainLVList.append(value)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainItemCountList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x18
+        self.EquipPlace = 0
+        self.TrainTypes = 0
+        self.TrainLVList = list()
+        self.TrainItemCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4 * self.TrainTypes
+        length += 4 * self.TrainTypes
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.EquipPlace)
+        data = CommFunc.WriteBYTE(data, self.TrainTypes)
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EquipPlace:%d,
+                                TrainTypes:%d,
+                                TrainLVList:%s,
+                                TrainItemCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.EquipPlace,
+                                self.TrainTypes,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCLingQiTrainInfo=tagMCLingQiTrainInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiTrainInfo.Head.Cmd,m_NAtagMCLingQiTrainInfo.Head.SubCmd))] = m_NAtagMCLingQiTrainInfo
+
+
+#------------------------------------------------------
 # A8 14 合成结果通知 #tagMCMakeItemAnswer
 
 class  tagMCMakeItemAnswer(Structure):
@@ -23515,7 +25913,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("MakeType", c_ubyte),    #类型        TMakeItemType
+                  ("MakeType", c_ubyte),    #类型		TMakeItemType
                   ("Result", c_ubyte),    #是否成功
                   ("MakeItemID", c_int),    #合成的物品ID
                   ]
@@ -23935,6 +26333,83 @@
 
 
 #------------------------------------------------------
+# A8 17 宠物培养信息 #tagMCPetTrainInfo
+
+class  tagMCPetTrainInfo(Structure):
+    Head = tagHead()
+    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
+    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
+    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x17
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainLVList.append(value)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainItemCountList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x17
+        self.TrainTypes = 0
+        self.TrainLVList = list()
+        self.TrainItemCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.TrainTypes
+        length += 4 * self.TrainTypes
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.TrainTypes)
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TrainTypes:%d,
+                                TrainLVList:%s,
+                                TrainItemCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TrainTypes,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCPetTrainInfo=tagMCPetTrainInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetTrainInfo.Head.Cmd,m_NAtagMCPetTrainInfo.Head.SubCmd))] = m_NAtagMCPetTrainInfo
+
+
+#------------------------------------------------------
 # A8 02 通知NPC商店物品今日已购买次数 #tagMCShopItemDayBuyCntInfo
 
 class  tagMCShopItemDayBuyCnt(Structure):
@@ -24179,7 +26654,7 @@
 
 class  tagMCActCollectWordsExchangeItem(Structure):
     ExchangeNum = 0    #(BYTE ExchangeNum)//兑换编号
-    ExchangeCountMax = 0    #(BYTE ExchangeCountMax)//最大兑换次数,0不限制
+    ExchangeCountMax = 0    #(WORD ExchangeCountMax)//最大兑换次数,0不限制
     ItemID = 0    #(DWORD ItemID)//目标物品
     ItemCount = 0    #(WORD ItemCount)
     IsBind = 0    #(BYTE IsBind)
@@ -24194,7 +26669,7 @@
     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.ExchangeCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -24218,7 +26693,7 @@
     def GetLength(self):
         length = 0
         length += 1
-        length += 1
+        length += 2
         length += 4
         length += 2
         length += 1
@@ -24231,7 +26706,7 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteBYTE(data, self.ExchangeNum)
-        data = CommFunc.WriteBYTE(data, self.ExchangeCountMax)
+        data = CommFunc.WriteWORD(data, self.ExchangeCountMax)
         data = CommFunc.WriteDWORD(data, self.ItemID)
         data = CommFunc.WriteWORD(data, self.ItemCount)
         data = CommFunc.WriteBYTE(data, self.IsBind)
@@ -24479,6 +26954,285 @@
 
 
 #------------------------------------------------------
+# AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo
+
+class  tagMCActGarbageSortingInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x55
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x55
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.ResetType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+
+        return length
+
+    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.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                ResetType:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.ResetType
+                                )
+        return DumpString
+
+
+m_NAtagMCActGarbageSortingInfo=tagMCActGarbageSortingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingInfo.Head.Cmd,m_NAtagMCActGarbageSortingInfo.Head.SubCmd))] = m_NAtagMCActGarbageSortingInfo
+
+
+#------------------------------------------------------
+# AA 57 垃圾收集活动分类结果 #tagMCActGarbageSortingResult
+
+class  tagMCActGarbageSortingResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ("GarbageSortingType", c_ubyte),    #垃圾分类类型
+                  ("IsRight", c_ubyte),    #是否正确
+                  ("AddEnvValue", c_int),    #增加环保值
+                  ("HisEnvValueTotal", c_int),    # 当前活动累计获得环保值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x57
+        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 = 0x57
+        self.ActNum = 0
+        self.GarbageSortingType = 0
+        self.IsRight = 0
+        self.AddEnvValue = 0
+        self.HisEnvValueTotal = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActGarbageSortingResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 57 垃圾收集活动分类结果 //tagMCActGarbageSortingResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                GarbageSortingType:%d,
+                                IsRight:%d,
+                                AddEnvValue:%d,
+                                HisEnvValueTotal:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.GarbageSortingType,
+                                self.IsRight,
+                                self.AddEnvValue,
+                                self.HisEnvValueTotal
+                                )
+        return DumpString
+
+
+m_NAtagMCActGarbageSortingResult=tagMCActGarbageSortingResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingResult.Cmd,m_NAtagMCActGarbageSortingResult.SubCmd))] = m_NAtagMCActGarbageSortingResult
+
+
+#------------------------------------------------------
+# AA 56 垃圾收集活动任务进度信息 #tagMCActGarbageTaskInfo
+
+class  tagMCActGarbageTask(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GarbageTaskID", c_ubyte),    #垃圾任务ID
+                  ("GarbageTaskValue", c_int),    #当前进度值,一直累加
+                  ("GarbageTaskFinishCount", c_int),    #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
+                  ]
+
+    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.GarbageTaskID = 0
+        self.GarbageTaskValue = 0
+        self.GarbageTaskFinishCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActGarbageTask)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 56 垃圾收集活动任务进度信息 //tagMCActGarbageTaskInfo:
+                                GarbageTaskID:%d,
+                                GarbageTaskValue:%d,
+                                GarbageTaskFinishCount:%d
+                                '''\
+                                %(
+                                self.GarbageTaskID,
+                                self.GarbageTaskValue,
+                                self.GarbageTaskFinishCount
+                                )
+        return DumpString
+
+
+class  tagMCActGarbageTaskInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    HisEnvValueTotal = 0    #(DWORD HisEnvValueTotal)// 当前活动累计获得环保值
+    GarbageTaskCount = 0    #(BYTE GarbageTaskCount)//任务数
+    GarbageTaskList = list()    #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x56
+        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.HisEnvValueTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GarbageTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GarbageTaskCount):
+            temGarbageTaskList = tagMCActGarbageTask()
+            _pos = temGarbageTaskList.ReadData(_lpData, _pos)
+            self.GarbageTaskList.append(temGarbageTaskList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x56
+        self.ActNum = 0
+        self.HisEnvValueTotal = 0
+        self.GarbageTaskCount = 0
+        self.GarbageTaskList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 1
+        for i in range(self.GarbageTaskCount):
+            length += self.GarbageTaskList[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.WriteDWORD(data, self.HisEnvValueTotal)
+        data = CommFunc.WriteBYTE(data, self.GarbageTaskCount)
+        for i in range(self.GarbageTaskCount):
+            data = CommFunc.WriteString(data, self.GarbageTaskList[i].GetLength(), self.GarbageTaskList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                HisEnvValueTotal:%d,
+                                GarbageTaskCount:%d,
+                                GarbageTaskList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.HisEnvValueTotal,
+                                self.GarbageTaskCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActGarbageTaskInfo=tagMCActGarbageTaskInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageTaskInfo.Head.Cmd,m_NAtagMCActGarbageTaskInfo.Head.SubCmd))] = m_NAtagMCActGarbageTaskInfo
+
+
+#------------------------------------------------------
 # AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo
 
 class  tagMCActGrowupBuyCTGItem(Structure):
@@ -24642,6 +27396,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
     GroupCount = 0    #(BYTE GroupCount)// 循环购买礼包组数
     GroupList = list()    #(vector<tagMCActGrowupBuyGroup> GroupList)//循环购买礼包组列表
     data = None
@@ -24657,6 +27412,7 @@
         _pos = self.Head.ReadData(_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.GroupCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.GroupCount):
             temGroupList = tagMCActGrowupBuyGroup()
@@ -24671,6 +27427,7 @@
         self.Head.SubCmd = 0x31
         self.StartDate = ""
         self.EndtDate = ""
+        self.LimitLV = 0
         self.GroupCount = 0
         self.GroupList = list()
         return
@@ -24680,6 +27437,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.GroupCount):
             length += self.GroupList[i].GetLength()
@@ -24691,6 +27449,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.GroupCount)
         for i in range(self.GroupCount):
             data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
@@ -24701,6 +27460,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                LimitLV:%d,
                                 GroupCount:%d,
                                 GroupList:%s
                                 '''\
@@ -24708,6 +27468,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.LimitLV,
                                 self.GroupCount,
                                 "..."
                                 )
@@ -24716,6 +27477,148 @@
 
 m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo
+
+
+#------------------------------------------------------
+# AA 54 骑宠盛宴活动信息 #tagMCActHorsePetFeastInfo
+
+class  tagMCActHorsePetFeastTime(Structure):
+    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
+    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.StartTime = ""
+        self.EndtTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 5
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 5, self.StartTime)
+        data = CommFunc.WriteString(data, 5, self.EndtTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                StartTime:%s,
+                                EndtTime:%s
+                                '''\
+                                %(
+                                self.StartTime,
+                                self.EndtTime
+                                )
+        return DumpString
+
+
+class  tagMCActHorsePetFeastInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    TimeCount = 0    #(BYTE TimeCount)
+    ActTimeList = list()    #(vector<tagMCActHorsePetFeastTime> ActTimeList)// 活动时间 H:M 列表
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x54
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.TimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TimeCount):
+            temActTimeList = tagMCActHorsePetFeastTime()
+            _pos = temActTimeList.ReadData(_lpData, _pos)
+            self.ActTimeList.append(temActTimeList)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x54
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.TimeCount = 0
+        self.ActTimeList = list()
+        self.LimitLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.TimeCount):
+            length += self.ActTimeList[i].GetLength()
+        length += 2
+
+        return length
+
+    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.TimeCount)
+        for i in range(self.TimeCount):
+            data = CommFunc.WriteString(data, self.ActTimeList[i].GetLength(), self.ActTimeList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                TimeCount:%d,
+                                ActTimeList:%s,
+                                LimitLV:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.TimeCount,
+                                "...",
+                                self.LimitLV
+                                )
+        return DumpString
+
+
+m_NAtagMCActHorsePetFeastInfo=tagMCActHorsePetFeastInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetFeastInfo.Head.Cmd,m_NAtagMCActHorsePetFeastInfo.Head.SubCmd))] = m_NAtagMCActHorsePetFeastInfo
 
 
 #------------------------------------------------------
@@ -25146,6 +28049,308 @@
 
 
 #------------------------------------------------------
+# AA 48 多日连充活动信息 #tagMCActManyDayRechargeInfo
+
+class  tagMCActManyDayRechargeItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActManyDayRechargeItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 48 多日连充活动信息 //tagMCActManyDayRechargeInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCActManyDayRechargeAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedRecharge = 0    #(DWORD NeedRecharge)// 单天所需充值额度
+    NeedDays = 0    #(BYTE NeedDays)// 所需充值天数
+    AwardItemCount = 0    #(BYTE AwardItemCount)
+    AwardItemList = list()    #(vector<tagMCActManyDayRechargeItem> AwardItemList)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedRecharge,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagMCActManyDayRechargeItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedRecharge = 0
+        self.NeedDays = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedRecharge)
+        data = CommFunc.WriteBYTE(data, self.NeedDays)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedRecharge:%d,
+                                NeedDays:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedRecharge,
+                                self.NeedDays,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActManyDayRechargeInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardList = list()    #(vector<tagMCActManyDayRechargeAward> AwardList)// 奖励信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x48
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardList = tagMCActManyDayRechargeAward()
+            _pos = temAwardList.ReadData(_lpData, _pos)
+            self.AwardList.append(temAwardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x48
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.AwardCount = 0
+        self.AwardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardList[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.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                AwardCount:%d,
+                                AwardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActManyDayRechargeInfo=tagMCActManyDayRechargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargeInfo.Head.Cmd,m_NAtagMCActManyDayRechargeInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargeInfo
+
+
+#------------------------------------------------------
+# AA 49 多日连充活动玩家信息 #tagMCActManyDayRechargePlayerInfo
+
+class  tagMCActManyDayRechargePlayerInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
+    Days = 0    #(BYTE Days)
+    DayRechargeValues = list()    #(vector<DWORD> DayRechargeValues)//活动每天充值列表
+    RecordCount = 0    #(BYTE RecordCount)
+    AwardRecord = list()    #(vector<DWORD> AwardRecord)//奖励领奖记录,按奖励索引二进制位存储是否已领取
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x49
+        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.Days,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Days):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.DayRechargeValues.append(value)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.AwardRecord.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x49
+        self.ActNum = 0
+        self.Days = 0
+        self.DayRechargeValues = list()
+        self.RecordCount = 0
+        self.AwardRecord = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4 * self.Days
+        length += 1
+        length += 4 * self.RecordCount
+
+        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.Days)
+        for i in range(self.Days):
+            data = CommFunc.WriteDWORD(data, self.DayRechargeValues[i])
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteDWORD(data, self.AwardRecord[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                Days:%d,
+                                DayRechargeValues:%s,
+                                RecordCount:%d,
+                                AwardRecord:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.Days,
+                                "...",
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActManyDayRechargePlayerInfo=tagMCActManyDayRechargePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargePlayerInfo.Head.Cmd,m_NAtagMCActManyDayRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargePlayerInfo
+
+
+#------------------------------------------------------
 # AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo
 
 class  tagMCActRechargePrize(Structure):
@@ -25245,6 +28450,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
     PrizeDays = 0    #(BYTE PrizeDays)
     PrizeDayInfo = list()    #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
@@ -25261,6 +28467,7 @@
         _pos = self.Head.ReadData(_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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.PrizeDays):
@@ -25276,6 +28483,7 @@
         self.Head.SubCmd = 0x27
         self.StartDate = ""
         self.EndtDate = ""
+        self.LimitLV = 0
         self.IsDayReset = 0
         self.PrizeDays = 0
         self.PrizeDayInfo = list()
@@ -25286,6 +28494,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         length += 1
         for i in range(self.PrizeDays):
@@ -25298,6 +28507,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.IsDayReset)
         data = CommFunc.WriteBYTE(data, self.PrizeDays)
         for i in range(self.PrizeDays):
@@ -25309,6 +28519,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                LimitLV:%d,
                                 IsDayReset:%d,
                                 PrizeDays:%d,
                                 PrizeDayInfo:%s
@@ -25317,6 +28528,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.LimitLV,
                                 self.IsDayReset,
                                 self.PrizeDays,
                                 "..."
@@ -25326,6 +28538,474 @@
 
 m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo
+
+
+#------------------------------------------------------
+# AA 29 累计充值返利仙玉活动信息 #tagMCActRechargeRebateGoldInfo
+
+class  tagMCActRechargeRebate(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RMBMin", c_int),    # 充值RMB最小值
+                  ("RMBMax", c_int),    # 充值RMB最大值,0代表无上限
+                  ("RebateRate", 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.RMBMin = 0
+        self.RMBMax = 0
+        self.RebateRate = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActRechargeRebate)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 29 累计充值返利仙玉活动信息 //tagMCActRechargeRebateGoldInfo:
+                                RMBMin:%d,
+                                RMBMax:%d,
+                                RebateRate:%d
+                                '''\
+                                %(
+                                self.RMBMin,
+                                self.RMBMax,
+                                self.RebateRate
+                                )
+        return DumpString
+
+
+class  tagMCActRechargeRebateDay(Structure):
+    Rebates = 0    #(BYTE Rebates)// 返利档数
+    RebateInfo = list()    #(vector<tagMCActRechargeRebate> RebateInfo)// 返利档信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Rebates,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Rebates):
+            temRebateInfo = tagMCActRechargeRebate()
+            _pos = temRebateInfo.ReadData(_lpData, _pos)
+            self.RebateInfo.append(temRebateInfo)
+        return _pos
+
+    def Clear(self):
+        self.Rebates = 0
+        self.RebateInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.Rebates):
+            length += self.RebateInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Rebates)
+        for i in range(self.Rebates):
+            data = CommFunc.WriteString(data, self.RebateInfo[i].GetLength(), self.RebateInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Rebates:%d,
+                                RebateInfo:%s
+                                '''\
+                                %(
+                                self.Rebates,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActRechargeRebateGoldInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    RebateDays = 0    #(BYTE RebateDays)
+    RebateDayInfo = list()    #(vector<tagMCActRechargeRebateDay> RebateDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x29
+        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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RebateDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RebateDays):
+            temRebateDayInfo = tagMCActRechargeRebateDay()
+            _pos = temRebateDayInfo.ReadData(_lpData, _pos)
+            self.RebateDayInfo.append(temRebateDayInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x29
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.IsDayReset = 0
+        self.RebateDays = 0
+        self.RebateDayInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.RebateDays):
+            length += self.RebateDayInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteBYTE(data, self.RebateDays)
+        for i in range(self.RebateDays):
+            data = CommFunc.WriteString(data, self.RebateDayInfo[i].GetLength(), self.RebateDayInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                IsDayReset:%d,
+                                RebateDays:%d,
+                                RebateDayInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.IsDayReset,
+                                self.RebateDays,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActRechargeRebateGoldInfo=tagMCActRechargeRebateGoldInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargeRebateGoldInfo.Head.Cmd,m_NAtagMCActRechargeRebateGoldInfo.Head.SubCmd))] = m_NAtagMCActRechargeRebateGoldInfo
+
+
+#------------------------------------------------------
+# AA 50 单笔累充活动信息 #tagMCActSingleRechargeInfo
+
+class  tagMCActSingleRechargeAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActSingleRechargeAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 50 单笔累充活动信息 //tagMCActSingleRechargeInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCActSingleRechargeAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    SingleRechargeValue = 0    #(DWORD SingleRechargeValue)// 单笔所需充值额度
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCActSingleRechargeAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SingleRechargeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCActSingleRechargeAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.SingleRechargeValue = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.SingleRechargeValue)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                SingleRechargeValue:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.SingleRechargeValue,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActSingleRechargeInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AwardRuleType = 0    #(BYTE AwardRuleType)// 领奖规则类型 0-向下兼容;1-匹配最高档;2-精确匹配对应档次
+    AwardCount = 0    #(BYTE AwardCount)// 奖励档数
+    AwardInfo = list()    #(vector<tagMCActSingleRechargeAward> AwardInfo)// 奖励档信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x50
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardRuleType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardInfo = tagMCActSingleRechargeAward()
+            _pos = temAwardInfo.ReadData(_lpData, _pos)
+            self.AwardInfo.append(temAwardInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x50
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.AwardRuleType = 0
+        self.AwardCount = 0
+        self.AwardInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardInfo[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.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.AwardRuleType)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                AwardRuleType:%d,
+                                AwardCount:%d,
+                                AwardInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.AwardRuleType,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActSingleRechargeInfo=tagMCActSingleRechargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargeInfo.Head.Cmd,m_NAtagMCActSingleRechargeInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargeInfo
+
+
+#------------------------------------------------------
+# AA 51 单笔累充活动玩家信息 #tagMCActSingleRechargePlayerInfo
+
+class  tagMCActSingleRechargePlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
+                  ("CanAwardValue", c_int),    #可否领奖记录,按奖励索引二进制位存储是否可领取
+                  ("AwardRecord", c_int),    #奖励领奖记录,按奖励索引二进制位存储是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x51
+        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 = 0x51
+        self.ActNum = 0
+        self.CanAwardValue = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActSingleRechargePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 51 单笔累充活动玩家信息 //tagMCActSingleRechargePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                CanAwardValue:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.CanAwardValue,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCActSingleRechargePlayerInfo=tagMCActSingleRechargePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Cmd,m_NAtagMCActSingleRechargePlayerInfo.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo
 
 
 #------------------------------------------------------
@@ -25587,6 +29267,322 @@
 
 m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo
+
+
+#------------------------------------------------------
+# AA 52 转盘活动信息 #tagMCActTurntableInfo
+
+class  tagMCActTurntableItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemNum", c_ubyte),    #物品编号 1~n;注意转盘已确定物品编号 与 极品终极物品待选择库编号可能相同,但并不代表同一物品
+                  ("ItemLibType", c_ubyte),    #物品库类型;1-常规,2-极品,3-终极
+                  ("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.ItemNum = 0
+        self.ItemLibType = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActTurntableItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 52 转盘活动信息 //tagMCActTurntableInfo:
+                                ItemNum:%d,
+                                ItemLibType:%d,
+                                ItemID:%d,
+                                ItemCount:%d
+                                '''\
+                                %(
+                                self.ItemNum,
+                                self.ItemLibType,
+                                self.ItemID,
+                                self.ItemCount
+                                )
+        return DumpString
+
+
+class  tagMCActTurntableInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    CTGPrizeCount = 0    #(BYTE CTGPrizeCount)
+    CTGPrizeList = list()    #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...]
+    UseMoneyType = 0    #(BYTE UseMoneyType)// 累计消费货币类型
+    UseMoneyPrizeCount = 0    #(BYTE UseMoneyPrizeCount)
+    UseMoneyPrizeList = list()    #(vector<DWORD> UseMoneyPrizeList)// 累计消费货币奖励次数列表 [奖励第1次所需累计消费货币, 第2次, ...]
+    TurnItemCount = 0    #(BYTE TurnItemCount)
+    TurnItemList = list()    #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘;
+    GoodItemCount = 0    #(BYTE GoodItemCount)
+    GoodItemList = list()    #(vector<tagMCActTurntableItem> GoodItemList)// 极品物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
+    GoodItemCanChooseCount = 0    #(BYTE GoodItemCanChooseCount)// 极品物品可选择个数
+    SuperItemCount = 0    #(BYTE SuperItemCount)
+    SuperItemList = list()    #(vector<tagMCActTurntableItem> SuperItemList)// 终极物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
+    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 终极物品可选择个数
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x52
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.CTGPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CTGPrizeCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.CTGPrizeList.append(value)
+        self.UseMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.UseMoneyPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.UseMoneyPrizeCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.UseMoneyPrizeList.append(value)
+        self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TurnItemCount):
+            temTurnItemList = tagMCActTurntableItem()
+            _pos = temTurnItemList.ReadData(_lpData, _pos)
+            self.TurnItemList.append(temTurnItemList)
+        self.GoodItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GoodItemCount):
+            temGoodItemList = tagMCActTurntableItem()
+            _pos = temGoodItemList.ReadData(_lpData, _pos)
+            self.GoodItemList.append(temGoodItemList)
+        self.GoodItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SuperItemCount):
+            temSuperItemList = tagMCActTurntableItem()
+            _pos = temSuperItemList.ReadData(_lpData, _pos)
+            self.SuperItemList.append(temSuperItemList)
+        self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x52
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.CTGPrizeCount = 0
+        self.CTGPrizeList = list()
+        self.UseMoneyType = 0
+        self.UseMoneyPrizeCount = 0
+        self.UseMoneyPrizeList = list()
+        self.TurnItemCount = 0
+        self.TurnItemList = list()
+        self.GoodItemCount = 0
+        self.GoodItemList = list()
+        self.GoodItemCanChooseCount = 0
+        self.SuperItemCount = 0
+        self.SuperItemList = list()
+        self.SuperItemCanChooseCount = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        length += 4 * self.CTGPrizeCount
+        length += 1
+        length += 1
+        length += 4 * self.UseMoneyPrizeCount
+        length += 1
+        for i in range(self.TurnItemCount):
+            length += self.TurnItemList[i].GetLength()
+        length += 1
+        for i in range(self.GoodItemCount):
+            length += self.GoodItemList[i].GetLength()
+        length += 1
+        length += 1
+        for i in range(self.SuperItemCount):
+            length += self.SuperItemList[i].GetLength()
+        length += 1
+
+        return length
+
+    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)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.CTGPrizeCount)
+        for i in range(self.CTGPrizeCount):
+            data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i])
+        data = CommFunc.WriteBYTE(data, self.UseMoneyType)
+        data = CommFunc.WriteBYTE(data, self.UseMoneyPrizeCount)
+        for i in range(self.UseMoneyPrizeCount):
+            data = CommFunc.WriteDWORD(data, self.UseMoneyPrizeList[i])
+        data = CommFunc.WriteBYTE(data, self.TurnItemCount)
+        for i in range(self.TurnItemCount):
+            data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.GoodItemCount)
+        for i in range(self.GoodItemCount):
+            data = CommFunc.WriteString(data, self.GoodItemList[i].GetLength(), self.GoodItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.GoodItemCanChooseCount)
+        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+        for i in range(self.SuperItemCount):
+            data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                CTGPrizeCount:%d,
+                                CTGPrizeList:%s,
+                                UseMoneyType:%d,
+                                UseMoneyPrizeCount:%d,
+                                UseMoneyPrizeList:%s,
+                                TurnItemCount:%d,
+                                TurnItemList:%s,
+                                GoodItemCount:%d,
+                                GoodItemList:%s,
+                                GoodItemCanChooseCount:%d,
+                                SuperItemCount:%d,
+                                SuperItemList:%s,
+                                SuperItemCanChooseCount:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.CTGPrizeCount,
+                                "...",
+                                self.UseMoneyType,
+                                self.UseMoneyPrizeCount,
+                                "...",
+                                self.TurnItemCount,
+                                "...",
+                                self.GoodItemCount,
+                                "...",
+                                self.GoodItemCanChooseCount,
+                                self.SuperItemCount,
+                                "...",
+                                self.SuperItemCanChooseCount
+                                )
+        return DumpString
+
+
+m_NAtagMCActTurntableInfo=tagMCActTurntableInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntableInfo.Head.Cmd,m_NAtagMCActTurntableInfo.Head.SubCmd))] = m_NAtagMCActTurntableInfo
+
+
+#------------------------------------------------------
+# AA 53 转盘活动玩家信息 #tagMCActTurntablePlayerInfo
+
+class  tagMCActTurntablePlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ("CanUseCount", c_ubyte),    #可转盘次数
+                  ("CTGTotal", c_int),    #累计充值额度
+                  ("UseMoneyTotal", c_int),    #累计消费货币额度
+                  ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
+                  ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x53
+        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 = 0x53
+        self.ActNum = 0
+        self.CanUseCount = 0
+        self.CTGTotal = 0
+        self.UseMoneyTotal = 0
+        self.TurnItemState = 0
+        self.GetItemNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActTurntablePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 53 转盘活动玩家信息 //tagMCActTurntablePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                CanUseCount:%d,
+                                CTGTotal:%d,
+                                UseMoneyTotal:%d,
+                                TurnItemState:%d,
+                                GetItemNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.CanUseCount,
+                                self.CTGTotal,
+                                self.UseMoneyTotal,
+                                self.TurnItemState,
+                                self.GetItemNum
+                                )
+        return DumpString
+
+
+m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo
 
 
 #------------------------------------------------------
@@ -26034,6 +30030,288 @@
 
 m_NAtagMCActWishingWellPlayerInfo=tagMCActWishingWellPlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellPlayerInfo.Head.Cmd,m_NAtagMCActWishingWellPlayerInfo.Head.SubCmd))] = m_NAtagMCActWishingWellPlayerInfo
+
+
+#------------------------------------------------------
+# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult
+
+class  tagMCActXianXiaMJAwardItemResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    # 活动编号
+                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
+                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
+                  ("ItemCount", c_ushort),    
+                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
+                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x59
+        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 = 0x59
+        self.ActNum = 0
+        self.ItemLibType = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.PosNum = 0
+        self.TotalTimesNow = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActXianXiaMJAwardItemResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                ItemLibType:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                PosNum:%d,
+                                TotalTimesNow:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.ItemLibType,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.PosNum,
+                                self.TotalTimesNow
+                                )
+        return DumpString
+
+
+m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult
+
+
+#------------------------------------------------------
+# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo
+
+class  tagMCActXianXiaMJAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
+                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
+                  ("ItemCount", c_ushort),    
+                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
+                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
+                  ("TotalTimesMax", c_ubyte),    #最大可产出次数,0不限
+                  ("LayerLimit", c_ubyte),    #大于等于X层后可产出,0不限
+                  ]
+
+    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.ItemLibType = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.PosNum = 0
+        self.TotalTimesNow = 0
+        self.TotalTimesMax = 0
+        self.LayerLimit = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActXianXiaMJAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo:
+                                ItemLibType:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                PosNum:%d,
+                                TotalTimesNow:%d,
+                                TotalTimesMax:%d,
+                                LayerLimit:%d
+                                '''\
+                                %(
+                                self.ItemLibType,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.PosNum,
+                                self.TotalTimesNow,
+                                self.TotalTimesMax,
+                                self.LayerLimit
+                                )
+        return DumpString
+
+
+class  tagMCActXianXiaMJInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
+    MoneyType = 0    #(BYTE MoneyType)//消耗货币类型
+    MoneyValue = 0    #(WORD MoneyValue)//消耗货币值
+    LayerNum = 0    #(BYTE LayerNum)//当前奖池第几层
+    AwardItemCount = 0    #(BYTE AwardItemCount)
+    AwardItemList = list()    #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品
+    SuperItemCount = 0    #(BYTE SuperItemCount)
+    SuperItemList = list()    #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品;
+    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x58
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagMCActXianXiaMJAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SuperItemCount):
+            temSuperItemList = tagMCActXianXiaMJAwardItem()
+            _pos = temSuperItemList.ReadData(_lpData, _pos)
+            self.SuperItemList.append(temSuperItemList)
+        self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x58
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.ResetType = 0
+        self.MoneyType = 0
+        self.MoneyValue = 0
+        self.LayerNum = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        self.SuperItemCount = 0
+        self.SuperItemList = list()
+        self.SuperItemCanChooseCount = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+        length += 1
+        for i in range(self.SuperItemCount):
+            length += self.SuperItemList[i].GetLength()
+        length += 1
+
+        return length
+
+    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.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        data = CommFunc.WriteBYTE(data, self.MoneyType)
+        data = CommFunc.WriteWORD(data, self.MoneyValue)
+        data = CommFunc.WriteBYTE(data, self.LayerNum)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+        for i in range(self.SuperItemCount):
+            data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                ResetType:%d,
+                                MoneyType:%d,
+                                MoneyValue:%d,
+                                LayerNum:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s,
+                                SuperItemCount:%d,
+                                SuperItemList:%s,
+                                SuperItemCanChooseCount:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.ResetType,
+                                self.MoneyType,
+                                self.MoneyValue,
+                                self.LayerNum,
+                                self.AwardItemCount,
+                                "...",
+                                self.SuperItemCount,
+                                "...",
+                                self.SuperItemCanChooseCount
+                                )
+        return DumpString
+
+
+m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo
 
 
 #------------------------------------------------------
@@ -26741,6 +31019,7 @@
 
 class  tagMCCostRebateInfo(Structure):
     Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
@@ -26758,6 +31037,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)
@@ -26774,6 +31054,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x09
+        self.ActNum = 0
         self.StartDate = ""
         self.EndtDate = ""
         self.IsDayReset = 0
@@ -26785,6 +31066,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 10
         length += 10
         length += 1
@@ -26798,6 +31080,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)
@@ -26810,6 +31093,7 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActNum:%d,
                                 StartDate:%s,
                                 EndtDate:%s,
                                 IsDayReset:%d,
@@ -26819,6 +31103,7 @@
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActNum,
                                 self.StartDate,
                                 self.EndtDate,
                                 self.IsDayReset,
@@ -26841,6 +31126,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
                   ("CostGoldTotal", c_int),    #本次活动已累计消费仙玉数
                   ("AwardRecord", c_int),    #返利奖励领奖记录,按奖励索引二进制位存储是否已领取
                   ]
@@ -26859,6 +31145,7 @@
     def Clear(self):
         self.Cmd = 0xAA
         self.SubCmd = 0x10
+        self.ActNum = 0
         self.CostGoldTotal = 0
         self.AwardRecord = 0
         return
@@ -26873,12 +31160,14 @@
         DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
+                                ActNum:%d,
                                 CostGoldTotal:%d,
                                 AwardRecord:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
+                                self.ActNum,
                                 self.CostGoldTotal,
                                 self.AwardRecord
                                 )
@@ -27018,6 +31307,7 @@
 
 class  tagMCDailyGiftbagInfo(Structure):
     Head = tagHead()
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
     GiftbagCount = 0    #(BYTE GiftbagCount)// 礼包数
     GiftbagInfo = list()    #(vector<tagMCDailyGiftbag> GiftbagInfo)// 礼包信息
     data = None
@@ -27031,6 +31321,7 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.GiftbagCount):
             temGiftbagInfo = tagMCDailyGiftbag()
@@ -27043,6 +31334,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x25
+        self.LimitLV = 0
         self.GiftbagCount = 0
         self.GiftbagInfo = list()
         return
@@ -27050,6 +31342,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 2
         length += 1
         for i in range(self.GiftbagCount):
             length += self.GiftbagInfo[i].GetLength()
@@ -27059,6 +31352,7 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.GiftbagCount)
         for i in range(self.GiftbagCount):
             data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer())
@@ -27067,11 +31361,13 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                LimitLV:%d,
                                 GiftbagCount:%d,
                                 GiftbagInfo:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.LimitLV,
                                 self.GiftbagCount,
                                 "..."
                                 )
@@ -27349,6 +31645,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
     DayCount = 0    #(BYTE DayCount)// 总共几天
     DayAwardList = list()    #(vector<tagMCFeastLoginDayAward> DayAwardList)//登录天奖励列表
     data = None
@@ -27364,6 +31661,7 @@
         _pos = self.Head.ReadData(_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.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.DayCount):
             temDayAwardList = tagMCFeastLoginDayAward()
@@ -27378,6 +31676,7 @@
         self.Head.SubCmd = 0x42
         self.StartDate = ""
         self.EndtDate = ""
+        self.LimitLV = 0
         self.DayCount = 0
         self.DayAwardList = list()
         return
@@ -27387,6 +31686,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.DayCount):
             length += self.DayAwardList[i].GetLength()
@@ -27398,6 +31698,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.DayCount)
         for i in range(self.DayCount):
             data = CommFunc.WriteString(data, self.DayAwardList[i].GetLength(), self.DayAwardList[i].GetBuffer())
@@ -27408,6 +31709,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                LimitLV:%d,
                                 DayCount:%d,
                                 DayAwardList:%s
                                 '''\
@@ -27415,6 +31717,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.LimitLV,
                                 self.DayCount,
                                 "..."
                                 )
@@ -27423,6 +31726,62 @@
 
 m_NAtagMCFeastLoginInfo=tagMCFeastLoginInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginInfo.Head.Cmd,m_NAtagMCFeastLoginInfo.Head.SubCmd))] = m_NAtagMCFeastLoginInfo
+
+
+#------------------------------------------------------
+# AA 39 节日登录奖励活动玩家信息 #tagMCFeastLoginPlayerInfo
+
+class  tagMCFeastLoginPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LoginState", c_int),    # 是否已登录,按天索引0代表第1天记录当天是否已登录
+                  ("LoginAward", c_int),    # 是否已领取,按天索引0代表第1天记录当天是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x39
+        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 = 0x39
+        self.LoginState = 0
+        self.LoginAward = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFeastLoginPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 39 节日登录奖励活动玩家信息 //tagMCFeastLoginPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                LoginState:%d,
+                                LoginAward:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.LoginState,
+                                self.LoginAward
+                                )
+        return DumpString
+
+
+m_NAtagMCFeastLoginPlayerInfo=tagMCFeastLoginPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginPlayerInfo.Cmd,m_NAtagMCFeastLoginPlayerInfo.SubCmd))] = m_NAtagMCFeastLoginPlayerInfo
 
 
 #------------------------------------------------------
@@ -27474,7 +31833,7 @@
 class  tagMCFeastTravelAward(Structure):
     AwardIndex = 0    #(BYTE AwardIndex)//游历奖励索引
     NeedTravelPoint = 0    #(WORD NeedTravelPoint)//单次领奖所需游历值
-    AwardCountMax = 0    #(BYTE AwardCountMax)//最大可领取次数,0代表不限
+    AwardCountMax = 0    #(WORD AwardCountMax)//最大可领取次数,0代表不限
     AwardItemCount = 0    #(BYTE AwardItemCount)//奖励物品数
     AwardItemList = list()    #(vector<tagMCFeastTravelAwardItem> AwardItemList)//奖励物品列表
     data = None
@@ -27487,7 +31846,7 @@
         self.Clear()
         self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.NeedTravelPoint,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AwardCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.AwardItemCount):
             temAwardItemList = tagMCFeastTravelAwardItem()
@@ -27507,7 +31866,7 @@
         length = 0
         length += 1
         length += 2
-        length += 1
+        length += 2
         length += 1
         for i in range(self.AwardItemCount):
             length += self.AwardItemList[i].GetLength()
@@ -27518,7 +31877,7 @@
         data = ''
         data = CommFunc.WriteBYTE(data, self.AwardIndex)
         data = CommFunc.WriteWORD(data, self.NeedTravelPoint)
-        data = CommFunc.WriteBYTE(data, self.AwardCountMax)
+        data = CommFunc.WriteWORD(data, self.AwardCountMax)
         data = CommFunc.WriteBYTE(data, self.AwardItemCount)
         for i in range(self.AwardItemCount):
             data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -27547,8 +31906,8 @@
     _fields_ = [
                   ("TravelTaskID", c_ubyte),    #游历任务ID
                   ("FinishNeedValue", c_ushort),    #单次完成所需进度
-                  ("FinishTimeMax", c_ubyte),    #最大可完成次数,0代表不限
-                  ("AddTravelPoint", c_ubyte),    #单次完成获得游历值
+                  ("FinishTimeMax", c_ushort),    #最大可完成次数,0代表不限
+                  ("AddTravelPoint", c_ushort),    #单次完成获得游历值
                   ]
 
     def __init__(self):
@@ -27593,6 +31952,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
     ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
     TravelTaskCount = 0    #(BYTE TravelTaskCount)// 游历任务数
     TravelTaskList = list()    #(vector<tagMCFeastTravelTask> TravelTaskList)//游历任务信息列表
@@ -27611,6 +31971,7 @@
         _pos = self.Head.ReadData(_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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.TravelTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.TravelTaskCount):
@@ -27631,6 +31992,7 @@
         self.Head.SubCmd = 0x46
         self.StartDate = ""
         self.EndtDate = ""
+        self.LimitLV = 0
         self.ResetType = 0
         self.TravelTaskCount = 0
         self.TravelTaskList = list()
@@ -27643,6 +32005,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         length += 1
         for i in range(self.TravelTaskCount):
@@ -27658,6 +32021,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.ResetType)
         data = CommFunc.WriteBYTE(data, self.TravelTaskCount)
         for i in range(self.TravelTaskCount):
@@ -27672,6 +32036,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                LimitLV:%d,
                                 ResetType:%d,
                                 TravelTaskCount:%d,
                                 TravelTaskList:%s,
@@ -27682,6 +32047,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.LimitLV,
                                 self.ResetType,
                                 self.TravelTaskCount,
                                 "...",
@@ -28509,6 +32875,7 @@
     Head = tagHead()
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
     ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
     WishPoolShowCount = 0    #(BYTE WishPoolShowCount)//祝福池展示物品数
     WishPoolShowItemList = list()    #(vector<DWORD> WishPoolShowItemList)//祝福池展示物品ID列表
@@ -28527,6 +32894,7 @@
         _pos = self.Head.ReadData(_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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.WishPoolShowCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.WishPoolShowCount):
@@ -28546,6 +32914,7 @@
         self.Head.SubCmd = 0x43
         self.StartDate = ""
         self.EndtDate = ""
+        self.LimitLV = 0
         self.ResetType = 0
         self.WishPoolShowCount = 0
         self.WishPoolShowItemList = list()
@@ -28558,6 +32927,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         length += 1
         length += 4 * self.WishPoolShowCount
@@ -28572,6 +32942,7 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 10, self.StartDate)
         data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.ResetType)
         data = CommFunc.WriteBYTE(data, self.WishPoolShowCount)
         for i in range(self.WishPoolShowCount):
@@ -28586,6 +32957,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                LimitLV:%d,
                                 ResetType:%d,
                                 WishPoolShowCount:%d,
                                 WishPoolShowItemList:%s,
@@ -28596,6 +32968,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.LimitLV,
                                 self.ResetType,
                                 self.WishPoolShowCount,
                                 "...",
@@ -29143,6 +33516,7 @@
 
 class  tagMCFlashGiftbagInfo(Structure):
     Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
@@ -29163,6 +33537,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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
@@ -29185,6 +33560,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x12
+        self.ActNum = 0
         self.StartDate = ""
         self.EndtDate = ""
         self.AdvanceMinutes = 0
@@ -29199,6 +33575,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 10
         length += 10
         length += 2
@@ -29216,6 +33593,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.WriteWORD(data, self.AdvanceMinutes)
@@ -29232,6 +33610,7 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActNum:%d,
                                 StartDate:%s,
                                 EndtDate:%s,
                                 AdvanceMinutes:%d,
@@ -29244,6 +33623,7 @@
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActNum,
                                 self.StartDate,
                                 self.EndtDate,
                                 self.AdvanceMinutes,
@@ -29305,6 +33685,7 @@
 
 class  tagMCFlashGiftbagPlayerInfo(Structure):
     Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
     Count = 0    #(BYTE Count)
     BuyCountList = list()    #(vector<tagMCFlashGiftbagBuyCount> BuyCountList)//礼包购买次数信息
     data = None
@@ -29318,6 +33699,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.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
             temBuyCountList = tagMCFlashGiftbagBuyCount()
@@ -29330,6 +33712,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x13
+        self.ActNum = 0
         self.Count = 0
         self.BuyCountList = list()
         return
@@ -29337,6 +33720,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 1
         for i in range(self.Count):
             length += self.BuyCountList[i].GetLength()
@@ -29346,6 +33730,7 @@
     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.Count)
         for i in range(self.Count):
             data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer())
@@ -29354,11 +33739,13 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActNum:%d,
                                 Count:%d,
                                 BuyCountList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActNum,
                                 self.Count,
                                 "..."
                                 )
@@ -29413,6 +33800,7 @@
 
 class  tagMCFlashSaleAppointmentInfo(Structure):
     Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
     IsAll = 0    #(BYTE IsAll)// 是否全部
     GoodsCount = 0    #(WORD GoodsCount)// 商品数
     GoodsList = list()    #(vector<tagMCFlashSaleAppointmentState> GoodsList)// 预约的商品
@@ -29427,6 +33815,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.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.GoodsCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
         for i in range(self.GoodsCount):
@@ -29440,6 +33829,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x18
+        self.ActNum = 0
         self.IsAll = 0
         self.GoodsCount = 0
         self.GoodsList = list()
@@ -29448,6 +33838,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 1
         length += 2
         for i in range(self.GoodsCount):
@@ -29458,6 +33849,7 @@
     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.IsAll)
         data = CommFunc.WriteWORD(data, self.GoodsCount)
         for i in range(self.GoodsCount):
@@ -29467,12 +33859,14 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActNum:%d,
                                 IsAll:%d,
                                 GoodsCount:%d,
                                 GoodsList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActNum,
                                 self.IsAll,
                                 self.GoodsCount,
                                 "..."
@@ -29665,6 +34059,7 @@
 
 class  tagMCFlashSaleInfo(Structure):
     Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
@@ -29685,6 +34080,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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
@@ -29707,6 +34103,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x17
+        self.ActNum = 0
         self.StartDate = ""
         self.EndtDate = ""
         self.AdvanceMinutes = 0
@@ -29721,6 +34118,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 10
         length += 10
         length += 2
@@ -29738,6 +34136,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.WriteWORD(data, self.AdvanceMinutes)
@@ -29754,6 +34153,7 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActNum:%d,
                                 StartDate:%s,
                                 EndtDate:%s,
                                 AdvanceMinutes:%d,
@@ -29766,6 +34166,7 @@
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActNum,
                                 self.StartDate,
                                 self.EndtDate,
                                 self.AdvanceMinutes,
@@ -30173,6 +34574,58 @@
 
 
 #------------------------------------------------------
+# AA 04 创角在线充值特惠信息 #tagMCOnlineRechargeTH
+
+class  tagMCOnlineRechargeTH(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("AwardState", c_ubyte),    #是否已领取奖励
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x04
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x04
+        self.AwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCOnlineRechargeTH)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 04 创角在线充值特惠信息 //tagMCOnlineRechargeTH:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                AwardState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.AwardState
+                                )
+        return DumpString
+
+
+m_NAtagMCOnlineRechargeTH=tagMCOnlineRechargeTH()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlineRechargeTH.Cmd,m_NAtagMCOnlineRechargeTH.SubCmd))] = m_NAtagMCOnlineRechargeTH
+
+
+#------------------------------------------------------
 # AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
 
 class  tagMCRechargePrizeInfo(Structure):
@@ -30278,6 +34731,58 @@
 
 m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo
+
+
+#------------------------------------------------------
+# AA 30 累计充值返利仙玉玩家活动信息 #tagMCRechargeRebateGoldPlayerInfo
+
+class  tagMCRechargeRebateGoldPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("RechargeRMBTotal", c_int),    # 活动已累计充值RMB
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x30
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x30
+        self.RechargeRMBTotal = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCRechargeRebateGoldPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 30 累计充值返利仙玉玩家活动信息 //tagMCRechargeRebateGoldPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                RechargeRMBTotal:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.RechargeRMBTotal
+                                )
+        return DumpString
+
+
+m_NAtagMCRechargeRebateGoldPlayerInfo=tagMCRechargeRebateGoldPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargeRebateGoldPlayerInfo.Cmd,m_NAtagMCRechargeRebateGoldPlayerInfo.SubCmd))] = m_NAtagMCRechargeRebateGoldPlayerInfo
 
 
 #------------------------------------------------------
@@ -30512,6 +35017,7 @@
 
 class  tagMCSpringSaleInfo(Structure):
     Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
@@ -30532,6 +35038,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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
@@ -30554,6 +35061,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x11
+        self.ActNum = 0
         self.StartDate = ""
         self.EndtDate = ""
         self.AdvanceMinutes = 0
@@ -30568,6 +35076,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 10
         length += 10
         length += 2
@@ -30585,6 +35094,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.WriteWORD(data, self.AdvanceMinutes)
@@ -30601,6 +35111,7 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ActNum:%d,
                                 StartDate:%s,
                                 EndtDate:%s,
                                 AdvanceMinutes:%d,
@@ -30613,6 +35124,7 @@
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ActNum,
                                 self.StartDate,
                                 self.EndtDate,
                                 self.AdvanceMinutes,
@@ -33021,6 +37533,118 @@
 
 
 #------------------------------------------------------
+# B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList
+
+class  tagMCFuncSysPrivilegeInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("FuncSysID", c_ubyte),    # 功能系统ID
+                  ("ActivateTime", c_int),    # 激活时间戳
+                  ("AwardState", c_int),    # 领奖状态,按天对应二进制位计算是否领奖
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.FuncSysID = 0
+        self.ActivateTime = 0
+        self.AwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFuncSysPrivilegeInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 11 功能系统特权信息 //tagMCFuncSysPrivilegeInfoList:
+                                FuncSysID:%d,
+                                ActivateTime:%d,
+                                AwardState:%d
+                                '''\
+                                %(
+                                self.FuncSysID,
+                                self.ActivateTime,
+                                self.AwardState
+                                )
+        return DumpString
+
+
+class  tagMCFuncSysPrivilegeInfoList(Structure):
+    Head = tagHead()
+    PrivilegeCount = 0    #(BYTE PrivilegeCount)// 特权个数
+    PrivilegeInfoList = list()    #(vector<tagMCFuncSysPrivilegeInfo> PrivilegeInfoList)// 特权信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PrivilegeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PrivilegeCount):
+            temPrivilegeInfoList = tagMCFuncSysPrivilegeInfo()
+            _pos = temPrivilegeInfoList.ReadData(_lpData, _pos)
+            self.PrivilegeInfoList.append(temPrivilegeInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x11
+        self.PrivilegeCount = 0
+        self.PrivilegeInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.PrivilegeCount):
+            length += self.PrivilegeInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.PrivilegeCount)
+        for i in range(self.PrivilegeCount):
+            data = CommFunc.WriteString(data, self.PrivilegeInfoList[i].GetLength(), self.PrivilegeInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PrivilegeCount:%d,
+                                PrivilegeInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PrivilegeCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList
+
+
+#------------------------------------------------------
 # B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove
 
 class  tagMCNotifyPlayerMove(Structure):
@@ -33078,6 +37702,80 @@
 
 m_NAtagMCNotifyPlayerMove=tagMCNotifyPlayerMove()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyPlayerMove.Cmd,m_NAtagMCNotifyPlayerMove.SubCmd))] = m_NAtagMCNotifyPlayerMove
+
+
+#------------------------------------------------------
+# B1 13 在线奖励信息新 #tagMCOnlinePrizeNew
+
+class  tagMCOnlinePrizeNew(Structure):
+    Head = tagHead()
+    OnlineTime = 0    #(DWORD OnlineTime)//在线时间毫秒
+    Len = 0    #(BYTE Len)
+    PrizeInfo = list()    #(vector<DWORD> PrizeInfo)//领奖记录
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.PrizeInfo.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x13
+        self.OnlineTime = 0
+        self.Len = 0
+        self.PrizeInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 4 * self.Len
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OnlineTime)
+        data = CommFunc.WriteBYTE(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteDWORD(data, self.PrizeInfo[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OnlineTime:%d,
+                                Len:%d,
+                                PrizeInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OnlineTime,
+                                self.Len,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCOnlinePrizeNew=tagMCOnlinePrizeNew()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrizeNew.Head.Cmd,m_NAtagMCOnlinePrizeNew.Head.SubCmd))] = m_NAtagMCOnlinePrizeNew
 
 
 #------------------------------------------------------
@@ -34975,6 +39673,114 @@
 
 
 #------------------------------------------------------
+# B3 27 情戒信息 #tagMCLoveRingInfo
+
+class  tagMCLoveRingInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ClassLV", c_ubyte),    # 阶
+                  ("StarLV", c_ubyte),    # 星
+                  ("EatCount", c_int),    # 本星已淬炼道具数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x27
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x27
+        self.ClassLV = 0
+        self.StarLV = 0
+        self.EatCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCLoveRingInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 27 情戒信息 //tagMCLoveRingInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ClassLV:%d,
+                                StarLV:%d,
+                                EatCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ClassLV,
+                                self.StarLV,
+                                self.EatCount
+                                )
+        return DumpString
+
+
+m_NAtagMCLoveRingInfo=tagMCLoveRingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingInfo.Cmd,m_NAtagMCLoveRingInfo.SubCmd))] = m_NAtagMCLoveRingInfo
+
+
+#------------------------------------------------------
+# B3 29 情戒解锁成功 #tagMCLoveRingUnlockOK
+
+class  tagMCLoveRingUnlockOK(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x29
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x29
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCLoveRingUnlockOK)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 29 情戒解锁成功 //tagMCLoveRingUnlockOK:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagMCLoveRingUnlockOK=tagMCLoveRingUnlockOK()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingUnlockOK.Cmd,m_NAtagMCLoveRingUnlockOK.SubCmd))] = m_NAtagMCLoveRingUnlockOK
+
+
+#------------------------------------------------------
 # B4 11 新增恶意攻击玩家 #tagMCAddMaliciousAtkPlayer
 
 class  tagMCAddMaliciousAtkPlayer(Structure):
@@ -36116,6 +40922,7 @@
                   ("ObjID", c_int),    
                   ("AttackType", c_ubyte),    #爆击, miss
                   ("HurtHP", c_int),    
+                  ("HurtHPEx", c_int),    
                   ("CurHP", c_int),    
                   ("CurHPEx", c_int),    
                   ]
@@ -36134,6 +40941,7 @@
         self.ObjID = 0
         self.AttackType = 0
         self.HurtHP = 0
+        self.HurtHPEx = 0
         self.CurHP = 0
         self.CurHPEx = 0
         return
@@ -36150,6 +40958,7 @@
                                 ObjID:%d,
                                 AttackType:%d,
                                 HurtHP:%d,
+                                HurtHPEx:%d,
                                 CurHP:%d,
                                 CurHPEx:%d
                                 '''\
@@ -36158,6 +40967,7 @@
                                 self.ObjID,
                                 self.AttackType,
                                 self.HurtHP,
+                                self.HurtHPEx,
                                 self.CurHP,
                                 self.CurHPEx
                                 )
@@ -36501,6 +41311,74 @@
 
 
 #------------------------------------------------------
+# C1 07 跨服战场玩家信息 #tagMCCrossBattlefieldPlayerInfo
+
+class  tagMCCrossBattlefieldPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BuyOpenCountToday", c_ubyte),    # 今日已购买开启战场次数
+                  ("HighScoreToday", c_int),    # 今日最高积分
+                  ("EnterCountWeek", c_int),    # 本周总参与次数
+                  ("BuyOpenCountWeek", c_int),    # 本周总购买召集次数
+                  ("HighScoreTotalWeek", c_int),    # 本周每日最高分累加总分
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        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 = 0xC1
+        self.SubCmd = 0x07
+        self.BuyOpenCountToday = 0
+        self.HighScoreToday = 0
+        self.EnterCountWeek = 0
+        self.BuyOpenCountWeek = 0
+        self.HighScoreTotalWeek = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCrossBattlefieldPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 07 跨服战场玩家信息 //tagMCCrossBattlefieldPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BuyOpenCountToday:%d,
+                                HighScoreToday:%d,
+                                EnterCountWeek:%d,
+                                BuyOpenCountWeek:%d,
+                                HighScoreTotalWeek:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BuyOpenCountToday,
+                                self.HighScoreToday,
+                                self.EnterCountWeek,
+                                self.BuyOpenCountWeek,
+                                self.HighScoreTotalWeek
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossBattlefieldPlayerInfo=tagMCCrossBattlefieldPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossBattlefieldPlayerInfo.Cmd,m_NAtagMCCrossBattlefieldPlayerInfo.SubCmd))] = m_NAtagMCCrossBattlefieldPlayerInfo
+
+
+#------------------------------------------------------
 # C1 02 跨服PK玩家奖励记录 #tagMCCrossRealmPKAwardState
 
 class  tagMCCrossRealmPKAwardState(Structure):
@@ -36817,6 +41695,58 @@
 
 
 #------------------------------------------------------
+# C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo
+
+class  tagMCLuckyCloudBuyPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BuyCount", c_ushort),    # 本轮已购买份数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        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 = 0xC1
+        self.SubCmd = 0x08
+        self.BuyCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCLuckyCloudBuyPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 08 幸运云购玩家信息 //tagMCLuckyCloudBuyPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BuyCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BuyCount
+                                )
+        return DumpString
+
+
+m_NAtagMCLuckyCloudBuyPlayerInfo=tagMCLuckyCloudBuyPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyCloudBuyPlayerInfo.Cmd,m_NAtagMCLuckyCloudBuyPlayerInfo.SubCmd))] = m_NAtagMCLuckyCloudBuyPlayerInfo
+
+
+#------------------------------------------------------
 # C1 04 准备进入跨服服务器 #tagMCPrepareEnterCrossServer
 
 class  tagMCPrepareEnterCrossServer(Structure):

--
Gitblit v1.8.0