From d629972d3f3c5d281d8340beff2884bf30edfa4e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 14 十二月 2023 10:27:58 +0800
Subject: [PATCH] 10014 【主干】【港台】【砍树】多个直购一次打包购买功能(增加免费领取礼包等级限制)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py |  329 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 301 insertions(+), 28 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 71137b8..bcddf2d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -16446,6 +16446,9 @@
     OrderLen = 0    #(BYTE OrderLen)
     OrderID = ""    #(String OrderID)// 订单id
     Coin = 0    #(DWORD Coin)// 充值的点卷
+    RecordID = 0    #(BYTE RecordID)// ctgID
+    OrderInfoLen = 0    #(BYTE OrderInfoLen)
+    OrderInfo = ""    #(String OrderInfo)
     data = None
 
     def __init__(self):
@@ -16460,6 +16463,9 @@
         self.OrderLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.OrderID,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderLen)
         self.Coin,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RecordID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen)
         return _pos
 
     def Clear(self):
@@ -16470,6 +16476,9 @@
         self.OrderLen = 0
         self.OrderID = ""
         self.Coin = 0
+        self.RecordID = 0
+        self.OrderInfoLen = 0
+        self.OrderInfo = ""
         return
 
     def GetLength(self):
@@ -16478,6 +16487,9 @@
         length += 1
         length += len(self.OrderID)
         length += 4
+        length += 1
+        length += 1
+        length += len(self.OrderInfo)
 
         return length
 
@@ -16487,6 +16499,9 @@
         data = CommFunc.WriteBYTE(data, self.OrderLen)
         data = CommFunc.WriteString(data, self.OrderLen, self.OrderID)
         data = CommFunc.WriteDWORD(data, self.Coin)
+        data = CommFunc.WriteBYTE(data, self.RecordID)
+        data = CommFunc.WriteBYTE(data, self.OrderInfoLen)
+        data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo)
         return data
 
     def OutputString(self):
@@ -16494,13 +16509,19 @@
                                 Head:%s,
                                 OrderLen:%d,
                                 OrderID:%s,
-                                Coin:%d
+                                Coin:%d,
+                                RecordID:%d,
+                                OrderInfoLen:%d,
+                                OrderInfo:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.OrderLen,
                                 self.OrderID,
-                                self.Coin
+                                self.Coin,
+                                self.RecordID,
+                                self.OrderInfoLen,
+                                self.OrderInfo
                                 )
         return DumpString
 
@@ -34216,7 +34237,8 @@
 
 
 class  tagMCActSingleRechargeAward(Structure):
-    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引
+    AwardCountMax = 0    #(WORD AwardCountMax)// 最大领奖次数
     SingleRechargeValue = 0    #(DWORD SingleRechargeValue)// 单笔所需充值额度
     AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
     AwardItem = list()    #(vector<tagMCActSingleRechargeAwardItem> AwardItem)// 奖励物品信息
@@ -34229,6 +34251,7 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.SingleRechargeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.AwardItemCount):
@@ -34239,6 +34262,7 @@
 
     def Clear(self):
         self.AwardIndex = 0
+        self.AwardCountMax = 0
         self.SingleRechargeValue = 0
         self.AwardItemCount = 0
         self.AwardItem = list()
@@ -34247,6 +34271,7 @@
     def GetLength(self):
         length = 0
         length += 1
+        length += 2
         length += 4
         length += 1
         for i in range(self.AwardItemCount):
@@ -34257,6 +34282,7 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteWORD(data, self.AwardCountMax)
         data = CommFunc.WriteDWORD(data, self.SingleRechargeValue)
         data = CommFunc.WriteBYTE(data, self.AwardItemCount)
         for i in range(self.AwardItemCount):
