From 1b561794e12bed747e200d7a1df2639d2228edad Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 28 九月 2022 16:39:04 +0800
Subject: [PATCH] 9701 【后端】【越南】【BT7】【主干】跨服竞技64位排位赛(GameServer支持功能开启判断;排位相关封包通知仅通知功能开启的玩家)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 2510 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 2,436 insertions(+), 74 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index ebff0fa..80108e3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1304,6 +1304,58 @@
 
 
 #------------------------------------------------------
+# 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):
@@ -2275,6 +2327,222 @@
 
 m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift
+
+
+#------------------------------------------------------
+# 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
 
 
 #------------------------------------------------------
@@ -3719,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):
@@ -3764,6 +4448,106 @@
 
 m_NAtagCGForceQuitCrossState=tagCGForceQuitCrossState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGForceQuitCrossState.Cmd,m_NAtagCGForceQuitCrossState.SubCmd))] = m_NAtagCGForceQuitCrossState
+
+
+#------------------------------------------------------
+# 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
 
 
 #------------------------------------------------------
@@ -6756,98 +7540,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
 
 
 #------------------------------------------------------
@@ -6956,6 +7694,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
 
 
 #------------------------------------------------------
@@ -7467,6 +8272,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
 
 
 #------------------------------------------------------
@@ -10039,6 +10904,62 @@
 
 
 #------------------------------------------------------
+# 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):
@@ -10317,6 +11238,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("Index", c_ubyte),    # 奖励索引,其他按顺序
+                  ("IsDaily", c_ubyte),    # 是否领取每日日常的奖励,是发1,如果领取定制创角天奖励的则默认发0即可
                   ]
 
     def __init__(self):
@@ -10334,6 +11256,7 @@
         self.Cmd = 0xA5
         self.SubCmd = 0x06
         self.Index = 0
+        self.IsDaily = 0
         return
 
     def GetLength(self):
@@ -10346,12 +11269,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
 
@@ -10709,6 +11634,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):
@@ -10762,6 +11743,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
 
 
 #------------------------------------------------------
@@ -12768,6 +13853,7 @@
     PacketCnt = 0    #(WORD PacketCnt)// 红包数量
     MoneyNum = 0    #(WORD MoneyNum)//金钱数量
     Wish = ""    #(char Wish[33])//祝福语
+    IsAnonymous = 0    #(BYTE IsAnonymous)//是否匿名
     data = None
 
     def __init__(self):
@@ -12783,6 +13869,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):
@@ -12794,6 +13881,7 @@
         self.PacketCnt = 0
         self.MoneyNum = 0
         self.Wish = ""
+        self.IsAnonymous = 0
         return
 
     def GetLength(self):
@@ -12803,6 +13891,7 @@
         length += 2
         length += 2
         length += 33
+        length += 1
 
         return length
 
@@ -12813,6 +13902,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):
@@ -12821,14 +13911,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
 
@@ -12999,6 +14091,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
 
 
 #------------------------------------------------------
@@ -13314,6 +14462,286 @@
 
 
 #------------------------------------------------------
+# 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):
@@ -13363,6 +14791,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
 
 
 #------------------------------------------------------
@@ -16009,6 +17619,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):
@@ -17467,6 +19461,322 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 # C1 06 跨服NPC对话 #tagCMCrossNPCTalk
 
 class  tagCMCrossNPCTalk(Structure):
@@ -17839,4 +20149,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