From f9bd7ebdd8ac7016e8cc2e0ffcb20df22d75c2a0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 27 二月 2023 15:57:07 +0800
Subject: [PATCH] 9415 【BT7】【BT8】【BT9】【主干】【后端】古神战场(跨服服务器及本服服务器时间均超过5点后可购买)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 3277 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 3,273 insertions(+), 4 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 6a91da3..f4e1af6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -5263,6 +5263,224 @@
 
 
 #------------------------------------------------------
+# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
+
+class  tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedRMB = 0    #(DWORD NeedRMB)// 所需全民充值RMB
+    NeedPlayerCount = 0    #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
+    NowPlayerCount = 0    #(WORD NowPlayerCount)// 当前充值达到该档玩家数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItemList = list()    #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagGCCrossActAllRechargeItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedRMB = 0
+        self.NeedPlayerCount = 0
+        self.NowPlayerCount = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedRMB)
+        data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
+        data = CommFunc.WriteWORD(data, self.NowPlayerCount)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedRMB:%d,
+                                NeedPlayerCount:%d,
+                                NowPlayerCount:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedRMB,
+                                self.NeedPlayerCount,
+                                self.NowPlayerCount,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeInfo(Structure):
+    Head = tagHead()
+    ServerInfoLen = 0    #(BYTE ServerInfoLen)
+    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardList = list()    #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardList = tagGCCrossActAllRechargeAward()
+            _pos = temAwardList.ReadData(_lpData, _pos)
+            self.AwardList.append(temAwardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        self.ServerInfoLen = 0
+        self.ServerIDRangeInfo = ""
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AwardCount = 0
+        self.AwardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ServerIDRangeInfo)
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
+        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ServerInfoLen:%d,
+                                ServerIDRangeInfo:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AwardCount:%d,
+                                AwardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ServerInfoLen,
+                                self.ServerIDRangeInfo,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
+
+
+#------------------------------------------------------
 # AC 12 跨服运营活动结束 # tagGCCrossActEnd
 
 class  tagGCCrossActEnd(Structure):
@@ -12288,6 +12506,922 @@
 
 
 #------------------------------------------------------
