From 0e5941c0cd813690513cf0070eb0f52b05a712c7 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 09 十月 2022 18:50:56 +0800
Subject: [PATCH] 9455 【越南】【后端】通天令(改为按固定天数重置; 9621【越南】通天令修改)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 3547 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 3,452 insertions(+), 95 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 2ae3d31..adb01bd 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1304,6 +1304,106 @@
 
 
 #------------------------------------------------------
+# A9 A5 查看竞技场对战玩家最新信息 #tagCGQueryArenaBattlePlayer
+
+class  tagCGQueryArenaBattlePlayer(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    #目标玩家ID,仅支持查真实玩家
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA9
+        self.SubCmd = 0xA5
+        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 = 0xA9
+        self.SubCmd = 0xA5
+        self.PlayerID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGQueryArenaBattlePlayer)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 A5 查看竞技场对战玩家最新信息 //tagCGQueryArenaBattlePlayer:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID
+                                )
+        return DumpString
+
+
+m_NAtagCGQueryArenaBattlePlayer=tagCGQueryArenaBattlePlayer()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryArenaBattlePlayer.Cmd,m_NAtagCGQueryArenaBattlePlayer.SubCmd))] = m_NAtagCGQueryArenaBattlePlayer
+
+
+#------------------------------------------------------
+# A9 A8 查看竞技场对战记录 #tagCGQueryArenaBattleRecord
+
+class  tagCGQueryArenaBattleRecord(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA9
+        self.SubCmd = 0xA8
+        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 = 0xA9
+        self.SubCmd = 0xA8
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGQueryArenaBattleRecord)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 A8 查看竞技场对战记录 //tagCGQueryArenaBattleRecord:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCGQueryArenaBattleRecord=tagCGQueryArenaBattleRecord()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryArenaBattleRecord.Cmd,m_NAtagCGQueryArenaBattleRecord.SubCmd))] = m_NAtagCGQueryArenaBattleRecord
+
+
+#------------------------------------------------------
 # A9 04 查询boss信息 #tagCGQueryBossInfo
 
 class  tagCGQueryBossInfo(Structure):
@@ -2230,6 +2330,222 @@
 
 
 #------------------------------------------------------
+# B3 19 提升魅力等级 #tagCGCharmLVUp
+
+class  tagCGCharmLVUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x19
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x19
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGCharmLVUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 19 提升魅力等级 //tagCGCharmLVUp:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCGCharmLVUp=tagCGCharmLVUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmLVUp.Cmd,m_NAtagCGCharmLVUp.SubCmd))] = m_NAtagCGCharmLVUp
+
+
+#------------------------------------------------------
+# B3 09 魅力贡献榜查看 #tagCGCharmOfferBillboardQuery
+
+class  tagCGCharmOfferBillboardQuery(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    # 魅力玩家ID
+                  ("QueryType", c_ubyte),    # 查看类型: 1-总榜,2-周榜,3-日榜
+                  ("QueryCount", c_ubyte),    # 查看名次数量,最大255
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        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 = 0xB3
+        self.SubCmd = 0x09
+        self.PlayerID = 0
+        self.QueryType = 0
+        self.QueryCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGCharmOfferBillboardQuery)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 09 魅力贡献榜查看 //tagCGCharmOfferBillboardQuery:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d,
+                                QueryType:%d,
+                                QueryCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID,
+                                self.QueryType,
+                                self.QueryCount
+                                )
+        return DumpString
+
+
+m_NAtagCGCharmOfferBillboardQuery=tagCGCharmOfferBillboardQuery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmOfferBillboardQuery.Cmd,m_NAtagCGCharmOfferBillboardQuery.SubCmd))] = m_NAtagCGCharmOfferBillboardQuery
+
+
+#------------------------------------------------------
+# B3 16 和平离婚回应 #tagGCMarryBreakResponse
+
+class  tagGCMarryBreakResponse(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsOK", c_ubyte),    # 是否同意,0-否,1-是
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x16
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x16
+        self.IsOK = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCMarryBreakResponse)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 16 和平离婚回应 //tagGCMarryBreakResponse:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsOK:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsOK
+                                )
+        return DumpString
+
+
+m_NAtagGCMarryBreakResponse=tagGCMarryBreakResponse()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryBreakResponse.Cmd,m_NAtagGCMarryBreakResponse.SubCmd))] = m_NAtagGCMarryBreakResponse
+
+
+#------------------------------------------------------
+# B3 12 提亲回应 #tagCGMarryResponse
+
+class  tagCGMarryResponse(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ReqPlayerID", c_int),    # 提亲的玩家ID
+                  ("IsOK", c_ubyte),    # 是否同意,0-否,1-是
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x12
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x12
+        self.ReqPlayerID = 0
+        self.IsOK = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGMarryResponse)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 12 提亲回应 //tagCGMarryResponse:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ReqPlayerID:%d,
+                                IsOK:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ReqPlayerID,
+                                self.IsOK
+                                )
+        return DumpString
+
+
+m_NAtagCGMarryResponse=tagCGMarryResponse()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMarryResponse.Cmd,m_NAtagCGMarryResponse.SubCmd))] = m_NAtagCGMarryResponse
+
+
+#------------------------------------------------------
 #B3 04 加入黑名单 #tagCGAddBlackList
 
 class  tagCGAddBlackList(Structure):
@@ -2506,7 +2822,7 @@
 
 class  tagCGVoiceChat(Structure):
     Head = tagHead()
-    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域    
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域	
     TargetNameLen = 0    #(BYTE TargetNameLen)
     TargetName = ""    #(String TargetName)//size = TargetNameLen
     TargetID = 0    #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称
@@ -3567,6 +3883,58 @@
 
 
 #------------------------------------------------------
+# B9 11 请求加入队伍 #tagCGRequestJoinTeam
+
+class  tagCGRequestJoinTeam(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TeamID", c_int),    # 目标队伍ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        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 = 0xB9
+        self.SubCmd = 0x11
+        self.TeamID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGRequestJoinTeam)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 11 请求加入队伍 //tagCGRequestJoinTeam:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TeamID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TeamID
+                                )
+        return DumpString
+
+
+m_NAtagCGRequestJoinTeam=tagCGRequestJoinTeam()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGRequestJoinTeam.Cmd,m_NAtagCGRequestJoinTeam.SubCmd))] = m_NAtagCGRequestJoinTeam
+
+
+#------------------------------------------------------
 # B9 09 队员进入副本准备选择 #tagCGTeamMemberPrepare
 
 class  tagCGTeamMemberPrepare(Structure):
@@ -3619,6 +3987,422 @@
 
 
 #------------------------------------------------------
