From e41e926bbbd0255acde8b4b62d5558a025b83a02 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 11 六月 2025 17:18:27 +0800
Subject: [PATCH] 10263 【越南】【BT】增加后台执行命令清除本服榜单某个玩家ID数据: ClearBillboardData

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 1146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 1,111 insertions(+), 35 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 0f9e00f..939ec1a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1026,6 +1026,58 @@
 
 
 #------------------------------------------------------
+# A4 14 查看目标仙盟 #tagCGViewTagFamily
+
+class  tagCGViewTagFamily(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TagFamilyID", c_int),    # 目标仙盟ID,支持查看跨服仙盟
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA4
+        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 = 0xA4
+        self.SubCmd = 0x14
+        self.TagFamilyID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGViewTagFamily)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A4 14 查看目标仙盟 //tagCGViewTagFamily:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TagFamilyID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TagFamilyID
+                                )
+        return DumpString
+
+
+m_NAtagCGViewTagFamily=tagCGViewTagFamily()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewTagFamily.Cmd,m_NAtagCGViewTagFamily.SubCmd))] = m_NAtagCGViewTagFamily
+
+
+#------------------------------------------------------
 # A9 03 关注BOSS刷新 #tagCGAttentionBoss
 
 class  tagCGAttentionBoss(Structure):
@@ -5089,6 +5141,70 @@
 
 
 #------------------------------------------------------
+# C0 26 仙盟攻城战查询 #tagCGFamilyGCZQuery
+
+class  tagCGFamilyGCZQuery(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("QueryType", c_ubyte),    #查询类型:1-成员捐献值;2-进入城池场景;3-退出城池场景;4-进入城池;5-退出城池;6-战报;7-分组仙盟成员伤害;
+                  ("BatType", c_ubyte),    #指定战场类型,需要发送的查询类型: 2、4
+                  ("GroupNum", c_ubyte),    #指定分组编号,需要发送的查询类型: 2、4
+                  ("FamilyID", c_int),    #指定仙盟ID或城池ID,查自己盟的可不发,需要发的类型:2、4、6、7
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x26
+        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 = 0x26
+        self.QueryType = 0
+        self.BatType = 0
+        self.GroupNum = 0
+        self.FamilyID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCGFamilyGCZQuery)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 26 仙盟攻城战查询 //tagCGFamilyGCZQuery:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                QueryType:%d,
+                                BatType:%d,
+                                GroupNum:%d,
+                                FamilyID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.QueryType,
+                                self.BatType,
+                                self.GroupNum,
+                                self.FamilyID
+                                )
+        return DumpString
+
+
+m_NAtagCGFamilyGCZQuery=tagCGFamilyGCZQuery()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGFamilyGCZQuery.Cmd,m_NAtagCGFamilyGCZQuery.SubCmd))] = m_NAtagCGFamilyGCZQuery
+
+
+#------------------------------------------------------
 # C0 03 强制退出跨服状态 #tagCGForceQuitCrossState
 
 class  tagCGForceQuitCrossState(Structure):
@@ -5245,8 +5361,8 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("Type", c_ubyte),    #榜单类型
-                  ("GroupValue1", c_ubyte),    # 分组值1
-                  ("GroupValue2", c_ubyte),    # 分组值2,与分组值1组合归为同组榜单数据
+                  ("GroupValue1", c_int),    # 分组值1
+                  ("GroupValue2", c_int),    # 分组值2,与分组值1组合归为同组榜单数据
                   ("StartIndex", c_int),    #查看的起始名次索引, 默认0
                   ("WatchCnt", c_ubyte),    #查看条数,默认20,最大不超过100
                   ("WatchID", c_int),    #查看指定ID名次前后,如玩家ID、家族ID等
@@ -5887,6 +6003,54 @@
 
 
 #------------------------------------------------------
+# A1 09 同步打包玩家数据 #tagCMSycnPlayerPackData
+
+class  tagCMSycnPlayerPackData(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA1
+        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 = 0xA1
+        self.SubCmd = 0x09
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMSycnPlayerPackData)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A1 09 同步打包玩家数据 //tagCMSycnPlayerPackData:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMSycnPlayerPackData=tagCMSycnPlayerPackData()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSycnPlayerPackData.Cmd,m_NAtagCMSycnPlayerPackData.SubCmd))] = m_NAtagCMSycnPlayerPackData
+
+
+#------------------------------------------------------
 #A1 03 设置是否成年 #tagCMAdult
 
 class  tagCMAdult(Structure):