+# C0 23 跨服排位竞猜个人信息 #tagGCChampionshipGuessPriInfo
+
+class  tagGCChampionshipGuessPlayerPri(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    # 目标玩家ID
+                  ("MoneyTotal", c_int),    # 已投注该玩家货币总数
+                  ("GuessRank", c_ubyte),    # 竞猜名次,没有名次的竞猜默认0;1-代表第一名
+                  ]
+
+    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.MoneyTotal = 0
+        self.GuessRank = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCChampionshipGuessPlayerPri)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 23 跨服排位竞猜个人信息 //tagGCChampionshipGuessPriInfo:
+                                PlayerID:%d,
+                                MoneyTotal:%d,
+                                GuessRank:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.MoneyTotal,
+                                self.GuessRank
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPriList(Structure):
+    GuessType = 0    #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位
+    PlayerCount = 0    #(BYTE PlayerCount)
+    GuessPlayerList = list()    #(vector<tagGCChampionshipGuessPlayerPri> GuessPlayerList)// 被竞猜玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temGuessPlayerList = tagGCChampionshipGuessPlayerPri()
+            _pos = temGuessPlayerList.ReadData(_lpData, _pos)
+            self.GuessPlayerList.append(temGuessPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.GuessType = 0
+        self.PlayerCount = 0
+        self.GuessPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        for i in range(self.PlayerCount):
+            length += self.GuessPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GuessType)
+        data = CommFunc.WriteBYTE(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GuessType:%d,
+                                PlayerCount:%d,
+                                GuessPlayerList:%s
+                                '''\
+                                %(
+                                self.GuessType,
+                                self.PlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPriInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 排位数据分区ID
+    Count = 0    #(BYTE Count)
+    GuessList = list()    #(vector<tagGCChampionshipGuessPriList> GuessList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x23
+        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.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temGuessList = tagGCChampionshipGuessPriList()
+            _pos = temGuessList.ReadData(_lpData, _pos)
+            self.GuessList.append(temGuessList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x23
+        self.ZoneID = 0
+        self.Count = 0
+        self.GuessList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.Count):
+            length += self.GuessList[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.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                Count:%d,
+                                GuessList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipGuessPriInfo=tagGCChampionshipGuessPriInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPriInfo.Head.Cmd,m_NAtagGCChampionshipGuessPriInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPriInfo
+
+
+#------------------------------------------------------
+# C0 22 跨服排位竞猜公共信息 #tagGCChampionshipGuessPubInfo
+
+class  tagGCChampionshipGuessPlayerPub(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    # 目标玩家ID
+                  ("SupportCount", c_int),    # 支持人数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.SupportCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCChampionshipGuessPlayerPub)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 22 跨服排位竞猜公共信息 //tagGCChampionshipGuessPubInfo:
+                                PlayerID:%d,
+                                SupportCount:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.SupportCount
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPubList(Structure):
+    GuessType = 0    #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位
+    PlayerCount = 0    #(BYTE PlayerCount)
+    GuessPlayerList = list()    #(vector<tagGCChampionshipGuessPlayerPub> GuessPlayerList)// 被竞猜玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temGuessPlayerList = tagGCChampionshipGuessPlayerPub()
+            _pos = temGuessPlayerList.ReadData(_lpData, _pos)
+            self.GuessPlayerList.append(temGuessPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.GuessType = 0
+        self.PlayerCount = 0
+        self.GuessPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        for i in range(self.PlayerCount):
+            length += self.GuessPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GuessType)
+        data = CommFunc.WriteBYTE(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GuessType:%d,
+                                PlayerCount:%d,
+                                GuessPlayerList:%s
+                                '''\
+                                %(
+                                self.GuessType,
+                                self.PlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPubInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 排位数据分区ID
+    Count = 0    #(BYTE Count)
+    GuessList = list()    #(vector<tagGCChampionshipGuessPubList> GuessList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x22
+        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.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temGuessList = tagGCChampionshipGuessPubList()
+            _pos = temGuessList.ReadData(_lpData, _pos)
+            self.GuessList.append(temGuessList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x22
+        self.ZoneID = 0
+        self.Count = 0
+        self.GuessList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.Count):
+            length += self.GuessList[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.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                Count:%d,
+                                GuessList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipGuessPubInfo=tagGCChampionshipGuessPubInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPubInfo.Head.Cmd,m_NAtagGCChampionshipGuessPubInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPubInfo
+
+
+#------------------------------------------------------
+# C0 19 跨服排位仙官申请回应结果 #tagGCChampionshipOfficialApplyReplyRet
+
+class  tagGCChampionshipOfficialApplyReplyRet(Structure):
+    Head = tagHead()
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 界主玩家名
+    MainOfficialID = 0    #(WORD MainOfficialID)//界主官职ID
+    OfficialID = 0    #(WORD OfficialID)//申请官职ID
+    IsOK = 0    #(BYTE IsOK)//是否同意;1-是;0-否
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x19
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x19
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.IsOK = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        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.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.MainOfficialID)
+        data = CommFunc.WriteWORD(data, self.OfficialID)
+        data = CommFunc.WriteBYTE(data, self.IsOK)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                IsOK:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.NameLen,
+                                self.PlayerName,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.IsOK
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialApplyReplyRet=tagGCChampionshipOfficialApplyReplyRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialApplyReplyRet.Head.Cmd,m_NAtagGCChampionshipOfficialApplyReplyRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialApplyReplyRet
+
+
+#------------------------------------------------------
+# C0 21 跨服排位仙官挑战记录 #tagGCChampionshipOfficialChallengeRecordInfo
+
+class  tagGCChampionshipOfficialChallengeRecord(Structure):
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    ChallengeTime = 0    #(DWORD ChallengeTime)//挑战时间戳
+    Ret = 0    #(BYTE Ret)//挑战结果;0-失败;1-获胜;
+    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.ChallengeTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.ChallengeTime = 0
+        self.Ret = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += len(self.PlayerName)
+        length += 4
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteDWORD(data, self.ChallengeTime)
+        data = CommFunc.WriteBYTE(data, self.Ret)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NameLen:%d,
+                                PlayerName:%s,
+                                ChallengeTime:%d,
+                                Ret:%d
+                                '''\
+                                %(
+                                self.NameLen,
+                                self.PlayerName,
+                                self.ChallengeTime,
+                                self.Ret
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipOfficialChallengeRecordInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 分区ID
+    MainOfficialID = 0    #(WORD MainOfficialID)// 界主官职ID
+    OfficialID = 0    #(WORD OfficialID)// 记录的官职ID
+    RecordCount = 0    #(BYTE RecordCount)// 挑战记录数
+    RecordList = list()    #(vector<tagGCChampionshipOfficialChallengeRecord> RecordList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x21
+        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.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temRecordList = tagGCChampionshipOfficialChallengeRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x21
+        self.ZoneID = 0
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.RecordCount = 0
+        self.RecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.RecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteWORD(data, self.MainOfficialID)
+        data = CommFunc.WriteWORD(data, self.OfficialID)
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                RecordCount:%d,
+                                RecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialChallengeRecordInfo=tagGCChampionshipOfficialChallengeRecordInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRecordInfo
+
+
+#------------------------------------------------------
+# C0 20 跨服排位仙官挑战结果 #tagGCChampionshipOfficialChallengeRet
+
+class  tagGCChampionshipOfficialChallengeRet(Structure):
+    Head = tagHead()
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 原仙官玩家名,可能为空,代表本来无玩家
+    MainOfficialID = 0    #(WORD MainOfficialID)//界主官职ID
+    OfficialID = 0    #(WORD OfficialID)//挑战的官职ID
+    Ret = 0    #(BYTE Ret)//挑战结果;0-失败;1-获胜;2-目标仙官玩家ID已变更,可刷新后重试
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x20
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.Ret = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        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.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.MainOfficialID)
+        data = CommFunc.WriteWORD(data, self.OfficialID)
+        data = CommFunc.WriteBYTE(data, self.Ret)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                Ret:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.NameLen,
+                                self.PlayerName,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.Ret
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialChallengeRet=tagGCChampionshipOfficialChallengeRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRet.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRet
+
+
+#------------------------------------------------------
+# C0 18 跨服排位官职信息 #tagGCChampionshipOfficialInfo
+
+class  tagGCChampionshipOfficialPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)// 玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    FightPower = 0    #(DWORD FightPower)// 战力求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力整除亿部分
+    RealmLV = 0    #(WORD RealmLV)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.RealmLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        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.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                RealmLV:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.RealmLV
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipOfficial(Structure):
+    OfficialID = 0    #(DWORD OfficialID)// 官职ID
+    LastDismissJuniorTime = 0    #(DWORD LastDismissJuniorTime)// 上次辞退下级仙官时间戳,跨服时间,如果自己是本界主时,用于计算辞退CD
+    WorshipCount = 0    #(DWORD WorshipCount)// 被膜拜次数
+    WorshipDouble = 0    #(BYTE WorshipDouble)// 今日是否双倍膜拜,仅在规定时间点内有用
+    OfficialPlayer=tagGCChampionshipOfficialPlayer()    #(tagGCChampionshipOfficialPlayer OfficialPlayer)// 任职玩家信息,可能没有
+    ApplyPlayerCount = 0    #(BYTE ApplyPlayerCount)// 申请该仙官玩家数
+    ApplyPlayerList = list()    #(vector<tagGCChampionshipOfficialPlayer> ApplyPlayerList)// 申请该仙官玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.OfficialID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LastDismissJuniorTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WorshipCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WorshipDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        _pos = self.OfficialPlayer.ReadData(_lpData,_pos)
+        self.ApplyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ApplyPlayerCount):
+            temApplyPlayerList = tagGCChampionshipOfficialPlayer()
+            _pos = temApplyPlayerList.ReadData(_lpData, _pos)
+            self.ApplyPlayerList.append(temApplyPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.OfficialID = 0
+        self.LastDismissJuniorTime = 0
+        self.WorshipCount = 0
+        self.WorshipDouble = 0
+        self.OfficialPlayer=tagGCChampionshipOfficialPlayer()
+        self.OfficialPlayer.Clear()
+        self.ApplyPlayerCount = 0
+        self.ApplyPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += self.OfficialPlayer.GetLength()
+        length += 1
+        for i in range(self.ApplyPlayerCount):
+            length += self.ApplyPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.OfficialID)
+        data = CommFunc.WriteDWORD(data, self.LastDismissJuniorTime)
+        data = CommFunc.WriteDWORD(data, self.WorshipCount)
+        data = CommFunc.WriteBYTE(data, self.WorshipDouble)
+        data = CommFunc.WriteString(data,self.OfficialPlayer.GetLength(),self.OfficialPlayer.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ApplyPlayerCount)
+        for i in range(self.ApplyPlayerCount):
+            data = CommFunc.WriteString(data, self.ApplyPlayerList[i].GetLength(), self.ApplyPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                OfficialID:%d,
+                                LastDismissJuniorTime:%d,
+                                WorshipCount:%d,
+                                WorshipDouble:%d,
+                                OfficialPlayer:%s,
+                                ApplyPlayerCount:%d,
+                                ApplyPlayerList:%s
+                                '''\
+                                %(
+                                self.OfficialID,
+                                self.LastDismissJuniorTime,
+                                self.WorshipCount,
+                                self.WorshipDouble,
+                                self.OfficialPlayer.OutputString(),
+                                self.ApplyPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipOfficialInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 官职数据分区ID
+    OfficialCount = 0    #(BYTE OfficialCount)// 官职数,包含界主及所有仙官
+    OfficialList = list()    #(vector<tagGCChampionshipOfficial> OfficialList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x18
+        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.OfficialCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.OfficialCount):
+            temOfficialList = tagGCChampionshipOfficial()
+            _pos = temOfficialList.ReadData(_lpData, _pos)
+            self.OfficialList.append(temOfficialList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x18
+        self.ZoneID = 0
+        self.OfficialCount = 0
+        self.OfficialList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.OfficialCount):
+            length += self.OfficialList[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.WriteBYTE(data, self.OfficialCount)
+        for i in range(self.OfficialCount):
+            data = CommFunc.WriteString(data, self.OfficialList[i].GetLength(), self.OfficialList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                OfficialCount:%d,
+                                OfficialList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.OfficialCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialInfo=tagGCChampionshipOfficialInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialInfo.Head.Cmd,m_NAtagGCChampionshipOfficialInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialInfo
+
+
+#------------------------------------------------------
 # C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo
 
 class  tagGCCrossBattlefieldPlayer(Structure):
@@ -12373,6 +13507,7 @@
 class  tagGCCrossBattlefieldBuyPlayer(Structure):
     BuyPlayerID = 0    #(DWORD BuyPlayerID)//购买的玩家ID,即召集人
     Faction = 0    #(BYTE Faction)//阵营 1-红;2-蓝
+    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
     FactionPlayerCount = 0    #(BYTE FactionPlayerCount)
     FactionPlayerList = list()    #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人
     data = None
@@ -12385,6 +13520,7 @@
         self.Clear()
         self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.FactionPlayerCount):
             temFactionPlayerList = tagGCCrossBattlefieldPlayer()
@@ -12395,6 +13531,7 @@
     def Clear(self):
         self.BuyPlayerID = 0
         self.Faction = 0
+        self.ServerOnly = 0
         self.FactionPlayerCount = 0
         self.FactionPlayerList = list()
         return
@@ -12402,6 +13539,7 @@
     def GetLength(self):
         length = 0
         length += 4
+        length += 1
         length += 1
         length += 1
         for i in range(self.FactionPlayerCount):
@@ -12413,6 +13551,7 @@
         data = ''
         data = CommFunc.WriteDWORD(data, self.BuyPlayerID)
         data = CommFunc.WriteBYTE(data, self.Faction)
+        data = CommFunc.WriteBYTE(data, self.ServerOnly)
         data = CommFunc.WriteBYTE(data, self.FactionPlayerCount)
         for i in range(self.FactionPlayerCount):
             data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer())
@@ -12422,12 +13561,14 @@
         DumpString = '''
                                 BuyPlayerID:%d,
                                 Faction:%d,
+                                ServerOnly:%d,
                                 FactionPlayerCount:%d,
                                 FactionPlayerList:%s
                                 '''\
                                 %(
                                 self.BuyPlayerID,
                                 self.Faction,
+                                self.ServerOnly,
                                 self.FactionPlayerCount,
                                 "..."
                                 )
@@ -12746,6 +13887,429 @@
 
 m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo
+
+
+#------------------------------------------------------
+# C0 16 跨服排位战斗结果 #tagGCCrossChampionshipPKOver
+
+class  tagGCCrossChampionshipPKOver(Structure):
+    Head = tagHead()
+    GroupMark = 0    #(DWORD GroupMark)// 分组标识:64、32、16、8 - 64、32、16、8强赛;4 - 半决赛; 2 - 决赛
+    TimeStr = ""    #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss
+    OverType = 0    #(BYTE OverType)// 0-正常,1-有人离线
+    WinnerID = 0    #(DWORD WinnerID)// 胜方ID
+    LoserID = 0    #(DWORD LoserID)// 败方ID
+    RoundCount = 0    #(BYTE RoundCount)// PK回合数
+    RoundWinnerID = list()    #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
+    TagNameLen = 0    #(BYTE TagNameLen)
+    TagName = ""    #(String TagName)
+    Rank = 0    #(BYTE Rank)// 最终名次,决赛才有
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x16
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RoundCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.RoundWinnerID.append(value)
+        self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen)
+        self.Rank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x16
+        self.GroupMark = 0
+        self.TimeStr = ""
+        self.OverType = 0
+        self.WinnerID = 0
+        self.LoserID = 0
+        self.RoundCount = 0
+        self.RoundWinnerID = list()
+        self.TagNameLen = 0
+        self.TagName = ""
+        self.Rank = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 19
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        length += 4 * self.RoundCount
+        length += 1
+        length += len(self.TagName)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.GroupMark)
+        data = CommFunc.WriteString(data, 19, self.TimeStr)
+        data = CommFunc.WriteBYTE(data, self.OverType)
+        data = CommFunc.WriteDWORD(data, self.WinnerID)
+        data = CommFunc.WriteDWORD(data, self.LoserID)
+        data = CommFunc.WriteBYTE(data, self.RoundCount)
+        for i in range(self.RoundCount):
+            data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
+        data = CommFunc.WriteBYTE(data, self.TagNameLen)
+        data = CommFunc.WriteString(data, self.TagNameLen, self.TagName)
+        data = CommFunc.WriteBYTE(data, self.Rank)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                GroupMark:%d,
+                                TimeStr:%s,
+                                OverType:%d,
+                                WinnerID:%d,
+                                LoserID:%d,
+                                RoundCount:%d,
+                                RoundWinnerID:%s,
+                                TagNameLen:%d,
+                                TagName:%s,
+                                Rank:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.GroupMark,
+                                self.TimeStr,
+                                self.OverType,
+                                self.WinnerID,
+                                self.LoserID,
+                                self.RoundCount,
+                                "...",
+                                self.TagNameLen,
+                                self.TagName,
+                                self.Rank
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossChampionshipPKOver=tagGCCrossChampionshipPKOver()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKOver.Head.Cmd,m_NAtagGCCrossChampionshipPKOver.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKOver
+
+
+#------------------------------------------------------
+# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo
+
+class  tagGCCrossChampionshipPKBattle(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("BattleNum", c_ubyte),    # 对战组编号 1~n
+                  ("WinPlayerID", c_int),    # 获胜玩家ID
+                  ("PlayerIDA", c_int),    # 玩家IDA
+                  ("PlayerIDB", c_int),    # 玩家IDB
+                  ]
+
+    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.BattleNum = 0
+        self.WinPlayerID = 0
+        self.PlayerIDA = 0
+        self.PlayerIDB = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossChampionshipPKBattle)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo:
+                                BattleNum:%d,
+                                WinPlayerID:%d,
+                                PlayerIDA:%d,
+                                PlayerIDB:%d
+                                '''\
+                                %(
+                                self.BattleNum,
+                                self.WinPlayerID,
+                                self.PlayerIDA,
+                                self.PlayerIDB
+                                )
+        return DumpString
+
+
+class  tagGCCrossChampionshipPKGroup(Structure):
+    GroupMark = 0    #(DWORD GroupMark)// 战斗分区mark, 如 64、32、16、8、4-半决赛、2-决赛;
+    BattleCount = 0    #(BYTE BattleCount)// 对战组数
+    BattleList = list()    #(vector<tagGCCrossChampionshipPKBattle> BattleList)// 对战组列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BattleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BattleCount):
+            temBattleList = tagGCCrossChampionshipPKBattle()
+            _pos = temBattleList.ReadData(_lpData, _pos)
+            self.BattleList.append(temBattleList)
+        return _pos
+
+    def Clear(self):
+        self.GroupMark = 0
+        self.BattleCount = 0
+        self.BattleList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.BattleCount):
+            length += self.BattleList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.GroupMark)
+        data = CommFunc.WriteBYTE(data, self.BattleCount)
+        for i in range(self.BattleCount):
+            data = CommFunc.WriteString(data, self.BattleList[i].GetLength(), self.BattleList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GroupMark:%d,
+                                BattleCount:%d,
+                                BattleList:%s
+                                '''\
+                                %(
+                                self.GroupMark,
+                                self.BattleCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossChampionshipPKPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)// 玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    FightPower = 0    #(DWORD FightPower)// 战力求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力整除亿部分
+    RealmLV = 0    #(WORD RealmLV)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.RealmLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        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.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                RealmLV:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.RealmLV
+                                )
+        return DumpString
+
+
+class  tagGCCrossChampionshipPKZoneGroupInfo(Structure):
+    Head = tagHead()
+    ActID = 0    #(DWORD ActID)// 活动ID,活动ID不同则可重置前端排位赛相关缓存数据
+    StateError = 0    #(BYTE StateError)// 本次活动是否已经出现流程状态异常;如服务器异常或维护服务器导致跳过步骤,则会废弃该次比赛,直到下次新活动;
+    ZoneID = 0    #(BYTE ZoneID)// 排位分区ID
+    PlayerCount = 0    #(BYTE PlayerCount)// 参赛玩家数
+    PlayerList = list()    #(vector<tagGCCrossChampionshipPKPlayer> PlayerList)
+    GroupCount = 0    #(WORD GroupCount)
+    GroupList = list()    #(vector<tagGCCrossChampionshipPKGroup> GroupList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temPlayerList = tagGCCrossChampionshipPKPlayer()
+            _pos = temPlayerList.ReadData(_lpData, _pos)
+            self.PlayerList.append(temPlayerList)
+        self.GroupCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.GroupCount):
+            temGroupList = tagGCCrossChampionshipPKGroup()
+            _pos = temGroupList.ReadData(_lpData, _pos)
+            self.GroupList.append(temGroupList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x15
+        self.ActID = 0
+        self.StateError = 0
+        self.ZoneID = 0
+        self.PlayerCount = 0
+        self.PlayerList = list()
+        self.GroupCount = 0
+        self.GroupList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.PlayerCount):
+            length += self.PlayerList[i].GetLength()
+        length += 2
+        for i in range(self.GroupCount):
+            length += self.GroupList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ActID)
+        data = CommFunc.WriteBYTE(data, self.StateError)
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.GroupCount)
+        for i in range(self.GroupCount):
+            data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActID:%d,
+                                StateError:%d,
+                                ZoneID:%d,
+                                PlayerCount:%d,
+                                PlayerList:%s,
+                                GroupCount:%d,
+                                GroupList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActID,
+                                self.StateError,
+                                self.ZoneID,
+                                self.PlayerCount,
+                                "...",
+                                self.GroupCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossChampionshipPKZoneGroupInfo=tagGCCrossChampionshipPKZoneGroupInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.Cmd,m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKZoneGroupInfo
 
 
 #------------------------------------------------------
