From b3c6d36f5ae851f09a3c2e73494ff19956b06fb0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 11 四月 2025 16:56:14 +0800 Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(跨服仙盟支持;后台查询区服仙盟支持;活动时间流程支持;攻城战主活动功能完整流程:公示、分组、战备、战斗、榜单、竞猜、领奖等;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 251 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 249 insertions(+), 2 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 2163321..dec4787 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -5089,6 +5089,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 +5309,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等 @@ -23599,6 +23663,189 @@ #------------------------------------------------------ +# 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 10 幸运云购购买 #tagCMLuckyCloudBuy class tagCMLuckyCloudBuy(Structure): -- Gitblit v1.8.0