@@ -6237,6 +6401,58 @@
 
 m_NAtagCMBuyItemBack=tagCMBuyItemBack()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItemBack.Cmd,m_NAtagCMBuyItemBack.SubCmd))] = m_NAtagCMBuyItemBack
+
+
+#------------------------------------------------------
+# A2 36 聊天气泡框升星 #tagCMChatBubbleBoxStarUP
+
+class  tagCMChatBubbleBoxStarUP(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BoxID", c_ubyte),    #气泡ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA2
+        self.SubCmd = 0x36
+        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 = 0x36
+        self.BoxID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMChatBubbleBoxStarUP)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A2 36 聊天气泡框升星 //tagCMChatBubbleBoxStarUP:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BoxID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BoxID
+                                )
+        return DumpString
+
+
+m_NAtagCMChatBubbleBoxStarUP=tagCMChatBubbleBoxStarUP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChatBubbleBoxStarUP.Cmd,m_NAtagCMChatBubbleBoxStarUP.SubCmd))] = m_NAtagCMChatBubbleBoxStarUP
 
 
 #------------------------------------------------------
@@ -7501,7 +7717,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("RealmDifficulty", c_ubyte),    #境界难度 = 100 + 所选境界等级,如境界13,则发113
+                  ("RealmDifficulty", c_ushort),    #境界难度 = 1000 + 所选境界等级,如境界13,则发1013
                   ]
 
     def __init__(self):
@@ -7790,6 +8006,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("CountID", c_int),    # 计数ID,客户端与策划约定,可以是NPCID或其他
+                  ("Type", c_ubyte),    # 1-杀怪
                   ]
 
     def __init__(self):
@@ -7807,6 +8024,7 @@
         self.Cmd = 0xA2
         self.SubCmd = 0x25
         self.CountID = 0
+        self.Type = 0
         return
 
     def GetLength(self):