+# C0 21 跨服排位仙官申请回应 #tagCGChampionshipOfficialApplyReply
+
+class  tagCGChampionshipOfficialApplyReply(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MainOfficialID", c_ushort),    #界主官职ID
+                  ("OfficialID", c_ushort),    #申请官职ID
+                  ("PlayerID", c_int),    #申请的玩家ID
+                  ("IsOK", c_ubyte),    #是否同意;1-是;0-否
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x21
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x21
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.PlayerID = 0
+        self.IsOK = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGChampionshipOfficialApplyReply)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 21 跨服排位仙官申请回应 //tagCGChampionshipOfficialApplyReply:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                PlayerID:%d,
+                                IsOK:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.PlayerID,
+                                self.IsOK
+                                )
+        return DumpString
+
+
+m_NAtagCGChampionshipOfficialApplyReply=tagCGChampionshipOfficialApplyReply()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialApplyReply.Cmd,m_NAtagCGChampionshipOfficialApplyReply.SubCmd))] = m_NAtagCGChampionshipOfficialApplyReply
+
+
+#------------------------------------------------------
+# C0 23 跨服排位仙官挑战记录查询 #tagCGChampionshipOfficialChallengeQuery
+
+class  tagCGChampionshipOfficialChallengeQuery(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MainOfficialID", c_ushort),    #界主官职ID
+                  ("OfficialID", c_ushort),    #查询官职ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x23
+        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 = 0x23
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGChampionshipOfficialChallengeQuery)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 23 跨服排位仙官挑战记录查询 //tagCGChampionshipOfficialChallengeQuery:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MainOfficialID,
+                                self.OfficialID
+                                )
+        return DumpString
+
+
+m_NAtagCGChampionshipOfficialChallengeQuery=tagCGChampionshipOfficialChallengeQuery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialChallengeQuery.Cmd,m_NAtagCGChampionshipOfficialChallengeQuery.SubCmd))] = m_NAtagCGChampionshipOfficialChallengeQuery
+
+
+#------------------------------------------------------
+# C0 24 跨服排位辞退下级仙官 #tagCGChampionshipOfficialKick
+
+class  tagCGChampionshipOfficialKick(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MainOfficialID", c_ushort),    #界主官职ID
+                  ("OfficialID", c_ushort),    #目标官职ID
+                  ("PlayerID", c_int),    #目标玩家ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x24
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x24
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.PlayerID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGChampionshipOfficialKick)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 24 跨服排位辞退下级仙官 //tagCGChampionshipOfficialKick:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                PlayerID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.PlayerID
+                                )
+        return DumpString
+
+
+m_NAtagCGChampionshipOfficialKick=tagCGChampionshipOfficialKick()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialKick.Cmd,m_NAtagCGChampionshipOfficialKick.SubCmd))] = m_NAtagCGChampionshipOfficialKick
+
+
+#------------------------------------------------------
+# C0 25 跨服排位主动离任仙官 #tagCGChampionshipOfficialLeave
+
+class  tagCGChampionshipOfficialLeave(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MainOfficialID", c_ushort),    #界主官职ID
+                  ("OfficialID", c_ushort),    #离任官职ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x25
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x25
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGChampionshipOfficialLeave)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 25 跨服排位主动离任仙官 //tagCGChampionshipOfficialLeave:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MainOfficialID,
+                                self.OfficialID
+                                )
+        return DumpString
+
+
+m_NAtagCGChampionshipOfficialLeave=tagCGChampionshipOfficialLeave()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialLeave.Cmd,m_NAtagCGChampionshipOfficialLeave.SubCmd))] = m_NAtagCGChampionshipOfficialLeave
+
+
+#------------------------------------------------------
+# C0 09 跨服战场召集场次修改 #tagCGCrossBattlefieldCallChange
+
+class  tagCGCrossBattlefieldCallChange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Hour", c_ubyte),    #战场开启时
+                  ("Minute", c_ubyte),    #战场开启分
+                  ("ServerOnly", c_ubyte),    #是否仅本服玩家可加入,0-否,1-是
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        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 = 0xC0
+        self.SubCmd = 0x09
+        self.Hour = 0
+        self.Minute = 0
+        self.ServerOnly = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGCrossBattlefieldCallChange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 09 跨服战场召集场次修改 //tagCGCrossBattlefieldCallChange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Hour:%d,
+                                Minute:%d,
+                                ServerOnly:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Hour,
+                                self.Minute,
+                                self.ServerOnly
+                                )
+        return DumpString
+
+
+m_NAtagCGCrossBattlefieldCallChange=tagCGCrossBattlefieldCallChange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallChange.Cmd,m_NAtagCGCrossBattlefieldCallChange.SubCmd))] = m_NAtagCGCrossBattlefieldCallChange
+
+
+#------------------------------------------------------
+# C0 08 跨服战场召集场次踢人 #tagCGCrossBattlefieldCallKick
+
+class  tagCGCrossBattlefieldCallKick(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Hour", c_ubyte),    #战场开启时
+                  ("Minute", c_ubyte),    #战场开启分
+                  ("TagPlayerID", c_int),    #目标玩家ID,即要被踢出去的玩家ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x08
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x08
+        self.Hour = 0
+        self.Minute = 0
+        self.TagPlayerID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGCrossBattlefieldCallKick)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 08 跨服战场召集场次踢人 //tagCGCrossBattlefieldCallKick:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Hour:%d,
+                                Minute:%d,
+                                TagPlayerID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Hour,
+                                self.Minute,
+                                self.TagPlayerID
+                                )
+        return DumpString
+
+
+m_NAtagCGCrossBattlefieldCallKick=tagCGCrossBattlefieldCallKick()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallKick.Cmd,m_NAtagCGCrossBattlefieldCallKick.SubCmd))] = m_NAtagCGCrossBattlefieldCallKick
+
+
+#------------------------------------------------------
+# C0 07 跨服战场加入召集场次 #tagCGCrossBattlefieldJoinByCall
+
+class  tagCGCrossBattlefieldJoinByCall(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Hour", c_ubyte),    #战场开启时
+                  ("Minute", c_ubyte),    #战场开启分
+                  ("BuyPlayerID", c_int),    #加入目标玩家的召集队伍,即购买召集场的玩家ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x07
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x07
+        self.Hour = 0
+        self.Minute = 0
+        self.BuyPlayerID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGCrossBattlefieldJoinByCall)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 07 跨服战场加入召集场次 //tagCGCrossBattlefieldJoinByCall:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Hour:%d,
+                                Minute:%d,
+                                BuyPlayerID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Hour,
+                                self.Minute,
+                                self.BuyPlayerID
+                                )
+        return DumpString
+
+
+m_NAtagCGCrossBattlefieldJoinByCall=tagCGCrossBattlefieldJoinByCall()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldJoinByCall.Cmd,m_NAtagCGCrossBattlefieldJoinByCall.SubCmd))] = m_NAtagCGCrossBattlefieldJoinByCall
+
+
+#------------------------------------------------------
 # C0 03 强制退出跨服状态 #tagCGForceQuitCrossState
 
 class  tagCGForceQuitCrossState(Structure):
@@ -3667,6 +4451,166 @@
 
 
 #------------------------------------------------------
+# C0 06 查询幸运云购开奖记录 #tagCGQueryLuckyCloudBuyLotteryRec
+
+class  tagCGQueryLuckyCloudBuyLotteryRec(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ZoneID", c_ubyte),    #查询分区ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x06
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x06
+        self.ZoneID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGQueryLuckyCloudBuyLotteryRec)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 06 查询幸运云购开奖记录 //tagCGQueryLuckyCloudBuyLotteryRec:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ZoneID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ZoneID
+                                )
+        return DumpString
+
+
+m_NAtagCGQueryLuckyCloudBuyLotteryRec=tagCGQueryLuckyCloudBuyLotteryRec()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyLotteryRec.Cmd,m_NAtagCGQueryLuckyCloudBuyLotteryRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyLotteryRec
+
+
+#------------------------------------------------------
+# C0 05 查询幸运云购购买号码记录 #tagCGQueryLuckyCloudBuyNumRec
+
+class  tagCGQueryLuckyCloudBuyNumRec(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x05
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x05
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGQueryLuckyCloudBuyNumRec)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 05 查询幸运云购购买号码记录 //tagCGQueryLuckyCloudBuyNumRec:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCGQueryLuckyCloudBuyNumRec=tagCGQueryLuckyCloudBuyNumRec()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyNumRec.Cmd,m_NAtagCGQueryLuckyCloudBuyNumRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyNumRec
+
+
+#------------------------------------------------------
+# C0 04 查看跨服排行榜 #tagCGViewCrossBillboard
+
+class  tagCGViewCrossBillboard(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Type", c_ubyte),    #榜单类型
+                  ("GroupValue1", c_ubyte),    # 分组值1
+                  ("GroupValue2", c_ubyte),    # 分组值2,与分组值1组合归为同组榜单数据
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x04
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x04
+        self.Type = 0
+        self.GroupValue1 = 0
+        self.GroupValue2 = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGViewCrossBillboard)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 04 查看跨服排行榜 //tagCGViewCrossBillboard:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Type:%d,
+                                GroupValue1:%d,
+                                GroupValue2:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Type,
+                                self.GroupValue1,
+                                self.GroupValue2
+                                )
+        return DumpString
+
+
+m_NAtagCGViewCrossBillboard=tagCGViewCrossBillboard()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossBillboard.Cmd,m_NAtagCGViewCrossBillboard.SubCmd))] = m_NAtagCGViewCrossBillboard
+
+
+#------------------------------------------------------
 # C0 01 查看跨服竞技场赛季排行榜 #tagCGViewCrossPKBillboard
 
 class  tagCGViewCrossPKBillboard(Structure):
@@ -3674,8 +4618,8 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("ZoneID", c_ubyte),    # 赛区ID    
-                  ("SeasonID", c_ubyte),    # 赛季ID    
+                  ("ZoneID", c_ubyte),    # 赛区ID	
+                  ("SeasonID", c_ubyte),    # 赛季ID	
                   ]
 
     def __init__(self):
@@ -3896,6 +4840,58 @@
 
 m_NAtagCMPCInfo=tagCMPCInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPCInfo.Head.Cmd,m_NAtagCMPCInfo.Head.SubCmd))] = m_NAtagCMPCInfo
+
+
+#------------------------------------------------------
+# A1 23 查询充值次数 #tagCMQueryCoinToGoldCount
+
+class  tagCMQueryCoinToGoldCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("RecordID", c_ubyte),    #充值记录ID,也就是充值ID,发0则查全部
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA1
+        self.SubCmd = 0x23
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA1
+        self.SubCmd = 0x23
+        self.RecordID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMQueryCoinToGoldCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A1 23 查询充值次数 //tagCMQueryCoinToGoldCount:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                RecordID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.RecordID
+                                )
+        return DumpString
+
+
+m_NAtagCMQueryCoinToGoldCount=tagCMQueryCoinToGoldCount()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryCoinToGoldCount.Cmd,m_NAtagCMQueryCoinToGoldCount.SubCmd))] = m_NAtagCMQueryCoinToGoldCount
 
 
 #------------------------------------------------------
