From c5731326acc36a3cfc6870ddb51ce2cc86e2cdc5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 09 一月 2025 17:00:16 +0800
Subject: [PATCH] 10361 【越南】【英语】【BT】【砍树】仙匠大会 - 服务端

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py |  428 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 428 insertions(+), 0 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 7484eb3..80940a3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -44354,6 +44354,434 @@
 
 
 #------------------------------------------------------
+# AA 90 炼器跨服活动信息 #tagMCCrossActLianqiInfo
+
+class  tagMCCrossActLianqiItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    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.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCrossActLianqiItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 90 炼器跨服活动信息 //tagMCCrossActLianqiInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCCrossActLianqiBillard(Structure):
+    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+    Count = 0    #(BYTE Count)// 奖励物品数
+    AwardItemList = list()    #(vector<tagMCCrossActLianqiItem> AwardItemList)// 奖励物品列表
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCrossActLianqiItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Rank = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        self.NeedScore = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Rank:%d,
+                                Count:%d,
+                                AwardItemList:%s,
+                                NeedScore:%d
+                                '''\
+                                %(
+                                self.Rank,
+                                self.Count,
+                                "...",
+                                self.NeedScore
+                                )
+        return DumpString
+
+
+class  tagMCCrossActLianqiInfo(Structure):
+    Head = tagHead()
+    ServerInfoLen = 0    #(BYTE ServerInfoLen)
+    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
+    GroupValue1 = 0    #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
+    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    PersonalBillCount = 0    #(BYTE PersonalBillCount)
+    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActLianqiBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x90
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
+        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PersonalBillCount):
+            temPersonalBillboardInfoList = tagMCCrossActLianqiBillard()
+            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
+            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x90
+        self.ServerInfoLen = 0
+        self.ServerIDRangeInfo = ""
+        self.GroupValue1 = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.JoinStartTime = ""
+        self.JoinEndTime = ""
+        self.LimitLV = 0
+        self.PersonalBillCount = 0
+        self.PersonalBillboardInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ServerIDRangeInfo)
+        length += 1
+        length += 10
+        length += 10
+        length += 5
+        length += 5
+        length += 2
+        length += 1
+        for i in range(self.PersonalBillCount):
+            length += self.PersonalBillboardInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
+        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
+        data = CommFunc.WriteBYTE(data, self.GroupValue1)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
+        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
+        for i in range(self.PersonalBillCount):
+            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ServerInfoLen:%d,
+                                ServerIDRangeInfo:%s,
+                                GroupValue1:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                JoinStartTime:%s,
+                                JoinEndTime:%s,
+                                LimitLV:%d,
+                                PersonalBillCount:%d,
+                                PersonalBillboardInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ServerInfoLen,
+                                self.ServerIDRangeInfo,
+                                self.GroupValue1,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.JoinStartTime,
+                                self.JoinEndTime,
+                                self.LimitLV,
+                                self.PersonalBillCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossActLianqiInfo=tagMCCrossActLianqiInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActLianqiInfo.Head.Cmd,m_NAtagMCCrossActLianqiInfo.Head.SubCmd))] = m_NAtagMCCrossActLianqiInfo
+
+
+#------------------------------------------------------
+# AA 91 炼器活动玩家信息 #tagMCActLianqiPlayerInfo
+
+class  tagMCActLianqiTileMove(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Row", c_ubyte),    # 行,0为第1行
+                  ("Col", c_ubyte),    # 列,0为第1列
+                  ("ToRow", c_ubyte),    # 移动到目标行
+                  ("ToCol", c_ubyte),    # 移动到目标列
+                  ]
+
+    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.Row = 0
+        self.Col = 0
+        self.ToRow = 0
+        self.ToCol = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActLianqiTileMove)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 91 炼器活动玩家信息 //tagMCActLianqiPlayerInfo:
+                                Row:%d,
+                                Col:%d,
+                                ToRow:%d,
+                                ToCol:%d
+                                '''\
+                                %(
+                                self.Row,
+                                self.Col,
+                                self.ToRow,
+                                self.ToCol
+                                )
+        return DumpString
+
+
+class  tagMCActLianqiPlayerInfo(Structure):
+    Head = tagHead()
+    Score = 0    #(DWORD Score)// 当前活动积分
+    ScoreHighest = 0    #(DWORD ScoreHighest)// 当前活动最高积分,即上榜积分
+    Energy = 0    #(WORD Energy)// 当前体力
+    EnergyTime = 0    #(DWORD EnergyTime)// 上次恢复体力时间戳,为0时不用处理倒计时
+    LVAwardMax = 0    #(DWORD LVAwardMax)// 已激活的最大合成奖励等级
+    LVAwardState = 0    #(DWORD LVAwardState)// 最大合成等级奖励领取记录,按等级二进制位存储是否已领取
+    UseItemLen = 0    #(BYTE UseItemLen)
+    UseItemCntList = list()    #(vector<WORD> UseItemCntList)// 本局已使用辅助道具次数 [辅助道具1使用次数, ...]
+    GridDataLen = 0    #(BYTE GridDataLen)// 格子数据长度
+    GridData = ""    #(String GridData)// 格子二维行列数据,一定会同步,直接替换,行从上往下排 [[第1行格子1,格子2, ...], ...]
+    OPType = 0    #(BYTE OPType)// 0-无(如初始化,GM等后端直接设置);1-移动;2-使用道具;3-重新开始;如果是因为操作引起的格子数据变化,则在相关操作表现完毕后再展示最新行列数据,否则直接变更
+    MoveCount = 0    #(BYTE MoveCount)
+    MoveList = list()    #(vector<tagMCActLianqiTileMove> MoveList)// 图块移动列表,可能没有数据,有的话先表现移动
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x91
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ScoreHighest,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Energy,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.EnergyTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LVAwardMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LVAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.UseItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.UseItemLen):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.UseItemCntList.append(value)
+        self.GridDataLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GridData,_pos = CommFunc.ReadString(_lpData, _pos,self.GridDataLen)
+        self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoveCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MoveCount):
+            temMoveList = tagMCActLianqiTileMove()
+            _pos = temMoveList.ReadData(_lpData, _pos)
+            self.MoveList.append(temMoveList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x91
+        self.Score = 0
+        self.ScoreHighest = 0
+        self.Energy = 0
+        self.EnergyTime = 0
+        self.LVAwardMax = 0
+        self.LVAwardState = 0
+        self.UseItemLen = 0
+        self.UseItemCntList = list()
+        self.GridDataLen = 0
+        self.GridData = ""
+        self.OPType = 0
+        self.MoveCount = 0
+        self.MoveList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += 2 * self.UseItemLen
+        length += 1
+        length += len(self.GridData)
+        length += 1
+        length += 1
+        for i in range(self.MoveCount):
+            length += self.MoveList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Score)
+        data = CommFunc.WriteDWORD(data, self.ScoreHighest)
+        data = CommFunc.WriteWORD(data, self.Energy)
+        data = CommFunc.WriteDWORD(data, self.EnergyTime)
+        data = CommFunc.WriteDWORD(data, self.LVAwardMax)
+        data = CommFunc.WriteDWORD(data, self.LVAwardState)
+        data = CommFunc.WriteBYTE(data, self.UseItemLen)
+        for i in range(self.UseItemLen):
+            data = CommFunc.WriteWORD(data, self.UseItemCntList[i])
+        data = CommFunc.WriteBYTE(data, self.GridDataLen)
+        data = CommFunc.WriteString(data, self.GridDataLen, self.GridData)
+        data = CommFunc.WriteBYTE(data, self.OPType)
+        data = CommFunc.WriteBYTE(data, self.MoveCount)
+        for i in range(self.MoveCount):
+            data = CommFunc.WriteString(data, self.MoveList[i].GetLength(), self.MoveList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Score:%d,
+                                ScoreHighest:%d,
+                                Energy:%d,
+                                EnergyTime:%d,
+                                LVAwardMax:%d,
+                                LVAwardState:%d,
+                                UseItemLen:%d,
+                                UseItemCntList:%s,
+                                GridDataLen:%d,
+                                GridData:%s,
+                                OPType:%d,
+                                MoveCount:%d,
+                                MoveList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Score,
+                                self.ScoreHighest,
+                                self.Energy,
+                                self.EnergyTime,
+                                self.LVAwardMax,
+                                self.LVAwardState,
+                                self.UseItemLen,
+                                "...",
+                                self.GridDataLen,
+                                self.GridData,
+                                self.OPType,
+                                self.MoveCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActLianqiPlayerInfo=tagMCActLianqiPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLianqiPlayerInfo.Head.Cmd,m_NAtagMCActLianqiPlayerInfo.Head.SubCmd))] = m_NAtagMCActLianqiPlayerInfo
+
+
+#------------------------------------------------------
 # AA 80 仙匣秘境跨服活动信息 #tagMCCrossActXianXiaMJInfo
 
 class  tagMCCrossActXianXiaMJItem(Structure):

--
Gitblit v1.8.0