@@ -7819,12 +8037,14 @@
         DumpString = '''//A2 25 客户端任务计数 // tagCMClientTaskCount:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                CountID:%d
+                                CountID:%d,
+                                Type:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.CountID
+                                self.CountID,
+                                self.Type
                                 )
         return DumpString
 
@@ -8086,6 +8306,62 @@
 
 m_NAtagCMAddFruitUseLimit=tagCMAddFruitUseLimit()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMAddFruitUseLimit.Cmd,m_NAtagCMAddFruitUseLimit.SubCmd))] = m_NAtagCMAddFruitUseLimit
+
+
+#------------------------------------------------------
+# A3 10 购买商城物品 #tagCMBuyItem
+
+class  tagCMBuyItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BuyItemIndex", c_ushort),    #购买的物品索引
+                  ("BuyCount", c_int),    #购买数量
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        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 = 0xA3
+        self.SubCmd = 0x10
+        self.BuyItemIndex = 0
+        self.BuyCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMBuyItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 10 购买商城物品 //tagCMBuyItem:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BuyItemIndex:%d,
+                                BuyCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BuyItemIndex,
+                                self.BuyCount
+                                )
+        return DumpString
+
+
+m_NAtagCMBuyItem=tagCMBuyItem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItem.Cmd,m_NAtagCMBuyItem.SubCmd))] = m_NAtagCMBuyItem
 
 
 #------------------------------------------------------
@@ -9850,20 +10126,15 @@
 #------------------------------------------------------
 # A3 23 使用物品 #tagCMUseItems
 
-class  tagCMUseItems(Structure):
+class  tagCMUseItemsSelect(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ItemIndex", c_ubyte),    #物品在背包中索引
-                  ("UseCnt", c_ushort),    #使用个数,0表示全部使用
-                  ("ExData", c_int),    #使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID
+                  ("SelectID", c_int),    #选择项ID
+                  ("SelectCnt", c_ushort),    #选择数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x23
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9872,39 +10143,113 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x23
-        self.ItemIndex = 0
-        self.UseCnt = 0
-        self.ExData = 0
+        self.SelectID = 0
+        self.SelectCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMUseItems)
+        return sizeof(tagCMUseItemsSelect)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// A3 23 使用物品 //tagCMUseItems:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ItemIndex:%d,
-                                UseCnt:%d,
-                                ExData:%d
+                                SelectID:%d,
+                                SelectCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.SelectID,
+                                self.SelectCnt
+                                )
+        return DumpString
+
+
+class  tagCMUseItems(Structure):
+    Head = tagHead()
+    ItemIndex = 0    #(BYTE ItemIndex)//物品在背包中索引
+    UseCnt = 0    #(WORD UseCnt)//使用个数,0表示全部使用
+    ExData = 0    #(DWORD ExData)//使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID
+    SelectCount = 0    #(BYTE SelectCount)//指定选择项,当批量使用单个箱子需要同时选中多种选项时使用该值
+    SelectList = list()    #(vector<tagCMUseItemsSelect> SelectList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x23
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.UseCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SelectCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SelectCount):
+            temSelectList = tagCMUseItemsSelect()
+            _pos = temSelectList.ReadData(_lpData, _pos)
+            self.SelectList.append(temSelectList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x23
+        self.ItemIndex = 0
+        self.UseCnt = 0
+        self.ExData = 0
+        self.SelectCount = 0
+        self.SelectList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2
+        length += 4
+        length += 1
+        for i in range(self.SelectCount):
+            length += self.SelectList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ItemIndex)
+        data = CommFunc.WriteWORD(data, self.UseCnt)
+        data = CommFunc.WriteDWORD(data, self.ExData)
+        data = CommFunc.WriteBYTE(data, self.SelectCount)
+        for i in range(self.SelectCount):
+            data = CommFunc.WriteString(data, self.SelectList[i].GetLength(), self.SelectList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemIndex:%d,
+                                UseCnt:%d,
+                                ExData:%d,
+                                SelectCount:%d,
+                                SelectList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
                                 self.ItemIndex,
                                 self.UseCnt,
-                                self.ExData
+                                self.ExData,
+                                self.SelectCount,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagCMUseItems=tagCMUseItems()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Cmd,m_NAtagCMUseItems.SubCmd))] = m_NAtagCMUseItems
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Head.Cmd,m_NAtagCMUseItems.Head.SubCmd))] = m_NAtagCMUseItems
 
 
 #------------------------------------------------------
@@ -15470,6 +15815,58 @@
 
 
 #------------------------------------------------------
+# A6 16 珍宝阁操作 #tagCMZhenbaogeOP
+
+class  tagCMZhenbaogeOP(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("OpType", c_ubyte),    # 操作:0-砍价;1-购买
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA6
+        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 = 0xA6
+        self.SubCmd = 0x16
+        self.OpType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMZhenbaogeOP)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A6 16 珍宝阁操作 //tagCMZhenbaogeOP:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                OpType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.OpType
+                                )
+        return DumpString
+
+
+m_NAtagCMZhenbaogeOP=tagCMZhenbaogeOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMZhenbaogeOP.Cmd,m_NAtagCMZhenbaogeOP.SubCmd))] = m_NAtagCMZhenbaogeOP
+
+
+#------------------------------------------------------
 # A7 02 宠物激活 #tagCMActivatePet
 
 class  tagCMActivatePet(Structure):
@@ -16483,6 +16880,70 @@
 
 m_NAtagCMActGodGiftReset=tagCMActGodGiftReset()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftReset.Cmd,m_NAtagCMActGodGiftReset.SubCmd))] = m_NAtagCMActGodGiftReset
+
+
+#------------------------------------------------------
+# AA 25 炼器操作 #tagCMActLianqiOP
+
+class  tagCMActLianqiOP(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("OPType", c_ubyte),    # 1-移动;2-使用道具;3-重新开始;4-领取等级奖励
+                  ("OPValue", c_int),    # 移动时-发1上2下3左4右;使用道具时-发使用个数*10+道具ID所在配置索引;等级奖励时-发领取的奖励等级
+                  ("OPValue2", c_int),    # 使用道具时-发选中格子A的行列值 行*10+列
+                  ("OPValue3", c_int),    # 使用道具时-发选中格子B的行列值 行*10+列
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        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 = 0xAA
+        self.SubCmd = 0x25
+        self.OPType = 0
+        self.OPValue = 0
+        self.OPValue2 = 0
+        self.OPValue3 = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMActLianqiOP)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 25 炼器操作 //tagCMActLianqiOP:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                OPType:%d,
+                                OPValue:%d,
+                                OPValue2:%d,
+                                OPValue3:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.OPType,
+                                self.OPValue,
+                                self.OPValue2,
+                                self.OPValue3
+                                )
+        return DumpString
+
+
+m_NAtagCMActLianqiOP=tagCMActLianqiOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActLianqiOP.Cmd,m_NAtagCMActLianqiOP.SubCmd))] = m_NAtagCMActLianqiOP
 
 
 #------------------------------------------------------
@@ -18147,6 +18608,54 @@
 
 
 #------------------------------------------------------
+# B0 35 福地管家免费试用 #tagCMMineHouseKeeperFreeUse
+
+class  tagCMMineHouseKeeperFreeUse(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        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 = 0xB0
+        self.SubCmd = 0x35
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMineHouseKeeperFreeUse)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 35 福地管家免费试用 //tagCMMineHouseKeeperFreeUse:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagCMMineHouseKeeperFreeUse=tagCMMineHouseKeeperFreeUse()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineHouseKeeperFreeUse.Cmd,m_NAtagCMMineHouseKeeperFreeUse.SubCmd))] = m_NAtagCMMineHouseKeeperFreeUse
+
+
+#------------------------------------------------------
 # B0 30 福地物品拉 #tagCMMineItemPull
 
 class  tagCMMineItemPull(Structure):
@@ -18218,7 +18727,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("IsSuper", c_ubyte),    # 是否超级刷新
+                  ("RefreshType", c_ubyte),    # 刷新类型:0-自己物品普通刷新;1-自己物品超级刷新;2-周围福地玩家列表刷新
                   ]
 
     def __init__(self):
@@ -18235,7 +18744,7 @@
     def Clear(self):
         self.Cmd = 0xB0
         self.SubCmd = 0x31
-        self.IsSuper = 0
+        self.RefreshType = 0
         return
 
     def GetLength(self):
@@ -18248,12 +18757,12 @@
         DumpString = '''// B0 31 福地物品刷新 //tagCMMineItemRefresh:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                IsSuper:%d