@@ -5554,6 +6550,58 @@
 
 
 #------------------------------------------------------
+# A2 35 选择境界难度层级 #tagCMSelectRealmDifficulty
+
+class  tagCMSelectRealmDifficulty(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("RealmDifficulty", c_ubyte),    #境界难度 = 100 + 所选境界等级,如境界13,则发113
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA2
+        self.SubCmd = 0x35
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA2
+        self.SubCmd = 0x35
+        self.RealmDifficulty = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMSelectRealmDifficulty)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A2 35 选择境界难度层级 //tagCMSelectRealmDifficulty:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                RealmDifficulty:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.RealmDifficulty
+                                )
+        return DumpString
+
+
+m_NAtagCMSelectRealmDifficulty=tagCMSelectRealmDifficulty()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectRealmDifficulty.Cmd,m_NAtagCMSelectRealmDifficulty.SubCmd))] = m_NAtagCMSelectRealmDifficulty
+
+
+#------------------------------------------------------
 # A2 30 设置聊天气泡框 #tagCMSetChatBubbleBox
 
 class  tagCMSetChatBubbleBox(Structure):
@@ -5937,6 +6985,58 @@
 
 
 #------------------------------------------------------
+# A2 07 接受任务 #tagCMTakeTask
+
+class  tagCMTakeTask(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TaskID", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA2
+        self.SubCmd = 0x07
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA2
+        self.SubCmd = 0x07
+        self.TaskID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMTakeTask)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A2 07 接受任务 //tagCMTakeTask:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TaskID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TaskID
+                                )
+        return DumpString
+
+
+m_NAtagCMTakeTask=tagCMTakeTask()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTakeTask.Cmd,m_NAtagCMTakeTask.SubCmd))] = m_NAtagCMTakeTask
+
+
+#------------------------------------------------------
 #A2 12 查看玩家详细信息#tagCMViewPlayerInfo
 
 class  tagCMViewPlayerInfo(Structure):
@@ -6231,7 +7331,7 @@
                   ("SrcBackpack", c_ubyte),    #源背包类型
                   ("DesBackPack", c_ubyte),    #目标背包类型
                   ("SrcIndex", c_ushort),    #转移物品索引位置;当全部转移时此值无效
-                  ("IsAll", c_ubyte),    #是否全部转移        
+                  ("IsAll", c_ubyte),    #是否全部转移		
                   ]
 
     def __init__(self):
@@ -6492,98 +7592,52 @@
 # A3 30 装备神装进阶 #tagCMEquipEvolve
 
 class  tagCMEquipEvolve(Structure):
-    Head = tagHead()
-    EquipIndex = 0    #(BYTE EquipIndex)// 要进阶的装备在装备背包中索引
-    NeedEquipIDIndex = 0    #(BYTE NeedEquipIDIndex)// 所需固定装备B在背包中索引
-    NeedItemIDIndexCnt = 0    #(BYTE NeedItemIDIndexCnt)// 附加材料在背包中索引个数
-    NeedItemIDIndex = list()    #(vector<BYTE> NeedItemIDIndex)// 附加材料在背包的索引列表
-    NeedSuitIndexCnt = 0    #(BYTE NeedSuitIndexCnt)// 所需套装材料在背包中索引个数
-    NeedSuitIndex = list()    #(vector<BYTE> NeedSuitIndex)// 所需套装材料在背包的索引列表
-    data = None
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("EquipIndex", c_ubyte),    # 要进阶的装备在装备背包中索引
+                  ]
 
     def __init__(self):
         self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x30
+        self.Cmd = 0xA3
+        self.SubCmd = 0x30
         return
 
-    def ReadData(self, _lpData, _pos=0, _Len=0):
+    def ReadData(self, stringData, _pos=0, _len=0):
         self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedEquipIDIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedItemIDIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.NeedItemIDIndexCnt):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.NeedItemIDIndex.append(value)
-        self.NeedSuitIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.NeedSuitIndexCnt):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.NeedSuitIndex.append(value)
-        return _pos
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
 
     def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x30
+        self.Cmd = 0xA3
+        self.SubCmd = 0x30
         self.EquipIndex = 0
-        self.NeedEquipIDIndex = 0
-        self.NeedItemIDIndexCnt = 0
-        self.NeedItemIDIndex = list()
-        self.NeedSuitIndexCnt = 0
-        self.NeedSuitIndex = list()
         return
 
     def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1
-        length += 1 * self.NeedItemIDIndexCnt
-        length += 1
-        length += 1 * self.NeedSuitIndexCnt
-
-        return length
+        return sizeof(tagCMEquipEvolve)
 
     def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.EquipIndex)
-        data = CommFunc.WriteBYTE(data, self.NeedEquipIDIndex)
-        data = CommFunc.WriteBYTE(data, self.NeedItemIDIndexCnt)
-        for i in range(self.NeedItemIDIndexCnt):
-            data = CommFunc.WriteBYTE(data, self.NeedItemIDIndex[i])
-        data = CommFunc.WriteBYTE(data, self.NeedSuitIndexCnt)
-        for i in range(self.NeedSuitIndexCnt):
-            data = CommFunc.WriteBYTE(data, self.NeedSuitIndex[i])
-        return data
+        return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                EquipIndex:%d,
-                                NeedEquipIDIndex:%d,
-                                NeedItemIDIndexCnt:%d,
-                                NeedItemIDIndex:%s,
-                                NeedSuitIndexCnt:%d,
-                                NeedSuitIndex:%s
+        DumpString = '''// A3 30 装备神装进阶 //tagCMEquipEvolve:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                EquipIndex:%d
                                 '''\
                                 %(
-                                self.Head.OutputString(),
-                                self.EquipIndex,
-                                self.NeedEquipIDIndex,
-                                self.NeedItemIDIndexCnt,
-                                "...",
-                                self.NeedSuitIndexCnt,
-                                "..."
+                                self.Cmd,
+                                self.SubCmd,
+                                self.EquipIndex
                                 )
         return DumpString
 
 
 m_NAtagCMEquipEvolve=tagCMEquipEvolve()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Head.Cmd,m_NAtagCMEquipEvolve.Head.SubCmd))] = m_NAtagCMEquipEvolve
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Cmd,m_NAtagCMEquipEvolve.SubCmd))] = m_NAtagCMEquipEvolve
 
 
 #------------------------------------------------------
@@ -6692,6 +7746,73 @@
 
 m_NAtagCMEquipPlusEvolve=tagCMEquipPlusEvolve()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPlusEvolve.Cmd,m_NAtagCMEquipPlusEvolve.SubCmd))] = m_NAtagCMEquipPlusEvolve
+
+
+#------------------------------------------------------
+# A3 31 装备神装拆解 #tagCMEquipShenDecompose
+
+class  tagCMEquipShenDecompose(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)//所在背包索引的数量
+    IndexList = list()    #(vector<WORD> IndexList)//所在背包索引列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x31
+        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.ReadWORD(_lpData,_pos)
+            self.IndexList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x31
+        self.Count = 0
+        self.IndexList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2 * 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.WriteWORD(data, self.IndexList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                IndexList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMEquipShenDecompose=tagCMEquipShenDecompose()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipShenDecompose.Head.Cmd,m_NAtagCMEquipShenDecompose.Head.SubCmd))] = m_NAtagCMEquipShenDecompose
 
 
 #------------------------------------------------------
@@ -7103,6 +8224,7 @@
                   ("SubCmd", c_ubyte),
                   ("PackType", c_ubyte),    #背包类型
                   ("ItemIndex", c_ubyte),    #物品在背包中索引
+                  ("IsAll", c_ubyte),    #是否处理所有过期物品
                   ]
 
     def __init__(self):
@@ -7121,6 +8243,7 @@
         self.SubCmd = 0x08
         self.PackType = 0
         self.ItemIndex = 0
+        self.IsAll = 0
         return
 
     def GetLength(self):
@@ -7134,13 +8257,15 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 PackType:%d,
-                                ItemIndex:%d
+                                ItemIndex:%d,
+                                IsAll:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.PackType,
-                                self.ItemIndex
+                                self.ItemIndex,
+                                self.IsAll
                                 )
         return DumpString
 
@@ -7199,6 +8324,66 @@
 
 m_NAtagCMLingQiEquipBreak=tagCMLingQiEquipBreak()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLingQiEquipBreak.Cmd,m_NAtagCMLingQiEquipBreak.SubCmd))] = m_NAtagCMLingQiEquipBreak
