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