@@ -13573,6 +15137,118 @@
 
 m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
+
+
+#------------------------------------------------------
+# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo
+
+class  tagGCCrossYaomoBossPlayerHurtInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("HurtTotal", c_int),    # 总伤害值,小于亿部分
+                  ("HurtTotalEx", c_int),    # 总伤害值,整除亿部分
+                  ("AwardState", c_int),    # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x11
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x11
+        self.HurtTotal = 0
+        self.HurtTotalEx = 0
+        self.AwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossYaomoBossPlayerHurtInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                HurtTotal:%d,
+                                HurtTotalEx:%d,
+                                AwardState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.HurtTotal,
+                                self.HurtTotalEx,
+                                self.AwardState
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo
+
+
+#------------------------------------------------------
+# C0 10 跨服所属分区信息 #tagGCCrossZoneInfo
+
+class  tagGCCrossZoneInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CommZoneID", c_ubyte),    # 所属常规分区ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x10
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x10
+        self.CommZoneID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossZoneInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 10 跨服所属分区信息 //tagGCCrossZoneInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CommZoneID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CommZoneID
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo
 
 
 #------------------------------------------------------
@@ -19069,6 +20745,118 @@
 
 
 #------------------------------------------------------
+# A3 C7 古宝信息 #tagMCGubaoInfo
+
+class  tagMCGubao(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GubaoID", c_ushort),    
+                  ("GubaoStar", c_ubyte),    
+                  ("GubaoLV", 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.GubaoID = 0
+        self.GubaoStar = 0
+        self.GubaoLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCGubao)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 C7 古宝信息 //tagMCGubaoInfo:
+                                GubaoID:%d,
+                                GubaoStar:%d,
+                                GubaoLV:%d
+                                '''\
+                                %(
+                                self.GubaoID,
+                                self.GubaoStar,
+                                self.GubaoLV
+                                )
+        return DumpString
+
+
+class  tagMCGubaoInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    GubaoInfoList = list()    #(vector<tagMCGubao> GubaoInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC7
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temGubaoInfoList = tagMCGubao()
+            _pos = temGubaoInfoList.ReadData(_lpData, _pos)
+            self.GubaoInfoList.append(temGubaoInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC7
+        self.Count = 0
+        self.GubaoInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.GubaoInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.GubaoInfoList[i].GetLength(), self.GubaoInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                GubaoInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCGubaoInfo=tagMCGubaoInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoInfo.Head.Cmd,m_NAtagMCGubaoInfo.Head.SubCmd))] = m_NAtagMCGubaoInfo
+
+
+#------------------------------------------------------
 # A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord
 
 class  tagMCHistoryReChargeAwardRecord(Structure):
@@ -19241,6 +21029,114 @@
 
 
 #------------------------------------------------------
+# A3 10 通知坐骑幻化时效信息 #tagMCHorseSkinTimeInfoList
+
+class  tagMCHorseSkinTimeInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ID", c_int),    # 对应坐骑幻化表ID
+                  ("InvalidTime", c_int),    # 失效时间戳
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ID = 0
+        self.InvalidTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCHorseSkinTimeInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 10 通知坐骑幻化时效信息 //tagMCHorseSkinTimeInfoList:
+                                ID:%d,
+                                InvalidTime:%d
+                                '''\
+                                %(
+                                self.ID,
+                                self.InvalidTime
+                                )
+        return DumpString
+
+
+class  tagMCHorseSkinTimeInfoList(Structure):
+    Head = tagHead()
+    TimeCnt = 0    #(BYTE TimeCnt)//个数
+    TimeInfoList = list()    #(vector<tagMCHorseSkinTimeInfo> TimeInfoList)// 数据列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x10
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TimeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TimeCnt):
+            temTimeInfoList = tagMCHorseSkinTimeInfo()
+            _pos = temTimeInfoList.ReadData(_lpData, _pos)
+            self.TimeInfoList.append(temTimeInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x10
+        self.TimeCnt = 0
+        self.TimeInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.TimeCnt):
+            length += self.TimeInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.TimeCnt)
+        for i in range(self.TimeCnt):
+            data = CommFunc.WriteString(data, self.TimeInfoList[i].GetLength(), self.TimeInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TimeCnt:%d,
+                                TimeInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TimeCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCHorseSkinTimeInfoList=tagMCHorseSkinTimeInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorseSkinTimeInfoList.Head.Cmd,m_NAtagMCHorseSkinTimeInfoList.Head.SubCmd))] = m_NAtagMCHorseSkinTimeInfoList
+
+
+#------------------------------------------------------
 # A3 38 投资理财信息 #tagMCInvestInfo
 
 class  tagMCInvestInfo(Structure):
