From 562f3491c2f87a55fe333d855cd5737223562731 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 25 六月 2021 16:13:47 +0800
Subject: [PATCH] 8921 【主干】【BT2】【后端】H.活动-节日活动-垃圾分类(修复仙匣秘境没有同步大奖已抽次数bug)

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

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 2a5ea16..8f401d7 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -15427,6 +15427,87 @@
 
 
 #------------------------------------------------------
+# A3 C4 装备神装拆解结果 #tagMCEquipDecomposeRet
+
+class  tagMCEquipDecomposeRet(Structure):
+    Head = tagHead()
+    DecomposeEquipIDCount = 0    #(BYTE DecomposeEquipIDCount)// 已分解的装备个数
+    DecomposeEquipIDList = list()    #(vector<DWORD> DecomposeEquipIDList)// 已分解的神装装备ID列表
+    GetItemLen = 0    #(WORD GetItemLen)
+    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] 
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC4
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.DecomposeEquipIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DecomposeEquipIDCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.DecomposeEquipIDList.append(value)
+        self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xC4
+        self.DecomposeEquipIDCount = 0
+        self.DecomposeEquipIDList = list()
+        self.GetItemLen = 0
+        self.GetItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.DecomposeEquipIDCount
+        length += 2
+        length += len(self.GetItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.DecomposeEquipIDCount)
+        for i in range(self.DecomposeEquipIDCount):
+            data = CommFunc.WriteDWORD(data, self.DecomposeEquipIDList[i])
+        data = CommFunc.WriteWORD(data, self.GetItemLen)
+        data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                DecomposeEquipIDCount:%d,
+                                DecomposeEquipIDList:%s,
+                                GetItemLen:%d,
+                                GetItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.DecomposeEquipIDCount,
+                                "...",
+                                self.GetItemLen,
+                                self.GetItemData
+                                )
+        return DumpString
+
+
+m_NAtagMCEquipDecomposeRet=tagMCEquipDecomposeRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeRet.Head.Cmd,m_NAtagMCEquipDecomposeRet.Head.SubCmd))] = m_NAtagMCEquipDecomposeRet
+
+
+#------------------------------------------------------
 # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
 
 class  tagMCEquipPartStar(Structure):
@@ -24638,6 +24719,274 @@
 
 
 #------------------------------------------------------
+# AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo
+
+class  tagMCActGarbageSortingInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x55
+        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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x55
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.ResetType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 2
+        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.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                ResetType:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.ResetType
+                                )
+        return DumpString
+
+
+m_NAtagMCActGarbageSortingInfo=tagMCActGarbageSortingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingInfo.Head.Cmd,m_NAtagMCActGarbageSortingInfo.Head.SubCmd))] = m_NAtagMCActGarbageSortingInfo
+
+
+#------------------------------------------------------
+# AA 57 垃圾收集活动分类结果 #tagMCActGarbageSortingResult
+
+class  tagMCActGarbageSortingResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ("GarbageSortingType", c_ubyte),    #垃圾分类类型
+                  ("IsRight", c_ubyte),    #是否正确
+                  ("AddEnvValue", c_ushort),    #增加环保值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x57
+        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 = 0x57
+        self.ActNum = 0
+        self.GarbageSortingType = 0
+        self.IsRight = 0
+        self.AddEnvValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActGarbageSortingResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 57 垃圾收集活动分类结果 //tagMCActGarbageSortingResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                GarbageSortingType:%d,
+                                IsRight:%d,
+                                AddEnvValue:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.GarbageSortingType,
+                                self.IsRight,
+                                self.AddEnvValue
+                                )
+        return DumpString
+
+
+m_NAtagMCActGarbageSortingResult=tagMCActGarbageSortingResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingResult.Cmd,m_NAtagMCActGarbageSortingResult.SubCmd))] = m_NAtagMCActGarbageSortingResult
+
+
+#------------------------------------------------------
+# AA 56 垃圾收集活动任务进度信息 #tagMCActGarbageTaskInfo
+
+class  tagMCActGarbageTask(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GarbageTaskID", c_ubyte),    #垃圾任务ID
+                  ("GarbageTaskValue", c_int),    #当前进度值,一直累加
+                  ("GarbageTaskFinishCount", c_ubyte),    #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
+                  ]
+
+    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.GarbageTaskID = 0
+        self.GarbageTaskValue = 0
+        self.GarbageTaskFinishCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActGarbageTask)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 56 垃圾收集活动任务进度信息 //tagMCActGarbageTaskInfo:
+                                GarbageTaskID:%d,
+                                GarbageTaskValue:%d,
+                                GarbageTaskFinishCount:%d
+                                '''\
+                                %(
+                                self.GarbageTaskID,
+                                self.GarbageTaskValue,
+                                self.GarbageTaskFinishCount
+                                )
+        return DumpString
+
+
+class  tagMCActGarbageTaskInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    GarbageTaskCount = 0    #(BYTE GarbageTaskCount)//任务数
+    GarbageTaskList = list()    #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x56
+        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.GarbageTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GarbageTaskCount):
+            temGarbageTaskList = tagMCActGarbageTask()
+            _pos = temGarbageTaskList.ReadData(_lpData, _pos)
+            self.GarbageTaskList.append(temGarbageTaskList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x56
+        self.ActNum = 0
+        self.GarbageTaskCount = 0
+        self.GarbageTaskList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.GarbageTaskCount):
+            length += self.GarbageTaskList[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.GarbageTaskCount)
+        for i in range(self.GarbageTaskCount):
+            data = CommFunc.WriteString(data, self.GarbageTaskList[i].GetLength(), self.GarbageTaskList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                GarbageTaskCount:%d,
+                                GarbageTaskList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.GarbageTaskCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActGarbageTaskInfo=tagMCActGarbageTaskInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageTaskInfo.Head.Cmd,m_NAtagMCActGarbageTaskInfo.Head.SubCmd))] = m_NAtagMCActGarbageTaskInfo
+
+
+#------------------------------------------------------
 # AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo
 
 class  tagMCActGrowupBuyCTGItem(Structure):
@@ -24882,6 +25231,148 @@
 
 m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo
+
+
+#------------------------------------------------------
+# AA 54 骑宠盛宴活动信息 #tagMCActHorsePetFeastInfo
+
+class  tagMCActHorsePetFeastTime(Structure):
+    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
+    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.StartTime = ""
+        self.EndtTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 5
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 5, self.StartTime)
+        data = CommFunc.WriteString(data, 5, self.EndtTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                StartTime:%s,
+                                EndtTime:%s
+                                '''\
+                                %(
+                                self.StartTime,
+                                self.EndtTime
+                                )
+        return DumpString
+
+
+class  tagMCActHorsePetFeastInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)//活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    TimeCount = 0    #(BYTE TimeCount)
+    ActTimeList = list()    #(vector<tagMCActHorsePetFeastTime> ActTimeList)// 活动时间 H:M 列表
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x54
+        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.TimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TimeCount):
+            temActTimeList = tagMCActHorsePetFeastTime()
+            _pos = temActTimeList.ReadData(_lpData, _pos)
+            self.ActTimeList.append(temActTimeList)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x54
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.TimeCount = 0
+        self.ActTimeList = list()
+        self.LimitLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.TimeCount):
+            length += self.ActTimeList[i].GetLength()
+        length += 2
+
+        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.TimeCount)
+        for i in range(self.TimeCount):
+            data = CommFunc.WriteString(data, self.ActTimeList[i].GetLength(), self.ActTimeList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                TimeCount:%d,
+                                ActTimeList:%s,
+                                LimitLV:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.TimeCount,
+                                "...",
+                                self.LimitLV
+                                )
+        return DumpString
+
+
+m_NAtagMCActHorsePetFeastInfo=tagMCActHorsePetFeastInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetFeastInfo.Head.Cmd,m_NAtagMCActHorsePetFeastInfo.Head.SubCmd))] = m_NAtagMCActHorsePetFeastInfo
 
 
 #------------------------------------------------------
