From f355e99a5f181ca869bdddf79fec1a27f237d194 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 10 九月 2024 11:13:47 +0800 Subject: [PATCH] 10264 【越南】【砍树】BOSS凭证掉落新增个人BOSS --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 1071 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 1,002 insertions(+), 69 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index bd7ffd0..2f32ce0 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): @@ -712,6 +764,7 @@ Head = tagHead() Name = "" #(char Name[33]) FakeID = 0 #(WORD FakeID)//假仙盟编号 + EmblemID = 0 #(BYTE EmblemID)//选择徽章ID,解锁仙盟等级为1级的均为可选ID data = None def __init__(self): @@ -725,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): @@ -734,6 +788,7 @@ self.Head.SubCmd = 0x04 self.Name = "" self.FakeID = 0 + self.EmblemID = 0 return def GetLength(self): @@ -741,6 +796,7 @@ length += self.Head.GetLength() length += 33 length += 2 + length += 1 return length @@ -749,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 @@ -1085,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): @@ -1105,7 +1164,7 @@ self.Type = 0 self.StartIndex = 0 self.WatchCnt = 0 - self.IsWatchSelf = 0 + self.WatchID = 0 return def GetLength(self): @@ -1121,7 +1180,7 @@ Type:%d, StartIndex:%d, WatchCnt:%d, - IsWatchSelf:%d + WatchID:%d '''\ %( self.Cmd, @@ -1129,7 +1188,7 @@ self.Type, self.StartIndex, self.WatchCnt, - self.IsWatchSelf + self.WatchID ) return DumpString @@ -1249,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 #------------------------------------------------------ @@ -1569,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 #------------------------------------------------------ @@ -2379,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 #------------------------------------------------------ @@ -3535,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): @@ -3599,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): @@ -3660,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 #------------------------------------------------------ @@ -3768,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 #------------------------------------------------------ @@ -4613,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): @@ -4632,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): @@ -4646,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 @@ -5092,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): @@ -5182,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 #------------------------------------------------------ @@ -18636,19 +19338,99 @@ # 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 25 新聚魂操作 #tagCMGatherTheSoulOP + +class tagCMGatherTheSoulOP(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("ItemIndex", c_ubyte), # 物品在砍树背包的索引 - ("OPType", c_ubyte), # 操作类型:1-替换;2-分解 - ("AutoDecompose", c_ubyte), # 替换后是否自动分解原装备:0否1是,仅替换操作下有用 + ("OpType", c_ubyte), # 0-激活升级; 1-穿戴替换; 2-卸下 + ("SoulID", c_int), # 聚魂ID;当操作升级时,如果为0代表一键升级所有可升级的 ] def __init__(self): self.Clear() self.Cmd = 0xB2 - self.SubCmd = 0x22 + self.SubCmd = 0x25 return def ReadData(self, stringData, _pos=0, _len=0): @@ -18658,38 +19440,35 @@ def Clear(self): self.Cmd = 0xB2 - self.SubCmd = 0x22 - self.ItemIndex = 0 - self.OPType = 0 - self.AutoDecompose = 0 + self.SubCmd = 0x25 + self.OpType = 0 + self.SoulID = 0 return def GetLength(self): - return sizeof(tagCMCutTreeEquipOP) + return sizeof(tagCMGatherTheSoulOP) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// B2 22 砍树装备操作 //tagCMCutTreeEquipOP: + DumpString = '''// B2 25 新聚魂操作 //tagCMGatherTheSoulOP: Cmd:%s, SubCmd:%s, - ItemIndex:%d, - OPType:%d, - AutoDecompose:%d + OpType:%d, + SoulID:%d '''\ %( self.Cmd, self.SubCmd, - self.ItemIndex, - self.OPType, - self.AutoDecompose + self.OpType, + self.SoulID ) return DumpString -m_NAtagCMCutTreeEquipOP=tagCMCutTreeEquipOP() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCutTreeEquipOP.Cmd,m_NAtagCMCutTreeEquipOP.SubCmd))] = m_NAtagCMCutTreeEquipOP +m_NAtagCMGatherTheSoulOP=tagCMGatherTheSoulOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGatherTheSoulOP.Cmd,m_NAtagCMGatherTheSoulOP.SubCmd))] = m_NAtagCMGatherTheSoulOP #------------------------------------------------------ @@ -18855,18 +19634,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): @@ -18875,33 +19651,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 #------------------------------------------------------ @@ -19404,6 +20246,62 @@ 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 #------------------------------------------------------ @@ -20870,60 +21768,95 @@ # B4 10 回合制战斗 #tagCMTurnFight class tagCMTurnFight(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), # 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) - ("FuncLineID", c_ushort), - ("PlayerID", c_int), # 对应玩家ID,可为0,某些功能可能有用,如竞技场 - ] + 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.Cmd = 0xB4 - self.SubCmd = 0x10 + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x10 return - def ReadData(self, stringData, _pos=0, _len=0): + def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() + _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.Cmd = 0xB4 - self.SubCmd = 0x10 + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x10 self.MapID = 0 self.FuncLineID = 0 - self.PlayerID = 0 + self.TagType = 0 + self.TagID = 0 + self.ValueCount = 0 + self.ValueList = list() return def GetLength(self): - return sizeof(tagCMTurnFight) + 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): - return string_at(addressof(self), self.GetLength()) + 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 = '''// B4 10 回合制战斗 //tagCMTurnFight: - Cmd:%s, - SubCmd:%s, + DumpString = ''' + Head:%s, MapID:%d, FuncLineID:%d, - PlayerID:%d + TagType:%d, + TagID:%d, + ValueCount:%d, + ValueList:%s '''\ %( - self.Cmd, - self.SubCmd, + self.Head.OutputString(), self.MapID, self.FuncLineID, - self.PlayerID + self.TagType, + self.TagID, + self.ValueCount, + "..." ) return DumpString m_NAtagCMTurnFight=tagCMTurnFight() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTurnFight.Cmd,m_NAtagCMTurnFight.SubCmd))] = m_NAtagCMTurnFight +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTurnFight.Head.Cmd,m_NAtagCMTurnFight.Head.SubCmd))] = m_NAtagCMTurnFight #------------------------------------------------------ -- Gitblit v1.8.0