+                                RefreshType:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.IsSuper
+                                self.RefreshType
                                 )
         return DumpString
 
@@ -18760,6 +19269,62 @@
 
 m_NAtagCMFBBuyBuff=tagCMFBBuyBuff()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFBBuyBuff.Cmd,m_NAtagCMFBBuyBuff.SubCmd))] = m_NAtagCMFBBuyBuff
+
+
+#------------------------------------------------------
+# B1 08 快速一键过关副本 #tagCMFBQuickPass
+
+class  tagCMFBQuickPass(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MapID", c_int),    
+                  ("LineID", c_ushort),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        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 = 0xB1
+        self.SubCmd = 0x08
+        self.MapID = 0
+        self.LineID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFBQuickPass)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 08 快速一键过关副本 //tagCMFBQuickPass:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MapID:%d,
+                                LineID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MapID,
+                                self.LineID
+                                )
+        return DumpString
+
+
+m_NAtagCMFBQuickPass=tagCMFBQuickPass()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFBQuickPass.Cmd,m_NAtagCMFBQuickPass.SubCmd))] = m_NAtagCMFBQuickPass
 
 
 #------------------------------------------------------
@@ -19280,6 +19845,214 @@
 
 m_NAtagCMArenaMatch=tagCMArenaMatch()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaMatch.Cmd,m_NAtagCMArenaMatch.SubCmd))] = m_NAtagCMArenaMatch
