From e6a20b55f44d8176be3d0d9afebcac7be406c079 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 23 五月 2022 17:00:36 +0800 Subject: [PATCH] 9415 【BT】【后端】古神战场(阵营buff对机器人有效; 修复黑夜降临掉血buff击杀对方时地图报错bug) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 2515 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 2,424 insertions(+), 91 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 7b71519..f1a2139 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -1304,6 +1304,106 @@ #------------------------------------------------------ +# A9 A5 查看竞技场对战玩家最新信息 #tagCGQueryArenaBattlePlayer + +class tagCGQueryArenaBattlePlayer(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), #目标玩家ID,仅支持查真实玩家 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + self.SubCmd = 0xA5 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA9 + self.SubCmd = 0xA5 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGQueryArenaBattlePlayer) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 A5 查看竞技场对战玩家最新信息 //tagCGQueryArenaBattlePlayer: + Cmd:%s, + SubCmd:%s, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID + ) + return DumpString + + +m_NAtagCGQueryArenaBattlePlayer=tagCGQueryArenaBattlePlayer() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryArenaBattlePlayer.Cmd,m_NAtagCGQueryArenaBattlePlayer.SubCmd))] = m_NAtagCGQueryArenaBattlePlayer + + +#------------------------------------------------------ +# A9 A8 查看竞技场对战记录 #tagCGQueryArenaBattleRecord + +class tagCGQueryArenaBattleRecord(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + self.SubCmd = 0xA8 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA9 + self.SubCmd = 0xA8 + return + + def GetLength(self): + return sizeof(tagCGQueryArenaBattleRecord) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 A8 查看竞技场对战记录 //tagCGQueryArenaBattleRecord: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGQueryArenaBattleRecord=tagCGQueryArenaBattleRecord() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryArenaBattleRecord.Cmd,m_NAtagCGQueryArenaBattleRecord.SubCmd))] = m_NAtagCGQueryArenaBattleRecord + + +#------------------------------------------------------ # A9 04 查询boss信息 #tagCGQueryBossInfo class tagCGQueryBossInfo(Structure): @@ -2230,6 +2330,222 @@ #------------------------------------------------------ +# B3 19 提升魅力等级 #tagCGCharmLVUp + +class tagCGCharmLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x19 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x19 + return + + def GetLength(self): + return sizeof(tagCGCharmLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 19 提升魅力等级 //tagCGCharmLVUp: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGCharmLVUp=tagCGCharmLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmLVUp.Cmd,m_NAtagCGCharmLVUp.SubCmd))] = m_NAtagCGCharmLVUp + + +#------------------------------------------------------ +# B3 09 魅力贡献榜查看 #tagCGCharmOfferBillboardQuery + +class tagCGCharmOfferBillboardQuery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 魅力玩家ID + ("QueryType", c_ubyte), # 查看类型: 1-总榜,2-周榜,3-日榜 + ("QueryCount", c_ubyte), # 查看名次数量,最大255 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x09 + self.PlayerID = 0 + self.QueryType = 0 + self.QueryCount = 0 + return + + def GetLength(self): + return sizeof(tagCGCharmOfferBillboardQuery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 09 魅力贡献榜查看 //tagCGCharmOfferBillboardQuery: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + QueryType:%d, + QueryCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.QueryType, + self.QueryCount + ) + return DumpString + + +m_NAtagCGCharmOfferBillboardQuery=tagCGCharmOfferBillboardQuery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmOfferBillboardQuery.Cmd,m_NAtagCGCharmOfferBillboardQuery.SubCmd))] = m_NAtagCGCharmOfferBillboardQuery + + +#------------------------------------------------------ +# B3 16 和平离婚回应 #tagGCMarryBreakResponse + +class tagGCMarryBreakResponse(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsOK", c_ubyte), # 是否同意,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x16 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x16 + self.IsOK = 0 + return + + def GetLength(self): + return sizeof(tagGCMarryBreakResponse) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 16 和平离婚回应 //tagGCMarryBreakResponse: + Cmd:%s, + SubCmd:%s, + IsOK:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsOK + ) + return DumpString + + +m_NAtagGCMarryBreakResponse=tagGCMarryBreakResponse() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryBreakResponse.Cmd,m_NAtagGCMarryBreakResponse.SubCmd))] = m_NAtagGCMarryBreakResponse + + +#------------------------------------------------------ +# B3 12 提亲回应 #tagCGMarryResponse + +class tagCGMarryResponse(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ReqPlayerID", c_int), # 提亲的玩家ID + ("IsOK", c_ubyte), # 是否同意,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x12 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x12 + self.ReqPlayerID = 0 + self.IsOK = 0 + return + + def GetLength(self): + return sizeof(tagCGMarryResponse) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 12 提亲回应 //tagCGMarryResponse: + Cmd:%s, + SubCmd:%s, + ReqPlayerID:%d, + IsOK:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ReqPlayerID, + self.IsOK + ) + return DumpString + + +m_NAtagCGMarryResponse=tagCGMarryResponse() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMarryResponse.Cmd,m_NAtagCGMarryResponse.SubCmd))] = m_NAtagCGMarryResponse + + +#------------------------------------------------------ #B3 04 加入黑名单 #tagCGAddBlackList class tagCGAddBlackList(Structure): @@ -2506,7 +2822,7 @@ class tagCGVoiceChat(Structure): Head = tagHead() - ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域 + ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 -------查看封包tagCMVoiceChat 5 区域 TargetNameLen = 0 #(BYTE TargetNameLen) TargetName = "" #(String TargetName)//size = TargetNameLen TargetID = 0 #(DWORD TargetID)// 默认发玩家ID,没有ID才发名称 @@ -3567,6 +3883,58 @@ #------------------------------------------------------ +# B9 11 请求加入队伍 #tagCGRequestJoinTeam + +class tagCGRequestJoinTeam(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TeamID", c_int), # 目标队伍ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB9 + self.SubCmd = 0x11 + self.TeamID = 0 + return + + def GetLength(self): + return sizeof(tagCGRequestJoinTeam) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 11 请求加入队伍 //tagCGRequestJoinTeam: + Cmd:%s, + SubCmd:%s, + TeamID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TeamID + ) + return DumpString + + +m_NAtagCGRequestJoinTeam=tagCGRequestJoinTeam() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGRequestJoinTeam.Cmd,m_NAtagCGRequestJoinTeam.SubCmd))] = m_NAtagCGRequestJoinTeam + + +#------------------------------------------------------ # B9 09 队员进入副本准备选择 #tagCGTeamMemberPrepare class tagCGTeamMemberPrepare(Structure): @@ -3619,6 +3987,126 @@ #------------------------------------------------------ +# C0 08 跨服战场召集场次踢人 #tagCGCrossBattlefieldCallKick + +class tagCGCrossBattlefieldCallKick(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("TagPlayerID", c_int), #目标玩家ID,即要被踢出去的玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x08 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x08 + self.Hour = 0 + self.Minute = 0 + self.TagPlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldCallKick) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 08 跨服战场召集场次踢人 //tagCGCrossBattlefieldCallKick: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + TagPlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.TagPlayerID + ) + return DumpString + + +m_NAtagCGCrossBattlefieldCallKick=tagCGCrossBattlefieldCallKick() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallKick.Cmd,m_NAtagCGCrossBattlefieldCallKick.SubCmd))] = m_NAtagCGCrossBattlefieldCallKick + + +#------------------------------------------------------ +# C0 07 跨服战场加入召集场次 #tagCGCrossBattlefieldJoinByCall + +class tagCGCrossBattlefieldJoinByCall(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("BuyPlayerID", c_int), #加入目标玩家的召集队伍,即购买召集场的玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x07 + self.Hour = 0 + self.Minute = 0 + self.BuyPlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldJoinByCall) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 07 跨服战场加入召集场次 //tagCGCrossBattlefieldJoinByCall: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + BuyPlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.BuyPlayerID + ) + return DumpString + + +m_NAtagCGCrossBattlefieldJoinByCall=tagCGCrossBattlefieldJoinByCall() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldJoinByCall.Cmd,m_NAtagCGCrossBattlefieldJoinByCall.SubCmd))] = m_NAtagCGCrossBattlefieldJoinByCall + + +#------------------------------------------------------ # C0 03 强制退出跨服状态 #tagCGForceQuitCrossState class tagCGForceQuitCrossState(Structure): @@ -3667,6 +4155,166 @@ #------------------------------------------------------ +# C0 06 查询幸运云购开奖记录 #tagCGQueryLuckyCloudBuyLotteryRec + +class tagCGQueryLuckyCloudBuyLotteryRec(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #查询分区ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x06 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x06 + self.ZoneID = 0 + return + + def GetLength(self): + return sizeof(tagCGQueryLuckyCloudBuyLotteryRec) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 06 查询幸运云购开奖记录 //tagCGQueryLuckyCloudBuyLotteryRec: + Cmd:%s, + SubCmd:%s, + ZoneID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID + ) + return DumpString + + +m_NAtagCGQueryLuckyCloudBuyLotteryRec=tagCGQueryLuckyCloudBuyLotteryRec() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyLotteryRec.Cmd,m_NAtagCGQueryLuckyCloudBuyLotteryRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyLotteryRec + + +#------------------------------------------------------ +# C0 05 查询幸运云购购买号码记录 #tagCGQueryLuckyCloudBuyNumRec + +class tagCGQueryLuckyCloudBuyNumRec(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x05 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x05 + return + + def GetLength(self): + return sizeof(tagCGQueryLuckyCloudBuyNumRec) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 05 查询幸运云购购买号码记录 //tagCGQueryLuckyCloudBuyNumRec: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGQueryLuckyCloudBuyNumRec=tagCGQueryLuckyCloudBuyNumRec() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyNumRec.Cmd,m_NAtagCGQueryLuckyCloudBuyNumRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyNumRec + + +#------------------------------------------------------ +# C0 04 查看跨服排行榜 #tagCGViewCrossBillboard + +class tagCGViewCrossBillboard(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Type", c_ubyte), #榜单类型 + ("GroupValue1", c_ubyte), # 分组值1 + ("GroupValue2", c_ubyte), # 分组值2,与分组值1组合归为同组榜单数据 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x04 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x04 + self.Type = 0 + self.GroupValue1 = 0 + self.GroupValue2 = 0 + return + + def GetLength(self): + return sizeof(tagCGViewCrossBillboard) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 04 查看跨服排行榜 //tagCGViewCrossBillboard: + Cmd:%s, + SubCmd:%s, + Type:%d, + GroupValue1:%d, + GroupValue2:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Type, + self.GroupValue1, + self.GroupValue2 + ) + return DumpString + + +m_NAtagCGViewCrossBillboard=tagCGViewCrossBillboard() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossBillboard.Cmd,m_NAtagCGViewCrossBillboard.SubCmd))] = m_NAtagCGViewCrossBillboard + + +#------------------------------------------------------ # C0 01 查看跨服竞技场赛季排行榜 #tagCGViewCrossPKBillboard class tagCGViewCrossPKBillboard(Structure): @@ -3674,8 +4322,8 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("ZoneID", c_ubyte), # 赛区ID - ("SeasonID", c_ubyte), # 赛季ID + ("ZoneID", c_ubyte), # 赛区ID + ("SeasonID", c_ubyte), # 赛季ID ] def __init__(self): @@ -3896,6 +4544,58 @@ m_NAtagCMPCInfo=tagCMPCInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPCInfo.Head.Cmd,m_NAtagCMPCInfo.Head.SubCmd))] = m_NAtagCMPCInfo + + +#------------------------------------------------------ +# A1 23 查询充值次数 #tagCMQueryCoinToGoldCount + +class tagCMQueryCoinToGoldCount(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RecordID", c_ubyte), #充值记录ID,也就是充值ID,发0则查全部 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA1 + self.SubCmd = 0x23 + self.RecordID = 0 + return + + def GetLength(self): + return sizeof(tagCMQueryCoinToGoldCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 23 查询充值次数 //tagCMQueryCoinToGoldCount: + Cmd:%s, + SubCmd:%s, + RecordID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RecordID + ) + return DumpString + + +m_NAtagCMQueryCoinToGoldCount=tagCMQueryCoinToGoldCount() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryCoinToGoldCount.Cmd,m_NAtagCMQueryCoinToGoldCount.SubCmd))] = m_NAtagCMQueryCoinToGoldCount #------------------------------------------------------ @@ -6283,7 +6983,7 @@ ("SrcBackpack", c_ubyte), #源背包类型 ("DesBackPack", c_ubyte), #目标背包类型 ("SrcIndex", c_ushort), #转移物品索引位置;当全部转移时此值无效 - ("IsAll", c_ubyte), #是否全部转移 + ("IsAll", c_ubyte), #是否全部转移 ] def __init__(self): @@ -6544,98 +7244,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 #------------------------------------------------------ @@ -6744,6 +7398,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 #------------------------------------------------------ @@ -7155,6 +7876,7 @@ ("SubCmd", c_ubyte), ("PackType", c_ubyte), #背包类型 ("ItemIndex", c_ubyte), #物品在背包中索引 + ("IsAll", c_ubyte), #是否处理所有过期物品 ] def __init__(self): @@ -7173,6 +7895,7 @@ self.SubCmd = 0x08 self.PackType = 0 self.ItemIndex = 0 + self.IsAll = 0 return def GetLength(self): @@ -7186,13 +7909,15 @@ Cmd:%s, SubCmd:%s, PackType:%d, - ItemIndex:%d + ItemIndex:%d, + IsAll:%d '''\ %( self.Cmd, self.SubCmd, self.PackType, - self.ItemIndex + self.ItemIndex, + self.IsAll ) return DumpString @@ -7251,6 +7976,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 #------------------------------------------------------ @@ -9823,6 +10608,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): @@ -10101,6 +10942,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("Index", c_ubyte), # 奖励索引,其他按顺序 + ("IsDaily", c_ubyte), # 是否领取每日日常的奖励,是发1,如果领取定制创角天奖励的则默认发0即可 ] def __init__(self): @@ -10118,6 +10960,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x06 self.Index = 0 + self.IsDaily = 0 return def GetLength(self): @@ -10130,12 +10973,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 @@ -10493,6 +11338,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): @@ -10500,7 +11401,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("UseItemCnt", c_ubyte), #消耗材料个数 + ("UseItemCnt", c_ushort), #消耗材料个数 ("IsAutoBuy", c_ubyte), #是否自动购买 ] @@ -12552,6 +13453,7 @@ PacketCnt = 0 #(WORD PacketCnt)// 红包数量 MoneyNum = 0 #(WORD MoneyNum)//金钱数量 Wish = "" #(char Wish[33])//祝福语 + IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名 data = None def __init__(self): @@ -12567,6 +13469,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): @@ -12578,6 +13481,7 @@ self.PacketCnt = 0 self.MoneyNum = 0 self.Wish = "" + self.IsAnonymous = 0 return def GetLength(self): @@ -12587,6 +13491,7 @@ length += 2 length += 2 length += 33 + length += 1 return length @@ -12597,6 +13502,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): @@ -12605,14 +13511,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 @@ -12783,6 +13691,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 #------------------------------------------------------ @@ -13042,6 +14006,342 @@ #------------------------------------------------------ +# AA 09 集字活动兑换 #tagCMActCollectWordsExchange + +class tagCMActCollectWordsExchange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号,1 或 2,相互独立的活动,可同时开启 + ("ExchangeNum", c_ubyte), #兑换编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x09 + self.ActNum = 0 + self.ExchangeNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActCollectWordsExchange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 09 集字活动兑换 //tagCMActCollectWordsExchange: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + ExchangeNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.ExchangeNum + ) + return DumpString + + +m_NAtagCMActCollectWordsExchange=tagCMActCollectWordsExchange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActCollectWordsExchange.Cmd,m_NAtagCMActCollectWordsExchange.SubCmd))] = m_NAtagCMActCollectWordsExchange + + +#------------------------------------------------------ +# AA 15 垃圾分类活动收集已完成的任务垃圾 #tagCMActGarbageGetTaskAward + +class tagCMActGarbageGetTaskAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("GarbageTaskID", c_ubyte), #垃圾任务ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x15 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x15 + self.ActNum = 0 + self.GarbageTaskID = 0 + return + + def GetLength(self): + return sizeof(tagCMActGarbageGetTaskAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 15 垃圾分类活动收集已完成的任务垃圾 //tagCMActGarbageGetTaskAward: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + GarbageTaskID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.GarbageTaskID + ) + return DumpString + + +m_NAtagCMActGarbageGetTaskAward=tagCMActGarbageGetTaskAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageGetTaskAward.Cmd,m_NAtagCMActGarbageGetTaskAward.SubCmd))] = m_NAtagCMActGarbageGetTaskAward + + +#------------------------------------------------------ +# AA 14 垃圾分类活动分类垃圾 #tagCMActGarbageSorting + +class tagCMActGarbageSorting(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + GarbageSortingType = 0 #(BYTE GarbageSortingType)//垃圾分类类型,即属于哪种垃圾 + ItemIndexCount = 0 #(BYTE ItemIndexCount)//垃圾背包中的物品索引数 + ItemIndexList = list() #(vector<BYTE> ItemIndexList)//垃圾背包中的物品索引列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x14 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GarbageSortingType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemIndexCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ItemIndexList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x14 + self.ActNum = 0 + self.GarbageSortingType = 0 + self.ItemIndexCount = 0 + self.ItemIndexList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 + length += 1 * self.ItemIndexCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.GarbageSortingType) + data = CommFunc.WriteBYTE(data, self.ItemIndexCount) + for i in range(self.ItemIndexCount): + data = CommFunc.WriteBYTE(data, self.ItemIndexList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + GarbageSortingType:%d, + ItemIndexCount:%d, + ItemIndexList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.GarbageSortingType, + self.ItemIndexCount, + "..." + ) + return DumpString + + +m_NAtagCMActGarbageSorting=tagCMActGarbageSorting() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageSorting.Head.Cmd,m_NAtagCMActGarbageSorting.Head.SubCmd))] = m_NAtagCMActGarbageSorting + + +#------------------------------------------------------ +# AA 12 选择转盘活动物品 #tagCMActTurntableChooseItem + +class tagCMActTurntableChooseItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + GoodItemNumCount = 0 #(BYTE GoodItemNumCount) + GoodItemNumList = list() #(vector<BYTE> GoodItemNumList)// 选择的极品物品编号列表 + SuperItemNumCount = 0 #(BYTE SuperItemNumCount) + SuperItemNumList = list() #(vector<BYTE> SuperItemNumList)// 选择的终极物品编号列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GoodItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GoodItemNumCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.GoodItemNumList.append(value) + self.SuperItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemNumCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.SuperItemNumList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + self.ActNum = 0 + self.GoodItemNumCount = 0 + self.GoodItemNumList = list() + self.SuperItemNumCount = 0 + self.SuperItemNumList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 * self.GoodItemNumCount + length += 1 + length += 1 * self.SuperItemNumCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.GoodItemNumCount) + for i in range(self.GoodItemNumCount): + data = CommFunc.WriteBYTE(data, self.GoodItemNumList[i]) + data = CommFunc.WriteBYTE(data, self.SuperItemNumCount) + for i in range(self.SuperItemNumCount): + data = CommFunc.WriteBYTE(data, self.SuperItemNumList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + GoodItemNumCount:%d, + GoodItemNumList:%s, + SuperItemNumCount:%d, + SuperItemNumList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.GoodItemNumCount, + "...", + self.SuperItemNumCount, + "..." + ) + return DumpString + + +m_NAtagCMActTurntableChooseItem=tagCMActTurntableChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableChooseItem.Head.Cmd,m_NAtagCMActTurntableChooseItem.Head.SubCmd))] = m_NAtagCMActTurntableChooseItem + + +#------------------------------------------------------ +# AA 13 启动转盘 #tagCMActTurntableStart + +class tagCMActTurntableStart(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x13 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x13 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActTurntableStart) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 13 启动转盘 //tagCMActTurntableStart: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActTurntableStart=tagCMActTurntableStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableStart.Cmd,m_NAtagCMActTurntableStart.SubCmd))] = m_NAtagCMActTurntableStart + + +#------------------------------------------------------ # AA 07 许愿池活动刷新奖池 #tagCMActWishingRefresh class tagCMActWishingRefresh(Structure): @@ -13091,6 +14391,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 #------------------------------------------------------ @@ -13158,6 +14640,114 @@ #------------------------------------------------------ +# AA 10 节日祝福瓶选择奖励物品 #tagCMFeastWishBottleChooseItem + +class tagCMFeastWishBottleChooseItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BottleNum", c_ubyte), #瓶子编号 + ("RecordIndex", c_ubyte), #物品索引,用于选择及记录是否已选择 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x10 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x10 + self.BottleNum = 0 + self.RecordIndex = 0 + return + + def GetLength(self): + return sizeof(tagCMFeastWishBottleChooseItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 10 节日祝福瓶选择奖励物品 //tagCMFeastWishBottleChooseItem: + Cmd:%s, + SubCmd:%s, + BottleNum:%d, + RecordIndex:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BottleNum, + self.RecordIndex + ) + return DumpString + + +m_NAtagCMFeastWishBottleChooseItem=tagCMFeastWishBottleChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishBottleChooseItem.Cmd,m_NAtagCMFeastWishBottleChooseItem.SubCmd))] = m_NAtagCMFeastWishBottleChooseItem + + +#------------------------------------------------------ +# AA 11 节日祝福池祝福 #tagCMFeastWishPoolWish + +class tagCMFeastWishPoolWish(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("WishCount", c_ubyte), #祝福次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x11 + self.WishCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFeastWishPoolWish) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 11 节日祝福池祝福 //tagCMFeastWishPoolWish: + Cmd:%s, + SubCmd:%s, + WishCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.WishCount + ) + return DumpString + + +m_NAtagCMFeastWishPoolWish=tagCMFeastWishPoolWish() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishPoolWish.Cmd,m_NAtagCMFeastWishPoolWish.SubCmd))] = m_NAtagCMFeastWishPoolWish + + +#------------------------------------------------------ # AA 05 限时抢购预约 #tagCMFlashSaleAppointment class tagCMFlashSaleAppointment(Structure): @@ -13165,6 +14755,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 ("GoodsID", c_int), # 抢购商品标识 ("State", c_ubyte), # 1-预约 0-取消 ] @@ -13183,6 +14774,7 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x05 + self.ActNum = 0 self.GoodsID = 0 self.State = 0 return @@ -13197,12 +14789,14 @@ DumpString = '''// AA 05 限时抢购预约 //tagCMFlashSaleAppointment: Cmd:%s, SubCmd:%s, + ActNum:%d, GoodsID:%d, State:%d '''\ %( self.Cmd, self.SubCmd, + self.ActNum, self.GoodsID, self.State ) @@ -14986,6 +16580,73 @@ #------------------------------------------------------ +# B2 11 激活功能系统特权奖励 #tagCMActivateFuncSysPrivilege + +class tagCMActivateFuncSysPrivilege(Structure): + Head = tagHead() + ActivateCount = 0 #(BYTE ActivateCount)// 激活个数 + ActivateFuncSysIDList = list() #(vector<BYTE> ActivateFuncSysIDList)// 激活功能系统ID列表,全部激活则需要发所有ID列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActivateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ActivateCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ActivateFuncSysIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x11 + self.ActivateCount = 0 + self.ActivateFuncSysIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 * self.ActivateCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActivateCount) + for i in range(self.ActivateCount): + data = CommFunc.WriteBYTE(data, self.ActivateFuncSysIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActivateCount:%d, + ActivateFuncSysIDList:%s + '''\ + %( + self.Head.OutputString(), + self.ActivateCount, + "..." + ) + return DumpString + + +m_NAtagCMActivateFuncSysPrivilege=tagCMActivateFuncSysPrivilege() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivateFuncSysPrivilege.Head.Cmd,m_NAtagCMActivateFuncSysPrivilege.Head.SubCmd))] = m_NAtagCMActivateFuncSysPrivilege + + +#------------------------------------------------------ # B2 06 玩家加点 #tagCMAddPoint class tagCMAddPoint(Structure): @@ -15060,6 +16721,170 @@ m_NAtagCMAddPoint=tagCMAddPoint() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMAddPoint.Head.Cmd,m_NAtagCMAddPoint.Head.SubCmd))] = m_NAtagCMAddPoint + + +#------------------------------------------------------ +# B2 10 竞技场挑战玩家 #tagCMArenaBattle + +class tagCMArenaBattle(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagPlayerID", c_int), # 目标玩家ID或机器人ID + ("Result", c_ubyte), # 0-进入自定义场景发送通知后端;1-胜利(后端处理,暂时不需要发送此状态);2-失败(前端被对手击杀需要发送此状态) + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x10 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x10 + self.TagPlayerID = 0 + self.Result = 0 + return + + def GetLength(self): + return sizeof(tagCMArenaBattle) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 10 竞技场挑战玩家 //tagCMArenaBattle: + Cmd:%s, + SubCmd:%s, + TagPlayerID:%d, + Result:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagPlayerID, + self.Result + ) + return DumpString + + +m_NAtagCMArenaBattle=tagCMArenaBattle() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaBattle.Cmd,m_NAtagCMArenaBattle.SubCmd))] = m_NAtagCMArenaBattle + + +#------------------------------------------------------ +# B2 09 竞技场匹配玩家 #tagCMArenaMatch + +class tagCMArenaMatch(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsRefresh", c_ubyte), # 0-打开界面无匹配数据时时查询,1-强制刷新匹配列表 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x09 + self.IsRefresh = 0 + return + + def GetLength(self): + return sizeof(tagCMArenaMatch) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 09 竞技场匹配玩家 //tagCMArenaMatch: + Cmd:%s, + SubCmd:%s, + IsRefresh:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsRefresh + ) + return DumpString + + +m_NAtagCMArenaMatch=tagCMArenaMatch() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaMatch.Cmd,m_NAtagCMArenaMatch.SubCmd))] = m_NAtagCMArenaMatch + + +#------------------------------------------------------ +# B2 12 领取功能系统特权奖励 #tagCMGetFuncSysPrivilegeAward + +class tagCMGetFuncSysPrivilegeAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FuncSysID", c_ubyte), # 功能系统ID + ("DayNum", c_ubyte), # 第X天,1为第1天 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x12 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x12 + self.FuncSysID = 0 + self.DayNum = 0 + return + + def GetLength(self): + return sizeof(tagCMGetFuncSysPrivilegeAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 12 领取功能系统特权奖励 //tagCMGetFuncSysPrivilegeAward: + Cmd:%s, + SubCmd:%s, + FuncSysID:%d, + DayNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FuncSysID, + self.DayNum + ) + return DumpString + + +m_NAtagCMGetFuncSysPrivilegeAward=tagCMGetFuncSysPrivilegeAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetFuncSysPrivilegeAward.Cmd,m_NAtagCMGetFuncSysPrivilegeAward.SubCmd))] = m_NAtagCMGetFuncSysPrivilegeAward #------------------------------------------------------ @@ -15394,6 +17219,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): @@ -15454,6 +17663,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("LostHP", c_int), + ("LostHPEx", c_int), ] def __init__(self): @@ -15471,6 +17681,7 @@ self.Cmd = 0xB4 self.SubCmd = 0x0E self.LostHP = 0 + self.LostHPEx = 0 return def GetLength(self): @@ -15483,12 +17694,14 @@ DumpString = '''// B4 0E 玩家掉血 //tagCMRoleLostHP: Cmd:%s, SubCmd:%s, - LostHP:%d + LostHP:%d, + LostHPEx:%d '''\ %( self.Cmd, self.SubCmd, - self.LostHP + self.LostHP, + self.LostHPEx ) return DumpString @@ -16066,6 +18279,7 @@ ("ObjID", c_int), ("AttackType", c_ubyte), #爆击, miss ("HurtHP", c_int), + ("HurtHPEx", c_int), ] def __init__(self): @@ -16082,6 +18296,7 @@ self.ObjID = 0 self.AttackType = 0 self.HurtHP = 0 + self.HurtHPEx = 0 return def GetLength(self): @@ -16095,13 +18310,15 @@ ObjType:%d, ObjID:%d, AttackType:%d, - HurtHP:%d + HurtHP:%d, + HurtHPEx:%d '''\ %( self.ObjType, self.ObjID, self.AttackType, - self.HurtHP + self.HurtHP, + self.HurtHPEx ) return DumpString @@ -16467,7 +18684,7 @@ class tagCMBiddingAuctionItem(Structure): Head = tagHead() ItemGUID = "" #(char ItemGUID[40]) - BiddingPrice = 0 #(WORD BiddingPrice)//竞价价格 + BiddingPrice = 0 #(DWORD BiddingPrice)//竞价价格 data = None def __init__(self): @@ -16480,7 +18697,7 @@ self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.BiddingPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BiddingPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -16496,7 +18713,7 @@ length = 0 length += self.Head.GetLength() length += 40 - length += 2 + length += 4 return length @@ -16504,7 +18721,7 @@ data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteWORD(data, self.BiddingPrice) + data = CommFunc.WriteDWORD(data, self.BiddingPrice) return data def OutputString(self): @@ -16683,6 +18900,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("ItemIndex", c_ubyte), #物品在背包中索引 + ("SellCount", c_ushort), #上架个数,0代表全部上架 ] def __init__(self): @@ -16700,6 +18918,7 @@ self.Cmd = 0xB5 self.SubCmd = 0x13 self.ItemIndex = 0 + self.SellCount = 0 return def GetLength(self): @@ -16712,12 +18931,14 @@ DumpString = '''// B5 13 拍卖行上架拍品 //tagCMSellAuctionItem: Cmd:%s, SubCmd:%s, - ItemIndex:%d + ItemIndex:%d, + SellCount:%d '''\ %( self.Cmd, self.SubCmd, - self.ItemIndex + self.ItemIndex, + self.SellCount ) return DumpString @@ -16837,6 +19058,66 @@ m_NAtagCMChangeTeamCheckState=tagCMChangeTeamCheckState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeTeamCheckState.Cmd,m_NAtagCMChangeTeamCheckState.SubCmd))] = m_NAtagCMChangeTeamCheckState + + +#------------------------------------------------------ +# 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-蓝 + ] + + 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 + 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 + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.Faction + ) + return DumpString + + +m_NAtagCMCrossBattlefieldBuyOpen=tagCMCrossBattlefieldBuyOpen() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossBattlefieldBuyOpen.Cmd,m_NAtagCMCrossBattlefieldBuyOpen.SubCmd))] = m_NAtagCMCrossBattlefieldBuyOpen #------------------------------------------------------ @@ -17212,4 +19493,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