@@ -34266,12 +34292,14 @@
     def OutputString(self):
         DumpString = '''
                                 AwardIndex:%d,
+                                AwardCountMax:%d,
                                 SingleRechargeValue:%d,
                                 AwardItemCount:%d,
                                 AwardItem:%s
                                 '''\
                                 %(
                                 self.AwardIndex,
+                                self.AwardCountMax,
                                 self.SingleRechargeValue,
                                 self.AwardItemCount,
                                 "..."
@@ -34390,20 +34418,16 @@
 #------------------------------------------------------
 # AA 51 单笔累充活动玩家信息 #tagMCActSingleRechargePlayerInfo
 
-class  tagMCActSingleRechargePlayerInfo(Structure):
+class  tagMCActSingleRechargePlayerAward(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ActNum", c_ubyte),    #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
-                  ("CanAwardValue", c_int),    #可否领奖记录,按奖励索引二进制位存储是否可领取
-                  ("AwardRecord", c_int),    #奖励领奖记录,按奖励索引二进制位存储是否已领取
+                  ("AwardIndex", c_ubyte),    # 奖励索引
+                  ("CanGetCount", c_ushort),    # 可领奖次数
+                  ("GetCount", c_ushort),    # 已领奖次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xAA
-        self.SubCmd = 0x51
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -34412,39 +34436,102 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xAA
-        self.SubCmd = 0x51
-        self.ActNum = 0
-        self.CanAwardValue = 0
-        self.AwardRecord = 0
+        self.AwardIndex = 0
+        self.CanGetCount = 0
+        self.GetCount = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCActSingleRechargePlayerInfo)
+        return sizeof(tagMCActSingleRechargePlayerAward)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// AA 51 单笔累充活动玩家信息 //tagMCActSingleRechargePlayerInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ActNum:%d,
-                                CanAwardValue:%d,
-                                AwardRecord:%d
+                                AwardIndex:%d,
+                                CanGetCount:%d,
+                                GetCount:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.AwardIndex,
+                                self.CanGetCount,
+                                self.GetCount
+                                )
+        return DumpString
+
+
+class  tagMCActSingleRechargePlayerInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
+    RecordCount = 0    #(BYTE RecordCount)
+    AwardRecordList = list()    #(vector<tagMCActSingleRechargePlayerAward> AwardRecordList)// 领奖次数记录列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x51
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temAwardRecordList = tagMCActSingleRechargePlayerAward()
+            _pos = temAwardRecordList.ReadData(_lpData, _pos)
+            self.AwardRecordList.append(temAwardRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x51
+        self.ActNum = 0
+        self.RecordCount = 0
+        self.AwardRecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.AwardRecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.AwardRecordList[i].GetLength(), self.AwardRecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                RecordCount:%d,
+                                AwardRecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
                                 self.ActNum,
-                                self.CanAwardValue,
-                                self.AwardRecord
+                                self.RecordCount,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCActSingleRechargePlayerInfo=tagMCActSingleRechargePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Cmd,m_NAtagMCActSingleRechargePlayerInfo.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Head.Cmd,m_NAtagMCActSingleRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo
 
 
 #------------------------------------------------------
@@ -36982,6 +37069,66 @@
 
 
 #------------------------------------------------------
+# AA 03 每日打包直购礼包 #tagMCDailyPackBuyGiftInfo
+
+class  tagMCDailyPackBuyGiftInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PackBuyTime", c_int),    # 打包购买的时间戳,如果有该值,代表已经一次性打包购买了,可根据次时间戳算出当前是第几天
+                  ("BuyStateToday", c_int),    # 今日礼包购买状态,按礼包索引二进制位计算代表是否已购买,仅非打包购买状态下有用
+                  ("AwardState", c_int),    # 今日礼包领奖状态,按礼包索引二进制位计算代表是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x03
+        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 = 0xAA
+        self.SubCmd = 0x03
+        self.PackBuyTime = 0
+        self.BuyStateToday = 0
+        self.AwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCDailyPackBuyGiftInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 03 每日打包直购礼包 //tagMCDailyPackBuyGiftInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PackBuyTime:%d,
+                                BuyStateToday:%d,
+                                AwardState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PackBuyTime,
+                                self.BuyStateToday,
+                                self.AwardState
+                                )
+        return DumpString
+
+
+m_NAtagMCDailyPackBuyGiftInfo=tagMCDailyPackBuyGiftInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyPackBuyGiftInfo.Cmd,m_NAtagMCDailyPackBuyGiftInfo.SubCmd))] = m_NAtagMCDailyPackBuyGiftInfo
+
+
+#------------------------------------------------------
 # AA 24 每日免费直购礼包信息 #tagMCDayFreeGoldGiftState
 
 class  tagMCDayFreeGoldGiftState(Structure):
@@ -37563,7 +37710,7 @@
     _pack_ = 1
     _fields_ = [
                   ("AwardIndex", c_ubyte),    #游历奖励索引
-                  ("GetAwardCount", c_ubyte),    #已领取次数;前端判断是否可领取: 总游历值 >=  (已领取次数 + 1)  * 单次所需游历值
+                  ("GetAwardCount", c_int),    #已领取次数;前端判断是否可领取: 总游历值 >=  (已领取次数 + 1)  * 单次所需游历值
                   ]
 
     def __init__(self):
@@ -43678,6 +43825,132 @@
 
 
 #------------------------------------------------------
+# B1 20 战令信息 #tagMCZhanlingInfo
+
+class  tagMCZhanling(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NeedValue", c_int),    # 奖励所需值
+                  ("FreeRewardState", c_ubyte),    # 免费奖励是否已领取
+                  ("ZLRewardState", 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.NeedValue = 0
+        self.FreeRewardState = 0
+        self.ZLRewardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCZhanling)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo:
+                                NeedValue:%d,
+                                FreeRewardState:%d,
+                                ZLRewardState:%d
+                                '''\
+                                %(
+                                self.NeedValue,
+                                self.FreeRewardState,
+                                self.ZLRewardState
+                                )
+        return DumpString
+
+
+class  tagMCZhanlingInfo(Structure):
+    Head = tagHead()
+    ZhanlingType = 0    #(BYTE ZhanlingType)// 战令类型
+    IsActivite = 0    #(BYTE IsActivite)// 是否已激活
+    RewardCount = 0    #(WORD RewardCount)
+    RewardList = list()    #(vector<tagMCZhanling> RewardList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.RewardCount):
+            temRewardList = tagMCZhanling()
+            _pos = temRewardList.ReadData(_lpData, _pos)
+            self.RewardList.append(temRewardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x20
+        self.ZhanlingType = 0
+        self.IsActivite = 0
+        self.RewardCount = 0
+        self.RewardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 2
+        for i in range(self.RewardCount):
+            length += self.RewardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZhanlingType)
+        data = CommFunc.WriteBYTE(data, self.IsActivite)
+        data = CommFunc.WriteWORD(data, self.RewardCount)
+        for i in range(self.RewardCount):
+            data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZhanlingType:%d,
+                                IsActivite:%d,
+                                RewardCount:%d,
+                                RewardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZhanlingType,
+                                self.IsActivite,
+                                self.RewardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCZhanlingInfo=tagMCZhanlingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhanlingInfo.Head.Cmd,m_NAtagMCZhanlingInfo.Head.SubCmd))] = m_NAtagMCZhanlingInfo
+
+
+#------------------------------------------------------
 # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
 
 class  tagMCAddXianyuanCoinMsg(Structure):

--
Gitblit v1.8.0