From 8dad95f1a282f7f2fdc32487251e09db07ec5503 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 08 十月 2021 14:49:17 +0800
Subject: [PATCH] 9256 【BT4】【BT5】个人BOSS扫荡触发杀怪事件(击杀或扫荡个人boss触发任务事件 fb_event/passvipboss.xml)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 1196 +++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 871 insertions(+), 325 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 219c323..72b4c21 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -2368,6 +2368,112 @@
 
 
 #------------------------------------------------------
+# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
+
+class  tagGCArenaBattlePlayerInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x26
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.Score = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.Score
+                                )
+        return DumpString
+
+
+m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo
+
+
+#------------------------------------------------------
 # A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
 
 class  tagGCArenaBattleRecord(Structure):
@@ -2376,7 +2482,9 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
-    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
     AddScoreLen = 0    #(BYTE AddScoreLen)
     AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
     IsWin = 0    #(BYTE IsWin)//是否获胜
@@ -2395,6 +2503,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen)
         self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -2408,6 +2518,8 @@
         self.LV = 0
         self.RealmLV = 0
         self.FightPower = 0
+        self.FightPowerEx = 0
+        self.Score = 0
         self.AddScoreLen = 0
         self.AddScore = ""
         self.IsWin = 0
@@ -2421,6 +2533,8 @@
         length += 1
         length += 2
         length += 2
+        length += 4
+        length += 4
         length += 4
         length += 1
         length += len(self.AddScore)
@@ -2437,6 +2551,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.Score)
         data = CommFunc.WriteBYTE(data, self.AddScoreLen)
         data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore)
         data = CommFunc.WriteBYTE(data, self.IsWin)
@@ -2451,6 +2567,8 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d,
                                 AddScoreLen:%d,
                                 AddScore:%s,
                                 IsWin:%d,
@@ -2463,6 +2581,8 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.FightPower,
+                                self.FightPowerEx,
+                                self.Score,
                                 self.AddScoreLen,
                                 self.AddScore,
                                 self.IsWin,
@@ -2546,7 +2666,8 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
-    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
     data = None
 
@@ -2562,6 +2683,7 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
@@ -2572,6 +2694,7 @@
         self.LV = 0
         self.RealmLV = 0
         self.FightPower = 0
+        self.FightPowerEx = 0
         self.Score = 0
         return
 
@@ -2582,6 +2705,7 @@
         length += 1
         length += 2
         length += 2
+        length += 4
         length += 4
         length += 4
 
@@ -2595,6 +2719,7 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
         return data
 
@@ -2606,6 +2731,7 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 FightPower:%d,
+                                FightPowerEx:%d,
                                 Score:%d
                                 '''\
                                 %(
@@ -2615,6 +2741,7 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.FightPower,
+                                self.FightPowerEx,
                                 self.Score
                                 )
         return DumpString
@@ -15427,6 +15554,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):
@@ -20023,60 +20231,98 @@
 #A3 01 坐骑培养信息 #tagTrainHorseData
 
 class  tagTrainHorseData(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LV", c_ubyte),    #等阶
-                  ("EatItemCount", c_int),    #当前阶已吃丹个数
-                  ("SkinPlusState", c_int),    #幻化激活状态,按位存储是否激活,幻化编号ID对应位
-                  ]
+    Head = tagHead()
+    LV = 0    #(BYTE LV)//等阶
+    EatItemCount = 0    #(DWORD EatItemCount)//当前阶已吃丹个数
+    SkinPlusState = 0    #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位
+    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
+    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
+    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x01
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x01
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.EatItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SkinPlusState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainLVList.append(value)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainItemCountList.append(value)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x01
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x01
         self.LV = 0
         self.EatItemCount = 0
         self.SkinPlusState = 0
+        self.TrainTypes = 0
+        self.TrainLVList = list()
+        self.TrainItemCountList = list()
         return
 
     def GetLength(self):
-        return sizeof(tagTrainHorseData)
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        length += 4 * self.TrainTypes
+        length += 4 * self.TrainTypes
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.EatItemCount)
+        data = CommFunc.WriteDWORD(data, self.SkinPlusState)
+        data = CommFunc.WriteBYTE(data, self.TrainTypes)
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
+        return data
 
     def OutputString(self):
-        DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData:
-                                Cmd:%s,
-                                SubCmd:%s,
+        DumpString = '''
+                                Head:%s,
                                 LV:%d,
                                 EatItemCount:%d,
