From 59557612e1f6c0237742f681748920b17f5e0e91 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 11 四月 2025 16:31:10 +0800 Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(增加圣泉抽奖;积分总榜增加轮次积分明细记录;优化活动相关榜单排序规则,支持战斗阶段每分钟统计最新积分情况;优化轮次结算汇总信息;轮次支持升降级;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 208 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 197 insertions(+), 11 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index ec971f8..bc2085b 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -18637,7 +18637,7 @@ GuessTemplateID = 0 #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示 PersonalTemplateID = 0 #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 FamilyTemplateID = 0 #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 - StateError = 0 #(BYTE StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示 + StateError = 0 #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示 FamilyCount = 0 #(BYTE FamilyCount) ActFamilyList = list() #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单 data = None @@ -18662,7 +18662,7 @@ self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.FamilyCount): temActFamilyList = tagGCFamilyGCZActFamily() @@ -18705,7 +18705,7 @@ length += 2 length += 2 length += 2 - length += 1 + length += 4 length += 1 for i in range(self.FamilyCount): length += self.ActFamilyList[i].GetLength() @@ -18726,7 +18726,7 @@ data = CommFunc.WriteWORD(data, self.GuessTemplateID) data = CommFunc.WriteWORD(data, self.PersonalTemplateID) data = CommFunc.WriteWORD(data, self.FamilyTemplateID) - data = CommFunc.WriteBYTE(data, self.StateError) + data = CommFunc.WriteDWORD(data, self.StateError) data = CommFunc.WriteBYTE(data, self.FamilyCount) for i in range(self.FamilyCount): data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer()) @@ -19664,10 +19664,64 @@ return DumpString +class tagGCFamilyGCZCampRound(Structure): + _pack_ = 1 + _fields_ = [ + ("RoundNum", c_ubyte), #轮次编号,从1开始 + ("BatType", c_ubyte), #所在战场类型 + ("GroupNum", c_ubyte), #所在分组编号 + ("Rank", c_ubyte), #本轮排名 + ("Score", c_ushort), #本轮积分,总积分为所有轮次累加 + ("UpdownState", c_ubyte), #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.RoundNum = 0 + self.BatType = 0 + self.GroupNum = 0 + self.Rank = 0 + self.Score = 0 + self.UpdownState = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZCampRound) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo: + RoundNum:%d, + BatType:%d, + GroupNum:%d, + Rank:%d, + Score:%d, + UpdownState:%d + '''\ + %( + self.RoundNum, + self.BatType, + self.GroupNum, + self.Rank, + self.Score, + self.UpdownState + ) + return DumpString + + class tagGCFamilyGCZCampInfo(Structure): Head = tagHead() FamilyID = 0 #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准 - Score = 0 #(WORD Score)//活动总积分,如果不在榜上则读该值 CampLV = 0 #(WORD CampLV)//大本营当前等级 CampExp = 0 #(DWORD CampExp)//大本营当前经验 CityLV = 0 #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样 @@ -19677,6 +19731,8 @@ HPMaxEx = 0 #(DWORD HPMaxEx)//总大生命,整除亿部分 HP = 0 #(DWORD HP)//剩余生命,求余亿部分 HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分 + RoundCnt = 0 #(BYTE RoundCnt) + RoundInfoList = list() #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息 DefMemCnt = 0 #(BYTE DefMemCnt) DefMemList = list() #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格 data = None @@ -19691,7 +19747,6 @@ self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Score,_pos = CommFunc.ReadWORD(_lpData, _pos) self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -19701,6 +19756,11 @@ self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundCnt): + temRoundInfoList = tagGCFamilyGCZCampRound() + _pos = temRoundInfoList.ReadData(_lpData, _pos) + self.RoundInfoList.append(temRoundInfoList) self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.DefMemCnt): temDefMemList = tagGCFamilyGCZCampMem() @@ -19714,7 +19774,6 @@ self.Head.Cmd = 0xC0 self.Head.SubCmd = 0x26 self.FamilyID = 0 - self.Score = 0 self.CampLV = 0 self.CampExp = 0 self.CityLV = 0 @@ -19724,6 +19783,8 @@ self.HPMaxEx = 0 self.HP = 0 self.HPEx = 0 + self.RoundCnt = 0 + self.RoundInfoList = list() self.DefMemCnt = 0 self.DefMemList = list() return @@ -19732,7 +19793,6 @@ length = 0 length += self.Head.GetLength() length += 4 - length += 2 length += 2 length += 4 length += 2 @@ -19743,6 +19803,9 @@ length += 4 length += 4 length += 1 + for i in range(self.RoundCnt): + length += self.RoundInfoList[i].GetLength() + length += 1 for i in range(self.DefMemCnt): length += self.DefMemList[i].GetLength() @@ -19752,7 +19815,6 @@ data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteDWORD(data, self.FamilyID) - data = CommFunc.WriteWORD(data, self.Score) data = CommFunc.WriteWORD(data, self.CampLV) data = CommFunc.WriteDWORD(data, self.CampExp) data = CommFunc.WriteWORD(data, self.CityLV) @@ -19762,6 +19824,9 @@ data = CommFunc.WriteDWORD(data, self.HPMaxEx) data = CommFunc.WriteDWORD(data, self.HP) data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteBYTE(data, self.RoundCnt) + for i in range(self.RoundCnt): + data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer()) data = CommFunc.WriteBYTE(data, self.DefMemCnt) for i in range(self.DefMemCnt): data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer()) @@ -19771,7 +19836,6 @@ DumpString = ''' Head:%s, FamilyID:%d, - Score:%d, CampLV:%d, CampExp:%d, CityLV:%d, @@ -19781,13 +19845,14 @@ HPMaxEx:%d, HP:%d, HPEx:%d, + RoundCnt:%d, + RoundInfoList:%s, DefMemCnt:%d, DefMemList:%s '''\ %( self.Head.OutputString(), self.FamilyID, - self.Score, self.CampLV, self.CampExp, self.CityLV, @@ -19797,6 +19862,8 @@ self.HPMaxEx, self.HP, self.HPEx, + self.RoundCnt, + "...", self.DefMemCnt, "..." ) @@ -59163,6 +59230,125 @@ #------------------------------------------------------ +# C1 11 仙盟攻城战圣泉信息 #tagMCFamilyGCZSQInfo + +class tagMCFamilyGCZSQGrid(Structure): + _pack_ = 1 + _fields_ = [ + ("GridNum", c_ubyte), # 格子编号,1~n + ("ItemID", c_int), # 抽中的物品ID,20亿时为过关标记 + ("ItemCount", c_ushort), # 物品数量 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.GridNum = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyGCZSQGrid) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 11 仙盟攻城战圣泉信息 //tagMCFamilyGCZSQInfo: + GridNum:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.GridNum, + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCFamilyGCZSQInfo(Structure): + Head = tagHead() + SQLayer = 0 #(BYTE SQLayer)// 当前所在圣泉层,从1开始 + SQGirdCnt = 0 #(BYTE SQGirdCnt) + SQGridList = list() #(vector<tagMCFamilyGCZSQGrid> SQGridList)//圣泉当前层已抽格子信息,仅同步全部或变更的格子,前端进行差异更新,层数变更时重置本地记录 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.SQLayer,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SQGirdCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SQGirdCnt): + temSQGridList = tagMCFamilyGCZSQGrid() + _pos = temSQGridList.ReadData(_lpData, _pos) + self.SQGridList.append(temSQGridList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x11 + self.SQLayer = 0 + self.SQGirdCnt = 0 + self.SQGridList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.SQGirdCnt): + length += self.SQGridList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SQLayer) + data = CommFunc.WriteBYTE(data, self.SQGirdCnt) + for i in range(self.SQGirdCnt): + data = CommFunc.WriteString(data, self.SQGridList[i].GetLength(), self.SQGridList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + SQLayer:%d, + SQGirdCnt:%d, + SQGridList:%s + '''\ + %( + self.Head.OutputString(), + self.SQLayer, + self.SQGirdCnt, + "..." + ) + return DumpString + + +m_NAtagMCFamilyGCZSQInfo=tagMCFamilyGCZSQInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZSQInfo.Head.Cmd,m_NAtagMCFamilyGCZSQInfo.Head.SubCmd))] = m_NAtagMCFamilyGCZSQInfo + + +#------------------------------------------------------ # C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo class tagMCLuckyCloudBuyPlayerInfo(Structure): -- Gitblit v1.8.0