From e41e926bbbd0255acde8b4b62d5558a025b83a02 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 11 六月 2025 17:18:27 +0800 Subject: [PATCH] 10263 【越南】【BT】增加后台执行命令清除本服榜单某个玩家ID数据: ClearBillboardData --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 411 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 409 insertions(+), 2 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index de98383..939ec1a 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -1026,6 +1026,58 @@ #------------------------------------------------------ +# A4 14 查看目标仙盟 #tagCGViewTagFamily + +class tagCGViewTagFamily(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagFamilyID", c_int), # 目标仙盟ID,支持查看跨服仙盟 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x14 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA4 + self.SubCmd = 0x14 + self.TagFamilyID = 0 + return + + def GetLength(self): + return sizeof(tagCGViewTagFamily) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 14 查看目标仙盟 //tagCGViewTagFamily: + Cmd:%s, + SubCmd:%s, + TagFamilyID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagFamilyID + ) + return DumpString + + +m_NAtagCGViewTagFamily=tagCGViewTagFamily() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewTagFamily.Cmd,m_NAtagCGViewTagFamily.SubCmd))] = m_NAtagCGViewTagFamily + + +#------------------------------------------------------ # A9 03 关注BOSS刷新 #tagCGAttentionBoss class tagCGAttentionBoss(Structure): @@ -5089,6 +5141,70 @@ #------------------------------------------------------ +# C0 26 仙盟攻城战查询 #tagCGFamilyGCZQuery + +class tagCGFamilyGCZQuery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("QueryType", c_ubyte), #查询类型:1-成员捐献值;2-进入城池场景;3-退出城池场景;4-进入城池;5-退出城池;6-战报;7-分组仙盟成员伤害; + ("BatType", c_ubyte), #指定战场类型,需要发送的查询类型: 2、4 + ("GroupNum", c_ubyte), #指定分组编号,需要发送的查询类型: 2、4 + ("FamilyID", c_int), #指定仙盟ID或城池ID,查自己盟的可不发,需要发的类型:2、4、6、7 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x26 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x26 + self.QueryType = 0 + self.BatType = 0 + self.GroupNum = 0 + self.FamilyID = 0 + return + + def GetLength(self): + return sizeof(tagCGFamilyGCZQuery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 26 仙盟攻城战查询 //tagCGFamilyGCZQuery: + Cmd:%s, + SubCmd:%s, + QueryType:%d, + BatType:%d, + GroupNum:%d, + FamilyID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.QueryType, + self.BatType, + self.GroupNum, + self.FamilyID + ) + return DumpString + + +m_NAtagCGFamilyGCZQuery=tagCGFamilyGCZQuery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGFamilyGCZQuery.Cmd,m_NAtagCGFamilyGCZQuery.SubCmd))] = m_NAtagCGFamilyGCZQuery + + +#------------------------------------------------------ # C0 03 强制退出跨服状态 #tagCGForceQuitCrossState class tagCGForceQuitCrossState(Structure): @@ -5245,8 +5361,8 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("Type", c_ubyte), #榜单类型 - ("GroupValue1", c_ubyte), # 分组值1 - ("GroupValue2", c_ubyte), # 分组值2,与分组值1组合归为同组榜单数据 + ("GroupValue1", c_int), # 分组值1 + ("GroupValue2", c_int), # 分组值2,与分组值1组合归为同组榜单数据 ("StartIndex", c_int), #查看的起始名次索引, 默认0 ("WatchCnt", c_ubyte), #查看条数,默认20,最大不超过100 ("WatchID", c_int), #查看指定ID名次前后,如玩家ID、家族ID等 @@ -8190,6 +8306,62 @@ m_NAtagCMAddFruitUseLimit=tagCMAddFruitUseLimit() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMAddFruitUseLimit.Cmd,m_NAtagCMAddFruitUseLimit.SubCmd))] = m_NAtagCMAddFruitUseLimit + + +#------------------------------------------------------ +# A3 10 购买商城物品 #tagCMBuyItem + +class tagCMBuyItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BuyItemIndex", c_ushort), #购买的物品索引 + ("BuyCount", c_int), #购买数量 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x10 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA3 + self.SubCmd = 0x10 + self.BuyItemIndex = 0 + self.BuyCount = 0 + return + + def GetLength(self): + return sizeof(tagCMBuyItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 10 购买商城物品 //tagCMBuyItem: + Cmd:%s, + SubCmd:%s, + BuyItemIndex:%d, + BuyCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BuyItemIndex, + self.BuyCount + ) + return DumpString + + +m_NAtagCMBuyItem=tagCMBuyItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyItem.Cmd,m_NAtagCMBuyItem.SubCmd))] = m_NAtagCMBuyItem #------------------------------------------------------ @@ -23362,6 +23534,241 @@ #------------------------------------------------------ +# C1 25 仙盟攻城战攻击 #tagCMFamilyGCZAtk + +class tagCMFamilyGCZAtk(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("AtkType", c_ubyte), #攻击类型: 1-普通单攻;2-技能单攻;3-技能群攻; + ("TagCityID", c_int), #目标城池ID,一般是仙盟ID或者特殊城池ID如修罗城城池,普攻单攻需指定目标,群攻技能发0 + ("TagGuardID", c_int), #目标守卫ID,一般是玩家ID或者特殊守卫ID如修罗城守卫,普攻单攻需指定目标,技能攻击发0 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x25 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x25 + self.AtkType = 0 + self.TagCityID = 0 + self.TagGuardID = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyGCZAtk) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 25 仙盟攻城战攻击 //tagCMFamilyGCZAtk: + Cmd:%s, + SubCmd:%s, + AtkType:%d, + TagCityID:%d, + TagGuardID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.AtkType, + self.TagCityID, + self.TagGuardID + ) + return DumpString + + +m_NAtagCMFamilyGCZAtk=tagCMFamilyGCZAtk() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZAtk.Cmd,m_NAtagCMFamilyGCZAtk.SubCmd))] = m_NAtagCMFamilyGCZAtk + + +#------------------------------------------------------ +# C1 24 仙盟攻城战捐献 #tagCMFamilyGCZContribution + +class tagCMFamilyGCZContribution(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ContributionType", c_ubyte), #捐献类型: 0-低级;1-高级 + ("UseCount", c_int), #物品捐献时使用个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x24 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x24 + self.ContributionType = 0 + self.UseCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyGCZContribution) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 24 仙盟攻城战捐献 //tagCMFamilyGCZContribution: + Cmd:%s, + SubCmd:%s, + ContributionType:%d, + UseCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ContributionType, + self.UseCount + ) + return DumpString + + +m_NAtagCMFamilyGCZContribution=tagCMFamilyGCZContribution() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZContribution.Cmd,m_NAtagCMFamilyGCZContribution.SubCmd))] = m_NAtagCMFamilyGCZContribution + + +#------------------------------------------------------ +# C1 26 仙盟攻城战竞猜 #tagCMFamilyGCZGuess + +class tagCMFamilyGCZGuess(Structure): + Head = tagHead() + SelectCnt = 0 #(BYTE SelectCnt) + SelectFamilyIDList = list() #(vector<DWORD> SelectFamilyIDList)// 竞猜选择的仙盟ID排名顺序 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SelectCnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SelectFamilyIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x26 + self.SelectCnt = 0 + self.SelectFamilyIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.SelectCnt + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SelectCnt) + for i in range(self.SelectCnt): + data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + SelectCnt:%d, + SelectFamilyIDList:%s + '''\ + %( + self.Head.OutputString(), + self.SelectCnt, + "..." + ) + return DumpString + + +m_NAtagCMFamilyGCZGuess=tagCMFamilyGCZGuess() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZGuess.Head.Cmd,m_NAtagCMFamilyGCZGuess.Head.SubCmd))] = m_NAtagCMFamilyGCZGuess + + +#------------------------------------------------------ +# C1 27 仙盟攻城战圣泉抽奖 #tagCMFamilyGCZSQ + +class tagCMFamilyGCZSQ(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GridNum", c_ubyte), # 选中格子编号,1~n + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x27 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x27 + self.GridNum = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyGCZSQ) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 27 仙盟攻城战圣泉抽奖 //tagCMFamilyGCZSQ: + Cmd:%s, + SubCmd:%s, + GridNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GridNum + ) + return DumpString + + +m_NAtagCMFamilyGCZSQ=tagCMFamilyGCZSQ() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyGCZSQ.Cmd,m_NAtagCMFamilyGCZSQ.SubCmd))] = m_NAtagCMFamilyGCZSQ + + +#------------------------------------------------------ # C1 10 幸运云购购买 #tagCMLuckyCloudBuy class tagCMLuckyCloudBuy(Structure): -- Gitblit v1.8.0