From 7b9354771ba6087012ca989f02d7bca345ed1764 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 26 十二月 2018 12:02:00 +0800
Subject: [PATCH] 860312 脱机工具封包补齐

---
 Tool/RobotTest/Protocol/PacketsReceivedPY.py | 11466 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 7,693 insertions(+), 3,773 deletions(-)

diff --git a/Tool/RobotTest/Protocol/PacketsReceivedPY.py b/Tool/RobotTest/Protocol/PacketsReceivedPY.py
index 7d4ff03..49baa51 100644
--- a/Tool/RobotTest/Protocol/PacketsReceivedPY.py
+++ b/Tool/RobotTest/Protocol/PacketsReceivedPY.py
@@ -318,6 +318,14 @@
                   ("Day", c_ushort),    # 已开服天数,从0开始
                   ("IsMixServer", c_ubyte),    #是否是合服服务器
                   ("MixDay", c_ushort),    # 已合服天数,从0开始
+                  ("OpenWeekday", c_ubyte),    #开服是周几,1代表周一
+                  ("NowYear", c_ushort),    #服务器当前时间 - 年
+                  ("NowMonth", c_ubyte),    
+                  ("NowDay", c_ubyte),    
+                  ("NowHour", c_ubyte),    
+                  ("NowMinute", c_ubyte),    
+                  ("NowSecond", c_ubyte),    
+                  ("NowMicSecond", c_int),    
                   ]
 
     def __init__(self):
@@ -337,6 +345,14 @@
         self.Day = 0
         self.IsMixServer = 0
         self.MixDay = 0
+        self.OpenWeekday = 0
+        self.NowYear = 0
+        self.NowMonth = 0
+        self.NowDay = 0
+        self.NowHour = 0
+        self.NowMinute = 0
+        self.NowSecond = 0
+        self.NowMicSecond = 0
         return
 
     def GetLength(self):
@@ -351,14 +367,30 @@
                                 SubCmd:%s,
                                 Day:%d,
                                 IsMixServer:%d,
-                                MixDay:%d
+                                MixDay:%d,
+                                OpenWeekday:%d,
+                                NowYear:%d,
+                                NowMonth:%d,
+                                NowDay:%d,
+                                NowHour:%d,
+                                NowMinute:%d,
+                                NowSecond:%d,
+                                NowMicSecond:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.Day,
                                 self.IsMixServer,
-                                self.MixDay
+                                self.MixDay,
+                                self.OpenWeekday,
+                                self.NowYear,
+                                self.NowMonth,
+                                self.NowDay,
+                                self.NowHour,
+                                self.NowMinute,
+                                self.NowSecond,
+                                self.NowMicSecond
                                 )
         return DumpString
 
@@ -847,6 +879,73 @@
 
 
 #------------------------------------------------------
+# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo
+
+class  tagGCFakeFamilyInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    FakeIDList = list()    #(vector<DWORD> FakeIDList)// 假仙盟名字索引1开始
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.FakeIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0A
+        self.Count = 0
+        self.FakeIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.Count
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteDWORD(data, self.FakeIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                FakeIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFakeFamilyInfo=tagGCFakeFamilyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFakeFamilyInfo.Head.Cmd,m_NAtagGCFakeFamilyInfo.Head.SubCmd))] = m_NAtagGCFakeFamilyInfo
+
+
+#------------------------------------------------------
 # A4 03 家族行为信息 #tagGCFamilyActionInfo
 
 class  tagGCFamilyAction(Structure):
@@ -1045,7 +1144,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("IsOpen", c_ubyte),    # 是否已开启
+                  ("IsOpen", c_int),    # 是否已开启
                   ("OpenCnt", c_ubyte),    # 本周已开启次数
                   ]
 
@@ -1660,6 +1759,77 @@
 
 
 #------------------------------------------------------
+# A4 0B 玩家参与的仙盟联赛仙盟信息 #tagGCPlayerJoinFamilyWarInfo
+
+class  tagGCPlayerJoinFamilyWarInfo(Structure):
+    Head = tagHead()
+    JoinFamilyID = 0    #(DWORD JoinFamilyID)//参与的仙盟ID,默认0本仙盟,仙盟不同时才会收到本包
+    JoinFamilyNameLen = 0    #(BYTE JoinFamilyNameLen)
+    JoinFamilyName = ""    #(String JoinFamilyName)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0B
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.JoinFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.JoinFamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.JoinFamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.JoinFamilyNameLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0B
+        self.JoinFamilyID = 0
+        self.JoinFamilyNameLen = 0
+        self.JoinFamilyName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.JoinFamilyName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.JoinFamilyID)
+        data = CommFunc.WriteBYTE(data, self.JoinFamilyNameLen)
+        data = CommFunc.WriteString(data, self.JoinFamilyNameLen, self.JoinFamilyName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                JoinFamilyID:%d,
+                                JoinFamilyNameLen:%d,
+                                JoinFamilyName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.JoinFamilyID,
+                                self.JoinFamilyNameLen,
+                                self.JoinFamilyName
+                                )
+        return DumpString
+
+
+m_NAtagGCPlayerJoinFamilyWarInfo=tagGCPlayerJoinFamilyWarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerJoinFamilyWarInfo.Head.Cmd,m_NAtagGCPlayerJoinFamilyWarInfo.Head.SubCmd))] = m_NAtagGCPlayerJoinFamilyWarInfo
+
+
+#------------------------------------------------------
 # A4 08 查看家族 #tagGCPyAllFamilyView
 
 class  tagGCPyFamilyView(Structure):
@@ -2143,6 +2313,140 @@
 
 
 #------------------------------------------------------
+# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo
+
+class  tagGCBossShuntLineState(Structure):
+    BossID = 0    #(DWORD BossID)// bossID
+    LineCount = 0    #(BYTE LineCount)
+    LineIDList = list()    #(vector<BYTE> LineIDList)// 线路ID列表
+    StateList = list()    #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.LineCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.LineIDList.append(value)
+        for i in range(self.LineCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.StateList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.BossID = 0
+        self.LineCount = 0
+        self.LineIDList = list()
+        self.StateList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1 * self.LineCount
+        length += 1 * self.LineCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.BossID)
+        data = CommFunc.WriteBYTE(data, self.LineCount)
+        for i in range(self.LineCount):
+            data = CommFunc.WriteBYTE(data, self.LineIDList[i])
+        for i in range(self.LineCount):
+            data = CommFunc.WriteBYTE(data, self.StateList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BossID:%d,
+                                LineCount:%d,
+                                LineIDList:%s,
+                                StateList:%s
+                                '''\
+                                %(
+                                self.BossID,
+                                self.LineCount,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCBossShuntLineStateInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BossLineStateInfo = list()    #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temBossLineStateInfo = tagGCBossShuntLineState()
+            _pos = temBossLineStateInfo.ReadData(_lpData, _pos)
+            self.BossLineStateInfo.append(temBossLineStateInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x01
+        self.Count = 0
+        self.BossLineStateInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.BossLineStateInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BossLineStateInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo
+
+
+#------------------------------------------------------
 # A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice
 
 class  tagGCBourseItemPrice(Structure):
@@ -2405,24 +2709,17 @@
 
 
 #------------------------------------------------------
-# A9 A5 通知摇骰子数据 #tagGCDiceData
+# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime
 
-class  tagGCDiceData(Structure):
+class  tagDogzTimeInfoObj(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("HasDiceCnt", c_ubyte),    #已摇次数
-                  ("HasBestCnt", c_ubyte),    #已出状元数量
-                  ("DiceState", c_ubyte),    #活动状态0 结束 1第一轮 99暂停    
-                  ("CurPoint", c_int),    #当前积分
-                  ("PointPrizeState", c_int),    # 积分奖励 按二进制位标示领取记录
+                  ("NPCID", c_int),    # npcid
+                  ("RefreshSecond", c_int),    # 刷新倒计时, 秒
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA9
-        self.SubCmd = 0xA5
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -2431,137 +2728,92 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA9
-        self.SubCmd = 0xA5
-        self.HasDiceCnt = 0
-        self.HasBestCnt = 0
-        self.DiceState = 0
-        self.CurPoint = 0
-        self.PointPrizeState = 0
+        self.NPCID = 0
+        self.RefreshSecond = 0
         return
 
     def GetLength(self):
-        return sizeof(tagGCDiceData)
+        return sizeof(tagDogzTimeInfoObj)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A9 A5 通知摇骰子数据 //tagGCDiceData:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                HasDiceCnt:%d,
-                                HasBestCnt:%d,
-                                DiceState:%d,
-                                CurPoint:%d,
-                                PointPrizeState:%d
+        DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime:
+                                NPCID:%d,
+                                RefreshSecond:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.HasDiceCnt,
-                                self.HasBestCnt,
-                                self.DiceState,
-                                self.CurPoint,
-                                self.PointPrizeState
+                                self.NPCID,
+                                self.RefreshSecond
                                 )
         return DumpString
 
 
-m_NAtagGCDiceData=tagGCDiceData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDiceData.Cmd,m_NAtagGCDiceData.SubCmd))] = m_NAtagGCDiceData
-
-
-#------------------------------------------------------
-# A9 A4 通知摇骰子结果 #tagGCDiceResult
-
-class  tagGCDiceResult(Structure):
+class  tagGCDogzNPCRefreshTime(Structure):
     Head = tagHead()
-    DiceType = 0    #(BYTE DiceType)//骰子组合类型
-    AddPoint = 0    #(DWORD AddPoint)//增加的积分
-    MoneyType = 0    #(BYTE MoneyType)//获得金钱类型
-    MoneyNum = 0    #(DWORD MoneyNum)//获得金钱数量
-    DataSize = 0    #(DWORD DataSize)
-    DiceNum = ""    #(String DiceNum)//具体骰子数
+    Cnt = 0    #(BYTE Cnt)//信息个数
+    InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA4
+        self.Head.SubCmd = 0x04
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.DiceType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AddPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DiceNum,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temInfoList = tagDogzTimeInfoObj()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA4
-        self.DiceType = 0
-        self.AddPoint = 0
-        self.MoneyType = 0
-        self.MoneyNum = 0
-        self.DataSize = 0
-        self.DiceNum = ""
+        self.Head.SubCmd = 0x04
+        self.Cnt = 0
+        self.InfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        length += 4
-        length += 1
-        length += 4
-        length += 4
-        length += len(self.DiceNum)
+        for i in range(self.Cnt):
+            length += self.InfoList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.DiceType)
-        data = CommFunc.WriteDWORD(data, self.AddPoint)
-        data = CommFunc.WriteBYTE(data, self.MoneyType)
-        data = CommFunc.WriteDWORD(data, self.MoneyNum)
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.DiceNum)
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                DiceType:%d,
-                                AddPoint:%d,
-                                MoneyType:%d,
-                                MoneyNum:%d,
-                                DataSize:%d,
-                                DiceNum:%s
+                                Cnt:%d,
+                                InfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.DiceType,
-                                self.AddPoint,
-                                self.MoneyType,
-                                self.MoneyNum,
-                                self.DataSize,
-                                self.DiceNum
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
 
-m_NAtagGCDiceResult=tagGCDiceResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDiceResult.Head.Cmd,m_NAtagGCDiceResult.Head.SubCmd))] = m_NAtagGCDiceResult
+m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime
 
 
 #------------------------------------------------------
@@ -2658,6 +2910,7 @@
     RecordLen = 0    #(WORD RecordLen)// 长度
     KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
     RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒    
+    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒    
     data = None
 
     def __init__(self):
@@ -2671,6 +2924,7 @@
         self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen)
         self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -2679,6 +2933,7 @@
         self.RecordLen = 0
         self.KillRecord = ""
         self.RefreshSecond = 0
+        self.RefreshCD = 0
         return
 
     def GetLength(self):
@@ -2687,6 +2942,7 @@
         length += 1
         length += 2
         length += len(self.KillRecord)
+        length += 4
         length += 4
 
         return length
@@ -2698,6 +2954,7 @@
         data = CommFunc.WriteWORD(data, self.RecordLen)
         data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord)
         data = CommFunc.WriteDWORD(data, self.RefreshSecond)
+        data = CommFunc.WriteDWORD(data, self.RefreshCD)
         return data
 
     def OutputString(self):
@@ -2706,14 +2963,16 @@
                                 IsAlive:%d,
                                 RecordLen:%d,
                                 KillRecord:%s,
-                                RefreshSecond:%d
+                                RefreshSecond:%d,
+                                RefreshCD:%d
                                 '''\
                                 %(
                                 self.BossID,
                                 self.IsAlive,
                                 self.RecordLen,
                                 self.KillRecord,
-                                self.RefreshSecond
+                                self.RefreshSecond,
+                                self.RefreshCD
                                 )
         return DumpString
 
@@ -3371,7 +3630,7 @@
     NameLen = 0    #(BYTE NameLen)
     Name = ""    #(String Name)//size = NameLen
     SpeakerType = 0    #(BYTE SpeakerType)
-    TextLen = 0    #(BYTE TextLen)
+    TextLen = 0    #(WORD TextLen)
     Text = ""    #(String Text)//size = TextLen
     ExtraValue = 0    #(DWORD ExtraValue)//附加值
     Extras = ""    #(char Extras[256])//附加值列表
@@ -3392,7 +3651,7 @@
         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TextLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
         self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
@@ -3424,7 +3683,7 @@
         length += 1
         length += len(self.Name)
         length += 1
-        length += 1
+        length += 2
         length += len(self.Text)
         length += 4
         length += 256
@@ -3440,7 +3699,7 @@
         data = CommFunc.WriteBYTE(data, self.NameLen)
         data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteBYTE(data, self.SpeakerType)
-        data = CommFunc.WriteBYTE(data, self.TextLen)
+        data = CommFunc.WriteWORD(data, self.TextLen)
         data = CommFunc.WriteString(data, self.TextLen, self.Text)
         data = CommFunc.WriteDWORD(data, self.ExtraValue)
         data = CommFunc.WriteString(data, 256, self.Extras)
@@ -3975,6 +4234,114 @@
 
 
 #------------------------------------------------------
+# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo
+
+class  tagGCStoreServerBuyCnt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GoodsID", c_int),    #商品标识
+                  ("BuyCnt", c_int),    #购买次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.GoodsID = 0
+        self.BuyCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCStoreServerBuyCnt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo:
+                                GoodsID:%d,
+                                BuyCnt:%d
+                                '''\
+                                %(
+                                self.GoodsID,
+                                self.BuyCnt
+                                )
+        return DumpString
+
+
+class  tagGCStoreServerBuyCntInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)//数量
+    InfoList = list()    #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temInfoList = tagGCStoreServerBuyCnt()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x06
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.InfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
+
+
+#------------------------------------------------------
 #A9 21 角色改名结果 #tagUpdatePlayerNameResult
 
 class  tagUpdatePlayerNameResult(Structure):
@@ -4027,177 +4394,304 @@
 
 
 #------------------------------------------------------
-# AC 15 嘉年华抽奖结果 #tagGCCarnivalResult
+# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList
 
-class  tagGCCarnivalResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Index", c_ubyte),    # 抽奖索引
-                  ("Multiple", c_int),    # 倍数150代表1.5倍
-                  ]
+class  tagGCFamilyBossHurtInfo(Structure):
+    NPCID = 0    #(DWORD NPCID)
+    CurHP = 0    #(DWORD CurHP)
+    CurHPEx = 0    #(DWORD CurHPEx)
+    MaxHP = 0    #(DWORD MaxHP)
+    MaxHPEx = 0    #(DWORD MaxHPEx)
+    FamilyID = 0    #(DWORD FamilyID)// 最大实时伤血仙盟
+    NameLen = 0    #(BYTE NameLen)
+    FamilyName = ""    #(String FamilyName)
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x15
         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()
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xAC
-        self.SubCmd = 0x15
-        self.Index = 0
-        self.Multiple = 0
+        self.NPCID = 0
+        self.CurHP = 0
+        self.CurHPEx = 0
+        self.MaxHP = 0
+        self.MaxHPEx = 0
+        self.FamilyID = 0
+        self.NameLen = 0
+        self.FamilyName = ""
         return
 
     def GetLength(self):
-        return sizeof(tagGCCarnivalResult)
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.FamilyName)
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteDWORD(data, self.CurHP)
+        data = CommFunc.WriteDWORD(data, self.CurHPEx)
+        data = CommFunc.WriteDWORD(data, self.MaxHP)
+        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.FamilyName)
+        return data
 
     def OutputString(self):
-        DumpString = '''// AC 15 嘉年华抽奖结果 //tagGCCarnivalResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Index:%d,
-                                Multiple:%d
+        DumpString = '''
+                                NPCID:%d,
+                                CurHP:%d,
+                                CurHPEx:%d,
+                                MaxHP:%d,
+                                MaxHPEx:%d,
+                                FamilyID:%d,
+                                NameLen:%d,
+                                FamilyName:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Index,
-                                self.Multiple
+                                self.NPCID,
+                                self.CurHP,
+                                self.CurHPEx,
+                                self.MaxHP,
+                                self.MaxHPEx,
+                                self.FamilyID,
+                                self.NameLen,
+                                self.FamilyName
                                 )
         return DumpString
 
 
-m_NAtagGCCarnivalResult=tagGCCarnivalResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCarnivalResult.Cmd,m_NAtagGCCarnivalResult.SubCmd))] = m_NAtagGCCarnivalResult
-
-
-#------------------------------------------------------
-# AC 13 通知活动怪信息 #tagGCFestivalNPCInfoList
-
-class  tagGCFestivalNPCInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MapID", c_int),    # 活动地图ID
-                  ("NPCCnt", c_ushort),    # 剩余活动怪数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x13
-        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 = 0xAC
-        self.SubCmd = 0x13
-        self.MapID = 0
-        self.NPCCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFestivalNPCInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 13 通知活动怪信息 //tagGCFestivalNPCInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MapID:%d,
-                                NPCCnt:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MapID,
-                                self.NPCCnt
-                                )
-        return DumpString
-
-
-class  tagGCFestivalNPCInfoList(Structure):
+class  tagGCAllFamilyBossHurtInfoList(Structure):
     Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)//信息个数
-    MapNPCInfoList = list()    #(vector<tagGCFestivalNPCInfo> MapNPCInfoList)//地图活动怪列表
+    NPCCount = 0    #(BYTE NPCCount)// 个数
+    NPCHurtInfo = list()    #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
+        self.Head.SubCmd = 0x10
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Cnt):
-            temMapNPCInfoList = tagGCFestivalNPCInfo()
-            _pos = temMapNPCInfoList.ReadData(_lpData, _pos)
-            self.MapNPCInfoList.append(temMapNPCInfoList)
+        self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.NPCCount):
+            temNPCHurtInfo = tagGCFamilyBossHurtInfo()
+            _pos = temNPCHurtInfo.ReadData(_lpData, _pos)
+            self.NPCHurtInfo.append(temNPCHurtInfo)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
-        self.Cnt = 0
-        self.MapNPCInfoList = list()
+        self.Head.SubCmd = 0x10
+        self.NPCCount = 0
+        self.NPCHurtInfo = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        for i in range(self.Cnt):
-            length += self.MapNPCInfoList[i].GetLength()
+        for i in range(self.NPCCount):
+            length += self.NPCHurtInfo[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Cnt)
-        for i in range(self.Cnt):
-            data = CommFunc.WriteString(data, self.MapNPCInfoList[i].GetLength(), self.MapNPCInfoList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.NPCCount)
+        for i in range(self.NPCCount):
+            data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                Cnt:%d,
-                                MapNPCInfoList:%s
+                                NPCCount:%d,
+                                NPCHurtInfo:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.Cnt,
+                                self.NPCCount,
                                 "..."
                                 )
         return DumpString
 
 
-m_NAtagGCFestivalNPCInfoList=tagGCFestivalNPCInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFestivalNPCInfoList.Head.Cmd,m_NAtagGCFestivalNPCInfoList.Head.SubCmd))] = m_NAtagGCFestivalNPCInfoList
+m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList
+
+
+#------------------------------------------------------
+# AC 08 boss复活点数通知 #tagGCBossRebornPoint
+
+class  tagGCBossRebornPoint(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Point", c_int),    # 复活点数
+                  ("TotalPoint", c_int),    # 复活总点数
+                  ("RebornCnt", c_ushort),    # 复活次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x08
+        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 = 0xAC
+        self.SubCmd = 0x08
+        self.Point = 0
+        self.TotalPoint = 0
+        self.RebornCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCBossRebornPoint)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Point:%d,
+                                TotalPoint:%d,
+                                RebornCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Point,
+                                self.TotalPoint,
+                                self.RebornCnt
+                                )
+        return DumpString
+
+
+m_NAtagGCBossRebornPoint=tagGCBossRebornPoint()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint
+
+
+#------------------------------------------------------
+# AC 09 仙界盛典活动信息 #tagGCFairyCeremonyInfo
+
+class  tagGCFairyCeremonyInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    WorldLV = 0    #(WORD WorldLV)// 世界等级
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        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 = 0xAC
+        self.Head.SubCmd = 0x09
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.WorldLV = 0
+        self.LimitLV = 0
+        self.ResetType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 2
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.WorldLV)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                WorldLV:%d,
+                                LimitLV:%d,
+                                ResetType:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.WorldLV,
+                                self.LimitLV,
+                                self.ResetType
+                                )
+        return DumpString
+
+
+m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo
 
 
 #------------------------------------------------------
@@ -4385,62 +4879,6 @@
 
 
 #------------------------------------------------------
-# AC 14 百服活动状态 #tagGCHundredServerAction
-
-class  tagGCHundredServerAction(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("StartDate", c_int),    # 开始时间time
-                  ("IsHundredServer", c_ubyte),    # 是否百服服务器
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x14
-        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 = 0xAC
-        self.SubCmd = 0x14
-        self.StartDate = 0
-        self.IsHundredServer = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCHundredServerAction)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 14 百服活动状态 //tagGCHundredServerAction:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                StartDate:%d,
-                                IsHundredServer:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.StartDate,
-                                self.IsHundredServer
-                                )
-        return DumpString
-
-
-m_NAtagGCHundredServerAction=tagGCHundredServerAction()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCHundredServerAction.Cmd,m_NAtagGCHundredServerAction.SubCmd))] = m_NAtagGCHundredServerAction
-
-
-#------------------------------------------------------
 # AC 01 通知领地争夺占领情况 #tagGCManorWarInfo
 
 class  tagGCManorInfo(Structure):
@@ -4606,6 +5044,300 @@
 
 m_NAtagGCManorWarInfo=tagGCManorWarInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCManorWarInfo.Head.Cmd,m_NAtagGCManorWarInfo.Head.SubCmd))] = m_NAtagGCManorWarInfo
+
+
+#------------------------------------------------------
+# AC 06 多倍经验活动信息 #tagGCMultiExpRateInfo
+
+class  tagGCMultiExpRateTime(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  tagGCMultiExpRateInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagGCMultiExpRateTime> ActivityTime)//活动时间
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AddExpRate = 0    #(DWORD AddExpRate)// 增加的经验倍率,万分率
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagGCMultiExpRateTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddExpRate,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x06
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.LimitLV = 0
+        self.AddExpRate = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 2
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteDWORD(data, self.AddExpRate)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                LimitLV:%d,
+                                AddExpRate:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.LimitLV,
+                                self.AddExpRate
+                                )
+        return DumpString
+
+
+m_NAtagGCMultiExpRateInfo=tagGCMultiExpRateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiExpRateInfo.Head.Cmd,m_NAtagGCMultiExpRateInfo.Head.SubCmd))] = m_NAtagGCMultiExpRateInfo
+
+
+#------------------------------------------------------
+# AC 0A 多倍修行点活动信息 #tagGCMultiRealmPointInfo
+
+class  tagGCMultiRealmPointInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    Multiple = 0    #(BYTE Multiple)// 倍数
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    LimitPoint = 0    #(DWORD LimitPoint)// 限制获得修行点
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LimitPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0A
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.Multiple = 0
+        self.LimitLV = 0
+        self.LimitPoint = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.Multiple)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteDWORD(data, self.LimitPoint)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                Multiple:%d,
+                                LimitLV:%d,
+                                LimitPoint:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.Multiple,
+                                self.LimitLV,
+                                self.LimitPoint
+                                )
+        return DumpString
+
+
+m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo
+
+
+#------------------------------------------------------
+# AC 05 红包删除 #tagGCRedPacketDel
+
+class  tagGCRedPacketDel(Structure):
+    Head = tagHead()
+    Cnt = 0    #(DWORD Cnt)// 个数
+    DelRedPacketID = list()    #(vector<DWORD> DelRedPacketID)// 红包ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        for i in range(self.Cnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.DelRedPacketID.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x05
+        self.Cnt = 0
+        self.DelRedPacketID = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4 * self.Cnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteDWORD(data, self.DelRedPacketID[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                DelRedPacketID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCRedPacketDel=tagGCRedPacketDel()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRedPacketDel.Head.Cmd,m_NAtagGCRedPacketDel.Head.SubCmd))] = m_NAtagGCRedPacketDel
 
 
 #------------------------------------------------------
@@ -5727,6 +6459,196 @@
 
 m_NAtagGCSocialRefreshType=tagGCSocialRefreshType()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialRefreshType.Cmd,m_NAtagGCSocialRefreshType.SubCmd))] = m_NAtagGCSocialRefreshType
+
+
+#------------------------------------------------------
+#B3 10 语音聊天 #tagGCVoiceChat
+
+class  tagGCVoiceChat(Structure):
+    Head = tagHead()
+    ChannelType = 0    #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域    
+    SrcNameLen = 0    #(BYTE SrcNameLen)
+    SrcName = ""    #(String SrcName)//size = SrcNameLen
+    PlayerID = 0    #(DWORD PlayerID)
+    ToNameLen = 0    #(BYTE ToNameLen)
+    ToName = ""    #(String ToName)//size = ToNameLen
+    ToPlayerID = 0    #(DWORD ToPlayerID)
+    Len = 0    #(WORD Len)
+    Content = list()    #(vector<BYTE> Content)//size = Len
+    ExtraValue = 0    #(DWORD ExtraValue)//附加值
+    Extras = ""    #(char Extras[256])//附加值列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x10
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SrcNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SrcName,_pos = CommFunc.ReadString(_lpData, _pos,self.SrcNameLen)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ToNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ToName,_pos = CommFunc.ReadString(_lpData, _pos,self.ToNameLen)
+        self.ToPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Len):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.Content.append(value)
+        self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x10
+        self.ChannelType = 0
+        self.SrcNameLen = 0
+        self.SrcName = ""
+        self.PlayerID = 0
+        self.ToNameLen = 0
+        self.ToName = ""
+        self.ToPlayerID = 0
+        self.Len = 0
+        self.Content = list()
+        self.ExtraValue = 0
+        self.Extras = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.SrcName)
+        length += 4
+        length += 1
+        length += len(self.ToName)
+        length += 4
+        length += 2
+        length += 1 * self.Len
+        length += 4
+        length += 256
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ChannelType)
+        data = CommFunc.WriteBYTE(data, self.SrcNameLen)
+        data = CommFunc.WriteString(data, self.SrcNameLen, self.SrcName)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.ToNameLen)
+        data = CommFunc.WriteString(data, self.ToNameLen, self.ToName)
+        data = CommFunc.WriteDWORD(data, self.ToPlayerID)
+        data = CommFunc.WriteWORD(data, self.Len)
+        for i in range(self.Len):
+            data = CommFunc.WriteBYTE(data, self.Content[i])
+        data = CommFunc.WriteDWORD(data, self.ExtraValue)
+        data = CommFunc.WriteString(data, 256, self.Extras)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ChannelType:%d,
+                                SrcNameLen:%d,
+                                SrcName:%s,
+                                PlayerID:%d,
+                                ToNameLen:%d,
+                                ToName:%s,
+                                ToPlayerID:%d,
+                                Len:%d,
+                                Content:%s,
+                                ExtraValue:%d,
+                                Extras:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ChannelType,
+                                self.SrcNameLen,
+                                self.SrcName,
+                                self.PlayerID,
+                                self.ToNameLen,
+                                self.ToName,
+                                self.ToPlayerID,
+                                self.Len,
+                                "...",
+                                self.ExtraValue,
+                                self.Extras
+                                )
+        return DumpString
+
+
+m_NAtagGCVoiceChat=tagGCVoiceChat()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCVoiceChat.Head.Cmd,m_NAtagGCVoiceChat.Head.SubCmd))] = m_NAtagGCVoiceChat
+
+
+#------------------------------------------------------
+# B9 13 进入组队副本失败原因 #tagGCEnterTeamFBFailReason
+
+class  tagGCEnterTeamFBFailReason(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MapID", c_int),    # 请求进入的地图ID
+                  ("AskType", c_ubyte),    # 请求类型: 0-匹配请求;1-进入请求
+                  ("Reason", c_ubyte),    # 失败原因:2-次数不足;3-进入CD中;6-门票不足
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        self.SubCmd = 0x13
+        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 = 0xB9
+        self.SubCmd = 0x13
+        self.MapID = 0
+        self.AskType = 0
+        self.Reason = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCEnterTeamFBFailReason)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 13 进入组队副本失败原因 //tagGCEnterTeamFBFailReason:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MapID:%d,
+                                AskType:%d,
+                                Reason:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MapID,
+                                self.AskType,
+                                self.Reason
+                                )
+        return DumpString
+
+
+m_NAtagGCEnterTeamFBFailReason=tagGCEnterTeamFBFailReason()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEnterTeamFBFailReason.Cmd,m_NAtagGCEnterTeamFBFailReason.SubCmd))] = m_NAtagGCEnterTeamFBFailReason
 
 
 #------------------------------------------------------
@@ -7125,875 +8047,685 @@
 
 
 #------------------------------------------------------
-# D1 25 通知可进入跨服王者争霸 #tagCanEnterMergeKing
+# C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo
 
-class  tagCanEnterMergeKing(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("GroupType", c_ubyte),    # 战斗赛事组类型,如16强等
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xD1
-        self.SubCmd = 0x25
-        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 = 0xD1
-        self.SubCmd = 0x25
-        self.GroupType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCanEnterMergeKing)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// D1 25 通知可进入跨服王者争霸 //tagCanEnterMergeKing:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                GroupType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.GroupType
-                                )
-        return DumpString
-
-
-m_NAtagCanEnterMergeKing=tagCanEnterMergeKing()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergeKing.Cmd,m_NAtagCanEnterMergeKing.SubCmd))] = m_NAtagCanEnterMergeKing
-
-
-#------------------------------------------------------
-# D1 24 通知可进入跨服PK匹配 #tagCanEnterMergePK
-
-class  tagCanEnterMergePKMember(Structure):
-    Head = tagHead()
-    AccIDLen = 0    #(BYTE AccIDLen)
-    AccID = ""    #(String AccID)
+class  tagGCCrossRealmPKBillboardData(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
     NameLen = 0    #(BYTE NameLen)
     PlayerName = ""    #(String PlayerName)
     Job = 0    #(BYTE Job)
-    PKCnt = 0    #(DWORD PKCnt)// 已PK次数
-    PKCWinCnt = 0    #(DWORD PKCWinCnt)// 当前连胜次数
-    Score = 0    #(DWORD Score)// 赛季积分
-    DayScore = 0    #(DWORD DayScore)// 当日积分
-    PKWinCnt = 0    #(DWORD PKWinCnt)// 累计胜利次数
-    MaxCWinCnt = 0    #(DWORD MaxCWinCnt)// 最大连胜次数
-    Grade = 0    #(BYTE Grade)// 当前段位
-    FightPower = 0    #(DWORD FightPower)// 战斗力
-    PlayerLV = 0    #(WORD PlayerLV)// 等级
-    MaxHP = 0    #(DWORD MaxHP)// 最大生命值
+    FightPower = 0    #(DWORD FightPower)
+    RealmLV = 0    #(WORD RealmLV)
+    PKScore = 0    #(DWORD PKScore)
+    DanLV = 0    #(BYTE DanLV)
     data = None
 
     def __init__(self):
         self.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x24
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PKCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PKCWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DayScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PKWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MaxCWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Grade,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x24
-        self.AccIDLen = 0
-        self.AccID = ""
+        self.PlayerID = 0
         self.NameLen = 0
         self.PlayerName = ""
         self.Job = 0
-        self.PKCnt = 0
-        self.PKCWinCnt = 0
-        self.Score = 0
-        self.DayScore = 0
-        self.PKWinCnt = 0
-        self.MaxCWinCnt = 0
-        self.Grade = 0
         self.FightPower = 0
-        self.PlayerLV = 0
-        self.MaxHP = 0
+        self.RealmLV = 0
+        self.PKScore = 0
+        self.DanLV = 0
         return
 
     def GetLength(self):
         length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.AccID)
+        length += 4
         length += 1
         length += len(self.PlayerName)
         length += 1
         length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 4
         length += 2
         length += 4
+        length += 1
 
         return length
 
     def GetBuffer(self):
         data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AccIDLen)
-        data = CommFunc.WriteString(data, self.AccIDLen, self.AccID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
         data = CommFunc.WriteBYTE(data, self.NameLen)
         data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
         data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteDWORD(data, self.PKCnt)
-        data = CommFunc.WriteDWORD(data, self.PKCWinCnt)
-        data = CommFunc.WriteDWORD(data, self.Score)
-        data = CommFunc.WriteDWORD(data, self.DayScore)
-        data = CommFunc.WriteDWORD(data, self.PKWinCnt)
-        data = CommFunc.WriteDWORD(data, self.MaxCWinCnt)
-        data = CommFunc.WriteBYTE(data, self.Grade)
         data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteWORD(data, self.PlayerLV)
-        data = CommFunc.WriteDWORD(data, self.MaxHP)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.PKScore)
+        data = CommFunc.WriteBYTE(data, self.DanLV)
         return data
 
     def OutputString(self):
         DumpString = '''
-                                Head:%s,
-                                AccIDLen:%d,
-                                AccID:%s,
+                                PlayerID:%d,
                                 NameLen:%d,
                                 PlayerName:%s,
                                 Job:%d,
-                                PKCnt:%d,
-                                PKCWinCnt:%d,
-                                Score:%d,
-                                DayScore:%d,
-                                PKWinCnt:%d,
-                                MaxCWinCnt:%d,
-                                Grade:%d,
                                 FightPower:%d,
-                                PlayerLV:%d,
-                                MaxHP:%d
+                                RealmLV:%d,
+                                PKScore:%d,
+                                DanLV:%d
                                 '''\
                                 %(
-                                self.Head.OutputString(),
-                                self.AccIDLen,
-                                self.AccID,
+                                self.PlayerID,
                                 self.NameLen,
                                 self.PlayerName,
                                 self.Job,
-                                self.PKCnt,
-                                self.PKCWinCnt,
-                                self.Score,
-                                self.DayScore,
-                                self.PKWinCnt,
-                                self.MaxCWinCnt,
-                                self.Grade,
                                 self.FightPower,
-                                self.PlayerLV,
-                                self.MaxHP
+                                self.RealmLV,
+                                self.PKScore,
+                                self.DanLV
                                 )
         return DumpString
 
 
-class  tagCanEnterMergePK(Structure):
+class  tagGCCrossRealmPKBillboardInfo(Structure):
     Head = tagHead()
-    MapID = 0    #(DWORD MapID)// 要进入的地图ID
-    RoomID = 0    #(DWORD RoomID)// 要进入的房间ID
-    MemberCnt = 0    #(BYTE MemberCnt)// 对战玩家个数
-    MemberList = list()    #(vector<tagCanEnterMergePKMember> MemberList)// 对战玩家详细信息
+    ZoneID = 0    #(BYTE ZoneID)// 赛区ID    
+    SeasonID = 0    #(BYTE SeasonID)// 赛季ID    
+    Count = 0    #(WORD Count)
+    PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
     data = None
 
     def __init__(self):
         self.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x24
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x05
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RoomID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MemberCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemberCnt):
-            temMemberList = tagCanEnterMergePKMember()
-            _pos = temMemberList.ReadData(_lpData, _pos)
-            self.MemberList.append(temMemberList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x24
-        self.MapID = 0
-        self.RoomID = 0
-        self.MemberCnt = 0
-        self.MemberList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.MemberCnt):
-            length += self.MemberList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.MapID)
-        data = CommFunc.WriteDWORD(data, self.RoomID)
-        data = CommFunc.WriteBYTE(data, self.MemberCnt)
-        for i in range(self.MemberCnt):
-            data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                MapID:%d,
-                                RoomID:%d,
-                                MemberCnt:%d,
-                                MemberList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.MapID,
-                                self.RoomID,
-                                self.MemberCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCanEnterMergePK=tagCanEnterMergePK()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergePK.Head.Cmd,m_NAtagCanEnterMergePK.Head.SubCmd))] = m_NAtagCanEnterMergePK
-
-
-#------------------------------------------------------
-# D1 23 通知可进入跨服活动 #tagCanEnterMergeServer
-
-class  tagCanEnterMergeServer(Structure):
-    Head = tagHead()
-    ActionType = 0    #(BYTE ActionType)//活动类型
-    MapID = 0    #(DWORD MapID)// 登录后在中转地图时要跳转进入的地图ID
-    LineID = 0    #(DWORD LineID)// 要进入的线路或地图扩展数据
-    NewAccIDLen = 0    #(BYTE NewAccIDLen)
-    NewAccID = ""    #(String NewAccID)
-    NewPswLen = 0    #(BYTE NewPswLen)
-    NewPsw = ""    #(String NewPsw)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x23
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NewAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NewAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.NewAccIDLen)
-        self.NewPswLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NewPsw,_pos = CommFunc.ReadString(_lpData, _pos,self.NewPswLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x23
-        self.ActionType = 0
-        self.MapID = 0
-        self.LineID = 0
-        self.NewAccIDLen = 0
-        self.NewAccID = ""
-        self.NewPswLen = 0
-        self.NewPsw = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.NewAccID)
-        length += 1
-        length += len(self.NewPsw)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActionType)
-        data = CommFunc.WriteDWORD(data, self.MapID)
-        data = CommFunc.WriteDWORD(data, self.LineID)
-        data = CommFunc.WriteBYTE(data, self.NewAccIDLen)
-        data = CommFunc.WriteString(data, self.NewAccIDLen, self.NewAccID)
-        data = CommFunc.WriteBYTE(data, self.NewPswLen)
-        data = CommFunc.WriteString(data, self.NewPswLen, self.NewPsw)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActionType:%d,
-                                MapID:%d,
-                                LineID:%d,
-                                NewAccIDLen:%d,
-                                NewAccID:%s,
-                                NewPswLen:%d,
-                                NewPsw:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActionType,
-                                self.MapID,
-                                self.LineID,
-                                self.NewAccIDLen,
-                                self.NewAccID,
-                                self.NewPswLen,
-                                self.NewPsw
-                                )
-        return DumpString
-
-
-m_NAtagCanEnterMergeServer=tagCanEnterMergeServer()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergeServer.Head.Cmd,m_NAtagCanEnterMergeServer.Head.SubCmd))] = m_NAtagCanEnterMergeServer
-
-
-#------------------------------------------------------
-#D1 08 上传数据查询结果 #tagMergeRegisterQueryResult
-
-class  tagMergeRegisterQueryResult(Structure):
-    Head = tagHead()
-    NewAccIDLen = 0    #(BYTE NewAccIDLen)
-    NewAccID = ""    #(String NewAccID)
-    NewPswLen = 0    #(BYTE NewPswLen)
-    NewPsw = ""    #(String NewPsw)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.NewAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NewAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.NewAccIDLen)
-        self.NewPswLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NewPsw,_pos = CommFunc.ReadString(_lpData, _pos,self.NewPswLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x08
-        self.NewAccIDLen = 0
-        self.NewAccID = ""
-        self.NewPswLen = 0
-        self.NewPsw = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.NewAccID)
-        length += 1
-        length += len(self.NewPsw)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.NewAccIDLen)
-        data = CommFunc.WriteString(data, self.NewAccIDLen, self.NewAccID)
-        data = CommFunc.WriteBYTE(data, self.NewPswLen)
-        data = CommFunc.WriteString(data, self.NewPswLen, self.NewPsw)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                NewAccIDLen:%d,
-                                NewAccID:%s,
-                                NewPswLen:%d,
-                                NewPsw:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.NewAccIDLen,
-                                self.NewAccID,
-                                self.NewPswLen,
-                                self.NewPsw
-                                )
-        return DumpString
-
-
-m_NAtagMergeRegisterQueryResult=tagMergeRegisterQueryResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeRegisterQueryResult.Head.Cmd,m_NAtagMergeRegisterQueryResult.Head.SubCmd))] = m_NAtagMergeRegisterQueryResult
-
-
-#------------------------------------------------------
-#D1 16  跨服赛服务器信息 #tagMergeServerInfo
-
-class  tagMergeServerInfo(Structure):
-    Head = tagHead()
-    ServerIPLen = 0    #(BYTE ServerIPLen)
-    ServerIP = ""    #(String ServerIP)
-    Port = 0    #(DWORD Port)
-    IsMergeServer = 0    #(BYTE IsMergeServer)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x16
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ServerIPLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerIP,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerIPLen)
-        self.Port,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.IsMergeServer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x16
-        self.ServerIPLen = 0
-        self.ServerIP = ""
-        self.Port = 0
-        self.IsMergeServer = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIP)
-        length += 4
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ServerIPLen)
-        data = CommFunc.WriteString(data, self.ServerIPLen, self.ServerIP)
-        data = CommFunc.WriteDWORD(data, self.Port)
-        data = CommFunc.WriteBYTE(data, self.IsMergeServer)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerIPLen:%d,
-                                ServerIP:%s,
-                                Port:%d,
-                                IsMergeServer:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerIPLen,
-                                self.ServerIP,
-                                self.Port,
-                                self.IsMergeServer
-                                )
-        return DumpString
-
-
-m_NAtagMergeServerInfo=tagMergeServerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeServerInfo.Head.Cmd,m_NAtagMergeServerInfo.Head.SubCmd))] = m_NAtagMergeServerInfo
-
-
-#------------------------------------------------------
-# D1 27 通知跨服PK战斗结果 #tagMergePKOverInfo
-
-class  tagMergePKOver(Structure):
-    TimeLen = 0    #(BYTE TimeLen)
-    TimeStr = ""    #(String TimeStr)// yyyy-MM-dd HH:mm:ss
-    RoomID = 0    #(DWORD RoomID)
-    OverType = 0    #(BYTE OverType)
-    RemainTime = 0    #(DWORD RemainTime)
-    WinnerAccIDLen = 0    #(BYTE WinnerAccIDLen)
-    WinnerAccID = ""    #(String WinnerAccID)
-    LoserAccIDLen = 0    #(BYTE LoserAccIDLen)
-    LoserAccID = ""    #(String LoserAccID)
-    WinnerID = 0    #(DWORD WinnerID)
-    LoserID = 0    #(DWORD LoserID)
-    WinnerNameLen = 0    #(BYTE WinnerNameLen)
-    WinnerName = ""    #(String WinnerName)
-    LoserNameLen = 0    #(BYTE LoserNameLen)
-    LoserName = ""    #(String LoserName)
-    WinnerAddScore = 0    #(WORD WinnerAddScore)
-    LoserAddScoreLen = 0    #(BYTE LoserAddScoreLen)
-    LoserAddScore = ""    #(String LoserAddScore)// 失败附加分,支持负值
-    WinnerWinCnt = 0    #(BYTE WinnerWinCnt)// 比分获胜方获胜次数
-    LoserWinCnt = 0    #(BYTE LoserWinCnt)// 比分失败方获胜次数
-    WinnerCWinCnt = 0    #(WORD WinnerCWinCnt)// 获胜者连胜数
-    LuckyItemID = 0    #(DWORD LuckyItemID)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen)
-        self.RoomID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RemainTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WinnerAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WinnerAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.WinnerAccIDLen)
-        self.LoserAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LoserAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserAccIDLen)
-        self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WinnerNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WinnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.WinnerNameLen)
-        self.LoserNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LoserName,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserNameLen)
-        self.WinnerAddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LoserAddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LoserAddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserAddScoreLen)
-        self.WinnerWinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LoserWinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WinnerCWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LuckyItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.TimeLen = 0
-        self.TimeStr = ""
-        self.RoomID = 0
-        self.OverType = 0
-        self.RemainTime = 0
-        self.WinnerAccIDLen = 0
-        self.WinnerAccID = ""
-        self.LoserAccIDLen = 0
-        self.LoserAccID = ""
-        self.WinnerID = 0
-        self.LoserID = 0
-        self.WinnerNameLen = 0
-        self.WinnerName = ""
-        self.LoserNameLen = 0
-        self.LoserName = ""
-        self.WinnerAddScore = 0
-        self.LoserAddScoreLen = 0
-        self.LoserAddScore = ""
-        self.WinnerWinCnt = 0
-        self.LoserWinCnt = 0
-        self.WinnerCWinCnt = 0
-        self.LuckyItemID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += len(self.TimeStr)
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += len(self.WinnerAccID)
-        length += 1
-        length += len(self.LoserAccID)
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.WinnerName)
-        length += 1
-        length += len(self.LoserName)
-        length += 2
-        length += 1
-        length += len(self.LoserAddScore)
-        length += 1
-        length += 1
-        length += 2
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.TimeLen)
-        data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr)
-        data = CommFunc.WriteDWORD(data, self.RoomID)
-        data = CommFunc.WriteBYTE(data, self.OverType)
-        data = CommFunc.WriteDWORD(data, self.RemainTime)
-        data = CommFunc.WriteBYTE(data, self.WinnerAccIDLen)
-        data = CommFunc.WriteString(data, self.WinnerAccIDLen, self.WinnerAccID)
-        data = CommFunc.WriteBYTE(data, self.LoserAccIDLen)
-        data = CommFunc.WriteString(data, self.LoserAccIDLen, self.LoserAccID)
-        data = CommFunc.WriteDWORD(data, self.WinnerID)
-        data = CommFunc.WriteDWORD(data, self.LoserID)
-        data = CommFunc.WriteBYTE(data, self.WinnerNameLen)
-        data = CommFunc.WriteString(data, self.WinnerNameLen, self.WinnerName)
-        data = CommFunc.WriteBYTE(data, self.LoserNameLen)
-        data = CommFunc.WriteString(data, self.LoserNameLen, self.LoserName)
-        data = CommFunc.WriteWORD(data, self.WinnerAddScore)
-        data = CommFunc.WriteBYTE(data, self.LoserAddScoreLen)
-        data = CommFunc.WriteString(data, self.LoserAddScoreLen, self.LoserAddScore)
-        data = CommFunc.WriteBYTE(data, self.WinnerWinCnt)
-        data = CommFunc.WriteBYTE(data, self.LoserWinCnt)
-        data = CommFunc.WriteWORD(data, self.WinnerCWinCnt)
-        data = CommFunc.WriteDWORD(data, self.LuckyItemID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                TimeLen:%d,
-                                TimeStr:%s,
-                                RoomID:%d,
-                                OverType:%d,
-                                RemainTime:%d,
-                                WinnerAccIDLen:%d,
-                                WinnerAccID:%s,
-                                LoserAccIDLen:%d,
-                                LoserAccID:%s,
-                                WinnerID:%d,
-                                LoserID:%d,
-                                WinnerNameLen:%d,
-                                WinnerName:%s,
-                                LoserNameLen:%d,
-                                LoserName:%s,
-                                WinnerAddScore:%d,
-                                LoserAddScoreLen:%d,
-                                LoserAddScore:%s,
-                                WinnerWinCnt:%d,
-                                LoserWinCnt:%d,
-                                WinnerCWinCnt:%d,
-                                LuckyItemID:%d
-                                '''\
-                                %(
-                                self.TimeLen,
-                                self.TimeStr,
-                                self.RoomID,
-                                self.OverType,
-                                self.RemainTime,
-                                self.WinnerAccIDLen,
-                                self.WinnerAccID,
-                                self.LoserAccIDLen,
-                                self.LoserAccID,
-                                self.WinnerID,
-                                self.LoserID,
-                                self.WinnerNameLen,
-                                self.WinnerName,
-                                self.LoserNameLen,
-                                self.LoserName,
-                                self.WinnerAddScore,
-                                self.LoserAddScoreLen,
-                                self.LoserAddScore,
-                                self.WinnerWinCnt,
-                                self.LoserWinCnt,
-                                self.WinnerCWinCnt,
-                                self.LuckyItemID
-                                )
-        return DumpString
-
-
-class  tagMergePKOverInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    PKOverList = list()    #(vector<tagMergePKOver> PKOverList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x27
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SeasonID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
         for i in range(self.Count):
-            temPKOverList = tagMergePKOver()
-            _pos = temPKOverList.ReadData(_lpData, _pos)
-            self.PKOverList.append(temPKOverList)
+            temPKBillboardList = tagGCCrossRealmPKBillboardData()
+            _pos = temPKBillboardList.ReadData(_lpData, _pos)
+            self.PKBillboardList.append(temPKBillboardList)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
-        self.Head.Cmd = 0xD1
-        self.Head.SubCmd = 0x27
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x05
+        self.ZoneID = 0
+        self.SeasonID = 0
         self.Count = 0
-        self.PKOverList = list()
+        self.PKBillboardList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
+        length += 1
+        length += 2
         for i in range(self.Count):
-            length += self.PKOverList[i].GetLength()
+            length += self.PKBillboardList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.SeasonID)
+        data = CommFunc.WriteWORD(data, self.Count)
         for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.PKOverList[i].GetLength(), self.PKOverList[i].GetBuffer())