@@ -19329,6 +21225,62 @@
 
 m_NAtagMCInvestInfo=tagMCInvestInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCInvestInfo.Head.Cmd,m_NAtagMCInvestInfo.Head.SubCmd))] = m_NAtagMCInvestInfo
+
+
+#------------------------------------------------------
+# A3 55 炼体信息 #tagMCLianTiInfo
+
+class  tagMCLianTiInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("LianTiLV", c_ubyte),    #炼体等级
+                  ("EatItemCount", c_int),    #当前等级已吃丹个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x55
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x55
+        self.LianTiLV = 0
+        self.EatItemCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCLianTiInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 55 炼体信息 //tagMCLianTiInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                LianTiLV:%d,
+                                EatItemCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.LianTiLV,
+                                self.EatItemCount
+                                )
+        return DumpString
+
+
+m_NAtagMCLianTiInfo=tagMCLianTiInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLianTiInfo.Cmd,m_NAtagMCLianTiInfo.SubCmd))] = m_NAtagMCLianTiInfo
 
 
 #------------------------------------------------------
@@ -21186,6 +23138,185 @@
 
 
 #------------------------------------------------------
+# A3 C8 神通等级信息 #tagMCShentongLVInfo
+
+class  tagMCShentongLV(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ShentongID", c_ubyte),    
+                  ("ClassLV", c_ubyte),    
+                  ("LV", 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.ShentongID = 0
+        self.ClassLV = 0
+        self.LV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCShentongLV)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 C8 神通等级信息 //tagMCShentongLVInfo:
+                                ShentongID:%d,
+                                ClassLV:%d,
+                                LV:%d
+                                '''\
+                                %(
+                                self.ShentongID,
+                                self.ClassLV,
+                                self.LV
+                                )
+        return DumpString
+
+
+class  tagMCShentongLVInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    ShentongLVList = list()    #(vector<tagMCShentongLV> ShentongLVList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC8
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temShentongLVList = tagMCShentongLV()
+            _pos = temShentongLVList.ReadData(_lpData, _pos)
+            self.ShentongLVList.append(temShentongLVList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC8
+        self.Count = 0
+        self.ShentongLVList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.ShentongLVList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.ShentongLVList[i].GetLength(), self.ShentongLVList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ShentongLVList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCShentongLVInfo=tagMCShentongLVInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongLVInfo.Head.Cmd,m_NAtagMCShentongLVInfo.Head.SubCmd))] = m_NAtagMCShentongLVInfo
+
+
+#------------------------------------------------------
+# A3 C9 神通技能设置信息 #tagMCShentongSkillInfo
+
+class  tagMCShentongSkillInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    SkillIDList = list()    #(vector<DWORD> SkillIDList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC9
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.SkillIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC9
+        self.Count = 0
+        self.SkillIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.Count
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteDWORD(data, self.SkillIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                SkillIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCShentongSkillInfo=tagMCShentongSkillInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongSkillInfo.Head.Cmd,m_NAtagMCShentongSkillInfo.Head.SubCmd))] = m_NAtagMCShentongSkillInfo
+
+
+#------------------------------------------------------
 # A3 44 当日累计充值多选一礼包信息 #tagMCSingleGoldGift
 
 class  tagMCSingleGoldGift(Structure):
@@ -22074,16 +24205,302 @@
 
 
 #------------------------------------------------------
+# A3 56 通天令信息 #tagMCTongTianLingInfo
+
+class  tagMCTongTianLingInfo(Structure):
+    Head = tagHead()
+    TTLBuyState = 0    #(BYTE TTLBuyState)//通天令是否已购买
+    TTLLV = 0    #(BYTE TTLLV)//通天令等级,从0开始
+    CurPoint = 0    #(DWORD CurPoint)//通天令当前等级经验积分点
+    AwardStateCount = 0    #(BYTE AwardStateCount)//等级领奖记录值数,每个值存31个记录   0-30, 31-61, ...
+    CommAwardStateList = list()    #(vector<DWORD> CommAwardStateList)//常规奖励领奖记录,按等级二进制位存储是否领奖
+    XianAwardStateList = list()    #(vector<DWORD> XianAwardStateList)//仙品奖励领奖记录,按等级二进制位存储是否领奖
+    StartTime = 0    #(DWORD StartTime)//通天令本轮开始时间戳,秒
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x56
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TTLBuyState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TTLLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardStateCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.CommAwardStateList.append(value)
+        for i in range(self.AwardStateCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.XianAwardStateList.append(value)
+        self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x56
+        self.TTLBuyState = 0
+        self.TTLLV = 0
+        self.CurPoint = 0
+        self.AwardStateCount = 0
+        self.CommAwardStateList = list()
+        self.XianAwardStateList = list()
+        self.StartTime = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4
+        length += 1
+        length += 4 * self.AwardStateCount
+        length += 4 * self.AwardStateCount
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.TTLBuyState)
+        data = CommFunc.WriteBYTE(data, self.TTLLV)
+        data = CommFunc.WriteDWORD(data, self.CurPoint)
+        data = CommFunc.WriteBYTE(data, self.AwardStateCount)
+        for i in range(self.AwardStateCount):
+            data = CommFunc.WriteDWORD(data, self.CommAwardStateList[i])
+        for i in range(self.AwardStateCount):
+            data = CommFunc.WriteDWORD(data, self.XianAwardStateList[i])
+        data = CommFunc.WriteDWORD(data, self.StartTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TTLBuyState:%d,
+                                TTLLV:%d,
+                                CurPoint:%d,
+                                AwardStateCount:%d,
+                                CommAwardStateList:%s,
+                                XianAwardStateList:%s,
+                                StartTime:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TTLBuyState,
+                                self.TTLLV,
+                                self.CurPoint,
+                                self.AwardStateCount,
+                                "...",
+                                "...",
+                                self.StartTime
+                                )
+        return DumpString
+
+
+m_NAtagMCTongTianLingInfo=tagMCTongTianLingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingInfo.Head.Cmd,m_NAtagMCTongTianLingInfo.Head.SubCmd))] = m_NAtagMCTongTianLingInfo
+
+
+#------------------------------------------------------
+# A3 58 通天令任务奖励信息 #tagMCTongTianLingTaskAwardInfo
+
+class  tagMCTongTianLingTaskAwardInfo(Structure):
+    Head = tagHead()
+    AwardStateCount = 0    #(BYTE AwardStateCount)
+    TaskAwardStateList = list()    #(vector<DWORD> TaskAwardStateList)//任务领奖记录值个数,按任务ID二进制位存储是否已领取,每个值存31个记录   0-30, 31-61, ...
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x58
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardStateCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TaskAwardStateList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x58
+        self.AwardStateCount = 0
+        self.TaskAwardStateList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.AwardStateCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AwardStateCount)
+        for i in range(self.AwardStateCount):
+            data = CommFunc.WriteDWORD(data, self.TaskAwardStateList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AwardStateCount:%d,
+                                TaskAwardStateList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AwardStateCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCTongTianLingTaskAwardInfo=tagMCTongTianLingTaskAwardInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskAwardInfo.Head.Cmd,m_NAtagMCTongTianLingTaskAwardInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskAwardInfo
+
+
+#------------------------------------------------------
+# A3 57 通天令任务进度信息 #tagMCTongTianLingTaskValueInfo
+
+class  tagMCTongTianLingTaskValue(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("TaskType", c_ubyte),    #成就类型
+                  ("IsDaily", c_ubyte),    #是否每日任务
+                  ("TaskValue", c_int),    #当前完成进度值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.TaskType = 0
+        self.IsDaily = 0
+        self.TaskValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCTongTianLingTaskValue)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 57 通天令任务进度信息 //tagMCTongTianLingTaskValueInfo:
+                                TaskType:%d,
+                                IsDaily:%d,
+                                TaskValue:%d
+                                '''\
+                                %(
+                                self.TaskType,
+                                self.IsDaily,
+                                self.TaskValue
+                                )
+        return DumpString
+
+
+class  tagMCTongTianLingTaskValueInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)//信息个数
+    TaskValueList = list()    #(vector<tagMCTongTianLingTaskValue> TaskValueList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x57
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temTaskValueList = tagMCTongTianLingTaskValue()
+            _pos = temTaskValueList.ReadData(_lpData, _pos)
+            self.TaskValueList.append(temTaskValueList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x57
+        self.Count = 0
+        self.TaskValueList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.TaskValueList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                TaskValueList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCTongTianLingTaskValueInfo=tagMCTongTianLingTaskValueInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskValueInfo.Head.Cmd,m_NAtagMCTongTianLingTaskValueInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskValueInfo
+
+
+#------------------------------------------------------
 #A3 01 坐骑培养信息 #tagTrainHorseData
 
 class  tagTrainHorseData(Structure):
     Head = tagHead()
     LV = 0    #(BYTE LV)//等阶
     EatItemCount = 0    #(DWORD EatItemCount)//当前阶已吃丹个数
-    SkinPlusState = 0    #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位
+    SkinPlusState = 0    #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位,废弃,使用 SkinPlusStateList
     TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
     TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
     TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
+    SkinPlusStateCount = 0    #(BYTE SkinPlusStateCount)//幻化激活状态值数
+    SkinPlusStateList = list()    #(vector<DWORD> SkinPlusStateList)//幻化激活状态值列表,按位存储是否激活,幻化编号ID对应位
     data = None
 
     def __init__(self):
@@ -22105,6 +24522,10 @@
         for i in range(self.TrainTypes):
             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
             self.TrainItemCountList.append(value)
+        self.SkinPlusStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SkinPlusStateCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.SkinPlusStateList.append(value)
         return _pos
 
     def Clear(self):
@@ -22118,6 +24539,8 @@
         self.TrainTypes = 0
         self.TrainLVList = list()
         self.TrainItemCountList = list()
+        self.SkinPlusStateCount = 0
+        self.SkinPlusStateList = list()
         return
 
     def GetLength(self):
@@ -22129,6 +24552,8 @@
         length += 1
         length += 4 * self.TrainTypes
         length += 4 * self.TrainTypes
+        length += 1
+        length += 4 * self.SkinPlusStateCount
 
         return length
 
@@ -22143,6 +24568,9 @@
             data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
         for i in range(self.TrainTypes):
             data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
+        data = CommFunc.WriteBYTE(data, self.SkinPlusStateCount)
+        for i in range(self.SkinPlusStateCount):
+            data = CommFunc.WriteDWORD(data, self.SkinPlusStateList[i])
         return data
 
     def OutputString(self):
@@ -22153,7 +24581,9 @@
                                 SkinPlusState:%d,
                                 TrainTypes:%d,
                                 TrainLVList:%s,
-                                TrainItemCountList:%s
+                                TrainItemCountList:%s,
+                                SkinPlusStateCount:%d,
+                                SkinPlusStateList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -22162,6 +24592,8 @@
                                 self.SkinPlusState,
                                 self.TrainTypes,
                                 "...",
+                                "...",
+                                self.SkinPlusStateCount,
                                 "..."
                                 )
         return DumpString