-                                SkinPlusState:%d
+                                SkinPlusState:%d,
+                                TrainTypes:%d,
+                                TrainLVList:%s,
+                                TrainItemCountList:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.Head.OutputString(),
                                 self.LV,
                                 self.EatItemCount,
-                                self.SkinPlusState
+                                self.SkinPlusState,
+                                self.TrainTypes,
+                                "...",
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagTrainHorseData=tagTrainHorseData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Cmd,m_NAtagTrainHorseData.SubCmd))] = m_NAtagTrainHorseData
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Head.Cmd,m_NAtagTrainHorseData.Head.SubCmd))] = m_NAtagTrainHorseData
 
 
 #------------------------------------------------------
@@ -23667,6 +23913,90 @@
 
 
 #------------------------------------------------------
+# A8 18 灵器培养信息 #tagMCLingQiTrainInfo
+
+class  tagMCLingQiTrainInfo(Structure):
+    Head = tagHead()
+    EquipPlace = 0    #(BYTE EquipPlace)//灵器装备位
+    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
+    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
+    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.EquipPlace,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainLVList.append(value)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainItemCountList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x18
+        self.EquipPlace = 0
+        self.TrainTypes = 0
+        self.TrainLVList = list()
+        self.TrainItemCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4 * self.TrainTypes
+        length += 4 * self.TrainTypes
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.EquipPlace)
+        data = CommFunc.WriteBYTE(data, self.TrainTypes)
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EquipPlace:%d,
+                                TrainTypes:%d,
+                                TrainLVList:%s,
+                                TrainItemCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.EquipPlace,
+                                self.TrainTypes,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCLingQiTrainInfo=tagMCLingQiTrainInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiTrainInfo.Head.Cmd,m_NAtagMCLingQiTrainInfo.Head.SubCmd))] = m_NAtagMCLingQiTrainInfo
+
+
+#------------------------------------------------------
 # A8 14 合成结果通知 #tagMCMakeItemAnswer
 
 class  tagMCMakeItemAnswer(Structure):
@@ -24091,6 +24421,83 @@
 
 m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem
+
+
+#------------------------------------------------------
+# A8 17 宠物培养信息 #tagMCPetTrainInfo
+
+class  tagMCPetTrainInfo(Structure):
+    Head = tagHead()
+    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
+    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
+    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x17
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainLVList.append(value)
+        for i in range(self.TrainTypes):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.TrainItemCountList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x17
+        self.TrainTypes = 0
+        self.TrainLVList = list()
+        self.TrainItemCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.TrainTypes
+        length += 4 * self.TrainTypes
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.TrainTypes)
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
+        for i in range(self.TrainTypes):
+            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TrainTypes:%d,
+                                TrainLVList:%s,
+                                TrainItemCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TrainTypes,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCPetTrainInfo=tagMCPetTrainInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetTrainInfo.Head.Cmd,m_NAtagMCPetTrainInfo.Head.SubCmd))] = m_NAtagMCPetTrainInfo
 
 
 #------------------------------------------------------
@@ -24638,203 +25045,7 @@
 
 
 #------------------------------------------------------
