From f6a4dfb5b00b4a2ff652ac2a1669904a267a5830 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 06 五月 2021 16:55:27 +0800
Subject: [PATCH] 8721 【主干】【BT2】【后端】H.活动-合服庆典(转盘 同步主干冲突)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py |  556 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 534 insertions(+), 22 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 4eea8de..8f6fbc3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -1272,7 +1272,8 @@
 # A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo
 
 class  tagFGrabRedPacketInfo(Structure):
-    Name = ""    #(char Name[33])//名字
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)//名字
     PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
     MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
     data = None
@@ -1283,12 +1284,14 @@
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
+        self.NameLen = 0
         self.Name = ""
         self.PlayeJob = 0
         self.MoneyNum = 0
@@ -1296,7 +1299,8 @@
 
     def GetLength(self):
         length = 0
-        length += 33
+        length += 1
+        length += len(self.Name)
         length += 1
         length += 4
 
@@ -1304,18 +1308,21 @@
 
     def GetBuffer(self):
         data = ''
-        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteBYTE(data, self.PlayeJob)
         data = CommFunc.WriteDWORD(data, self.MoneyNum)
         return data
 
     def OutputString(self):
         DumpString = '''
+                                NameLen:%d,
                                 Name:%s,
                                 PlayeJob:%d,
                                 MoneyNum:%d
                                 '''\
                                 %(
+                                self.NameLen,
                                 self.Name,
                                 self.PlayeJob,
                                 self.MoneyNum
@@ -1402,7 +1409,8 @@
 class  tagFRedPacketInfo(Structure):
     RedPacketID = 0    #(DWORD RedPacketID)//红包唯一ID
     PlayerID = 0    #(DWORD PlayerID)//玩家ID
-    Name = ""    #(char Name[33])//玩家名字
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)//玩家名字
     Time = 0    #(DWORD Time)//时间
     PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
     MoneyType = 0    #(BYTE MoneyType)//金钱类型
@@ -1410,7 +1418,9 @@
     GetWay = 0    #(BYTE GetWay)//获得途径
     PacketCnt = 0    #(BYTE PacketCnt)//可抢个数
     State = 0    #(BYTE State)//0未发,1未领取,2已领取,3全部领完
-    Wish = ""    #(char Wish[33])//祝福语
+    WishLen = 0    #(BYTE WishLen)
+    Wish = ""    #(String Wish)//祝福语
+    IsAnonymous = 0    #(BYTE IsAnonymous)//是否匿名
     data = None
 
     def __init__(self):
@@ -1421,7 +1431,8 @@
         self.Clear()
         self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -1429,12 +1440,15 @@
         self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen)
+        self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
         self.RedPacketID = 0
         self.PlayerID = 0
+        self.NameLen = 0
         self.Name = ""
         self.Time = 0
         self.PlayeJob = 0
@@ -1443,14 +1457,17 @@
         self.GetWay = 0
         self.PacketCnt = 0
         self.State = 0
+        self.WishLen = 0
         self.Wish = ""
+        self.IsAnonymous = 0
         return
 
     def GetLength(self):
         length = 0
         length += 4
         length += 4
-        length += 33
+        length += 1
+        length += len(self.Name)
         length += 4
         length += 1
         length += 1
@@ -1458,7 +1475,9 @@
         length += 1
         length += 1
         length += 1
-        length += 33
+        length += 1
+        length += len(self.Wish)
+        length += 1
 
         return length
 
@@ -1466,7 +1485,8 @@
         data = ''
         data = CommFunc.WriteDWORD(data, self.RedPacketID)
         data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteDWORD(data, self.Time)
         data = CommFunc.WriteBYTE(data, self.PlayeJob)
         data = CommFunc.WriteBYTE(data, self.MoneyType)
@@ -1474,13 +1494,16 @@
         data = CommFunc.WriteBYTE(data, self.GetWay)
         data = CommFunc.WriteBYTE(data, self.PacketCnt)
         data = CommFunc.WriteBYTE(data, self.State)
-        data = CommFunc.WriteString(data, 33, self.Wish)
+        data = CommFunc.WriteBYTE(data, self.WishLen)
+        data = CommFunc.WriteString(data, self.WishLen, self.Wish)
+        data = CommFunc.WriteBYTE(data, self.IsAnonymous)
         return data
 
     def OutputString(self):
         DumpString = '''
                                 RedPacketID:%d,
                                 PlayerID:%d,
+                                NameLen:%d,
                                 Name:%s,
                                 Time:%d,
                                 PlayeJob:%d,
@@ -1489,11 +1512,14 @@
                                 GetWay:%d,
                                 PacketCnt:%d,
                                 State:%d,
-                                Wish:%s
+                                WishLen:%d,
+                                Wish:%s,
+                                IsAnonymous:%d
                                 '''\
                                 %(
                                 self.RedPacketID,
                                 self.PlayerID,
+                                self.NameLen,
                                 self.Name,
                                 self.Time,
                                 self.PlayeJob,
@@ -1502,7 +1528,9 @@
                                 self.GetWay,
                                 self.PacketCnt,
                                 self.State,
-                                self.Wish
+                                self.WishLen,
+                                self.Wish,
+                                self.IsAnonymous
                                 )
         return DumpString
 