+            data = CommFunc.WriteString(data, self.PKBillboardList[i].GetLength(), self.PKBillboardList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
+                                ZoneID:%d,
+                                SeasonID:%d,
                                 Count:%d,
-                                PKOverList:%s
+                                PKBillboardList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
+                                self.ZoneID,
+                                self.SeasonID,
                                 self.Count,
                                 "..."
                                 )
         return DumpString
 
 
-m_NAtagMergePKOverInfo=tagMergePKOverInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergePKOverInfo.Head.Cmd,m_NAtagMergePKOverInfo.Head.SubCmd))] = m_NAtagMergePKOverInfo
+m_NAtagGCCrossRealmPKBillboardInfo=tagGCCrossRealmPKBillboardInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKBillboardInfo.Head.Cmd,m_NAtagGCCrossRealmPKBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKBillboardInfo
 
 
 #------------------------------------------------------
-# D1 28 跨服PK赛季信息 #tagGCMergePKSeasonInfo
+# C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK
 
-class  tagGCMergePKSeasonInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SeasonID", c_int),    # 赛季ID
-                  ("SeasonStartTime", c_int),    # 赛季开始时间
-                  ("SeasonCycle", c_ubyte),    # 赛季周期天数
-                  ("IsSeasonEnd", c_ubyte),    # 赛季是否结束
-                  ]
+class  tagGCCrossRealmPKMatchPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 跨服名字
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    MaxHP = 0    #(DWORD MaxHP)// 默认满血
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xD1
-        self.SubCmd = 0x28
         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()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xD1
-        self.SubCmd = 0x28
-        self.SeasonID = 0
-        self.SeasonStartTime = 0
-        self.SeasonCycle = 0
-        self.IsSeasonEnd = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.MaxHP = 0
         return
 
     def GetLength(self):
-        return sizeof(tagGCMergePKSeasonInfo)
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += 2
+        length += 4
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.MaxHP)
+        return data
 
     def OutputString(self):
-        DumpString = '''// D1 28 跨服PK赛季信息 //tagGCMergePKSeasonInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SeasonID:%d,
-                                SeasonStartTime:%d,
-                                SeasonCycle:%d,
-                                IsSeasonEnd:%d
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                MaxHP:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SeasonID,
-                                self.SeasonStartTime,
-                                self.SeasonCycle,
-                                self.IsSeasonEnd
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.MaxHP
                                 )
         return DumpString
 
 
-m_NAtagGCMergePKSeasonInfo=tagGCMergePKSeasonInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMergePKSeasonInfo.Cmd,m_NAtagGCMergePKSeasonInfo.SubCmd))] = m_NAtagGCMergePKSeasonInfo
+class  tagGCCrossRealmPKMatchOK(Structure):
+    Head = tagHead()
+    RoomID = 0    #(WORD RoomID)// 房间ID
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 跨服名字
+    MatchPlayerCount = 0    #(BYTE MatchPlayerCount)
+    MatchPlayer = list()    #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RoomID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MatchPlayerCount):
+            temMatchPlayer = tagGCCrossRealmPKMatchPlayer()
+            _pos = temMatchPlayer.ReadData(_lpData, _pos)
+            self.MatchPlayer.append(temMatchPlayer)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x01
+        self.RoomID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.MatchPlayerCount = 0
+        self.MatchPlayer = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        for i in range(self.MatchPlayerCount):
+            length += self.MatchPlayer[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.RoomID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.MatchPlayerCount)
+        for i in range(self.MatchPlayerCount):
+            data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RoomID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                MatchPlayerCount:%d,
+                                MatchPlayer:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RoomID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.MatchPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKMatchOK=tagGCCrossRealmPKMatchOK()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKMatchOK.Head.Cmd,m_NAtagGCCrossRealmPKMatchOK.Head.SubCmd))] = m_NAtagGCCrossRealmPKMatchOK
 
 
 #------------------------------------------------------
-# D1 26 通知跨服PK续胜结果 #tagRecoverMergePKWinOK
+# C0 03 跨服PK战斗结果 #tagGCCrossRealmPKOverInfo
 
-class  tagRecoverMergePKWinOK(Structure):
+class  tagGCCrossRealmPKOverInfo(Structure):
+    Head = tagHead()
+    TimeStr = ""    #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss
+    OverType = 0    #(BYTE OverType)// 0-正常,1-有人离线
+    WinnerID = 0    #(DWORD WinnerID)// 胜方ID
+    RoundCount = 0    #(BYTE RoundCount)// PK回合数
+    RoundWinnerID = list()    #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
+    AddScore = 0    #(WORD AddScore)// 本场加分
+    Score = 0    #(WORD Score)// 当前积分
+    DanLV = 0    #(BYTE DanLV)// 当前段位
+    CWinCnt = 0    #(WORD CWinCnt)// 当前连胜数
+    TagNameLen = 0    #(BYTE TagNameLen)
+    TagName = ""    #(String TagName)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RoundCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.RoundWinnerID.append(value)
+        self.AddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x03
+        self.TimeStr = ""
+        self.OverType = 0
+        self.WinnerID = 0
+        self.RoundCount = 0
+        self.RoundWinnerID = list()
+        self.AddScore = 0
+        self.Score = 0
+        self.DanLV = 0
+        self.CWinCnt = 0
+        self.TagNameLen = 0
+        self.TagName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 19
+        length += 1
+        length += 4
+        length += 1
+        length += 4 * self.RoundCount
+        length += 2
+        length += 2
+        length += 1
+        length += 2
+        length += 1
+        length += len(self.TagName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 19, self.TimeStr)
+        data = CommFunc.WriteBYTE(data, self.OverType)
+        data = CommFunc.WriteDWORD(data, self.WinnerID)
+        data = CommFunc.WriteBYTE(data, self.RoundCount)
+        for i in range(self.RoundCount):
+            data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
+        data = CommFunc.WriteWORD(data, self.AddScore)
+        data = CommFunc.WriteWORD(data, self.Score)
+        data = CommFunc.WriteBYTE(data, self.DanLV)
+        data = CommFunc.WriteWORD(data, self.CWinCnt)
+        data = CommFunc.WriteBYTE(data, self.TagNameLen)
+        data = CommFunc.WriteString(data, self.TagNameLen, self.TagName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TimeStr:%s,
+                                OverType:%d,
+                                WinnerID:%d,
+                                RoundCount:%d,
+                                RoundWinnerID:%s,
+                                AddScore:%d,
+                                Score:%d,
+                                DanLV:%d,
+                                CWinCnt:%d,
+                                TagNameLen:%d,
+                                TagName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TimeStr,
+                                self.OverType,
+                                self.WinnerID,
+                                self.RoundCount,
+                                "...",
+                                self.AddScore,
+                                self.Score,
+                                self.DanLV,
+                                self.CWinCnt,
+                                self.TagNameLen,
+                                self.TagName
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKOverInfo=tagGCCrossRealmPKOverInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKOverInfo.Head.Cmd,m_NAtagGCCrossRealmPKOverInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKOverInfo
+
+
+#------------------------------------------------------
+# C0 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo
+
+class  tagGCCrossRealmPKSeason(Structure):
+    SeasonID = 0    #(WORD SeasonID)// 当前赛季ID
+    StartDate = ""    #(char StartDate[10])// 开始日期 yyyy-MM-dd
+    EndDate = ""    #(char EndDate[10])// 结束日期 yyyy-MM-dd
+    EndTime = ""    #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.SeasonID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.EndTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 2
+        length += 10
+        length += 10
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteWORD(data, self.SeasonID)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndDate)
+        data = CommFunc.WriteString(data, 5, self.EndTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                SeasonID:%d,
+                                StartDate:%s,
+                                EndDate:%s,
+                                EndTime:%s
+                                '''\
+                                %(
+                                self.SeasonID,
+                                self.StartDate,
+                                self.EndDate,
+                                self.EndTime
+                                )
+        return DumpString
+
+
+class  tagGCCrossRealmPKZone(Structure):
+    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
+    ZoneNameLen = 0    #(BYTE ZoneNameLen)
+    ZoneName = ""    #(String ZoneName)// 赛区名
+    SeasonCount = 0    #(WORD SeasonCount)
+    SeasonList = list()    #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen)
+        self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.SeasonCount):
+            temSeasonList = tagGCCrossRealmPKSeason()
+            _pos = temSeasonList.ReadData(_lpData, _pos)
+            self.SeasonList.append(temSeasonList)
+        return _pos
+
+    def Clear(self):
+        self.ZoneID = 0
+        self.ZoneNameLen = 0
+        self.ZoneName = ""
+        self.SeasonCount = 0
+        self.SeasonList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += len(self.ZoneName)
+        length += 2
+        for i in range(self.SeasonCount):
+            length += self.SeasonList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.ZoneNameLen)
+        data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName)
+        data = CommFunc.WriteWORD(data, self.SeasonCount)
+        for i in range(self.SeasonCount):
+            data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ZoneID:%d,
+                                ZoneNameLen:%d,
+                                ZoneName:%s,
+                                SeasonCount:%d,
+                                SeasonList:%s
+                                '''\
+                                %(
+                                self.ZoneID,
+                                self.ZoneNameLen,
+                                self.ZoneName,
+                                self.SeasonCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossRealmPKSeasonInfo(Structure):
+    Head = tagHead()
+    ZoneCount = 0    #(BYTE ZoneCount)// 赛区个数
+    ZoneList = list()    #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ZoneCount):
+            temZoneList = tagGCCrossRealmPKZone()
+            _pos = temZoneList.ReadData(_lpData, _pos)
+            self.ZoneList.append(temZoneList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x04
+        self.ZoneCount = 0
+        self.ZoneList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.ZoneCount):
+            length += self.ZoneList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneCount)
+        for i in range(self.ZoneCount):
+            data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneCount:%d,
+                                ZoneList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo
+
+
+#------------------------------------------------------
+# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState
+
+class  tagGCCrossRealmPKSeasonState(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("ZoneID", c_ubyte),    # 所属赛区ID
+                  ("SeasonID", c_ushort),    # 当前赛季ID
+                  ("SeasonState", c_ubyte),    # 赛季状态;0-未开启,1-开启中,2-已结束
+                  ("MatchState", c_ubyte),    # 匹配状态;0-未开启;1-开启中
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xD1
-        self.SubCmd = 0x26
+        self.Cmd = 0xC0
+        self.SubCmd = 0x06
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -8002,18 +8734,78 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xD1
-        self.SubCmd = 0x26
+        self.Cmd = 0xC0
+        self.SubCmd = 0x06
+        self.ZoneID = 0
+        self.SeasonID = 0
+        self.SeasonState = 0
+        self.MatchState = 0
         return
 
     def GetLength(self):
-        return sizeof(tagRecoverMergePKWinOK)
+        return sizeof(tagGCCrossRealmPKSeasonState)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// D1 26 通知跨服PK续胜结果 //tagRecoverMergePKWinOK:
+        DumpString = '''// C0 06 跨服PK本服赛季状态 //tagGCCrossRealmPKSeasonState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ZoneID:%d,
+                                SeasonID:%d,
+                                SeasonState:%d,
+                                MatchState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ZoneID,
+                                self.SeasonID,
+                                self.SeasonState,
+                                self.MatchState
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Cmd,m_NAtagGCCrossRealmPKSeasonState.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState
+
+
+#------------------------------------------------------
+# C0 02 跨服PK开始匹配 #tagGCCrossRealmPKStartMatch
+
+class  tagGCCrossRealmPKStartMatch(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x02
+        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 = 0xC0
+        self.SubCmd = 0x02
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossRealmPKStartMatch)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch:
                                 Cmd:%s,
                                 SubCmd:%s
                                 '''\
@@ -8024,8 +8816,8 @@
         return DumpString
 
 
-m_NAtagRecoverMergePKWinOK=tagRecoverMergePKWinOK()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagRecoverMergePKWinOK.Cmd,m_NAtagRecoverMergePKWinOK.SubCmd))] = m_NAtagRecoverMergePKWinOK
+m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
 
 
 #------------------------------------------------------
@@ -8074,6 +8866,118 @@
 
 m_NAtagMCChangeMapFail=tagMCChangeMapFail()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChangeMapFail.Cmd,m_NAtagMCChangeMapFail.SubCmd))] = m_NAtagMCChangeMapFail
+
+
+#------------------------------------------------------
+# A1 10 充值购买次数信息 #tagMCCoinToGoldCountInfo
+
+class  tagMCCoinToGoldCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RecordID", c_ubyte),    
+                  ("TodayPayCount", c_ushort),    # 今日已购买次数
+                  ("TotalPayCount", c_int),    # 累计总购买次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.RecordID = 0
+        self.TodayPayCount = 0
+        self.TotalPayCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCoinToGoldCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A1 10 充值购买次数信息 //tagMCCoinToGoldCountInfo:
+                                RecordID:%d,
+                                TodayPayCount:%d,
+                                TotalPayCount:%d
+                                '''\
+                                %(
+                                self.RecordID,
+                                self.TodayPayCount,
+                                self.TotalPayCount
+                                )
+        return DumpString
+
+
+class  tagMCCoinToGoldCountInfo(Structure):
+    Head = tagHead()
+    RecordCount = 0    #(BYTE RecordCount)
+    CTGCountInfoList = list()    #(vector<tagMCCoinToGoldCount> CTGCountInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA1
+        self.Head.SubCmd = 0x10
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temCTGCountInfoList = tagMCCoinToGoldCount()
+            _pos = temCTGCountInfoList.ReadData(_lpData, _pos)
+            self.CTGCountInfoList.append(temCTGCountInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA1
+        self.Head.SubCmd = 0x10
+        self.RecordCount = 0
+        self.CTGCountInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.CTGCountInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCount:%d,
+                                CTGCountInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCoinToGoldCountInfo=tagMCCoinToGoldCountInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCoinToGoldCountInfo.Head.Cmd,m_NAtagMCCoinToGoldCountInfo.Head.SubCmd))] = m_NAtagMCCoinToGoldCountInfo
 
 
 #------------------------------------------------------