-# AA 57 垃圾收集活动玩家信息 #tagMCActGarbagePlayerInfo
-
-class  tagMCActGarbageAwardItemResult(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
-                  ]
-
-    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
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCActGarbageAwardItemResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 57 垃圾收集活动玩家信息 //tagMCActGarbagePlayerInfo:
-                                ItemLibType:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                PosNum:%d,
-                                TotalTimesNow:%d
-                                '''\
-                                %(
-                                self.ItemLibType,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.PosNum,
-                                self.TotalTimesNow
-                                )
-        return DumpString
-
-
-class  tagMCActGarbagePlayerInfo(Structure):
-    Head = tagHead()
-    ActNum = 0    #(BYTE ActNum)//活动编号
-    GuideTaskFinish = 0    #(BYTE GuideTaskFinish)//引导任务是否已完成,有需要NPC对话引导任务时,则需要先完成才显示活动界面
-    EnvironmentValue = 0    #(DWORD EnvironmentValue)//当前可用环保值
-    EnvironmentValueHis = 0    #(DWORD EnvironmentValueHis)//历史环保值
-    AwardItemResult=tagMCActGarbageAwardItemResult()    #(tagMCActGarbageAwardItemResult AwardItemResult)//本次抽奖结果物品信息,可能为空
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x57
-        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.GuideTaskFinish,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.EnvironmentValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EnvironmentValueHis,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        _pos = self.AwardItemResult.ReadData(_lpData,_pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAA
-        self.Head.SubCmd = 0x57
-        self.ActNum = 0
-        self.GuideTaskFinish = 0
-        self.EnvironmentValue = 0
-        self.EnvironmentValueHis = 0
-        self.AwardItemResult=tagMCActGarbageAwardItemResult()
-        self.AwardItemResult.Clear()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += self.AwardItemResult.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.GuideTaskFinish)
-        data = CommFunc.WriteDWORD(data, self.EnvironmentValue)
-        data = CommFunc.WriteDWORD(data, self.EnvironmentValueHis)
-        data = CommFunc.WriteString(data,self.AwardItemResult.GetLength(),self.AwardItemResult.GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNum:%d,
-                                GuideTaskFinish:%d,
-                                EnvironmentValue:%d,
-                                EnvironmentValueHis:%d,
-                                AwardItemResult:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNum,
-                                self.GuideTaskFinish,
-                                self.EnvironmentValue,
-                                self.EnvironmentValueHis,
-                                self.AwardItemResult.OutputString()
-                                )
-        return DumpString
-
-
-m_NAtagMCActGarbagePlayerInfo=tagMCActGarbagePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbagePlayerInfo.Head.Cmd,m_NAtagMCActGarbagePlayerInfo.Head.SubCmd))] = m_NAtagMCActGarbagePlayerInfo
-
-
-#------------------------------------------------------
 # AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo
-
-class  tagMCActGarbageAwardItem(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(tagMCActGarbageAwardItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AA 55 垃圾收集活动信息 //tagMCActGarbageSortingInfo:
-                                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  tagMCActGarbageSortingInfo(Structure):
     Head = tagHead()
@@ -24842,12 +25053,7 @@
     StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     LimitLV = 0    #(WORD LimitLV)// 限制等级
-    LayerNum = 0    #(BYTE LayerNum)//当前奖池第几层
-    AwardItemCount = 0    #(BYTE AwardItemCount)
-    AwardItemList = list()    #(vector<tagMCActGarbageAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品
-    SuperItemCount = 0    #(BYTE SuperItemCount)
-    SuperItemList = list()    #(vector<tagMCActGarbageAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品;
-    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
     data = None
 
     def __init__(self):
@@ -24863,18 +25069,7 @@
         self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.LimitLV,_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 = tagMCActGarbageAwardItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.SuperItemCount):
-            temSuperItemList = tagMCActGarbageAwardItem()
-            _pos = temSuperItemList.ReadData(_lpData, _pos)
-            self.SuperItemList.append(temSuperItemList)
-        self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -24886,12 +25081,7 @@
         self.StartDate = ""
         self.EndtDate = ""
         self.LimitLV = 0
-        self.LayerNum = 0
-        self.AwardItemCount = 0
-        self.AwardItemList = list()
-        self.SuperItemCount = 0
-        self.SuperItemList = list()
-        self.SuperItemCanChooseCount = 0
+        self.ResetType = 0
         return
 
     def GetLength(self):
@@ -24901,13 +25091,6 @@
         length += 10
         length += 10
         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
@@ -24919,14 +25102,7 @@
         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.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)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
         return data
 
     def OutputString(self):
@@ -24936,12 +25112,7 @@
                                 StartDate:%s,
                                 EndtDate:%s,
                                 LimitLV:%d,
-                                LayerNum:%d,
-                                AwardItemCount:%d,
-                                AwardItemList:%s,
-                                SuperItemCount:%d,
-                                SuperItemList:%s,
-                                SuperItemCanChooseCount:%d
+                                ResetType:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -24949,12 +25120,7 @@
                                 self.StartDate,
                                 self.EndtDate,
                                 self.LimitLV,
-                                self.LayerNum,
-                                self.AwardItemCount,
-                                "...",
-                                self.SuperItemCount,
-                                "...",
-                                self.SuperItemCanChooseCount
+                                self.ResetType
                                 )
         return DumpString
 
@@ -24964,17 +25130,24 @@
 
 
 #------------------------------------------------------
-# AA 56 垃圾收集活动任务进度信息 #tagMCActGarbageTaskInfo
+# AA 57 垃圾收集活动分类结果 #tagMCActGarbageSortingResult
 
-class  tagMCActGarbageTaskItem(Structure):
+class  tagMCActGarbageSortingResult(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("ItemID", c_int),    
-                  ("ItemCount", c_ushort),    
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    #活动编号
+                  ("GarbageSortingType", c_ubyte),    #垃圾分类类型
+                  ("IsRight", c_ubyte),    #是否正确
+                  ("AddEnvValue", c_int),    #增加环保值
+                  ("HisEnvValueTotal", c_int),    # 当前活动累计获得环保值
                   ]
 
     def __init__(self):
         self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x57
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -24983,34 +25156,56 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.ItemID = 0
-        self.ItemCount = 0
+        self.Cmd = 0xAA
+        self.SubCmd = 0x57
+        self.ActNum = 0
+        self.GarbageSortingType = 0
+        self.IsRight = 0
+        self.AddEnvValue = 0
+        self.HisEnvValueTotal = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCActGarbageTaskItem)
+        return sizeof(tagMCActGarbageSortingResult)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AA 56 垃圾收集活动任务进度信息 //tagMCActGarbageTaskInfo:
-                                ItemID:%d,
-                                ItemCount:%d
+        DumpString = '''// AA 57 垃圾收集活动分类结果 //tagMCActGarbageSortingResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                GarbageSortingType:%d,
+                                IsRight:%d,
+                                AddEnvValue:%d,
+                                HisEnvValueTotal:%d
                                 '''\
                                 %(
-                                self.ItemID,
-                                self.ItemCount
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.GarbageSortingType,
+                                self.IsRight,
+                                self.AddEnvValue,
+                                self.HisEnvValueTotal
                                 )
         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, 当前进度值 - (完成次数 * 单次所需进度))
+                  ("GarbageTaskFinishCount", c_int),    #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
                   ]
 
     def __init__(self):
@@ -25051,10 +25246,9 @@
 class  tagMCActGarbageTaskInfo(Structure):
     Head = tagHead()
     ActNum = 0    #(BYTE ActNum)// 活动编号
+    HisEnvValueTotal = 0    #(DWORD HisEnvValueTotal)// 当前活动累计获得环保值
     GarbageTaskCount = 0    #(BYTE GarbageTaskCount)//任务数
     GarbageTaskList = list()    #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表
-    TaskItemCount = 0    #(BYTE TaskItemCount)//本次获得的垃圾收集任务奖励物品个数,可能为0
-    GarbageTaskItemList = list()    #(vector<tagMCActGarbageTaskItem> GarbageTaskItemList)
     data = None
 
     def __init__(self):
@@ -25067,16 +25261,12 @@
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
         self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HisEnvValueTotal,_pos = CommFunc.ReadDWORD(_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)
-        self.TaskItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TaskItemCount):
-            temGarbageTaskItemList = tagMCActGarbageTaskItem()
-            _pos = temGarbageTaskItemList.ReadData(_lpData, _pos)
-            self.GarbageTaskItemList.append(temGarbageTaskItemList)
         return _pos
 
     def Clear(self):
@@ -25085,22 +25275,19 @@
         self.Head.Cmd = 0xAA
         self.Head.SubCmd = 0x56
         self.ActNum = 0
+        self.HisEnvValueTotal = 0
         self.GarbageTaskCount = 0
         self.GarbageTaskList = list()
-        self.TaskItemCount = 0
-        self.GarbageTaskItemList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
+        length += 4
         length += 1
         for i in range(self.GarbageTaskCount):
             length += self.GarbageTaskList[i].GetLength()
-        length += 1
-        for i in range(self.TaskItemCount):
-            length += self.GarbageTaskItemList[i].GetLength()
 
         return length
 
@@ -25108,29 +25295,25 @@
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteDWORD(data, self.HisEnvValueTotal)
         data = CommFunc.WriteBYTE(data, self.GarbageTaskCount)
         for i in range(self.GarbageTaskCount):
             data = CommFunc.WriteString(data, self.GarbageTaskList[i].GetLength(), self.GarbageTaskList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.TaskItemCount)
-        for i in range(self.TaskItemCount):
-            data = CommFunc.WriteString(data, self.GarbageTaskItemList[i].GetLength(), self.GarbageTaskItemList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
                                 ActNum:%d,
+                                HisEnvValueTotal:%d,
                                 GarbageTaskCount:%d,
-                                GarbageTaskList:%s,
-                                TaskItemCount:%d,
-                                GarbageTaskItemList:%s
+                                GarbageTaskList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.ActNum,
+                                self.HisEnvValueTotal,
                                 self.GarbageTaskCount,
-                                "...",
-                                self.TaskItemCount,
                                 "..."
                                 )
         return DumpString
@@ -27236,8 +27419,9 @@
     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次, ...]
+    UseMoneyType = 0    #(BYTE UseMoneyType)// 累计消费货币类型
+    UseMoneyPrizeCount = 0    #(BYTE UseMoneyPrizeCount)
+    UseMoneyPrizeList = list()    #(vector<DWORD> UseMoneyPrizeList)// 累计消费货币奖励次数列表 [奖励第1次所需累计消费货币, 第2次, ...]
     TurnItemCount = 0    #(BYTE TurnItemCount)
     TurnItemList = list()    #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘;
     GoodItemCount = 0    #(BYTE GoodItemCount)
@@ -27266,10 +27450,11 @@
         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):
+        self.UseMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.UseMoneyPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.UseMoneyPrizeCount):
             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.UseGoldPrizeList.append(value)
+            self.UseMoneyPrizeList.append(value)
         self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.TurnItemCount):
             temTurnItemList = tagMCActTurntableItem()
@@ -27301,8 +27486,9 @@
         self.LimitLV = 0
         self.CTGPrizeCount = 0
         self.CTGPrizeList = list()
-        self.UseGoldPrizeCount = 0
-        self.UseGoldPrizeList = list()
+        self.UseMoneyType = 0
+        self.UseMoneyPrizeCount = 0
+        self.UseMoneyPrizeList = list()
         self.TurnItemCount = 0
         self.TurnItemList = list()
         self.GoodItemCount = 0
@@ -27324,7 +27510,8 @@
         length += 1
         length += 4 * self.CTGPrizeCount
         length += 1
-        length += 4 * self.UseGoldPrizeCount
+        length += 1
+        length += 4 * self.UseMoneyPrizeCount
         length += 1
         for i in range(self.TurnItemCount):
             length += self.TurnItemList[i].GetLength()
@@ -27350,9 +27537,10 @@
         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.UseMoneyType)
+        data = CommFunc.WriteBYTE(data, self.UseMoneyPrizeCount)
+        for i in range(self.UseMoneyPrizeCount):
+            data = CommFunc.WriteDWORD(data, self.UseMoneyPrizeList[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())
@@ -27376,8 +27564,9 @@
                                 LimitLV:%d,
                                 CTGPrizeCount:%d,
                                 CTGPrizeList:%s,
-                                UseGoldPrizeCount:%d,
-                                UseGoldPrizeList:%s,
+                                UseMoneyType:%d,
+                                UseMoneyPrizeCount:%d,
+                                UseMoneyPrizeList:%s,
                                 TurnItemCount:%d,
                                 TurnItemList:%s,
                                 GoodItemCount:%d,
@@ -27396,7 +27585,8 @@
                                 self.LimitLV,
                                 self.CTGPrizeCount,
                                 "...",
-                                self.UseGoldPrizeCount,
+                                self.UseMoneyType,
+                                self.UseMoneyPrizeCount,
                                 "...",
                                 self.TurnItemCount,
                                 "...",
@@ -27425,7 +27615,7 @@
                   ("ActNum", c_ubyte),    #活动编号
                   ("CanUseCount", c_ubyte),    #可转盘次数
                   ("CTGTotal", c_int),    #累计充值额度
-                  ("UseGoldTotal", c_int),    #累计消费仙玉额度
+                  ("UseMoneyTotal", c_int),    #累计消费货币额度
                   ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
                   ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
                   ]
@@ -27447,7 +27637,7 @@
         self.ActNum = 0
         self.CanUseCount = 0
         self.CTGTotal = 0
-        self.UseGoldTotal = 0
+        self.UseMoneyTotal = 0
         self.TurnItemState = 0
         self.GetItemNum = 0
         return
@@ -27465,7 +27655,7 @@
                                 ActNum:%d,
                                 CanUseCount:%d,
                                 CTGTotal:%d,
-                                UseGoldTotal:%d,
+                                UseMoneyTotal:%d,
                                 TurnItemState:%d,
                                 GetItemNum:%d
                                 '''\