+
+
+#------------------------------------------------------
+# A3 27 灵器培养 #tagCMLingQiTrain
+
+class  tagCMLingQiTrain(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("EquipPlace", c_ubyte),    #灵器装备位
+                  ("TrainType", c_ubyte),    #培养类型: 1-基础培养,2-特殊培养,3-百分比培养
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x27
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x27
+        self.EquipPlace = 0
+        self.TrainType = 0
+        self.UseItemCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMLingQiTrain)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 27 灵器培养 //tagCMLingQiTrain:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                EquipPlace:%d,
+                                TrainType:%d,
+                                UseItemCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.EquipPlace,
+                                self.TrainType,
+                                self.UseItemCnt
+                                )
+        return DumpString
+
+
+m_NAtagCMLingQiTrain=tagCMLingQiTrain()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLingQiTrain.Cmd,m_NAtagCMLingQiTrain.SubCmd))] = m_NAtagCMLingQiTrain
 
 
 #------------------------------------------------------
@@ -8737,6 +9922,54 @@
 
 
 #------------------------------------------------------
+# A5 46 购买通天令 #tagCMBuyTongTianLing
+
+class  tagCMBuyTongTianLing(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x46
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x46
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMBuyTongTianLing)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 46 购买通天令 //tagCMBuyTongTianLing:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMBuyTongTianLing=tagCMBuyTongTianLing()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyTongTianLing.Cmd,m_NAtagCMBuyTongTianLing.SubCmd))] = m_NAtagCMBuyTongTianLing
+
+
+#------------------------------------------------------
 #A5 3B 请求领取补偿#tagCMRequestCompensation
 
 class  tagCMRequestCompensation(Structure):
@@ -9771,6 +11004,114 @@
 
 
 #------------------------------------------------------
+# A5 45 兑换通天令等级经验积分点 #tagCMExchangeTongTianLVPoint
+
+class  tagCMExchangeTongTianLVPoint(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ExchangePoint", c_int),    # 兑换点数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x45
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x45
+        self.ExchangePoint = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMExchangeTongTianLVPoint)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 45 兑换通天令等级经验积分点 //tagCMExchangeTongTianLVPoint:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ExchangePoint:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ExchangePoint
+                                )
+        return DumpString
+
+
+m_NAtagCMExchangeTongTianLVPoint=tagCMExchangeTongTianLVPoint()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExchangeTongTianLVPoint.Cmd,m_NAtagCMExchangeTongTianLVPoint.SubCmd))] = m_NAtagCMExchangeTongTianLVPoint
+
+
+#------------------------------------------------------
+# A5 32 法器升级 #tagCMFaQiLVUp
+
+class  tagCMFaQiLVUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
+                  ("IsAutoBuy", c_ubyte),    #是否自动购买
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x32
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x32
+        self.UseItemCnt = 0
+        self.IsAutoBuy = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFaQiLVUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 32 法器升级 //tagCMFaQiLVUp:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                UseItemCnt:%d,
+                                IsAutoBuy:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.UseItemCnt,
+                                self.IsAutoBuy
+                                )
+        return DumpString
+
+
+m_NAtagCMFaQiLVUp=tagCMFaQiLVUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaQiLVUp.Cmd,m_NAtagCMFaQiLVUp.SubCmd))] = m_NAtagCMFaQiLVUp
+
+
+#------------------------------------------------------
 # A5 1C 聚魂合成 #tagCMGatherSoulCompound
 
 class  tagCMGatherSoulCompound(Structure):
@@ -10049,6 +11390,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("Index", c_ubyte),    # 奖励索引,其他按顺序
+                  ("IsDaily", c_ubyte),    # 是否领取每日日常的奖励,是发1,如果领取定制创角天奖励的则默认发0即可
                   ]
 
     def __init__(self):
@@ -10066,6 +11408,7 @@
         self.Cmd = 0xA5
         self.SubCmd = 0x06
         self.Index = 0
+        self.IsDaily = 0
         return
 
     def GetLength(self):
@@ -10078,12 +11421,14 @@
         DumpString = '''//A5 06 玩家领取在线奖励 //tagCMGetOnlinePrize:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Index:%d
+                                Index:%d,
+                                IsDaily:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Index
+                                self.Index,
+                                self.IsDaily
                                 )
         return DumpString
 
@@ -10101,6 +11446,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("SuccID", c_int),    #成就ID
+                  ("IsPassport", c_ubyte),    #是否通行证奖励
                   ]
 
     def __init__(self):
@@ -10118,6 +11464,7 @@
         self.Cmd = 0xA5
         self.SubCmd = 0x42
         self.SuccID = 0
+        self.IsPassport = 0
         return
 
     def GetLength(self):
@@ -10130,18 +11477,128 @@
         DumpString = '''// A5 42 领取成就奖励 //tagMCGetSuccessAward:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                SuccID:%d
+                                SuccID:%d,
+                                IsPassport:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.SuccID
+                                self.SuccID,
+                                self.IsPassport
                                 )
         return DumpString
 
 
 m_NAtagMCGetSuccessAward=tagMCGetSuccessAward()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGetSuccessAward.Cmd,m_NAtagMCGetSuccessAward.SubCmd))] = m_NAtagMCGetSuccessAward
+
+
+#------------------------------------------------------
+# A5 44 通天令领取等级奖励 #tagCMGetTongTianLVAward
+
+class  tagCMGetTongTianLVAward(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TTLV", c_ubyte),    # 领取对应等级奖励,发255为一键领取所有等级奖励,包含仙品奖励
+                  ("IsXian", c_ubyte),    # 是否领取仙品奖励,仅指定等级奖励有效
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x44
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x44
+        self.TTLV = 0
+        self.IsXian = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMGetTongTianLVAward)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 44 通天令领取等级奖励 //tagCMGetTongTianLVAward:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TTLV:%d,
+                                IsXian:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TTLV,
+                                self.IsXian
+                                )
+        return DumpString
+
+
+m_NAtagCMGetTongTianLVAward=tagCMGetTongTianLVAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianLVAward.Cmd,m_NAtagCMGetTongTianLVAward.SubCmd))] = m_NAtagCMGetTongTianLVAward
+
+
+#------------------------------------------------------
+# A5 43 通天令领取任务奖励 #tagCMGetTongTianTaskAward
+
+class  tagCMGetTongTianTaskAward(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TaskID", c_ubyte),    # 任务ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x43
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x43
+        self.TaskID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMGetTongTianTaskAward)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 43 通天令领取任务奖励 //tagCMGetTongTianTaskAward:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TaskID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TaskID
+                                )
+        return DumpString
+
+
+m_NAtagCMGetTongTianTaskAward=tagCMGetTongTianTaskAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianTaskAward.Cmd,m_NAtagCMGetTongTianTaskAward.SubCmd))] = m_NAtagCMGetTongTianTaskAward
 
 
 #------------------------------------------------------
@@ -10437,6 +11894,62 @@
 
 
 #------------------------------------------------------
+# A5 31 坐骑培养 #tagCMHorseTrain
+
+class  tagCMHorseTrain(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TrainType", c_ubyte),    #培养类型: 1-基础培养,2-特殊培养,3-百分比培养
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x31
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x31
+        self.TrainType = 0
+        self.UseItemCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMHorseTrain)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 31 坐骑培养 //tagCMHorseTrain:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TrainType:%d,
+                                UseItemCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TrainType,
+                                self.UseItemCnt
+                                )
+        return DumpString
+
+
+m_NAtagCMHorseTrain=tagCMHorseTrain()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseTrain.Cmd,m_NAtagCMHorseTrain.SubCmd))] = m_NAtagCMHorseTrain
+
+
+#------------------------------------------------------
 # A5 27 坐骑提升 #tagCMHorseUp
 
 class  tagCMHorseUp(Structure):
@@ -10444,7 +11957,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("UseItemCnt", c_ubyte),    #消耗材料个数
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
                   ("IsAutoBuy", c_ubyte),    #是否自动购买
                   ]
 
@@ -10490,6 +12003,110 @@
 
 m_NAtagCMHorseUp=tagCMHorseUp()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseUp.Cmd,m_NAtagCMHorseUp.SubCmd))] = m_NAtagCMHorseUp
+
+
+#------------------------------------------------------
+# A5 34 炼体突破 #tagCMLianTiLVUp
+
+class  tagCMLianTiLVUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        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 = 0xA5
+        self.SubCmd = 0x34
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMLianTiLVUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 34 炼体突破 //tagCMLianTiLVUp:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMLianTiLVUp=tagCMLianTiLVUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiLVUp.Cmd,m_NAtagCMLianTiLVUp.SubCmd))] = m_NAtagCMLianTiLVUp
+
+
+#------------------------------------------------------
+# A5 33 炼体提升 #tagCMLianTiUp
+
+class  tagCMLianTiUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("UseItemCnt", c_int),    #消耗材料个数
+                  ("IsAutoBuy", c_ubyte),    #是否自动购买
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x33
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA5
+        self.SubCmd = 0x33
+        self.UseItemCnt = 0
+        self.IsAutoBuy = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMLianTiUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 33 炼体提升 //tagCMLianTiUp:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                UseItemCnt:%d,
+                                IsAutoBuy:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.UseItemCnt,
+                                self.IsAutoBuy
+                                )
+        return DumpString
+
+
+m_NAtagCMLianTiUp=tagCMLianTiUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiUp.Cmd,m_NAtagCMLianTiUp.SubCmd))] = m_NAtagCMLianTiUp
 
 
 #------------------------------------------------------