@@ -8372,94 +9276,6 @@
 
 
 #------------------------------------------------------
-#A1 04 玩家经验加成 #tagMCPlayerExpRate
-
-class  tagMCPlayerExpRate(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SysExpRate", c_int),    #系统经验
-                  ("VipExpRate", c_int),    #VIP经验
-                  ("CaromExpRate", c_int),    #连斩经验
-                  ("FightExpRate", c_int),    #buff经验等
-                  ("ActionExpRate", c_int),    #节日活动经验
-                  ("WorldAverageExpRate", c_int),    #世界等级经验
-                  ("GameEventExpRate", c_int),    #小游戏事件经验倍率
-                  ("WeiClientExpRate", c_int),    #微端登录经验倍率
-                  ("NobleExpRate", c_int),    #贵族经验倍率
-                  ("CommMapExpRate", c_int),    #野外常规地图经验倍率
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA1
-        self.SubCmd = 0x04
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA1
-        self.SubCmd = 0x04
-        self.SysExpRate = 0
-        self.VipExpRate = 0
-        self.CaromExpRate = 0
-        self.FightExpRate = 0
-        self.ActionExpRate = 0
-        self.WorldAverageExpRate = 0
-        self.GameEventExpRate = 0
-        self.WeiClientExpRate = 0
-        self.NobleExpRate = 0
-        self.CommMapExpRate = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCPlayerExpRate)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A1 04 玩家经验加成 //tagMCPlayerExpRate:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SysExpRate:%d,
-                                VipExpRate:%d,
-                                CaromExpRate:%d,
-                                FightExpRate:%d,
-                                ActionExpRate:%d,
-                                WorldAverageExpRate:%d,
-                                GameEventExpRate:%d,
-                                WeiClientExpRate:%d,
-                                NobleExpRate:%d,
-                                CommMapExpRate:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SysExpRate,
-                                self.VipExpRate,
-                                self.CaromExpRate,
-                                self.FightExpRate,
-                                self.ActionExpRate,
-                                self.WorldAverageExpRate,
-                                self.GameEventExpRate,
-                                self.WeiClientExpRate,
-                                self.NobleExpRate,
-                                self.CommMapExpRate
-                                )
-        return DumpString
-
-
-m_NAtagMCPlayerExpRate=tagMCPlayerExpRate()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerExpRate.Cmd,m_NAtagMCPlayerExpRate.SubCmd))] = m_NAtagMCPlayerExpRate
-
-
-#------------------------------------------------------
 # A1 24 玩家初始化扩展信息 #tagMCPlayerInfo
 
 class  tagMCPlayerInfo(Structure):
@@ -8580,6 +9396,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("MapID", c_ushort),    
+                  ("FuncLineID", c_ushort),    #功能线路ID
                   ]
 
     def __init__(self):
@@ -8597,6 +9414,7 @@
         self.Cmd = 0xA1
         self.SubCmd = 0x26
         self.MapID = 0
+        self.FuncLineID = 0
         return
 
     def GetLength(self):
@@ -8609,12 +9427,14 @@
         DumpString = '''//A1 26 准备切换地图 //tagMCPrepareChangeMap:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                MapID:%d
+                                MapID:%d,
+                                FuncLineID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.MapID
+                                self.MapID,
+                                self.FuncLineID
                                 )
         return DumpString
 
@@ -8632,6 +9452,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("MapID", c_int),    
+                  ("FuncLineID", c_ushort),    #功能线路ID
                   ]
 
     def __init__(self):
@@ -8649,6 +9470,7 @@
         self.Cmd = 0xA1
         self.SubCmd = 0x27
         self.MapID = 0
+        self.FuncLineID = 0
         return
 
     def GetLength(self):
@@ -8661,12 +9483,14 @@
         DumpString = '''//A1 27 开始切换地图 //tagMCStartChangeMap:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                MapID:%d
+                                MapID:%d,
+                                FuncLineID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.MapID
+                                self.MapID,
+                                self.FuncLineID
                                 )
         return DumpString
 
@@ -9083,7 +9907,8 @@
     _pack_ = 1
     _fields_ = [
                   ("Type", c_ubyte),    #14铜钱,15经验
-                  ("BuyCnt", c_ubyte),    #已购买次数
+                  ("BuyCnt", c_ubyte),    #今日已购买次数
+                  ("HistoryBuyCnt", c_ubyte),    #历史已购买次数
                   ("LastFreeTime", c_int),    #上次的免费时间
                   ]
 
@@ -9099,6 +9924,7 @@
     def Clear(self):
         self.Type = 0
         self.BuyCnt = 0
+        self.HistoryBuyCnt = 0
         self.LastFreeTime = 0
         return
 
@@ -9112,11 +9938,13 @@
         DumpString = '''//A3 30 购买魔魂铜钱经验什么的通知 //tagMCBuySomething:
                                 Type:%d,
                                 BuyCnt:%d,
+                                HistoryBuyCnt:%d,
                                 LastFreeTime:%d
                                 '''\
                                 %(
                                 self.Type,
                                 self.BuyCnt,
+                                self.HistoryBuyCnt,
                                 self.LastFreeTime
                                 )
         return DumpString
@@ -9186,6 +10014,114 @@
 
 m_NAtagMCBuySomething=tagMCBuySomething()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuySomething.Head.Cmd,m_NAtagMCBuySomething.Head.SubCmd))] = m_NAtagMCBuySomething
+
+
+#------------------------------------------------------
+# A3 17 全身属性激活数量通知 #tagMCAllEquipAttrActiveInfo
+
+class  tagMCEquipActiveInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Type", c_ubyte),    # 0强化 1星数
+                  ("Cnt", c_int),    # 激活数量
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Type = 0
+        self.Cnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCEquipActiveInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 17 全身属性激活数量通知 //tagMCAllEquipAttrActiveInfo:
+                                Type:%d,
+                                Cnt:%d
+                                '''\
+                                %(
+                                self.Type,
+                                self.Cnt
+                                )
+        return DumpString
+
+
+class  tagMCAllEquipAttrActiveInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 个数
+    ActiveInfo = list()    #(vector<tagMCEquipActiveInfo> ActiveInfo)//信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x17
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temActiveInfo = tagMCEquipActiveInfo()
+            _pos = temActiveInfo.ReadData(_lpData, _pos)
+            self.ActiveInfo.append(temActiveInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x17
+        self.Count = 0
+        self.ActiveInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.ActiveInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.ActiveInfo[i].GetLength(), self.ActiveInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ActiveInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCAllEquipAttrActiveInfo=tagMCAllEquipAttrActiveInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAllEquipAttrActiveInfo.Head.Cmd,m_NAtagMCAllEquipAttrActiveInfo.Head.SubCmd))] = m_NAtagMCAllEquipAttrActiveInfo
 
 
 #------------------------------------------------------
@@ -9385,95 +10321,21 @@
 
 
 #------------------------------------------------------
-# A3 27 玩家命格信息 #tagMCBirthChartInfo
+# A3 24 通知绑玉转盘结果 #tagMCBindJadeWheelResult
 
-class  tagMCBirthChartInfo(Structure):
-    Head = tagHead()
-    OpenState = 0    #(DWORD OpenState)//命格孔状态, 按索引表示激活状态
-    Count = 0    #(BYTE Count)// 命格孔信息数
-    BirthChartDataList = list()    #(vector<DWORD> BirthChartDataList)// 命格孔数据信息, 数据与背包数据相同
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x27
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.OpenState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.BirthChartDataList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x27
-        self.OpenState = 0
-        self.Count = 0
-        self.BirthChartDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.OpenState)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteDWORD(data, self.BirthChartDataList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                OpenState:%d,
-                                Count:%d,
-                                BirthChartDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.OpenState,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCBirthChartInfo=tagMCBirthChartInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBirthChartInfo.Head.Cmd,m_NAtagMCBirthChartInfo.Head.SubCmd))] = m_NAtagMCBirthChartInfo
-
-
-#------------------------------------------------------
-# A3 47 当前精血和获取次数信息 #tagMCBloodAndGetNumInfo
-
-class  tagMCBloodAndGetNumInfo(Structure):
+class  tagMCBindJadeWheelResult(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("Blood", c_int),    # 精血
-                  ("GetNum", c_int),    # 当日获取次数
+                  ("Index", c_ubyte),    # 格子
+                  ("Cnt", c_ubyte),    #今日已转次数
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA3
-        self.SubCmd = 0x47
+        self.SubCmd = 0x24
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -9483,44 +10345,87 @@
 
     def Clear(self):
         self.Cmd = 0xA3
-        self.SubCmd = 0x47
-        self.Blood = 0
-        self.GetNum = 0
+        self.SubCmd = 0x24
+        self.Index = 0
+        self.Cnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCBloodAndGetNumInfo)
+        return sizeof(tagMCBindJadeWheelResult)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A3 47 当前精血和获取次数信息 //tagMCBloodAndGetNumInfo:
+        DumpString = '''// A3 24 通知绑玉转盘结果 //tagMCBindJadeWheelResult:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                Blood:%d,
-                                GetNum:%d
+                                Index:%d,
+                                Cnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.Blood,
-                                self.GetNum
+                                self.Index,
+                                self.Cnt
                                 )
         return DumpString
 
 
-m_NAtagMCBloodAndGetNumInfo=tagMCBloodAndGetNumInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBloodAndGetNumInfo.Cmd,m_NAtagMCBloodAndGetNumInfo.SubCmd))] = m_NAtagMCBloodAndGetNumInfo
+m_NAtagMCBindJadeWheelResult=tagMCBindJadeWheelResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBindJadeWheelResult.Cmd,m_NAtagMCBindJadeWheelResult.SubCmd))] = m_NAtagMCBindJadeWheelResult
 
 
 #------------------------------------------------------
 #A3 B7 当日累计攻击boss次数 #tagMCBOSSAttactCnt
 
+class  tagMCBossCntInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("BossType", c_ubyte),    #编号类型0-世界boss 1-boss之家
+                  ("KillCnt", c_int),    #击杀次数
+                  ("ItemAddCnt", c_int),    #物品增加次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.BossType = 0
+        self.KillCnt = 0
+        self.ItemAddCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBossCntInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt:
+                                BossType:%d,
+                                KillCnt:%d,
+                                ItemAddCnt:%d
+                                '''\
+                                %(
+                                self.BossType,
+                                self.KillCnt,
+                                self.ItemAddCnt
+                                )
+        return DumpString
+
+
 class  tagMCBOSSAttactCnt(Structure):
     Head = tagHead()
-    DataSize = 0    #(DWORD DataSize)
-    KillCntInfo = ""    #(String KillCntInfo)//'{编号:击杀次数}'
+    Cnt = 0    #(BYTE Cnt)
+    KillCntInfoList = list()    #(vector<tagMCBossCntInfo> KillCntInfoList)
     data = None
 
     def __init__(self):
@@ -9532,8 +10437,11 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.KillCntInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temKillCntInfoList = tagMCBossCntInfo()
+            _pos = temKillCntInfoList.ReadData(_lpData, _pos)
+            self.KillCntInfoList.append(temKillCntInfoList)
         return _pos
 
     def Clear(self):
@@ -9541,35 +10449,37 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0xB7
-        self.DataSize = 0
-        self.KillCntInfo = ""
+        self.Cnt = 0
+        self.KillCntInfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 4
-        length += len(self.KillCntInfo)
+        length += 1
+        for i in range(self.Cnt):
+            length += self.KillCntInfoList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.KillCntInfo)
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.KillCntInfoList[i].GetLength(), self.KillCntInfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                DataSize:%d,
-                                KillCntInfo:%s
+                                Cnt:%d,
+                                KillCntInfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.DataSize,
-                                self.KillCntInfo
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
@@ -9748,119 +10658,6 @@
 
 m_NAtagMCBuySomethingReward=tagMCBuySomethingReward()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuySomethingReward.Cmd,m_NAtagMCBuySomethingReward.SubCmd))] = m_NAtagMCBuySomethingReward
-
-
-#------------------------------------------------------
-# A3 B5 通知收集装备信息 #tagMCCollectEquipInfo
-
-class  tagMCCollectEquipInfo(Structure):
-    Head = tagHead()
-    DataSize = 0    #(DWORD DataSize)
-    CollectData = ""    #(String CollectData)//收集记录
-    ActiveSize = 0    #(DWORD ActiveSize)
-    ActiveData = ""    #(String ActiveData)//属性激活记录
-    GoalDataSize = 0    #(DWORD GoalDataSize)
-    GoalCollectData = ""    #(String GoalCollectData)//目标收集记录
-    GoalActiveData = 0    #(DWORD GoalActiveData)//目标属性激活记录
-    GoaAwardSize = 0    #(DWORD GoaAwardSize)
-    GoalAwardData = ""    #(String GoalAwardData)//目标收集领奖记录
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB5
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CollectData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
-        self.ActiveSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ActiveData,_pos = CommFunc.ReadString(_lpData, _pos,self.ActiveSize)
-        self.GoalDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoalCollectData,_pos = CommFunc.ReadString(_lpData, _pos,self.GoalDataSize)
-        self.GoalActiveData,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoaAwardSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoalAwardData,_pos = CommFunc.ReadString(_lpData, _pos,self.GoaAwardSize)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB5
-        self.DataSize = 0
-        self.CollectData = ""
-        self.ActiveSize = 0
-        self.ActiveData = ""
-        self.GoalDataSize = 0
-        self.GoalCollectData = ""
-        self.GoalActiveData = 0
-        self.GoaAwardSize = 0
-        self.GoalAwardData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += len(self.CollectData)
-        length += 4
-        length += len(self.ActiveData)
-        length += 4
-        length += len(self.GoalCollectData)
-        length += 4
-        length += 4
-        length += len(self.GoalAwardData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.CollectData)
-        data = CommFunc.WriteDWORD(data, self.ActiveSize)
-        data = CommFunc.WriteString(data, self.ActiveSize, self.ActiveData)
-        data = CommFunc.WriteDWORD(data, self.GoalDataSize)
-        data = CommFunc.WriteString(data, self.GoalDataSize, self.GoalCollectData)
-        data = CommFunc.WriteDWORD(data, self.GoalActiveData)
-        data = CommFunc.WriteDWORD(data, self.GoaAwardSize)
-        data = CommFunc.WriteString(data, self.GoaAwardSize, self.GoalAwardData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                DataSize:%d,
-                                CollectData:%s,
-                                ActiveSize:%d,
-                                ActiveData:%s,
-                                GoalDataSize:%d,
-                                GoalCollectData:%s,
-                                GoalActiveData:%d,
-                                GoaAwardSize:%d,
-                                GoalAwardData:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.DataSize,
-                                self.CollectData,
-                                self.ActiveSize,
-                                self.ActiveData,
-                                self.GoalDataSize,
-                                self.GoalCollectData,
-                                self.GoalActiveData,
-                                self.GoaAwardSize,
-                                self.GoalAwardData
-                                )
-        return DumpString
-
-
-m_NAtagMCCollectEquipInfo=tagMCCollectEquipInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectEquipInfo.Head.Cmd,m_NAtagMCCollectEquipInfo.Head.SubCmd))] = m_NAtagMCCollectEquipInfo
 
 
 #------------------------------------------------------
@@ -10166,8 +10963,10 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("CurValue", c_int),    # 当前总活跃度
+                  ("RealmPoint", c_int),    # 可领取修行点
                   ("StageIndex", c_ubyte),    # 当前阶段索引
                   ("AwardRecord", c_int),    # 领奖记录 按位存储
+                  ("ExtraPoint", c_int),    # 多倍活动获得的额外修行点
                   ]
 
     def __init__(self):
@@ -10185,8 +10984,10 @@
         self.Cmd = 0xA3
         self.SubCmd = 0x33
         self.CurValue = 0
+        self.RealmPoint = 0
         self.StageIndex = 0
         self.AwardRecord = 0
+        self.ExtraPoint = 0
         return
 
     def GetLength(self):
@@ -10200,81 +11001,25 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 CurValue:%d,
+                                RealmPoint:%d,
                                 StageIndex:%d,
-                                AwardRecord:%d
+                                AwardRecord:%d,
+                                ExtraPoint:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.CurValue,
+                                self.RealmPoint,
                                 self.StageIndex,
-                                self.AwardRecord
+                                self.AwardRecord,
+                                self.ExtraPoint
                                 )
         return DumpString
 
 
 m_NAtagMCDailyActivityInfoList=tagMCDailyActivityInfoList()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyActivityInfoList.Cmd,m_NAtagMCDailyActivityInfoList.SubCmd))] = m_NAtagMCDailyActivityInfoList
-
-
-#------------------------------------------------------
-#A3 A2 每日一购购物记录 # tagMCDailyGoldShop
-
-class  tagMCDailyGoldShop(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("BuyRecord", c_int),    # 当日购买记录, 按二进制位表示是否购买对应索引物品,0-未购买,1-已购买
-                  ("BuyCnt", c_int),    # 累积购买次数
-                  ("AwardRecord", c_int),    # 累积购买次数奖励记录
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xA2
-        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 = 0xA3
-        self.SubCmd = 0xA2
-        self.BuyRecord = 0
-        self.BuyCnt = 0
-        self.AwardRecord = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCDailyGoldShop)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 A2 每日一购购物记录 // tagMCDailyGoldShop:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                BuyRecord:%d,
-                                BuyCnt:%d,
-                                AwardRecord:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.BuyRecord,
-                                self.BuyCnt,
-                                self.AwardRecord
-                                )
-        return DumpString
-
-
-m_NAtagMCDailyGoldShop=tagMCDailyGoldShop()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGoldShop.Cmd,m_NAtagMCDailyGoldShop.SubCmd))] = m_NAtagMCDailyGoldShop
 
 
 #------------------------------------------------------
@@ -10289,6 +11034,7 @@
                   ("ReplenishSignCount", c_ubyte),    # 可以补签天数
                   ("IsSign", c_ubyte),    #当天是否已经签到,发送0和1
                   ("IsFrist", c_ubyte),    #是否是第一个月
+                  ("TotalSignCount", c_ushort),    #累计总签到天数
                   ]
 
     def __init__(self):
@@ -10309,6 +11055,7 @@
         self.ReplenishSignCount = 0
         self.IsSign = 0
         self.IsFrist = 0
+        self.TotalSignCount = 0
         return
 
     def GetLength(self):
@@ -10324,7 +11071,8 @@
                                 DaySignCount:%d,
                                 ReplenishSignCount:%d,
                                 IsSign:%d,
-                                IsFrist:%d
+                                IsFrist:%d,
+                                TotalSignCount:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -10332,7 +11080,8 @@
                                 self.DaySignCount,
                                 self.ReplenishSignCount,
                                 self.IsSign,
-                                self.IsFrist
+                                self.IsFrist,
+                                self.TotalSignCount
                                 )
         return DumpString
 
@@ -10342,20 +11091,21 @@
 
 
 #------------------------------------------------------
-# A3 B6 通知是否参与过天降钻石 #tagMCDiceRecord
+# A3 C1 神兽助战状态刷新 #tagMCDogzHelpbattleState
 
-class  tagMCDiceRecord(Structure):
+class  tagMCDogzHelpbattleState(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("IsJoin", c_ubyte),    #是否参加过
+                  ("DogzID", c_ubyte),    # 神兽ID
+                  ("BatteState", c_ubyte),    #是否已助战, 0否1是
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xA3
-        self.SubCmd = 0xB6
+        self.SubCmd = 0xC1
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -10365,32 +11115,179 @@
 
     def Clear(self):
         self.Cmd = 0xA3
-        self.SubCmd = 0xB6
-        self.IsJoin = 0
+        self.SubCmd = 0xC1
+        self.DogzID = 0
+        self.BatteState = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCDiceRecord)
+        return sizeof(tagMCDogzHelpbattleState)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A3 B6 通知是否参与过天降钻石 //tagMCDiceRecord:
+        DumpString = '''// A3 C1 神兽助战状态刷新 //tagMCDogzHelpbattleState:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                IsJoin:%d
+                                DogzID:%d,
+                                BatteState:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.IsJoin
+                                self.DogzID,
+                                self.BatteState
                                 )
         return DumpString
 
 
-m_NAtagMCDiceRecord=tagMCDiceRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceRecord.Cmd,m_NAtagMCDiceRecord.SubCmd))] = m_NAtagMCDiceRecord
+m_NAtagMCDogzHelpbattleState=tagMCDogzHelpbattleState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzHelpbattleState.Cmd,m_NAtagMCDogzHelpbattleState.SubCmd))] = m_NAtagMCDogzHelpbattleState
+
+
+#------------------------------------------------------
+# A3 C0 神兽信息 #tagMCDogzInfo
+
+class  tagMCDogzInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BuyHelpbattleCount", c_ubyte),    #额外购买的助战数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0xC0
+        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 = 0xA3
+        self.SubCmd = 0xC0
+        self.BuyHelpbattleCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCDogzInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 C0 神兽信息 //tagMCDogzInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BuyHelpbattleCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BuyHelpbattleCount
+                                )
+        return DumpString
+
+
+m_NAtagMCDogzInfo=tagMCDogzInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzInfo.Cmd,m_NAtagMCDogzInfo.SubCmd))] = m_NAtagMCDogzInfo
+
+
+#------------------------------------------------------
+# A3 1C 通知装备分解信息 #tagMCEquipDecomposeInfo
+
+class  tagMCEquipDecomposeInfo(Structure):
+    Head = tagHead()
+    LV = 0    #(WORD LV)// 等级
+    Exp = 0    #(DWORD Exp)// 升级经验
+    Seting = 0    #(DWORD Seting)// 操作数据记录
+    DecomposeCnt = 0    #(BYTE DecomposeCnt)// 分解件数进度
+    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 = 0x1C
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Seting,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DecomposeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        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 = 0x1C
+        self.LV = 0
+        self.Exp = 0
+        self.Seting = 0
+        self.DecomposeCnt = 0
+        self.GetItemLen = 0
+        self.GetItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 4
+        length += 4
+        length += 1
+        length += 2
+        length += len(self.GetItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.Exp)
+        data = CommFunc.WriteDWORD(data, self.Seting)
+        data = CommFunc.WriteBYTE(data, self.DecomposeCnt)
+        data = CommFunc.WriteWORD(data, self.GetItemLen)
+        data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                LV:%d,
+                                Exp:%d,
+                                Seting:%d,
+                                DecomposeCnt:%d,
+                                GetItemLen:%d,
+                                GetItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.LV,
+                                self.Exp,
+                                self.Seting,
+                                self.DecomposeCnt,
+                                self.GetItemLen,
+                                self.GetItemData
+                                )
+        return DumpString
+
+
+m_NAtagMCEquipDecomposeInfo=tagMCEquipDecomposeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeInfo.Head.Cmd,m_NAtagMCEquipDecomposeInfo.Head.SubCmd))] = m_NAtagMCEquipDecomposeInfo
 
 
 #------------------------------------------------------
@@ -10687,118 +11584,6 @@
 
 
 #------------------------------------------------------
-# A3 45 转生灵力信息 #tagMCExchangeReikiCnt
-
-class  tagMCExchangeReikiCnt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ExCnt", c_ubyte),    #今日降级兑换灵力次数
-                  ("AddChangeReikiCnt", c_ubyte),    #增加的兑换灵力次数
-                  ("CurReiki", c_int),    #当前灵力
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x45
-        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 = 0xA3
-        self.SubCmd = 0x45
-        self.ExCnt = 0
-        self.AddChangeReikiCnt = 0
-        self.CurReiki = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCExchangeReikiCnt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 45 转生灵力信息 //tagMCExchangeReikiCnt:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ExCnt:%d,
-                                AddChangeReikiCnt:%d,
-                                CurReiki:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ExCnt,
-                                self.AddChangeReikiCnt,
-                                self.CurReiki
-                                )
-        return DumpString
-
-
-m_NAtagMCExchangeReikiCnt=tagMCExchangeReikiCnt()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCExchangeReikiCnt.Cmd,m_NAtagMCExchangeReikiCnt.SubCmd))] = m_NAtagMCExchangeReikiCnt
-
-
-#------------------------------------------------------
-#A3 A4 表情包开通状态#tagMCFacePackageState
-
-class  tagMCFacePackageState(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PackageInfo", c_int),    # 按二进制位标示表情包开启状态
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xA4
-        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 = 0xA3
-        self.SubCmd = 0xA4
-        self.PackageInfo = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFacePackageState)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 A4 表情包开通状态//tagMCFacePackageState:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PackageInfo:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PackageInfo
-                                )
-        return DumpString
-
-
-m_NAtagMCFacePackageState=tagMCFacePackageState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFacePackageState.Cmd,m_NAtagMCFacePackageState.SubCmd))] = m_NAtagMCFacePackageState
-
-
-#------------------------------------------------------
 # A3 16 仙盟活跃信息通知 #tagMCFamilyActivityInfo
 
 class  tagMCFamilyActionCnt(Structure):
@@ -10916,18 +11701,15 @@
 #------------------------------------------------------
 #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
 
-class  tagMCFBEncourageInfo(Structure):
+class  tagMCFBEncourageCnt(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LV", c_ubyte),    # 当前鼓舞等级
+                  ("MoneyType", c_ubyte),    # 金钱类型
+                  ("EncourageCnt", c_ubyte),    # 当前鼓舞次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0A
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -10936,33 +11718,92 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0A
-        self.LV = 0
+        self.MoneyType = 0
+        self.EncourageCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCFBEncourageInfo)
+        return sizeof(tagMCFBEncourageCnt)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''//A3 0A 副本鼓舞信息通知 //tagMCFBEncourageInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LV:%d
+                                MoneyType:%d,
+                                EncourageCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LV
+                                self.MoneyType,
+                                self.EncourageCnt
+                                )
+        return DumpString
+
+
+class  tagMCFBEncourageInfo(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)// 
+    InfoList = list()    #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x0A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temInfoList = tagMCFBEncourageCnt()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x0A
+        self.Cnt = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Cnt):
+            length += self.InfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCFBEncourageInfo=tagMCFBEncourageInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Cmd,m_NAtagMCFBEncourageInfo.SubCmd))] = m_NAtagMCFBEncourageInfo
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Head.Cmd,m_NAtagMCFBEncourageInfo.Head.SubCmd))] = m_NAtagMCFBEncourageInfo
 
 
 #------------------------------------------------------