@@ -27170,6 +29602,424 @@
 
 
 #------------------------------------------------------
+# AA 60 天帝礼包活动信息 #tagMCActGodGiftInfo
+
+class  tagMCActGodGiftItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemNum", c_ubyte),    # 物品在本库中的编号
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ("CanChooseTimes", c_ubyte),    #可选择次数,0代表不限次数
+                  ("ChooseTimes", c_ubyte),    #已选次数
+                  ("IsChoose", 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.ItemNum = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        self.CanChooseTimes = 0
+        self.ChooseTimes = 0
+        self.IsChoose = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActGodGiftItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 60 天帝礼包活动信息 //tagMCActGodGiftInfo:
+                                ItemNum:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d,
+                                CanChooseTimes:%d,
+                                ChooseTimes:%d,
+                                IsChoose:%d
+                                '''\
+                                %(
+                                self.ItemNum,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind,
+                                self.CanChooseTimes,
+                                self.ChooseTimes,
+                                self.IsChoose
+                                )
+        return DumpString
+
+
+class  tagMCActGodGiftItemLib(Structure):
+    ItemLibType = 0    #(BYTE ItemLibType)//物品库类型
+    NeedChooseCount = 0    #(BYTE NeedChooseCount)//需要选择个数
+    GodGiftItemCount = 0    #(BYTE GodGiftItemCount)//可选择物品个数
+    GodGiftItemList = list()    #(vector<tagMCActGodGiftItem> GodGiftItemList)//可选物品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GodGiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GodGiftItemCount):
+            temGodGiftItemList = tagMCActGodGiftItem()
+            _pos = temGodGiftItemList.ReadData(_lpData, _pos)
+            self.GodGiftItemList.append(temGodGiftItemList)
+        return _pos
+
+    def Clear(self):
+        self.ItemLibType = 0
+        self.NeedChooseCount = 0
+        self.GodGiftItemCount = 0
+        self.GodGiftItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.GodGiftItemCount):
+            length += self.GodGiftItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.ItemLibType)
+        data = CommFunc.WriteBYTE(data, self.NeedChooseCount)
+        data = CommFunc.WriteBYTE(data, self.GodGiftItemCount)
+        for i in range(self.GodGiftItemCount):
+            data = CommFunc.WriteString(data, self.GodGiftItemList[i].GetLength(), self.GodGiftItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemLibType:%d,
+                                NeedChooseCount:%d,
+                                GodGiftItemCount:%d,
+                                GodGiftItemList:%s
+                                '''\
+                                %(
+                                self.ItemLibType,
+                                self.NeedChooseCount,
+                                self.GodGiftItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActGodGiftInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)// 是否每日重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    CostMoneyType = 0    #(BYTE CostMoneyType)//消耗货币类型
+    CostMoneyValueCount = 0    #(BYTE CostMoneyValueCount)
+    CostMoneyValueList = list()    #(vector<DWORD> CostMoneyValueList)//消耗货币值列表
+    PrizeMoneyType = 0    #(BYTE PrizeMoneyType)//奖励货币类型
+    PrizeMoneyValueCount = 0    #(BYTE PrizeMoneyValueCount)
+    PrizeMoneyValueList = list()    #(vector<DWORD> PrizeMoneyValueList)//奖励货币值列表
+    ResetLimitTimes = 0    #(BYTE ResetLimitTimes)//至少抽几次才可重置奖池
+    ResetCountMax = 0    #(BYTE ResetCountMax)//最大可重置奖池次数
+    IsAwardPoolOK = 0    #(BYTE IsAwardPoolOK)//奖池是否选择完毕,否的话需要先选择奖池才可抽奖
+    ItemLibCount = 0    #(BYTE ItemLibCount)//奖池库个数	
+    ItemLibList = list()    #(vector<tagMCActGodGiftItemLib> ItemLibList)//奖池库信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x60
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.CostMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CostMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CostMoneyValueCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.CostMoneyValueList.append(value)
+        self.PrizeMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PrizeMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PrizeMoneyValueCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.PrizeMoneyValueList.append(value)
+        self.ResetLimitTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ResetCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsAwardPoolOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ItemLibCount):
+            temItemLibList = tagMCActGodGiftItemLib()
+            _pos = temItemLibList.ReadData(_lpData, _pos)
+            self.ItemLibList.append(temItemLibList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x60
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.CostMoneyType = 0
+        self.CostMoneyValueCount = 0
+        self.CostMoneyValueList = list()
+        self.PrizeMoneyType = 0
+        self.PrizeMoneyValueCount = 0
+        self.PrizeMoneyValueList = list()
+        self.ResetLimitTimes = 0
+        self.ResetCountMax = 0
+        self.IsAwardPoolOK = 0
+        self.ItemLibCount = 0
+        self.ItemLibList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        length += 4 * self.CostMoneyValueCount
+        length += 1
+        length += 1
+        length += 4 * self.PrizeMoneyValueCount
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.ItemLibCount):
+            length += self.ItemLibList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.CostMoneyType)
+        data = CommFunc.WriteBYTE(data, self.CostMoneyValueCount)
+        for i in range(self.CostMoneyValueCount):
+            data = CommFunc.WriteDWORD(data, self.CostMoneyValueList[i])
+        data = CommFunc.WriteBYTE(data, self.PrizeMoneyType)
+        data = CommFunc.WriteBYTE(data, self.PrizeMoneyValueCount)
+        for i in range(self.PrizeMoneyValueCount):
+            data = CommFunc.WriteDWORD(data, self.PrizeMoneyValueList[i])
+        data = CommFunc.WriteBYTE(data, self.ResetLimitTimes)
+        data = CommFunc.WriteBYTE(data, self.ResetCountMax)
+        data = CommFunc.WriteBYTE(data, self.IsAwardPoolOK)
+        data = CommFunc.WriteBYTE(data, self.ItemLibCount)
+        for i in range(self.ItemLibCount):
+            data = CommFunc.WriteString(data, self.ItemLibList[i].GetLength(), self.ItemLibList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                CostMoneyType:%d,
+                                CostMoneyValueCount:%d,
+                                CostMoneyValueList:%s,
+                                PrizeMoneyType:%d,
+                                PrizeMoneyValueCount:%d,
+                                PrizeMoneyValueList:%s,
+                                ResetLimitTimes:%d,
+                                ResetCountMax:%d,
+                                IsAwardPoolOK:%d,
+                                ItemLibCount:%d,
+                                ItemLibList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.CostMoneyType,
+                                self.CostMoneyValueCount,
+                                "...",
+                                self.PrizeMoneyType,
+                                self.PrizeMoneyValueCount,
+                                "...",
+                                self.ResetLimitTimes,
+                                self.ResetCountMax,
+                                self.IsAwardPoolOK,
+                                self.ItemLibCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActGodGiftInfo=tagMCActGodGiftInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftInfo.Head.Cmd,m_NAtagMCActGodGiftInfo.Head.SubCmd))] = m_NAtagMCActGodGiftInfo
+
+
+#------------------------------------------------------
+# AA 61 天帝礼包活动玩家信息 #tagMCActGodGiftPlayerInfo
+
+class  tagMCActGodGiftAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemLibType", c_ubyte),    #物品库类型
+                  ("ItemNum", 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.ItemLibType = 0
+        self.ItemNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActGodGiftAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 61 天帝礼包活动玩家信息 //tagMCActGodGiftPlayerInfo:
+                                ItemLibType:%d,
+                                ItemNum:%d
+                                '''\
+                                %(
+                                self.ItemLibType,
+                                self.ItemNum
+                                )
+        return DumpString
+
+
+class  tagMCActGodGiftPlayerInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    ResetCount = 0    #(BYTE ResetCount)// 本次活动已重置次数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 本次奖池已抽中奖品个数,也代表本次奖池已抽奖次数
+    AwardItemList = list()    #(vector<tagMCActGodGiftAwardItem> AwardItemList)// 本次奖池已抽中物品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x61
+        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.ResetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagMCActGodGiftAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x61
+        self.ActNum = 0
+        self.ResetCount = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteBYTE(data, self.ResetCount)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                ResetCount:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.ResetCount,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActGodGiftPlayerInfo=tagMCActGodGiftPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftPlayerInfo.Head.Cmd,m_NAtagMCActGodGiftPlayerInfo.Head.SubCmd))] = m_NAtagMCActGodGiftPlayerInfo
+
+
+#------------------------------------------------------
 # AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo
 
 class  tagMCActGrowupBuyCTGItem(Structure):
@@ -28285,6 +31135,305 @@
 
 m_NAtagMCActManyDayRechargePlayerInfo=tagMCActManyDayRechargePlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargePlayerInfo.Head.Cmd,m_NAtagMCActManyDayRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargePlayerInfo
+
+
+#------------------------------------------------------
+# AA 62 充值抵扣活动信息 #tagMCActRecharegeCouponInfo
+
+class  tagMCActRecharegeCouponItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ("IsMainItem", c_ubyte),    #是否标的物
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        self.IsMainItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActRecharegeCouponItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 62 充值抵扣活动信息 //tagMCActRecharegeCouponInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d,
+                                IsMainItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind,
+                                self.IsMainItem
+                                )
+        return DumpString
+
+
+class  tagMCActRecharegeCouponGiftbag(Structure):
+    GiftID = 0    #(DWORD GiftID)//商城表的物品ID
+    BuyCountLimit = 0    #(BYTE BuyCountLimit)//限购数
+    MoneyType = 0    #(BYTE MoneyType)//消耗货币类型
+    MoneyNumber = 0    #(DWORD MoneyNumber)//消耗货币数量
+    MoneyOriginal = 0    #(DWORD MoneyOriginal)//原价
+    GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
+    ItemInfo = list()    #(vector<tagMCActRecharegeCouponItem> ItemInfo)// 物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyNumber,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MoneyOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftItemCount):
+            temItemInfo = tagMCActRecharegeCouponItem()
+            _pos = temItemInfo.ReadData(_lpData, _pos)
+            self.ItemInfo.append(temItemInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftID = 0
+        self.BuyCountLimit = 0
+        self.MoneyType = 0
+        self.MoneyNumber = 0
+        self.MoneyOriginal = 0
+        self.GiftItemCount = 0
+        self.ItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.GiftItemCount):
+            length += self.ItemInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.GiftID)
+        data = CommFunc.WriteBYTE(data, self.BuyCountLimit)
+        data = CommFunc.WriteBYTE(data, self.MoneyType)
+        data = CommFunc.WriteDWORD(data, self.MoneyNumber)
+        data = CommFunc.WriteDWORD(data, self.MoneyOriginal)
+        data = CommFunc.WriteBYTE(data, self.GiftItemCount)
+        for i in range(self.GiftItemCount):
+            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftID:%d,
+                                BuyCountLimit:%d,
+                                MoneyType:%d,
+                                MoneyNumber:%d,
+                                MoneyOriginal:%d,
+                                GiftItemCount:%d,
+                                ItemInfo:%s
+                                '''\
+                                %(
+                                self.GiftID,
+                                self.BuyCountLimit,
+                                self.MoneyType,
+                                self.MoneyNumber,
+                                self.MoneyOriginal,
+                                self.GiftItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActRecharegeCouponInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    CouponMoneyType = 0    #(BYTE CouponMoneyType)//抵扣券对应货币类型
+    GiftbagCount = 0    #(BYTE GiftbagCount)// 可购买礼包个数
+    GiftbagList = list()    #(vector<tagMCActRecharegeCouponGiftbag> GiftbagList)// 可购买礼包顺序列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x62
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.CouponMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagCount):
+            temGiftbagList = tagMCActRecharegeCouponGiftbag()
+            _pos = temGiftbagList.ReadData(_lpData, _pos)
+            self.GiftbagList.append(temGiftbagList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x62
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.CouponMoneyType = 0
+        self.GiftbagCount = 0
+        self.GiftbagList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.GiftbagCount):
+            length += self.GiftbagList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.CouponMoneyType)
+        data = CommFunc.WriteBYTE(data, self.GiftbagCount)
+        for i in range(self.GiftbagCount):
+            data = CommFunc.WriteString(data, self.GiftbagList[i].GetLength(), self.GiftbagList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                CouponMoneyType:%d,
+                                GiftbagCount:%d,
+                                GiftbagList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.CouponMoneyType,
+                                self.GiftbagCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActRecharegeCouponInfo=tagMCActRecharegeCouponInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponInfo.Head.Cmd,m_NAtagMCActRecharegeCouponInfo.Head.SubCmd))] = m_NAtagMCActRecharegeCouponInfo
+
+
+#------------------------------------------------------
+# AA 63 充值抵扣活动玩家信息 #tagMCActRecharegeCouponPlayerInfo
+
+class  tagMCActRecharegeCouponPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    # 活动编号
+                  ("CouponMoney", c_int),    # 当前可用抵扣点
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x63
+        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 = 0x63
+        self.ActNum = 0
+        self.CouponMoney = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActRecharegeCouponPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 63 充值抵扣活动玩家信息 //tagMCActRecharegeCouponPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                CouponMoney:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.CouponMoney
+                                )
+        return DumpString
+
+
+m_NAtagMCActRecharegeCouponPlayerInfo=tagMCActRecharegeCouponPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponPlayerInfo.Cmd,m_NAtagMCActRecharegeCouponPlayerInfo.SubCmd))] = m_NAtagMCActRecharegeCouponPlayerInfo
 
 
 #------------------------------------------------------