@@ -12496,6 +14113,7 @@
     PacketCnt = 0    #(WORD PacketCnt)// 红包数量
     MoneyNum = 0    #(WORD MoneyNum)//金钱数量
     Wish = ""    #(char Wish[33])//祝福语
+    IsAnonymous = 0    #(BYTE IsAnonymous)//是否匿名
     data = None
 
     def __init__(self):
@@ -12511,6 +14129,7 @@
         self.PacketCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -12522,6 +14141,7 @@
         self.PacketCnt = 0
         self.MoneyNum = 0
         self.Wish = ""
+        self.IsAnonymous = 0
         return
 
     def GetLength(self):
@@ -12531,6 +14151,7 @@
         length += 2
         length += 2
         length += 33
+        length += 1
 
         return length
 
@@ -12541,6 +14162,7 @@
         data = CommFunc.WriteWORD(data, self.PacketCnt)
         data = CommFunc.WriteWORD(data, self.MoneyNum)
         data = CommFunc.WriteString(data, 33, self.Wish)
+        data = CommFunc.WriteBYTE(data, self.IsAnonymous)
         return data
 
     def OutputString(self):
@@ -12549,14 +14171,16 @@
                                 RedPacketID:%d,
                                 PacketCnt:%d,
                                 MoneyNum:%d,
-                                Wish:%s
+                                Wish:%s,
+                                IsAnonymous:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.RedPacketID,
                                 self.PacketCnt,
                                 self.MoneyNum,
-                                self.Wish
+                                self.Wish,
+                                self.IsAnonymous
                                 )
         return DumpString
 
@@ -12727,6 +14351,62 @@
 
 m_NAtagCMPetClassUP=tagCMPetClassUP()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetClassUP.Cmd,m_NAtagCMPetClassUP.SubCmd))] = m_NAtagCMPetClassUP
+
+
+#------------------------------------------------------
+# A7 05 宠物培养 #tagCMPetTrain
+
+class  tagCMPetTrain(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TrainType", c_ubyte),    #培养类型: 1-基础培养,2-特殊培养,3-百分比培养
+                  ("UseItemCnt", c_ushort),    #消耗材料个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA7
+        self.SubCmd = 0x05
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA7
+        self.SubCmd = 0x05
+        self.TrainType = 0
+        self.UseItemCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMPetTrain)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 05 宠物培养 //tagCMPetTrain:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TrainType:%d,
+                                UseItemCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TrainType,
+                                self.UseItemCnt
+                                )
+        return DumpString
+
+
+m_NAtagCMPetTrain=tagCMPetTrain()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetTrain.Cmd,m_NAtagCMPetTrain.SubCmd))] = m_NAtagCMPetTrain
 
 
 #------------------------------------------------------
@@ -12986,6 +14666,342 @@
 
 
 #------------------------------------------------------
+# AA 09 集字活动兑换 #tagCMActCollectWordsExchange
+
+class  tagCMActCollectWordsExchange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号,1 或 2,相互独立的活动,可同时开启
+                  ("ExchangeNum", c_ubyte),    #兑换编号
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        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 = 0xAA
+        self.SubCmd = 0x09
+        self.ActNum = 0
+        self.ExchangeNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActCollectWordsExchange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 09 集字活动兑换 //tagCMActCollectWordsExchange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                ExchangeNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.ExchangeNum
+                                )
+        return DumpString
+
+
+m_NAtagCMActCollectWordsExchange=tagCMActCollectWordsExchange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActCollectWordsExchange.Cmd,m_NAtagCMActCollectWordsExchange.SubCmd))] = m_NAtagCMActCollectWordsExchange
+
+
+#------------------------------------------------------
+# AA 15 垃圾分类活动收集已完成的任务垃圾 #tagCMActGarbageGetTaskAward
+
+class  tagCMActGarbageGetTaskAward(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ("GarbageTaskID", c_ubyte),    #垃圾任务ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x15
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x15
+        self.ActNum = 0
+        self.GarbageTaskID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActGarbageGetTaskAward)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 15 垃圾分类活动收集已完成的任务垃圾 //tagCMActGarbageGetTaskAward:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                GarbageTaskID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.GarbageTaskID
+                                )
+        return DumpString
+
+
+m_NAtagCMActGarbageGetTaskAward=tagCMActGarbageGetTaskAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageGetTaskAward.Cmd,m_NAtagCMActGarbageGetTaskAward.SubCmd))] = m_NAtagCMActGarbageGetTaskAward
+
+
+#------------------------------------------------------
+# AA 14 垃圾分类活动分类垃圾 #tagCMActGarbageSorting
+
+class  tagCMActGarbageSorting(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
+    GarbageSortingType = 0    #(BYTE GarbageSortingType)//垃圾分类类型,即属于哪种垃圾
+    ItemIndexCount = 0    #(BYTE ItemIndexCount)//垃圾背包中的物品索引数
+    ItemIndexList = list()    #(vector<BYTE> ItemIndexList)//垃圾背包中的物品索引列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x14
+        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.GarbageSortingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ItemIndexCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.ItemIndexList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x14
+        self.ActNum = 0
+        self.GarbageSortingType = 0
+        self.ItemIndexCount = 0
+        self.ItemIndexList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1
+        length += 1 * self.ItemIndexCount
+
+        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.GarbageSortingType)
+        data = CommFunc.WriteBYTE(data, self.ItemIndexCount)
+        for i in range(self.ItemIndexCount):
+            data = CommFunc.WriteBYTE(data, self.ItemIndexList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                GarbageSortingType:%d,
+                                ItemIndexCount:%d,
+                                ItemIndexList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.GarbageSortingType,
+                                self.ItemIndexCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMActGarbageSorting=tagCMActGarbageSorting()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageSorting.Head.Cmd,m_NAtagCMActGarbageSorting.Head.SubCmd))] = m_NAtagCMActGarbageSorting
+
+
+#------------------------------------------------------
+# AA 12 选择转盘活动物品 #tagCMActTurntableChooseItem
+
+class  tagCMActTurntableChooseItem(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    GoodItemNumCount = 0    #(BYTE GoodItemNumCount)
+    GoodItemNumList = list()    #(vector<BYTE> GoodItemNumList)// 选择的极品物品编号列表
+    SuperItemNumCount = 0    #(BYTE SuperItemNumCount)
+    SuperItemNumList = list()    #(vector<BYTE> SuperItemNumList)// 选择的终极物品编号列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GoodItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GoodItemNumCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.GoodItemNumList.append(value)
+        self.SuperItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SuperItemNumCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.SuperItemNumList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x12
+        self.ActNum = 0
+        self.GoodItemNumCount = 0
+        self.GoodItemNumList = list()
+        self.SuperItemNumCount = 0
+        self.SuperItemNumList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1 * self.GoodItemNumCount
+        length += 1
+        length += 1 * self.SuperItemNumCount
+
+        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.GoodItemNumCount)
+        for i in range(self.GoodItemNumCount):
+            data = CommFunc.WriteBYTE(data, self.GoodItemNumList[i])
+        data = CommFunc.WriteBYTE(data, self.SuperItemNumCount)
+        for i in range(self.SuperItemNumCount):
+            data = CommFunc.WriteBYTE(data, self.SuperItemNumList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                GoodItemNumCount:%d,
+                                GoodItemNumList:%s,
+                                SuperItemNumCount:%d,
+                                SuperItemNumList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.GoodItemNumCount,
+                                "...",
+                                self.SuperItemNumCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMActTurntableChooseItem=tagCMActTurntableChooseItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableChooseItem.Head.Cmd,m_NAtagCMActTurntableChooseItem.Head.SubCmd))] = m_NAtagCMActTurntableChooseItem
+
+
+#------------------------------------------------------
+# AA 13 启动转盘 #tagCMActTurntableStart
+
+class  tagCMActTurntableStart(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    # 活动编号
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x13
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x13
+        self.ActNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActTurntableStart)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 13 启动转盘 //tagCMActTurntableStart:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum
+                                )
+        return DumpString
+
+
+m_NAtagCMActTurntableStart=tagCMActTurntableStart()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableStart.Cmd,m_NAtagCMActTurntableStart.SubCmd))] = m_NAtagCMActTurntableStart
+
+
+#------------------------------------------------------
 # AA 07 许愿池活动刷新奖池 #tagCMActWishingRefresh
 
 class  tagCMActWishingRefresh(Structure):
@@ -13035,6 +15051,188 @@
 
 m_NAtagCMActWishingRefresh=tagCMActWishingRefresh()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishingRefresh.Cmd,m_NAtagCMActWishingRefresh.SubCmd))] = m_NAtagCMActWishingRefresh
