From 12029a0ff02aab5a42041b93e756312d944e379d Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 20 十二月 2018 11:54:10 +0800
Subject: [PATCH] 5368 【后端】【1.4】聚魂功能开发

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 3687 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 3,612 insertions(+), 75 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index a49e731..c49f536 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.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
 
@@ -2285,8 +2317,9 @@
 
 class  tagGCBossShuntLineState(Structure):
     BossID = 0    #(DWORD BossID)// bossID
-    DeadLineCount = 0    #(BYTE DeadLineCount)
-    DeadLineList = list()    #(vector<BYTE> DeadLineList)// 已死亡的线路列表
+    LineCount = 0    #(BYTE LineCount)
+    LineIDList = list()    #(vector<BYTE> LineIDList)// 线路ID列表
+    StateList = list()    #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着
     data = None
 
     def __init__(self):
@@ -2296,43 +2329,52 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DeadLineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DeadLineCount):
+        self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.LineCount):
             value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.DeadLineList.append(value)
+            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.DeadLineCount = 0
-        self.DeadLineList = list()
+        self.LineCount = 0
+        self.LineIDList = list()
+        self.StateList = list()
         return
 
     def GetLength(self):
         length = 0
         length += 4
         length += 1
-        length += 1 * self.DeadLineCount
+        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.DeadLineCount)
-        for i in range(self.DeadLineCount):
-            data = CommFunc.WriteBYTE(data, self.DeadLineList[i])
+        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,
-                                DeadLineCount:%d,
-                                DeadLineList:%s
+                                LineCount:%d,
+                                LineIDList:%s,
+                                StateList:%s
                                 '''\
                                 %(
                                 self.BossID,
-                                self.DeadLineCount,
+                                self.LineCount,
+                                "...",
                                 "..."
                                 )
         return DumpString
@@ -2667,6 +2709,114 @@
 
 
 #------------------------------------------------------
+# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime
+
+class  tagDogzTimeInfoObj(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NPCID", c_int),    # npcid
+                  ("RefreshSecond", 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.RefreshSecond = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagDogzTimeInfoObj)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime:
+                                NPCID:%d,
+                                RefreshSecond:%d
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.RefreshSecond
+                                )
+        return DumpString
+
+
+class  tagGCDogzNPCRefreshTime(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)//信息个数
+    InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        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):
+            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 = 0x04
+        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_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime
+
+
+#------------------------------------------------------
 # A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo
 
 class  tagGCFriendSendEnergyInfo(Structure):
@@ -2760,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):
@@ -2773,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):
@@ -2781,6 +2933,7 @@
         self.RecordLen = 0
         self.KillRecord = ""
         self.RefreshSecond = 0
+        self.RefreshCD = 0
         return
 
     def GetLength(self):
@@ -2789,6 +2942,7 @@
         length += 1
         length += 2
         length += len(self.KillRecord)
+        length += 4
         length += 4
 
         return length
@@ -2800,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):
@@ -2808,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
 
@@ -4077,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):
@@ -4129,6 +4394,162 @@
 
 
 #------------------------------------------------------
+# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList
+
+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()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        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.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):
+        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):
+        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 = '''
+                                NPCID:%d,
+                                CurHP:%d,
+                                CurHPEx:%d,
+                                MaxHP:%d,
+                                MaxHPEx:%d,
+                                FamilyID:%d,
+                                NameLen:%d,
+                                FamilyName:%s
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.CurHP,
+                                self.CurHPEx,
+                                self.MaxHP,
+                                self.MaxHPEx,
+                                self.FamilyID,
+                                self.NameLen,
+                                self.FamilyName
+                                )
+        return DumpString
+
+
+class  tagGCAllFamilyBossHurtInfoList(Structure):
+    Head = tagHead()
+    NPCCount = 0    #(BYTE NPCCount)// 个数
+    NPCHurtInfo = list()    #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x10
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        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 = 0x10
+        self.NPCCount = 0
+        self.NPCHurtInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        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.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,
+                                NPCCount:%d,
+                                NPCHurtInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.NPCCount,
+                                "..."
+                                )
+        return DumpString
+
+
+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):
@@ -4138,6 +4559,7 @@
                   ("SubCmd", c_ubyte),
                   ("Point", c_int),    # 复活点数
                   ("TotalPoint", c_int),    # 复活总点数
