From 716bde90b02ac4f81e8ef1a0dbcec30c3546339b Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 06 十一月 2024 16:46:38 +0800 Subject: [PATCH] 10261 【越南】【砍树】【英文】【tqxbqy】头像框,头像(补充通知:C001、C005、B207; 0320宗门扫荡结算助战玩家头像信息; A003王者仙盟徽章;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 2560 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 2,450 insertions(+), 110 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 4a1280f..481836a 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -379,6 +379,58 @@ #------------------------------------------------------ +# A4 13 修改家族徽章 #tagCGChangeFamilyEmblem + +class tagCGChangeFamilyEmblem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("EmblemID", c_ubyte), # 更换的徽章ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + 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 = 0xA4 + self.SubCmd = 0x13 + self.EmblemID = 0 + return + + def GetLength(self): + return sizeof(tagCGChangeFamilyEmblem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 13 修改家族徽章 //tagCGChangeFamilyEmblem: + Cmd:%s, + SubCmd:%s, + EmblemID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.EmblemID + ) + return DumpString + + +m_NAtagCGChangeFamilyEmblem=tagCGChangeFamilyEmblem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChangeFamilyEmblem.Cmd,m_NAtagCGChangeFamilyEmblem.SubCmd))] = m_NAtagCGChangeFamilyEmblem + + +#------------------------------------------------------ # A4 08 查询家族行为信息 #tagCGQueryFamilyAction class tagCGQueryFamilyAction(Structure): @@ -706,64 +758,13 @@ #------------------------------------------------------ -# 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): Head = tagHead() Name = "" #(char Name[33]) FakeID = 0 #(WORD FakeID)//假仙盟编号 + EmblemID = 0 #(BYTE EmblemID)//选择徽章ID,解锁仙盟等级为1级的均为可选ID data = None def __init__(self): @@ -777,6 +778,7 @@ _pos = self.Head.ReadData(_lpData, _pos) self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) self.FakeID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -786,6 +788,7 @@ self.Head.SubCmd = 0x04 self.Name = "" self.FakeID = 0 + self.EmblemID = 0 return def GetLength(self): @@ -793,6 +796,7 @@ length += self.Head.GetLength() length += 33 length += 2 + length += 1 return length @@ -801,18 +805,21 @@ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteString(data, 33, self.Name) data = CommFunc.WriteWORD(data, self.FakeID) + data = CommFunc.WriteBYTE(data, self.EmblemID) return data def OutputString(self): DumpString = ''' Head:%s, Name:%s, - FakeID:%d + FakeID:%d, + EmblemID:%d '''\ %( self.Head.OutputString(), self.Name, - self.FakeID + self.FakeID, + self.EmblemID ) return DumpString @@ -1137,7 +1144,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 +1164,7 @@ self.Type = 0 self.StartIndex = 0 self.WatchCnt = 0 - self.IsWatchSelf = 0 + self.WatchID = 0 return def GetLength(self): @@ -1173,7 +1180,7 @@ Type:%d, StartIndex:%d, WatchCnt:%d, - IsWatchSelf:%d + WatchID:%d '''\ %( self.Cmd, @@ -1181,7 +1188,7 @@ self.Type, self.StartIndex, self.WatchCnt, - self.IsWatchSelf + self.WatchID ) return DumpString @@ -1301,6 +1308,58 @@ m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward + + +#------------------------------------------------------ +# A9 07 点赞仙宫 #tagCGLikeXiangong + +class tagCGLikeXiangong(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("XiangongID", c_ushort), # 仙宫ID,为0时代表每日的仙宫点赞 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + 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 = 0xA9 + self.SubCmd = 0x07 + self.XiangongID = 0 + return + + def GetLength(self): + return sizeof(tagCGLikeXiangong) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 07 点赞仙宫 //tagCGLikeXiangong: + Cmd:%s, + SubCmd:%s, + XiangongID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.XiangongID + ) + return DumpString + + +m_NAtagCGLikeXiangong=tagCGLikeXiangong() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGLikeXiangong.Cmd,m_NAtagCGLikeXiangong.SubCmd))] = m_NAtagCGLikeXiangong #------------------------------------------------------ @@ -1621,6 +1680,58 @@ m_NAtagCGQueryRecommendFriends=tagCGQueryRecommendFriends() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryRecommendFriends.Cmd,m_NAtagCGQueryRecommendFriends.SubCmd))] = m_NAtagCGQueryRecommendFriends + + +#------------------------------------------------------ +# A9 06 查看仙宫仙名录 #tagCGQueryXiangongRecPlayers + +class tagCGQueryXiangongRecPlayers(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("XiangongID", c_ushort), # 仙宫ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + 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 = 0xA9 + self.SubCmd = 0x06 + self.XiangongID = 0 + return + + def GetLength(self): + return sizeof(tagCGQueryXiangongRecPlayers) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 06 查看仙宫仙名录 //tagCGQueryXiangongRecPlayers: + Cmd:%s, + SubCmd:%s, + XiangongID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.XiangongID + ) + return DumpString + + +m_NAtagCGQueryXiangongRecPlayers=tagCGQueryXiangongRecPlayers() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryXiangongRecPlayers.Cmd,m_NAtagCGQueryXiangongRecPlayers.SubCmd))] = m_NAtagCGQueryXiangongRecPlayers #------------------------------------------------------ @@ -2169,6 +2280,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): @@ -2327,6 +2542,66 @@ 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 #------------------------------------------------------ @@ -3483,6 +3758,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): @@ -3547,6 +3898,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): @@ -3608,6 +4072,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 #------------------------------------------------------ @@ -3716,6 +4244,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 #------------------------------------------------------ @@ -4561,6 +5247,9 @@ ("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): @@ -4580,6 +5269,9 @@ self.Type = 0 self.GroupValue1 = 0 self.GroupValue2 = 0 + self.StartIndex = 0 + self.WatchCnt = 0 + self.WatchID = 0 return def GetLength(self): @@ -4594,14 +5286,20 @@ SubCmd:%s, Type:%d, GroupValue1:%d, - GroupValue2:%d + GroupValue2:%d, + StartIndex:%d, + WatchCnt:%d, + WatchID:%d '''\ %( self.Cmd, self.SubCmd, self.Type, self.GroupValue1, - self.GroupValue2 + self.GroupValue2, + self.StartIndex, + self.WatchCnt, + self.WatchID ) return DumpString @@ -4775,6 +5473,144 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # A1 01 玩家电脑信息 #tagCMPCInfo class tagCMPCInfo(Structure): @@ -4902,7 +5738,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("RecordID", c_ubyte), #充值记录ID,也就是充值ID,发0则查全部 + ("RecordID", c_ushort), #充值记录ID,也就是充值ID,发0则查全部 ] def __init__(self): @@ -4992,6 +5828,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 #------------------------------------------------------ @@ -5345,6 +6237,58 @@ m_NAtagCMBuyItemBack=tagCMBuyItemBack() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItemBack.Cmd,m_NAtagCMBuyItemBack.SubCmd))] = m_NAtagCMBuyItemBack + + +#------------------------------------------------------ +# A2 36 聊天气泡框升星 #tagCMChatBubbleBoxStarUP + +class tagCMChatBubbleBoxStarUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BoxID", c_ubyte), #气泡ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA2 + self.SubCmd = 0x36 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA2 + self.SubCmd = 0x36 + self.BoxID = 0 + return + + def GetLength(self): + return sizeof(tagCMChatBubbleBoxStarUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A2 36 聊天气泡框升星 //tagCMChatBubbleBoxStarUP: + Cmd:%s, + SubCmd:%s, + BoxID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BoxID + ) + return DumpString + + +m_NAtagCMChatBubbleBoxStarUP=tagCMChatBubbleBoxStarUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChatBubbleBoxStarUP.Cmd,m_NAtagCMChatBubbleBoxStarUP.SubCmd))] = m_NAtagCMChatBubbleBoxStarUP #------------------------------------------------------ @@ -8958,20 +9902,15 @@ #------------------------------------------------------ # A3 23 使用物品 #tagCMUseItems -class tagCMUseItems(Structure): +class tagCMUseItemsSelect(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ItemIndex", c_ubyte), #物品在背包中索引 - ("UseCnt", c_ushort), #使用个数,0表示全部使用 - ("ExData", c_int), #使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID + ("SelectID", c_int), #选择项ID + ("SelectCnt", c_ushort), #选择数 ] def __init__(self): self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x23 return def ReadData(self, stringData, _pos=0, _len=0): @@ -8980,39 +9919,113 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x23 - self.ItemIndex = 0 - self.UseCnt = 0 - self.ExData = 0 + self.SelectID = 0 + self.SelectCnt = 0 return def GetLength(self): - return sizeof(tagCMUseItems) + return sizeof(tagCMUseItemsSelect) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''// A3 23 使用物品 //tagCMUseItems: - Cmd:%s, - SubCmd:%s, - ItemIndex:%d, - UseCnt:%d, - ExData:%d + SelectID:%d, + SelectCnt:%d '''\ %( - self.Cmd, - self.SubCmd, + self.SelectID, + self.SelectCnt + ) + return DumpString + + +class tagCMUseItems(Structure): + Head = tagHead() + ItemIndex = 0 #(BYTE ItemIndex)//物品在背包中索引 + UseCnt = 0 #(WORD UseCnt)//使用个数,0表示全部使用 + ExData = 0 #(DWORD ExData)//使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID + SelectCount = 0 #(BYTE SelectCount)//指定选择项,当批量使用单个箱子需要同时选中多种选项时使用该值 + SelectList = list() #(vector<tagCMUseItemsSelect> SelectList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ItemIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UseCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ExData,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SelectCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SelectCount): + temSelectList = tagCMUseItemsSelect() + _pos = temSelectList.ReadData(_lpData, _pos) + self.SelectList.append(temSelectList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x23 + self.ItemIndex = 0 + self.UseCnt = 0 + self.ExData = 0 + self.SelectCount = 0 + self.SelectList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 4 + length += 1 + for i in range(self.SelectCount): + length += self.SelectList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ItemIndex) + data = CommFunc.WriteWORD(data, self.UseCnt) + data = CommFunc.WriteDWORD(data, self.ExData) + data = CommFunc.WriteBYTE(data, self.SelectCount) + for i in range(self.SelectCount): + data = CommFunc.WriteString(data, self.SelectList[i].GetLength(), self.SelectList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ItemIndex:%d, + UseCnt:%d, + ExData:%d, + SelectCount:%d, + SelectList:%s + '''\ + %( + self.Head.OutputString(), self.ItemIndex, self.UseCnt, - self.ExData + self.ExData, + self.SelectCount, + "..." ) return DumpString m_NAtagCMUseItems=tagCMUseItems() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Cmd,m_NAtagCMUseItems.SubCmd))] = m_NAtagCMUseItems +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseItems.Head.Cmd,m_NAtagCMUseItems.Head.SubCmd))] = m_NAtagCMUseItems #------------------------------------------------------ @@ -11946,6 +12959,58 @@ #------------------------------------------------------ +# 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): @@ -13417,6 +14482,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): @@ -13741,6 +14858,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): @@ -13889,19 +15066,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): @@ -13911,29 +15090,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 #------------------------------------------------------ @@ -14046,6 +15283,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 #------------------------------------------------------ @@ -14294,6 +15591,58 @@ #------------------------------------------------------ +# A6 16 珍宝阁操作 #tagCMZhenbaogeOP + +class tagCMZhenbaogeOP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("OpType", c_ubyte), # 操作:0-砍价;1-购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + self.SubCmd = 0x16 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA6 + self.SubCmd = 0x16 + self.OpType = 0 + return + + def GetLength(self): + return sizeof(tagCMZhenbaogeOP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 16 珍宝阁操作 //tagCMZhenbaogeOP: + Cmd:%s, + SubCmd:%s, + OpType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.OpType + ) + return DumpString + + +m_NAtagCMZhenbaogeOP=tagCMZhenbaogeOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMZhenbaogeOP.Cmd,m_NAtagCMZhenbaogeOP.SubCmd))] = m_NAtagCMZhenbaogeOP + + +#------------------------------------------------------ # A7 02 宠物激活 #tagCMActivatePet class tagCMActivatePet(Structure): @@ -14403,6 +15752,58 @@ 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 #------------------------------------------------------ @@ -14715,6 +16116,118 @@ m_NAtagCMVIPKillNPCLVInfoSwitch=tagCMVIPKillNPCLVInfoSwitch() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVIPKillNPCLVInfoSwitch.Cmd,m_NAtagCMVIPKillNPCLVInfoSwitch.SubCmd))] = m_NAtagCMVIPKillNPCLVInfoSwitch + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -16807,6 +18320,170 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ #B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState class tagQueryFamilyArrestAwardReceiveState(Structure): @@ -17779,6 +19456,403 @@ #------------------------------------------------------ +# B2 21 玩家砍树 #tagCMCutTree + +class tagCMCutTree(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CutCount", c_ubyte), # 砍几次,默认1 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x21 + self.CutCount = 0 + return + + def GetLength(self): + return sizeof(tagCMCutTree) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 21 玩家砍树 //tagCMCutTree: + Cmd:%s, + SubCmd:%s, + CutCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CutCount + ) + return DumpString + + +m_NAtagCMCutTree=tagCMCutTree() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCutTree.Cmd,m_NAtagCMCutTree.SubCmd))] = m_NAtagCMCutTree + + +#------------------------------------------------------ +# B2 22 砍树装备操作 #tagCMCutTreeEquipOP + +class tagCMCutTreeEquipOP(Structure): + Head = tagHead() + IndexCount = 0 #(BYTE IndexCount) + ItemIndexList = list() #(vector<BYTE> ItemIndexList)// 物品在砍树背包的索引列表 + OPType = 0 #(BYTE OPType)// 操作类型:1-替换;2-分解 + AutoDecompose = 0 #(BYTE AutoDecompose)// 替换后是否自动分解原装备:0否1是,仅替换操作下有用 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.IndexCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ItemIndexList.append(value) + self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AutoDecompose,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x22 + self.IndexCount = 0 + self.ItemIndexList = list() + self.OPType = 0 + self.AutoDecompose = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 * self.IndexCount + length += 1 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IndexCount) + for i in range(self.IndexCount): + data = CommFunc.WriteBYTE(data, self.ItemIndexList[i]) + data = CommFunc.WriteBYTE(data, self.OPType) + data = CommFunc.WriteBYTE(data, self.AutoDecompose) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + IndexCount:%d, + ItemIndexList:%s, + OPType:%d, + AutoDecompose:%d + '''\ + %( + self.Head.OutputString(), + self.IndexCount, + "...", + self.OPType, + self.AutoDecompose + ) + return DumpString + + +m_NAtagCMCutTreeEquipOP=tagCMCutTreeEquipOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCutTreeEquipOP.Head.Cmd,m_NAtagCMCutTreeEquipOP.Head.SubCmd))] = m_NAtagCMCutTreeEquipOP + + +#------------------------------------------------------ +# B2 26 头像幻化 #tagCMFaceChange + +class tagCMFaceChange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FaceID", c_int), # 幻化的ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x26 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x26 + self.FaceID = 0 + return + + def GetLength(self): + return sizeof(tagCMFaceChange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 26 头像幻化 //tagCMFaceChange: + Cmd:%s, + SubCmd:%s, + FaceID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FaceID + ) + return DumpString + + +m_NAtagCMFaceChange=tagCMFaceChange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaceChange.Cmd,m_NAtagCMFaceChange.SubCmd))] = m_NAtagCMFaceChange + + +#------------------------------------------------------ +# B2 28 头像框幻化 #tagCMFacePicChange + +class tagCMFacePicChange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FacePicID", c_int), # 幻化的ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x28 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x28 + self.FacePicID = 0 + return + + def GetLength(self): + return sizeof(tagCMFacePicChange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 28 头像框幻化 //tagCMFacePicChange: + Cmd:%s, + SubCmd:%s, + FacePicID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FacePicID + ) + return DumpString + + +m_NAtagCMFacePicChange=tagCMFacePicChange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFacePicChange.Cmd,m_NAtagCMFacePicChange.SubCmd))] = m_NAtagCMFacePicChange + + +#------------------------------------------------------ +# B2 29 头像框升星 #tagCMFacePicStarUP + +class tagCMFacePicStarUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FacePicID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x29 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x29 + self.FacePicID = 0 + return + + def GetLength(self): + return sizeof(tagCMFacePicStarUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 29 头像框升星 //tagCMFacePicStarUP: + Cmd:%s, + SubCmd:%s, + FacePicID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FacePicID + ) + return DumpString + + +m_NAtagCMFacePicStarUP=tagCMFacePicStarUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFacePicStarUP.Cmd,m_NAtagCMFacePicStarUP.SubCmd))] = m_NAtagCMFacePicStarUP + + +#------------------------------------------------------ +# B2 27 头像升星 #tagCMFaceStarUP + +class tagCMFaceStarUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FaceID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x27 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x27 + self.FaceID = 0 + return + + def GetLength(self): + return sizeof(tagCMFaceStarUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 27 头像升星 //tagCMFaceStarUP: + Cmd:%s, + SubCmd:%s, + FaceID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FaceID + ) + return DumpString + + +m_NAtagCMFaceStarUP=tagCMFaceStarUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaceStarUP.Cmd,m_NAtagCMFaceStarUP.SubCmd))] = m_NAtagCMFaceStarUP + + +#------------------------------------------------------ +# 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): @@ -17941,18 +20015,15 @@ #------------------------------------------------------ # B2 17 古宝升星 #tagCMGubaoStarUp -class tagCMGubaoStarUp(Structure): +class tagCMGubaoPieceUse(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("GubaoID", c_ushort), + ("GubaoID", c_ushort), # 通用碎片古宝ID + ("PieceCount", c_ushort), # 使用碎片个数 ] def __init__(self): self.Clear() - self.Cmd = 0xB2 - self.SubCmd = 0x17 return def ReadData(self, stringData, _pos=0, _len=0): @@ -17961,33 +20032,99 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xB2 - self.SubCmd = 0x17 self.GubaoID = 0 + self.PieceCount = 0 return def GetLength(self): - return sizeof(tagCMGubaoStarUp) + return sizeof(tagCMGubaoPieceUse) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''// B2 17 古宝升星 //tagCMGubaoStarUp: - Cmd:%s, - SubCmd:%s, - GubaoID:%d + GubaoID:%d, + PieceCount:%d '''\ %( - self.Cmd, - self.SubCmd, - self.GubaoID + 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.Cmd,m_NAtagCMGubaoStarUp.SubCmd))] = m_NAtagCMGubaoStarUp +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoStarUp.Head.Cmd,m_NAtagCMGubaoStarUp.Head.SubCmd))] = m_NAtagCMGubaoStarUp #------------------------------------------------------ @@ -18438,6 +20575,114 @@ m_NAtagCMTJGnpc=tagCMTJGnpc() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTJGnpc.Cmd,m_NAtagCMTJGnpc.SubCmd))] = m_NAtagCMTJGnpc + + +#------------------------------------------------------ +# B2 23 仙树升级 #tagCMTreeLVUP + +class tagCMTreeLVUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Type", c_ubyte), # 0-开始升级(请求扣除消耗,开始升级倒计时);1-执行升级(前端自行倒计时,时间到后发送该类型) + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x23 + self.Type = 0 + return + + def GetLength(self): + return sizeof(tagCMTreeLVUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 23 仙树升级 //tagCMTreeLVUP: + Cmd:%s, + SubCmd:%s, + Type:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Type + ) + return DumpString + + +m_NAtagCMTreeLVUP=tagCMTreeLVUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTreeLVUP.Cmd,m_NAtagCMTreeLVUP.SubCmd))] = m_NAtagCMTreeLVUP + + +#------------------------------------------------------ +# B2 24 使用仙树升级减时物品 #tagCMUseTreeLVUPTimeItem + +class tagCMUseTreeLVUPTimeItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("UseCount", c_int), # 使用个数 + ("IsAutoBuy", c_ubyte), # 不足个数是否自动购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x24 + self.UseCount = 0 + self.IsAutoBuy = 0 + return + + def GetLength(self): + return sizeof(tagCMUseTreeLVUPTimeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 24 使用仙树升级减时物品 //tagCMUseTreeLVUPTimeItem: + Cmd:%s, + SubCmd:%s, + UseCount:%d, + IsAutoBuy:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.UseCount, + self.IsAutoBuy + ) + return DumpString + + +m_NAtagCMUseTreeLVUPTimeItem=tagCMUseTreeLVUPTimeItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseTreeLVUPTimeItem.Cmd,m_NAtagCMUseTreeLVUPTimeItem.SubCmd))] = m_NAtagCMUseTreeLVUPTimeItem #------------------------------------------------------ @@ -19901,6 +22146,101 @@ #------------------------------------------------------ +# 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): -- Gitblit v1.8.0