+
+
+#------------------------------------------------------
+# AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh
+
+class  tagCMActXianXiaMJAwardPoolRefresh(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x18
+        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 = 0x18
+        self.ActNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActXianXiaMJAwardPoolRefresh)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 18 仙匣秘境活动奖池刷新 //tagCMActXianXiaMJAwardPoolRefresh:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum
+                                )
+        return DumpString
+
+
+m_NAtagCMActXianXiaMJAwardPoolRefresh=tagCMActXianXiaMJAwardPoolRefresh()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJAwardPoolRefresh.Cmd,m_NAtagCMActXianXiaMJAwardPoolRefresh.SubCmd))] = m_NAtagCMActXianXiaMJAwardPoolRefresh
+
+
+#------------------------------------------------------
+# AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery
+
+class  tagCMActXianXiaMJLottery(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ("PosNum", c_ubyte),    #玩家点击的奖励位置编号,从1开始
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x17
+        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 = 0x17
+        self.ActNum = 0
+        self.PosNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActXianXiaMJLottery)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 17 仙匣秘境活动抽奖 //tagCMActXianXiaMJLottery:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                PosNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.PosNum
+                                )
+        return DumpString
+
+
+m_NAtagCMActXianXiaMJLottery=tagCMActXianXiaMJLottery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJLottery.Cmd,m_NAtagCMActXianXiaMJLottery.SubCmd))] = m_NAtagCMActXianXiaMJLottery
+
+
+#------------------------------------------------------
+# AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem
+
+class  tagCMActXianXiaMJSuperItem(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
+    SuperItemCount = 0    #(BYTE SuperItemCount)//选择物品数量
+    SuperItemIDList = list()    #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID;
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x16
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SuperItemCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.SuperItemIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x16
+        self.ActNum = 0
+        self.SuperItemCount = 0
+        self.SuperItemIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4 * self.SuperItemCount
+
+        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.SuperItemCount)
+        for i in range(self.SuperItemCount):
+            data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                SuperItemCount:%d,
+                                SuperItemIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.SuperItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMActXianXiaMJSuperItem=tagCMActXianXiaMJSuperItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJSuperItem.Head.Cmd,m_NAtagCMActXianXiaMJSuperItem.Head.SubCmd))] = m_NAtagCMActXianXiaMJSuperItem
 
 
 #------------------------------------------------------
@@ -13102,6 +15300,114 @@
 
 
 #------------------------------------------------------
+# AA 10 节日祝福瓶选择奖励物品 #tagCMFeastWishBottleChooseItem
+
+class  tagCMFeastWishBottleChooseItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BottleNum", c_ubyte),    #瓶子编号
+                  ("RecordIndex", c_ubyte),    #物品索引,用于选择及记录是否已选择
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x10
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x10
+        self.BottleNum = 0
+        self.RecordIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFeastWishBottleChooseItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 10 节日祝福瓶选择奖励物品 //tagCMFeastWishBottleChooseItem:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BottleNum:%d,
+                                RecordIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BottleNum,
+                                self.RecordIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMFeastWishBottleChooseItem=tagCMFeastWishBottleChooseItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishBottleChooseItem.Cmd,m_NAtagCMFeastWishBottleChooseItem.SubCmd))] = m_NAtagCMFeastWishBottleChooseItem
+
+
+#------------------------------------------------------
+# AA 11 节日祝福池祝福 #tagCMFeastWishPoolWish
+
+class  tagCMFeastWishPoolWish(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("WishCount", c_ubyte),    #祝福次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        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 = 0xAA
+        self.SubCmd = 0x11
+        self.WishCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFeastWishPoolWish)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 11 节日祝福池祝福 //tagCMFeastWishPoolWish:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                WishCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.WishCount
+                                )
+        return DumpString
+
+
+m_NAtagCMFeastWishPoolWish=tagCMFeastWishPoolWish()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishPoolWish.Cmd,m_NAtagCMFeastWishPoolWish.SubCmd))] = m_NAtagCMFeastWishPoolWish
+
+
+#------------------------------------------------------
 # AA 05 限时抢购预约 #tagCMFlashSaleAppointment
 
 class  tagCMFlashSaleAppointment(Structure):
@@ -13109,6 +15415,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
                   ("GoodsID", c_int),    # 抢购商品标识
                   ("State", c_ubyte),    # 1-预约 0-取消
                   ]
@@ -13127,6 +15434,7 @@
     def Clear(self):
         self.Cmd = 0xAA
         self.SubCmd = 0x05
+        self.ActNum = 0
         self.GoodsID = 0
         self.State = 0
         return
@@ -13141,12 +15449,14 @@
         DumpString = '''// AA 05 限时抢购预约 //tagCMFlashSaleAppointment:
                                 Cmd:%s,
                                 SubCmd:%s,
+                                ActNum:%d,
                                 GoodsID:%d,
                                 State:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
+                                self.ActNum,
                                 self.GoodsID,
                                 self.State
                                 )
@@ -14006,6 +16316,54 @@
 
 
 #------------------------------------------------------
+# B0 29 活跃放置明细查询 #tagCMActivityPlaceQuery
+
+class  tagCMActivityPlaceQuery(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        self.SubCmd = 0x29
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB0
+        self.SubCmd = 0x29
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActivityPlaceQuery)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 29 活跃放置明细查询 //tagCMActivityPlaceQuery:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMActivityPlaceQuery=tagCMActivityPlaceQuery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuery.Cmd,m_NAtagCMActivityPlaceQuery.SubCmd))] = m_NAtagCMActivityPlaceQuery
+
+
+#------------------------------------------------------
 # B0 28 活跃放置快速完成 #tagCMActivityPlaceQuickFinish
 
 class  tagCMActivityPlaceQuickFinish(Structure):
@@ -14013,6 +16371,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("FinishCount", c_ubyte),    #完成次数
                   ]
 
     def __init__(self):
@@ -14029,6 +16388,7 @@
     def Clear(self):
         self.Cmd = 0xB0
         self.SubCmd = 0x28
+        self.FinishCount = 0
         return
 
     def GetLength(self):
@@ -14040,11 +16400,13 @@
     def OutputString(self):
         DumpString = '''// B0 28 活跃放置快速完成 //tagCMActivityPlaceQuickFinish:
                                 Cmd:%s,