@@ -31113,6 +34262,62 @@
 
 m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo
+
+
+#------------------------------------------------------
+# AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo
+
+class  tagMCCrossActAllRechargePlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CTGRMBTotal", c_int),    # 活动已累计充值RMB
+                  ("AwardRecord", c_int),    # 奖励记录,根据奖励索引位或运算判断是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x34
+        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 = 0x34
+        self.CTGRMBTotal = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCrossActAllRechargePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CTGRMBTotal:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CTGRMBTotal,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo
 
 
 #------------------------------------------------------
@@ -41248,6 +44453,58 @@
 
 
 #------------------------------------------------------
+# C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo
+
+class  tagMCChampionshipPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("WorshipCount", c_ubyte),    # 今日已膜拜次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        self.SubCmd = 0x09
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC1
+        self.SubCmd = 0x09
+        self.WorshipCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCChampionshipPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 09 跨服排位玩家信息 //tagMCChampionshipPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                WorshipCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.WorshipCount
+                                )
+        return DumpString
+
+
+m_NAtagMCChampionshipPlayerInfo=tagMCChampionshipPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChampionshipPlayerInfo.Cmd,m_NAtagMCChampionshipPlayerInfo.SubCmd))] = m_NAtagMCChampionshipPlayerInfo
+
+
+#------------------------------------------------------
 # C1 07 跨服战场玩家信息 #tagMCCrossBattlefieldPlayerInfo
 
 class  tagMCCrossBattlefieldPlayerInfo(Structure):