+                  ("RebornCnt", c_ushort),    # 复活次数
                   ]
 
     def __init__(self):
@@ -4156,6 +4578,7 @@
         self.SubCmd = 0x08
         self.Point = 0
         self.TotalPoint = 0
+        self.RebornCnt = 0
         return
 
     def GetLength(self):
@@ -4169,13 +4592,15 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 Point:%d,
-                                TotalPoint:%d
+                                TotalPoint:%d,
+                                RebornCnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.Point,
-                                self.TotalPoint
+                                self.TotalPoint,
+                                self.RebornCnt
                                 )
         return DumpString
 
@@ -4193,6 +4618,7 @@
     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):
@@ -4208,6 +4634,7 @@
         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):
@@ -4219,6 +4646,7 @@
         self.EndtDate = ""
         self.WorldLV = 0
         self.LimitLV = 0
+        self.ResetType = 0
         return
 
     def GetLength(self):
@@ -4228,6 +4656,7 @@
         length += 10
         length += 2
         length += 2
+        length += 1
 
         return length
 
@@ -4238,6 +4667,7 @@
         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):
@@ -4246,14 +4676,16 @@
                                 StartDate:%s,
                                 EndtDate:%s,
                                 WorldLV:%d,
-                                LimitLV:%d
+                                LimitLV:%d,
+                                ResetType:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
                                 self.WorldLV,
-                                self.LimitLV
+                                self.LimitLV,
+                                self.ResetType
                                 )
         return DumpString
 
@@ -4765,6 +5197,7 @@
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     Multiple = 0    #(BYTE Multiple)// 倍数
     LimitLV = 0    #(WORD LimitLV)// 限制等级
+    LimitPoint = 0    #(DWORD LimitPoint)// 限制获得修行点
     data = None
 
     def __init__(self):
@@ -4780,6 +5213,7 @@
         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):
@@ -4791,6 +5225,7 @@
         self.EndtDate = ""
         self.Multiple = 0
         self.LimitLV = 0
+        self.LimitPoint = 0
         return
 
     def GetLength(self):
@@ -4800,6 +5235,7 @@
         length += 10
         length += 1
         length += 2
+        length += 4
 
         return length
 
@@ -4810,6 +5246,7 @@
         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):
@@ -4818,14 +5255,16 @@
                                 StartDate:%s,
                                 EndtDate:%s,
                                 Multiple:%d,
-                                LimitLV:%d
+                                LimitLV:%d,
+                                LimitPoint:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
                                 self.Multiple,
-                                self.LimitLV
+                                self.LimitLV,
+                                self.LimitPoint
                                 )
         return DumpString
 
@@ -6150,6 +6589,66 @@
 
 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
 
 
 #------------------------------------------------------
@@ -7545,6 +8044,269 @@
 
 m_NAtagGCTeamMemFuncDataList=tagGCTeamMemFuncDataList()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemFuncDataList.Head.Cmd,m_NAtagGCTeamMemFuncDataList.Head.SubCmd))] = m_NAtagGCTeamMemFuncDataList
+
+
+#------------------------------------------------------
+# C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK
+
+class  tagGCCrossRealmPKMatchOK(Structure):
+    Head = tagHead()
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 跨服名字
+    TagNameLen = 0    #(BYTE TagNameLen)
+    TagPlayerName = ""    #(String TagPlayerName)// 对手名字
+    TagJob = 0    #(BYTE TagJob)// 对手职业
+    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.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x01
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.TagNameLen = 0
+        self.TagPlayerName = ""
+        self.TagJob = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += len(self.TagPlayerName)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.TagNameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.TagPlayerName)
+        data = CommFunc.WriteBYTE(data, self.TagJob)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                TagNameLen:%d,
+                                TagPlayerName:%s,
+                                TagJob:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.NameLen,
+                                self.PlayerName,
+                                self.TagNameLen,
+                                self.TagPlayerName,
+                                self.TagJob
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKMatchOK=tagGCCrossRealmPKMatchOK()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKMatchOK.Head.Cmd,m_NAtagGCCrossRealmPKMatchOK.Head.SubCmd))] = m_NAtagGCCrossRealmPKMatchOK
+
+
+#------------------------------------------------------
+# C0 03 跨服PK战斗结果 #tagGCCrossRealmPKOverInfo
+
+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 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
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
 
 
 #------------------------------------------------------