@@ -11089,6 +11930,121 @@
 
 
 #------------------------------------------------------
+# A3 18 极品白拿信息 #tagMCFreeGoodsInfo
+
+class  tagMCFreeGoods(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ID", c_ubyte),    # 礼包ID
+                  ("BuyState", c_int),    # 购买状态 0-未购买 1-已领返还 time值-购买时间
+                  ]
+
+    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.ID = 0
+        self.BuyState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFreeGoods)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 18 极品白拿信息 //tagMCFreeGoodsInfo:
+                                ID:%d,
+                                BuyState:%d
+                                '''\
+                                %(
+                                self.ID,
+                                self.BuyState
+                                )
+        return DumpString
+
+
+class  tagMCFreeGoodsInfo(Structure):
+    Head = tagHead()
+    OpenTime = 0    #(DWORD OpenTime)// 活动开启时间
+    Count = 0    #(BYTE Count)// 个数
+    FreeGoodsList = list()    #(vector<tagMCFreeGoods> FreeGoodsList)// 信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OpenTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temFreeGoodsList = tagMCFreeGoods()
+            _pos = temFreeGoodsList.ReadData(_lpData, _pos)
+            self.FreeGoodsList.append(temFreeGoodsList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x18
+        self.OpenTime = 0
+        self.Count = 0
+        self.FreeGoodsList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.FreeGoodsList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OpenTime)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.FreeGoodsList[i].GetLength(), self.FreeGoodsList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OpenTime:%d,
+                                Count:%d,
+                                FreeGoodsList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OpenTime,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFreeGoodsInfo=tagMCFreeGoodsInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFreeGoodsInfo.Head.Cmd,m_NAtagMCFreeGoodsInfo.Head.SubCmd))] = m_NAtagMCFreeGoodsInfo
+
+
+#------------------------------------------------------
 # A3 22 功能NPC已采集次数 #tagMCFuncNPCCollectionCnt
 
 class  tagMCFuncNPCCollectionCnt(Structure):
@@ -11156,6 +12112,7 @@
     _fields_ = [
                   ("FuncID", c_ubyte),    # 功能ID
                   ("State", c_ubyte),    # 是否开启
+                  ("AwardState", c_ubyte),    # 是否已领奖励
                   ]
 
     def __init__(self):
@@ -11170,6 +12127,7 @@
     def Clear(self):
         self.FuncID = 0
         self.State = 0
+        self.AwardState = 0
         return
 
     def GetLength(self):
@@ -11181,11 +12139,13 @@
     def OutputString(self):
         DumpString = '''//A3 02 功能开通状态 //tagMCFuncOpenStateList:
                                 FuncID:%d,
-                                State:%d
+                                State:%d,
+                                AwardState:%d
                                 '''\
                                 %(
                                 self.FuncID,
-                                self.State
+                                self.State,
+                                self.AwardState
                                 )
         return DumpString
 
@@ -11254,6 +12214,73 @@
 
 m_NAtagMCFuncOpenStateList=tagMCFuncOpenStateList()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncOpenStateList.Head.Cmd,m_NAtagMCFuncOpenStateList.Head.SubCmd))] = m_NAtagMCFuncOpenStateList
+
+
+#------------------------------------------------------
+# A3 1E 玩家聚魂孔信息 #tagMCGatherSoulHoleInfo
+
+class  tagMCGatherSoulHoleInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 孔信息数
+    GatherSoulDataList = list()    #(vector<DWORD> GatherSoulDataList)// 孔数据信息, 数据与背包数据相同
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x1E
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.GatherSoulDataList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x1E
+        self.Count = 0
+        self.GatherSoulDataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.Count
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteDWORD(data, self.GatherSoulDataList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                GatherSoulDataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCGatherSoulHoleInfo=tagMCGatherSoulHoleInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGatherSoulHoleInfo.Head.Cmd,m_NAtagMCGatherSoulHoleInfo.Head.SubCmd))] = m_NAtagMCGatherSoulHoleInfo
 
 
 #------------------------------------------------------
@@ -11550,272 +12577,6 @@
 
 
 #------------------------------------------------------
-#A3 07 该组玩家激活的卡片等级信息 #tagMCGroupMonsterTags
-
-class  tagMCGroupMonsterTags(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MonsterTags1", c_int),    #字典一中的数据(以数位存卡片等级)
-                  ("MonsterTags2", c_int),    #字典二中的数据
-                  ("GroupIndex", c_ubyte),    #怪物组别索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x07
-        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 = 0xA3
-        self.SubCmd = 0x07
-        self.MonsterTags1 = 0
-        self.MonsterTags2 = 0
-        self.GroupIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCGroupMonsterTags)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 07 该组玩家激活的卡片等级信息 //tagMCGroupMonsterTags:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MonsterTags1:%d,
-                                MonsterTags2:%d,
-                                GroupIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MonsterTags1,
-                                self.MonsterTags2,
-                                self.GroupIndex
-                                )
-        return DumpString
-
-
-m_NAtagMCGroupMonsterTags=tagMCGroupMonsterTags()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGroupMonsterTags.Cmd,m_NAtagMCGroupMonsterTags.SubCmd))] = m_NAtagMCGroupMonsterTags
-
-
-#------------------------------------------------------
-# A3 B1 守护激活信息 #tagMCGuardData
-
-class  tagMCGuard(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("GuardID", c_int),    #守护ID
-                  ("StarLV", c_ubyte),    # 星级(从0开始)
-                  ("ClassLV", c_ubyte),    # 当前品质等级(0为未激活)
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xB1
-        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 = 0xA3
-        self.SubCmd = 0xB1
-        self.GuardID = 0
-        self.StarLV = 0
-        self.ClassLV = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCGuard)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 B1 守护激活信息 //tagMCGuardData:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                GuardID:%d,
-                                StarLV:%d,
-                                ClassLV:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.GuardID,
-                                self.StarLV,
-                                self.ClassLV
-                                )
-        return DumpString
-
-
-class  tagMCGuardData(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)// 守护信息个数
-    InfoList = list()    #(vector<tagMCGuard> InfoList)// 守护信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB1
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temInfoList = tagMCGuard()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xB1
-        self.Count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.InfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCGuardData=tagMCGuardData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuardData.Head.Cmd,m_NAtagMCGuardData.Head.SubCmd))] = m_NAtagMCGuardData
-
-
-#------------------------------------------------------
-# A3 29 魔方寻宝信息 #tagMCMagicTreasureInfo
-
-class  tagMCMagicTreasureInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MTCnt", c_int),    # 今日已寻宝次数
-                  ("GiftState", c_int),    # 寻宝次数返利领取状态, 按位表示0-未领, 1-已领
-                  ("SpecialType", c_int),    # 特殊寻宝活动类型
-                  ("CurLucky", c_int),    # 当前幸运值
-                  ("LuckyTime", c_int),    # 幸运寻宝开始时间, time值
-                  ("CurFreeCnt", c_ubyte),    # 当前可用免费次数
-                  ("OLTotalFreeCnt", c_ubyte),    # 今日在线时长总累计免费次数
-                  ("OLFreeTick", c_int),    # 单次在线奖励次数累计时长, 毫秒
-                  ("OLFreeLastRefreshTick", c_int),    # 上次刷新在线奖励寻宝次数tick
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x29
-        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 = 0xA3
-        self.SubCmd = 0x29
-        self.MTCnt = 0
-        self.GiftState = 0
-        self.SpecialType = 0
-        self.CurLucky = 0
-        self.LuckyTime = 0
-        self.CurFreeCnt = 0
-        self.OLTotalFreeCnt = 0
-        self.OLFreeTick = 0
-        self.OLFreeLastRefreshTick = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMagicTreasureInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 29 魔方寻宝信息 //tagMCMagicTreasureInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MTCnt:%d,
-                                GiftState:%d,
-                                SpecialType:%d,
-                                CurLucky:%d,
-                                LuckyTime:%d,
-                                CurFreeCnt:%d,
-                                OLTotalFreeCnt:%d,
-                                OLFreeTick:%d,
-                                OLFreeLastRefreshTick:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MTCnt,
-                                self.GiftState,
-                                self.SpecialType,
-                                self.CurLucky,
-                                self.LuckyTime,
-                                self.CurFreeCnt,
-                                self.OLTotalFreeCnt,
-                                self.OLFreeTick,
-                                self.OLFreeLastRefreshTick
-                                )
-        return DumpString
-
-
-m_NAtagMCMagicTreasureInfo=tagMCMagicTreasureInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicTreasureInfo.Cmd,m_NAtagMCMagicTreasureInfo.SubCmd))] = m_NAtagMCMagicTreasureInfo
-
-
-#------------------------------------------------------
 # A3 12 通知玩家法宝信息 #tagMCMagicWeaponData
 
 class  tagMCMagicWeaponData(Structure):
@@ -11880,6 +12641,130 @@
 
 m_NAtagMCMagicWeaponData=tagMCMagicWeaponData()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponData.Head.Cmd,m_NAtagMCMagicWeaponData.Head.SubCmd))] = m_NAtagMCMagicWeaponData
+
+
+#------------------------------------------------------
+# A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo
+
+class  tagMCMagicWeaponInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("MWID", c_int),    
+                  ("LV", c_ubyte),    
+                  ("Exp", c_int),    
+                  ("State", c_ubyte),    #是否点击法宝认主
+                  ("FBPassLV", c_ubyte),    #副本关卡
+                  ("IsWear", c_ubyte),    #是否佩戴(仅适用王者法宝)
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.MWID = 0
+        self.LV = 0
+        self.Exp = 0
+        self.State = 0
+        self.FBPassLV = 0
+        self.IsWear = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMagicWeaponInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 52 法宝等级信息 //tagMCMagicWeaponLVInfo:
+                                MWID:%d,
+                                LV:%d,
+                                Exp:%d,
+                                State:%d,
+                                FBPassLV:%d,
+                                IsWear:%d
+                                '''\
+                                %(
+                                self.MWID,
+                                self.LV,
+                                self.Exp,
+                                self.State,
+                                self.FBPassLV,
+                                self.IsWear
+                                )
+        return DumpString
+
+
+class  tagMCMagicWeaponLVInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 信息个数
+    InfoList = list()    #(vector<tagMCMagicWeaponInfo> InfoList)// 信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x52
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temInfoList = tagMCMagicWeaponInfo()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x52
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.InfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCMagicWeaponLVInfo=tagMCMagicWeaponLVInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponLVInfo.Head.Cmd,m_NAtagMCMagicWeaponLVInfo.Head.SubCmd))] = m_NAtagMCMagicWeaponLVInfo
 
 
 #------------------------------------------------------
@@ -12406,18 +13291,69 @@
 
 
 #------------------------------------------------------
-#A3 AB 抽取图鉴卡片结果 #tagCMMonsterCardLottery
+# A3 53 法宝特权数据 #tagMCMWPrivilegeDataInfo
 
-class  tagCMMonsterCardLottery(Structure):
+class  tagMCMWPrivilegeData(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PriID", c_int),    # 特权ID
+                  ("State", c_ubyte),    #激活状态
+                  ("CurValue", c_int),    #当前总进度
+                  ("GotValue", c_int),    #已领取进度
+                  ("ItemAwardState", c_ubyte),    #物品奖励是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.PriID = 0
+        self.State = 0
+        self.CurValue = 0
+        self.GotValue = 0
+        self.ItemAwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMWPrivilegeData)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 53 法宝特权数据 //tagMCMWPrivilegeDataInfo:
+                                PriID:%d,
+                                State:%d,
+                                CurValue:%d,
+                                GotValue:%d,
+                                ItemAwardState:%d
+                                '''\
+                                %(
+                                self.PriID,
+                                self.State,
+                                self.CurValue,
+                                self.GotValue,
+                                self.ItemAwardState
+                                )
+        return DumpString
+
+
+class  tagMCMWPrivilegeDataInfo(Structure):
     Head = tagHead()
-    Count = 0    #(BYTE Count)//抽奖结果数
-    ResultList = list()    #(vector<DWORD> ResultList)//抽奖结果列表size = Count    
+    Count = 0    #(BYTE Count)// 信息个数
+    InfoList = list()    #(vector<tagMCMWPrivilegeData> InfoList)// 信息列表
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xAB
+        self.Head.SubCmd = 0x53
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
@@ -12425,24 +13361,26 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.ResultList.append(value)
+            temInfoList = tagMCMWPrivilegeData()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xAB
+        self.Head.SubCmd = 0x53
         self.Count = 0
-        self.ResultList = list()
+        self.InfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        length += 4 * self.Count
+        for i in range(self.Count):
+            length += self.InfoList[i].GetLength()
 
         return length
 
@@ -12451,14 +13389,14 @@
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
         data = CommFunc.WriteBYTE(data, self.Count)
         for i in range(self.Count):
-            data = CommFunc.WriteDWORD(data, self.ResultList[i])
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
                                 Count:%d,
-                                ResultList:%s
+                                InfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -12468,64 +13406,8 @@
         return DumpString
 
 
-m_NAtagCMMonsterCardLottery=tagCMMonsterCardLottery()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMonsterCardLottery.Head.Cmd,m_NAtagCMMonsterCardLottery.Head.SubCmd))] = m_NAtagCMMonsterCardLottery
-
-
-#------------------------------------------------------
-#A3 06 怪物图鉴馆等级,经验信息 #tagMCMonsterLabInfo
-
-class  tagMCMonsterLabInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LabLV", c_int),    #图鉴馆等级
-                  ("LabExp", c_int),    #图鉴馆经验
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x06
-        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 = 0xA3
-        self.SubCmd = 0x06
-        self.LabLV = 0
-        self.LabExp = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMonsterLabInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 06 怪物图鉴馆等级,经验信息 //tagMCMonsterLabInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LabLV:%d,
-                                LabExp:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LabLV,
-                                self.LabExp
-                                )
-        return DumpString
-
-
-m_NAtagMCMonsterLabInfo=tagMCMonsterLabInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMonsterLabInfo.Cmd,m_NAtagMCMonsterLabInfo.SubCmd))] = m_NAtagMCMonsterLabInfo
+m_NAtagMCMWPrivilegeDataInfo=tagMCMWPrivilegeDataInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMWPrivilegeDataInfo.Head.Cmd,m_NAtagMCMWPrivilegeDataInfo.Head.SubCmd))] = m_NAtagMCMWPrivilegeDataInfo
 
 
 #------------------------------------------------------
@@ -12534,16 +13416,12 @@
 class  tagMCNPCIDCollectionCnt(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
                   ("NPCID", c_int),    #NPCID
                   ("CollectionCnt", c_ubyte),    #已采集次数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x26
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -12552,8 +13430,6 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x26
         self.NPCID = 0
         self.CollectionCnt = 0
         return
@@ -12566,14 +13442,10 @@
 
     def OutputString(self):
         DumpString = '''// A3 26 NPCID已采集次数信息 //tagMCNPCIDCollectionCntInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
                                 NPCID:%d,
                                 CollectionCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
                                 self.NPCID,
                                 self.CollectionCnt
                                 )
@@ -12721,12 +13593,65 @@
 
 
 #------------------------------------------------------
+# A3 19 分包下载奖励记录 #tagMCPackDownloadRecord
+
+class  tagMCPackDownloadRecord(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Record", c_ubyte),    #0-未领取 1-已领取    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x19
+        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 = 0xA3
+        self.SubCmd = 0x19
+        self.Record = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCPackDownloadRecord)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 19 分包下载奖励记录 //tagMCPackDownloadRecord:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Record:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Record
+                                )
+        return DumpString
+
+
+m_NAtagMCPackDownloadRecord=tagMCPackDownloadRecord()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPackDownloadRecord.Cmd,m_NAtagMCPackDownloadRecord.SubCmd))] = m_NAtagMCPackDownloadRecord
+
+
+#------------------------------------------------------
 # A3 20 玩家副本相关信息 #tagMCPlayerFBInfoData
 
 class  tagMCFBInfo(Structure):
     FBID = 0    #(DWORD FBID)//fbId
     EnterCnt = 0    #(WORD EnterCnt)//当日进入次数
     RecoverCnt = 0    #(WORD RecoverCnt)//找回次数
+    ItemAddCnt = 0    #(WORD ItemAddCnt)//物品增加次数
     PassGradeCnt = 0    #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID
     PassGrade = list()    #(vector<DWORD> PassGrade)//副本线路对应星级值列表
     data = None
@@ -12740,6 +13665,7 @@
         self.FBID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.EnterCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RecoverCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemAddCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PassGradeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.PassGradeCnt):
             value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
@@ -12750,6 +13676,7 @@
         self.FBID = 0
         self.EnterCnt = 0
         self.RecoverCnt = 0
+        self.ItemAddCnt = 0
         self.PassGradeCnt = 0
         self.PassGrade = list()
         return
@@ -12757,6 +13684,7 @@
     def GetLength(self):
         length = 0
         length += 4
+        length += 2
         length += 2
         length += 2
         length += 1
@@ -12769,6 +13697,7 @@
         data = CommFunc.WriteDWORD(data, self.FBID)
         data = CommFunc.WriteWORD(data, self.EnterCnt)
         data = CommFunc.WriteWORD(data, self.RecoverCnt)
+        data = CommFunc.WriteWORD(data, self.ItemAddCnt)
         data = CommFunc.WriteBYTE(data, self.PassGradeCnt)
         for i in range(self.PassGradeCnt):
             data = CommFunc.WriteDWORD(data, self.PassGrade[i])
@@ -12779,6 +13708,7 @@
                                 FBID:%d,
                                 EnterCnt:%d,
                                 RecoverCnt:%d,
+                                ItemAddCnt:%d,
                                 PassGradeCnt:%d,
                                 PassGrade:%s
                                 '''\
@@ -12786,6 +13716,7 @@
                                 self.FBID,
                                 self.EnterCnt,
                                 self.RecoverCnt,
+                                self.ItemAddCnt,
                                 self.PassGradeCnt,
                                 "..."
                                 )
@@ -12867,6 +13798,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("LVAwardGetRecord", c_int),    # 按二进制位标示领取记录,每位对应的等级在配表中配置,服务端客户端对应
+                  ("VIPAwardRecord", c_int),    # 按二进制位标示vip领取记录,每位对应的等级在配表中配置,服务端客户端对应
                   ]
 
     def __init__(self):
@@ -12884,6 +13816,7 @@
         self.Cmd = 0xA3
         self.SubCmd = 0x0B
         self.LVAwardGetRecord = 0
+        self.VIPAwardRecord = 0
         return
 
     def GetLength(self):
@@ -12896,12 +13829,14 @@
         DumpString = '''//A3 0B 玩家等级奖励领取记录信息 //tagMCPlayerLVAwardGetRecord:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                LVAwardGetRecord:%d
+                                LVAwardGetRecord:%d,
+                                VIPAwardRecord:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.LVAwardGetRecord
+                                self.LVAwardGetRecord,
+                                self.VIPAwardRecord
                                 )
         return DumpString
 
@@ -13106,58 +14041,6 @@
 
 
 #------------------------------------------------------
-#A3 0E 玩家累计签到次数 # tagMCPlayerSignCntTotal
-
-class  tagMCPlayerSignCntTotal(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SignCount", c_ubyte),    # 累计签到次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0E
-        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 = 0xA3
-        self.SubCmd = 0x0E
-        self.SignCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCPlayerSignCntTotal)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 0E 玩家累计签到次数 // tagMCPlayerSignCntTotal:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SignCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SignCount
-                                )
-        return DumpString
-
-
-m_NAtagMCPlayerSignCntTotal=tagMCPlayerSignCntTotal()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerSignCntTotal.Cmd,m_NAtagMCPlayerSignCntTotal.SubCmd))] = m_NAtagMCPlayerSignCntTotal
-
-
-#------------------------------------------------------
 # A3 BF 通知客户端炼丹炉信息 #tagMCPlayerStoveMsg
 
 class  tagMCPlayerStoveMsg(Structure):
@@ -13218,18 +14101,21 @@
 
 
 #------------------------------------------------------
-#A3 38    新符文系统符文信息#tagMCPropEnhanceInfo
+# A3 21 祈福丹药结果 #tagMCPrayElixirResult
 
-class  tagPropEnhanceStone(Structure):
+class  tagMCPrayElixirResult(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("index", c_ubyte),    #符文索引
-                  ("LV", c_ubyte),    #当前等级
-                  ("Exp", c_int),    #当前经验    
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ItemID", c_int),    # 物品ID
+                  ("PrayCnt", c_ubyte),    # 今日祈福次数
                   ]
 
     def __init__(self):
         self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x21
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -13238,95 +14124,36 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.index = 0
-        self.LV = 0
-        self.Exp = 0
+        self.Cmd = 0xA3
+        self.SubCmd = 0x21
+        self.ItemID = 0
+        self.PrayCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagPropEnhanceStone)
+        return sizeof(tagMCPrayElixirResult)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A3 38    新符文系统符文信息//tagMCPropEnhanceInfo:
-                                index:%d,
-                                LV:%d,
-                                Exp:%d
+        DumpString = '''// A3 21 祈福丹药结果 //tagMCPrayElixirResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ItemID:%d,
+                                PrayCnt:%d
                                 '''\
                                 %(
-                                self.index,
-                                self.LV,
-                                self.Exp
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ItemID,
+                                self.PrayCnt
                                 )
         return DumpString
 
 
-class  tagMCPropEnhanceInfo(Structure):
-    Head = tagHead()
-    count = 0    #(BYTE count)//符文信息个数
-    InfoList = list()    #(vector<tagPropEnhanceStone> InfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x38
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.count):
-            temInfoList = tagPropEnhanceStone()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x38
-        self.count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.count):
-            length += self.InfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.count)
-        for i in range(self.count):
-            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCPropEnhanceInfo=tagMCPropEnhanceInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPropEnhanceInfo.Head.Cmd,m_NAtagMCPropEnhanceInfo.Head.SubCmd))] = m_NAtagMCPropEnhanceInfo
+m_NAtagMCPrayElixirResult=tagMCPrayElixirResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrayElixirResult.Cmd,m_NAtagMCPrayElixirResult.SubCmd))] = m_NAtagMCPrayElixirResult
 
 
 #------------------------------------------------------
@@ -13338,7 +14165,8 @@
                   ("Index", c_ubyte),    # 找回项索引
                   ("RecoverCnt", c_ubyte),    # 可找回次数
                   ("ExtraCnt", c_ubyte),    # VIP额外次数
-                  ("ExtraData", c_ubyte),    # 额外参数
+                  ("ExtraData", c_ubyte),    # 额外参数1
+                  ("ExtraData2", c_ubyte),    # 额外参数2
                   ]
 
     def __init__(self):
@@ -13355,6 +14183,7 @@
         self.RecoverCnt = 0
         self.ExtraCnt = 0
         self.ExtraData = 0
+        self.ExtraData2 = 0
         return
 
     def GetLength(self):
@@ -13368,13 +14197,15 @@
                                 Index:%d,
                                 RecoverCnt:%d,
                                 ExtraCnt:%d,
-                                ExtraData:%d
+                                ExtraData:%d,
+                                ExtraData2:%d
                                 '''\
                                 %(
                                 self.Index,
                                 self.RecoverCnt,
                                 self.ExtraCnt,
-                                self.ExtraData
+                                self.ExtraData,
+                                self.ExtraData2
                                 )
         return DumpString
 
@@ -13764,10 +14595,49 @@
 #------------------------------------------------------
 #A3 42  成就完成领奖记录列表 #tagMCSuccessFinishAwardRecordList
 
+class  tagMCSuccessFinishAwardRecord(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个succid   0-30为0, 31-61为1..
+                  ("Record", c_int),    #对应是否领取值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.RecordIndex = 0
+        self.Record = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSuccessFinishAwardRecord)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//A3 42  成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList:
+                                RecordIndex:%d,
+                                Record:%d
+                                '''\
+                                %(
+                                self.RecordIndex,
+                                self.Record
+                                )
+        return DumpString
+
+
 class  tagMCSuccessFinishAwardRecordList(Structure):
     Head = tagHead()
-    RecordCnt = 0    #(BYTE RecordCnt)//记录值对应个数, 每个key存31个succid
-    RecordList = list()    #(vector<DWORD> RecordList)//对应是否领取值列表
+    RecordCnt = 0    #(WORD RecordCnt)//记录个数
+    RecordList = list()    #(vector<tagMCSuccessFinishAwardRecord> RecordList)//记录列表
     data = None
 
     def __init__(self):
@@ -13779,10 +14649,11 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.RecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         for i in range(self.RecordCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.RecordList.append(value)
+            temRecordList = tagMCSuccessFinishAwardRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
         return _pos
 
     def Clear(self):
@@ -13797,17 +14668,18 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 1
-        length += 4 * self.RecordCnt
+        length += 2
+        for i in range(self.RecordCnt):
+            length += self.RecordList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RecordCnt)
+        data = CommFunc.WriteWORD(data, self.RecordCnt)
         for i in range(self.RecordCnt):
-            data = CommFunc.WriteDWORD(data, self.RecordList[i])
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
         return data
 
     def OutputString(self):
@@ -13832,39 +14704,59 @@
 # A3 40  成就信息列表 #tagMCSuccessInfoList
 
 class  tagMCSuccessInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("SuccID", c_int),    #成就ID
-                  ("CntValue", c_int),    #当前完成进度值
-                  ]
+    SuccType = 0    #(WORD SuccType)//成就类型
+    Len = 0    #(WORD Len)//条件长度
+    Condition = ""    #(String Condition)//成就条件
+    CntValue = 0    #(DWORD CntValue)//当前完成进度值
+    data = None
 
     def __init__(self):
         self.Clear()
         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()
+        self.SuccType,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Condition,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
+        self.CntValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
 
     def Clear(self):
-        self.SuccID = 0
+        self.SuccType = 0
+        self.Len = 0
+        self.Condition = ""
         self.CntValue = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCSuccessInfo)
+        length = 0
+        length += 2
+        length += 2
+        length += len(self.Condition)
+        length += 4
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteWORD(data, self.SuccType)
+        data = CommFunc.WriteWORD(data, self.Len)
+        data = CommFunc.WriteString(data, self.Len, self.Condition)
+        data = CommFunc.WriteDWORD(data, self.CntValue)
+        return data
 
     def OutputString(self):
-        DumpString = '''// A3 40  成就信息列表 //tagMCSuccessInfoList:
-                                SuccID:%d,
+        DumpString = '''
+                                SuccType:%d,
+                                Len:%d,
+                                Condition:%s,
                                 CntValue:%d
                                 '''\
                                 %(
-                                self.SuccID,
+                                self.SuccType,
+                                self.Len,
+                                self.Condition,
                                 self.CntValue
                                 )
         return DumpString
@@ -14187,70 +15079,6 @@
 
 
 #------------------------------------------------------
-#A3 32 通知魔方寻宝获得物品 #tagMCMagicTreasureGetItem
-
-class  tagMCMagicTreasureGetItem(Structure):
-    Head = tagHead()
-    MTItemLen = 0    #(DWORD MTItemLen)
-    MTItemData = ""    #(String MTItemData)//  获得物品信息 [[物品1参数列表], [物品2参数列表], ...] ; 参数列表索引0为itemID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x32
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.MTItemLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MTItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.MTItemLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x32
-        self.MTItemLen = 0
-        self.MTItemData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += len(self.MTItemData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.MTItemLen)
-        data = CommFunc.WriteString(data, self.MTItemLen, self.MTItemData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                MTItemLen:%d,
-                                MTItemData:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.MTItemLen,
-                                self.MTItemData
-                                )
-        return DumpString
-
-
-m_NAtagMCMagicTreasureGetItem=tagMCMagicTreasureGetItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicTreasureGetItem.Head.Cmd,m_NAtagMCMagicTreasureGetItem.Head.SubCmd))] = m_NAtagMCMagicTreasureGetItem
-
-
-#------------------------------------------------------
 #A3 01 坐骑培养信息 #tagTrainHorseData
 
 class  tagMCHorseInfo(Structure):
@@ -14372,76 +15200,72 @@
 #------------------------------------------------------
 # A3 51 寻宝功能信息 #tagMCTreasureInfo
 
-class  tagMCTreasureNumInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TreasureNum", c_ubyte),    # 自定义的寻宝编号
-                  ("CurFreeCnt", c_ubyte),    # 当前可用免费次数
-                  ("TodayFreeCnt", c_ubyte),    # 今日已累计免费次数
-                  ("StartCalcFreeCntTime", c_int),    # 开始计算免费次数时间time值
-                  ("IsPlayTreasure", c_ubyte),    # 是否寻宝过,含免费次数
-                  ("IsPlayGoldTreasure", c_ubyte),    # 是否钻石寻宝过
-                  ]
+class  tagMCTreasureTypeInfo(Structure):
+    TreasureType = 0    #(BYTE TreasureType)//寻宝类型
+    LuckValue = 0    #(WORD LuckValue)//当前幸运值
+    IndexCount = 0    #(BYTE IndexCount)//索引个数
+    FreeCountTime = list()    #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值
+    data = None
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x51
         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()
+        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.FreeCountTime.append(value)
+        return _pos
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x51
-        self.TreasureNum = 0
-        self.CurFreeCnt = 0
-        self.TodayFreeCnt = 0
-        self.StartCalcFreeCntTime = 0
-        self.IsPlayTreasure = 0
-        self.IsPlayGoldTreasure = 0
+        self.TreasureType = 0
+        self.LuckValue = 0
+        self.IndexCount = 0
+        self.FreeCountTime = list()
         return
 
     def GetLength(self):
-        return sizeof(tagMCTreasureNumInfo)
+        length = 0
+        length += 1
+        length += 2
+        length += 1
+        length += 4 * self.IndexCount
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TreasureType)
+        data = CommFunc.WriteWORD(data, self.LuckValue)
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteDWORD(data, self.FreeCountTime[i])
+        return data
 
     def OutputString(self):
-        DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TreasureNum:%d,
-                                CurFreeCnt:%d,
-                                TodayFreeCnt:%d,
-                                StartCalcFreeCntTime:%d,
-                                IsPlayTreasure:%d,
-                                IsPlayGoldTreasure:%d
+        DumpString = '''
+                                TreasureType:%d,
+                                LuckValue:%d,
+                                IndexCount:%d,
+                                FreeCountTime:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TreasureNum,
-                                self.CurFreeCnt,
-                                self.TodayFreeCnt,
-                                self.StartCalcFreeCntTime,
-                                self.IsPlayTreasure,
-                                self.IsPlayGoldTreasure
+                                self.TreasureType,
+                                self.LuckValue,
+                                self.IndexCount,
+                                "..."
                                 )
         return DumpString
 
 
 class  tagMCTreasureInfo(Structure):
     Head = tagHead()
