From bed6ef2cbf2bc9c209f2f62d53b16654f237d7c3 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 五月 2022 17:00:21 +0800
Subject: [PATCH] 9415 【BT】【后端】古神战场(战场结算排名奖励及周榜排名奖励改为超出配置的排名无奖励)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 3417 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 3,341 insertions(+), 76 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 8f6fbc3..0389a55 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -561,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
@@ -595,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
 
 
 #------------------------------------------------------
@@ -2368,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):
@@ -2376,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)//是否获胜
@@ -2395,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)
@@ -2408,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
@@ -2421,6 +2563,8 @@
         length += 1
         length += 2
         length += 2
+        length += 4
+        length += 4
         length += 4
         length += 1
         length += len(self.AddScore)
@@ -2437,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)
@@ -2451,6 +2597,8 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d,
                                 AddScoreLen:%d,
                                 AddScore:%s,
                                 IsWin:%d,
@@ -2463,6 +2611,8 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.FightPower,
+                                self.FightPowerEx,
+                                self.Score,
                                 self.AddScoreLen,
                                 self.AddScore,
                                 self.IsWin,
@@ -2546,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
 
@@ -2562,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
 
@@ -2572,6 +2724,7 @@
         self.LV = 0
         self.RealmLV = 0
         self.FightPower = 0
+        self.FightPowerEx = 0
         self.Score = 0
         return
 
@@ -2582,6 +2735,7 @@
         length += 1
         length += 2
         length += 2
+        length += 4
         length += 4
         length += 4
 
@@ -2595,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
 
@@ -2606,6 +2761,7 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 FightPower:%d,
+                                FightPowerEx:%d,
                                 Score:%d
                                 '''\
                                 %(
@@ -2615,6 +2771,7 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.FightPower,
+                                self.FightPowerEx,
                                 self.Score
                                 )
         return DumpString
@@ -7149,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):
@@ -7519,7 +8664,7 @@
     _pack_ = 1
     _fields_ = [
                   ("PlayerID", c_int),    
-                  ("SortValue", c_int),    
+                  ("SortValue", c_int),    # 亲密组时为亲密度
                   ]
 
     def __init__(self):
@@ -7556,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
@@ -11143,6 +12288,283 @@
 
 
 #------------------------------------------------------
+# 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-蓝
+    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.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.FactionPlayerCount = 0
+        self.FactionPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        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.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,
+                                FactionPlayerCount:%d,
+                                FactionPlayerList:%s
+                                '''\
+                                %(
+                                self.BuyPlayerID,
+                                self.Faction,
+                                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):
@@ -12151,6 +13573,501 @@
 
 m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
+
+
+#------------------------------------------------------
+# 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
 
 
 #------------------------------------------------------
@@ -15427,6 +17344,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):
@@ -16134,6 +18132,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
 
 
 #------------------------------------------------------
@@ -20023,60 +22077,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
 
 
 #------------------------------------------------------
@@ -23667,6 +25759,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):
@@ -24091,6 +26267,83 @@
 
 m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem
+
+
+#------------------------------------------------------
+# 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
 
 
 #------------------------------------------------------
@@ -24638,6 +26891,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):
@@ -24882,6 +27414,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
 
 
 #------------------------------------------------------
@@ -26591,8 +29265,9 @@
     LimitLV = 0    #(WORD LimitLV)// 限制等级
     CTGPrizeCount = 0    #(BYTE CTGPrizeCount)
     CTGPrizeList = list()    #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...]
-    UseGoldPrizeCount = 0    #(BYTE UseGoldPrizeCount)
-    UseGoldPrizeList = list()    #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第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)
@@ -26621,10 +29296,11 @@
         for i in range(self.CTGPrizeCount):
             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
             self.CTGPrizeList.append(value)
-        self.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.UseGoldPrizeCount):
+        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.UseGoldPrizeList.append(value)
+            self.UseMoneyPrizeList.append(value)
         self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.TurnItemCount):
             temTurnItemList = tagMCActTurntableItem()
@@ -26656,8 +29332,9 @@
         self.LimitLV = 0
         self.CTGPrizeCount = 0
         self.CTGPrizeList = list()
-        self.UseGoldPrizeCount = 0
-        self.UseGoldPrizeList = list()
+        self.UseMoneyType = 0
+        self.UseMoneyPrizeCount = 0
+        self.UseMoneyPrizeList = list()
         self.TurnItemCount = 0
         self.TurnItemList = list()
         self.GoodItemCount = 0
@@ -26679,7 +29356,8 @@
         length += 1
         length += 4 * self.CTGPrizeCount
         length += 1
-        length += 4 * self.UseGoldPrizeCount
+        length += 1
+        length += 4 * self.UseMoneyPrizeCount
         length += 1
         for i in range(self.TurnItemCount):
             length += self.TurnItemList[i].GetLength()
@@ -26705,9 +29383,10 @@
         data = CommFunc.WriteBYTE(data, self.CTGPrizeCount)
         for i in range(self.CTGPrizeCount):
             data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i])
-        data = CommFunc.WriteBYTE(data, self.UseGoldPrizeCount)
-        for i in range(self.UseGoldPrizeCount):
-            data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[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())
@@ -26731,8 +29410,9 @@
                                 LimitLV:%d,
                                 CTGPrizeCount:%d,
                                 CTGPrizeList:%s,
-                                UseGoldPrizeCount:%d,
-                                UseGoldPrizeList:%s,
+                                UseMoneyType:%d,
+                                UseMoneyPrizeCount:%d,
+                                UseMoneyPrizeList:%s,
                                 TurnItemCount:%d,
                                 TurnItemList:%s,
                                 GoodItemCount:%d,
@@ -26751,7 +29431,8 @@
                                 self.LimitLV,
                                 self.CTGPrizeCount,
                                 "...",
-                                self.UseGoldPrizeCount,
+                                self.UseMoneyType,
+                                self.UseMoneyPrizeCount,
                                 "...",
                                 self.TurnItemCount,
                                 "...",
@@ -26780,7 +29461,7 @@
                   ("ActNum", c_ubyte),    #活动编号
                   ("CanUseCount", c_ubyte),    #可转盘次数
                   ("CTGTotal", c_int),    #累计充值额度
-                  ("UseGoldTotal", c_int),    #累计消费仙玉额度
+                  ("UseMoneyTotal", c_int),    #累计消费货币额度
                   ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
                   ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
                   ]
@@ -26802,7 +29483,7 @@
         self.ActNum = 0
         self.CanUseCount = 0
         self.CTGTotal = 0
-        self.UseGoldTotal = 0
+        self.UseMoneyTotal = 0
         self.TurnItemState = 0
         self.GetItemNum = 0
         return
@@ -26820,7 +29501,7 @@
                                 ActNum:%d,
                                 CanUseCount:%d,
                                 CTGTotal:%d,
-                                UseGoldTotal:%d,
+                                UseMoneyTotal:%d,
                                 TurnItemState:%d,
                                 GetItemNum:%d
                                 '''\
@@ -26830,7 +29511,7 @@
                                 self.ActNum,
                                 self.CanUseCount,
                                 self.CTGTotal,
-                                self.UseGoldTotal,
+                                self.UseMoneyTotal,
                                 self.TurnItemState,
                                 self.GetItemNum
                                 )
@@ -27286,6 +29967,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
 
 
 #------------------------------------------------------
@@ -34679,6 +37642,80 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 # B1 03 通知玩家死亡时间 #tagMCPlayerDeadTime
 
 class  tagMCPlayerDeadTime(Structure):
@@ -36573,6 +39610,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):
@@ -38103,6 +41248,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):
@@ -38419,6 +41632,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