@@ -9952,14 +10714,70 @@
 
 
 #------------------------------------------------------
+# A3 24 通知绑玉转盘结果 #tagMCBindJadeWheelResult
+
+class  tagMCBindJadeWheelResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Index", c_ubyte),    # 格子
+                  ("Cnt", c_ubyte),    #今日已转次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x24
+        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 = 0x24
+        self.Index = 0
+        self.Cnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCBindJadeWheelResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 24 通知绑玉转盘结果 //tagMCBindJadeWheelResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Index:%d,
+                                Cnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Index,
+                                self.Cnt
+                                )
+        return DumpString
+
+
+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_ubyte),    #击杀次数
-                  ("ItemAddCnt", c_ubyte),    #物品增加次数
+                  ("KillCnt", c_int),    #击杀次数
+                  ("ItemAddCnt", c_int),    #物品增加次数
                   ]
 
     def __init__(self):
@@ -10541,6 +11359,7 @@
                   ("RealmPoint", c_int),    # 可领取修行点
                   ("StageIndex", c_ubyte),    # 当前阶段索引
                   ("AwardRecord", c_int),    # 领奖记录 按位存储
+                  ("ExtraPoint", c_int),    # 多倍活动获得的额外修行点
                   ]
 
     def __init__(self):
@@ -10561,6 +11380,7 @@
         self.RealmPoint = 0
         self.StageIndex = 0
         self.AwardRecord = 0
+        self.ExtraPoint = 0
         return
 
     def GetLength(self):
@@ -10576,7 +11396,8 @@
                                 CurValue:%d,
                                 RealmPoint:%d,
                                 StageIndex:%d,
-                                AwardRecord:%d
+                                AwardRecord:%d,
+                                ExtraPoint:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -10584,7 +11405,8 @@
                                 self.CurValue,
                                 self.RealmPoint,
                                 self.StageIndex,
-                                self.AwardRecord
+                                self.AwardRecord,
+                                self.ExtraPoint
                                 )
         return DumpString
 
@@ -11272,19 +12094,15 @@
 #------------------------------------------------------
 #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
 
-class  tagMCFBEncourageInfo(Structure):
+class  tagMCFBEncourageCnt(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Cnt1", c_ubyte),    # 当前铜钱鼓舞次数
-                  ("Cnt2", 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):
@@ -11293,36 +12111,92 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x0A
-        self.Cnt1 = 0
-        self.Cnt2 = 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,
-                                Cnt1:%d,
-                                Cnt2:%d
+                                MoneyType:%d,
+                                EncourageCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Cnt1,
-                                self.Cnt2
+                                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
 
 
 #------------------------------------------------------
@@ -11631,6 +12505,7 @@
     _fields_ = [
                   ("FuncID", c_ubyte),    # 功能ID
                   ("State", c_ubyte),    # 是否开启
+                  ("AwardState", c_ubyte),    # 是否已领奖励
                   ]
 
     def __init__(self):
@@ -11645,6 +12520,7 @@
     def Clear(self):
         self.FuncID = 0
         self.State = 0
+        self.AwardState = 0
         return
 
     def GetLength(self):
@@ -11656,11 +12532,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
 
@@ -11729,6 +12607,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
 
 
 #------------------------------------------------------
@@ -12101,6 +13046,7 @@
                   ("LV", c_ubyte),    
                   ("Exp", c_int),    
                   ("State", c_ubyte),    #是否点击法宝认主
+                  ("FBPassLV", c_ubyte),    #副本关卡
                   ]
 
     def __init__(self):
@@ -12117,6 +13063,7 @@
         self.LV = 0
         self.Exp = 0
         self.State = 0
+        self.FBPassLV = 0
         return
 
     def GetLength(self):
