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