-    TreauserActionType = 0    #(DWORD TreauserActionType)// 当前寻宝活动类型, 默认0
-    TreasuerNumInfoCnt = 0    #(BYTE TreasuerNumInfoCnt)// 寻宝编号信息数
-    TreasuerNumInfo = list()    #(vector<tagMCTreasureNumInfo> TreasuerNumInfo)// 寻宝编号信息列表
+    InfoCount = 0    #(BYTE InfoCount)// 寻宝类型信息数
+    TreasuerInfoList = list()    #(vector<tagMCTreasureTypeInfo> TreasuerInfoList)// 寻宝类型信息列表
     data = None
 
     def __init__(self):
@@ -14453,12 +15277,11 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.TreauserActionType,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TreasuerNumInfoCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TreasuerNumInfoCnt):
-            temTreasuerNumInfo = tagMCTreasureNumInfo()
-            _pos = temTreasuerNumInfo.ReadData(_lpData, _pos)
-            self.TreasuerNumInfo.append(temTreasuerNumInfo)
+        self.InfoCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.InfoCount):
+            temTreasuerInfoList = tagMCTreasureTypeInfo()
+            _pos = temTreasuerInfoList.ReadData(_lpData, _pos)
+            self.TreasuerInfoList.append(temTreasuerInfoList)
         return _pos
 
     def Clear(self):
@@ -14466,41 +15289,36 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x51
-        self.TreauserActionType = 0
-        self.TreasuerNumInfoCnt = 0
-        self.TreasuerNumInfo = list()
+        self.InfoCount = 0
+        self.TreasuerInfoList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 4
         length += 1
-        for i in range(self.TreasuerNumInfoCnt):
-            length += self.TreasuerNumInfo[i].GetLength()
+        for i in range(self.InfoCount):
+            length += self.TreasuerInfoList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.TreauserActionType)
-        data = CommFunc.WriteBYTE(data, self.TreasuerNumInfoCnt)
-        for i in range(self.TreasuerNumInfoCnt):
-            data = CommFunc.WriteString(data, self.TreasuerNumInfo[i].GetLength(), self.TreasuerNumInfo[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.InfoCount)
+        for i in range(self.InfoCount):
+            data = CommFunc.WriteString(data, self.TreasuerInfoList[i].GetLength(), self.TreasuerInfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                TreauserActionType:%d,
-                                TreasuerNumInfoCnt:%d,
-                                TreasuerNumInfo:%s
+                                InfoCount:%d,
+                                TreasuerInfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.TreauserActionType,
-                                self.TreasuerNumInfoCnt,
+                                self.InfoCount,
                                 "..."
                                 )
         return DumpString
@@ -14515,9 +15333,10 @@
 
 class  tagMCTreasureResult(Structure):
     Head = tagHead()
-    AddTreasureMoney = 0    #(WORD AddTreasureMoney)// 本次寻宝增加的货币碎片
+    AddTreasureScore = 0    #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分
+    AddTreasureLuck = 0    #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
     TreasureResultLen = 0    #(WORD TreasureResultLen)
-    TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[物品ID,个数,是否绑定,是否好物品], ...]
+    TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
     data = None
 
     def __init__(self):
@@ -14529,7 +15348,8 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.AddTreasureMoney,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
         return _pos
@@ -14539,7 +15359,8 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x50
-        self.AddTreasureMoney = 0
+        self.AddTreasureScore = 0
+        self.AddTreasureLuck = 0
         self.TreasureResultLen = 0
         self.TreasureResult = ""
         return
@@ -14549,6 +15370,7 @@
         length += self.Head.GetLength()
         length += 2
         length += 2
+        length += 2
         length += len(self.TreasureResult)
 
         return length
@@ -14556,7 +15378,8 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.AddTreasureMoney)
+        data = CommFunc.WriteWORD(data, self.AddTreasureScore)
+        data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
         data = CommFunc.WriteWORD(data, self.TreasureResultLen)
         data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
         return data
@@ -14564,13 +15387,15 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                AddTreasureMoney:%d,
+                                AddTreasureScore:%d,
+                                AddTreasureLuck:%d,
                                 TreasureResultLen:%d,
                                 TreasureResult:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.AddTreasureMoney,
+                                self.AddTreasureScore,
+                                self.AddTreasureLuck,
                                 self.TreasureResultLen,
                                 self.TreasureResult
                                 )
@@ -14590,6 +15415,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("PassLV", c_int),    
+                  ("YesterDayPassLV", c_int),    
                   ]
 
     def __init__(self):
@@ -14607,6 +15433,7 @@
         self.Cmd = 0xA3
         self.SubCmd = 0xBA
         self.PassLV = 0
+        self.YesterDayPassLV = 0
         return
 
     def GetLength(self):
@@ -14619,122 +15446,20 @@
         DumpString = '''// A3 BA 通知试炼之塔过关数 //tagMCTrialTowerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PassLV:%d
+                                PassLV:%d,
+                                YesterDayPassLV:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PassLV
+                                self.PassLV,
+                                self.YesterDayPassLV
                                 )
         return DumpString
 
 
 m_NAtagMCTrialTowerInfo=tagMCTrialTowerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTrialTowerInfo.Cmd,m_NAtagMCTrialTowerInfo.SubCmd))] = m_NAtagMCTrialTowerInfo
-
-
-#------------------------------------------------------
-#A3 AA 刷新玩家图鉴兑换点数#tagMCUpdatePlayerMonsterCurrency
-
-class  tagMCUpdatePlayerMonsterCurrency(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Value", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0xAA
-        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 = 0xA3
-        self.SubCmd = 0xAA
-        self.Value = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCUpdatePlayerMonsterCurrency)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A3 AA 刷新玩家图鉴兑换点数//tagMCUpdatePlayerMonsterCurrency:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Value:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Value
-                                )
-        return DumpString
-
-
-m_NAtagMCUpdatePlayerMonsterCurrency=tagMCUpdatePlayerMonsterCurrency()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUpdatePlayerMonsterCurrency.Cmd,m_NAtagMCUpdatePlayerMonsterCurrency.SubCmd))] = m_NAtagMCUpdatePlayerMonsterCurrency
-
-
-#------------------------------------------------------
-# A3 25 VIP副本过关情况 #tagMCVIPFBPassInfo
-
-class  tagMCVIPFBPassInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PassInfo", c_int),    #按位表示通关次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x25
-        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 = 0xA3
-        self.SubCmd = 0x25
-        self.PassInfo = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCVIPFBPassInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 25 VIP副本过关情况 //tagMCVIPFBPassInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PassInfo:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PassInfo
-                                )
-        return DumpString
-
-
-m_NAtagMCVIPFBPassInfo=tagMCVIPFBPassInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVIPFBPassInfo.Cmd,m_NAtagMCVIPFBPassInfo.SubCmd))] = m_NAtagMCVIPFBPassInfo
 
 
 #------------------------------------------------------
@@ -14937,6 +15662,114 @@
 
 m_NAtagPyMCWorldAverageLv=tagPyMCWorldAverageLv()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyMCWorldAverageLv.Cmd,m_NAtagPyMCWorldAverageLv.SubCmd))] = m_NAtagPyMCWorldAverageLv
+
+
+#------------------------------------------------------
+# A3 48 仙宝寻主领奖记录 #tagMCXBXZAwardRecordList
+
+class  tagMCXBXZAwardRecord(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个id   0-30为0, 31-61为1..
+                  ("Record", c_int),    #对应是否领取值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.RecordIndex = 0
+        self.Record = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCXBXZAwardRecord)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 48 仙宝寻主领奖记录 //tagMCXBXZAwardRecordList:
+                                RecordIndex:%d,
+                                Record:%d
+                                '''\
+                                %(
+                                self.RecordIndex,
+                                self.Record
+                                )
+        return DumpString
+
+
+class  tagMCXBXZAwardRecordList(Structure):
+    Head = tagHead()
+    RecordCnt = 0    #(WORD RecordCnt)//记录个数
+    RecordList = list()    #(vector<tagMCXBXZAwardRecord> RecordList)//记录列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x48
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.RecordCnt):
+            temRecordList = tagMCXBXZAwardRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x48
+        self.RecordCnt = 0
+        self.RecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.RecordCnt):
+            length += self.RecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.RecordCnt)
+        for i in range(self.RecordCnt):
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCnt:%d,
+                                RecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCXBXZAwardRecordList=tagMCXBXZAwardRecordList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXBXZAwardRecordList.Head.Cmd,m_NAtagMCXBXZAwardRecordList.Head.SubCmd))] = m_NAtagMCXBXZAwardRecordList
 
 
 #------------------------------------------------------
@@ -15901,6 +16734,58 @@
 
 
 #------------------------------------------------------
+# A7 17 聊天气泡框状态 #tagMCChatBubbleBoxState
+
+class  tagMCChatBubbleBoxState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("BoxState", c_int),    # 按二进制位存储代表是否已开启,暂支持31位,以后有需要再加
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA7
+        self.SubCmd = 0x17
+        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 = 0xA7
+        self.SubCmd = 0x17
+        self.BoxState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCChatBubbleBoxState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 17 聊天气泡框状态 //tagMCChatBubbleBoxState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                BoxState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.BoxState
+                                )
+        return DumpString
+
+
+m_NAtagMCChatBubbleBoxState=tagMCChatBubbleBoxState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChatBubbleBoxState.Cmd,m_NAtagMCChatBubbleBoxState.SubCmd))] = m_NAtagMCChatBubbleBoxState
+
+
+#------------------------------------------------------
 # A7 13 动态障碍物状态 #tagMCDynamicBarrierState
 
 class  tagMCDynamicBarrier(Structure):
@@ -15910,6 +16795,7 @@
                   ("APosY", c_ushort),    
                   ("BPosX", c_ushort),    
                   ("BPosY", c_ushort),    
+                  ("Angle", c_ushort),    
                   ]
 
     def __init__(self):
@@ -15926,6 +16812,7 @@
         self.APosY = 0
         self.BPosX = 0
         self.BPosY = 0
+        self.Angle = 0
         return
 
     def GetLength(self):
@@ -15939,13 +16826,15 @@
                                 APosX:%d,
                                 APosY:%d,
                                 BPosX:%d,
-                                BPosY:%d
+                                BPosY:%d,
+                                Angle:%d
                                 '''\
                                 %(
                                 self.APosX,
                                 self.APosY,
                                 self.BPosX,
-                                self.BPosY
+                                self.BPosY,
+                                self.Angle
                                 )
         return DumpString
 
@@ -16021,6 +16910,183 @@
 
 m_NAtagMCDynamicBarrierState=tagMCDynamicBarrierState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDynamicBarrierState.Head.Cmd,m_NAtagMCDynamicBarrierState.Head.SubCmd))] = m_NAtagMCDynamicBarrierState
+
+
+#------------------------------------------------------
+# A7 15 通知仙盟抢Boss伤血信息 #tagMCFamilyBossHurtList
+
+class  tagMCFamilyBossHurt(Structure):
+    FamilyID = 0    #(DWORD FamilyID)// 所属仙盟ID
+    HurtID = 0    #(DWORD HurtID)// 伤血的ID, 根据伤血类型表示不同的ID, 如仙盟ID或玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    HurtName = ""    #(String HurtName)
+    HurtValue = 0    #(DWORD HurtValue)// 累计伤血,求余1亿的值
+    HurtValueEx = 0    #(DWORD HurtValueEx)// 累计伤血,整除1亿的值
+    InitTick = 0    #(DWORD InitTick)// 伤血初始tick,用于排序,先按伤血倒序排,再按tick正序排
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HurtName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.InitTick,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.FamilyID = 0
+        self.HurtID = 0
+        self.NameLen = 0
+        self.HurtName = ""
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        self.InitTick = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.HurtName)
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteDWORD(data, self.HurtID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.HurtName)
+        data = CommFunc.WriteDWORD(data, self.HurtValue)
+        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
+        data = CommFunc.WriteDWORD(data, self.InitTick)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                FamilyID:%d,
+                                HurtID:%d,
+                                NameLen:%d,
+                                HurtName:%s,
+                                HurtValue:%d,
+                                HurtValueEx:%d,
+                                InitTick:%d
+                                '''\
+                                %(
+                                self.FamilyID,
+                                self.HurtID,
+                                self.NameLen,
+                                self.HurtName,
+                                self.HurtValue,
+                                self.HurtValueEx,
+                                self.InitTick
+                                )
+        return DumpString
+
+
+class  tagMCFamilyBossHurtList(Structure):
+    Head = tagHead()
+    ObjID = 0    #(DWORD ObjID)
+    NPCID = 0    #(DWORD NPCID)
+    HurtType = 0    #(BYTE HurtType)// 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血
+    IsSort = 0    #(BYTE IsSort)// 是否排序过的,一般boss被击杀后会统一同步一次排序过的最终结果,其他情况下客户端自己排序
+    HurtCount = 0    #(WORD HurtCount)// 伤血个数
+    HurtList = list()    #(vector<tagMCFamilyBossHurt> HurtList)// 伤血列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsSort,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HurtCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.HurtCount):
+            temHurtList = tagMCFamilyBossHurt()
+            _pos = temHurtList.ReadData(_lpData, _pos)
+            self.HurtList.append(temHurtList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x15
+        self.ObjID = 0
+        self.NPCID = 0
+        self.HurtType = 0
+        self.IsSort = 0
+        self.HurtCount = 0
+        self.HurtList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 1
+        length += 1
+        length += 2
+        for i in range(self.HurtCount):
+            length += self.HurtList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ObjID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteBYTE(data, self.HurtType)
+        data = CommFunc.WriteBYTE(data, self.IsSort)
+        data = CommFunc.WriteWORD(data, self.HurtCount)
+        for i in range(self.HurtCount):
+            data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ObjID:%d,
+                                NPCID:%d,
+                                HurtType:%d,
+                                IsSort:%d,
+                                HurtCount:%d,
+                                HurtList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ObjID,
+                                self.NPCID,
+                                self.HurtType,
+                                self.IsSort,
+                                self.HurtCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFamilyBossHurtList=tagMCFamilyBossHurtList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyBossHurtList.Head.Cmd,m_NAtagMCFamilyBossHurtList.Head.SubCmd))] = m_NAtagMCFamilyBossHurtList
 
 
 #------------------------------------------------------
@@ -16199,6 +17265,249 @@
 
 
 #------------------------------------------------------
+# A7 16 小助手设置 #tagMCLittleHelperSet
+
+class  tagMCLittleHelperFuncSet(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("SetNum", c_ubyte),    # 托管功能设置编号1~20,每个编号对应的托管功能前端自定义
+                  ("Value1", c_int),    # 自定义值1,如果存储的是勾选信息, 按二进制位存储代表是否勾选,支持31位,每位代表的含义前端自定义
+                  ("Value2", c_int),    # 自定义值2
+                  ("Value3", c_int),    # 自定义值3
+                  ("Value4", c_int),    # 自定义值4
+                  ("Value5", c_int),    # 自定义值5
+                  ("Value6", c_int),    # 自定义值6
+                  ]
+
+    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.SetNum = 0
+        self.Value1 = 0
+        self.Value2 = 0
+        self.Value3 = 0
+        self.Value4 = 0
+        self.Value5 = 0
+        self.Value6 = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCLittleHelperFuncSet)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 16 小助手设置 //tagMCLittleHelperSet:
+                                SetNum:%d,
+                                Value1:%d,
+                                Value2:%d,
+                                Value3:%d,
+                                Value4:%d,
+                                Value5:%d,
+                                Value6:%d
+                                '''\
+                                %(
+                                self.SetNum,
+                                self.Value1,
+                                self.Value2,
+                                self.Value3,
+                                self.Value4,
+                                self.Value5,
+                                self.Value6
+                                )
+        return DumpString
+
+
+class  tagMCLittleHelperSet(Structure):
+    Head = tagHead()
+    FuncSetCount = 0    #(BYTE FuncSetCount)// 托管功能设置数,暂支持20个
+    FuncSetList = list()    #(vector<tagMCLittleHelperFuncSet> FuncSetList)// 托管功能设置列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x16
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FuncSetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FuncSetCount):
+            temFuncSetList = tagMCLittleHelperFuncSet()
+            _pos = temFuncSetList.ReadData(_lpData, _pos)
+            self.FuncSetList.append(temFuncSetList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x16
+        self.FuncSetCount = 0
+        self.FuncSetList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.FuncSetCount):
+            length += self.FuncSetList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.FuncSetCount)
+        for i in range(self.FuncSetCount):
+            data = CommFunc.WriteString(data, self.FuncSetList[i].GetLength(), self.FuncSetList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FuncSetCount:%d,
+                                FuncSetList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FuncSetCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCLittleHelperSet=tagMCLittleHelperSet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLittleHelperSet.Head.Cmd,m_NAtagMCLittleHelperSet.Head.SubCmd))] = m_NAtagMCLittleHelperSet
+
+
+#------------------------------------------------------
+# A7 14 通知查询的NPC数量 #tagMCNPCCntList
+
+class  tagMCNPCCntInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NPCID", c_int),    
+                  ("Cnt", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.NPCID = 0
+        self.Cnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCNPCCntInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 14 通知查询的NPC数量 //tagMCNPCCntList:
+                                NPCID:%d,
+                                Cnt:%d
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.Cnt
+                                )
+        return DumpString
+
+
+class  tagMCNPCCntList(Structure):
+    Head = tagHead()
+    MapID = 0    #(DWORD MapID)
+    NPCInfoCnt = 0    #(BYTE NPCInfoCnt)
+    NPCInfoList = list()    #(vector<tagMCNPCCntInfo> NPCInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x14
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NPCInfoCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.NPCInfoCnt):
+            temNPCInfoList = tagMCNPCCntInfo()
+            _pos = temNPCInfoList.ReadData(_lpData, _pos)
+            self.NPCInfoList.append(temNPCInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x14
+        self.MapID = 0
+        self.NPCInfoCnt = 0
+        self.NPCInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.NPCInfoCnt):
+            length += self.NPCInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteBYTE(data, self.NPCInfoCnt)
+        for i in range(self.NPCInfoCnt):
+            data = CommFunc.WriteString(data, self.NPCInfoList[i].GetLength(), self.NPCInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MapID:%d,
+                                NPCInfoCnt:%d,
+                                NPCInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MapID,
+                                self.NPCInfoCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCNPCCntList=tagMCNPCCntList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCCntList.Head.Cmd,m_NAtagMCNPCCntList.Head.SubCmd))] = m_NAtagMCNPCCntList
+
+
+#------------------------------------------------------
 #A7 01 通知选中对象 # tagMCNotifySelectObj
 
 class  tagMCNotifySelectObj(Structure):
@@ -16264,8 +17573,6 @@
 class  tagMCNPCInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
                   ("ObjID", c_int),    
                   ("NPCID", c_int),    
                   ("NPCHP", c_int),    
@@ -16278,8 +17585,6 @@
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA7
-        self.SubCmd = 0x06
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -16288,8 +17593,6 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA7
-        self.SubCmd = 0x06
         self.ObjID = 0
         self.NPCID = 0
         self.NPCHP = 0
@@ -16308,8 +17611,6 @@
 
     def OutputString(self):
         DumpString = '''// A7 06 通知查询的NPC信息 //tagMCNPCInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
                                 ObjID:%d,
                                 NPCID:%d,
                                 NPCHP:%d,
@@ -16320,8 +17621,6 @@
                                 RefreshSecond:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
                                 self.ObjID,
                                 self.NPCID,
                                 self.NPCHP,
@@ -17018,132 +18317,6 @@
 
 
 #------------------------------------------------------
-# A8 07 通知使用皇室宝箱情况 #tagMCCRBoxInfoList
-
-class  tagMCCRBoxInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncIndex", c_ubyte),    #功能索引
-                  ("BoxIndex", c_ubyte),    #宝箱格子索引
-                  ("ItemID", c_int),    #物品ID
-                  ("UnlockTime", c_int),    # 解锁时间
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA8
-        self.SubCmd = 0x07
-        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 = 0xA8
-        self.SubCmd = 0x07
-        self.FuncIndex = 0
-        self.BoxIndex = 0
-        self.ItemID = 0
-        self.UnlockTime = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCCRBoxInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A8 07 通知使用皇室宝箱情况 //tagMCCRBoxInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncIndex:%d,
-                                BoxIndex:%d,
-                                ItemID:%d,
-                                UnlockTime:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncIndex,
-                                self.BoxIndex,
-                                self.ItemID,
-                                self.UnlockTime
-                                )
-        return DumpString
-
-
-class  tagMCCRBoxInfoList(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)//通知个数
-    InfoList = list()    #(vector<tagMCCRBoxInfo> InfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x07
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temInfoList = tagMCCRBoxInfo()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x07
-        self.Count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.InfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCCRBoxInfoList=tagMCCRBoxInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCRBoxInfoList.Head.Cmd,m_NAtagMCCRBoxInfoList.Head.SubCmd))] = m_NAtagMCCRBoxInfoList
-
-
-#------------------------------------------------------
 # A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
 
 class  tagMCGuradPickupItemSucc(Structure):
@@ -17435,6 +18608,114 @@
 
 
 #------------------------------------------------------