@@ -12130,13 +13077,15 @@
                                 MWID:%d,
                                 LV:%d,
                                 Exp:%d,
-                                State:%d
+                                State:%d,
+                                FBPassLV:%d
                                 '''\
                                 %(
                                 self.MWID,
                                 self.LV,
                                 self.Exp,
-                                self.State
+                                self.State,
+                                self.FBPassLV
                                 )
         return DumpString
 
@@ -12856,16 +13805,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):
@@ -12874,8 +13819,6 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x26
         self.NPCID = 0
         self.CollectionCnt = 0
         return
@@ -12888,14 +13831,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
                                 )
@@ -13548,6 +14487,62 @@
 
 m_NAtagMCPlayerStoveMsg=tagMCPlayerStoveMsg()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerStoveMsg.Cmd,m_NAtagMCPlayerStoveMsg.SubCmd))] = m_NAtagMCPlayerStoveMsg
+
+
+#------------------------------------------------------
+# A3 21 祈福丹药结果 #tagMCPrayElixirResult
+
+class  tagMCPrayElixirResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("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):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA3
+        self.SubCmd = 0x21
+        self.ItemID = 0
+        self.PrayCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCPrayElixirResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 21 祈福丹药结果 //tagMCPrayElixirResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ItemID:%d,
+                                PrayCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ItemID,
+                                self.PrayCnt
+                                )
+        return DumpString
+
+
+m_NAtagMCPrayElixirResult=tagMCPrayElixirResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrayElixirResult.Cmd,m_NAtagMCPrayElixirResult.SubCmd))] = m_NAtagMCPrayElixirResult
 
 
 #------------------------------------------------------
@@ -16128,6 +17123,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):
@@ -16248,6 +17295,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
 
 
 #------------------------------------------------------
@@ -16426,6 +17650,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):
@@ -16491,8 +17958,6 @@
 class  tagMCNPCInfo(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
                   ("ObjID", c_int),    
                   ("NPCID", c_int),    
                   ("NPCHP", c_int),    
@@ -16505,8 +17970,6 @@
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA7
-        self.SubCmd = 0x06
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -16515,8 +17978,6 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA7
-        self.SubCmd = 0x06
         self.ObjID = 0
         self.NPCID = 0
         self.NPCHP = 0
@@ -16535,8 +17996,6 @@
 
     def OutputString(self):
         DumpString = '''// A7 06 通知查询的NPC信息 //tagMCNPCInfoList:
-                                Cmd:%s,
-                                SubCmd:%s,
                                 ObjID:%d,
                                 NPCID:%d,
                                 NPCHP:%d,
@@ -16547,8 +18006,6 @@
                                 RefreshSecond:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
                                 self.ObjID,
                                 self.NPCID,
                                 self.NPCHP,
@@ -17536,6 +18993,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):
@@ -18175,6 +19740,707 @@
 
 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
 
 
 #------------------------------------------------------
@@ -19192,6 +21458,7 @@
     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)//是否每天重置
@@ -19211,6 +21478,7 @@
         _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()
@@ -19232,6 +21500,7 @@
         self.Head.SubCmd = 0x12
         self.StartDate = ""
         self.EndtDate = ""
+        self.AdvanceMinutes = 0
         self.ActivityTimeCount = 0
         self.ActivityTime = list()
         self.IsDayReset = 0
@@ -19245,6 +21514,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.ActivityTimeCount):
             length += self.ActivityTime[i].GetLength()
@@ -19261,6 +21531,7 @@
         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())
@@ -19276,6 +21547,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                AdvanceMinutes:%d,
                                 ActivityTimeCount:%d,
                                 ActivityTime:%s,
                                 IsDayReset:%d,
@@ -19287,6 +21559,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.AdvanceMinutes,
                                 self.ActivityTimeCount,
                                 "...",
                                 self.IsDayReset,
@@ -19407,6 +21680,420 @@
 
 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
+
+
+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
 
 
 #------------------------------------------------------
@@ -19835,6 +22522,7 @@
     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)//是否每天重置
@@ -19854,6 +22542,7 @@
         _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()