+
+
+#------------------------------------------------------
+# B2 26 头像幻化 #tagCMFaceChange
+
+class  tagCMFaceChange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FaceID", c_int),    # 幻化的ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x26
+        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 = 0x26
+        self.FaceID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFaceChange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 26 头像幻化 //tagCMFaceChange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                FaceID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.FaceID
+                                )
+        return DumpString
+
+
+m_NAtagCMFaceChange=tagCMFaceChange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaceChange.Cmd,m_NAtagCMFaceChange.SubCmd))] = m_NAtagCMFaceChange
+
+
+#------------------------------------------------------
+# B2 28 头像框幻化 #tagCMFacePicChange
+
+class  tagCMFacePicChange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FacePicID", c_int),    # 幻化的ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x28
+        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 = 0x28
+        self.FacePicID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFacePicChange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 28 头像框幻化 //tagCMFacePicChange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                FacePicID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.FacePicID
+                                )
+        return DumpString
+
+
+m_NAtagCMFacePicChange=tagCMFacePicChange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFacePicChange.Cmd,m_NAtagCMFacePicChange.SubCmd))] = m_NAtagCMFacePicChange
+
+
+#------------------------------------------------------
+# B2 29 头像框升星 #tagCMFacePicStarUP
+
+class  tagCMFacePicStarUP(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FacePicID", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x29
+        self.FacePicID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFacePicStarUP)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 29 头像框升星 //tagCMFacePicStarUP:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                FacePicID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.FacePicID
+                                )
+        return DumpString
+
+
+m_NAtagCMFacePicStarUP=tagCMFacePicStarUP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFacePicStarUP.Cmd,m_NAtagCMFacePicStarUP.SubCmd))] = m_NAtagCMFacePicStarUP
+
+
+#------------------------------------------------------
+# B2 27 头像升星 #tagCMFaceStarUP
+
+class  tagCMFaceStarUP(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FaceID", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        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 = 0xB2
+        self.SubCmd = 0x27
+        self.FaceID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFaceStarUP)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 27 头像升星 //tagCMFaceStarUP:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                FaceID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.FaceID
+                                )
+        return DumpString
+
+
+m_NAtagCMFaceStarUP=tagCMFaceStarUP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaceStarUP.Cmd,m_NAtagCMFaceStarUP.SubCmd))] = m_NAtagCMFaceStarUP
 
 
 #------------------------------------------------------
@@ -20445,6 +21218,70 @@
 
 m_NAtagCMSendGifts=tagCMSendGifts()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSendGifts.Cmd,m_NAtagCMSendGifts.SubCmd))] = m_NAtagCMSendGifts
+
+
+#------------------------------------------------------
+# B4 11 镜像战斗 #tagCMMirrorFight
+
+class  tagCMMirrorFight(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MapID", c_int),    # 自定义地图ID,如竞技场等
+                  ("FuncLineID", c_ushort),    
+                  ("TagPlayeID", c_int),    # 目标玩家ID,支持跨服玩家ID
+                  ("CmdType", c_ubyte),    # 命令类型: 0-创建战斗;1-开始战斗;2-战斗中跳过;3-不创建战斗直接得结果
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB4
+        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 = 0xB4
+        self.SubCmd = 0x11
+        self.MapID = 0
+        self.FuncLineID = 0
+        self.TagPlayeID = 0
+        self.CmdType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMMirrorFight)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B4 11 镜像战斗 //tagCMMirrorFight:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MapID:%d,
+                                FuncLineID:%d,
+                                TagPlayeID:%d,
+                                CmdType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MapID,
+                                self.FuncLineID,
+                                self.TagPlayeID,
+                                self.CmdType
+                                )
+        return DumpString
+
+
+m_NAtagCMMirrorFight=tagCMMirrorFight()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMirrorFight.Cmd,m_NAtagCMMirrorFight.SubCmd))] = m_NAtagCMMirrorFight
 
 
 #------------------------------------------------------
@@ -22492,7 +23329,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Type", c_ubyte),    # 0-取消匹配; 1-进行匹配
+                  ("Type", c_ubyte),    # 0-查询匹配;1-刷新匹配
                   ]
 
     def __init__(self):
@@ -22545,6 +23382,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("IsWin", c_ubyte),    #是否获胜
+                  ("TagPlayerID", c_int),    #目标玩家ID
                   ]
 
     def __init__(self):
@@ -22562,6 +23400,7 @@
         self.Cmd = 0xC1
         self.SubCmd = 0x08
         self.IsWin = 0
+        self.TagPlayerID = 0
         return
 
     def GetLength(self):