+# A8 06 通知神秘限购商品时间 #tagMCMysticalShopTimeInfo
+
+class  tagMCMysticalShopTime(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GoodsID", c_int),    # 商品ID
+                  ("StartTime", c_int),    # 开卖时间
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.GoodsID = 0
+        self.StartTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCMysticalShopTime)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A8 06 通知神秘限购商品时间 //tagMCMysticalShopTimeInfo:
+                                GoodsID:%d,
+                                StartTime:%d
+                                '''\
+                                %(
+                                self.GoodsID,
+                                self.StartTime
+                                )
+        return DumpString
+
+
+class  tagMCMysticalShopTimeInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)// 商品数
+    ShopTimeList = list()    #(vector<tagMCMysticalShopTime> ShopTimeList)// 商品开卖信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temShopTimeList = tagMCMysticalShopTime()
+            _pos = temShopTimeList.ReadData(_lpData, _pos)
+            self.ShopTimeList.append(temShopTimeList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x06
+        self.Count = 0
+        self.ShopTimeList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.ShopTimeList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.ShopTimeList[i].GetLength(), self.ShopTimeList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ShopTimeList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCMysticalShopTimeInfo=tagMCMysticalShopTimeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMysticalShopTimeInfo.Head.Cmd,m_NAtagMCMysticalShopTimeInfo.Head.SubCmd))] = m_NAtagMCMysticalShopTimeInfo
+
+
+#------------------------------------------------------
 # A8 10 通知获得物品 #tagMCNotifyUseItemGetItem
 
 class  tagMCNotifyUseItemGetItem(Structure):
@@ -17524,84 +18805,6 @@
 
 m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem
-
-
-#------------------------------------------------------
-# A8 08 通知开启皇室宝箱后奖励结果 #tagMCOpenCRBoxResult
-
-class  tagMCOpenCRBoxResult(Structure):
-    Head = tagHead()
-    UseItemID = 0    #(DWORD UseItemID)// 使用的物品ID
-    IsBind = 0    #(BYTE IsBind)// 奖励是否绑定
-    Num = 0    #(BYTE Num)// 奖励个数
-    RewardList = ""    #(String RewardList)// 奖励列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RewardList,_pos = CommFunc.ReadString(_lpData, _pos,self.Num)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x08
-        self.UseItemID = 0
-        self.IsBind = 0
-        self.Num = 0
-        self.RewardList = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 1
-        length += len(self.RewardList)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.UseItemID)
-        data = CommFunc.WriteBYTE(data, self.IsBind)
-        data = CommFunc.WriteBYTE(data, self.Num)
-        data = CommFunc.WriteString(data, self.Num, self.RewardList)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                UseItemID:%d,
-                                IsBind:%d,
-                                Num:%d,
-                                RewardList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.UseItemID,
-                                self.IsBind,
-                                self.Num,
-                                self.RewardList
-                                )
-        return DumpString
-
-
-m_NAtagMCOpenCRBoxResult=tagMCOpenCRBoxResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOpenCRBoxResult.Head.Cmd,m_NAtagMCOpenCRBoxResult.Head.SubCmd))] = m_NAtagMCOpenCRBoxResult
 
 
 #------------------------------------------------------
@@ -18070,90 +19273,6 @@
 
 
 #------------------------------------------------------
-# A8 06 使用翻牌物品结果 #tagMCUseTurnCardItemResult
-
-class  tagMCUseTurnCardItemResult(Structure):
-    Head = tagHead()
-    UseItemID = 0    #(DWORD UseItemID)// 使用的物品ID
-    AllCardNum = 0    #(BYTE AllCardNum)// 总牌数
-    AllCfgIndexList = list()    #(vector<WORD> AllCfgIndexList)// 总牌配置索引列表
-    TurnCardList = list()    #(vector<WORD> TurnCardList)// 已翻牌配置索引列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x06
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AllCardNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AllCardNum):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.AllCfgIndexList.append(value)
-        for i in range(self.AllCardNum):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.TurnCardList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x06
-        self.UseItemID = 0
-        self.AllCardNum = 0
-        self.AllCfgIndexList = list()
-        self.TurnCardList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 2 * self.AllCardNum
-        length += 2 * self.AllCardNum
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.UseItemID)
-        data = CommFunc.WriteBYTE(data, self.AllCardNum)
-        for i in range(self.AllCardNum):
-            data = CommFunc.WriteWORD(data, self.AllCfgIndexList[i])
-        for i in range(self.AllCardNum):
-            data = CommFunc.WriteWORD(data, self.TurnCardList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                UseItemID:%d,
-                                AllCardNum:%d,
-                                AllCfgIndexList:%s,
-                                TurnCardList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.UseItemID,
-                                self.AllCardNum,
-                                "...",
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCUseTurnCardItemResult=tagMCUseTurnCardItemResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseTurnCardItemResult.Head.Cmd,m_NAtagMCUseTurnCardItemResult.Head.SubCmd))] = m_NAtagMCUseTurnCardItemResult
-
-
-#------------------------------------------------------
 # A8 13 虚拟掉落物品 #tagMCVirtualItemDrop
 
 class  tagMCVirtualItemDrop(Structure):
@@ -18236,6 +19355,829 @@
 
 m_NAtagMCVirtualItemDrop=tagMCVirtualItemDrop()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVirtualItemDrop.Head.Cmd,m_NAtagMCVirtualItemDrop.Head.SubCmd))] = m_NAtagMCVirtualItemDrop
+
+
+#------------------------------------------------------
+# AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
+
+class  tagMCTotalRechargeAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCTotalRechargeAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 1D 累计充值活动信息 //tagMCActTotalRechargeInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCTotalRechargeAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedGold = 0    #(DWORD NeedGold)// 所需仙玉数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCTotalRechargeAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCTotalRechargeAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedGold = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedGold)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedGold:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedGold,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCTotalRechargeAwardDay(Structure):
+    AwardCount = 0    #(BYTE AwardCount)// 奖励档数
+    AwardInfo = list()    #(vector<tagMCTotalRechargeAward> AwardInfo)// 奖励档信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardInfo = tagMCTotalRechargeAward()
+            _pos = temAwardInfo.ReadData(_lpData, _pos)
+            self.AwardInfo.append(temAwardInfo)
+        return _pos
+
+    def Clear(self):
+        self.AwardCount = 0
+        self.AwardInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardCount:%d,
+                                AwardInfo:%s
+                                '''\
+                                %(
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActTotalRechargeInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AwardDays = 0    #(BYTE AwardDays)
+    AwardDayInfo = list()    #(vector<tagMCTotalRechargeAwardDay> AwardDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x1D
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_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.AwardDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardDays):
+            temAwardDayInfo = tagMCTotalRechargeAwardDay()
+            _pos = temAwardDayInfo.ReadData(_lpData, _pos)
+            self.AwardDayInfo.append(temAwardDayInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x1D
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.AwardDays = 0
+        self.AwardDayInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.AwardDays):
+            length += self.AwardDayInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        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.AwardDays)
+        for i in range(self.AwardDays):
+            data = CommFunc.WriteString(data, self.AwardDayInfo[i].GetLength(), self.AwardDayInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                AwardDays:%d,
+                                AwardDayInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.AwardDays,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo
+
+
+#------------------------------------------------------
+# AA 1B 许愿池拖动结果 #tagMCActWishingDragResult
+
+class  tagMCPlayerWishingDragInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("WellType", c_ubyte),    # 库 0-可选库 1-结果库
+                  ("Index", c_ubyte),    # 索引
+                  ("ItemID", c_int),    # 物品ID
+                  ("ItemCnt", c_ushort),    # 物品数量
+                  ("IsBind", c_ubyte),    # 是否绑定
+                  ("IsSpecial", c_ubyte),    # 是否极品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.WellType = 0
+        self.Index = 0
+        self.ItemID = 0
+        self.ItemCnt = 0
+        self.IsBind = 0
+        self.IsSpecial = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCPlayerWishingDragInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 1B 许愿池拖动结果 //tagMCActWishingDragResult:
+                                WellType:%d,
+                                Index:%d,
+                                ItemID:%d,
+                                ItemCnt:%d,
+                                IsBind:%d,
+                                IsSpecial:%d
+                                '''\
+                                %(
+                                self.WellType,
+                                self.Index,
+                                self.ItemID,
+                                self.ItemCnt,
+                                self.IsBind,
+                                self.IsSpecial
+                                )
+        return DumpString
+
+
+class  tagMCActWishingDragResult(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)
+    InfoList = list()    #(vector<tagMCPlayerWishingDragInfo> InfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x1B
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temInfoList = tagMCPlayerWishingDragInfo()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x1B
+        self.Cnt = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Cnt):
+            length += self.InfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActWishingDragResult=tagMCActWishingDragResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingDragResult.Head.Cmd,m_NAtagMCActWishingDragResult.Head.SubCmd))] = m_NAtagMCActWishingDragResult
+
+
+#------------------------------------------------------
+# AA 19 许愿池活动信息 #tagMCActWishingWellInfo
+
+class  tagMCWishingWellItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    # 物品ID
+                  ("ItemCnt", c_ushort),    # 物品数量
+                  ("IsBind", c_ubyte),    # 是否绑定
+                  ("Mark", c_int),    # 排序标识
+                  ("Rare", c_ubyte),    # 珍稀值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCnt = 0
+        self.IsBind = 0
+        self.Mark = 0
+        self.Rare = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCWishingWellItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 19 许愿池活动信息 //tagMCActWishingWellInfo:
+                                ItemID:%d,
+                                ItemCnt:%d,
+                                IsBind:%d,
+                                Mark:%d,
+                                Rare:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCnt,
+                                self.IsBind,
+                                self.Mark,
+                                self.Rare
+                                )
+        return DumpString
+
+
+class  tagMCActWishingWellInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    Count = 0    #(WORD Count)// 物品数
+    WellItemInfo = list()    #(vector<tagMCWishingWellItem> WellItemInfo)// 随机库物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x19
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temWellItemInfo = tagMCWishingWellItem()
+            _pos = temWellItemInfo.ReadData(_lpData, _pos)
+            self.WellItemInfo.append(temWellItemInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x19
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.ResetType = 0
+        self.LimitLV = 0
+        self.Count = 0
+        self.WellItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 1
+        length += 2
+        length += 2
+        for i in range(self.Count):
+            length += self.WellItemInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.WellItemInfo[i].GetLength(), self.WellItemInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                ResetType:%d,
+                                LimitLV:%d,
+                                Count:%d,
+                                WellItemInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.ResetType,
+                                self.LimitLV,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActWishingWellInfo=tagMCActWishingWellInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellInfo.Head.Cmd,m_NAtagMCActWishingWellInfo.Head.SubCmd))] = m_NAtagMCActWishingWellInfo
+
+
+#------------------------------------------------------
+# AA 1A 许愿池活动玩家信息 #tagMCActWishingWellPlayerInfo
+
+class  tagMCPlayerWishingWellItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    # 物品ID
+                  ("ItemCnt", c_ushort),    # 物品数量
+                  ("IsBind", c_ubyte),    # 是否绑定
+                  ("IsSpecial", c_ubyte),    # 是否极品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCnt = 0
+        self.IsBind = 0
+        self.IsSpecial = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCPlayerWishingWellItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 1A 许愿池活动玩家信息 //tagMCActWishingWellPlayerInfo:
+                                ItemID:%d,
+                                ItemCnt:%d,
+                                IsBind:%d,
+                                IsSpecial:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCnt,
+                                self.IsBind,
+                                self.IsSpecial
+                                )
+        return DumpString
+
+
+class  tagMCActWishingWellPlayerInfo(Structure):
+    Head = tagHead()
+    FreeStartTime = 0    #(DWORD FreeStartTime)// 免费开始倒计时时间
+    WishCnt = 0    #(DWORD WishCnt)// 许愿付费刷新次数
+    WellItemCnt = 0    #(BYTE WellItemCnt)//许愿池物品数量
+    WellItemInfo = list()    #(vector<tagMCPlayerWishingWellItem> WellItemInfo)// 随机库物品信息
+    CurAwardCnt = 0    #(BYTE CurAwardCnt)// 当前奖励物品数量
+    CurAwardItemInfo = list()    #(vector<tagMCPlayerWishingWellItem> CurAwardItemInfo)// 当前奖励物品
+    LastAwardCnt = 0    #(BYTE LastAwardCnt)// 可领取奖励物品数量
+    LastAwardItemInfo = list()    #(vector<tagMCPlayerWishingWellItem> LastAwardItemInfo)// 可领取奖励物品
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x1A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FreeStartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WishCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WellItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.WellItemCnt):
+            temWellItemInfo = tagMCPlayerWishingWellItem()
+            _pos = temWellItemInfo.ReadData(_lpData, _pos)
+            self.WellItemInfo.append(temWellItemInfo)
+        self.CurAwardCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CurAwardCnt):
+            temCurAwardItemInfo = tagMCPlayerWishingWellItem()
+            _pos = temCurAwardItemInfo.ReadData(_lpData, _pos)
+            self.CurAwardItemInfo.append(temCurAwardItemInfo)
+        self.LastAwardCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.LastAwardCnt):
+            temLastAwardItemInfo = tagMCPlayerWishingWellItem()
+            _pos = temLastAwardItemInfo.ReadData(_lpData, _pos)
+            self.LastAwardItemInfo.append(temLastAwardItemInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x1A
+        self.FreeStartTime = 0
+        self.WishCnt = 0
+        self.WellItemCnt = 0
+        self.WellItemInfo = list()
+        self.CurAwardCnt = 0
+        self.CurAwardItemInfo = list()
+        self.LastAwardCnt = 0
+        self.LastAwardItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.WellItemCnt):
+            length += self.WellItemInfo[i].GetLength()
+        length += 1
+        for i in range(self.CurAwardCnt):
+            length += self.CurAwardItemInfo[i].GetLength()
+        length += 1
+        for i in range(self.LastAwardCnt):
+            length += self.LastAwardItemInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.FreeStartTime)
+        data = CommFunc.WriteDWORD(data, self.WishCnt)
+        data = CommFunc.WriteBYTE(data, self.WellItemCnt)
+        for i in range(self.WellItemCnt):
+            data = CommFunc.WriteString(data, self.WellItemInfo[i].GetLength(), self.WellItemInfo[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.CurAwardCnt)
+        for i in range(self.CurAwardCnt):
+            data = CommFunc.WriteString(data, self.CurAwardItemInfo[i].GetLength(), self.CurAwardItemInfo[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.LastAwardCnt)
+        for i in range(self.LastAwardCnt):
+            data = CommFunc.WriteString(data, self.LastAwardItemInfo[i].GetLength(), self.LastAwardItemInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FreeStartTime:%d,
+                                WishCnt:%d,
+                                WellItemCnt:%d,
+                                WellItemInfo:%s,
+                                CurAwardCnt:%d,
+                                CurAwardItemInfo:%s,
+                                LastAwardCnt:%d,
+                                LastAwardItemInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FreeStartTime,
+                                self.WishCnt,
+                                self.WellItemCnt,
+                                "...",
+                                self.CurAwardCnt,
+                                "...",
+                                self.LastAwardCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActWishingWellPlayerInfo=tagMCActWishingWellPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellPlayerInfo.Head.Cmd,m_NAtagMCActWishingWellPlayerInfo.Head.SubCmd))] = m_NAtagMCActWishingWellPlayerInfo
+
+
+#------------------------------------------------------
+# AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo
+
+class  tagMCAllPeoplePartyCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ActID", c_int),    #活动ID
+                  ("CurTimes", 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.ActID = 0
+        self.CurTimes = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCAllPeoplePartyCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 15 仙界盛典全民来嗨玩家信息 //tagMCAllPeoplePartyInfo:
+                                ActID:%d,
+                                CurTimes:%d
+                                '''\
+                                %(
+                                self.ActID,
+                                self.CurTimes
+                                )
+        return DumpString
+
+
+class  tagMCAllPeoplePartyInfo(Structure):
+    Head = tagHead()
+    CurPoint = 0    #(DWORD CurPoint)//当前总点数
+    AwardRecord = 0    #(DWORD AwardRecord)//领奖记录 按奖励索引二进制位存储是否已领取
+    Count = 0    #(BYTE Count)
+    BuyCountList = list()    #(vector<tagMCAllPeoplePartyCount> BuyCountList)//活动完成次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temBuyCountList = tagMCAllPeoplePartyCount()
+            _pos = temBuyCountList.ReadData(_lpData, _pos)
+            self.BuyCountList.append(temBuyCountList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x15
+        self.CurPoint = 0
+        self.AwardRecord = 0
+        self.Count = 0
+        self.BuyCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.BuyCountList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.CurPoint)
+        data = CommFunc.WriteDWORD(data, self.AwardRecord)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CurPoint:%d,
+                                AwardRecord:%d,
+                                Count:%d,
+                                BuyCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CurPoint,
+                                self.AwardRecord,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCAllPeoplePartyInfo=tagMCAllPeoplePartyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAllPeoplePartyInfo.Head.Cmd,m_NAtagMCAllPeoplePartyInfo.Head.SubCmd))] = m_NAtagMCAllPeoplePartyInfo
 
 
 #------------------------------------------------------
@@ -18473,14 +20415,325 @@
 
 
 #------------------------------------------------------
-# AA 02 天天首充活动开启状态 #tagMCDailyGoldState
+# AA 09 消费返利活动信息 #tagMCCostRebateInfo
 
-class  tagMCDailyGoldState(Structure):
+class  tagMCCostRebateAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCostRebateAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 09 消费返利活动信息 //tagMCCostRebateInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCCostRebateAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedGold = 0    #(DWORD NeedGold)// 所需仙玉数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCCostRebateAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCCostRebateAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedGold = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedGold)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedGold:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedGold,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCCostRebateAwardDay(Structure):
+    AwardCount = 0    #(BYTE AwardCount)// 奖励档数
+    AwardInfo = list()    #(vector<tagMCCostRebateAward> AwardInfo)// 奖励档信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardInfo = tagMCCostRebateAward()
+            _pos = temAwardInfo.ReadData(_lpData, _pos)
+            self.AwardInfo.append(temAwardInfo)
+        return _pos
+
+    def Clear(self):
+        self.AwardCount = 0
+        self.AwardInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardCount:%d,
+                                AwardInfo:%s
+                                '''\
+                                %(
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCCostRebateInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AwardDays = 0    #(BYTE AwardDays)
+    AwardDayInfo = list()    #(vector<tagMCCostRebateAwardDay> AwardDayInfo)//每天对应返利信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_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.AwardDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardDays):
+            temAwardDayInfo = tagMCCostRebateAwardDay()
+            _pos = temAwardDayInfo.ReadData(_lpData, _pos)
+            self.AwardDayInfo.append(temAwardDayInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x09
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.AwardDays = 0
+        self.AwardDayInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.AwardDays):
+            length += self.AwardDayInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        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.AwardDays)
+        for i in range(self.AwardDays):
+            data = CommFunc.WriteString(data, self.AwardDayInfo[i].GetLength(), self.AwardDayInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                AwardDays:%d,
+                                AwardDayInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.AwardDays,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCostRebateInfo=tagMCCostRebateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebateInfo.Head.Cmd,m_NAtagMCCostRebateInfo.Head.SubCmd))] = m_NAtagMCCostRebateInfo
+
+
+#------------------------------------------------------
+# AA 10 消费返利玩家活动信息 #tagMCCostRebatePlayerInfo
+
+class  tagMCCostRebatePlayerInfo(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("State", c_ubyte),    # 0-未开启;1-已开启
+                  ("CostGoldTotal", c_int),    #本次活动已累计消费仙玉数
+                  ("AwardRecord", c_int),    #返利奖励领奖记录,按奖励索引二进制位存储是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x10
+        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 = 0x10
+        self.CostGoldTotal = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCostRebatePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CostGoldTotal:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CostGoldTotal,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo
+
+
+#------------------------------------------------------
+# AA 02 首充信息 #tagMCFirstGoldInfo
+
+class  tagMCFirstGoldInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FirstGoldRewardState", c_ubyte),    #首充奖励是否已领奖
+                  ("FirstGoldTry", c_ubyte),    #首充试用状态0-不可试用 1-可试用 2-已试用
                   ]
 
     def __init__(self):
@@ -18497,31 +20750,965 @@
     def Clear(self):
         self.Cmd = 0xAA
         self.SubCmd = 0x02
-        self.State = 0
+        self.FirstGoldRewardState = 0
+        self.FirstGoldTry = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCDailyGoldState)
+        return sizeof(tagMCFirstGoldInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AA 02 天天首充活动开启状态 //tagMCDailyGoldState:
+        DumpString = '''// AA 02 首充信息 //tagMCFirstGoldInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                State:%d
+                                FirstGoldRewardState:%d,
+                                FirstGoldTry:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
+                                self.FirstGoldRewardState,
+                                self.FirstGoldTry
+                                )
+        return DumpString
+
+
+m_NAtagMCFirstGoldInfo=tagMCFirstGoldInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldInfo.Cmd,m_NAtagMCFirstGoldInfo.SubCmd))] = m_NAtagMCFirstGoldInfo
+
+
+#------------------------------------------------------
+# AA 08 首充提示剩余时间 #tagMCFirstGoldTime
+
+class  tagMCFirstGoldTime(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("FirstGoldRemainTime", c_int),    #首充提示剩余时间
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x08
+        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 = 0x08
+        self.FirstGoldRemainTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFirstGoldTime)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 08 首充提示剩余时间 //tagMCFirstGoldTime:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                FirstGoldRemainTime:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.FirstGoldRemainTime
+                                )
+        return DumpString
+
+
+m_NAtagMCFirstGoldTime=tagMCFirstGoldTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldTime.Cmd,m_NAtagMCFirstGoldTime.SubCmd))] = m_NAtagMCFirstGoldTime
+
+
+#------------------------------------------------------
+# AA 12 限时礼包活动信息 #tagMCFlashGiftbagInfo
+
+class  tagMCFlashGiftbagItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ("IsMainItem", c_ubyte),    #是否标的物
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        self.IsMainItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFlashGiftbagItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 12 限时礼包活动信息 //tagMCFlashGiftbagInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d,
+                                IsMainItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind,
+                                self.IsMainItem
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbag(Structure):
+    GiftID = 0    #(DWORD GiftID)//礼包ID
+    OrderInfoLen = 0    #(BYTE OrderInfoLen)
+    OrderInfo = ""    #(String OrderInfo)//商品编号
+    BuyCountLimit = 0    #(BYTE BuyCountLimit)//限购数
+    RMB = 0    #(DWORD RMB)//所需RMB,元
+    RMBOriginal = 0    #(DWORD RMBOriginal)//原价
+    GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
+    ItemInfo = list()    #(vector<tagMCFlashGiftbagItem> ItemInfo)// 物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen)
+        self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RMBOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftItemCount):
+            temItemInfo = tagMCFlashGiftbagItem()
+            _pos = temItemInfo.ReadData(_lpData, _pos)
+            self.ItemInfo.append(temItemInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftID = 0
+        self.OrderInfoLen = 0
+        self.OrderInfo = ""
+        self.BuyCountLimit = 0
+        self.RMB = 0
+        self.RMBOriginal = 0
+        self.GiftItemCount = 0
+        self.ItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.OrderInfo)
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.GiftItemCount):
+            length += self.ItemInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.GiftID)
+        data = CommFunc.WriteBYTE(data, self.OrderInfoLen)
+        data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo)
+        data = CommFunc.WriteBYTE(data, self.BuyCountLimit)
+        data = CommFunc.WriteDWORD(data, self.RMB)
+        data = CommFunc.WriteDWORD(data, self.RMBOriginal)
+        data = CommFunc.WriteBYTE(data, self.GiftItemCount)
+        for i in range(self.GiftItemCount):
+            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftID:%d,
+                                OrderInfoLen:%d,
+                                OrderInfo:%s,
+                                BuyCountLimit:%d,
+                                RMB:%d,
+                                RMBOriginal:%d,
+                                GiftItemCount:%d,
+                                ItemInfo:%s
+                                '''\
+                                %(
+                                self.GiftID,
+                                self.OrderInfoLen,
+                                self.OrderInfo,
+                                self.BuyCountLimit,
+                                self.RMB,
+                                self.RMBOriginal,
+                                self.GiftItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbagType(Structure):
+    GiftbagCount = 0    #(BYTE GiftbagCount)// 礼包数
+    GiftbagInfo = list()    #(vector<tagMCFlashGiftbag> GiftbagInfo)// 礼包信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagCount):
+            temGiftbagInfo = tagMCFlashGiftbag()
+            _pos = temGiftbagInfo.ReadData(_lpData, _pos)
+            self.GiftbagInfo.append(temGiftbagInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftbagCount = 0
+        self.GiftbagInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.GiftbagCount):
+            length += self.GiftbagInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GiftbagCount)
+        for i in range(self.GiftbagCount):
+            data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftbagCount:%d,
+                                GiftbagInfo:%s
+                                '''\
+                                %(
+                                self.GiftbagCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbagTime(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  tagMCFlashGiftbagInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagMCFlashGiftbagTime> ActivityTime)//活动时间
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    GiftbagTypeCount = 0    #(BYTE GiftbagTypeCount)// 礼包类型数
+    GiftbagTypeInfo = list()    #(vector<tagMCFlashGiftbagType> GiftbagTypeInfo)// 礼包类型信息, 当有多个且有多个活动时间段时则每个时间段对应一个礼包类型;
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagMCFlashGiftbagTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GiftbagTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagTypeCount):
+            temGiftbagTypeInfo = tagMCFlashGiftbagType()
+            _pos = temGiftbagTypeInfo.ReadData(_lpData, _pos)
+            self.GiftbagTypeInfo.append(temGiftbagTypeInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x12
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AdvanceMinutes = 0
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.GiftbagTypeCount = 0
+        self.GiftbagTypeInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.GiftbagTypeCount):
+            length += self.GiftbagTypeInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.GiftbagTypeCount)
+        for i in range(self.GiftbagTypeCount):
+            data = CommFunc.WriteString(data, self.GiftbagTypeInfo[i].GetLength(), self.GiftbagTypeInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AdvanceMinutes:%d,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                GiftbagTypeCount:%d,
+                                GiftbagTypeInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AdvanceMinutes,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.GiftbagTypeCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFlashGiftbagInfo=tagMCFlashGiftbagInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagInfo.Head.Cmd,m_NAtagMCFlashGiftbagInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagInfo
+
+
+#------------------------------------------------------
+# AA 13 限时礼包玩家活动信息 #tagMCFlashGiftbagPlayerInfo
+
+class  tagMCFlashGiftbagBuyCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GiftbagID", c_int),    #礼包ID
+                  ("BuyCount", 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.GiftbagID = 0
+        self.BuyCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFlashGiftbagBuyCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 13 限时礼包玩家活动信息 //tagMCFlashGiftbagPlayerInfo:
+                                GiftbagID:%d,
+                                BuyCount:%d
+                                '''\
+                                %(
+                                self.GiftbagID,
+                                self.BuyCount
+                                )
+        return DumpString
+
+
+class  tagMCFlashGiftbagPlayerInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BuyCountList = list()    #(vector<tagMCFlashGiftbagBuyCount> BuyCountList)//礼包购买次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temBuyCountList = tagMCFlashGiftbagBuyCount()
+            _pos = temBuyCountList.ReadData(_lpData, _pos)
+            self.BuyCountList.append(temBuyCountList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x13
+        self.Count = 0
+        self.BuyCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.BuyCountList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BuyCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFlashGiftbagPlayerInfo=tagMCFlashGiftbagPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagPlayerInfo.Head.Cmd,m_NAtagMCFlashGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagPlayerInfo
+
+
+#------------------------------------------------------
+# AA 18 限时抢购活动玩家预约信息 #tagMCFlashSaleAppointmentInfo
+
+class  tagMCFlashSaleAppointmentState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GoodsMark", c_int),    # 商品标识
+                  ("State", c_ubyte),    # 是否预约
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.GoodsMark = 0
+        self.State = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFlashSaleAppointmentState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 18 限时抢购活动玩家预约信息 //tagMCFlashSaleAppointmentInfo:
+                                GoodsMark:%d,
+                                State:%d
+                                '''\
+                                %(
+                                self.GoodsMark,
                                 self.State
                                 )
         return DumpString
 
 
-m_NAtagMCDailyGoldState=tagMCDailyGoldState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGoldState.Cmd,m_NAtagMCDailyGoldState.SubCmd))] = m_NAtagMCDailyGoldState
+class  tagMCFlashSaleAppointmentInfo(Structure):
+    Head = tagHead()
+    IsAll = 0    #(BYTE IsAll)// 是否全部
+    GoodsCount = 0    #(WORD GoodsCount)// 商品数
+    GoodsList = list()    #(vector<tagMCFlashSaleAppointmentState> GoodsList)// 预约的商品
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GoodsCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.GoodsCount):
+            temGoodsList = tagMCFlashSaleAppointmentState()
+            _pos = temGoodsList.ReadData(_lpData, _pos)
+            self.GoodsList.append(temGoodsList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x18
+        self.IsAll = 0
+        self.GoodsCount = 0
+        self.GoodsList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2
+        for i in range(self.GoodsCount):
+            length += self.GoodsList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsAll)
+        data = CommFunc.WriteWORD(data, self.GoodsCount)
+        for i in range(self.GoodsCount):
+            data = CommFunc.WriteString(data, self.GoodsList[i].GetLength(), self.GoodsList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                IsAll:%d,
+                                GoodsCount:%d,
+                                GoodsList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.IsAll,
+                                self.GoodsCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFlashSaleAppointmentInfo=tagMCFlashSaleAppointmentInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleAppointmentInfo.Head.Cmd,m_NAtagMCFlashSaleAppointmentInfo.Head.SubCmd))] = m_NAtagMCFlashSaleAppointmentInfo
+
+
+#------------------------------------------------------
+# AA 17 限时抢购活动信息 #tagMCFlashSaleInfo
+
+class  tagMCFlashSaleGiftbag(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GiftID", c_int),    #商城表的物品ID
+                  ("BuyCountLimit", c_ubyte),    #限购数
+                  ("ServerBuyCountLimit", c_ushort),    #全服限购数
+                  ("MoneyType", c_ubyte),    #消耗货币类型
+                  ("MoneyNumber", c_int),    #消耗货币数量
+                  ("MoneyOriginal", c_int),    #原价
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.GiftID = 0
+        self.BuyCountLimit = 0
+        self.ServerBuyCountLimit = 0
+        self.MoneyType = 0
+        self.MoneyNumber = 0
+        self.MoneyOriginal = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFlashSaleGiftbag)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 17 限时抢购活动信息 //tagMCFlashSaleInfo:
+                                GiftID:%d,
+                                BuyCountLimit:%d,
+                                ServerBuyCountLimit:%d,
+                                MoneyType:%d,
+                                MoneyNumber:%d,
+                                MoneyOriginal:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.GiftID,
+                                self.BuyCountLimit,
+                                self.ServerBuyCountLimit,
+                                self.MoneyType,
+                                self.MoneyNumber,
+                                self.MoneyOriginal,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCFlashSaleShop(Structure):
+    DayIndex = 0    #(BYTE DayIndex)// 活动第几天
+    TimeIndex = 0    #(BYTE TimeIndex)// 第几个时间段
+    GiftbagCount = 0    #(BYTE GiftbagCount)// 商店礼包数
+    GiftbagInfo = list()    #(vector<tagMCFlashSaleGiftbag> GiftbagInfo)// 礼包信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.DayIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TimeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagCount):
+            temGiftbagInfo = tagMCFlashSaleGiftbag()
+            _pos = temGiftbagInfo.ReadData(_lpData, _pos)
+            self.GiftbagInfo.append(temGiftbagInfo)
+        return _pos
+
+    def Clear(self):
+        self.DayIndex = 0
+        self.TimeIndex = 0
+        self.GiftbagCount = 0
+        self.GiftbagInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.GiftbagCount):
+            length += self.GiftbagInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.DayIndex)
+        data = CommFunc.WriteBYTE(data, self.TimeIndex)
+        data = CommFunc.WriteBYTE(data, self.GiftbagCount)
+        for i in range(self.GiftbagCount):
+            data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                DayIndex:%d,
+                                TimeIndex:%d,
+                                GiftbagCount:%d,
+                                GiftbagInfo:%s
+                                '''\
+                                %(
+                                self.DayIndex,
+                                self.TimeIndex,
+                                self.GiftbagCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCFlashSaleTime(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  tagMCFlashSaleInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagMCFlashSaleTime> ActivityTime)//活动时间
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ShopCount = 0    #(BYTE ShopCount)// 商店数
+    ShopInfo = list()    #(vector<tagMCFlashSaleShop> ShopInfo)// 商店信息, 当有多个商店且有多个活动时间段时则每个时间段对应一个商店;
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x17
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagMCFlashSaleTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ShopCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ShopCount):
+            temShopInfo = tagMCFlashSaleShop()
+            _pos = temShopInfo.ReadData(_lpData, _pos)
+            self.ShopInfo.append(temShopInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x17
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AdvanceMinutes = 0
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.ShopCount = 0
+        self.ShopInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.ShopCount):
+            length += self.ShopInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ShopCount)
+        for i in range(self.ShopCount):
+            data = CommFunc.WriteString(data, self.ShopInfo[i].GetLength(), self.ShopInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AdvanceMinutes:%d,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                ShopCount:%d,
+                                ShopInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AdvanceMinutes,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.ShopCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFlashSaleInfo=tagMCFlashSaleInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleInfo.Head.Cmd,m_NAtagMCFlashSaleInfo.Head.SubCmd))] = m_NAtagMCFlashSaleInfo
 
 
 #------------------------------------------------------
@@ -18717,6 +21904,408 @@
 
 
 #------------------------------------------------------
+# AA 11 限时特惠活动信息 #tagMCSpringSaleInfo
+
+class  tagMCSpringSaleItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ("IsMainItem", c_ubyte),    #是否标的物
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        self.IsMainItem = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSpringSaleItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 11 限时特惠活动信息 //tagMCSpringSaleInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d,
+                                IsMainItem:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind,
+                                self.IsMainItem
+                                )
+        return DumpString
+
+
+class  tagMCSpringSaleGiftbag(Structure):
+    GiftID = 0    #(DWORD GiftID)//商城表的物品ID
+    BuyCountLimit = 0    #(BYTE BuyCountLimit)//限购数
+    MoneyType = 0    #(BYTE MoneyType)//消耗货币类型
+    MoneyNumber = 0    #(DWORD MoneyNumber)//消耗货币数量
+    MoneyOriginal = 0    #(DWORD MoneyOriginal)//原价
+    GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
+    ItemInfo = list()    #(vector<tagMCSpringSaleItem> ItemInfo)// 物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoneyNumber,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MoneyOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftItemCount):
+            temItemInfo = tagMCSpringSaleItem()
+            _pos = temItemInfo.ReadData(_lpData, _pos)
+            self.ItemInfo.append(temItemInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftID = 0
+        self.BuyCountLimit = 0
+        self.MoneyType = 0
+        self.MoneyNumber = 0
+        self.MoneyOriginal = 0
+        self.GiftItemCount = 0
+        self.ItemInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.GiftItemCount):
+            length += self.ItemInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.GiftID)
+        data = CommFunc.WriteBYTE(data, self.BuyCountLimit)
+        data = CommFunc.WriteBYTE(data, self.MoneyType)
+        data = CommFunc.WriteDWORD(data, self.MoneyNumber)
+        data = CommFunc.WriteDWORD(data, self.MoneyOriginal)
+        data = CommFunc.WriteBYTE(data, self.GiftItemCount)
+        for i in range(self.GiftItemCount):
+            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftID:%d,
+                                BuyCountLimit:%d,
+                                MoneyType:%d,
+                                MoneyNumber:%d,
+                                MoneyOriginal:%d,
+                                GiftItemCount:%d,
+                                ItemInfo:%s
+                                '''\
+                                %(
+                                self.GiftID,
+                                self.BuyCountLimit,
+                                self.MoneyType,
+                                self.MoneyNumber,
+                                self.MoneyOriginal,
+                                self.GiftItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCSpringSaleShop(Structure):
+    GiftbagCount = 0    #(BYTE GiftbagCount)// 商店礼包数
+    GiftbagInfo = list()    #(vector<tagMCSpringSaleGiftbag> GiftbagInfo)// 礼包信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GiftbagCount):
+            temGiftbagInfo = tagMCSpringSaleGiftbag()
+            _pos = temGiftbagInfo.ReadData(_lpData, _pos)
+            self.GiftbagInfo.append(temGiftbagInfo)
+        return _pos
+
+    def Clear(self):
+        self.GiftbagCount = 0
+        self.GiftbagInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        for i in range(self.GiftbagCount):
+            length += self.GiftbagInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GiftbagCount)
+        for i in range(self.GiftbagCount):
+            data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GiftbagCount:%d,
+                                GiftbagInfo:%s
+                                '''\
+                                %(
+                                self.GiftbagCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCSpringSaleTime(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  tagMCSpringSaleInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AdvanceMinutes = 0    #(WORD AdvanceMinutes)// 提前显示分钟
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagMCSpringSaleTime> ActivityTime)//活动时间
+    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ShopCount = 0    #(BYTE ShopCount)// 商店数
+    ShopInfo = list()    #(vector<tagMCSpringSaleShop> ShopInfo)// 商店信息, 当有多个商店且有多个活动时间段时则每个时间段对应一个商店;
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagMCSpringSaleTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ShopCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ShopCount):
+            temShopInfo = tagMCSpringSaleShop()
+            _pos = temShopInfo.ReadData(_lpData, _pos)
+            self.ShopInfo.append(temShopInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x11
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AdvanceMinutes = 0
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.IsDayReset = 0
+        self.LimitLV = 0
+        self.ShopCount = 0
+        self.ShopInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.ShopCount):
+            length += self.ShopInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.AdvanceMinutes)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsDayReset)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ShopCount)
+        for i in range(self.ShopCount):
+            data = CommFunc.WriteString(data, self.ShopInfo[i].GetLength(), self.ShopInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AdvanceMinutes:%d,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                IsDayReset:%d,
+                                LimitLV:%d,
+                                ShopCount:%d,
+                                ShopInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AdvanceMinutes,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.IsDayReset,
+                                self.LimitLV,
+                                self.ShopCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCSpringSaleInfo=tagMCSpringSaleInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSpringSaleInfo.Head.Cmd,m_NAtagMCSpringSaleInfo.Head.SubCmd))] = m_NAtagMCSpringSaleInfo
+
+
+#------------------------------------------------------
+# AA 16 通知超值礼包信息 #tagMCSuperGiftInfo
+
+class  tagMCSuperGiftInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("StartTime", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x16
+        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 = 0x16
+        self.StartTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCSuperGiftInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 16 通知超值礼包信息 //tagMCSuperGiftInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                StartTime:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.StartTime
+                                )
+        return DumpString
+
+
+m_NAtagMCSuperGiftInfo=tagMCSuperGiftInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Cmd,m_NAtagMCSuperGiftInfo.SubCmd))] = m_NAtagMCSuperGiftInfo
+
+
+#------------------------------------------------------
 #AA 01 累计登陆天数信息 #tagMCTotalLoginDayCntInfo
 
 class  tagMCTotalLoginDayCntInfo(Structure):
@@ -18773,20 +22362,21 @@
 
 
 #------------------------------------------------------
-# AB 20 嘉年华抽奖记录 #tagMCCarnivalRecord
+# AA 1C 累计充值玩家活动信息 #tagMCTotalRechargePlayerInfo
 
-class  tagMCCarnivalRecord(Structure):
+class  tagMCTotalRechargePlayerInfo(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("JoinRecord", c_int),    
+                  ("GoldTotal", c_int),    #本次活动已累计充值仙玉数
+                  ("AwardRecord", c_int),    #奖励领奖记录,按奖励索引二进制位存储是否已领取
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x20
+        self.Cmd = 0xAA
+        self.SubCmd = 0x1C
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -18795,55 +22385,53 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x20
-        self.JoinRecord = 0
+        self.Cmd = 0xAA
+        self.SubCmd = 0x1C
+        self.GoldTotal = 0
+        self.AwardRecord = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCCarnivalRecord)
+        return sizeof(tagMCTotalRechargePlayerInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AB 20 嘉年华抽奖记录 //tagMCCarnivalRecord:
+        DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                JoinRecord:%d
+                                GoldTotal:%d,
+                                AwardRecord:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.JoinRecord
+                                self.GoldTotal,
+                                self.AwardRecord
                                 )
         return DumpString
 
 
-m_NAtagMCCarnivalRecord=tagMCCarnivalRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCarnivalRecord.Cmd,m_NAtagMCCarnivalRecord.SubCmd))] = m_NAtagMCCarnivalRecord
+m_NAtagMCTotalRechargePlayerInfo=tagMCTotalRechargePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalRechargePlayerInfo.Cmd,m_NAtagMCTotalRechargePlayerInfo.SubCmd))] = m_NAtagMCTotalRechargePlayerInfo
 
 
 #------------------------------------------------------
-# AB 15 骰子投掷结果 #tagMCDiceTakeResult
+# AA 14 仙界盛典充值大礼 #tagMCXJSDRecharge
 
-class  tagMCDiceTakeResult(Structure):
+class  tagMCXJSDRecharge(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("PosIndex", c_int),    # 骰子的位置
-                  ("CfgIndex", c_ushort),    # 物品配置索引
-                  ("TakeNum", c_ushort),    # 已投掷次数
-                  ("TimeNum", c_ushort),    # 按时间增加的次数
-                  ("BuyNum", c_ushort),    # 已购买的次数
-                  ("AwardNum", c_ushort),    # 奖励的次数
+                  ("State", c_ubyte),    #0-不可领 1-可领 2-已领取
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x15
+        self.Cmd = 0xAA
+        self.SubCmd = 0x14
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -18852,48 +22440,145 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xAB
-        self.SubCmd = 0x15
-        self.PosIndex = 0
-        self.CfgIndex = 0
-        self.TakeNum = 0
-        self.TimeNum = 0
-        self.BuyNum = 0
-        self.AwardNum = 0
+        self.Cmd = 0xAA
+        self.SubCmd = 0x14
+        self.State = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCDiceTakeResult)
+        return sizeof(tagMCXJSDRecharge)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// AB 15 骰子投掷结果 //tagMCDiceTakeResult:
+        DumpString = '''// AA 14 仙界盛典充值大礼 //tagMCXJSDRecharge:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PosIndex:%d,
-                                CfgIndex:%d,
-                                TakeNum:%d,
-                                TimeNum:%d,
-                                BuyNum:%d,
-                                AwardNum:%d
+                                State:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PosIndex,
-                                self.CfgIndex,
-                                self.TakeNum,
-                                self.TimeNum,
-                                self.BuyNum,
-                                self.AwardNum
+                                self.State
                                 )
         return DumpString
 
 