@@ -20843,6 +20871,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("HasSendGold", c_int),    # 已用额度
+                  ("ServerGrabCnt", c_int),    # 全服红包已抢次数
                   ]
 
     def __init__(self):
@@ -20860,6 +20889,7 @@
         self.Cmd = 0xA5
         self.SubCmd = 0x05
         self.HasSendGold = 0
+        self.ServerGrabCnt = 0
         return
 
     def GetLength(self):
@@ -20872,12 +20902,14 @@
         DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                HasSendGold:%d
+                                HasSendGold:%d,
+                                ServerGrabCnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.HasSendGold
+                                self.HasSendGold,
+                                self.ServerGrabCnt
                                 )
         return DumpString
 
@@ -26073,11 +26105,12 @@
 
 class  tagMCActSingleRechargeInfo(Structure):
     Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)//活动编号
+    ActNum = 0    #(BYTE ActNum)// 活动编号
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
     LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AwardRuleType = 0    #(BYTE AwardRuleType)// 领奖规则类型 0-向下兼容;1-匹配最高档;2-精确匹配对应档次
     AwardCount = 0    #(BYTE AwardCount)// 奖励档数
     AwardInfo = list()    #(vector<tagMCActSingleRechargeAward> AwardInfo)// 奖励档信息
     data = None
@@ -26096,6 +26129,7 @@
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardRuleType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.AwardCount):
             temAwardInfo = tagMCActSingleRechargeAward()
@@ -26113,6 +26147,7 @@
         self.EndtDate = ""
         self.IsDayReset = 0
         self.LimitLV = 0
+        self.AwardRuleType = 0
         self.AwardCount = 0
         self.AwardInfo = list()
         return
@@ -26125,6 +26160,7 @@
         length += 10
         length += 1
         length += 2
+        length += 1
         length += 1
         for i in range(self.AwardCount):
             length += self.AwardInfo[i].GetLength()
@@ -26139,6 +26175,7 @@
         data = CommFunc.WriteString(data, 10, self.EndtDate)
         data = CommFunc.WriteBYTE(data, self.IsDayReset)
         data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.AwardRuleType)
         data = CommFunc.WriteBYTE(data, self.AwardCount)
         for i in range(self.AwardCount):
             data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
@@ -26152,6 +26189,7 @@
                                 EndtDate:%s,
                                 IsDayReset:%d,
                                 LimitLV:%d,