@@ -22574,12 +23413,14 @@
         DumpString = '''// C1 08 跨服PK挑战机器人结算 //tagCMCrossRealmPKRobotOver:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                IsWin:%d
+                                IsWin:%d,
+                                TagPlayerID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.IsWin
+                                self.IsWin,
+                                self.TagPlayerID
                                 )
         return DumpString
 
@@ -22693,6 +23534,241 @@
 
 
 #------------------------------------------------------
+# C1 25 仙盟攻城战攻击 #tagCMFamilyGCZAtk
+
+class  tagCMFamilyGCZAtk(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("AtkType", c_ubyte),    #攻击类型: 1-普通单攻;2-技能单攻;3-技能群攻;
+                  ("TagCityID", c_int),    #目标城池ID,一般是仙盟ID或者特殊城池ID如修罗城城池,普攻单攻需指定目标,群攻技能发0
+                  ("TagGuardID", c_int),    #目标守卫ID,一般是玩家ID或者特殊守卫ID如修罗城守卫,普攻单攻需指定目标,技能攻击发0
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        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 = 0xC1
+        self.SubCmd = 0x25
+        self.AtkType = 0
+        self.TagCityID = 0
+        self.TagGuardID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFamilyGCZAtk)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 25 仙盟攻城战攻击 //tagCMFamilyGCZAtk:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                AtkType:%d,
+                                TagCityID:%d,
+                                TagGuardID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.AtkType,
+                                self.TagCityID,
+                                self.TagGuardID
+                                )
+        return DumpString
+
+
+m_NAtagCMFamilyGCZAtk=tagCMFamilyGCZAtk()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZAtk.Cmd,m_NAtagCMFamilyGCZAtk.SubCmd))] = m_NAtagCMFamilyGCZAtk
+
+
+#------------------------------------------------------
+# C1 24 仙盟攻城战捐献 #tagCMFamilyGCZContribution
+
+class  tagCMFamilyGCZContribution(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ContributionType", c_ubyte),    #捐献类型: 0-低级;1-高级
+                  ("UseCount", c_int),    #物品捐献时使用个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        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 = 0xC1
+        self.SubCmd = 0x24
+        self.ContributionType = 0
+        self.UseCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFamilyGCZContribution)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 24 仙盟攻城战捐献 //tagCMFamilyGCZContribution:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ContributionType:%d,
+                                UseCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ContributionType,
+                                self.UseCount
+                                )
+        return DumpString
+
+
+m_NAtagCMFamilyGCZContribution=tagCMFamilyGCZContribution()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZContribution.Cmd,m_NAtagCMFamilyGCZContribution.SubCmd))] = m_NAtagCMFamilyGCZContribution
+
+
+#------------------------------------------------------
+# C1 26 仙盟攻城战竞猜 #tagCMFamilyGCZGuess
+
+class  tagCMFamilyGCZGuess(Structure):
+    Head = tagHead()
+    SelectCnt = 0    #(BYTE SelectCnt)
+    SelectFamilyIDList = list()    #(vector<DWORD> SelectFamilyIDList)// 竞猜选择的仙盟ID排名顺序
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC1
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SelectCnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.SelectFamilyIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC1
+        self.Head.SubCmd = 0x26
+        self.SelectCnt = 0
+        self.SelectFamilyIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.SelectCnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.SelectCnt)
+        for i in range(self.SelectCnt):
+            data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                SelectCnt:%d,
+                                SelectFamilyIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.SelectCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMFamilyGCZGuess=tagCMFamilyGCZGuess()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZGuess.Head.Cmd,m_NAtagCMFamilyGCZGuess.Head.SubCmd))] = m_NAtagCMFamilyGCZGuess
+
+
+#------------------------------------------------------
+# C1 27 仙盟攻城战圣泉抽奖 #tagCMFamilyGCZSQ
+
+class  tagCMFamilyGCZSQ(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GridNum", c_ubyte),    # 选中格子编号,1~n
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
+        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 = 0xC1
+        self.SubCmd = 0x27
+        self.GridNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMFamilyGCZSQ)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 27 仙盟攻城战圣泉抽奖 //tagCMFamilyGCZSQ:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GridNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GridNum
+                                )
+        return DumpString
+
+
+m_NAtagCMFamilyGCZSQ=tagCMFamilyGCZSQ()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZSQ.Cmd,m_NAtagCMFamilyGCZSQ.SubCmd))] = m_NAtagCMFamilyGCZSQ
+
+
+#------------------------------------------------------
 # C1 10 幸运云购购买 #tagCMLuckyCloudBuy
 
 class  tagCMLuckyCloudBuy(Structure):

--
Gitblit v1.8.0