-m_NAtagMCDiceTakeResult=tagMCDiceTakeResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceTakeResult.Cmd,m_NAtagMCDiceTakeResult.SubCmd))] = m_NAtagMCDiceTakeResult
+m_NAtagMCXJSDRecharge=tagMCXJSDRecharge()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXJSDRecharge.Cmd,m_NAtagMCXJSDRecharge.SubCmd))] = m_NAtagMCXJSDRecharge
+
+
+#------------------------------------------------------
+# AB 03 Boss复活玩家活动信息 #tagMCBossRebornPlayerInfo
+
+class  tagMCBossRebornData(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ActID", c_ubyte),    #活动ID
+                  ("CurTimes", c_ushort),    #已完成次数
+                  ("GotTimes", 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.ActID = 0
+        self.CurTimes = 0
+        self.GotTimes = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBossRebornData)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AB 03 Boss复活玩家活动信息 //tagMCBossRebornPlayerInfo:
+                                ActID:%d,
+                                CurTimes:%d,
+                                GotTimes:%d
+                                '''\
+                                %(
+                                self.ActID,
+                                self.CurTimes,
+                                self.GotTimes
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornPlayerInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)//活动个数
+    DataList = list()    #(vector<tagMCBossRebornData> DataList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temDataList = tagMCBossRebornData()
+            _pos = temDataList.ReadData(_lpData, _pos)
+            self.DataList.append(temDataList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x03
+        self.Count = 0
+        self.DataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.DataList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.DataList[i].GetLength(), self.DataList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                DataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossRebornPlayerInfo=tagMCBossRebornPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornPlayerInfo.Head.Cmd,m_NAtagMCBossRebornPlayerInfo.Head.SubCmd))] = m_NAtagMCBossRebornPlayerInfo
 
 
 #------------------------------------------------------
@@ -19085,294 +22770,6 @@
 
 
 #------------------------------------------------------
-# AB 11  全民进阶总动员活动奖励情况 #tagMCFuncUpgrade
-
-class  tagMCFuncUpgrade(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncAwardState1", c_int),    
-                  ("FuncAwardState2", c_int),    
-                  ("FuncAwardState3", c_int),    
-                  ("FuncAwardState4", c_int),    
-                  ("FuncAwardState5", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x11
-        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 = 0xAB
-        self.SubCmd = 0x11
-        self.FuncAwardState1 = 0
-        self.FuncAwardState2 = 0
-        self.FuncAwardState3 = 0
-        self.FuncAwardState4 = 0
-        self.FuncAwardState5 = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFuncUpgrade)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 11  全民进阶总动员活动奖励情况 //tagMCFuncUpgrade:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncAwardState1:%d,
-                                FuncAwardState2:%d,
-                                FuncAwardState3:%d,
-                                FuncAwardState4:%d,
-                                FuncAwardState5:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncAwardState1,
-                                self.FuncAwardState2,
-                                self.FuncAwardState3,
-                                self.FuncAwardState4,
-                                self.FuncAwardState5
-                                )
-        return DumpString
-
-
-m_NAtagMCFuncUpgrade=tagMCFuncUpgrade()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncUpgrade.Cmd,m_NAtagMCFuncUpgrade.SubCmd))] = m_NAtagMCFuncUpgrade
-
-
-#------------------------------------------------------
-# AB 10  首充团购每日充值钻石数 #tagMCGroupFirstRechargeGold
-
-class  tagMCGroupFirstRechargeGold(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    GoldList = list()    #(vector<DWORD> GoldList)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x10
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.GoldList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x10
-        self.Count = 0
-        self.GoldList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 4 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteDWORD(data, self.GoldList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                GoldList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCGroupFirstRechargeGold=tagMCGroupFirstRechargeGold()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGroupFirstRechargeGold.Head.Cmd,m_NAtagMCGroupFirstRechargeGold.Head.SubCmd))] = m_NAtagMCGroupFirstRechargeGold
-
-
-#------------------------------------------------------
-# AB 21 领主之路活动信息 #tagMCLingZhuZhiLuInfo
-
-class  tagMCLingZhuZhiLuScore(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("LingZhuZLScoreNum", c_ubyte),    # 积分类型编号
-                  ("LingZhuZLScore", c_int),    # 已获得积分
-                  ("LingZhuZLData", c_int),    # 积分类型数据
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x21
-        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 = 0xAB
-        self.SubCmd = 0x21
-        self.LingZhuZLScoreNum = 0
-        self.LingZhuZLScore = 0
-        self.LingZhuZLData = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCLingZhuZhiLuScore)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 21 领主之路活动信息 //tagMCLingZhuZhiLuInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                LingZhuZLScoreNum:%d,
-                                LingZhuZLScore:%d,
-                                LingZhuZLData:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.LingZhuZLScoreNum,
-                                self.LingZhuZLScore,
-                                self.LingZhuZLData
-                                )
-        return DumpString
-
-
-class  tagMCLingZhuZhiLuInfo(Structure):
-    Head = tagHead()
-    LingZhuZLActionNum = 0    #(DWORD LingZhuZLActionNum)// 领主之路活动当前活动编号
-    LingZhuZLPrizeRecordCnt = 0    #(BYTE LingZhuZLPrizeRecordCnt)// 进度奖励领取记录个数
-    LingZhuZLPrizeRecord = list()    #(vector<DWORD> LingZhuZLPrizeRecord)// 进度奖励领取记录, 每级奖励一个值, 按奖励索引位二进制存储是否已领
-    LingZhuZLTotalScore = 0    #(DWORD LingZhuZLTotalScore)// 当前总积分
-    LingZhuZLScoreCount = 0    #(BYTE LingZhuZLScoreCount)// 同步的积分个数, 有变更的才会同步
-    LingZhuZLScoreList = list()    #(vector<tagMCLingZhuZhiLuScore> LingZhuZLScoreList)// 同步积分信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x21
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.LingZhuZLActionNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LingZhuZLPrizeRecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.LingZhuZLPrizeRecordCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.LingZhuZLPrizeRecord.append(value)
-        self.LingZhuZLTotalScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LingZhuZLScoreCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.LingZhuZLScoreCount):
-            temLingZhuZLScoreList = tagMCLingZhuZhiLuScore()
-            _pos = temLingZhuZLScoreList.ReadData(_lpData, _pos)
-            self.LingZhuZLScoreList.append(temLingZhuZLScoreList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x21
-        self.LingZhuZLActionNum = 0
-        self.LingZhuZLPrizeRecordCnt = 0
-        self.LingZhuZLPrizeRecord = list()
-        self.LingZhuZLTotalScore = 0
-        self.LingZhuZLScoreCount = 0
-        self.LingZhuZLScoreList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.LingZhuZLPrizeRecordCnt
-        length += 4
-        length += 1
-        for i in range(self.LingZhuZLScoreCount):
-            length += self.LingZhuZLScoreList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.LingZhuZLActionNum)
-        data = CommFunc.WriteBYTE(data, self.LingZhuZLPrizeRecordCnt)
-        for i in range(self.LingZhuZLPrizeRecordCnt):
-            data = CommFunc.WriteDWORD(data, self.LingZhuZLPrizeRecord[i])
-        data = CommFunc.WriteDWORD(data, self.LingZhuZLTotalScore)
-        data = CommFunc.WriteBYTE(data, self.LingZhuZLScoreCount)
-        for i in range(self.LingZhuZLScoreCount):
-            data = CommFunc.WriteString(data, self.LingZhuZLScoreList[i].GetLength(), self.LingZhuZLScoreList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                LingZhuZLActionNum:%d,
-                                LingZhuZLPrizeRecordCnt:%d,
-                                LingZhuZLPrizeRecord:%s,
-                                LingZhuZLTotalScore:%d,
-                                LingZhuZLScoreCount:%d,
-                                LingZhuZLScoreList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.LingZhuZLActionNum,
-                                self.LingZhuZLPrizeRecordCnt,
-                                "...",
-                                self.LingZhuZLTotalScore,
-                                self.LingZhuZLScoreCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCLingZhuZhiLuInfo=tagMCLingZhuZhiLuInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingZhuZhiLuInfo.Head.Cmd,m_NAtagMCLingZhuZhiLuInfo.Head.SubCmd))] = m_NAtagMCLingZhuZhiLuInfo
-
-
-#------------------------------------------------------
 # AB 02  领地占领每日奖励领奖情况 #tagMCManorDailyAward
 
 class  tagMCManorDailyAward(Structure):
@@ -19486,6 +22883,217 @@
 
 m_NAtagMCManorWarResult=tagMCManorWarResult()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCManorWarResult.Cmd,m_NAtagMCManorWarResult.SubCmd))] = m_NAtagMCManorWarResult
+
+
+#------------------------------------------------------
+# AB 04 Boss复活活动信息 #tagMCBossRebornInfo
+
+class  tagMCBossRebornAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBossRebornAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornTaskInfo(Structure):
+    TaskID = 0    #(BYTE TaskID)// id
+    TotalTimes = 0    #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
+    SingleTimes = 0    #(BYTE SingleTimes)// 单次领奖需要次数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItem = list()    #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItem = tagMCBossRebornAwardItem()
+            _pos = temAwardItem.ReadData(_lpData, _pos)
+            self.AwardItem.append(temAwardItem)
+        return _pos
+
+    def Clear(self):
+        self.TaskID = 0
+        self.TotalTimes = 0
+        self.SingleTimes = 0
+        self.AwardItemCount = 0
+        self.AwardItem = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItem[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TaskID)
+        data = CommFunc.WriteBYTE(data, self.TotalTimes)
+        data = CommFunc.WriteBYTE(data, self.SingleTimes)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                TaskID:%d,
+                                TotalTimes:%d,
+                                SingleTimes:%d,
+                                AwardItemCount:%d,
+                                AwardItem:%s
+                                '''\
+                                %(
+                                self.TaskID,
+                                self.TotalTimes,
+                                self.SingleTimes,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCBossRebornInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    TaskCnt = 0    #(BYTE TaskCnt)
+    TaskInfo = list()    #(vector<tagMCBossRebornTaskInfo> TaskInfo)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TaskCnt):
+            temTaskInfo = tagMCBossRebornTaskInfo()
+            _pos = temTaskInfo.ReadData(_lpData, _pos)
+            self.TaskInfo.append(temTaskInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAB
+        self.Head.SubCmd = 0x04
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.ResetType = 0
+        self.LimitLV = 0
+        self.TaskCnt = 0
+        self.TaskInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.TaskCnt):
+            length += self.TaskInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.TaskCnt)
+        for i in range(self.TaskCnt):
+            data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                ResetType:%d,
+                                LimitLV:%d,
+                                TaskCnt:%d,
+                                TaskInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.ResetType,
+                                self.LimitLV,
+                                self.TaskCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
 
 
 #------------------------------------------------------
@@ -19657,157 +23265,63 @@
 
 
 #------------------------------------------------------
-# AB 18 二维码红包 #tagMCQRCodeRedpack
+# AB 24 开服红包信息 #tagMCOpenServerRedPacketInfo
 
-class  tagMCQRCodeRedpackUrl(Structure):
-    Head = tagHead()
-    PackMoneyMark = 0    #(BYTE PackMoneyMark)// 红包金额标识, 1是1元, 2是1.88元, 依次递增
-    PackOpenTime = 0    #(DWORD PackOpenTime)// 红包开启时间
-    RedpackUrlLen = 0    #(WORD RedpackUrlLen)
-    RedpackUrl = ""    #(String RedpackUrl)
-    data = None
+class  tagMCOpenServerRedPacketInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MoneyNum", c_int),    # 累积抢到多少钱
+                  ("GrabCnt", c_ushort),    # 已抢红包次数
+                  ("StartTime", c_int),    # 开始倒计时时间
+                  ]
 
     def __init__(self):
         self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x18
+        self.Cmd = 0xAB
+        self.SubCmd = 0x24
         return
 
-    def ReadData(self, _lpData, _pos=0, _Len=0):
+    def ReadData(self, stringData, _pos=0, _len=0):
         self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PackMoneyMark,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PackOpenTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RedpackUrlLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RedpackUrl,_pos = CommFunc.ReadString(_lpData, _pos,self.RedpackUrlLen)
-        return _pos
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
 
     def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x18
-        self.PackMoneyMark = 0
-        self.PackOpenTime = 0
-        self.RedpackUrlLen = 0
-        self.RedpackUrl = ""
+        self.Cmd = 0xAB
+        self.SubCmd = 0x24
+        self.MoneyNum = 0
+        self.GrabCnt = 0
+        self.StartTime = 0
         return
 
     def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 2
-        length += len(self.RedpackUrl)
-
-        return length
+        return sizeof(tagMCOpenServerRedPacketInfo)
 
     def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PackMoneyMark)
-        data = CommFunc.WriteDWORD(data, self.PackOpenTime)
-        data = CommFunc.WriteWORD(data, self.RedpackUrlLen)
-        data = CommFunc.WriteString(data, self.RedpackUrlLen, self.RedpackUrl)
-        return data
+        return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PackMoneyMark:%d,
-                                PackOpenTime:%d,
-                                RedpackUrlLen:%d,
-                                RedpackUrl:%s
+        DumpString = '''// AB 24 开服红包信息 //tagMCOpenServerRedPacketInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MoneyNum:%d,
+                                GrabCnt:%d,
+                                StartTime:%d
                                 '''\
                                 %(
-                                self.Head.OutputString(),
-                                self.PackMoneyMark,
-                                self.PackOpenTime,
-                                self.RedpackUrlLen,
-                                self.RedpackUrl
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MoneyNum,
+                                self.GrabCnt,
+                                self.StartTime
                                 )
         return DumpString
 
 
-class  tagMCQRCodeRedpack(Structure):
-    Head = tagHead()
-    CanOpenCnt = 0    #(BYTE CanOpenCnt)//总共可打开红包次数
-    TotalOpenCnt = 0    #(BYTE TotalOpenCnt)//总共已打开红包次数
-    TodayOpenCnt = 0    #(BYTE TodayOpenCnt)//今日已打开红包次数
-    RedpackUrlList = list()    #(vector<tagMCQRCodeRedpackUrl> RedpackUrlList)// 红包二维码领取地址
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x18
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.CanOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TotalOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TodayOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TotalOpenCnt):
-            temRedpackUrlList = tagMCQRCodeRedpackUrl()
-            _pos = temRedpackUrlList.ReadData(_lpData, _pos)
-            self.RedpackUrlList.append(temRedpackUrlList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x18
-        self.CanOpenCnt = 0
-        self.TotalOpenCnt = 0
-        self.TodayOpenCnt = 0
-        self.RedpackUrlList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.TotalOpenCnt):
-            length += self.RedpackUrlList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.CanOpenCnt)
-        data = CommFunc.WriteBYTE(data, self.TotalOpenCnt)
-        data = CommFunc.WriteBYTE(data, self.TodayOpenCnt)
-        for i in range(self.TotalOpenCnt):
-            data = CommFunc.WriteString(data, self.RedpackUrlList[i].GetLength(), self.RedpackUrlList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                CanOpenCnt:%d,
-                                TotalOpenCnt:%d,
-                                TodayOpenCnt:%d,
-                                RedpackUrlList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.CanOpenCnt,
-                                self.TotalOpenCnt,
-                                self.TodayOpenCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCQRCodeRedpack=tagMCQRCodeRedpack()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCQRCodeRedpack.Head.Cmd,m_NAtagMCQRCodeRedpack.Head.SubCmd))] = m_NAtagMCQRCodeRedpack
+m_NAtagMCOpenServerRedPacketInfo=tagMCOpenServerRedPacketInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOpenServerRedPacketInfo.Cmd,m_NAtagMCOpenServerRedPacketInfo.SubCmd))] = m_NAtagMCOpenServerRedPacketInfo
 
 
 #------------------------------------------------------
@@ -19875,191 +23389,6 @@
 
 
 #------------------------------------------------------
-# AB 16 天神信息 #tagMCSkyGodInfo
-
-class  tagMCSkyGodInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SkyGodLV", c_ushort),    # 天神等级
-                  ("SkyGodExp", c_int),    # 天神经验
-                  ("SummonNum", c_ushort),    # 已召唤次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x16
-        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 = 0xAB
-        self.SubCmd = 0x16
-        self.SkyGodLV = 0
-        self.SkyGodExp = 0
-        self.SummonNum = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCSkyGodInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 16 天神信息 //tagMCSkyGodInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SkyGodLV:%d,
-                                SkyGodExp:%d,
-                                SummonNum:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SkyGodLV,
-                                self.SkyGodExp,
-                                self.SummonNum
-                                )
-        return DumpString
-
-
-m_NAtagMCSkyGodInfo=tagMCSkyGodInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyGodInfo.Cmd,m_NAtagMCSkyGodInfo.SubCmd))] = m_NAtagMCSkyGodInfo
-
-
-#------------------------------------------------------
-# AB 14 老虎机抽奖结果 #tagMCSlotsTakeResult
-
-class  tagMCSlotsItemInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RecordType", c_ubyte),    # 记录类型
-                  ("Index", c_ushort),    # 物品在老虎机上索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x14
-        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 = 0xAB
-        self.SubCmd = 0x14
-        self.RecordType = 0
-        self.Index = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCSlotsItemInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 14 老虎机抽奖结果 //tagMCSlotsTakeResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RecordType:%d,
-                                Index:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RecordType,
-                                self.Index
-                                )
-        return DumpString
-
-
-class  tagMCSlotsTakeResult(Structure):
-    Head = tagHead()
-    Type = 0    #(BYTE Type)// 老虎机类型
-    Num = 0    #(WORD Num)// 物品个数
-    ItemList = list()    #(vector<tagMCSlotsItemInfo> ItemList)// 物品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Num,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Num):
-            temItemList = tagMCSlotsItemInfo()
-            _pos = temItemList.ReadData(_lpData, _pos)
-            self.ItemList.append(temItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAB
-        self.Head.SubCmd = 0x14
-        self.Type = 0
-        self.Num = 0
-        self.ItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 2
-        for i in range(self.Num):
-            length += self.ItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Type)
-        data = CommFunc.WriteWORD(data, self.Num)
-        for i in range(self.Num):
-            data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Type:%d,
-                                Num:%d,
-                                ItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Type,
-                                self.Num,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCSlotsTakeResult=tagMCSlotsTakeResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSlotsTakeResult.Head.Cmd,m_NAtagMCSlotsTakeResult.Head.SubCmd))] = m_NAtagMCSlotsTakeResult
-
-
-#------------------------------------------------------
 # AB 22 摇骰子结果 #tagMCDiceExResult
 
 class  tagMCDiceExResult(Structure):
@@ -20117,58 +23446,6 @@
 
 m_NAtagMCDiceExResult=tagMCDiceExResult()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceExResult.Cmd,m_NAtagMCDiceExResult.SubCmd))] = m_NAtagMCDiceExResult
-
-
-#------------------------------------------------------
-# AB 09 许愿值 #tagMCWishTreeValue
-
-class  tagMCWishTreeValue(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("WishValue", c_int),    #当前许愿值
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAB
-        self.SubCmd = 0x09
-        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 = 0xAB
-        self.SubCmd = 0x09
-        self.WishValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCWishTreeValue)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AB 09 许愿值 //tagMCWishTreeValue:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                WishValue:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.WishValue
-                                )
-        return DumpString
-
-
-m_NAtagMCWishTreeValue=tagMCWishTreeValue()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWishTreeValue.Cmd,m_NAtagMCWishTreeValue.SubCmd))] = m_NAtagMCWishTreeValue
 
 
 #------------------------------------------------------
@@ -20588,170 +23865,6 @@
 
 
 #------------------------------------------------------
-#B0 06 转转乐盘面信息 #tagGamblingDiskInfo
-
-class  tagGamblingDiskInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MerchantLv", c_ubyte),    #商人等级
-                  ("DiskIndex", c_ubyte),    # 盘面索引
-                  ("DiskItemSequence", c_ushort),    #盘面物品顺序
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x06
-        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 = 0xB0
-        self.SubCmd = 0x06
-        self.MerchantLv = 0
-        self.DiskIndex = 0
-        self.DiskItemSequence = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingDiskInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 06 转转乐盘面信息 //tagGamblingDiskInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MerchantLv:%d,
-                                DiskIndex:%d,
-                                DiskItemSequence:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MerchantLv,
-                                self.DiskIndex,
-                                self.DiskItemSequence
-                                )
-        return DumpString
-
-
-m_NAtagGamblingDiskInfo=tagGamblingDiskInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingDiskInfo.Cmd,m_NAtagGamblingDiskInfo.SubCmd))] = m_NAtagGamblingDiskInfo
-
-
-#------------------------------------------------------
-#B0 07 转转乐结果 #tagGamblingResult
-
-class  tagGamblingResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ItemIndex", c_ushort),    #物品索引
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x07
-        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 = 0xB0
-        self.SubCmd = 0x07
-        self.ItemIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 07 转转乐结果 //tagGamblingResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ItemIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ItemIndex
-                                )
-        return DumpString
-
-
-m_NAtagGamblingResult=tagGamblingResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingResult.Cmd,m_NAtagGamblingResult.SubCmd))] = m_NAtagGamblingResult
-
-
-#------------------------------------------------------
-#B0 08 转转乐次数 #tagGamblingCount
-
-class  tagGamblingCount(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Count", c_ushort),    #次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x08
-        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 = 0xB0
-        self.SubCmd = 0x08
-        self.Count = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGamblingCount)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B0 08 转转乐次数 //tagGamblingCount:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Count:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Count
-                                )
-        return DumpString
-
-
-m_NAtagGamblingCount=tagGamblingCount()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingCount.Cmd,m_NAtagGamblingCount.SubCmd))] = m_NAtagGamblingCount
-
-
-#------------------------------------------------------
 #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState
 
 class  tagFamilyArrestAwardReceiveState(Structure):
@@ -20978,6 +24091,66 @@
 
 m_NAtagMCClothesCoatSkinState=tagMCClothesCoatSkinState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCClothesCoatSkinState.Head.Cmd,m_NAtagMCClothesCoatSkinState.Head.SubCmd))] = m_NAtagMCClothesCoatSkinState
+
+
+#------------------------------------------------------
+# B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove
+
+class  tagMCNotifyPlayerMove(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PosX", c_int),    
+                  ("PosY", c_int),    
+                  ("NPCID", c_int),    #目标点寻路NPCID, 可能为0
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB1
+        self.SubCmd = 0x06
+        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 = 0xB1
+        self.SubCmd = 0x06
+        self.PosX = 0
+        self.PosY = 0
+        self.NPCID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCNotifyPlayerMove)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 06 通知玩家向目标点移动 //tagMCNotifyPlayerMove:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PosX:%d,
+                                PosY:%d,
+                                NPCID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PosX,
+                                self.PosY,
+                                self.NPCID
+                                )
+        return DumpString
+
+
+m_NAtagMCNotifyPlayerMove=tagMCNotifyPlayerMove()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyPlayerMove.Cmd,m_NAtagMCNotifyPlayerMove.SubCmd))] = m_NAtagMCNotifyPlayerMove
 
 
 #------------------------------------------------------
@@ -21250,6 +24423,126 @@
 
 m_NAtagMCPlayerWallow=tagMCPlayerWallow()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerWallow.Cmd,m_NAtagMCPlayerWallow.SubCmd))] = m_NAtagMCPlayerWallow
