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