@@ -26533,6 +27024,315 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 # AA 1B 许愿池拖动结果 #tagMCActWishingDragResult
 
 class  tagMCPlayerWishingDragInfo(Structure):
@@ -26980,6 +27780,288 @@
 
 
 #------------------------------------------------------
+# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult
+
+class  tagMCActXianXiaMJAwardItemResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    # 活动编号
+                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
+                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
+                  ("ItemCount", c_ushort),    
+                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
+                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x59
+        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 = 0x59
+        self.ActNum = 0
+        self.ItemLibType = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.PosNum = 0
+        self.TotalTimesNow = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActXianXiaMJAwardItemResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                ItemLibType:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                PosNum:%d,
+                                TotalTimesNow:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.ItemLibType,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.PosNum,
+                                self.TotalTimesNow
+                                )
+        return DumpString
+
+
+m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult
+
+
+#------------------------------------------------------
+# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo
+
+class  tagMCActXianXiaMJAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
+                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
+                  ("ItemCount", c_ushort),    
+                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
+                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
+                  ("TotalTimesMax", c_ubyte),    #最大可产出次数,0不限
+                  ("LayerLimit", c_ubyte),    #大于等于X层后可产出,0不限
+                  ]
+
+    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.ItemLibType = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.PosNum = 0
+        self.TotalTimesNow = 0
+        self.TotalTimesMax = 0
+        self.LayerLimit = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActXianXiaMJAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo:
+                                ItemLibType:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                PosNum:%d,
+                                TotalTimesNow:%d,
+                                TotalTimesMax:%d,
+                                LayerLimit:%d
+                                '''\
+                                %(
+                                self.ItemLibType,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.PosNum,
+                                self.TotalTimesNow,
+                                self.TotalTimesMax,
+                                self.LayerLimit
+                                )
+        return DumpString
+
+
+class  tagMCActXianXiaMJInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
+    MoneyType = 0    #(BYTE MoneyType)//消耗货币类型
+    MoneyValue = 0    #(WORD MoneyValue)//消耗货币值
+    LayerNum = 0    #(BYTE LayerNum)//当前奖池第几层
+    AwardItemCount = 0    #(BYTE AwardItemCount)
+    AwardItemList = list()    #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品
+    SuperItemCount = 0    #(BYTE SuperItemCount)
+    SuperItemList = list()    #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品;
+    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x58
+        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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagMCActXianXiaMJAwardItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SuperItemCount):
+            temSuperItemList = tagMCActXianXiaMJAwardItem()
+            _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 = 0x58
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.ResetType = 0
+        self.MoneyType = 0
+        self.MoneyValue = 0
+        self.LayerNum = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        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 += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+        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.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        data = CommFunc.WriteBYTE(data, self.MoneyType)
+        data = CommFunc.WriteWORD(data, self.MoneyValue)
+        data = CommFunc.WriteBYTE(data, self.LayerNum)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        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,
+                                LimitLV:%d,
+                                ResetType:%d,
+                                MoneyType:%d,
+                                MoneyValue:%d,
+                                LayerNum:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s,
+                                SuperItemCount:%d,
+                                SuperItemList:%s,
+                                SuperItemCanChooseCount:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.ResetType,
+                                self.MoneyType,
+                                self.MoneyValue,
+                                self.LayerNum,
+                                self.AwardItemCount,
+                                "...",
+                                self.SuperItemCount,
+                                "...",
+                                self.SuperItemCanChooseCount
+                                )
+        return DumpString
+
+
+m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo
+
+
+#------------------------------------------------------
 # AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo
 
 class  tagMCAllPeoplePartyCount(Structure):

--
Gitblit v1.8.0