@@ -19875,6 +22564,7 @@
         self.Head.SubCmd = 0x11
         self.StartDate = ""
         self.EndtDate = ""
+        self.AdvanceMinutes = 0
         self.ActivityTimeCount = 0
         self.ActivityTime = list()
         self.IsDayReset = 0
@@ -19888,6 +22578,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 2
         length += 1
         for i in range(self.ActivityTimeCount):
             length += self.ActivityTime[i].GetLength()
@@ -19904,6 +22595,7 @@
         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())
@@ -19919,6 +22611,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                AdvanceMinutes:%d,
                                 ActivityTimeCount:%d,
                                 ActivityTime:%s,
                                 IsDayReset:%d,
@@ -19930,6 +22623,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.AdvanceMinutes,
                                 self.ActivityTimeCount,
                                 "...",
                                 self.IsDayReset,
@@ -19942,6 +22636,58 @@
 
 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
 
 
 #------------------------------------------------------
@@ -19998,6 +22744,62 @@
 
 m_NAtagMCTotalLoginDayCntInfo=tagMCTotalLoginDayCntInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalLoginDayCntInfo.Cmd,m_NAtagMCTotalLoginDayCntInfo.SubCmd))] = m_NAtagMCTotalLoginDayCntInfo
+
+
+#------------------------------------------------------
+# AA 1C 累计充值玩家活动信息 #tagMCTotalRechargePlayerInfo
+
+class  tagMCTotalRechargePlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GoldTotal", c_int),    #本次活动已累计充值仙玉数
+                  ("AwardRecord", c_int),    #奖励领奖记录,按奖励索引二进制位存储是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x1C
+        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 = 0x1C
+        self.GoldTotal = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCTotalRechargePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GoldTotal:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GoldTotal,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCTotalRechargePlayerInfo=tagMCTotalRechargePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalRechargePlayerInfo.Cmd,m_NAtagMCTotalRechargePlayerInfo.SubCmd))] = m_NAtagMCTotalRechargePlayerInfo
 
 
 #------------------------------------------------------
@@ -20589,6 +23391,7 @@
     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)
@@ -20605,6 +23408,7 @@
         _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):
@@ -20620,6 +23424,7 @@
         self.Head.SubCmd = 0x04
         self.StartDate = ""
         self.EndtDate = ""
+        self.ResetType = 0
         self.LimitLV = 0
         self.TaskCnt = 0
         self.TaskInfo = list()
@@ -20630,6 +23435,7 @@
         length += self.Head.GetLength()
         length += 10
         length += 10
+        length += 1
         length += 2
         length += 1
         for i in range(self.TaskCnt):
@@ -20642,6 +23448,7 @@
         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):
@@ -20653,6 +23460,7 @@
                                 Head:%s,
                                 StartDate:%s,
                                 EndtDate:%s,
+                                ResetType:%d,
                                 LimitLV:%d,
                                 TaskCnt:%d,
                                 TaskInfo:%s
@@ -20661,6 +23469,7 @@
                                 self.Head.OutputString(),
                                 self.StartDate,
                                 self.EndtDate,
+                                self.ResetType,
                                 self.LimitLV,
                                 self.TaskCnt,
                                 "..."
@@ -21670,6 +24479,66 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 # B1 03 通知玩家死亡时间 #tagMCPlayerDeadTime
 
 class  tagMCPlayerDeadTime(Structure):
@@ -21939,6 +24808,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
 
 
 #------------------------------------------------------
@@ -22242,6 +25231,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("IsDouble", c_ubyte),    #是否双倍
+                  ("OldDouble", c_ubyte),    #是否曾经允许双倍
                   ]
 
     def __init__(self):
@@ -22259,6 +25249,7 @@
         self.Cmd = 0xB2
         self.SubCmd = 0x01
         self.IsDouble = 0
+        self.OldDouble = 0
         return
 
     def GetLength(self):
@@ -22271,12 +25262,14 @@
         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
 
@@ -22286,6 +25279,550 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 # B2 03 公共副本扫荡信息 #tagMCPubFBSweepData
 
 class  tagMCPubFBSweep(Structure):

--
Gitblit v1.8.0