-                                SubCmd:%s
+                                SubCmd:%s,
+                                FinishCount:%d
                                 '''\
                                 %(
                                 self.Cmd,
-                                self.SubCmd
+                                self.SubCmd,
+                                self.FinishCount
                                 )
         return DumpString
 
@@ -14878,6 +17240,73 @@
 
 
 #------------------------------------------------------
+# B2 11 激活功能系统特权奖励 #tagCMActivateFuncSysPrivilege
+
+class  tagCMActivateFuncSysPrivilege(Structure):
+    Head = tagHead()
+    ActivateCount = 0    #(BYTE ActivateCount)// 激活个数
+    ActivateFuncSysIDList = list()    #(vector<BYTE> ActivateFuncSysIDList)// 激活功能系统ID列表,全部激活则需要发所有ID列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActivateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivateCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.ActivateFuncSysIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x11
+        self.ActivateCount = 0
+        self.ActivateFuncSysIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.ActivateCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActivateCount)
+        for i in range(self.ActivateCount):
+            data = CommFunc.WriteBYTE(data, self.ActivateFuncSysIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActivateCount:%d,
+                                ActivateFuncSysIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActivateCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMActivateFuncSysPrivilege=tagCMActivateFuncSysPrivilege()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivateFuncSysPrivilege.Head.Cmd,m_NAtagCMActivateFuncSysPrivilege.Head.SubCmd))] = m_NAtagCMActivateFuncSysPrivilege
+
+
+#------------------------------------------------------
 # B2 06 玩家加点 #tagCMAddPoint
 
 class  tagCMAddPoint(Structure):
@@ -14952,6 +17381,170 @@
 
 m_NAtagCMAddPoint=tagCMAddPoint()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMAddPoint.Head.Cmd,m_NAtagCMAddPoint.Head.SubCmd))] = m_NAtagCMAddPoint
+
+
+#------------------------------------------------------
+# B2 10 竞技场挑战玩家 #tagCMArenaBattle
+
+class  tagCMArenaBattle(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TagPlayerID", c_int),    # 目标玩家ID或机器人ID
+                  ("Result", c_ubyte),    # 0-进入自定义场景发送通知后端;1-胜利(后端处理,暂时不需要发送此状态);2-失败(前端被对手击杀需要发送此状态)
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x10
+        self.TagPlayerID = 0
+        self.Result = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMArenaBattle)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 10 竞技场挑战玩家 //tagCMArenaBattle:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TagPlayerID:%d,
+                                Result:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TagPlayerID,
+                                self.Result
+                                )
+        return DumpString
+
+
+m_NAtagCMArenaBattle=tagCMArenaBattle()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaBattle.Cmd,m_NAtagCMArenaBattle.SubCmd))] = m_NAtagCMArenaBattle
+
+
+#------------------------------------------------------
+# B2 09 竞技场匹配玩家 #tagCMArenaMatch
+
+class  tagCMArenaMatch(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsRefresh", c_ubyte),    # 0-打开界面无匹配数据时时查询,1-强制刷新匹配列表
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x09
+        self.IsRefresh = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMArenaMatch)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 09 竞技场匹配玩家 //tagCMArenaMatch:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsRefresh:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsRefresh
+                                )
+        return DumpString
+
+
+m_NAtagCMArenaMatch=tagCMArenaMatch()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaMatch.Cmd,m_NAtagCMArenaMatch.SubCmd))] = m_NAtagCMArenaMatch
+
+
+#------------------------------------------------------
+# B2 12 领取功能系统特权奖励 #tagCMGetFuncSysPrivilegeAward
+
+class  tagCMGetFuncSysPrivilegeAward(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FuncSysID", c_ubyte),    # 功能系统ID
+                  ("DayNum", c_ubyte),    # 第X天,1为第1天
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x12
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB2
+        self.SubCmd = 0x12
+        self.FuncSysID = 0
+        self.DayNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMGetFuncSysPrivilegeAward)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 12 领取功能系统特权奖励 //tagCMGetFuncSysPrivilegeAward:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                FuncSysID:%d,
+                                DayNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.FuncSysID,
+                                self.DayNum
+                                )
+        return DumpString
+
+
+m_NAtagCMGetFuncSysPrivilegeAward=tagCMGetFuncSysPrivilegeAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetFuncSysPrivilegeAward.Cmd,m_NAtagCMGetFuncSysPrivilegeAward.SubCmd))] = m_NAtagCMGetFuncSysPrivilegeAward
 
 
 #------------------------------------------------------
@@ -15286,6 +17879,390 @@
 
 
 #------------------------------------------------------
+# B3 17 情戒解锁 #tagCMLoveRingUnlock
+
+class  tagCMLoveRingUnlock(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x17
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x17
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMLoveRingUnlock)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 17 情戒解锁 //tagCMLoveRingUnlock:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMLoveRingUnlock=tagCMLoveRingUnlock()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUnlock.Cmd,m_NAtagCMLoveRingUnlock.SubCmd))] = m_NAtagCMLoveRingUnlock
+
+
+#------------------------------------------------------
+# B3 18 情戒升级 #tagCMLoveRingUp
+
+class  tagCMLoveRingUp(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("UseItemCnt", c_int),    #消耗材料个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x18
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x18
+        self.UseItemCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMLoveRingUp)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 18 情戒升级 //tagCMLoveRingUp:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                UseItemCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.UseItemCnt
+                                )
+        return DumpString
+
+
+m_NAtagCMLoveRingUp=tagCMLoveRingUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUp.Cmd,m_NAtagCMLoveRingUp.SubCmd))] = m_NAtagCMLoveRingUp
+
+
+#------------------------------------------------------
+# B3 15 离婚 #tagCMMarryBreak
+
+class  tagCMMarryBreak(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BreakType", c_ubyte),    # 0-和平离婚;1-强制离婚
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x15
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x15
+        self.BreakType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMarryBreak)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 15 离婚 //tagCMMarryBreak:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BreakType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BreakType
+                                )
+        return DumpString
+
+
+m_NAtagCMMarryBreak=tagCMMarryBreak()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBreak.Cmd,m_NAtagCMMarryBreak.SubCmd))] = m_NAtagCMMarryBreak
+
+
+#------------------------------------------------------
+# B3 14 购买婚礼烟花 #tagCMMarryBuyFireworks
+
+class  tagCMMarryBuyFireworks(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerIDA", c_int),    # 喜糖所属玩家IDA
+                  ("PlayerIDB", c_int),    # 喜糖所属玩家IDB
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x14
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x14
+        self.PlayerIDA = 0
+        self.PlayerIDB = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMarryBuyFireworks)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 14 购买婚礼烟花 //tagCMMarryBuyFireworks:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerIDA:%d,
+                                PlayerIDB:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerIDA,
+                                self.PlayerIDB
+                                )
+        return DumpString
+
+
+m_NAtagCMMarryBuyFireworks=tagCMMarryBuyFireworks()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBuyFireworks.Cmd,m_NAtagCMMarryBuyFireworks.SubCmd))] = m_NAtagCMMarryBuyFireworks
+
+
+#------------------------------------------------------
+# B3 13 吃喜糖 #tagCMMarryEatCandy
+
+class  tagCMMarryEatCandy(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerIDA", c_int),    # 喜糖所属玩家IDA
+                  ("PlayerIDB", c_int),    # 喜糖所属玩家IDB
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x13
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x13
+        self.PlayerIDA = 0
+        self.PlayerIDB = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMarryEatCandy)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 13 吃喜糖 //tagCMMarryEatCandy:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerIDA:%d,
+                                PlayerIDB:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerIDA,
+                                self.PlayerIDB
+                                )
+        return DumpString
+
+
+m_NAtagCMMarryEatCandy=tagCMMarryEatCandy()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryEatCandy.Cmd,m_NAtagCMMarryEatCandy.SubCmd))] = m_NAtagCMMarryEatCandy
+
+
+#------------------------------------------------------
+# B3 11 提亲 #tagCMMarryReq
+
+class  tagCMMarryReq(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TagPlayerID", c_int),    # 目标玩家ID
+                  ("BridePriceID", c_ubyte),    # 聘礼ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        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 = 0xB3
+        self.SubCmd = 0x11
+        self.TagPlayerID = 0
+        self.BridePriceID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMarryReq)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 11 提亲 //tagCMMarryReq:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TagPlayerID:%d,
+                                BridePriceID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TagPlayerID,
+                                self.BridePriceID
+                                )
+        return DumpString
+
+
+m_NAtagCMMarryReq=tagCMMarryReq()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryReq.Cmd,m_NAtagCMMarryReq.SubCmd))] = m_NAtagCMMarryReq
+
+
+#------------------------------------------------------
+# B3 10 送礼物 #tagCMSendGifts
+
+class  tagCMSendGifts(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TagPlayerID", c_int),    # 目标玩家ID
+                  ("GiftNum", c_ushort),    # 赠送礼物编号
+                  ("GiftCount", c_int),    # 赠送礼物数量
+                  ("IsAutoBuy", c_ubyte),    # 是否自动购买
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        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 = 0xB3
+        self.SubCmd = 0x10
+        self.TagPlayerID = 0
+        self.GiftNum = 0
+        self.GiftCount = 0
+        self.IsAutoBuy = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMSendGifts)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 10 送礼物 //tagCMSendGifts:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TagPlayerID:%d,
+                                GiftNum:%d,
+                                GiftCount:%d,
+                                IsAutoBuy:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TagPlayerID,
+                                self.GiftNum,
+                                self.GiftCount,
+                                self.IsAutoBuy
+                                )
+        return DumpString
+
+
+m_NAtagCMSendGifts=tagCMSendGifts()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSendGifts.Cmd,m_NAtagCMSendGifts.SubCmd))] = m_NAtagCMSendGifts
+
+
+#------------------------------------------------------
 # B4 0F 回收私有专属木桩怪 #tagCMRecyclePriWoodPile
 
 class  tagCMRecyclePriWoodPile(Structure):
@@ -15346,6 +18323,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("LostHP", c_int),    
+                  ("LostHPEx", c_int),    
                   ]
 
     def __init__(self):
@@ -15363,6 +18341,7 @@
         self.Cmd = 0xB4
         self.SubCmd = 0x0E
         self.LostHP = 0
+        self.LostHPEx = 0
         return
 
     def GetLength(self):
@@ -15375,12 +18354,14 @@
         DumpString = '''// B4 0E 玩家掉血 //tagCMRoleLostHP:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                LostHP:%d
+                                LostHP:%d,
+                                LostHPEx:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.LostHP
+                                self.LostHP,
+                                self.LostHPEx
                                 )
         return DumpString
 
@@ -15958,6 +18939,7 @@
                   ("ObjID", c_int),    
                   ("AttackType", c_ubyte),    #爆击, miss
                   ("HurtHP", c_int),    
+                  ("HurtHPEx", c_int),    
                   ]
 
     def __init__(self):
@@ -15974,6 +18956,7 @@
         self.ObjID = 0
         self.AttackType = 0
         self.HurtHP = 0
+        self.HurtHPEx = 0
         return
 
     def GetLength(self):
@@ -15987,13 +18970,15 @@
                                 ObjType:%d,
                                 ObjID:%d,
                                 AttackType:%d,