+                                AwardRuleType:%d,
                                 AwardCount:%d,
                                 AwardInfo:%s
                                 '''\
@@ -26162,6 +26200,7 @@
                                 self.EndtDate,
                                 self.IsDayReset,
                                 self.LimitLV,
+                                self.AwardRuleType,
                                 self.AwardCount,
                                 "..."
                                 )
@@ -26181,7 +26220,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("ActNum", c_ubyte),    #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
-                  ("HightestSingleRecharge", c_int),    # 最高单笔充值额度
+                  ("CanAwardValue", c_int),    #可否领奖记录,按奖励索引二进制位存储是否可领取
                   ("AwardRecord", c_int),    #奖励领奖记录,按奖励索引二进制位存储是否已领取
                   ]
 
@@ -26200,7 +26239,7 @@
         self.Cmd = 0xAA
         self.SubCmd = 0x51
         self.ActNum = 0
-        self.HightestSingleRecharge = 0
+        self.CanAwardValue = 0
         self.AwardRecord = 0
         return
 
@@ -26215,14 +26254,14 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 ActNum:%d,
-                                HightestSingleRecharge:%d,
+                                CanAwardValue:%d,
                                 AwardRecord:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.ActNum,
-                                self.HightestSingleRecharge,
+                                self.CanAwardValue,
                                 self.AwardRecord
                                 )
         return DumpString
@@ -26491,6 +26530,315 @@
 
 m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo
+
+
+#------------------------------------------------------
+# AA 52 转盘活动信息 #tagMCActTurntableInfo
+
+class  tagMCActTurntableItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemNum", c_ubyte),    #物品编号 1~n;注意转盘已确定物品编号 与 极品终极物品待选择库编号可能相同,但并不代表同一物品
+                  ("ItemLibType", c_ubyte),    #物品库类型;1-常规,2-极品,3-终极
+                  ("ItemID", c_int),    
+                  ("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.ItemNum = 0
+        self.ItemLibType = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActTurntableItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 52 转盘活动信息 //tagMCActTurntableInfo:
+                                ItemNum:%d,
+                                ItemLibType:%d,
+                                ItemID:%d,
+                                ItemCount:%d
+                                '''\
+                                %(
+                                self.ItemNum,
+                                self.ItemLibType,
+                                self.ItemID,
+                                self.ItemCount
+                                )
+        return DumpString
+
+
+class  tagMCActTurntableInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    CTGPrizeCount = 0    #(BYTE CTGPrizeCount)
+    CTGPrizeList = list()    #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...]
+    UseGoldPrizeCount = 0    #(BYTE UseGoldPrizeCount)
+    UseGoldPrizeList = list()    #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第1次所需累计消费仙玉, 第2次, ...]
+    TurnItemCount = 0    #(BYTE TurnItemCount)
+    TurnItemList = list()    #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘;
+    GoodItemCount = 0    #(BYTE GoodItemCount)
+    GoodItemList = list()    #(vector<tagMCActTurntableItem> GoodItemList)// 极品物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
+    GoodItemCanChooseCount = 0    #(BYTE GoodItemCanChooseCount)// 极品物品可选择个数
+    SuperItemCount = 0    #(BYTE SuperItemCount)
+    SuperItemList = list()    #(vector<tagMCActTurntableItem> SuperItemList)// 终极物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
+    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 终极物品可选择个数
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x52
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.CTGPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CTGPrizeCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.CTGPrizeList.append(value)
+        self.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.UseGoldPrizeCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.UseGoldPrizeList.append(value)
+        self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TurnItemCount):
+            temTurnItemList = tagMCActTurntableItem()
+            _pos = temTurnItemList.ReadData(_lpData, _pos)
+            self.TurnItemList.append(temTurnItemList)
+        self.GoodItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GoodItemCount):
+            temGoodItemList = tagMCActTurntableItem()
+            _pos = temGoodItemList.ReadData(_lpData, _pos)
+            self.GoodItemList.append(temGoodItemList)
+        self.GoodItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SuperItemCount):
+            temSuperItemList = tagMCActTurntableItem()
+            _pos = temSuperItemList.ReadData(_lpData, _pos)
+            self.SuperItemList.append(temSuperItemList)
+        self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x52
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.CTGPrizeCount = 0
+        self.CTGPrizeList = list()
+        self.UseGoldPrizeCount = 0
+        self.UseGoldPrizeList = list()
+        self.TurnItemCount = 0
+        self.TurnItemList = list()
+        self.GoodItemCount = 0
+        self.GoodItemList = list()
+        self.GoodItemCanChooseCount = 0
+        self.SuperItemCount = 0
+        self.SuperItemList = list()
+        self.SuperItemCanChooseCount = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        length += 4 * self.CTGPrizeCount
+        length += 1
+        length += 4 * self.UseGoldPrizeCount
+        length += 1
+        for i in range(self.TurnItemCount):
+            length += self.TurnItemList[i].GetLength()
+        length += 1
+        for i in range(self.GoodItemCount):
+            length += self.GoodItemList[i].GetLength()
+        length += 1
+        length += 1
+        for i in range(self.SuperItemCount):
+            length += self.SuperItemList[i].GetLength()
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.CTGPrizeCount)
+        for i in range(self.CTGPrizeCount):
+            data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i])
+        data = CommFunc.WriteBYTE(data, self.UseGoldPrizeCount)
+        for i in range(self.UseGoldPrizeCount):
+            data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[i])
+        data = CommFunc.WriteBYTE(data, self.TurnItemCount)
+        for i in range(self.TurnItemCount):
+            data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.GoodItemCount)
+        for i in range(self.GoodItemCount):
+            data = CommFunc.WriteString(data, self.GoodItemList[i].GetLength(), self.GoodItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.GoodItemCanChooseCount)
+        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+        for i in range(self.SuperItemCount):
+            data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                CTGPrizeCount:%d,
+                                CTGPrizeList:%s,
+                                UseGoldPrizeCount:%d,
+                                UseGoldPrizeList:%s,
+                                TurnItemCount:%d,
+                                TurnItemList:%s,
+                                GoodItemCount:%d,
+                                GoodItemList:%s,
+                                GoodItemCanChooseCount:%d,
+                                SuperItemCount:%d,
+                                SuperItemList:%s,
+                                SuperItemCanChooseCount:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.CTGPrizeCount,
+                                "...",
+                                self.UseGoldPrizeCount,
+                                "...",
+                                self.TurnItemCount,
+                                "...",
+                                self.GoodItemCount,
+                                "...",
+                                self.GoodItemCanChooseCount,
+                                self.SuperItemCount,
+                                "...",
+                                self.SuperItemCanChooseCount
+                                )
+        return DumpString
+
+
+m_NAtagMCActTurntableInfo=tagMCActTurntableInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntableInfo.Head.Cmd,m_NAtagMCActTurntableInfo.Head.SubCmd))] = m_NAtagMCActTurntableInfo
+
+
+#------------------------------------------------------
+# AA 53 转盘活动玩家信息 #tagMCActTurntablePlayerInfo
+
+class  tagMCActTurntablePlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ("CanUseCount", c_ubyte),    #可转盘次数
+                  ("CTGTotal", c_int),    #累计充值额度
+                  ("UseGoldTotal", c_int),    #累计消费仙玉额度
+                  ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
+                  ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x53
+        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 = 0x53
+        self.ActNum = 0
+        self.CanUseCount = 0
+        self.CTGTotal = 0
+        self.UseGoldTotal = 0
+        self.TurnItemState = 0
+        self.GetItemNum = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActTurntablePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 53 转盘活动玩家信息 //tagMCActTurntablePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                CanUseCount:%d,
+                                CTGTotal:%d,
+                                UseGoldTotal:%d,
+                                TurnItemState:%d,
+                                GetItemNum:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.CanUseCount,
+                                self.CTGTotal,
+                                self.UseGoldTotal,
+                                self.TurnItemState,
+                                self.GetItemNum
+                                )
+        return DumpString
+
+
+m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo
 
 
 #------------------------------------------------------