@@ -27475,7 +27665,7 @@
                                 self.ActNum,
                                 self.CanUseCount,
                                 self.CTGTotal,
-                                self.UseGoldTotal,
+                                self.UseMoneyTotal,
                                 self.TurnItemState,
                                 self.GetItemNum
                                 )
@@ -27931,6 +28121,288 @@
 
 m_NAtagMCActWishingWellPlayerInfo=tagMCActWishingWellPlayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellPlayerInfo.Head.Cmd,m_NAtagMCActWishingWellPlayerInfo.Head.SubCmd))] = m_NAtagMCActWishingWellPlayerInfo
+
+
+#------------------------------------------------------
+# 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
 
 
 #------------------------------------------------------
@@ -35324,6 +35796,80 @@
 
 
 #------------------------------------------------------
+# B1 13 在线奖励信息新 #tagMCOnlinePrizeNew
+
+class  tagMCOnlinePrizeNew(Structure):
+    Head = tagHead()
+    OnlineTime = 0    #(DWORD OnlineTime)//在线时间毫秒
+    Len = 0    #(BYTE Len)
+    PrizeInfo = list()    #(vector<DWORD> PrizeInfo)//领奖记录
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.PrizeInfo.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x13
+        self.OnlineTime = 0
+        self.Len = 0
+        self.PrizeInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 4 * self.Len
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OnlineTime)
+        data = CommFunc.WriteBYTE(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteDWORD(data, self.PrizeInfo[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OnlineTime:%d,
+                                Len:%d,
+                                PrizeInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OnlineTime,
+                                self.Len,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCOnlinePrizeNew=tagMCOnlinePrizeNew()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrizeNew.Head.Cmd,m_NAtagMCOnlinePrizeNew.Head.SubCmd))] = m_NAtagMCOnlinePrizeNew
+
+
+#------------------------------------------------------
 # B1 03 通知玩家死亡时间 #tagMCPlayerDeadTime
 
 class  tagMCPlayerDeadTime(Structure):

--
Gitblit v1.8.0