-                                HurtHP:%d
+                                HurtHP:%d,
+                                HurtHPEx:%d
                                 '''\
                                 %(
                                 self.ObjType,
                                 self.ObjID,
                                 self.AttackType,
-                                self.HurtHP
+                                self.HurtHP,
+                                self.HurtHPEx
                                 )
         return DumpString
 
@@ -16359,7 +19344,7 @@
 class  tagCMBiddingAuctionItem(Structure):
     Head = tagHead()
     ItemGUID = ""    #(char ItemGUID[40])
-    BiddingPrice = 0    #(WORD BiddingPrice)//竞价价格
+    BiddingPrice = 0    #(DWORD BiddingPrice)//竞价价格
     data = None
 
     def __init__(self):
@@ -16372,7 +19357,7 @@
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
         self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.BiddingPrice,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.BiddingPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -16388,7 +19373,7 @@
         length = 0
         length += self.Head.GetLength()
         length += 40
-        length += 2
+        length += 4
 
         return length
 
@@ -16396,7 +19381,7 @@
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteWORD(data, self.BiddingPrice)
+        data = CommFunc.WriteDWORD(data, self.BiddingPrice)
         return data
 
     def OutputString(self):
@@ -16575,6 +19560,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("ItemIndex", c_ubyte),    #物品在背包中索引
+                  ("SellCount", c_ushort),    #上架个数,0代表全部上架
                   ]
 
     def __init__(self):
@@ -16592,6 +19578,7 @@
         self.Cmd = 0xB5
         self.SubCmd = 0x13
         self.ItemIndex = 0
+        self.SellCount = 0
         return
 
     def GetLength(self):
@@ -16604,12 +19591,14 @@
         DumpString = '''// B5 13 拍卖行上架拍品 //tagCMSellAuctionItem:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                ItemIndex:%d
+                                ItemIndex:%d,
+                                SellCount:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.ItemIndex
+                                self.ItemIndex,
+                                self.SellCount
                                 )
         return DumpString
 
@@ -16729,6 +19718,322 @@
 
 m_NAtagCMChangeTeamCheckState=tagCMChangeTeamCheckState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeTeamCheckState.Cmd,m_NAtagCMChangeTeamCheckState.SubCmd))] = m_NAtagCMChangeTeamCheckState
+
+
+#------------------------------------------------------
+# C1 22 跨服排位竞猜 #tagCMChampionshipGuess
+
+class  tagCMChampionshipGuess(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ZoneID", c_ubyte),    #排位数据分区ID
+                  ("GuessType", c_ubyte),    #竞猜类型 8-8强;4-4强排位
+                  ("PlayerID", c_int),    #目标玩家ID
+                  ("GuessCount", c_ubyte),    #投注/追加份数
+                  ("GuessRank", c_ubyte),    # 竞猜名次,没有名次的竞猜默认0;1-代表第一名
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        self.SubCmd = 0x22
+        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 = 0x22
+        self.ZoneID = 0
+        self.GuessType = 0
+        self.PlayerID = 0
+        self.GuessCount = 0
+        self.GuessRank = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMChampionshipGuess)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 22 跨服排位竞猜 //tagCMChampionshipGuess:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ZoneID:%d,
+                                GuessType:%d,
+                                PlayerID:%d,
+                                GuessCount:%d,
+                                GuessRank:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ZoneID,
+                                self.GuessType,
+                                self.PlayerID,
+                                self.GuessCount,
+                                self.GuessRank
+                                )
+        return DumpString
+
+
+m_NAtagCMChampionshipGuess=tagCMChampionshipGuess()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipGuess.Cmd,m_NAtagCMChampionshipGuess.SubCmd))] = m_NAtagCMChampionshipGuess
+
+
+#------------------------------------------------------
+# C1 20 跨服排位仙官申请 #tagCMChampionshipOfficialApply
+
+class  tagCMChampionshipOfficialApply(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ZoneID", c_ubyte),    #仙官数据分区ID
+                  ("MainOfficialID", c_ushort),    #界主官职ID
+                  ("OfficialID", c_ushort),    #申请官职ID
+                  ("Cancel", c_ubyte),    #是否取消申请,默认0-申请;1-取消申请
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        self.SubCmd = 0x20
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC1
+        self.SubCmd = 0x20
+        self.ZoneID = 0
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.Cancel = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMChampionshipOfficialApply)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 20 跨服排位仙官申请 //tagCMChampionshipOfficialApply:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ZoneID:%d,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                Cancel:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ZoneID,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.Cancel
+                                )
+        return DumpString
+
+
+m_NAtagCMChampionshipOfficialApply=tagCMChampionshipOfficialApply()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipOfficialApply.Cmd,m_NAtagCMChampionshipOfficialApply.SubCmd))] = m_NAtagCMChampionshipOfficialApply
+
+
+#------------------------------------------------------
+# C1 21 跨服排位仙官挑战 #tagCMChampionshipOfficialChallenge
+
+class  tagCMChampionshipOfficialChallenge(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ZoneID", c_ubyte),    #仙官数据分区ID
+                  ("MainOfficialID", c_ushort),    #界主官职ID
+                  ("OfficialID", c_ushort),    #挑战的目标官职ID
+                  ("PlayerID", c_int),    #挑战时的目标玩家ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        self.SubCmd = 0x21
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC1
+        self.SubCmd = 0x21
+        self.ZoneID = 0
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.PlayerID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMChampionshipOfficialChallenge)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 21 跨服排位仙官挑战 //tagCMChampionshipOfficialChallenge:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ZoneID:%d,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                PlayerID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ZoneID,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.PlayerID
+                                )
+        return DumpString
+
+
+m_NAtagCMChampionshipOfficialChallenge=tagCMChampionshipOfficialChallenge()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipOfficialChallenge.Cmd,m_NAtagCMChampionshipOfficialChallenge.SubCmd))] = m_NAtagCMChampionshipOfficialChallenge
+
+
+#------------------------------------------------------
+# C1 23 跨服排位膜拜 #tagCMChampionshipWorship
+
+class  tagCMChampionshipWorship(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ZoneID", c_ubyte),    #仙官数据分区ID
+                  ("PlayerID", c_int),    #目标玩家ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        self.SubCmd = 0x23
+        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 = 0x23
+        self.ZoneID = 0
+        self.PlayerID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMChampionshipWorship)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 23 跨服排位膜拜 //tagCMChampionshipWorship:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ZoneID:%d,
+                                PlayerID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ZoneID,
+                                self.PlayerID
+                                )
+        return DumpString
+
+
+m_NAtagCMChampionshipWorship=tagCMChampionshipWorship()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipWorship.Cmd,m_NAtagCMChampionshipWorship.SubCmd))] = m_NAtagCMChampionshipWorship
+
+
+#------------------------------------------------------
+# C1 09 跨服战场购买开启场次 #tagCMCrossBattlefieldBuyOpen
+
+class  tagCMCrossBattlefieldBuyOpen(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Hour", c_ubyte),    #战场开启时
+                  ("Minute", c_ubyte),    #战场开启分
+                  ("Faction", c_ubyte),    #阵营 1-红;2-蓝
+                  ("ServerOnly", c_ubyte),    #是否仅本服玩家可加入,0-否,1-是
+                  ]
+
+    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.Hour = 0
+        self.Minute = 0
+        self.Faction = 0
+        self.ServerOnly = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMCrossBattlefieldBuyOpen)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 09 跨服战场购买开启场次 //tagCMCrossBattlefieldBuyOpen:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Hour:%d,
+                                Minute:%d,
+                                Faction:%d,
+                                ServerOnly:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Hour,
+                                self.Minute,
+                                self.Faction,
+                                self.ServerOnly
+                                )
+        return DumpString
+
+
+m_NAtagCMCrossBattlefieldBuyOpen=tagCMCrossBattlefieldBuyOpen()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossBattlefieldBuyOpen.Cmd,m_NAtagCMCrossBattlefieldBuyOpen.SubCmd))] = m_NAtagCMCrossBattlefieldBuyOpen
 
 
 #------------------------------------------------------
@@ -17104,4 +20409,56 @@
 
 
 m_NAtagCMExitCrossRealm=tagCMExitCrossRealm()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExitCrossRealm.Cmd,m_NAtagCMExitCrossRealm.SubCmd))] = m_NAtagCMExitCrossRealm
\ No newline at end of file
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExitCrossRealm.Cmd,m_NAtagCMExitCrossRealm.SubCmd))] = m_NAtagCMExitCrossRealm
+
+
+#------------------------------------------------------
+# C1 10 幸运云购购买 #tagCMLuckyCloudBuy
+
+class  tagCMLuckyCloudBuy(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BuyCount", c_ushort),    # 购买份数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        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 = 0xC1
+        self.SubCmd = 0x10
+        self.BuyCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMLuckyCloudBuy)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 10 幸运云购购买 //tagCMLuckyCloudBuy:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BuyCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BuyCount
+                                )
+        return DumpString
+
+
+m_NAtagCMLuckyCloudBuy=tagCMLuckyCloudBuy()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLuckyCloudBuy.Cmd,m_NAtagCMLuckyCloudBuy.SubCmd))] = m_NAtagCMLuckyCloudBuy
\ No newline at end of file

--
Gitblit v1.8.0