@@ -31200,6 +31548,58 @@
 
 
 #------------------------------------------------------
+# AA 04 创角在线充值特惠信息 #tagMCOnlineRechargeTH
+
+class  tagMCOnlineRechargeTH(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("AwardState", c_ubyte),    #是否已领取奖励
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x04
+        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 = 0x04
+        self.AwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCOnlineRechargeTH)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 04 创角在线充值特惠信息 //tagMCOnlineRechargeTH:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                AwardState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.AwardState
+                                )
+        return DumpString
+
+
+m_NAtagMCOnlineRechargeTH=tagMCOnlineRechargeTH()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlineRechargeTH.Cmd,m_NAtagMCOnlineRechargeTH.SubCmd))] = m_NAtagMCOnlineRechargeTH
+
+
+#------------------------------------------------------
 # AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
 
 class  tagMCRechargePrizeInfo(Structure):
@@ -34107,6 +34507,118 @@
 
 
 #------------------------------------------------------
+# B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList
+
+class  tagMCFuncSysPrivilegeInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("FuncSysID", c_ubyte),    # 功能系统ID
+                  ("ActivateTime", c_int),    # 激活时间戳
+                  ("AwardState", c_int),    # 领奖状态,按天对应二进制位计算是否领奖
+                  ]
+
+    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.FuncSysID = 0
+        self.ActivateTime = 0
+        self.AwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFuncSysPrivilegeInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 11 功能系统特权信息 //tagMCFuncSysPrivilegeInfoList:
+                                FuncSysID:%d,
+                                ActivateTime:%d,
+                                AwardState:%d
+                                '''\
+                                %(
+                                self.FuncSysID,
+                                self.ActivateTime,
+                                self.AwardState
+                                )
+        return DumpString
+
+
+class  tagMCFuncSysPrivilegeInfoList(Structure):
+    Head = tagHead()
+    PrivilegeCount = 0    #(BYTE PrivilegeCount)// 特权个数
+    PrivilegeInfoList = list()    #(vector<tagMCFuncSysPrivilegeInfo> PrivilegeInfoList)// 特权信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PrivilegeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PrivilegeCount):
+            temPrivilegeInfoList = tagMCFuncSysPrivilegeInfo()
+            _pos = temPrivilegeInfoList.ReadData(_lpData, _pos)
+            self.PrivilegeInfoList.append(temPrivilegeInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x11
+        self.PrivilegeCount = 0
+        self.PrivilegeInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.PrivilegeCount):
+            length += self.PrivilegeInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.PrivilegeCount)
+        for i in range(self.PrivilegeCount):
+            data = CommFunc.WriteString(data, self.PrivilegeInfoList[i].GetLength(), self.PrivilegeInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PrivilegeCount:%d,
+                                PrivilegeInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PrivilegeCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList
+
+
+#------------------------------------------------------
 # B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove
 
 class  tagMCNotifyPlayerMove(Structure):

--
Gitblit v1.8.0