+
+
+#------------------------------------------------------
+# B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
+
+class  tagMCAddXianyuanCoinMsg(Structure):
+    Head = tagHead()
+    MapID = 0    #(DWORD MapID)
+    FuncLineID = 0    #(BYTE FuncLineID)
+    Relation = 0    #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友
+    RelationCoinAdd = 0    #(BYTE RelationCoinAdd)// 社交关系总加成
+    XianyuanCoinAdd = 0    #(WORD XianyuanCoinAdd)// 实际增加的仙缘币
+    Reason = 0    #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
+    CallPlayerID = 0    #(DWORD CallPlayerID)// 助战的玩家ID,有值时代表真实助战,没有值时为自己打的
+    NameLen = 0    #(BYTE NameLen)
+    CallPlayerName = ""    #(String CallPlayerName)// 助战的玩家名,size = NameLen
+    IsSweep = 0    #(BYTE IsSweep)// 是否扫荡
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RelationCoinAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.IsSweep,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x08
+        self.MapID = 0
+        self.FuncLineID = 0
+        self.Relation = 0
+        self.RelationCoinAdd = 0
+        self.XianyuanCoinAdd = 0
+        self.Reason = 0
+        self.CallPlayerID = 0
+        self.NameLen = 0
+        self.CallPlayerName = ""
+        self.IsSweep = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 1
+        length += len(self.CallPlayerName)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteBYTE(data, self.FuncLineID)
+        data = CommFunc.WriteBYTE(data, self.Relation)
+        data = CommFunc.WriteBYTE(data, self.RelationCoinAdd)
+        data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd)
+        data = CommFunc.WriteBYTE(data, self.Reason)
+        data = CommFunc.WriteDWORD(data, self.CallPlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName)
+        data = CommFunc.WriteBYTE(data, self.IsSweep)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MapID:%d,
+                                FuncLineID:%d,
+                                Relation:%d,
+                                RelationCoinAdd:%d,
+                                XianyuanCoinAdd:%d,
+                                Reason:%d,
+                                CallPlayerID:%d,
+                                NameLen:%d,
+                                CallPlayerName:%s,
+                                IsSweep:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MapID,
+                                self.FuncLineID,
+                                self.Relation,
+                                self.RelationCoinAdd,
+                                self.XianyuanCoinAdd,
+                                self.Reason,
+                                self.CallPlayerID,
+                                self.NameLen,
+                                self.CallPlayerName,
+                                self.IsSweep
+                                )
+        return DumpString
+
+
+m_NAtagMCAddXianyuanCoinMsg=tagMCAddXianyuanCoinMsg()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddXianyuanCoinMsg.Head.Cmd,m_NAtagMCAddXianyuanCoinMsg.Head.SubCmd))] = m_NAtagMCAddXianyuanCoinMsg
 
 
 #------------------------------------------------------
@@ -21553,6 +24846,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("IsDouble", c_ubyte),    #是否双倍
+                  ("OldDouble", c_ubyte),    #是否曾经允许双倍
                   ]
 
     def __init__(self):
@@ -21570,6 +24864,7 @@
         self.Cmd = 0xB2
         self.SubCmd = 0x01
         self.IsDouble = 0
+        self.OldDouble = 0
         return
 
     def GetLength(self):
@@ -21582,18 +24877,564 @@
         DumpString = '''// B2 01 通知封魔坛双倍击杀状态 //tagMCFMTDoubleState:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                IsDouble:%d
+                                IsDouble:%d,
+                                OldDouble:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.IsDouble
+                                self.IsDouble,
+                                self.OldDouble
                                 )
         return DumpString
 
 
 m_NAtagMCFMTDoubleState=tagMCFMTDoubleState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFMTDoubleState.Cmd,m_NAtagMCFMTDoubleState.SubCmd))] = m_NAtagMCFMTDoubleState
+
+
+#------------------------------------------------------
+# B2 06 助战召唤结果 #tagMCHelpBattleCallResult
+
+class  tagMCHelpBattleCallResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ObjID", c_int),    # 助战实例ID
+                  ("PlayerID", c_int),    # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
+                  ("Job", c_ubyte),    # 职业
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x06
+        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 = 0xB2
+        self.SubCmd = 0x06
+        self.ObjID = 0
+        self.PlayerID = 0
+        self.Job = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCHelpBattleCallResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 06 助战召唤结果 //tagMCHelpBattleCallResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ObjID:%d,
+                                PlayerID:%d,
+                                Job:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ObjID,
+                                self.PlayerID,
+                                self.Job
+                                )
+        return DumpString
+
+
+m_NAtagMCHelpBattleCallResult=tagMCHelpBattleCallResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleCallResult.Cmd,m_NAtagMCHelpBattleCallResult.SubCmd))] = m_NAtagMCHelpBattleCallResult
+
+
+#------------------------------------------------------
+# B2 05 助战登记结果 #tagMCHelpBattleCheckInResult
+
+class  tagMCHelpBattleCheckInResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsOK", c_ubyte),    #是否成功
+                  ("IsLogin", c_ubyte),    #是否登录同步已登记
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB2
+        self.SubCmd = 0x05
+        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 = 0xB2
+        self.SubCmd = 0x05
+        self.IsOK = 0
+        self.IsLogin = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCHelpBattleCheckInResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B2 05 助战登记结果 //tagMCHelpBattleCheckInResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsOK:%d,
+                                IsLogin:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsOK,
+                                self.IsLogin
+                                )
+        return DumpString
+
+
+m_NAtagMCHelpBattleCheckInResult=tagMCHelpBattleCheckInResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleCheckInResult.Cmd,m_NAtagMCHelpBattleCheckInResult.SubCmd))] = m_NAtagMCHelpBattleCheckInResult
+
+
+#------------------------------------------------------
+# B2 07 助战机器人列表 #tagMCHelpBattleList
+
+class  tagMCHelpBattlePlayer(Structure):
+    ObjID = 0    #(DWORD ObjID)// 实例ID, 0代表未召唤
+    PlayerID = 0    #(DWORD PlayerID)// 助战镜像ID, 大于1小于100代表机器人,如果是机器人,没有以下信息,相关信息自己读配置
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 玩家名,size = NameLen
+    LV = 0    #(WORD LV)// 玩家等级
+    Job = 0    #(BYTE Job)// 玩家职业, 如果是机器人,则职业有值,服务端控制
+    RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
+    FightPower = 0    #(DWORD FightPower)// 玩家战力
+    Relation = 0    #(BYTE Relation)// 关系:0-无,1-好友,2-盟友
+    IsNeedGold = 0    #(BYTE IsNeedGold)// 是否需要仙玉召唤
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsNeedGold,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.ObjID = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.LV = 0
+        self.Job = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.Relation = 0
+        self.IsNeedGold = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 2
+        length += 4
+        length += 1
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.ObjID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteBYTE(data, self.Relation)
+        data = CommFunc.WriteBYTE(data, self.IsNeedGold)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ObjID:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                Relation:%d,
+                                IsNeedGold:%d
+                                '''\
+                                %(
+                                self.ObjID,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.Relation,
+                                self.IsNeedGold
+                                )
+        return DumpString
+
+
+class  tagMCHelpBattleList(Structure):
+    Head = tagHead()
+    RefreshCount = 0    #(BYTE RefreshCount)// 已刷新次数
+    HelpCount = 0    #(BYTE HelpCount)// 助战个数
+    HelpPlayerList = list()    #(vector<tagMCHelpBattlePlayer> HelpPlayerList)// 助战镜像信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RefreshCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HelpCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.HelpCount):
+            temHelpPlayerList = tagMCHelpBattlePlayer()
+            _pos = temHelpPlayerList.ReadData(_lpData, _pos)
+            self.HelpPlayerList.append(temHelpPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x07
+        self.RefreshCount = 0
+        self.HelpCount = 0
+        self.HelpPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.HelpCount):
+            length += self.HelpPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RefreshCount)
+        data = CommFunc.WriteBYTE(data, self.HelpCount)
+        for i in range(self.HelpCount):
+            data = CommFunc.WriteString(data, self.HelpPlayerList[i].GetLength(), self.HelpPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RefreshCount:%d,
+                                HelpCount:%d,
+                                HelpPlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RefreshCount,
+                                self.HelpCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCHelpBattleList=tagMCHelpBattleList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleList.Head.Cmd,m_NAtagMCHelpBattleList.Head.SubCmd))] = m_NAtagMCHelpBattleList
+
+
+#------------------------------------------------------
+# B2 11 助战记录列表 #tagMCHelpBattleRecordList
+
+class  tagMCHelpBattleRecord(Structure):
+    CallPlayerID = 0    #(DWORD CallPlayerID)// 邀请助战的玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    CallPlayerName = ""    #(String CallPlayerName)// 邀请助战的玩家名,size = NameLen
+    MapID = 0    #(DWORD MapID)
+    FuncLineID = 0    #(BYTE FuncLineID)
+    XianyuanCoinAdd = 0    #(WORD XianyuanCoinAdd)// 增加的仙缘币,0代表已达上限
+    Relation = 0    #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友
+    VIPLV = 0    #(BYTE VIPLV)// 当时的VIP等级
+    HelpTime = ""    #(char HelpTime[19])// 助战时间yyyy-MM-dd hh:mm:ss
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.VIPLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HelpTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        return _pos
+
+    def Clear(self):
+        self.CallPlayerID = 0
+        self.NameLen = 0
+        self.CallPlayerName = ""
+        self.MapID = 0
+        self.FuncLineID = 0
+        self.XianyuanCoinAdd = 0
+        self.Relation = 0
+        self.VIPLV = 0
+        self.HelpTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.CallPlayerName)
+        length += 4
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        length += 19
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.CallPlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteBYTE(data, self.FuncLineID)
+        data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd)
+        data = CommFunc.WriteBYTE(data, self.Relation)
+        data = CommFunc.WriteBYTE(data, self.VIPLV)
+        data = CommFunc.WriteString(data, 19, self.HelpTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                CallPlayerID:%d,
+                                NameLen:%d,
+                                CallPlayerName:%s,
+                                MapID:%d,
+                                FuncLineID:%d,
+                                XianyuanCoinAdd:%d,
+                                Relation:%d,
+                                VIPLV:%d,
+                                HelpTime:%s
+                                '''\
+                                %(
+                                self.CallPlayerID,
+                                self.NameLen,
+                                self.CallPlayerName,
+                                self.MapID,
+                                self.FuncLineID,
+                                self.XianyuanCoinAdd,
+                                self.Relation,
+                                self.VIPLV,
+                                self.HelpTime
+                                )
+        return DumpString
+
+
+class  tagMCHelpBattleRecordList(Structure):
+    Head = tagHead()
+    RecordCount = 0    #(WORD RecordCount)// 记录数
+    RecordList = list()    #(vector<tagMCHelpBattleRecord> RecordList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temRecordList = tagMCHelpBattleRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x11
+        self.RecordCount = 0
+        self.RecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.RecordCount):
+            length += self.RecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCount:%d,
+                                RecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCHelpBattleRecordList=tagMCHelpBattleRecordList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleRecordList.Head.Cmd,m_NAtagMCHelpBattleRecordList.Head.SubCmd))] = m_NAtagMCHelpBattleRecordList
+
+
+#------------------------------------------------------
+# B2 04 冰晶矿脉信息通知 #tagMCIceLodeInfo
+
+class  tagMCIceLodeInfo(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)// 今日玩法数量
+    LineList = list()    #(vector<BYTE> LineList)// 玩法列表
+    AwardRecord = 0    #(DWORD AwardRecord)// 领奖记录
+    HasSweep = 0    #(BYTE HasSweep)// 是否已扫荡
+    DayLV = 0    #(WORD DayLV)// 今日等级
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.LineList.append(value)
+        self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HasSweep,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.DayLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x04
+        self.Cnt = 0
+        self.LineList = list()
+        self.AwardRecord = 0
+        self.HasSweep = 0
+        self.DayLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.Cnt
+        length += 4
+        length += 1
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteBYTE(data, self.LineList[i])
+        data = CommFunc.WriteDWORD(data, self.AwardRecord)
+        data = CommFunc.WriteBYTE(data, self.HasSweep)
+        data = CommFunc.WriteWORD(data, self.DayLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                LineList:%s,
+                                AwardRecord:%d,
+                                HasSweep:%d,
+                                DayLV:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "...",
+                                self.AwardRecord,
+                                self.HasSweep,
+                                self.DayLV
+                                )
+        return DumpString
+
+
+m_NAtagMCIceLodeInfo=tagMCIceLodeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCIceLodeInfo.Head.Cmd,m_NAtagMCIceLodeInfo.Head.SubCmd))] = m_NAtagMCIceLodeInfo
 
 
 #------------------------------------------------------
@@ -21724,6 +25565,77 @@
 
 m_NAtagMCPubFBSweepData=tagMCPubFBSweepData()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPubFBSweepData.Head.Cmd,m_NAtagMCPubFBSweepData.Head.SubCmd))] = m_NAtagMCPubFBSweepData
+
+
+#------------------------------------------------------
+#B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting
+
+class  tagMCPushNotificationsSetting(Structure):
+    Head = tagHead()
+    OnoffBit = 0    #(DWORD OnoffBit)// 按位约定开关
+    TimeLen = 0    #(BYTE TimeLen)
+    TimeStr = ""    #(String TimeStr)// 时间字符串  01:02-05:00
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.OnoffBit,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB2
+        self.Head.SubCmd = 0x02
+        self.OnoffBit = 0
+        self.TimeLen = 0
+        self.TimeStr = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.TimeStr)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.OnoffBit)
+        data = CommFunc.WriteBYTE(data, self.TimeLen)
+        data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                OnoffBit:%d,
+                                TimeLen:%d,
+                                TimeStr:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.OnoffBit,
+                                self.TimeLen,
+                                self.TimeStr
+                                )
+        return DumpString
+
+
+m_NAtagMCPushNotificationsSetting=tagMCPushNotificationsSetting()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPushNotificationsSetting.Head.Cmd,m_NAtagMCPushNotificationsSetting.Head.SubCmd))] = m_NAtagMCPushNotificationsSetting
 
 
 #------------------------------------------------------
@@ -22042,6 +25954,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("SkillID", c_int),    #技能ID
+                  ("Reason", c_ubyte),    #原因 默认0
                   ]
 
     def __init__(self):
@@ -22059,6 +25972,7 @@
         self.Cmd = 0xB4
         self.SubCmd = 0x03
         self.SkillID = 0
+        self.Reason = 0
         return
 
     def GetLength(self):
@@ -22071,12 +25985,14 @@
         DumpString = '''//B4 03 技能攻击失败  //tagMCAttackFail:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                SkillID:%d
+                                SkillID:%d,
+                                Reason:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.SkillID
+                                self.SkillID,
+                                self.Reason
                                 )
         return DumpString
 
@@ -22684,23 +26600,15 @@
 #------------------------------------------------------
 #B4 09 通知脱机挂结果 #tagMCTJGInfo
 
-class  tagMCTJGInfo(Structure):
+class  tagMCTJGItems(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Exp1", c_int),    # 经验
-                  ("Exp2", c_int),    # 超亿经验
-                  ("Times", c_int),    # 使用时间秒
-                  ("PurpleEquip", c_ushort),    # 产出紫装数量
-                  ("OrangeEquip", c_ushort),    # 产出橙装数量
-                  ("EatPurpleEquip", c_ushort),    # 吞噬紫装数量
+                  ("ItemID", c_int),    
+                  ("Count", c_ushort),    
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xB4
-        self.SubCmd = 0x09
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -22709,67 +26617,351 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xB4
-        self.SubCmd = 0x09
-        self.Exp1 = 0
-        self.Exp2 = 0
-        self.Times = 0
-        self.PurpleEquip = 0
-        self.OrangeEquip = 0
-        self.EatPurpleEquip = 0
+        self.ItemID = 0
+        self.Count = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCTJGInfo)
+        return sizeof(tagMCTJGItems)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''//B4 09 通知脱机挂结果 //tagMCTJGInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
+                                ItemID:%d,
+                                Count:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Count
+                                )
+        return DumpString
+
+
+class  tagMCTJGInfo(Structure):
+    Head = tagHead()
+    Exp1 = 0    #(DWORD Exp1)// 经验
+    Exp2 = 0    #(DWORD Exp2)// 超亿经验
+    Times = 0    #(DWORD Times)// 使用时间秒
+    PurpleEquip = 0    #(WORD PurpleEquip)// 产出紫装数量
+    OrangeEquip = 0    #(WORD OrangeEquip)// 产出橙装数量
+    EatPurpleEquip = 0    #(WORD EatPurpleEquip)// 吞噬紫装数量
+    BeforeLV = 0    #(WORD BeforeLV)//脱机前记录的等级
+    GiveCnt = 0    #(WORD GiveCnt)//获得炼丹材料数量
+    Cnt = 0    #(BYTE Cnt)//物品类别数量
+    Items = list()    #(vector<tagMCTJGItems> Items)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB4
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Exp1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Exp2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Times,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OrangeEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.EatPurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.BeforeLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GiveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temItems = tagMCTJGItems()
+            _pos = temItems.ReadData(_lpData, _pos)
+            self.Items.append(temItems)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB4
+        self.Head.SubCmd = 0x09
+        self.Exp1 = 0
+        self.Exp2 = 0
+        self.Times = 0
+        self.PurpleEquip = 0
+        self.OrangeEquip = 0
+        self.EatPurpleEquip = 0
+        self.BeforeLV = 0
+        self.GiveCnt = 0
+        self.Cnt = 0
+        self.Items = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += 2
+        length += 2
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.Cnt):
+            length += self.Items[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Exp1)
+        data = CommFunc.WriteDWORD(data, self.Exp2)
+        data = CommFunc.WriteDWORD(data, self.Times)
+        data = CommFunc.WriteWORD(data, self.PurpleEquip)
+        data = CommFunc.WriteWORD(data, self.OrangeEquip)
+        data = CommFunc.WriteWORD(data, self.EatPurpleEquip)
+        data = CommFunc.WriteWORD(data, self.BeforeLV)
+        data = CommFunc.WriteWORD(data, self.GiveCnt)
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
                                 Exp1:%d,
                                 Exp2:%d,
                                 Times:%d,
                                 PurpleEquip:%d,
                                 OrangeEquip:%d,
-                                EatPurpleEquip:%d
+                                EatPurpleEquip:%d,
+                                BeforeLV:%d,
+                                GiveCnt:%d,
+                                Cnt:%d,
+                                Items:%s
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
+                                self.Head.OutputString(),
                                 self.Exp1,
                                 self.Exp2,
                                 self.Times,
                                 self.PurpleEquip,
                                 self.OrangeEquip,
-                                self.EatPurpleEquip
+                                self.EatPurpleEquip,
+                                self.BeforeLV,
+                                self.GiveCnt,
+                                self.Cnt,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCTJGInfo=tagMCTJGInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Cmd,m_NAtagMCTJGInfo.SubCmd))] = m_NAtagMCTJGInfo
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Head.Cmd,m_NAtagMCTJGInfo.Head.SubCmd))] = m_NAtagMCTJGInfo
 
 
 #------------------------------------------------------
-# B7 01 宠物等级 #tagMCPetLV
+# C1 02 跨服PK玩家奖励记录 #tagMCCrossRealmPKAwardState
 
-class  tagMCPetLV(Structure):
+class  tagMCCrossRealmPKAwardState(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("PetLV", c_ushort),    # 等级
-                  ("PetExp", c_int),    # 升级经验
-                  ("PetClassExp", c_int),    # 升阶经验
-                  ("PetSeting", c_int),    # 宠物操作数据记录
+                  ("DayPKCountAwardState", c_int),    # 每日匹配次数奖励记录,二进制位存储是否已领取,按匹配次数升序排序索引代表奖励位
+                  ("DayWinCountAwardState", c_int),    # 每日胜利次数奖励记录,二进制位存储是否已领取,按胜利次数升序排序索引代表奖励位
+                  ("DanLVAwardState", c_int),    # 段位达标奖励记录,二进制位存储是否已领取,按段位代表奖励位
+                  ("SeasonAwardState", c_ubyte),    # 赛季结算奖励是否已领取
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xB7
+        self.Cmd = 0xC1
+        self.SubCmd = 0x02
+        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 = 0xC1
+        self.SubCmd = 0x02
+        self.DayPKCountAwardState = 0
+        self.DayWinCountAwardState = 0
+        self.DanLVAwardState = 0
+        self.SeasonAwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCrossRealmPKAwardState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 02 跨服PK玩家奖励记录 //tagMCCrossRealmPKAwardState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                DayPKCountAwardState:%d,
+                                DayWinCountAwardState:%d,
+                                DanLVAwardState:%d,
+                                SeasonAwardState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.DayPKCountAwardState,
+                                self.DayWinCountAwardState,
+                                self.DanLVAwardState,
+                                self.SeasonAwardState
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossRealmPKAwardState=tagMCCrossRealmPKAwardState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKAwardState.Cmd,m_NAtagMCCrossRealmPKAwardState.SubCmd))] = m_NAtagMCCrossRealmPKAwardState
+
+
+#------------------------------------------------------
+# C1 03 跨服PK玩家历史赛季信息 #tagMCCrossRealmPKPlayerHisSeasonInfo
+
+class  tagMCCrossRealmPKPlayerHisSeason(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("SeasonID", c_ushort),    # 赛季ID
+                  ("Order", c_ushort),    # 名次
+                  ("DanLV", c_ubyte),    # 段位
+                  ("AwardLV", c_ubyte),    # 赛季结算奖励等级,比如王者法宝的属性取该等级对应属性
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.SeasonID = 0
+        self.Order = 0
+        self.DanLV = 0
+        self.AwardLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCrossRealmPKPlayerHisSeason)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C1 03 跨服PK玩家历史赛季信息 //tagMCCrossRealmPKPlayerHisSeasonInfo:
+                                SeasonID:%d,
+                                Order:%d,
+                                DanLV:%d,
+                                AwardLV:%d
+                                '''\
+                                %(
+                                self.SeasonID,
+                                self.Order,
+                                self.DanLV,
+                                self.AwardLV
+                                )
+        return DumpString
+
+
+class  tagMCCrossRealmPKPlayerHisSeasonInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)// 赛季个数
+    SeasonList = list()    #(vector<tagMCCrossRealmPKPlayerHisSeason> SeasonList)// 赛季信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC1
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temSeasonList = tagMCCrossRealmPKPlayerHisSeason()
+            _pos = temSeasonList.ReadData(_lpData, _pos)
+            self.SeasonList.append(temSeasonList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC1
+        self.Head.SubCmd = 0x03
+        self.Count = 0
+        self.SeasonList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.SeasonList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                SeasonList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossRealmPKPlayerHisSeasonInfo=tagMCCrossRealmPKPlayerHisSeasonInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKPlayerHisSeasonInfo.Head.Cmd,m_NAtagMCCrossRealmPKPlayerHisSeasonInfo.Head.SubCmd))] = m_NAtagMCCrossRealmPKPlayerHisSeasonInfo
+
+
+#------------------------------------------------------
+# C1 01 跨服PK玩家信息 #tagMCCrossRealmPKPlayerInfo
+
+class  tagMCCrossRealmPKPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Score", c_int),    # 当前积分
+                  ("DanLV", c_ubyte),    # 当前段位
+                  ("PKCount", c_ushort),    # PK次数
+                  ("WinCount", c_ushort),    # 胜利次数
+                  ("CWinCount", c_ushort),    # 连胜次数
+                  ("DayPKCount", c_ubyte),    # 当日已PK次数
+                  ("DayWinCount", c_ubyte),    # 当日已胜利次数
+                  ("DayBuyCount", c_ubyte),    # 当日已购买次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC1
         self.SubCmd = 0x01
         return
 
@@ -22779,323 +26971,51 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xB7
+        self.Cmd = 0xC1
         self.SubCmd = 0x01
-        self.PetLV = 0
-        self.PetExp = 0
-        self.PetClassExp = 0
-        self.PetSeting = 0
+        self.Score = 0
+        self.DanLV = 0
+        self.PKCount = 0
+        self.WinCount = 0
+        self.CWinCount = 0
+        self.DayPKCount = 0
+        self.DayWinCount = 0
+        self.DayBuyCount = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCPetLV)
+        return sizeof(tagMCCrossRealmPKPlayerInfo)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// B7 01 宠物等级 //tagMCPetLV:
+        DumpString = '''// C1 01 跨服PK玩家信息 //tagMCCrossRealmPKPlayerInfo:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PetLV:%d,
-                                PetExp:%d,
-                                PetClassExp:%d,
-                                PetSeting:%d
+                                Score:%d,
+                                DanLV:%d,
+                                PKCount:%d,
+                                WinCount:%d,
+                                CWinCount:%d,
+                                DayPKCount:%d,
+                                DayWinCount:%d,
+                                DayBuyCount:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PetLV,
-                                self.PetExp,
-                                self.PetClassExp,
-                                self.PetSeting
+                                self.Score,
+                                self.DanLV,
+                                self.PKCount,
+                                self.WinCount,
+                                self.CWinCount,
+                                self.DayPKCount,
+                                self.DayWinCount,
+                                self.DayBuyCount
                                 )
         return DumpString
 
 
-m_NAtagMCPetLV=tagMCPetLV()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetLV.Cmd,m_NAtagMCPetLV.SubCmd))] = m_NAtagMCPetLV
-
-
-#------------------------------------------------------
-#D2 01 跨服赛报名(上传数据)状态 #tagMergeWarRegisterState
-
-class  tagMergeWarRegisterState(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("RegisterState", c_ubyte),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xD2
-        self.SubCmd = 0x01
-        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 = 0xD2
-        self.SubCmd = 0x01
-        self.RegisterState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMergeWarRegisterState)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//D2 01 跨服赛报名(上传数据)状态 //tagMergeWarRegisterState:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                RegisterState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.RegisterState
-                                )
-        return DumpString
-
-
-m_NAtagMergeWarRegisterState=tagMergeWarRegisterState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeWarRegisterState.Cmd,m_NAtagMergeWarRegisterState.SubCmd))] = m_NAtagMergeWarRegisterState
-
-
-#------------------------------------------------------
-# D2 09 跨服boss奖励领奖状态 #tagMCMergeBossAwardRecord
-
-class  tagMCMergeBossAwardRecord(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FirstJoinAwardState", c_ubyte),    # 首次参与奖励状态;0-不可领,1-可领,2-已领
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xD2
-        self.SubCmd = 0x09
-        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 = 0xD2
-        self.SubCmd = 0x09
-        self.FirstJoinAwardState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMergeBossAwardRecord)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// D2 09 跨服boss奖励领奖状态 //tagMCMergeBossAwardRecord:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FirstJoinAwardState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FirstJoinAwardState
-                                )
-        return DumpString
-
-
-m_NAtagMCMergeBossAwardRecord=tagMCMergeBossAwardRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergeBossAwardRecord.Cmd,m_NAtagMCMergeBossAwardRecord.SubCmd))] = m_NAtagMCMergeBossAwardRecord
-
-
-#------------------------------------------------------
-# D2 07 跨服王者争霸奖励相关 #tagMCMergeKingAwardInfo
-
-class  tagMCMergeKingAwardInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ServerHonour", c_ubyte),    # 全服荣耀值, 1 2 4 8等
-                  ("ServerHonourAward", c_ubyte),    # 全服荣耀奖励是否已领取, 0否1是
-                  ("RankAward", c_ubyte),    # 晋级排名奖励是否已领取, 0否1是
-                  ("SupportAward", c_int),    # 竞猜积分奖励领取记录,按位表示
-                  ("WorshipState", c_ubyte),    # 今日是否已膜拜, 0否1是
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xD2
-        self.SubCmd = 0x07
-        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 = 0xD2
-        self.SubCmd = 0x07
-        self.ServerHonour = 0
-        self.ServerHonourAward = 0
-        self.RankAward = 0
-        self.SupportAward = 0
-        self.WorshipState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMergeKingAwardInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// D2 07 跨服王者争霸奖励相关 //tagMCMergeKingAwardInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ServerHonour:%d,
-                                ServerHonourAward:%d,
-                                RankAward:%d,
-                                SupportAward:%d,
-                                WorshipState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ServerHonour,
-                                self.ServerHonourAward,
-                                self.RankAward,
-                                self.SupportAward,
-                                self.WorshipState
-                                )
-        return DumpString
-
-
-m_NAtagMCMergeKingAwardInfo=tagMCMergeKingAwardInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergeKingAwardInfo.Cmd,m_NAtagMCMergeKingAwardInfo.SubCmd))] = m_NAtagMCMergeKingAwardInfo
-
-
-#------------------------------------------------------
-# D2 08 跨服PK奖励领奖记录 #tagMCMergePKAwardRecord
-
-class  tagMCMergePKAwardRecord(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FirstWinAwardRecord", c_int),    # 首次胜利奖励记录, 按位存储是否已领
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xD2
-        self.SubCmd = 0x08
-        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 = 0xD2
-        self.SubCmd = 0x08
-        self.FirstWinAwardRecord = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMergePKAwardRecord)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// D2 08 跨服PK奖励领奖记录 //tagMCMergePKAwardRecord:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FirstWinAwardRecord:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FirstWinAwardRecord
-                                )
-        return DumpString
-
-
-m_NAtagMCMergePKAwardRecord=tagMCMergePKAwardRecord()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergePKAwardRecord.Cmd,m_NAtagMCMergePKAwardRecord.SubCmd))] = m_NAtagMCMergePKAwardRecord
-
-
-#------------------------------------------------------
-# D2 06 跨服PK次数通知 #tagMCMergePKCnt
-
-class  tagMCMergePKCnt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("DayPKCnt", c_ushort),    # 当日已PK次数
-                  ("DayBuyCnt", c_ushort),    # 当日已购买次数
-                  ("UnUsedBuyCnt", c_ushort),    # 未使用的购买次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xD2
-        self.SubCmd = 0x06
-        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 = 0xD2
-        self.SubCmd = 0x06
-        self.DayPKCnt = 0
-        self.DayBuyCnt = 0
-        self.UnUsedBuyCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCMergePKCnt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// D2 06 跨服PK次数通知 //tagMCMergePKCnt:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                DayPKCnt:%d,
-                                DayBuyCnt:%d,
-                                UnUsedBuyCnt:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.DayPKCnt,
-                                self.DayBuyCnt,
-                                self.UnUsedBuyCnt
-                                )
-        return DumpString
-
-
-m_NAtagMCMergePKCnt=tagMCMergePKCnt()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergePKCnt.Cmd,m_NAtagMCMergePKCnt.SubCmd))] = m_NAtagMCMergePKCnt
\ No newline at end of file
+m_NAtagMCCrossRealmPKPlayerInfo=tagMCCrossRealmPKPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKPlayerInfo.Cmd,m_NAtagMCCrossRealmPKPlayerInfo.SubCmd))] = m_NAtagMCCrossRealmPKPlayerInfo
\ No newline at end of file

--
Gitblit v1.8.0