From 44bcd51874e364012946b5f34dd7bb166d86edfb Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期六, 31 八月 2024 00:16:46 +0800 Subject: [PATCH] 10130 【后端】福地争夺资源功能(剩余时间为0报错防范;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 5906 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 5,738 insertions(+), 168 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 08ec62a..416480f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -706,58 +706,6 @@ #------------------------------------------------------ -# A4 05 开启家族boss副本 #tagCGOpenFamilyBossFB - -class tagCGOpenFamilyBossFB(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), # 开启的副本地图ID - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA4 - 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 = 0xA4 - self.SubCmd = 0x05 - self.MapID = 0 - return - - def GetLength(self): - return sizeof(tagCGOpenFamilyBossFB) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A4 05 开启家族boss副本 //tagCGOpenFamilyBossFB: - Cmd:%s, - SubCmd:%s, - MapID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MapID - ) - return DumpString - - -m_NAtagCGOpenFamilyBossFB=tagCGOpenFamilyBossFB() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGOpenFamilyBossFB.Cmd,m_NAtagCGOpenFamilyBossFB.SubCmd))] = m_NAtagCGOpenFamilyBossFB - - -#------------------------------------------------------ # A4 04 创建家族 #tagCGPyCreatFamily class tagCGPyCreatFamily(Structure): @@ -1137,7 +1085,7 @@ ("Type", c_ubyte), #类型 TBillboardType ("StartIndex", c_int), #查看的起始名次索引, 默认0 ("WatchCnt", c_ubyte), #查看条数,默认20,最大不超过100 - ("IsWatchSelf", c_ubyte), #是否查看自己名次前后,默认10条数据 + ("WatchID", c_int), #查看指定ID名次前后,如玩家ID、家族ID等 ] def __init__(self): @@ -1157,7 +1105,7 @@ self.Type = 0 self.StartIndex = 0 self.WatchCnt = 0 - self.IsWatchSelf = 0 + self.WatchID = 0 return def GetLength(self): @@ -1173,7 +1121,7 @@ Type:%d, StartIndex:%d, WatchCnt:%d, - IsWatchSelf:%d + WatchID:%d '''\ %( self.Cmd, @@ -1181,7 +1129,7 @@ self.Type, self.StartIndex, self.WatchCnt, - self.IsWatchSelf + self.WatchID ) return DumpString @@ -1301,6 +1249,106 @@ m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -2069,6 +2117,110 @@ #------------------------------------------------------ +# B0 34 福地请求结算奖励 #tagCGMineAreaAwardGet + +class tagCGMineAreaAwardGet(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x34 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x34 + return + + def GetLength(self): + return sizeof(tagCGMineAreaAwardGet) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 34 福地请求结算奖励 //tagCGMineAreaAwardGet: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGMineAreaAwardGet=tagCGMineAreaAwardGet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaAwardGet.Cmd,m_NAtagCGMineAreaAwardGet.SubCmd))] = m_NAtagCGMineAreaAwardGet + + +#------------------------------------------------------ +# B0 33 福地查看 #tagCGMineAreaView + +class tagCGMineAreaView(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("QueryType", c_ubyte), # 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表;4-退出他人福地;5-查看记录 + ("QueryValue", c_int), # 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x33 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x33 + self.QueryType = 0 + self.QueryValue = 0 + return + + def GetLength(self): + return sizeof(tagCGMineAreaView) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 33 福地查看 //tagCGMineAreaView: + Cmd:%s, + SubCmd:%s, + QueryType:%d, + QueryValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.QueryType, + self.QueryValue + ) + return DumpString + + +m_NAtagCGMineAreaView=tagCGMineAreaView() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaView.Cmd,m_NAtagCGMineAreaView.SubCmd))] = m_NAtagCGMineAreaView + + +#------------------------------------------------------ #B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState class tagQueryFamilyArrestOverState(Structure): @@ -2227,6 +2379,282 @@ m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift + + +#------------------------------------------------------ +# B0 20 请求膜拜玩家 #tagCGWorship + +class tagCGWorship(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 目标玩家ID + ("WorshipType", c_ubyte), # 膜拜类型 + ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x20 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x20 + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + return + + def GetLength(self): + return sizeof(tagCGWorship) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 20 请求膜拜玩家 //tagCGWorship: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.WorshipType, + self.WorshipValue + ) + return DumpString + + +m_NAtagCGWorship=tagCGWorship() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGWorship.Cmd,m_NAtagCGWorship.SubCmd))] = m_NAtagCGWorship + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -2506,7 +2934,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才发名称 @@ -3167,6 +3595,82 @@ #------------------------------------------------------ +# B9 21 修改功能队伍 #tagCGChangeFuncTeam + +class tagCGChangeFuncTeam(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TeamID", c_int), + ("FuncMapID", c_int), # 功能地图ID或自定义的活动功能ID + ("MinLV", c_ushort), #最低等级限制 + ("MinFightPower", c_int), #最低战力限制,求余亿 + ("MinFightPowerEx", c_int), #最低战力限制,整除亿 + ("ServerOnly", c_ubyte), #是否仅本服玩家可加入,0-否,1-是 + ("NeedCheck", c_ubyte), #是否需要审核 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB9 + self.SubCmd = 0x21 + self.TeamID = 0 + self.FuncMapID = 0 + self.MinLV = 0 + self.MinFightPower = 0 + self.MinFightPowerEx = 0 + self.ServerOnly = 0 + self.NeedCheck = 0 + return + + def GetLength(self): + return sizeof(tagCGChangeFuncTeam) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 21 修改功能队伍 //tagCGChangeFuncTeam: + Cmd:%s, + SubCmd:%s, + TeamID:%d, + FuncMapID:%d, + MinLV:%d, + MinFightPower:%d, + MinFightPowerEx:%d, + ServerOnly:%d, + NeedCheck:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TeamID, + self.FuncMapID, + self.MinLV, + self.MinFightPower, + self.MinFightPowerEx, + self.ServerOnly, + self.NeedCheck + ) + return DumpString + + +m_NAtagCGChangeFuncTeam=tagCGChangeFuncTeam() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChangeFuncTeam.Cmd,m_NAtagCGChangeFuncTeam.SubCmd))] = m_NAtagCGChangeFuncTeam + + +#------------------------------------------------------ # B9 03 修改队伍信息 #tagCGChangeTeamInfo class tagCGChangeTeamInfo(Structure): @@ -3231,6 +3735,119 @@ #------------------------------------------------------ +# B9 20 创建功能队伍 #tagCGCreateFuncTeam + +class tagCGCreateFuncTeam(Structure): + Head = tagHead() + FuncMapID = 0 #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID + FuncMapEx = 0 #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级 + NameLen = 0 #(BYTE NameLen) + TeamName = "" #(String TeamName)// 队伍名称,可为空 + MinLV = 0 #(WORD MinLV)//最低等级限制 + MinFightPower = 0 #(DWORD MinFightPower)//最低战力限制,求余亿 + MinFightPowerEx = 0 #(DWORD MinFightPowerEx)//最低战力限制,整除亿 + ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 + NeedCheck = 0 #(BYTE NeedCheck)//是否需要审核 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TeamName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.MinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MinFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MinFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCheck,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x20 + self.FuncMapID = 0 + self.FuncMapEx = 0 + self.NameLen = 0 + self.TeamName = "" + self.MinLV = 0 + self.MinFightPower = 0 + self.MinFightPowerEx = 0 + self.ServerOnly = 0 + self.NeedCheck = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 1 + length += len(self.TeamName) + length += 2 + length += 4 + length += 4 + length += 1 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FuncMapID) + data = CommFunc.WriteDWORD(data, self.FuncMapEx) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.TeamName) + data = CommFunc.WriteWORD(data, self.MinLV) + data = CommFunc.WriteDWORD(data, self.MinFightPower) + data = CommFunc.WriteDWORD(data, self.MinFightPowerEx) + data = CommFunc.WriteBYTE(data, self.ServerOnly) + data = CommFunc.WriteBYTE(data, self.NeedCheck) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FuncMapID:%d, + FuncMapEx:%d, + NameLen:%d, + TeamName:%s, + MinLV:%d, + MinFightPower:%d, + MinFightPowerEx:%d, + ServerOnly:%d, + NeedCheck:%d + '''\ + %( + self.Head.OutputString(), + self.FuncMapID, + self.FuncMapEx, + self.NameLen, + self.TeamName, + self.MinLV, + self.MinFightPower, + self.MinFightPowerEx, + self.ServerOnly, + self.NeedCheck + ) + return DumpString + + +m_NAtagCGCreateFuncTeam=tagCGCreateFuncTeam() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCreateFuncTeam.Head.Cmd,m_NAtagCGCreateFuncTeam.Head.SubCmd))] = m_NAtagCGCreateFuncTeam + + +#------------------------------------------------------ # B9 01 创建队伍 #tagCGCreateTeam class tagCGCreateTeam(Structure): @@ -3292,6 +3909,70 @@ m_NAtagCGCreateTeam=tagCGCreateTeam() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCreateTeam.Cmd,m_NAtagCGCreateTeam.SubCmd))] = m_NAtagCGCreateTeam + + +#------------------------------------------------------ +# B9 22 功能队伍成员操作 #tagCGFuncTeamMemOP + +class tagCGFuncTeamMemOP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TeamID", c_int), + ("FuncMapID", c_int), # 功能地图ID或自定义的活动功能ID + ("OPType", c_ubyte), # 1-申请加入;2-申请取消;3-同意入队;4-拒绝入队;5-退出队伍;6-踢出队伍;7-转让队长;8-解散队伍; + ("OPData", c_int), # 可选 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x22 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB9 + self.SubCmd = 0x22 + self.TeamID = 0 + self.FuncMapID = 0 + self.OPType = 0 + self.OPData = 0 + return + + def GetLength(self): + return sizeof(tagCGFuncTeamMemOP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 22 功能队伍成员操作 //tagCGFuncTeamMemOP: + Cmd:%s, + SubCmd:%s, + TeamID:%d, + FuncMapID:%d, + OPType:%d, + OPData:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TeamID, + self.FuncMapID, + self.OPType, + self.OPData + ) + return DumpString + + +m_NAtagCGFuncTeamMemOP=tagCGFuncTeamMemOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGFuncTeamMemOP.Cmd,m_NAtagCGFuncTeamMemOP.SubCmd))] = m_NAtagCGFuncTeamMemOP #------------------------------------------------------ @@ -3400,6 +4081,164 @@ m_NAtagCGInvitePlayerJoinTeamByLV=tagCGInvitePlayerJoinTeamByLV() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGInvitePlayerJoinTeamByLV.Cmd,m_NAtagCGInvitePlayerJoinTeamByLV.SubCmd))] = m_NAtagCGInvitePlayerJoinTeamByLV + + +#------------------------------------------------------ +# B9 23 查找功能队伍列表 #tagCGQueryFuncTeam + +class tagCGQueryFuncTeam(Structure): + Head = tagHead() + FuncMapID = 0 #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID + FuncMapEx = 0 #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级,0代表所有 + StartIndex = 0 #(DWORD StartIndex)// 查看的起始索引, 默认0 + QueryCnt = 0 #(BYTE QueryCnt)// 查看条数,默认20,最大不超过100 + HaveSpace = 0 #(BYTE HaveSpace)// 是否只查看有空位置的队伍 + IDLimitType = 0 #(BYTE IDLimitType)// ID限制类型:1-同仙盟队长;2-同ServerGroupID队长;3-同ServerID队长 + SearchLen = 0 #(BYTE SearchLen) + SearchMsg = "" #(String SearchMsg)// 指定搜索时有用,可搜索指定队伍ID或模糊搜索队伍名称,搜索时返回最多QueryCnt个数的队伍 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StartIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.QueryCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HaveSpace,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IDLimitType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SearchLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SearchMsg,_pos = CommFunc.ReadString(_lpData, _pos,self.SearchLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x23 + self.FuncMapID = 0 + self.FuncMapEx = 0 + self.StartIndex = 0 + self.QueryCnt = 0 + self.HaveSpace = 0 + self.IDLimitType = 0 + self.SearchLen = 0 + self.SearchMsg = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 4 + length += 1 + length += 1 + length += 1 + length += 1 + length += len(self.SearchMsg) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FuncMapID) + data = CommFunc.WriteDWORD(data, self.FuncMapEx) + data = CommFunc.WriteDWORD(data, self.StartIndex) + data = CommFunc.WriteBYTE(data, self.QueryCnt) + data = CommFunc.WriteBYTE(data, self.HaveSpace) + data = CommFunc.WriteBYTE(data, self.IDLimitType) + data = CommFunc.WriteBYTE(data, self.SearchLen) + data = CommFunc.WriteString(data, self.SearchLen, self.SearchMsg) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FuncMapID:%d, + FuncMapEx:%d, + StartIndex:%d, + QueryCnt:%d, + HaveSpace:%d, + IDLimitType:%d, + SearchLen:%d, + SearchMsg:%s + '''\ + %( + self.Head.OutputString(), + self.FuncMapID, + self.FuncMapEx, + self.StartIndex, + self.QueryCnt, + self.HaveSpace, + self.IDLimitType, + self.SearchLen, + self.SearchMsg + ) + return DumpString + + +m_NAtagCGQueryFuncTeam=tagCGQueryFuncTeam() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryFuncTeam.Head.Cmd,m_NAtagCGQueryFuncTeam.Head.SubCmd))] = m_NAtagCGQueryFuncTeam + + +#------------------------------------------------------ +# B9 24 查找玩家功能队伍 #tagCGQueryPlayerFuncTeam + +class tagCGQueryPlayerFuncTeam(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FuncMapID", c_int), # 功能地图ID或自定义的活动功能ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + 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 = 0xB9 + self.SubCmd = 0x24 + self.FuncMapID = 0 + return + + def GetLength(self): + return sizeof(tagCGQueryPlayerFuncTeam) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 24 查找玩家功能队伍 //tagCGQueryPlayerFuncTeam: + Cmd:%s, + SubCmd:%s, + FuncMapID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FuncMapID + ) + return DumpString + + +m_NAtagCGQueryPlayerFuncTeam=tagCGQueryPlayerFuncTeam() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryPlayerFuncTeam.Cmd,m_NAtagCGQueryPlayerFuncTeam.SubCmd))] = m_NAtagCGQueryPlayerFuncTeam #------------------------------------------------------ @@ -3567,6 +4406,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 +4510,422 @@ #------------------------------------------------------ +# C0 21 跨服排位仙官申请回应 #tagCGChampionshipOfficialApplyReply + +class tagCGChampionshipOfficialApplyReply(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #申请官职ID + ("PlayerID", c_int), #申请的玩家ID + ("IsOK", c_ubyte), #是否同意;1-是;0-否 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x21 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.PlayerID = 0 + self.IsOK = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialApplyReply) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 21 跨服排位仙官申请回应 //tagCGChampionshipOfficialApplyReply: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d, + PlayerID:%d, + IsOK:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID, + self.PlayerID, + self.IsOK + ) + return DumpString + + +m_NAtagCGChampionshipOfficialApplyReply=tagCGChampionshipOfficialApplyReply() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialApplyReply.Cmd,m_NAtagCGChampionshipOfficialApplyReply.SubCmd))] = m_NAtagCGChampionshipOfficialApplyReply + + +#------------------------------------------------------ +# C0 23 跨服排位仙官挑战记录查询 #tagCGChampionshipOfficialChallengeQuery + +class tagCGChampionshipOfficialChallengeQuery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #查询官职ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x23 + self.MainOfficialID = 0 + self.OfficialID = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialChallengeQuery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 23 跨服排位仙官挑战记录查询 //tagCGChampionshipOfficialChallengeQuery: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID + ) + return DumpString + + +m_NAtagCGChampionshipOfficialChallengeQuery=tagCGChampionshipOfficialChallengeQuery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialChallengeQuery.Cmd,m_NAtagCGChampionshipOfficialChallengeQuery.SubCmd))] = m_NAtagCGChampionshipOfficialChallengeQuery + + +#------------------------------------------------------ +# C0 24 跨服排位辞退下级仙官 #tagCGChampionshipOfficialKick + +class tagCGChampionshipOfficialKick(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #目标官职ID + ("PlayerID", c_int), #目标玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x24 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x24 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialKick) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 24 跨服排位辞退下级仙官 //tagCGChampionshipOfficialKick: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID, + self.PlayerID + ) + return DumpString + + +m_NAtagCGChampionshipOfficialKick=tagCGChampionshipOfficialKick() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialKick.Cmd,m_NAtagCGChampionshipOfficialKick.SubCmd))] = m_NAtagCGChampionshipOfficialKick + + +#------------------------------------------------------ +# C0 25 跨服排位主动离任仙官 #tagCGChampionshipOfficialLeave + +class tagCGChampionshipOfficialLeave(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #离任官职ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x25 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x25 + self.MainOfficialID = 0 + self.OfficialID = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialLeave) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 25 跨服排位主动离任仙官 //tagCGChampionshipOfficialLeave: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID + ) + return DumpString + + +m_NAtagCGChampionshipOfficialLeave=tagCGChampionshipOfficialLeave() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialLeave.Cmd,m_NAtagCGChampionshipOfficialLeave.SubCmd))] = m_NAtagCGChampionshipOfficialLeave + + +#------------------------------------------------------ +# C0 09 跨服战场召集场次修改 #tagCGCrossBattlefieldCallChange + +class tagCGCrossBattlefieldCallChange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("ServerOnly", c_ubyte), #是否仅本服玩家可加入,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x09 + self.Hour = 0 + self.Minute = 0 + self.ServerOnly = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldCallChange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 09 跨服战场召集场次修改 //tagCGCrossBattlefieldCallChange: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + ServerOnly:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.ServerOnly + ) + return DumpString + + +m_NAtagCGCrossBattlefieldCallChange=tagCGCrossBattlefieldCallChange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallChange.Cmd,m_NAtagCGCrossBattlefieldCallChange.SubCmd))] = m_NAtagCGCrossBattlefieldCallChange + + +#------------------------------------------------------ +# C0 08 跨服战场召集场次踢人 #tagCGCrossBattlefieldCallKick + +class tagCGCrossBattlefieldCallKick(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("TagPlayerID", c_int), #目标玩家ID,即要被踢出去的玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x08 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x08 + self.Hour = 0 + self.Minute = 0 + self.TagPlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldCallKick) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 08 跨服战场召集场次踢人 //tagCGCrossBattlefieldCallKick: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + TagPlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.TagPlayerID + ) + return DumpString + + +m_NAtagCGCrossBattlefieldCallKick=tagCGCrossBattlefieldCallKick() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallKick.Cmd,m_NAtagCGCrossBattlefieldCallKick.SubCmd))] = m_NAtagCGCrossBattlefieldCallKick + + +#------------------------------------------------------ +# C0 07 跨服战场加入召集场次 #tagCGCrossBattlefieldJoinByCall + +class tagCGCrossBattlefieldJoinByCall(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("BuyPlayerID", c_int), #加入目标玩家的召集队伍,即购买召集场的玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x07 + self.Hour = 0 + self.Minute = 0 + self.BuyPlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldJoinByCall) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 07 跨服战场加入召集场次 //tagCGCrossBattlefieldJoinByCall: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + BuyPlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.BuyPlayerID + ) + return DumpString + + +m_NAtagCGCrossBattlefieldJoinByCall=tagCGCrossBattlefieldJoinByCall() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldJoinByCall.Cmd,m_NAtagCGCrossBattlefieldJoinByCall.SubCmd))] = m_NAtagCGCrossBattlefieldJoinByCall + + +#------------------------------------------------------ # C0 03 强制退出跨服状态 #tagCGForceQuitCrossState class tagCGForceQuitCrossState(Structure): @@ -3667,6 +4974,178 @@ #------------------------------------------------------ +# 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组合归为同组榜单数据 + ("StartIndex", c_int), #查看的起始名次索引, 默认0 + ("WatchCnt", c_ubyte), #查看条数,默认20,最大不超过100 + ("WatchID", c_int), #查看指定ID名次前后,如玩家ID、家族ID等 + ] + + 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 + self.StartIndex = 0 + self.WatchCnt = 0 + self.WatchID = 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, + StartIndex:%d, + WatchCnt:%d, + WatchID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Type, + self.GroupValue1, + self.GroupValue2, + self.StartIndex, + self.WatchCnt, + self.WatchID + ) + 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 +5153,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): @@ -3776,6 +5255,196 @@ m_NAtagCGViewCrossPlayerInfo=tagCGViewCrossPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossPlayerInfo.Cmd,m_NAtagCGViewCrossPlayerInfo.SubCmd))] = m_NAtagCGViewCrossPlayerInfo + + +#------------------------------------------------------ +# A1 21 转职业 #tagCMChangeJob + +class tagCMChangeJob(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagJob", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA1 + self.SubCmd = 0x21 + self.TagJob = 0 + return + + def GetLength(self): + return sizeof(tagCMChangeJob) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 21 转职业 //tagCMChangeJob: + Cmd:%s, + SubCmd:%s, + TagJob:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagJob + ) + return DumpString + + +m_NAtagCMChangeJob=tagCMChangeJob() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeJob.Cmd,m_NAtagCMChangeJob.SubCmd))] = m_NAtagCMChangeJob + + +#------------------------------------------------------ +# A1 25 代币购买充值商品编号商品 #tagCMCoinBuyOrderInfo + +class tagCMCoinBuyOrderInfo(Structure): + Head = tagHead() + AppIDLen = 0 #(BYTE AppIDLen) + AppID = "" #(String AppID) + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo)//商品编号 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x25 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AppIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AppID,_pos = CommFunc.ReadString(_lpData, _pos,self.AppIDLen) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x25 + self.AppIDLen = 0 + self.AppID = "" + self.OrderInfoLen = 0 + self.OrderInfo = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.AppID) + length += 1 + length += len(self.OrderInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AppIDLen) + data = CommFunc.WriteString(data, self.AppIDLen, self.AppID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AppIDLen:%d, + AppID:%s, + OrderInfoLen:%d, + OrderInfo:%s + '''\ + %( + self.Head.OutputString(), + self.AppIDLen, + self.AppID, + self.OrderInfoLen, + self.OrderInfo + ) + return DumpString + + +m_NAtagCMCoinBuyOrderInfo=tagCMCoinBuyOrderInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCoinBuyOrderInfo.Head.Cmd,m_NAtagCMCoinBuyOrderInfo.Head.SubCmd))] = m_NAtagCMCoinBuyOrderInfo + + +#------------------------------------------------------ +# A1 20 货币兑换 #tagCMMoneyExchange + +class tagCMMoneyExchange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("SrcMoneyType", c_ubyte), # 源货币类型 + ("TagMoneyType", c_ubyte), # 目标货币类型 + ("ExchangeValue", c_int), # 兑换数量(消耗源货币的数量) + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x20 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA1 + self.SubCmd = 0x20 + self.SrcMoneyType = 0 + self.TagMoneyType = 0 + self.ExchangeValue = 0 + return + + def GetLength(self): + return sizeof(tagCMMoneyExchange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 20 货币兑换 //tagCMMoneyExchange: + Cmd:%s, + SubCmd:%s, + SrcMoneyType:%d, + TagMoneyType:%d, + ExchangeValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.SrcMoneyType, + self.TagMoneyType, + self.ExchangeValue + ) + return DumpString + + +m_NAtagCMMoneyExchange=tagCMMoneyExchange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMoneyExchange.Cmd,m_NAtagCMMoneyExchange.SubCmd))] = m_NAtagCMMoneyExchange #------------------------------------------------------ @@ -3899,6 +5568,58 @@ #------------------------------------------------------ +# A1 23 查询充值次数 #tagCMQueryCoinToGoldCount + +class tagCMQueryCoinToGoldCount(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RecordID", c_ushort), #充值记录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 + + +#------------------------------------------------------ # A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole class tagCMRefreshMainServerRole(Structure): @@ -3944,6 +5665,62 @@ m_NAtagCMRefreshMainServerRole=tagCMRefreshMainServerRole() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRefreshMainServerRole.Cmd,m_NAtagCMRefreshMainServerRole.SubCmd))] = m_NAtagCMRefreshMainServerRole + + +#------------------------------------------------------ +# A1 26 充值自选物品选择 #tagCMSelectCTGItem + +class tagCMSelectCTGItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RecordID", c_ushort), #充值ID + ("SelectItemValue", c_int), # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + 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 = 0xA1 + self.SubCmd = 0x26 + self.RecordID = 0 + self.SelectItemValue = 0 + return + + def GetLength(self): + return sizeof(tagCMSelectCTGItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 26 充值自选物品选择 //tagCMSelectCTGItem: + Cmd:%s, + SubCmd:%s, + RecordID:%d, + SelectItemValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RecordID, + self.SelectItemValue + ) + return DumpString + + +m_NAtagCMSelectCTGItem=tagCMSelectCTGItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectCTGItem.Cmd,m_NAtagCMSelectCTGItem.SubCmd))] = m_NAtagCMSelectCTGItem #------------------------------------------------------ @@ -5554,6 +7331,58 @@ #------------------------------------------------------ +# A2 35 选择境界难度层级 #tagCMSelectRealmDifficulty + +class tagCMSelectRealmDifficulty(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RealmDifficulty", c_ubyte), #境界难度 = 100 + 所选境界等级,如境界13,则发113 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA2 + self.SubCmd = 0x35 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA2 + self.SubCmd = 0x35 + self.RealmDifficulty = 0 + return + + def GetLength(self): + return sizeof(tagCMSelectRealmDifficulty) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A2 35 选择境界难度层级 //tagCMSelectRealmDifficulty: + Cmd:%s, + SubCmd:%s, + RealmDifficulty:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RealmDifficulty + ) + return DumpString + + +m_NAtagCMSelectRealmDifficulty=tagCMSelectRealmDifficulty() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectRealmDifficulty.Cmd,m_NAtagCMSelectRealmDifficulty.SubCmd))] = m_NAtagCMSelectRealmDifficulty + + +#------------------------------------------------------ # A2 30 设置聊天气泡框 #tagCMSetChatBubbleBox class tagCMSetChatBubbleBox(Structure): @@ -5937,6 +7766,58 @@ #------------------------------------------------------ +# A2 07 接受任务 #tagCMTakeTask + +class tagCMTakeTask(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TaskID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA2 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA2 + self.SubCmd = 0x07 + self.TaskID = 0 + return + + def GetLength(self): + return sizeof(tagCMTakeTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A2 07 接受任务 //tagCMTakeTask: + Cmd:%s, + SubCmd:%s, + TaskID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TaskID + ) + return DumpString + + +m_NAtagCMTakeTask=tagCMTakeTask() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTakeTask.Cmd,m_NAtagCMTakeTask.SubCmd))] = m_NAtagCMTakeTask + + +#------------------------------------------------------ #A2 12 查看玩家详细信息#tagCMViewPlayerInfo class tagCMViewPlayerInfo(Structure): @@ -6231,7 +8112,7 @@ ("SrcBackpack", c_ubyte), #源背包类型 ("DesBackPack", c_ubyte), #目标背包类型 ("SrcIndex", c_ushort), #转移物品索引位置;当全部转移时此值无效 - ("IsAll", c_ubyte), #是否全部转移 + ("IsAll", c_ubyte), #是否全部转移 ] def __init__(self): @@ -6492,98 +8373,52 @@ # A3 30 装备神装进阶 #tagCMEquipEvolve class tagCMEquipEvolve(Structure): - Head = tagHead() - EquipIndex = 0 #(BYTE EquipIndex)// 要进阶的装备在装备背包中索引 - NeedEquipIDIndex = 0 #(BYTE NeedEquipIDIndex)// 所需固定装备B在背包中索引 - NeedItemIDIndexCnt = 0 #(BYTE NeedItemIDIndexCnt)// 附加材料在背包中索引个数 - NeedItemIDIndex = list() #(vector<BYTE> NeedItemIDIndex)// 附加材料在背包的索引列表 - NeedSuitIndexCnt = 0 #(BYTE NeedSuitIndexCnt)// 所需套装材料在背包中索引个数 - NeedSuitIndex = list() #(vector<BYTE> NeedSuitIndex)// 所需套装材料在背包的索引列表 - data = None + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("EquipIndex", c_ubyte), # 要进阶的装备在装备背包中索引 + ] def __init__(self): self.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x30 + self.Cmd = 0xA3 + self.SubCmd = 0x30 return - def ReadData(self, _lpData, _pos=0, _Len=0): + def ReadData(self, stringData, _pos=0, _len=0): self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NeedEquipIDIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NeedItemIDIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.NeedItemIDIndexCnt): - value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.NeedItemIDIndex.append(value) - self.NeedSuitIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.NeedSuitIndexCnt): - value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.NeedSuitIndex.append(value) - return _pos + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x30 + self.Cmd = 0xA3 + self.SubCmd = 0x30 self.EquipIndex = 0 - self.NeedEquipIDIndex = 0 - self.NeedItemIDIndexCnt = 0 - self.NeedItemIDIndex = list() - self.NeedSuitIndexCnt = 0 - self.NeedSuitIndex = list() return def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 1 - length += 1 * self.NeedItemIDIndexCnt - length += 1 - length += 1 * self.NeedSuitIndexCnt - - return length + return sizeof(tagCMEquipEvolve) def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.EquipIndex) - data = CommFunc.WriteBYTE(data, self.NeedEquipIDIndex) - data = CommFunc.WriteBYTE(data, self.NeedItemIDIndexCnt) - for i in range(self.NeedItemIDIndexCnt): - data = CommFunc.WriteBYTE(data, self.NeedItemIDIndex[i]) - data = CommFunc.WriteBYTE(data, self.NeedSuitIndexCnt) - for i in range(self.NeedSuitIndexCnt): - data = CommFunc.WriteBYTE(data, self.NeedSuitIndex[i]) - return data + return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = ''' - Head:%s, - EquipIndex:%d, - NeedEquipIDIndex:%d, - NeedItemIDIndexCnt:%d, - NeedItemIDIndex:%s, - NeedSuitIndexCnt:%d, - NeedSuitIndex:%s + DumpString = '''// A3 30 装备神装进阶 //tagCMEquipEvolve: + Cmd:%s, + SubCmd:%s, + EquipIndex:%d '''\ %( - self.Head.OutputString(), - self.EquipIndex, - self.NeedEquipIDIndex, - self.NeedItemIDIndexCnt, - "...", - self.NeedSuitIndexCnt, - "..." + self.Cmd, + self.SubCmd, + self.EquipIndex ) return DumpString m_NAtagCMEquipEvolve=tagCMEquipEvolve() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Head.Cmd,m_NAtagCMEquipEvolve.Head.SubCmd))] = m_NAtagCMEquipEvolve +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Cmd,m_NAtagCMEquipEvolve.SubCmd))] = m_NAtagCMEquipEvolve #------------------------------------------------------ @@ -6692,6 +8527,73 @@ m_NAtagCMEquipPlusEvolve=tagCMEquipPlusEvolve() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPlusEvolve.Cmd,m_NAtagCMEquipPlusEvolve.SubCmd))] = m_NAtagCMEquipPlusEvolve + + +#------------------------------------------------------ +# A3 31 装备神装拆解 #tagCMEquipShenDecompose + +class tagCMEquipShenDecompose(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//所在背包索引的数量 + IndexList = list() #(vector<WORD> IndexList)//所在背包索引列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x31 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.IndexList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x31 + self.Count = 0 + self.IndexList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteWORD(data, self.IndexList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + IndexList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagCMEquipShenDecompose=tagCMEquipShenDecompose() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipShenDecompose.Head.Cmd,m_NAtagCMEquipShenDecompose.Head.SubCmd))] = m_NAtagCMEquipShenDecompose #------------------------------------------------------ @@ -7103,6 +9005,7 @@ ("SubCmd", c_ubyte), ("PackType", c_ubyte), #背包类型 ("ItemIndex", c_ubyte), #物品在背包中索引 + ("IsAll", c_ubyte), #是否处理所有过期物品 ] def __init__(self): @@ -7121,6 +9024,7 @@ self.SubCmd = 0x08 self.PackType = 0 self.ItemIndex = 0 + self.IsAll = 0 return def GetLength(self): @@ -7134,13 +9038,15 @@ Cmd:%s, SubCmd:%s, PackType:%d, - ItemIndex:%d + ItemIndex:%d, + IsAll:%d '''\ %( self.Cmd, self.SubCmd, self.PackType, - self.ItemIndex + self.ItemIndex, + self.IsAll ) return DumpString @@ -7199,6 +9105,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 #------------------------------------------------------ @@ -7905,7 +9871,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("HorseID", c_int), #坐骑ID + ("HorseID", c_int), #坐骑幻化ID ] def __init__(self): @@ -8734,6 +10700,54 @@ m_NAtagCMBuyKillBossCnt=tagCMBuyKillBossCnt() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyKillBossCnt.Cmd,m_NAtagCMBuyKillBossCnt.SubCmd))] = m_NAtagCMBuyKillBossCnt + + +#------------------------------------------------------ +# A5 46 购买通天令 #tagCMBuyTongTianLing + +class tagCMBuyTongTianLing(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x46 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x46 + return + + def GetLength(self): + return sizeof(tagCMBuyTongTianLing) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 46 购买通天令 //tagCMBuyTongTianLing: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMBuyTongTianLing=tagCMBuyTongTianLing() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyTongTianLing.Cmd,m_NAtagCMBuyTongTianLing.SubCmd))] = m_NAtagCMBuyTongTianLing #------------------------------------------------------ @@ -9771,6 +11785,114 @@ #------------------------------------------------------ +# A5 45 兑换通天令等级经验积分点 #tagCMExchangeTongTianLVPoint + +class tagCMExchangeTongTianLVPoint(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ExchangePoint", c_int), # 兑换点数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x45 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x45 + self.ExchangePoint = 0 + return + + def GetLength(self): + return sizeof(tagCMExchangeTongTianLVPoint) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 45 兑换通天令等级经验积分点 //tagCMExchangeTongTianLVPoint: + Cmd:%s, + SubCmd:%s, + ExchangePoint:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ExchangePoint + ) + return DumpString + + +m_NAtagCMExchangeTongTianLVPoint=tagCMExchangeTongTianLVPoint() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExchangeTongTianLVPoint.Cmd,m_NAtagCMExchangeTongTianLVPoint.SubCmd))] = m_NAtagCMExchangeTongTianLVPoint + + +#------------------------------------------------------ +# A5 32 法器升级 #tagCMFaQiLVUp + +class tagCMFaQiLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("UseItemCnt", c_ushort), #消耗材料个数 + ("IsAutoBuy", c_ubyte), #是否自动购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x32 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x32 + self.UseItemCnt = 0 + self.IsAutoBuy = 0 + return + + def GetLength(self): + return sizeof(tagCMFaQiLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 32 法器升级 //tagCMFaQiLVUp: + Cmd:%s, + SubCmd:%s, + UseItemCnt:%d, + IsAutoBuy:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.UseItemCnt, + self.IsAutoBuy + ) + return DumpString + + +m_NAtagCMFaQiLVUp=tagCMFaQiLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaQiLVUp.Cmd,m_NAtagCMFaQiLVUp.SubCmd))] = m_NAtagCMFaQiLVUp + + +#------------------------------------------------------ # A5 1C 聚魂合成 #tagCMGatherSoulCompound class tagCMGatherSoulCompound(Structure): @@ -10049,6 +12171,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("Index", c_ubyte), # 奖励索引,其他按顺序 + ("IsDaily", c_ubyte), # 是否领取每日日常的奖励,是发1,如果领取定制创角天奖励的则默认发0即可 ] def __init__(self): @@ -10066,6 +12189,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x06 self.Index = 0 + self.IsDaily = 0 return def GetLength(self): @@ -10078,12 +12202,14 @@ DumpString = '''//A5 06 玩家领取在线奖励 //tagCMGetOnlinePrize: Cmd:%s, SubCmd:%s, - Index:%d + Index:%d, + IsDaily:%d '''\ %( self.Cmd, self.SubCmd, - self.Index + self.Index, + self.IsDaily ) return DumpString @@ -10101,6 +12227,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("SuccID", c_int), #成就ID + ("IsPassport", c_ubyte), #是否通行证奖励 ] def __init__(self): @@ -10118,6 +12245,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x42 self.SuccID = 0 + self.IsPassport = 0 return def GetLength(self): @@ -10130,18 +12258,128 @@ DumpString = '''// A5 42 领取成就奖励 //tagMCGetSuccessAward: Cmd:%s, SubCmd:%s, - SuccID:%d + SuccID:%d, + IsPassport:%d '''\ %( self.Cmd, self.SubCmd, - self.SuccID + self.SuccID, + self.IsPassport ) return DumpString m_NAtagMCGetSuccessAward=tagMCGetSuccessAward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGetSuccessAward.Cmd,m_NAtagMCGetSuccessAward.SubCmd))] = m_NAtagMCGetSuccessAward + + +#------------------------------------------------------ +# A5 44 通天令领取等级奖励 #tagCMGetTongTianLVAward + +class tagCMGetTongTianLVAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TTLV", c_ubyte), # 领取对应等级奖励,发255为一键领取所有等级奖励,包含仙品奖励 + ("IsXian", c_ubyte), # 是否领取仙品奖励,仅指定等级奖励有效 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x44 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x44 + self.TTLV = 0 + self.IsXian = 0 + return + + def GetLength(self): + return sizeof(tagCMGetTongTianLVAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 44 通天令领取等级奖励 //tagCMGetTongTianLVAward: + Cmd:%s, + SubCmd:%s, + TTLV:%d, + IsXian:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TTLV, + self.IsXian + ) + return DumpString + + +m_NAtagCMGetTongTianLVAward=tagCMGetTongTianLVAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianLVAward.Cmd,m_NAtagCMGetTongTianLVAward.SubCmd))] = m_NAtagCMGetTongTianLVAward + + +#------------------------------------------------------ +# A5 43 通天令领取任务奖励 #tagCMGetTongTianTaskAward + +class tagCMGetTongTianTaskAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TaskID", c_ubyte), # 任务ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x43 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x43 + self.TaskID = 0 + return + + def GetLength(self): + return sizeof(tagCMGetTongTianTaskAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 43 通天令领取任务奖励 //tagCMGetTongTianTaskAward: + Cmd:%s, + SubCmd:%s, + TaskID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TaskID + ) + return DumpString + + +m_NAtagCMGetTongTianTaskAward=tagCMGetTongTianTaskAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianTaskAward.Cmd,m_NAtagCMGetTongTianTaskAward.SubCmd))] = m_NAtagCMGetTongTianTaskAward #------------------------------------------------------ @@ -10437,6 +12675,114 @@ #------------------------------------------------------ +# A5 35 坐骑升星 #tagCMHorseStarUp + +class tagCMHorseStarUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HorseID", c_int), #坐骑ID,对应坐骑表ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + 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 = 0xA5 + self.SubCmd = 0x35 + self.HorseID = 0 + return + + def GetLength(self): + return sizeof(tagCMHorseStarUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 35 坐骑升星 //tagCMHorseStarUp: + Cmd:%s, + SubCmd:%s, + HorseID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HorseID + ) + return DumpString + + +m_NAtagCMHorseStarUp=tagCMHorseStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseStarUp.Cmd,m_NAtagCMHorseStarUp.SubCmd))] = m_NAtagCMHorseStarUp + + +#------------------------------------------------------ +# A5 31 坐骑培养 #tagCMHorseTrain + +class tagCMHorseTrain(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TrainType", c_ubyte), #培养类型: 1-基础培养,2-特殊培养,3-百分比培养 + ("UseItemCnt", c_ushort), #消耗材料个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x31 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x31 + self.TrainType = 0 + self.UseItemCnt = 0 + return + + def GetLength(self): + return sizeof(tagCMHorseTrain) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 31 坐骑培养 //tagCMHorseTrain: + Cmd:%s, + SubCmd:%s, + TrainType:%d, + UseItemCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TrainType, + self.UseItemCnt + ) + return DumpString + + +m_NAtagCMHorseTrain=tagCMHorseTrain() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseTrain.Cmd,m_NAtagCMHorseTrain.SubCmd))] = m_NAtagCMHorseTrain + + +#------------------------------------------------------ # A5 27 坐骑提升 #tagCMHorseUp class tagCMHorseUp(Structure): @@ -10444,8 +12790,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("HorseID", c_int), #坐骑ID - ("UseItemCnt", c_ubyte), #消耗材料个数 + ("UseItemCnt", c_ushort), #消耗材料个数 ("IsAutoBuy", c_ubyte), #是否自动购买 ] @@ -10463,7 +12808,6 @@ def Clear(self): self.Cmd = 0xA5 self.SubCmd = 0x27 - self.HorseID = 0 self.UseItemCnt = 0 self.IsAutoBuy = 0 return @@ -10478,14 +12822,12 @@ DumpString = '''// A5 27 坐骑提升 //tagCMHorseUp: Cmd:%s, SubCmd:%s, - HorseID:%d, UseItemCnt:%d, IsAutoBuy:%d '''\ %( self.Cmd, self.SubCmd, - self.HorseID, self.UseItemCnt, self.IsAutoBuy ) @@ -10494,6 +12836,110 @@ m_NAtagCMHorseUp=tagCMHorseUp() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseUp.Cmd,m_NAtagCMHorseUp.SubCmd))] = m_NAtagCMHorseUp + + +#------------------------------------------------------ +# A5 34 炼体突破 #tagCMLianTiLVUp + +class tagCMLianTiLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x34 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x34 + return + + def GetLength(self): + return sizeof(tagCMLianTiLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 34 炼体突破 //tagCMLianTiLVUp: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMLianTiLVUp=tagCMLianTiLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiLVUp.Cmd,m_NAtagCMLianTiLVUp.SubCmd))] = m_NAtagCMLianTiLVUp + + +#------------------------------------------------------ +# A5 33 炼体提升 #tagCMLianTiUp + +class tagCMLianTiUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("UseItemCnt", c_int), #消耗材料个数 + ("IsAutoBuy", c_ubyte), #是否自动购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x33 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x33 + self.UseItemCnt = 0 + self.IsAutoBuy = 0 + return + + def GetLength(self): + return sizeof(tagCMLianTiUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 33 炼体提升 //tagCMLianTiUp: + Cmd:%s, + SubCmd:%s, + UseItemCnt:%d, + IsAutoBuy:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.UseItemCnt, + self.IsAutoBuy + ) + return DumpString + + +m_NAtagCMLianTiUp=tagCMLianTiUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiUp.Cmd,m_NAtagCMLianTiUp.SubCmd))] = m_NAtagCMLianTiUp #------------------------------------------------------ @@ -10656,7 +13102,8 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("Index", c_int), #选择索引 + ("ChooseType", c_ubyte), # 1-按等阶,2-按幻化 + ("LVID", c_ubyte), # 阶等级或幻化ID ] def __init__(self): @@ -10673,7 +13120,8 @@ def Clear(self): self.Cmd = 0xA5 self.SubCmd = 0x02 - self.Index = 0 + self.ChooseType = 0 + self.LVID = 0 return def GetLength(self): @@ -10686,12 +13134,14 @@ DumpString = '''//A5 02 坐骑选择 //tagPlayerChooseHorse: Cmd:%s, SubCmd:%s, - Index:%d + ChooseType:%d, + LVID:%d '''\ %( self.Cmd, self.SubCmd, - self.Index + self.ChooseType, + self.LVID ) return DumpString @@ -11748,6 +14198,58 @@ #------------------------------------------------------ +# A5 36 称号升星 #tagCMTitleStarUp + +class tagCMTitleStarUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TitleID", c_int), #称号ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + 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 = 0xA5 + self.SubCmd = 0x36 + self.TitleID = 0 + return + + def GetLength(self): + return sizeof(tagCMTitleStarUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 36 称号升星 //tagCMTitleStarUp: + Cmd:%s, + SubCmd:%s, + TitleID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TitleID + ) + return DumpString + + +m_NAtagCMTitleStarUp=tagCMTitleStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTitleStarUp.Cmd,m_NAtagCMTitleStarUp.SubCmd))] = m_NAtagCMTitleStarUp + + +#------------------------------------------------------ # A5 11 试用首充武器 #tagCMTryFirstGoldItem class tagCMTryFirstGoldItem(Structure): @@ -12072,6 +14574,66 @@ #------------------------------------------------------ +# A6 15 传功操作 #tagCMChuangongOP + +class tagCMChuangongOP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("OPType", c_ubyte), # 操作类型:1-邀请;2-回应;3-领奖; + ("PlayerID", c_int), # 目标玩家ID;回应时为邀请方玩家ID + ("OPData", c_ubyte), # 操作数据,可选:回应时为是否同意 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + 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 = 0xA6 + self.SubCmd = 0x15 + self.OPType = 0 + self.PlayerID = 0 + self.OPData = 0 + return + + def GetLength(self): + return sizeof(tagCMChuangongOP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 15 传功操作 //tagCMChuangongOP: + Cmd:%s, + SubCmd:%s, + OPType:%d, + PlayerID:%d, + OPData:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.OPType, + self.PlayerID, + self.OPData + ) + return DumpString + + +m_NAtagCMChuangongOP=tagCMChuangongOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChuangongOP.Cmd,m_NAtagCMChuangongOP.SubCmd))] = m_NAtagCMChuangongOP + + +#------------------------------------------------------ # A6 11 家族改名 #tagCMRenameFamily class tagCMRenameFamily(Structure): @@ -12220,19 +14782,21 @@ #------------------------------------------------------ -# A6 05 家族捐献兽粮 #tagCMFamilyDonate +# A6 13 家族事务操作 #tagCMFamilyAffairOP -class tagCMFamilyDonate(Structure): +class tagCMFamilyAffairOP(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("OPType", c_ubyte), # 操作类型:1-刷新事务;2-开始事务;3-领取事务奖励; + ("AffairID", c_ushort), # 事务ID,可选 ] def __init__(self): self.Clear() self.Cmd = 0xA6 - self.SubCmd = 0x05 + self.SubCmd = 0x13 return def ReadData(self, stringData, _pos=0, _len=0): @@ -12242,29 +14806,87 @@ def Clear(self): self.Cmd = 0xA6 - self.SubCmd = 0x05 + self.SubCmd = 0x13 + self.OPType = 0 + self.AffairID = 0 return def GetLength(self): - return sizeof(tagCMFamilyDonate) + return sizeof(tagCMFamilyAffairOP) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// A6 05 家族捐献兽粮 //tagCMFamilyDonate: + DumpString = '''// A6 13 家族事务操作 //tagCMFamilyAffairOP: Cmd:%s, - SubCmd:%s + SubCmd:%s, + OPType:%d, + AffairID:%d '''\ %( self.Cmd, - self.SubCmd + self.SubCmd, + self.OPType, + self.AffairID ) return DumpString -m_NAtagCMFamilyDonate=tagCMFamilyDonate() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyDonate.Cmd,m_NAtagCMFamilyDonate.SubCmd))] = m_NAtagCMFamilyDonate +m_NAtagCMFamilyAffairOP=tagCMFamilyAffairOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyAffairOP.Cmd,m_NAtagCMFamilyAffairOP.SubCmd))] = m_NAtagCMFamilyAffairOP + + +#------------------------------------------------------ +# A6 12 家族捐献货币 #tagCMFamilyMoneyDonate + +class tagCMFamilyMoneyDonate(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MoneyType", c_ubyte), # 捐献货币类型 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + 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 = 0xA6 + self.SubCmd = 0x12 + self.MoneyType = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyMoneyDonate) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 12 家族捐献货币 //tagCMFamilyMoneyDonate: + Cmd:%s, + SubCmd:%s, + MoneyType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MoneyType + ) + return DumpString + + +m_NAtagCMFamilyMoneyDonate=tagCMFamilyMoneyDonate() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyMoneyDonate.Cmd,m_NAtagCMFamilyMoneyDonate.SubCmd))] = m_NAtagCMFamilyMoneyDonate #------------------------------------------------------ @@ -12377,6 +14999,66 @@ m_NAtagCMFamilyStoreExchange=tagCMFamilyStoreExchange() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyStoreExchange.Cmd,m_NAtagCMFamilyStoreExchange.SubCmd))] = m_NAtagCMFamilyStoreExchange + + +#------------------------------------------------------ +# A6 14 家族阵法升级 #tagCMFamilyZhenfaLVUP + +class tagCMFamilyZhenfaLVUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ItemID", c_int), # 消耗的物品ID + ("ItemCount", c_ushort), # 消耗个数,默认1 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + 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 = 0xA6 + self.SubCmd = 0x14 + self.ZhenfaType = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyZhenfaLVUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 14 家族阵法升级 //tagCMFamilyZhenfaLVUP: + Cmd:%s, + SubCmd:%s, + ZhenfaType:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZhenfaType, + self.ItemID, + self.ItemCount + ) + return DumpString + + +m_NAtagCMFamilyZhenfaLVUP=tagCMFamilyZhenfaLVUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyZhenfaLVUP.Cmd,m_NAtagCMFamilyZhenfaLVUP.SubCmd))] = m_NAtagCMFamilyZhenfaLVUP #------------------------------------------------------ @@ -12496,6 +15178,7 @@ PacketCnt = 0 #(WORD PacketCnt)// 红包数量 MoneyNum = 0 #(WORD MoneyNum)//金钱数量 Wish = "" #(char Wish[33])//祝福语 + IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名 data = None def __init__(self): @@ -12511,6 +15194,7 @@ self.PacketCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -12522,6 +15206,7 @@ self.PacketCnt = 0 self.MoneyNum = 0 self.Wish = "" + self.IsAnonymous = 0 return def GetLength(self): @@ -12531,6 +15216,7 @@ length += 2 length += 2 length += 33 + length += 1 return length @@ -12541,6 +15227,7 @@ data = CommFunc.WriteWORD(data, self.PacketCnt) data = CommFunc.WriteWORD(data, self.MoneyNum) data = CommFunc.WriteString(data, 33, self.Wish) + data = CommFunc.WriteBYTE(data, self.IsAnonymous) return data def OutputString(self): @@ -12549,14 +15236,16 @@ RedPacketID:%d, PacketCnt:%d, MoneyNum:%d, - Wish:%s + Wish:%s, + IsAnonymous:%d '''\ %( self.Head.OutputString(), self.RedPacketID, self.PacketCnt, self.MoneyNum, - self.Wish + self.Wish, + self.IsAnonymous ) return DumpString @@ -12727,6 +15416,114 @@ m_NAtagCMPetClassUP=tagCMPetClassUP() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetClassUP.Cmd,m_NAtagCMPetClassUP.SubCmd))] = m_NAtagCMPetClassUP + + +#------------------------------------------------------ +# A7 06 宠物升星 #tagCMPetStarUp + +class tagCMPetStarUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PetItemIndex", c_ubyte), #宠物数据背包索引 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA7 + 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 = 0xA7 + self.SubCmd = 0x06 + self.PetItemIndex = 0 + return + + def GetLength(self): + return sizeof(tagCMPetStarUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 06 宠物升星 //tagCMPetStarUp: + Cmd:%s, + SubCmd:%s, + PetItemIndex:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PetItemIndex + ) + return DumpString + + +m_NAtagCMPetStarUp=tagCMPetStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetStarUp.Cmd,m_NAtagCMPetStarUp.SubCmd))] = m_NAtagCMPetStarUp + + +#------------------------------------------------------ +# A7 05 宠物培养 #tagCMPetTrain + +class tagCMPetTrain(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TrainType", c_ubyte), #培养类型: 1-基础培养,2-特殊培养,3-百分比培养 + ("UseItemCnt", c_ushort), #消耗材料个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA7 + self.SubCmd = 0x05 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA7 + self.SubCmd = 0x05 + self.TrainType = 0 + self.UseItemCnt = 0 + return + + def GetLength(self): + return sizeof(tagCMPetTrain) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 05 宠物培养 //tagCMPetTrain: + Cmd:%s, + SubCmd:%s, + TrainType:%d, + UseItemCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TrainType, + self.UseItemCnt + ) + return DumpString + + +m_NAtagCMPetTrain=tagCMPetTrain() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetTrain.Cmd,m_NAtagCMPetTrain.SubCmd))] = m_NAtagCMPetTrain #------------------------------------------------------ @@ -12986,6 +15783,689 @@ #------------------------------------------------------ +# AA 24 Boss历练领奖 #tagCMActBossTrialGetAward + +class tagCMActBossTrialGetAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #领取凭证个数对应奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + 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 = 0xAA + self.SubCmd = 0x24 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialGetAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 24 Boss历练领奖 //tagCMActBossTrialGetAward: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialGetAward=tagCMActBossTrialGetAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialGetAward.Cmd,m_NAtagCMActBossTrialGetAward.SubCmd))] = m_NAtagCMActBossTrialGetAward + + +#------------------------------------------------------ +# AA 23 Boss历练提交凭证 #tagCMActBossTrialSubmit + +class tagCMActBossTrialSubmit(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #提交凭证个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + 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 = 0xAA + self.SubCmd = 0x23 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialSubmit) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 23 Boss历练提交凭证 //tagCMActBossTrialSubmit: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialSubmit=tagCMActBossTrialSubmit() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialSubmit.Cmd,m_NAtagCMActBossTrialSubmit.SubCmd))] = m_NAtagCMActBossTrialSubmit + + +#------------------------------------------------------ +# 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 20 天帝礼包选择物品 #tagCMActGodGiftChooseItem + +class tagCMActGodGiftChooseItemInfo(Structure): + ItemLibType = 0 #(BYTE ItemLibType)//物品库类型 + Count = 0 #(BYTE Count)//选择个数 + ItemNumList = list() #(vector<BYTE> ItemNumList)//选择物品编号列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ItemNumList.append(value) + return _pos + + def Clear(self): + self.ItemLibType = 0 + self.Count = 0 + self.ItemNumList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ItemLibType) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteBYTE(data, self.ItemNumList[i]) + return data + + def OutputString(self): + DumpString = ''' + ItemLibType:%d, + Count:%d, + ItemNumList:%s + '''\ + %( + self.ItemLibType, + self.Count, + "..." + ) + return DumpString + + +class tagCMActGodGiftChooseItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + ChooseLibCount = 0 #(BYTE ChooseLibCount)//选择库个数 + ChooseItemList = list() #(vector<tagCMActGodGiftChooseItemInfo> ChooseItemList)//选择库物品信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x20 + 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.ChooseLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ChooseLibCount): + temChooseItemList = tagCMActGodGiftChooseItemInfo() + _pos = temChooseItemList.ReadData(_lpData, _pos) + self.ChooseItemList.append(temChooseItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x20 + self.ActNum = 0 + self.ChooseLibCount = 0 + self.ChooseItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.ChooseLibCount): + length += self.ChooseItemList[i].GetLength() + + 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.ChooseLibCount) + for i in range(self.ChooseLibCount): + data = CommFunc.WriteString(data, self.ChooseItemList[i].GetLength(), self.ChooseItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + ChooseLibCount:%d, + ChooseItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.ChooseLibCount, + "..." + ) + return DumpString + + +m_NAtagCMActGodGiftChooseItem=tagCMActGodGiftChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftChooseItem.Head.Cmd,m_NAtagCMActGodGiftChooseItem.Head.SubCmd))] = m_NAtagCMActGodGiftChooseItem + + +#------------------------------------------------------ +# AA 21 天帝礼包抽奖 #tagCMActGodGiftlottery + +class tagCMActGodGiftlottery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x21 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActGodGiftlottery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 21 天帝礼包抽奖 //tagCMActGodGiftlottery: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActGodGiftlottery=tagCMActGodGiftlottery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftlottery.Cmd,m_NAtagCMActGodGiftlottery.SubCmd))] = m_NAtagCMActGodGiftlottery + + +#------------------------------------------------------ +# AA 22 天帝礼包重置 #tagCMActGodGiftReset + +class tagCMActGodGiftReset(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x22 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x22 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActGodGiftReset) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 22 天帝礼包重置 //tagCMActGodGiftReset: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActGodGiftReset=tagCMActGodGiftReset() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftReset.Cmd,m_NAtagCMActGodGiftReset.SubCmd))] = m_NAtagCMActGodGiftReset + + +#------------------------------------------------------ +# AA 12 选择转盘活动物品 #tagCMActTurntableChooseItem + +class tagCMActTurntableChooseItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + GoodItemNumCount = 0 #(BYTE GoodItemNumCount) + GoodItemNumList = list() #(vector<BYTE> GoodItemNumList)// 选择的极品物品编号列表 + SuperItemNumCount = 0 #(BYTE SuperItemNumCount) + SuperItemNumList = list() #(vector<BYTE> SuperItemNumList)// 选择的终极物品编号列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GoodItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GoodItemNumCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.GoodItemNumList.append(value) + self.SuperItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemNumCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.SuperItemNumList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + self.ActNum = 0 + self.GoodItemNumCount = 0 + self.GoodItemNumList = list() + self.SuperItemNumCount = 0 + self.SuperItemNumList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 * self.GoodItemNumCount + length += 1 + length += 1 * self.SuperItemNumCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.GoodItemNumCount) + for i in range(self.GoodItemNumCount): + data = CommFunc.WriteBYTE(data, self.GoodItemNumList[i]) + data = CommFunc.WriteBYTE(data, self.SuperItemNumCount) + for i in range(self.SuperItemNumCount): + data = CommFunc.WriteBYTE(data, self.SuperItemNumList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + GoodItemNumCount:%d, + GoodItemNumList:%s, + SuperItemNumCount:%d, + SuperItemNumList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.GoodItemNumCount, + "...", + self.SuperItemNumCount, + "..." + ) + return DumpString + + +m_NAtagCMActTurntableChooseItem=tagCMActTurntableChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableChooseItem.Head.Cmd,m_NAtagCMActTurntableChooseItem.Head.SubCmd))] = m_NAtagCMActTurntableChooseItem + + +#------------------------------------------------------ +# AA 13 启动转盘 #tagCMActTurntableStart + +class tagCMActTurntableStart(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x13 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x13 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActTurntableStart) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 13 启动转盘 //tagCMActTurntableStart: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActTurntableStart=tagCMActTurntableStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableStart.Cmd,m_NAtagCMActTurntableStart.SubCmd))] = m_NAtagCMActTurntableStart + + +#------------------------------------------------------ # AA 07 许愿池活动刷新奖池 #tagCMActWishingRefresh class tagCMActWishingRefresh(Structure): @@ -13035,6 +16515,188 @@ m_NAtagCMActWishingRefresh=tagCMActWishingRefresh() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishingRefresh.Cmd,m_NAtagCMActWishingRefresh.SubCmd))] = m_NAtagCMActWishingRefresh + + +#------------------------------------------------------ +# AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh + +class tagCMActXianXiaMJAwardPoolRefresh(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x18 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x18 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJAwardPoolRefresh) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 18 仙匣秘境活动奖池刷新 //tagCMActXianXiaMJAwardPoolRefresh: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJAwardPoolRefresh=tagCMActXianXiaMJAwardPoolRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJAwardPoolRefresh.Cmd,m_NAtagCMActXianXiaMJAwardPoolRefresh.SubCmd))] = m_NAtagCMActXianXiaMJAwardPoolRefresh + + +#------------------------------------------------------ +# AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery + +class tagCMActXianXiaMJLottery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("PosNum", c_ubyte), #玩家点击的奖励位置编号,从1开始 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x17 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x17 + self.ActNum = 0 + self.PosNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJLottery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 17 仙匣秘境活动抽奖 //tagCMActXianXiaMJLottery: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + PosNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.PosNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJLottery=tagCMActXianXiaMJLottery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJLottery.Cmd,m_NAtagCMActXianXiaMJLottery.SubCmd))] = m_NAtagCMActXianXiaMJLottery + + +#------------------------------------------------------ +# AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem + +class tagCMActXianXiaMJSuperItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + SuperItemCount = 0 #(BYTE SuperItemCount)//选择物品数量 + SuperItemIDList = list() #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SuperItemIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + self.ActNum = 0 + self.SuperItemCount = 0 + self.SuperItemIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.SuperItemCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + SuperItemCount:%d, + SuperItemIDList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.SuperItemCount, + "..." + ) + return DumpString + + +m_NAtagCMActXianXiaMJSuperItem=tagCMActXianXiaMJSuperItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJSuperItem.Head.Cmd,m_NAtagCMActXianXiaMJSuperItem.Head.SubCmd))] = m_NAtagCMActXianXiaMJSuperItem #------------------------------------------------------ @@ -13102,6 +16764,114 @@ #------------------------------------------------------ +# AA 10 节日祝福瓶选择奖励物品 #tagCMFeastWishBottleChooseItem + +class tagCMFeastWishBottleChooseItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BottleNum", c_ubyte), #瓶子编号 + ("RecordIndex", c_ubyte), #物品索引,用于选择及记录是否已选择 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x10 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x10 + self.BottleNum = 0 + self.RecordIndex = 0 + return + + def GetLength(self): + return sizeof(tagCMFeastWishBottleChooseItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 10 节日祝福瓶选择奖励物品 //tagCMFeastWishBottleChooseItem: + Cmd:%s, + SubCmd:%s, + BottleNum:%d, + RecordIndex:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BottleNum, + self.RecordIndex + ) + return DumpString + + +m_NAtagCMFeastWishBottleChooseItem=tagCMFeastWishBottleChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishBottleChooseItem.Cmd,m_NAtagCMFeastWishBottleChooseItem.SubCmd))] = m_NAtagCMFeastWishBottleChooseItem + + +#------------------------------------------------------ +# AA 11 节日祝福池祝福 #tagCMFeastWishPoolWish + +class tagCMFeastWishPoolWish(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("WishCount", c_ubyte), #祝福次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x11 + self.WishCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFeastWishPoolWish) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 11 节日祝福池祝福 //tagCMFeastWishPoolWish: + Cmd:%s, + SubCmd:%s, + WishCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.WishCount + ) + return DumpString + + +m_NAtagCMFeastWishPoolWish=tagCMFeastWishPoolWish() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishPoolWish.Cmd,m_NAtagCMFeastWishPoolWish.SubCmd))] = m_NAtagCMFeastWishPoolWish + + +#------------------------------------------------------ # AA 05 限时抢购预约 #tagCMFlashSaleAppointment class tagCMFlashSaleAppointment(Structure): @@ -13109,6 +16879,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 ("GoodsID", c_int), # 抢购商品标识 ("State", c_ubyte), # 1-预约 0-取消 ] @@ -13127,6 +16898,7 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x05 + self.ActNum = 0 self.GoodsID = 0 self.State = 0 return @@ -13141,12 +16913,14 @@ DumpString = '''// AA 05 限时抢购预约 //tagCMFlashSaleAppointment: Cmd:%s, SubCmd:%s, + ActNum:%d, GoodsID:%d, State:%d '''\ %( self.Cmd, self.SubCmd, + self.ActNum, self.GoodsID, self.State ) @@ -14006,6 +17780,154 @@ #------------------------------------------------------ +# B0 29 活跃放置明细查询 #tagCMActivityPlaceQuery + +class tagCMActivityPlaceQuery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x29 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x29 + return + + def GetLength(self): + return sizeof(tagCMActivityPlaceQuery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 29 活跃放置明细查询 //tagCMActivityPlaceQuery: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMActivityPlaceQuery=tagCMActivityPlaceQuery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuery.Cmd,m_NAtagCMActivityPlaceQuery.SubCmd))] = m_NAtagCMActivityPlaceQuery + + +#------------------------------------------------------ +# B0 28 活跃放置快速完成 #tagCMActivityPlaceQuickFinish + +class tagCMActivityPlaceQuickFinish(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FinishCount", c_ubyte), #完成次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + 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 = 0xB0 + self.SubCmd = 0x28 + self.FinishCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActivityPlaceQuickFinish) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 28 活跃放置快速完成 //tagCMActivityPlaceQuickFinish: + Cmd:%s, + SubCmd:%s, + FinishCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FinishCount + ) + return DumpString + + +m_NAtagCMActivityPlaceQuickFinish=tagCMActivityPlaceQuickFinish() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuickFinish.Cmd,m_NAtagCMActivityPlaceQuickFinish.SubCmd))] = m_NAtagCMActivityPlaceQuickFinish + + +#------------------------------------------------------ +# B0 27 活跃放置启动 #tagCMActivityPlaceStart + +class tagCMActivityPlaceStart(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + 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 = 0xB0 + self.SubCmd = 0x27 + return + + def GetLength(self): + return sizeof(tagCMActivityPlaceStart) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 27 活跃放置启动 //tagCMActivityPlaceStart: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMActivityPlaceStart=tagCMActivityPlaceStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceStart.Cmd,m_NAtagCMActivityPlaceStart.SubCmd))] = m_NAtagCMActivityPlaceStart + + +#------------------------------------------------------ # B0 50 钓鱼收杆 #tagCMDoFish class tagCMDoFish(Structure): @@ -14059,6 +17981,170 @@ m_NAtagCMDoFish=tagCMDoFish() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDoFish.Cmd,m_NAtagCMDoFish.SubCmd))] = m_NAtagCMDoFish + + +#------------------------------------------------------ +# B0 30 福地物品拉 #tagCMMineItemPull + +class tagCMMineItemPull(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 福地所属玩家ID,0默认自己 + ("ItemIndex", c_ubyte), # 物品所在位置索引0~n + ("WorkerCount", c_ubyte), # 上工人人数 + ("IsPreview", c_ubyte), # 是否预览;0-直接拉,1-预览大概时间 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x30 + 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 = 0x30 + self.PlayerID = 0 + self.ItemIndex = 0 + self.WorkerCount = 0 + self.IsPreview = 0 + return + + def GetLength(self): + return sizeof(tagCMMineItemPull) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 30 福地物品拉 //tagCMMineItemPull: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + ItemIndex:%d, + WorkerCount:%d, + IsPreview:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.ItemIndex, + self.WorkerCount, + self.IsPreview + ) + return DumpString + + +m_NAtagCMMineItemPull=tagCMMineItemPull() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemPull.Cmd,m_NAtagCMMineItemPull.SubCmd))] = m_NAtagCMMineItemPull + + +#------------------------------------------------------ +# B0 31 福地物品刷新 #tagCMMineItemRefresh + +class tagCMMineItemRefresh(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsSuper", c_ubyte), # 是否超级刷新 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + 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 = 0xB0 + self.SubCmd = 0x31 + self.IsSuper = 0 + return + + def GetLength(self): + return sizeof(tagCMMineItemRefresh) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 31 福地物品刷新 //tagCMMineItemRefresh: + Cmd:%s, + SubCmd:%s, + IsSuper:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsSuper + ) + return DumpString + + +m_NAtagCMMineItemRefresh=tagCMMineItemRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemRefresh.Cmd,m_NAtagCMMineItemRefresh.SubCmd))] = m_NAtagCMMineItemRefresh + + +#------------------------------------------------------ +# B0 32 福地工人雇佣 #tagCMMineWorkerEmploy + +class tagCMMineWorkerEmploy(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + 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 = 0xB0 + self.SubCmd = 0x32 + return + + def GetLength(self): + return sizeof(tagCMMineWorkerEmploy) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 32 福地工人雇佣 //tagCMMineWorkerEmploy: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMMineWorkerEmploy=tagCMMineWorkerEmploy() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineWorkerEmploy.Cmd,m_NAtagCMMineWorkerEmploy.SubCmd))] = m_NAtagCMMineWorkerEmploy #------------------------------------------------------ @@ -14782,6 +18868,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): @@ -14859,6 +19012,445 @@ #------------------------------------------------------ +# 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 25 新聚魂操作 #tagCMGatherTheSoulOP + +class tagCMGatherTheSoulOP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("OpType", c_ubyte), # 0-激活升级; 1-穿戴替换; 2-卸下 + ("SoulID", c_int), # 聚魂ID;当操作升级时,如果为0代表一键升级所有可升级的 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x25 + self.OpType = 0 + self.SoulID = 0 + return + + def GetLength(self): + return sizeof(tagCMGatherTheSoulOP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 25 新聚魂操作 //tagCMGatherTheSoulOP: + Cmd:%s, + SubCmd:%s, + OpType:%d, + SoulID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.OpType, + self.SoulID + ) + return DumpString + + +m_NAtagCMGatherTheSoulOP=tagCMGatherTheSoulOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherTheSoulOP.Cmd,m_NAtagCMGatherTheSoulOP.SubCmd))] = m_NAtagCMGatherTheSoulOP + + +#------------------------------------------------------ +# 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 + + +#------------------------------------------------------ +# B2 16 古宝激活 #tagCMGubaoActivate + +class tagCMGubaoActivate(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GubaoID", c_ushort), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x16 + self.GubaoID = 0 + return + + def GetLength(self): + return sizeof(tagCMGubaoActivate) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 16 古宝激活 //tagCMGubaoActivate: + Cmd:%s, + SubCmd:%s, + GubaoID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GubaoID + ) + return DumpString + + +m_NAtagCMGubaoActivate=tagCMGubaoActivate() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoActivate.Cmd,m_NAtagCMGubaoActivate.SubCmd))] = m_NAtagCMGubaoActivate + + +#------------------------------------------------------ +# B2 18 古宝升级 #tagCMGubaoLVUp + +class tagCMGubaoLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GubaoID", c_ushort), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x18 + self.GubaoID = 0 + return + + def GetLength(self): + return sizeof(tagCMGubaoLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 18 古宝升级 //tagCMGubaoLVUp: + Cmd:%s, + SubCmd:%s, + GubaoID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GubaoID + ) + return DumpString + + +m_NAtagCMGubaoLVUp=tagCMGubaoLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoLVUp.Cmd,m_NAtagCMGubaoLVUp.SubCmd))] = m_NAtagCMGubaoLVUp + + +#------------------------------------------------------ +# B2 17 古宝升星 #tagCMGubaoStarUp + +class tagCMGubaoPieceUse(Structure): + _pack_ = 1 + _fields_ = [ + ("GubaoID", c_ushort), # 通用碎片古宝ID + ("PieceCount", c_ushort), # 使用碎片个数 + ] + + def __init__(self): + self.Clear() + 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.GubaoID = 0 + self.PieceCount = 0 + return + + def GetLength(self): + return sizeof(tagCMGubaoPieceUse) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 17 古宝升星 //tagCMGubaoStarUp: + GubaoID:%d, + PieceCount:%d + '''\ + %( + self.GubaoID, + self.PieceCount + ) + return DumpString + + +class tagCMGubaoStarUp(Structure): + Head = tagHead() + GubaoID = 0 #(WORD GubaoID) + PieceSelectCount = 0 #(BYTE PieceSelectCount) + CommPieceUseList = list() #(vector<tagCMGubaoPieceUse> CommPieceUseList)// 通用古宝碎片使用列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x17 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.GubaoID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PieceSelectCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PieceSelectCount): + temCommPieceUseList = tagCMGubaoPieceUse() + _pos = temCommPieceUseList.ReadData(_lpData, _pos) + self.CommPieceUseList.append(temCommPieceUseList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x17 + self.GubaoID = 0 + self.PieceSelectCount = 0 + self.CommPieceUseList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + for i in range(self.PieceSelectCount): + length += self.CommPieceUseList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.GubaoID) + data = CommFunc.WriteBYTE(data, self.PieceSelectCount) + for i in range(self.PieceSelectCount): + data = CommFunc.WriteString(data, self.CommPieceUseList[i].GetLength(), self.CommPieceUseList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + GubaoID:%d, + PieceSelectCount:%d, + CommPieceUseList:%s + '''\ + %( + self.Head.OutputString(), + self.GubaoID, + self.PieceSelectCount, + "..." + ) + return DumpString + + +m_NAtagCMGubaoStarUp=tagCMGubaoStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoStarUp.Head.Cmd,m_NAtagCMGubaoStarUp.Head.SubCmd))] = m_NAtagCMGubaoStarUp + + +#------------------------------------------------------ # B2 07 重置加点 #tagCMResetAttrPoint class tagCMResetAttrPoint(Structure): @@ -14904,6 +19496,125 @@ m_NAtagCMResetAttrPoint=tagCMResetAttrPoint() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMResetAttrPoint.Cmd,m_NAtagCMResetAttrPoint.SubCmd))] = m_NAtagCMResetAttrPoint + + +#------------------------------------------------------ +# B2 19 神通升级 #tagCMShentongLVUp + +class tagCMShentongLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ShentongID", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x19 + self.ShentongID = 0 + return + + def GetLength(self): + return sizeof(tagCMShentongLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 19 神通升级 //tagCMShentongLVUp: + Cmd:%s, + SubCmd:%s, + ShentongID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ShentongID + ) + return DumpString + + +m_NAtagCMShentongLVUp=tagCMShentongLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongLVUp.Cmd,m_NAtagCMShentongLVUp.SubCmd))] = m_NAtagCMShentongLVUp + + +#------------------------------------------------------ +# B2 20 神通技能设置 #tagCMShentongSkillSet + +class tagCMShentongSkillSet(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + SkillIDList = list() #(vector<DWORD> SkillIDList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x20 + 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.ReadDWORD(_lpData,_pos) + self.SkillIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x20 + self.Count = 0 + self.SkillIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * 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.WriteDWORD(data, self.SkillIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SkillIDList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagCMShentongSkillSet=tagCMShentongSkillSet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongSkillSet.Head.Cmd,m_NAtagCMShentongSkillSet.Head.SubCmd))] = m_NAtagCMShentongSkillSet #------------------------------------------------------ @@ -15190,6 +19901,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): @@ -15250,6 +20345,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("LostHP", c_int), + ("LostHPEx", c_int), ] def __init__(self): @@ -15267,6 +20363,7 @@ self.Cmd = 0xB4 self.SubCmd = 0x0E self.LostHP = 0 + self.LostHPEx = 0 return def GetLength(self): @@ -15279,12 +20376,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 @@ -15862,6 +20961,7 @@ ("ObjID", c_int), ("AttackType", c_ubyte), #爆击, miss ("HurtHP", c_int), + ("HurtHPEx", c_int), ] def __init__(self): @@ -15878,6 +20978,7 @@ self.ObjID = 0 self.AttackType = 0 self.HurtHP = 0 + self.HurtHPEx = 0 return def GetLength(self): @@ -15891,13 +20992,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 @@ -16258,12 +21361,107 @@ #------------------------------------------------------ +# B4 10 回合制战斗 #tagCMTurnFight + +class tagCMTurnFight(Structure): + Head = tagHead() + MapID = 0 #(DWORD MapID)// 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) + FuncLineID = 0 #(WORD FuncLineID) + TagType = 0 #(BYTE TagType)// 战斗目标类型,0-NPC,1-玩家,2-队伍 + TagID = 0 #(DWORD TagID)// 战斗目标类型对应的ID + ValueCount = 0 #(BYTE ValueCount) + ValueList = list() #(vector<DWORD> ValueList)// 附加值列表,可选,具体含义由MapID决定 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ValueList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x10 + self.MapID = 0 + self.FuncLineID = 0 + self.TagType = 0 + self.TagID = 0 + self.ValueCount = 0 + self.ValueList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 1 + length += 4 + length += 1 + length += 4 * self.ValueCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteWORD(data, self.FuncLineID) + data = CommFunc.WriteBYTE(data, self.TagType) + data = CommFunc.WriteDWORD(data, self.TagID) + data = CommFunc.WriteBYTE(data, self.ValueCount) + for i in range(self.ValueCount): + data = CommFunc.WriteDWORD(data, self.ValueList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + MapID:%d, + FuncLineID:%d, + TagType:%d, + TagID:%d, + ValueCount:%d, + ValueList:%s + '''\ + %( + self.Head.OutputString(), + self.MapID, + self.FuncLineID, + self.TagType, + self.TagID, + self.ValueCount, + "..." + ) + return DumpString + + +m_NAtagCMTurnFight=tagCMTurnFight() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTurnFight.Head.Cmd,m_NAtagCMTurnFight.Head.SubCmd))] = m_NAtagCMTurnFight + + +#------------------------------------------------------ # B5 14 拍卖行竞价物品 #tagCMBiddingAuctionItem class tagCMBiddingAuctionItem(Structure): Head = tagHead() ItemGUID = "" #(char ItemGUID[40]) - BiddingPrice = 0 #(WORD BiddingPrice)//竞价价格 + BiddingPrice = 0 #(DWORD BiddingPrice)//竞价价格 data = None def __init__(self): @@ -16276,7 +21474,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): @@ -16292,7 +21490,7 @@ length = 0 length += self.Head.GetLength() length += 40 - length += 2 + length += 4 return length @@ -16300,7 +21498,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): @@ -16479,6 +21677,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("ItemIndex", c_ubyte), #物品在背包中索引 + ("SellCount", c_ushort), #上架个数,0代表全部上架 ] def __init__(self): @@ -16496,6 +21695,7 @@ self.Cmd = 0xB5 self.SubCmd = 0x13 self.ItemIndex = 0 + self.SellCount = 0 return def GetLength(self): @@ -16508,12 +21708,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 @@ -16633,6 +21835,322 @@ m_NAtagCMChangeTeamCheckState=tagCMChangeTeamCheckState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeTeamCheckState.Cmd,m_NAtagCMChangeTeamCheckState.SubCmd))] = m_NAtagCMChangeTeamCheckState + + +#------------------------------------------------------ +# C1 22 跨服排位竞猜 #tagCMChampionshipGuess + +class tagCMChampionshipGuess(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #排位数据分区ID + ("GuessType", c_ubyte), #竞猜类型 8-8强;4-4强排位 + ("PlayerID", c_int), #目标玩家ID + ("GuessCount", c_ubyte), #投注/追加份数 + ("GuessRank", c_ubyte), # 竞猜名次,没有名次的竞猜默认0;1-代表第一名 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x22 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x22 + self.ZoneID = 0 + self.GuessType = 0 + self.PlayerID = 0 + self.GuessCount = 0 + self.GuessRank = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipGuess) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 22 跨服排位竞猜 //tagCMChampionshipGuess: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + GuessType:%d, + PlayerID:%d, + GuessCount:%d, + GuessRank:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.GuessType, + self.PlayerID, + self.GuessCount, + self.GuessRank + ) + return DumpString + + +m_NAtagCMChampionshipGuess=tagCMChampionshipGuess() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipGuess.Cmd,m_NAtagCMChampionshipGuess.SubCmd))] = m_NAtagCMChampionshipGuess + + +#------------------------------------------------------ +# C1 20 跨服排位仙官申请 #tagCMChampionshipOfficialApply + +class tagCMChampionshipOfficialApply(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #仙官数据分区ID + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #申请官职ID + ("Cancel", c_ubyte), #是否取消申请,默认0-申请;1-取消申请 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x20 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x20 + self.ZoneID = 0 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.Cancel = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipOfficialApply) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 20 跨服排位仙官申请 //tagCMChampionshipOfficialApply: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + MainOfficialID:%d, + OfficialID:%d, + Cancel:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.MainOfficialID, + self.OfficialID, + self.Cancel + ) + return DumpString + + +m_NAtagCMChampionshipOfficialApply=tagCMChampionshipOfficialApply() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipOfficialApply.Cmd,m_NAtagCMChampionshipOfficialApply.SubCmd))] = m_NAtagCMChampionshipOfficialApply + + +#------------------------------------------------------ +# C1 21 跨服排位仙官挑战 #tagCMChampionshipOfficialChallenge + +class tagCMChampionshipOfficialChallenge(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #仙官数据分区ID + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #挑战的目标官职ID + ("PlayerID", c_int), #挑战时的目标玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x21 + self.ZoneID = 0 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipOfficialChallenge) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 21 跨服排位仙官挑战 //tagCMChampionshipOfficialChallenge: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + MainOfficialID:%d, + OfficialID:%d, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.MainOfficialID, + self.OfficialID, + self.PlayerID + ) + return DumpString + + +m_NAtagCMChampionshipOfficialChallenge=tagCMChampionshipOfficialChallenge() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipOfficialChallenge.Cmd,m_NAtagCMChampionshipOfficialChallenge.SubCmd))] = m_NAtagCMChampionshipOfficialChallenge + + +#------------------------------------------------------ +# C1 23 跨服排位膜拜 #tagCMChampionshipWorship + +class tagCMChampionshipWorship(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #仙官数据分区ID + ("PlayerID", c_int), #目标玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x23 + self.ZoneID = 0 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipWorship) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 23 跨服排位膜拜 //tagCMChampionshipWorship: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.PlayerID + ) + return DumpString + + +m_NAtagCMChampionshipWorship=tagCMChampionshipWorship() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipWorship.Cmd,m_NAtagCMChampionshipWorship.SubCmd))] = m_NAtagCMChampionshipWorship + + +#------------------------------------------------------ +# C1 09 跨服战场购买开启场次 #tagCMCrossBattlefieldBuyOpen + +class tagCMCrossBattlefieldBuyOpen(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("Faction", c_ubyte), #阵营 1-红;2-蓝 + ("ServerOnly", c_ubyte), #是否仅本服玩家可加入,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x09 + self.Hour = 0 + self.Minute = 0 + self.Faction = 0 + self.ServerOnly = 0 + return + + def GetLength(self): + return sizeof(tagCMCrossBattlefieldBuyOpen) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 09 跨服战场购买开启场次 //tagCMCrossBattlefieldBuyOpen: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + Faction:%d, + ServerOnly:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.Faction, + self.ServerOnly + ) + return DumpString + + +m_NAtagCMCrossBattlefieldBuyOpen=tagCMCrossBattlefieldBuyOpen() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossBattlefieldBuyOpen.Cmd,m_NAtagCMCrossBattlefieldBuyOpen.SubCmd))] = m_NAtagCMCrossBattlefieldBuyOpen #------------------------------------------------------ @@ -17008,4 +22526,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