@@ -41257,6 +44514,9 @@
                   ("SubCmd", c_ubyte),
                   ("BuyOpenCountToday", c_ubyte),    # 今日已购买开启战场次数
                   ("HighScoreToday", c_int),    # 今日最高积分
+                  ("EnterCountWeek", c_int),    # 本周总参与次数
+                  ("BuyOpenCountWeek", c_int),    # 本周总购买召集次数
+                  ("HighScoreTotalWeek", c_int),    # 本周每日最高分累加总分
                   ]
 
     def __init__(self):
@@ -41275,6 +44535,9 @@
         self.SubCmd = 0x07
         self.BuyOpenCountToday = 0
         self.HighScoreToday = 0
+        self.EnterCountWeek = 0
+        self.BuyOpenCountWeek = 0
+        self.HighScoreTotalWeek = 0
         return
 
     def GetLength(self):
@@ -41288,13 +44551,19 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 BuyOpenCountToday:%d,
-                                HighScoreToday:%d
+                                HighScoreToday:%d,
+                                EnterCountWeek:%d,
+                                BuyOpenCountWeek:%d,
+                                HighScoreTotalWeek:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.BuyOpenCountToday,
-                                self.HighScoreToday
+                                self.HighScoreToday,
+                                self.EnterCountWeek,
+                                self.BuyOpenCountWeek,
+                                self.HighScoreTotalWeek
                                 )
         return DumpString
 

--
Gitblit v1.8.0