From a6e76be4cf8976ff4931a81884a25092a0a20dcb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 13 一月 2025 15:53:07 +0800
Subject: [PATCH] 10334 【越南】【英语】【BT】【砍树】境界修改-服务端(修改A235选择境界难度发送的值,支持境界等级超过百位)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 3860 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 3,639 insertions(+), 221 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index fdf076f..f3b397e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -1179,6 +1179,8 @@
     LV = 0    #(WORD LV)// 玩家等级
     Job = 0    #(BYTE Job)// 玩家职业
     RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -1196,6 +1198,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -1209,6 +1213,8 @@
         self.LV = 0
         self.Job = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -1220,6 +1226,8 @@
         length += 2
         length += 1
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -1232,6 +1240,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -1242,7 +1252,9 @@
                                 Name:%s,
                                 LV:%d,
                                 Job:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -1251,7 +1263,9 @@
                                 self.Name,
                                 self.LV,
                                 self.Job,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -1733,6 +1747,8 @@
     NameLen = 0    #(BYTE NameLen)
     Name = ""    #(String Name)//名字
     PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
     data = None
 
@@ -1745,6 +1761,8 @@
         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
@@ -1752,6 +1770,8 @@
         self.NameLen = 0
         self.Name = ""
         self.PlayeJob = 0
+        self.Face = 0
+        self.FacePic = 0
         self.MoneyNum = 0
         return
 
@@ -1761,6 +1781,8 @@
         length += len(self.Name)
         length += 1
         length += 4
+        length += 4
+        length += 4
 
         return length
 
@@ -1769,6 +1791,8 @@
         data = CommFunc.WriteBYTE(data, self.NameLen)
         data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteBYTE(data, self.PlayeJob)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.MoneyNum)
         return data
 
@@ -1777,12 +1801,16 @@
                                 NameLen:%d,
                                 Name:%s,
                                 PlayeJob:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 MoneyNum:%d
                                 '''\
                                 %(
                                 self.NameLen,
                                 self.Name,
                                 self.PlayeJob,
+                                self.Face,
+                                self.FacePic,
                                 self.MoneyNum
                                 )
         return DumpString
@@ -1871,6 +1899,8 @@
     Name = ""    #(String Name)//玩家名字
     Time = 0    #(DWORD Time)//时间
     PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     MoneyType = 0    #(BYTE MoneyType)//金钱类型
     MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
     GetWay = 0    #(BYTE GetWay)//获得途径
@@ -1893,6 +1923,8 @@
         self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -1910,6 +1942,8 @@
         self.Name = ""
         self.Time = 0
         self.PlayeJob = 0
+        self.Face = 0
+        self.FacePic = 0
         self.MoneyType = 0
         self.MoneyNum = 0
         self.GetWay = 0
@@ -1928,6 +1962,8 @@
         length += len(self.Name)
         length += 4
         length += 1
+        length += 4
+        length += 4
         length += 1
         length += 4
         length += 1
@@ -1947,6 +1983,8 @@
         data = CommFunc.WriteString(data, self.NameLen, self.Name)
         data = CommFunc.WriteDWORD(data, self.Time)
         data = CommFunc.WriteBYTE(data, self.PlayeJob)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteBYTE(data, self.MoneyType)
         data = CommFunc.WriteDWORD(data, self.MoneyNum)
         data = CommFunc.WriteBYTE(data, self.GetWay)
@@ -1965,6 +2003,8 @@
                                 Name:%s,
                                 Time:%d,
                                 PlayeJob:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 MoneyType:%d,
                                 MoneyNum:%d,
                                 GetWay:%d,
@@ -1981,6 +2021,8 @@
                                 self.Name,
                                 self.Time,
                                 self.PlayeJob,
+                                self.Face,
+                                self.FacePic,
                                 self.MoneyType,
                                 self.MoneyNum,
                                 self.GetWay,
@@ -2409,6 +2451,7 @@
     WarRank = 0    #(BYTE WarRank)//联赛排名
     TotalFightPower = 0    #(DWORD TotalFightPower)//总战力,不足1个亿的部分
     TotalFightPowerEx = 0    #(DWORD TotalFightPowerEx)//总战力点,1点=1亿
+    EmblemID = 0    #(BYTE EmblemID)//徽章ID
     data = None
 
     def __init__(self):
@@ -2431,6 +2474,7 @@
         self.WarRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.TotalFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -2448,6 +2492,7 @@
         self.WarRank = 0
         self.TotalFightPower = 0
         self.TotalFightPowerEx = 0
+        self.EmblemID = 0
         return
 
     def GetLength(self):
@@ -2466,6 +2511,7 @@
         length += 1
         length += 4
         length += 4
+        length += 1
 
         return length
 
@@ -2485,6 +2531,7 @@
         data = CommFunc.WriteBYTE(data, self.WarRank)
         data = CommFunc.WriteDWORD(data, self.TotalFightPower)
         data = CommFunc.WriteDWORD(data, self.TotalFightPowerEx)
+        data = CommFunc.WriteBYTE(data, self.EmblemID)
         return data
 
     def OutputString(self):
@@ -2502,7 +2549,8 @@
                                 JoinAccept:%d,
                                 WarRank:%d,
                                 TotalFightPower:%d,
-                                TotalFightPowerEx:%d
+                                TotalFightPowerEx:%d,
+                                EmblemID:%d
                                 '''\
                                 %(
                                 self.FamilyIndex,
@@ -2518,7 +2566,8 @@
                                 self.JoinAccept,
                                 self.WarRank,
                                 self.TotalFightPower,
-                                self.TotalFightPowerEx
+                                self.TotalFightPowerEx,
+                                self.EmblemID
                                 )
         return DumpString
 
@@ -2947,6 +2996,8 @@
     AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
     IsWin = 0    #(BYTE IsWin)//是否获胜
     Time = 0    #(DWORD Time)//时间戳
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -2967,6 +3018,8 @@
         self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen)
         self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -2982,6 +3035,8 @@
         self.AddScore = ""
         self.IsWin = 0
         self.Time = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -2997,6 +3052,8 @@
         length += 1
         length += len(self.AddScore)
         length += 1
+        length += 4
+        length += 4
         length += 4
 
         return length
@@ -3015,6 +3072,8 @@
         data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore)
         data = CommFunc.WriteBYTE(data, self.IsWin)
         data = CommFunc.WriteDWORD(data, self.Time)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -3030,7 +3089,9 @@
                                 AddScoreLen:%d,
                                 AddScore:%s,
                                 IsWin:%d,
-                                Time:%d
+                                Time:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -3044,7 +3105,9 @@
                                 self.AddScoreLen,
                                 self.AddScore,
                                 self.IsWin,
-                                self.Time
+                                self.Time,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -3127,6 +3190,8 @@
     FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
     FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
     Score = 0    #(DWORD Score)//积分
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -3143,6 +3208,8 @@
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -3154,6 +3221,8 @@
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Score = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -3163,6 +3232,8 @@
         length += 1
         length += 2
         length += 2
+        length += 4
+        length += 4
         length += 4
         length += 4
         length += 4
@@ -3179,6 +3250,8 @@
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Score)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -3190,7 +3263,9 @@
                                 RealmLV:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
-                                Score:%d
+                                Score:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -3200,7 +3275,9 @@
                                 self.RealmLV,
                                 self.FightPower,
                                 self.FightPowerEx,
-                                self.Score
+                                self.Score,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -4631,7 +4708,7 @@
     ID = 0    #(DWORD ID)
     ID2 = 0    #(DWORD ID2)
     Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
-    Name2 = ""    #(char Name2[33])//名字2
+    Name2 = ""    #(char Name2[65])//名字2
     Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
     Value1 = 0    #(DWORD Value1)//排序依赖的值,比如,等级
     Value2 = 0    #(DWORD Value2)//排序依赖的值,比如,战斗力
@@ -4658,7 +4735,7 @@
         self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65)
         self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -4703,7 +4780,7 @@
         length += 4
         length += 4
         length += 33
-        length += 33
+        length += 65
         length += 1
         length += 4
         length += 4
@@ -4727,7 +4804,7 @@
         data = CommFunc.WriteDWORD(data, self.ID)
         data = CommFunc.WriteDWORD(data, self.ID2)
         data = CommFunc.WriteString(data, 33, self.Name1)
-        data = CommFunc.WriteString(data, 33, self.Name2)
+        data = CommFunc.WriteString(data, 65, self.Name2)
         data = CommFunc.WriteBYTE(data, self.Type2)
         data = CommFunc.WriteDWORD(data, self.Value1)
         data = CommFunc.WriteDWORD(data, self.Value2)
@@ -5240,6 +5317,8 @@
     LV = 0    #(DWORD LV)//等级
     Job = 0    #(BYTE Job)
     RealmLV = 0    #(WORD RealmLV)//境界	
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -5253,6 +5332,8 @@
         self.LV,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -5261,6 +5342,8 @@
         self.LV = 0
         self.Job = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -5270,6 +5353,8 @@
         length += 4
         length += 1
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -5280,6 +5365,8 @@
         data = CommFunc.WriteDWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -5288,14 +5375,18 @@
                                 Name:%s,
                                 LV:%d,
                                 Job:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.ID,
                                 self.Name,
                                 self.LV,
                                 self.Job,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -5375,6 +5466,8 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -5388,6 +5481,8 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -5396,6 +5491,8 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -5405,6 +5502,8 @@
         length += 1
         length += 2
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -5415,6 +5514,8 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -5423,14 +5524,18 @@
                                 PlayerName:%s,
                                 Job:%d,
                                 LV:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
                                 self.PlayerName,
                                 self.Job,
                                 self.LV,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -5733,6 +5838,384 @@
 
 m_NAtagUpdatePlayerNameResult=tagUpdatePlayerNameResult()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUpdatePlayerNameResult.Cmd,m_NAtagUpdatePlayerNameResult.SubCmd))] = m_NAtagUpdatePlayerNameResult
+
+
+#------------------------------------------------------
+# A9 27 仙宫新晋玩家信息 #tagGCXiangongNewPlayerInfo
+
+class  tagGCXiangongNewPlayer(Structure):
+    AddTime = 0    #(DWORD AddTime)// 新晋时间戳
+    ServerID = 0    #(DWORD ServerID)
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 玩家名,size = NameLen
+    LV = 0    #(WORD LV)// 玩家等级
+    Job = 0    #(BYTE Job)// 玩家职业
+    RealmLV = 0    #(WORD RealmLV)// 玩家境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
+    EquipShowSwitch = 0    #(DWORD EquipShowSwitch)
+    EquipShowIDCount = 0    #(BYTE EquipShowIDCount)
+    EquipShowID = list()    #(vector<DWORD> EquipShowID)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ServerID,_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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.EquipShowIDCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.EquipShowID.append(value)
+        return _pos
+
+    def Clear(self):
+        self.AddTime = 0
+        self.ServerID = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.LV = 0
+        self.Job = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.EquipShowSwitch = 0
+        self.EquipShowIDCount = 0
+        self.EquipShowID = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += 4 * self.EquipShowIDCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.ServerID)
+        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.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
+        data = CommFunc.WriteBYTE(data, self.EquipShowIDCount)
+        for i in range(self.EquipShowIDCount):
+            data = CommFunc.WriteDWORD(data, self.EquipShowID[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AddTime:%d,
+                                ServerID:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                EquipShowSwitch:%d,
+                                EquipShowIDCount:%d,
+                                EquipShowID:%s
+                                '''\
+                                %(
+                                self.AddTime,
+                                self.ServerID,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic,
+                                self.EquipShowSwitch,
+                                self.EquipShowIDCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCXiangongNewPlayerInfo(Structure):
+    Head = tagHead()
+    XiangongID = 0    #(WORD XiangongID)// 仙宫ID
+    NewPlayerCount = 0    #(BYTE NewPlayerCount)
+    NewPlayerList = list()    #(vector<tagGCXiangongNewPlayer> NewPlayerList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x27
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.NewPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.NewPlayerCount):
+            temNewPlayerList = tagGCXiangongNewPlayer()
+            _pos = temNewPlayerList.ReadData(_lpData, _pos)
+            self.NewPlayerList.append(temNewPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x27
+        self.XiangongID = 0
+        self.NewPlayerCount = 0
+        self.NewPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 1
+        for i in range(self.NewPlayerCount):
+            length += self.NewPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.XiangongID)
+        data = CommFunc.WriteBYTE(data, self.NewPlayerCount)
+        for i in range(self.NewPlayerCount):
+            data = CommFunc.WriteString(data, self.NewPlayerList[i].GetLength(), self.NewPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                XiangongID:%d,
+                                NewPlayerCount:%d,
+                                NewPlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.XiangongID,
+                                self.NewPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCXiangongNewPlayerInfo=tagGCXiangongNewPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongNewPlayerInfo.Head.Cmd,m_NAtagGCXiangongNewPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongNewPlayerInfo
+
+
+#------------------------------------------------------
+# A9 28 仙宫仙名录玩家信息 #tagGCXiangongRecPlayerInfo
+
+class  tagGCXiangongRecPlayer(Structure):
+    AddTime = 0    #(DWORD AddTime)// 新晋时间戳
+    ServerID = 0    #(DWORD ServerID)
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 玩家名,size = NameLen
+    LV = 0    #(WORD LV)// 玩家等级
+    Job = 0    #(BYTE Job)// 玩家职业
+    RealmLV = 0    #(WORD RealmLV)// 玩家境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ServerID,_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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.AddTime = 0
+        self.ServerID = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.LV = 0
+        self.Job = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.ServerID)
+        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.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AddTime:%d,
+                                ServerID:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.AddTime,
+                                self.ServerID,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCXiangongRecPlayerInfo(Structure):
+    Head = tagHead()
+    XiangongID = 0    #(WORD XiangongID)// 仙宫ID
+    RecPlayerCount = 0    #(BYTE RecPlayerCount)
+    RecPlayerList = list()    #(vector<tagGCXiangongRecPlayer> RecPlayerList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x28
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RecPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecPlayerCount):
+            temRecPlayerList = tagGCXiangongRecPlayer()
+            _pos = temRecPlayerList.ReadData(_lpData, _pos)
+            self.RecPlayerList.append(temRecPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x28
+        self.XiangongID = 0
+        self.RecPlayerCount = 0
+        self.RecPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 1
+        for i in range(self.RecPlayerCount):
+            length += self.RecPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.XiangongID)
+        data = CommFunc.WriteBYTE(data, self.RecPlayerCount)
+        for i in range(self.RecPlayerCount):
+            data = CommFunc.WriteString(data, self.RecPlayerList[i].GetLength(), self.RecPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                XiangongID:%d,
+                                RecPlayerCount:%d,
+                                RecPlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.XiangongID,
+                                self.RecPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCXiangongRecPlayerInfo=tagGCXiangongRecPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongRecPlayerInfo.Head.Cmd,m_NAtagGCXiangongRecPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongRecPlayerInfo
 
 
 #------------------------------------------------------
@@ -7281,6 +7764,8 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(BYTE RealmLV)//境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     MapID = 0    #(DWORD MapID)
     LineID = 0    #(DWORD LineID)
     NPCID = 0    #(DWORD NPCID)
@@ -7300,6 +7785,8 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -7314,6 +7801,8 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         self.MapID = 0
         self.LineID = 0
         self.NPCID = 0
@@ -7332,6 +7821,8 @@
         length += 4
         length += 4
         length += 4
+        length += 4
+        length += 4
         length += 2
         length += len(self.ExData)
 
@@ -7345,6 +7836,8 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.MapID)
         data = CommFunc.WriteDWORD(data, self.LineID)
         data = CommFunc.WriteDWORD(data, self.NPCID)
@@ -7360,6 +7853,8 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 MapID:%d,
                                 LineID:%d,
                                 NPCID:%d,
@@ -7373,6 +7868,8 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.MapID,
                                 self.LineID,
                                 self.NPCID,
@@ -7831,6 +8328,8 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)
     RealmLV = 0    #(BYTE RealmLV)//境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     MapID = 0    #(DWORD MapID)
     LineID = 0    #(DWORD LineID)
     NPCID = 0    #(DWORD NPCID)
@@ -7855,6 +8354,8 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -7875,6 +8376,8 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         self.MapID = 0
         self.LineID = 0
         self.NPCID = 0
@@ -7896,6 +8399,8 @@
         length += 4
         length += 4
         length += 4
+        length += 4
+        length += 4
         length += 2
         length += len(self.ExData)
         length += 19
@@ -7912,6 +8417,8 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.MapID)
         data = CommFunc.WriteDWORD(data, self.LineID)
         data = CommFunc.WriteDWORD(data, self.NPCID)
@@ -7930,6 +8437,8 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 MapID:%d,
                                 LineID:%d,
                                 NPCID:%d,
@@ -7946,6 +8455,8 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.MapID,
                                 self.LineID,
                                 self.NPCID,
@@ -8049,7 +8560,9 @@
     RobPlayerID = 0    #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺
     RobWorkerCount = 0    #(BYTE RobWorkerCount)// 抢夺工人个数
     RobPlayerName = ""    #(char RobPlayerName[33])
+    RobJob = 0    #(BYTE RobJob)
     RobFace = 0    #(DWORD RobFace)
+    RobFacePic = 0    #(DWORD RobFacePic)
     data = None
 
     def __init__(self):
@@ -8071,7 +8584,9 @@
         self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.RobJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RobFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -8088,7 +8603,9 @@
         self.RobPlayerID = 0
         self.RobWorkerCount = 0
         self.RobPlayerName = ""
+        self.RobJob = 0
         self.RobFace = 0
+        self.RobFacePic = 0
         return
 
     def GetLength(self):
@@ -8106,6 +8623,8 @@
         length += 4
         length += 1
         length += 33
+        length += 1
+        length += 4
         length += 4
 
         return length
@@ -8125,7 +8644,9 @@
         data = CommFunc.WriteDWORD(data, self.RobPlayerID)
         data = CommFunc.WriteBYTE(data, self.RobWorkerCount)
         data = CommFunc.WriteString(data, 33, self.RobPlayerName)
+        data = CommFunc.WriteBYTE(data, self.RobJob)
         data = CommFunc.WriteDWORD(data, self.RobFace)
+        data = CommFunc.WriteDWORD(data, self.RobFacePic)
         return data
 
     def OutputString(self):
@@ -8143,7 +8664,9 @@
                                 RobPlayerID:%d,
                                 RobWorkerCount:%d,
                                 RobPlayerName:%s,
-                                RobFace:%d
+                                RobJob:%d,
+                                RobFace:%d,
+                                RobFacePic:%d
                                 '''\
                                 %(
                                 self.Index,
@@ -8159,7 +8682,9 @@
                                 self.RobPlayerID,
                                 self.RobWorkerCount,
                                 self.RobPlayerName,
-                                self.RobFace
+                                self.RobJob,
+                                self.RobFace,
+                                self.RobFacePic
                                 )
         return DumpString
 
@@ -8167,7 +8692,9 @@
 class  tagGCMineArea(Structure):
     PlayerID = 0    #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人
     PlayerName = ""    #(char PlayerName[33])// 可能为空,如自己或假人
+    Job = 0    #(BYTE Job)
     Face = 0    #(DWORD Face)
+    FacePic = 0    #(DWORD FacePic)
     MineCount = 0    #(BYTE MineCount)
     MineItemList = list()    #(vector<tagGCMineItem> MineItemList)// 矿物列表
     data = None
@@ -8180,7 +8707,9 @@
         self.Clear()
         self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.MineCount):
             temMineItemList = tagGCMineItem()
@@ -8191,7 +8720,9 @@
     def Clear(self):
         self.PlayerID = 0
         self.PlayerName = ""
+        self.Job = 0
         self.Face = 0
+        self.FacePic = 0
         self.MineCount = 0
         self.MineItemList = list()
         return
@@ -8200,6 +8731,8 @@
         length = 0
         length += 4
         length += 33
+        length += 1
+        length += 4
         length += 4
         length += 1
         for i in range(self.MineCount):
@@ -8211,7 +8744,9 @@
         data = ''
         data = CommFunc.WriteDWORD(data, self.PlayerID)
         data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteBYTE(data, self.MineCount)
         for i in range(self.MineCount):
             data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer())
@@ -8221,14 +8756,18 @@
         DumpString = '''
                                 PlayerID:%d,
                                 PlayerName:%s,
+                                Job:%d,
                                 Face:%d,
+                                FacePic:%d,
                                 MineCount:%d,
                                 MineItemList:%s
                                 '''\
                                 %(
                                 self.PlayerID,
                                 self.PlayerName,
+                                self.Job,
                                 self.Face,
+                                self.FacePic,
                                 self.MineCount,
                                 "..."
                                 )
@@ -8324,7 +8863,9 @@
     RecordTime = 0    #(DWORD RecordTime)// 记录时间戳
     MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID
     TagPlayerName = ""    #(char TagPlayerName[33])
+    TagJob = 0    #(BYTE TagJob)
     TagFace = 0    #(DWORD TagFace)
+    TagFacePic = 0    #(DWORD TagFacePic)
     data = None
 
     def __init__(self):
@@ -8338,7 +8879,9 @@
         self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TagFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -8347,7 +8890,9 @@
         self.RecordTime = 0
         self.MineID = 0
         self.TagPlayerName = ""
+        self.TagJob = 0
         self.TagFace = 0
+        self.TagFacePic = 0
         return
 
     def GetLength(self):
@@ -8357,6 +8902,8 @@
         length += 4
         length += 2
         length += 33
+        length += 1
+        length += 4
         length += 4
 
         return length
@@ -8368,7 +8915,9 @@
         data = CommFunc.WriteDWORD(data, self.RecordTime)
         data = CommFunc.WriteWORD(data, self.MineID)
         data = CommFunc.WriteString(data, 33, self.TagPlayerName)
+        data = CommFunc.WriteBYTE(data, self.TagJob)
         data = CommFunc.WriteDWORD(data, self.TagFace)
+        data = CommFunc.WriteDWORD(data, self.TagFacePic)
         return data
 
     def OutputString(self):
@@ -8378,7 +8927,9 @@
                                 RecordTime:%d,
                                 MineID:%d,
                                 TagPlayerName:%s,
-                                TagFace:%d
+                                TagJob:%d,
+                                TagFace:%d,
+                                TagFacePic:%d
                                 '''\
                                 %(
                                 self.RecordType,
@@ -8386,7 +8937,9 @@
                                 self.RecordTime,
                                 self.MineID,
                                 self.TagPlayerName,
-                                self.TagFace
+                                self.TagJob,
+                                self.TagFace,
+                                self.TagFacePic
                                 )
         return DumpString
 
@@ -8530,6 +9083,8 @@
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)
     RealmLV = 0    #(BYTE RealmLV)//境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -8543,6 +9098,8 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -8551,6 +9108,8 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -8560,6 +9119,8 @@
         length += 1
         length += 2
         length += 1
+        length += 4
+        length += 4
 
         return length
 
@@ -8570,6 +9131,8 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -8578,14 +9141,18 @@
                                 PlayerName:%s,
                                 Job:%d,
                                 LV:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
                                 self.PlayerName,
                                 self.Job,
                                 self.LV,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -8914,6 +9481,8 @@
     Name = ""    #(char Name[33])
     LV = 0    #(WORD LV)
     RealmLV = 0    #(WORD RealmLV)//境界等级
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -8929,6 +9498,8 @@
         self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -8940,6 +9511,8 @@
         self.Name = ""
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -8949,6 +9522,8 @@
         length += 33
         length += 2
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -8959,6 +9534,8 @@
         data = CommFunc.WriteString(data, 33, self.Name)
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -8967,14 +9544,18 @@
                                 AskID:%d,
                                 Name:%s,
                                 LV:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
                                 self.AskID,
                                 self.Name,
                                 self.LV,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -10104,6 +10685,8 @@
     OnlineType = 0    #(BYTE OnlineType)//在线状态, 0 不在线 1在线
     IsInTeam = 0    #(BYTE IsInTeam)//是否有队伍
     ServerGroupID = 0    #(DWORD ServerGroupID)//服务器组ID
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -10123,6 +10706,8 @@
         self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -10138,6 +10723,8 @@
         self.OnlineType = 0
         self.IsInTeam = 0
         self.ServerGroupID = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -10150,6 +10737,8 @@
         length += 2
         length += 1
         length += 1
+        length += 4
+        length += 4
         length += 4
 
         return length
@@ -10165,6 +10754,8 @@
         data = CommFunc.WriteBYTE(data, self.OnlineType)
         data = CommFunc.WriteBYTE(data, self.IsInTeam)
         data = CommFunc.WriteDWORD(data, self.ServerGroupID)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -10177,7 +10768,9 @@
                                 RealmLV:%d,
                                 OnlineType:%d,
                                 IsInTeam:%d,
-                                ServerGroupID:%d
+                                ServerGroupID:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -10188,7 +10781,9 @@
                                 self.RealmLV,
                                 self.OnlineType,
                                 self.IsInTeam,
-                                self.ServerGroupID
+                                self.ServerGroupID,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -10263,6 +10858,8 @@
     LV = 0    #(WORD LV)//等级
     RealmLV = 0    #(WORD RealmLV)//境界
     OnlineType = 0    #(BYTE OnlineType)//0不在线 1在线 2脱机在线
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -10277,6 +10874,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -10286,6 +10885,8 @@
         self.LV = 0
         self.RealmLV = 0
         self.OnlineType = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -10296,6 +10897,8 @@
         length += 2
         length += 2
         length += 1
+        length += 4
+        length += 4
 
         return length
 
@@ -10307,6 +10910,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteBYTE(data, self.OnlineType)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -10316,7 +10921,9 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
-                                OnlineType:%d
+                                OnlineType:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -10324,7 +10931,9 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
-                                self.OnlineType
+                                self.OnlineType,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -12693,6 +13302,8 @@
     LV = 0    #(WORD LV)// 玩家等级
     Job = 0    #(BYTE Job)// 玩家职业
     RealmLV = 0    #(WORD RealmLV)// 玩家境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     FightPower = 0    #(DWORD FightPower)// 战力,求余亿
     FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
     Value1 = 0    #(DWORD Value1)//值1
@@ -12712,6 +13323,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -12726,6 +13339,8 @@
         self.LV = 0
         self.Job = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.Value1 = 0
@@ -12745,6 +13360,8 @@
         length += 4
         length += 4
         length += 4
+        length += 4
+        length += 4
 
         return length
 
@@ -12757,6 +13374,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.Value1)
@@ -12772,6 +13391,8 @@
                                 LV:%d,
                                 Job:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 Value1:%d,
@@ -12785,6 +13406,8 @@
                                 self.LV,
                                 self.Job,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.Value1,
@@ -13091,6 +13714,8 @@
     LV = 0    #(WORD LV)// 玩家等级
     Job = 0    #(BYTE Job)// 玩家职业
     RealmLV = 0    #(WORD RealmLV)// 玩家境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     FightPower = 0    #(DWORD FightPower)// 战力,求余亿
     FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
     data = None
@@ -13108,6 +13733,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
@@ -13120,6 +13747,8 @@
         self.LV = 0
         self.Job = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         return
@@ -13135,6 +13764,8 @@
         length += 2
         length += 4
         length += 4
+        length += 4
+        length += 4
 
         return length
 
@@ -13147,6 +13778,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         return data
@@ -13160,6 +13793,8 @@
                                 LV:%d,
                                 Job:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d
                                 '''\
@@ -13171,6 +13806,8 @@
                                 self.LV,
                                 self.Job,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.FightPower,
                                 self.FightPowerEx
                                 )
@@ -13185,6 +13822,8 @@
     LV = 0    #(WORD LV)// 玩家等级
     Job = 0    #(BYTE Job)// 玩家职业
     RealmLV = 0    #(WORD RealmLV)// 玩家境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     FightPower = 0    #(DWORD FightPower)// 战力,求余亿
     FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
     OfflineValue = 0    #(DWORD OfflineValue)// 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线;
@@ -13205,6 +13844,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.OfflineValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -13220,6 +13861,8 @@
         self.LV = 0
         self.Job = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         self.FightPower = 0
         self.FightPowerEx = 0
         self.OfflineValue = 0
@@ -13241,6 +13884,8 @@
         length += 4
         length += 4
         length += 4
+        length += 4
+        length += 4
 
         return length
 
@@ -13253,6 +13898,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteDWORD(data, self.OfflineValue)
@@ -13269,6 +13916,8 @@
                                 LV:%d,
                                 Job:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
                                 OfflineValue:%d,
@@ -13283,6 +13932,8 @@
                                 self.LV,
                                 self.Job,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.FightPower,
                                 self.FightPowerEx,
                                 self.OfflineValue,
@@ -13863,6 +14514,8 @@
     Job = 0    #(BYTE Job)// 玩家职业
     JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
     RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -13878,6 +14531,8 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -13888,6 +14543,8 @@
         self.Job = 0
         self.JobLevel = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -13899,6 +14556,8 @@
         length += 1
         length += 1
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -13911,6 +14570,8 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteBYTE(data, self.JobLevel)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -13921,7 +14582,9 @@
                                 LV:%d,
                                 Job:%d,
                                 JobLevel:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -13930,7 +14593,9 @@
                                 self.LV,
                                 self.Job,
                                 self.JobLevel,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -14013,6 +14678,8 @@
     Job = 0    #(BYTE Job)// 玩家职业
     JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
     RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -14031,6 +14698,8 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -14045,6 +14714,8 @@
         self.Job = 0
         self.JobLevel = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -14057,6 +14728,8 @@
         length += 1
         length += 1
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -14070,6 +14743,8 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteBYTE(data, self.JobLevel)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -14081,7 +14756,9 @@
                                 LV:%d,
                                 Job:%d,
                                 JobLevel:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -14091,7 +14768,9 @@
                                 self.LV,
                                 self.Job,
                                 self.JobLevel,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -14542,6 +15221,8 @@
     Job = 0    #(BYTE Job)// 玩家职业
     JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
     RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     PlayerState = 0    #(BYTE PlayerState)// 0: 离线 1:在线
     MapID = 0    #(DWORD MapID)// 地图ID
     LineID = 0    #(BYTE LineID)// 线路ID
@@ -14562,6 +15243,8 @@
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlayerState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -14577,6 +15260,8 @@
         self.Job = 0
         self.JobLevel = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         self.PlayerState = 0
         self.MapID = 0
         self.LineID = 0
@@ -14593,6 +15278,8 @@
         length += 1
         length += 1
         length += 2
+        length += 4
+        length += 4
         length += 1
         length += 4
         length += 1
@@ -14610,6 +15297,8 @@
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteBYTE(data, self.JobLevel)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteBYTE(data, self.PlayerState)
         data = CommFunc.WriteDWORD(data, self.MapID)
         data = CommFunc.WriteBYTE(data, self.LineID)
@@ -14626,6 +15315,8 @@
                                 Job:%d,
                                 JobLevel:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 PlayerState:%d,
                                 MapID:%d,
                                 LineID:%d
@@ -14640,6 +15331,8 @@
                                 self.Job,
                                 self.JobLevel,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.PlayerState,
                                 self.MapID,
                                 self.LineID
@@ -15615,6 +16308,8 @@
     FightPower = 0    #(DWORD FightPower)// 战力求余亿部分
     FightPowerEx = 0    #(DWORD FightPowerEx)// 战力整除亿部分
     RealmLV = 0    #(WORD RealmLV)
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -15631,6 +16326,8 @@
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -15642,6 +16339,8 @@
         self.FightPower = 0
         self.FightPowerEx = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -15654,6 +16353,8 @@
         length += 4
         length += 4
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -15667,6 +16368,8 @@
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -15678,7 +16381,9 @@
                                 LV:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -15688,7 +16393,9 @@
                                 self.LV,
                                 self.FightPower,
                                 self.FightPowerEx,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -16144,7 +16851,7 @@
     ID = 0    #(DWORD ID)
     ID2 = 0    #(DWORD ID2)
     Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
-    Name2 = ""    #(char Name2[33])//名字2
+    Name2 = ""    #(char Name2[65])//名字2
     Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
     Value1 = 0    #(DWORD Value1)//自定义值1
     Value2 = 0    #(DWORD Value2)//自定义值2
@@ -16171,7 +16878,7 @@
         self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65)
         self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -16216,7 +16923,7 @@
         length += 4
         length += 4
         length += 33
-        length += 33
+        length += 65
         length += 1
         length += 4
         length += 4
@@ -16240,7 +16947,7 @@
         data = CommFunc.WriteDWORD(data, self.ID)
         data = CommFunc.WriteDWORD(data, self.ID2)
         data = CommFunc.WriteString(data, 33, self.Name1)
-        data = CommFunc.WriteString(data, 33, self.Name2)
+        data = CommFunc.WriteString(data, 65, self.Name2)
         data = CommFunc.WriteBYTE(data, self.Type2)
         data = CommFunc.WriteDWORD(data, self.Value1)
         data = CommFunc.WriteDWORD(data, self.Value2)
@@ -16524,48 +17231,74 @@
 # C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo
 
 class  tagGCCrossChampionshipPKBattle(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("BattleNum", c_ubyte),    # 对战组编号 1~n
-                  ("WinPlayerID", c_int),    # 获胜玩家ID
-                  ("PlayerIDA", c_int),    # 玩家IDA
-                  ("PlayerIDB", c_int),    # 玩家IDB
-                  ]
+    BattleNum = 0    #(BYTE BattleNum)// 对战组编号 1~n
+    WinPlayerID = 0    #(DWORD WinPlayerID)// 获胜玩家ID
+    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家IDA
+    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家IDB
+    BattleRetLen = 0    #(BYTE BattleRetLen)
+    BattleRet = ""    #(String BattleRet)// 战斗结果明细 {"playerID":[[第1局胜负,第1局总积分,胜负基础分,hp分,时间分], ...], ...}
+    data = None
 
     def __init__(self):
         self.Clear()
         return
 
-    def ReadData(self, stringData, _pos=0, _len=0):
+    def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
+        self.BattleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WinPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BattleRetLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.BattleRet,_pos = CommFunc.ReadString(_lpData, _pos,self.BattleRetLen)
+        return _pos
 
     def Clear(self):
         self.BattleNum = 0
         self.WinPlayerID = 0
         self.PlayerIDA = 0
         self.PlayerIDB = 0
+        self.BattleRetLen = 0
+        self.BattleRet = ""
         return
 
     def GetLength(self):
-        return sizeof(tagGCCrossChampionshipPKBattle)
+        length = 0
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.BattleRet)
+
+        return length
 
     def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.BattleNum)
+        data = CommFunc.WriteDWORD(data, self.WinPlayerID)
+        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
+        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
+        data = CommFunc.WriteBYTE(data, self.BattleRetLen)
+        data = CommFunc.WriteString(data, self.BattleRetLen, self.BattleRet)
+        return data
 
     def OutputString(self):
-        DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo:
+        DumpString = '''
                                 BattleNum:%d,
                                 WinPlayerID:%d,
                                 PlayerIDA:%d,
-                                PlayerIDB:%d
+                                PlayerIDB:%d,
+                                BattleRetLen:%d,
+                                BattleRet:%s
                                 '''\
                                 %(
                                 self.BattleNum,
                                 self.WinPlayerID,
                                 self.PlayerIDA,
-                                self.PlayerIDB
+                                self.PlayerIDB,
+                                self.BattleRetLen,
+                                self.BattleRet
                                 )
         return DumpString
 
@@ -16636,6 +17369,8 @@
     FightPower = 0    #(DWORD FightPower)// 战力求余亿部分
     FightPowerEx = 0    #(DWORD FightPowerEx)// 战力整除亿部分
     RealmLV = 0    #(WORD RealmLV)
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     data = None
 
     def __init__(self):
@@ -16652,6 +17387,8 @@
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -16663,6 +17400,8 @@
         self.FightPower = 0
         self.FightPowerEx = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -16675,6 +17414,8 @@
         length += 4
         length += 4
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -16688,6 +17429,8 @@
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         return data
 
     def OutputString(self):
@@ -16699,7 +17442,9 @@
                                 LV:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -16709,7 +17454,9 @@
                                 self.LV,
                                 self.FightPower,
                                 self.FightPowerEx,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -16828,6 +17575,8 @@
     NameLen = 0    #(BYTE NameLen)
     PlayerName = ""    #(String PlayerName)
     Job = 0    #(BYTE Job)
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     FightPower = 0    #(DWORD FightPower)
     RealmLV = 0    #(WORD RealmLV)
     PKScore = 0    #(DWORD PKScore)
@@ -16844,6 +17593,8 @@
         self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -16855,6 +17606,8 @@
         self.NameLen = 0
         self.PlayerName = ""
         self.Job = 0
+        self.Face = 0
+        self.FacePic = 0
         self.FightPower = 0
         self.RealmLV = 0
         self.PKScore = 0
@@ -16868,6 +17621,8 @@
         length += len(self.PlayerName)
         length += 1
         length += 4
+        length += 4
+        length += 4
         length += 2
         length += 4
         length += 1
@@ -16880,6 +17635,8 @@
         data = CommFunc.WriteBYTE(data, self.NameLen)
         data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
         data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteDWORD(data, self.PKScore)
@@ -16892,6 +17649,8 @@
                                 NameLen:%d,
                                 PlayerName:%s,
                                 Job:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 FightPower:%d,
                                 RealmLV:%d,
                                 PKScore:%d,
@@ -16902,6 +17661,8 @@
                                 self.NameLen,
                                 self.PlayerName,
                                 self.Job,
+                                self.Face,
+                                self.FacePic,
                                 self.FightPower,
                                 self.RealmLV,
                                 self.PKScore,
@@ -16999,9 +17760,11 @@
     PlayerName = ""    #(String PlayerName)// 跨服名字
     Job = 0    #(BYTE Job)
     LV = 0    #(WORD LV)
-    MaxHP = 0    #(DWORD MaxHP)// 默认满血,求余亿部分
-    MaxHPEx = 0    #(DWORD MaxHPEx)// 默认满血,整除亿部分
-    MaxProDef = 0    #(DWORD MaxProDef)// 最大护盾
+    RealmLV = 0    #(WORD RealmLV)//境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
+    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
     data = None
 
     def __init__(self):
@@ -17015,9 +17778,11 @@
         self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -17026,9 +17791,11 @@
         self.PlayerName = ""
         self.Job = 0
         self.LV = 0
-        self.MaxHP = 0
-        self.MaxHPEx = 0
-        self.MaxProDef = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
         return
 
     def GetLength(self):
@@ -17038,6 +17805,8 @@
         length += len(self.PlayerName)
         length += 1
         length += 2
+        length += 2
+        length += 4
         length += 4
         length += 4
         length += 4
@@ -17051,9 +17820,11 @@
         data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteDWORD(data, self.MaxHP)
-        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
-        data = CommFunc.WriteDWORD(data, self.MaxProDef)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
         return data
 
     def OutputString(self):
@@ -17063,9 +17834,11 @@
                                 PlayerName:%s,
                                 Job:%d,
                                 LV:%d,
-                                MaxHP:%d,
-                                MaxHPEx:%d,
-                                MaxProDef:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -17073,19 +17846,17 @@
                                 self.PlayerName,
                                 self.Job,
                                 self.LV,
-                                self.MaxHP,
-                                self.MaxHPEx,
-                                self.MaxProDef
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic,
+                                self.FightPower,
+                                self.FightPowerEx
                                 )
         return DumpString
 
 
 class  tagGCCrossRealmPKMatchOK(Structure):
     Head = tagHead()
-    RoomID = 0    #(WORD RoomID)// 房间ID
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 跨服名字
-    Number = 0    #(BYTE Number)// 位置编号;1-左,2-右
     MatchPlayerCount = 0    #(BYTE MatchPlayerCount)
     MatchPlayer = list()    #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家
     data = None
@@ -17099,10 +17870,6 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.RoomID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.Number,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.MatchPlayerCount):
             temMatchPlayer = tagGCCrossRealmPKMatchPlayer()
@@ -17115,10 +17882,6 @@
         self.Head.Clear()
         self.Head.Cmd = 0xC0
         self.Head.SubCmd = 0x01
-        self.RoomID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.Number = 0
         self.MatchPlayerCount = 0
         self.MatchPlayer = list()
         return
@@ -17126,10 +17889,6 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
-        length += 2
-        length += 1
-        length += len(self.PlayerName)
-        length += 1
         length += 1
         for i in range(self.MatchPlayerCount):
             length += self.MatchPlayer[i].GetLength()
@@ -17139,10 +17898,6 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.RoomID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Number)
         data = CommFunc.WriteBYTE(data, self.MatchPlayerCount)
         for i in range(self.MatchPlayerCount):
             data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer())
@@ -17151,19 +17906,11 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                RoomID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                Number:%d,
                                 MatchPlayerCount:%d,
                                 MatchPlayer:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.RoomID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.Number,
                                 self.MatchPlayerCount,
                                 "..."
                                 )
@@ -18689,6 +19436,9 @@
     ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
     ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
     HPEx = 0    #(DWORD HPEx)//当前血量 超过E的记录
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
+    RoleType = 0    #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分)
     data = None
 
     def __init__(self):
@@ -18795,6 +19545,9 @@
         self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -18897,6 +19650,9 @@
         self.ExAttr19 = 0
         self.ExAttr20 = 0
         self.HPEx = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.RoleType = 0
         return
 
     def GetLength(self):
@@ -18989,6 +19745,9 @@
         length += 4
         length += 4
         length += 15
+        length += 4
+        length += 4
+        length += 4
         length += 4
         length += 4
         length += 4
@@ -19098,6 +19857,9 @@
         data = CommFunc.WriteDWORD(data, self.ExAttr19)
         data = CommFunc.WriteDWORD(data, self.ExAttr20)
         data = CommFunc.WriteDWORD(data, self.HPEx)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        data = CommFunc.WriteDWORD(data, self.RoleType)
         return data
 
     def OutputString(self):
@@ -19197,7 +19959,10 @@
                                 ExAttr18:%d,
                                 ExAttr19:%d,
                                 ExAttr20:%d,
-                                HPEx:%d
+                                HPEx:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                RoleType:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -19295,7 +20060,10 @@
                                 self.ExAttr18,
                                 self.ExAttr19,
                                 self.ExAttr20,
-                                self.HPEx
+                                self.HPEx,
+                                self.Face,
+                                self.FacePic,
+                                self.RoleType
                                 )
         return DumpString
 
@@ -27560,19 +28328,15 @@
 #------------------------------------------------------
 # A3 11 通知玩家境界信息 #tagMCSyncRealmInfo
 
-class  tagMCSyncRealmInfo(Structure):
+class  tagMCSyncRealmTask(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("IsPass", c_ubyte),    #是否通关副本
-                  ("XXZLAwardState", c_int),    #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
+                  ("TaskID", c_ubyte),    
+                  ("TaskValue", c_int),    
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x11
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -27581,36 +28345,99 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA3
-        self.SubCmd = 0x11
-        self.IsPass = 0
-        self.XXZLAwardState = 0
+        self.TaskID = 0
+        self.TaskValue = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCSyncRealmInfo)
+        return sizeof(tagMCSyncRealmTask)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                IsPass:%d,
-                                XXZLAwardState:%d
+                                TaskID:%d,
+                                TaskValue:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.IsPass,
-                                self.XXZLAwardState
+                                self.TaskID,
+                                self.TaskValue
+                                )
+        return DumpString
+
+
+class  tagMCSyncRealmInfo(Structure):
+    Head = tagHead()
+    TaskAwardState = 0    #(DWORD TaskAwardState)//进阶任务领奖状态;按任务ID二进制位存储是否已领取
+    TaskValueCount = 0    #(BYTE TaskValueCount)
+    TaskValueList = list()    #(vector<tagMCSyncRealmTask> TaskValueList)//进阶任务值列表,仅有需要记录的任务才会通知
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TaskAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TaskValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TaskValueCount):
+            temTaskValueList = tagMCSyncRealmTask()
+            _pos = temTaskValueList.ReadData(_lpData, _pos)
+            self.TaskValueList.append(temTaskValueList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x11
+        self.TaskAwardState = 0
+        self.TaskValueCount = 0
+        self.TaskValueList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.TaskValueCount):
+            length += self.TaskValueList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.TaskAwardState)
+        data = CommFunc.WriteBYTE(data, self.TaskValueCount)
+        for i in range(self.TaskValueCount):
+            data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TaskAwardState:%d,
+                                TaskValueCount:%d,
+                                TaskValueList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TaskAwardState,
+                                self.TaskValueCount,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
 
 
 #------------------------------------------------------
@@ -28123,13 +28950,11 @@
 #------------------------------------------------------
 # A3 51 寻宝功能信息 #tagMCTreasureInfo
 
-class  tagMCTreasureTypeInfo(Structure):
+class  tagMCTreasureGridLimit(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("TreasureType", c_ubyte),    #寻宝类型
-                  ("LuckValue", c_ushort),    #当前幸运值
-                  ("TreasureCount", c_int),    #已寻宝总次数
-                  ("FreeCountToday", c_ushort),    #今日已免费寻宝次数
+                  ("GridNum", c_ubyte),    # 有限制抽取次数的格子编号
+                  ("GridCnt", c_ushort),    # 已抽到次数
                   ]
 
     def __init__(self):
@@ -28142,30 +28967,109 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.TreasureType = 0
-        self.LuckValue = 0
-        self.TreasureCount = 0
-        self.FreeCountToday = 0
+        self.GridNum = 0
+        self.GridCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCTreasureTypeInfo)
+        return sizeof(tagMCTreasureGridLimit)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
+                                GridNum:%d,
+                                GridCnt:%d
+                                '''\
+                                %(
+                                self.GridNum,
+                                self.GridCnt
+                                )
+        return DumpString
+
+
+class  tagMCTreasureTypeInfo(Structure):
+    TreasureType = 0    #(BYTE TreasureType)//寻宝类型
+    LuckValue = 0    #(WORD LuckValue)//当前幸运值
+    TreasureCount = 0    #(DWORD TreasureCount)//已寻宝总次数
+    FreeCountToday = 0    #(WORD FreeCountToday)//今日已免费寻宝次数
+    TreasureCntAward = 0    #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取
+    GridLimitCnt = 0    #(BYTE GridLimitCnt)
+    GridLimitCntList = list()    #(vector<tagMCTreasureGridLimit> GridLimitCntList)//有限制抽取次数的格子次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FreeCountToday,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TreasureCntAward,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GridLimitCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GridLimitCnt):
+            temGridLimitCntList = tagMCTreasureGridLimit()
+            _pos = temGridLimitCntList.ReadData(_lpData, _pos)
+            self.GridLimitCntList.append(temGridLimitCntList)
+        return _pos
+
+    def Clear(self):
+        self.TreasureType = 0
+        self.LuckValue = 0
+        self.TreasureCount = 0
+        self.FreeCountToday = 0
+        self.TreasureCntAward = 0
+        self.GridLimitCnt = 0
+        self.GridLimitCntList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 2
+        length += 4
+        length += 2
+        length += 4
+        length += 1
+        for i in range(self.GridLimitCnt):
+            length += self.GridLimitCntList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.TreasureType)
+        data = CommFunc.WriteWORD(data, self.LuckValue)
+        data = CommFunc.WriteDWORD(data, self.TreasureCount)
+        data = CommFunc.WriteWORD(data, self.FreeCountToday)
+        data = CommFunc.WriteDWORD(data, self.TreasureCntAward)
+        data = CommFunc.WriteBYTE(data, self.GridLimitCnt)
+        for i in range(self.GridLimitCnt):
+            data = CommFunc.WriteString(data, self.GridLimitCntList[i].GetLength(), self.GridLimitCntList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
                                 TreasureType:%d,
                                 LuckValue:%d,
                                 TreasureCount:%d,
-                                FreeCountToday:%d
+                                FreeCountToday:%d,
+                                TreasureCntAward:%d,
+                                GridLimitCnt:%d,
+                                GridLimitCntList:%s
                                 '''\
                                 %(
                                 self.TreasureType,
                                 self.LuckValue,
                                 self.TreasureCount,
-                                self.FreeCountToday
+                                self.FreeCountToday,
+                                self.TreasureCntAward,
+                                self.GridLimitCnt,
+                                "..."
                                 )
         return DumpString
 
@@ -29343,6 +30247,62 @@
 
 
 #------------------------------------------------------
+# A5 12 珍宝阁信息 #tagMCFamilyZhenbaogeInfo
+
+class  tagMCFamilyZhenbaogeInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CutState", c_ubyte),    # 今日是否已砍价,此状态为全局状态,与盟Action砍价状态不同
+                  ("BuyState", c_ubyte),    # 今日是否已购买,此状态为全局状态,与盟Action购买状态不同
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA5
+        self.SubCmd = 0x12
+        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 = 0xA5
+        self.SubCmd = 0x12
+        self.CutState = 0
+        self.BuyState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFamilyZhenbaogeInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A5 12 珍宝阁信息 //tagMCFamilyZhenbaogeInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CutState:%d,
+                                BuyState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CutState,
+                                self.BuyState
+                                )
+        return DumpString
+
+
+m_NAtagMCFamilyZhenbaogeInfo=tagMCFamilyZhenbaogeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyZhenbaogeInfo.Cmd,m_NAtagMCFamilyZhenbaogeInfo.SubCmd))] = m_NAtagMCFamilyZhenbaogeInfo
+
+
+#------------------------------------------------------
 # A5 09 仙盟阵法信息 #tagMCFamilyZhenfaInfo
 
 class  tagMCFamilyZhenfa(Structure):
@@ -30149,18 +31109,17 @@
 #------------------------------------------------------
 # A7 17 聊天气泡框状态 #tagMCChatBubbleBoxState
 
-class  tagMCChatBubbleBoxState(Structure):
+class  tagMCChatBubbleBox(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("BoxState", c_int),    # 按二进制位存储代表是否已开启,暂支持31位,以后有需要再加
+                  ("BoxID", c_ubyte),    #气泡ID
+                  ("State", c_ubyte),    #是否已激活
+                  ("EndTime", c_int),    #到期时间戳,0为永久
+                  ("Star", c_ubyte),    #星级
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xA7
-        self.SubCmd = 0x17
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -30169,33 +31128,98 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xA7
-        self.SubCmd = 0x17
-        self.BoxState = 0
+        self.BoxID = 0
+        self.State = 0
+        self.EndTime = 0
+        self.Star = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCChatBubbleBoxState)
+        return sizeof(tagMCChatBubbleBox)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
         DumpString = '''// A7 17 聊天气泡框状态 //tagMCChatBubbleBoxState:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                BoxState:%d
+                                BoxID:%d,
+                                State:%d,
+                                EndTime:%d,
+                                Star:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.BoxState
+                                self.BoxID,
+                                self.State,
+                                self.EndTime,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagMCChatBubbleBoxState(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BoxList = list()    #(vector<tagMCChatBubbleBox> BoxList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x17
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temBoxList = tagMCChatBubbleBox()
+            _pos = temBoxList.ReadData(_lpData, _pos)
+            self.BoxList.append(temBoxList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x17
+        self.Count = 0
+        self.BoxList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.BoxList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BoxList[i].GetLength(), self.BoxList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BoxList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
                                 )
         return DumpString
 
 
 m_NAtagMCChatBubbleBoxState=tagMCChatBubbleBoxState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChatBubbleBoxState.Cmd,m_NAtagMCChatBubbleBoxState.SubCmd))] = m_NAtagMCChatBubbleBoxState
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChatBubbleBoxState.Head.Cmd,m_NAtagMCChatBubbleBoxState.Head.SubCmd))] = m_NAtagMCChatBubbleBoxState
 
 
 #------------------------------------------------------
@@ -30494,6 +31518,118 @@
 
 m_NAtagMCDynamicBarrierState=tagMCDynamicBarrierState()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDynamicBarrierState.Head.Cmd,m_NAtagMCDynamicBarrierState.Head.SubCmd))] = m_NAtagMCDynamicBarrierState
+
+
+#------------------------------------------------------
+# A7 21 表情包信息 #tagMCEmojiPackInfo
+
+class  tagMCEmojiPack(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PackID", c_ubyte),    #表情包ID
+                  ("State", c_ubyte),    #是否已激活
+                  ("EndTime", c_int),    #到期时间戳,0为永久
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.PackID = 0
+        self.State = 0
+        self.EndTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCEmojiPack)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 21 表情包信息 //tagMCEmojiPackInfo:
+                                PackID:%d,
+                                State:%d,
+                                EndTime:%d
+                                '''\
+                                %(
+                                self.PackID,
+                                self.State,
+                                self.EndTime
+                                )
+        return DumpString
+
+
+class  tagMCEmojiPackInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    EmojiPackList = list()    #(vector<tagMCEmojiPack> EmojiPackList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x21
+        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):
+            temEmojiPackList = tagMCEmojiPack()
+            _pos = temEmojiPackList.ReadData(_lpData, _pos)
+            self.EmojiPackList.append(temEmojiPackList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x21
+        self.Count = 0
+        self.EmojiPackList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.EmojiPackList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.EmojiPackList[i].GetLength(), self.EmojiPackList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                EmojiPackList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCEmojiPackInfo=tagMCEmojiPackInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEmojiPackInfo.Head.Cmd,m_NAtagMCEmojiPackInfo.Head.SubCmd))] = m_NAtagMCEmojiPackInfo
 
 
 #------------------------------------------------------
@@ -31983,6 +33119,218 @@
 
 
 #------------------------------------------------------
+# A8 01 获得奖励信息 #tagMCGiveAwardInfo
+
+class  tagMCGiveAwardMoney(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("MoneyType", c_ubyte),    
+                  ("MoneyValue", 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.MoneyType = 0
+        self.MoneyValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCGiveAwardMoney)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
+                                MoneyType:%d,
+                                MoneyValue:%d
+                                '''\
+                                %(
+                                self.MoneyType,
+                                self.MoneyValue
+                                )
+        return DumpString
+
+
+class  tagMCGiveAwardItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("Count", c_int),    
+                  ("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.Count = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCGiveAwardItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
+                                ItemID:%d,
+                                Count:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Count,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCGiveAwardInfo(Structure):
+    Head = tagHead()
+    EventLen = 0    #(BYTE EventLen)
+    EventName = ""    #(String EventName)
+    Exp = 0    #(DWORD Exp)// 奖励经验,求余亿部分
+    ExpPoint = 0    #(DWORD ExpPoint)// 奖励经验,整除亿部分
+    MoneyLen = 0    #(BYTE MoneyLen)
+    MoneyList = list()    #(vector<tagMCGiveAwardMoney> MoneyList)// 奖励货币
+    ItemLen = 0    #(BYTE ItemLen)
+    ItemList = list()    #(vector<tagMCGiveAwardItem> ItemList)// 奖励物品
+    DataLen = 0    #(WORD DataLen)
+    DataEx = ""    #(String DataEx)// 扩展信息,可由不同的Event自定义信息内容
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.EventLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.EventName,_pos = CommFunc.ReadString(_lpData, _pos,self.EventLen)
+        self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MoneyLen):
+            temMoneyList = tagMCGiveAwardMoney()
+            _pos = temMoneyList.ReadData(_lpData, _pos)
+            self.MoneyList.append(temMoneyList)
+        self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ItemLen):
+            temItemList = tagMCGiveAwardItem()
+            _pos = temItemList.ReadData(_lpData, _pos)
+            self.ItemList.append(temItemList)
+        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.DataEx,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA8
+        self.Head.SubCmd = 0x01
+        self.EventLen = 0
+        self.EventName = ""
+        self.Exp = 0
+        self.ExpPoint = 0
+        self.MoneyLen = 0
+        self.MoneyList = list()
+        self.ItemLen = 0
+        self.ItemList = list()
+        self.DataLen = 0
+        self.DataEx = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.EventName)
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.MoneyLen):
+            length += self.MoneyList[i].GetLength()
+        length += 1
+        for i in range(self.ItemLen):
+            length += self.ItemList[i].GetLength()
+        length += 2
+        length += len(self.DataEx)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.EventLen)
+        data = CommFunc.WriteString(data, self.EventLen, self.EventName)
+        data = CommFunc.WriteDWORD(data, self.Exp)
+        data = CommFunc.WriteDWORD(data, self.ExpPoint)
+        data = CommFunc.WriteBYTE(data, self.MoneyLen)
+        for i in range(self.MoneyLen):
+            data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ItemLen)
+        for i in range(self.ItemLen):
+            data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.DataLen)
+        data = CommFunc.WriteString(data, self.DataLen, self.DataEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EventLen:%d,
+                                EventName:%s,
+                                Exp:%d,
+                                ExpPoint:%d,
+                                MoneyLen:%d,
+                                MoneyList:%s,
+                                ItemLen:%d,
+                                ItemList:%s,
+                                DataLen:%d,
+                                DataEx:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.EventLen,
+                                self.EventName,
+                                self.Exp,
+                                self.ExpPoint,
+                                self.MoneyLen,
+                                "...",
+                                self.ItemLen,
+                                "...",
+                                self.DataLen,
+                                self.DataEx
+                                )
+        return DumpString
+
+
+m_NAtagMCGiveAwardInfo=tagMCGiveAwardInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGiveAwardInfo.Head.Cmd,m_NAtagMCGiveAwardInfo.Head.SubCmd))] = m_NAtagMCGiveAwardInfo
+
+
+#------------------------------------------------------
 # A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
 
 class  tagMCGuradPickupItemSucc(Structure):
@@ -33040,12 +34388,72 @@
         return DumpString
 
 
+class  tagMCActBossTrialAwardEx(Structure):
+    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
+    Count = 0    #(BYTE Count)// 额外奖励物品数
+    AwardItemList = list()    #(vector<tagMCActBossTrialItem> AwardItemList)// 额外奖励物品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCActBossTrialItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.NeedScore = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NeedScore:%d,
+                                Count:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.NeedScore,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
 class  tagMCActBossTrialBillard(Structure):
     Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
     Count = 0    #(BYTE Count)// 奖励物品数
     AwardItemList = list()    #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励
     MemCount = 0    #(BYTE MemCount)// 成员奖励物品数
     MemAwardItemList = list()    #(vector<tagMCActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    CountEx = 0    #(BYTE CountEx)// 额外奖励数
+    AwardItemExList = list()    #(vector<tagMCActBossTrialAwardEx> AwardItemExList)// 额外奖励列表
     data = None
 
     def __init__(self):
@@ -33065,6 +34473,12 @@
             temMemAwardItemList = tagMCActBossTrialItem()
             _pos = temMemAwardItemList.ReadData(_lpData, _pos)
             self.MemAwardItemList.append(temMemAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CountEx):
+            temAwardItemExList = tagMCActBossTrialAwardEx()
+            _pos = temAwardItemExList.ReadData(_lpData, _pos)
+            self.AwardItemExList.append(temAwardItemExList)
         return _pos
 
     def Clear(self):
@@ -33073,6 +34487,9 @@
         self.AwardItemList = list()
         self.MemCount = 0
         self.MemAwardItemList = list()
+        self.NeedScore = 0
+        self.CountEx = 0
+        self.AwardItemExList = list()
         return
 
     def GetLength(self):
@@ -33084,6 +34501,10 @@
         length += 1
         for i in range(self.MemCount):
             length += self.MemAwardItemList[i].GetLength()
+        length += 4
+        length += 1
+        for i in range(self.CountEx):
+            length += self.AwardItemExList[i].GetLength()
 
         return length
 
@@ -33096,6 +34517,10 @@
         data = CommFunc.WriteBYTE(data, self.MemCount)
         for i in range(self.MemCount):
             data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.CountEx)
+        for i in range(self.CountEx):
+            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
         return data
 
     def OutputString(self):
@@ -33104,13 +34529,19 @@
                                 Count:%d,
                                 AwardItemList:%s,
                                 MemCount:%d,
-                                MemAwardItemList:%s
+                                MemAwardItemList:%s,
+                                NeedScore:%d,
+                                CountEx:%d,
+                                AwardItemExList:%s
                                 '''\
                                 %(
                                 self.Rank,
                                 self.Count,
                                 "...",
                                 self.MemCount,
+                                "...",
+                                self.NeedScore,
+                                self.CountEx,
                                 "..."
                                 )
         return DumpString
@@ -35655,10 +37086,10 @@
         return DumpString
 
 
-class  tagMCActGubaoBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActGubaoItem> AwardItemList)// 奖励物品列表
+class  tagMCActGubaoAwardEx(Structure):
+    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
+    Count = 0    #(BYTE Count)// 额外奖励物品数
+    AwardItemList = list()    #(vector<tagMCActGubaoItem> AwardItemList)// 额外奖励物品列表
     data = None
 
     def __init__(self):
@@ -35667,7 +37098,7 @@
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
             temAwardItemList = tagMCActGubaoItem()
@@ -35676,7 +37107,7 @@
         return _pos
 
     def Clear(self):
-        self.Rank = 0
+        self.NeedScore = 0
         self.Count = 0
         self.AwardItemList = list()
         return
@@ -35692,7 +37123,7 @@
 
     def GetBuffer(self):
         data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
         data = CommFunc.WriteBYTE(data, self.Count)
         for i in range(self.Count):
             data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -35700,13 +37131,96 @@
 
     def OutputString(self):
         DumpString = '''
-                                Rank:%d,
+                                NeedScore:%d,
                                 Count:%d,
                                 AwardItemList:%s
                                 '''\
                                 %(
+                                self.NeedScore,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActGubaoBillard(Structure):
+    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+    Count = 0    #(BYTE Count)// 奖励物品数
+    AwardItemList = list()    #(vector<tagMCActGubaoItem> AwardItemList)// 奖励物品列表
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    CountEx = 0    #(BYTE CountEx)// 额外奖励数
+    AwardItemExList = list()    #(vector<tagMCActGubaoAwardEx> AwardItemExList)// 额外奖励列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCActGubaoItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CountEx):
+            temAwardItemExList = tagMCActGubaoAwardEx()
+            _pos = temAwardItemExList.ReadData(_lpData, _pos)
+            self.AwardItemExList.append(temAwardItemExList)
+        return _pos
+
+    def Clear(self):
+        self.Rank = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        self.NeedScore = 0
+        self.CountEx = 0
+        self.AwardItemExList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+        length += 4
+        length += 1
+        for i in range(self.CountEx):
+            length += self.AwardItemExList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.CountEx)
+        for i in range(self.CountEx):
+            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Rank:%d,
+                                Count:%d,
+                                AwardItemList:%s,
+                                NeedScore:%d,
+                                CountEx:%d,
+                                AwardItemExList:%s
+                                '''\
+                                %(
                                 self.Rank,
                                 self.Count,
+                                "...",
+                                self.NeedScore,
+                                self.CountEx,
                                 "..."
                                 )
         return DumpString
@@ -35720,6 +37234,7 @@
     JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
     JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
     LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ShopType = 0    #(WORD ShopType)// 开放商店类型,可能为0不开放
     PersonalBillCount = 0    #(BYTE PersonalBillCount)
     PersonalBillboardInfoList = list()    #(vector<tagMCActGubaoBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
     data = None
@@ -35739,6 +37254,7 @@
         self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
         self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.PersonalBillCount):
             temPersonalBillboardInfoList = tagMCActGubaoBillard()
@@ -35757,6 +37273,7 @@
         self.JoinStartTime = ""
         self.JoinEndTime = ""
         self.LimitLV = 0
+        self.ShopType = 0
         self.PersonalBillCount = 0
         self.PersonalBillboardInfoList = list()
         return
@@ -35769,6 +37286,7 @@
         length += 10
         length += 5
         length += 5
+        length += 2
         length += 2
         length += 1
         for i in range(self.PersonalBillCount):
@@ -35785,6 +37303,7 @@
         data = CommFunc.WriteString(data, 5, self.JoinStartTime)
         data = CommFunc.WriteString(data, 5, self.JoinEndTime)
         data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteWORD(data, self.ShopType)
         data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
         for i in range(self.PersonalBillCount):
             data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
@@ -35799,6 +37318,7 @@
                                 JoinStartTime:%s,
                                 JoinEndTime:%s,
                                 LimitLV:%d,
+                                ShopType:%d,
                                 PersonalBillCount:%d,
                                 PersonalBillboardInfoList:%s
                                 '''\
@@ -35810,6 +37330,7 @@
                                 self.JoinStartTime,
                                 self.JoinEndTime,
                                 self.LimitLV,
+                                self.ShopType,
                                 self.PersonalBillCount,
                                 "..."
                                 )
@@ -36852,6 +38373,8 @@
     DayNum = 0    #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
     Count = 0    #(BYTE Count)// 奖励物品数
     AwardItemList = list()    #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
+    CountEx = 0    #(BYTE CountEx)// 额外奖励物品数
+    AwardItemListEx = list()    #(vector<tagMCActLoginNewItem> AwardItemListEx)//  额外奖励物品列表
     data = None
 
     def __init__(self):
@@ -36866,12 +38389,19 @@
             temAwardItemList = tagMCActLoginNewItem()
             _pos = temAwardItemList.ReadData(_lpData, _pos)
             self.AwardItemList.append(temAwardItemList)
+        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CountEx):
+            temAwardItemListEx = tagMCActLoginNewItem()
+            _pos = temAwardItemListEx.ReadData(_lpData, _pos)
+            self.AwardItemListEx.append(temAwardItemListEx)
         return _pos
 
     def Clear(self):
         self.DayNum = 0
         self.Count = 0
         self.AwardItemList = list()
+        self.CountEx = 0
+        self.AwardItemListEx = list()
         return
 
     def GetLength(self):
@@ -36880,6 +38410,9 @@
         length += 1
         for i in range(self.Count):
             length += self.AwardItemList[i].GetLength()
+        length += 1
+        for i in range(self.CountEx):
+            length += self.AwardItemListEx[i].GetLength()
 
         return length
 
@@ -36889,17 +38422,24 @@
         data = CommFunc.WriteBYTE(data, self.Count)
         for i in range(self.Count):
             data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.CountEx)
+        for i in range(self.CountEx):
+            data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 DayNum:%d,
                                 Count:%d,
-                                AwardItemList:%s
+                                AwardItemList:%s,
+                                CountEx:%d,
+                                AwardItemListEx:%s
                                 '''\
                                 %(
                                 self.DayNum,
                                 self.Count,
+                                "...",
+                                self.CountEx,
                                 "..."
                                 )
         return DumpString
@@ -36913,6 +38453,7 @@
     LimitLV = 0    #(WORD LimitLV)// 限制等级
     RepSignMoneyType = 0    #(BYTE RepSignMoneyType)// 补签消耗货币类型
     RepSignMoneyValue = 0    #(DWORD RepSignMoneyValue)// 补签消耗货币值
+    AwardExCTGID = 0    #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
     DayCount = 0    #(BYTE DayCount)
     AwardDayList = list()    #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
     data = None
@@ -36932,6 +38473,7 @@
         self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.DayCount):
             temAwardDayList = tagMCActLoginNewDay()
@@ -36950,6 +38492,7 @@
         self.LimitLV = 0
         self.RepSignMoneyType = 0
         self.RepSignMoneyValue = 0
+        self.AwardExCTGID = 0
         self.DayCount = 0
         self.AwardDayList = list()
         return
@@ -36963,6 +38506,7 @@
         length += 2
         length += 1
         length += 4
+        length += 2
         length += 1
         for i in range(self.DayCount):
             length += self.AwardDayList[i].GetLength()
@@ -36978,6 +38522,7 @@
         data = CommFunc.WriteWORD(data, self.LimitLV)
         data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
         data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
+        data = CommFunc.WriteWORD(data, self.AwardExCTGID)
         data = CommFunc.WriteBYTE(data, self.DayCount)
         for i in range(self.DayCount):
             data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
@@ -36992,6 +38537,7 @@
                                 LimitLV:%d,
                                 RepSignMoneyType:%d,
                                 RepSignMoneyValue:%d,
+                                AwardExCTGID:%d,
                                 DayCount:%d,
                                 AwardDayList:%s
                                 '''\
@@ -37003,6 +38549,7 @@
                                 self.LimitLV,
                                 self.RepSignMoneyType,
                                 self.RepSignMoneyValue,
+                                self.AwardExCTGID,
                                 self.DayCount,
                                 "..."
                                 )
@@ -37022,7 +38569,8 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("ActNum", c_ubyte),    # 活动编号
-                  ("LoginAward", c_int),    # 是否已领取,按天索引0代表第1天记录当天是否已领取
+                  ("LoginAward", c_int),    # 普通奖励领取记录,按天对应二进制位记录是否已领取
+                  ("LoginAwardEx", c_int),    # 额外奖励领取记录,按天对应二进制位记录是否已领取
                   ]
 
     def __init__(self):
@@ -37041,6 +38589,7 @@
         self.SubCmd = 0x70
         self.ActNum = 0
         self.LoginAward = 0
+        self.LoginAwardEx = 0
         return
 
     def GetLength(self):
@@ -37054,19 +38603,402 @@
                                 Cmd:%s,
                                 SubCmd:%s,
                                 ActNum:%d,
-                                LoginAward:%d
+                                LoginAward:%d,
+                                LoginAwardEx:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.ActNum,
-                                self.LoginAward
+                                self.LoginAward,
+                                self.LoginAwardEx
                                 )
         return DumpString
 
 
 m_NAtagMCActLoginPlayerInfoNew=tagMCActLoginPlayerInfoNew()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginPlayerInfoNew.Cmd,m_NAtagMCActLoginPlayerInfoNew.SubCmd))] = m_NAtagMCActLoginPlayerInfoNew
+
+
+#------------------------------------------------------
+# AA 88 轮回殿活动信息 #tagMCActLunhuidianInfo
+
+class  tagMCActLunhuidianItem(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(tagMCActLunhuidianItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 88 轮回殿活动信息 //tagMCActLunhuidianInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCActLunhuidianAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励记录索引 0~30
+    NeedValue = 0    #(DWORD NeedValue)// 奖励所需值
+    Count = 0    #(BYTE Count)// 奖励物品数
+    AwardItemList = list()    #(vector<tagMCActLunhuidianItem> AwardItemList)// 奖励物品列表
+    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.NeedValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCActLunhuidianItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedValue = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedValue)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedValue:%d,
+                                Count:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedValue,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActLunhuidianRound(Structure):
+    RoundType = 0    #(BYTE RoundType)// 轮回类型
+    AwardType = 0    #(BYTE AwardType)// 奖励类型 1-消耗货币;2-寻宝次数
+    AwardTypeValue = 0    #(DWORD AwardTypeValue)// 奖励类型对应值,消耗货币时为对应的货币类型,寻宝时为对应的寻宝类型
+    RoundMax = 0    #(BYTE RoundMax)// 最大可循环轮次
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardList = list()    #(vector<tagMCActLunhuidianAward> AwardList)// 每轮奖励列表
+    CTGIDCount = 0    #(BYTE CTGIDCount)
+    CTGIDList = list()    #(vector<WORD> CTGIDList)// CTGID列表
+    ShopType = 0    #(WORD ShopType)// 开放商店类型,可能为0不开放
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.RoundType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardTypeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardList = tagMCActLunhuidianAward()
+            _pos = temAwardList.ReadData(_lpData, _pos)
+            self.AwardList.append(temAwardList)
+        self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CTGIDCount):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.CTGIDList.append(value)
+        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.RoundType = 0
+        self.AwardType = 0
+        self.AwardTypeValue = 0
+        self.RoundMax = 0
+        self.AwardCount = 0
+        self.AwardList = list()
+        self.CTGIDCount = 0
+        self.CTGIDList = list()
+        self.ShopType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 4
+        length += 1
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardList[i].GetLength()
+        length += 1
+        length += 2 * self.CTGIDCount
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.RoundType)
+        data = CommFunc.WriteBYTE(data, self.AwardType)
+        data = CommFunc.WriteDWORD(data, self.AwardTypeValue)
+        data = CommFunc.WriteBYTE(data, self.RoundMax)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.CTGIDCount)
+        for i in range(self.CTGIDCount):
+            data = CommFunc.WriteWORD(data, self.CTGIDList[i])
+        data = CommFunc.WriteWORD(data, self.ShopType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                RoundType:%d,
+                                AwardType:%d,
+                                AwardTypeValue:%d,
+                                RoundMax:%d,
+                                AwardCount:%d,
+                                AwardList:%s,
+                                CTGIDCount:%d,
+                                CTGIDList:%s,
+                                ShopType:%d
+                                '''\
+                                %(
+                                self.RoundType,
+                                self.AwardType,
+                                self.AwardTypeValue,
+                                self.RoundMax,
+                                self.AwardCount,
+                                "...",
+                                self.CTGIDCount,
+                                "...",
+                                self.ShopType
+                                )
+        return DumpString
+
+
+class  tagMCActLunhuidianInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    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)// 限制等级
+    RoundCount = 0    #(BYTE RoundCount)
+    RoundList = list()    #(vector<tagMCActLunhuidianRound> RoundList)// 轮回列表,支持多个不同类型轮回同时开启
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x88
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RoundCount):
+            temRoundList = tagMCActLunhuidianRound()
+            _pos = temRoundList.ReadData(_lpData, _pos)
+            self.RoundList.append(temRoundList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x88
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.ResetType = 0
+        self.LimitLV = 0
+        self.RoundCount = 0
+        self.RoundList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.RoundCount):
+            length += self.RoundList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.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.RoundCount)
+        for i in range(self.RoundCount):
+            data = CommFunc.WriteString(data, self.RoundList[i].GetLength(), self.RoundList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                ResetType:%d,
+                                LimitLV:%d,
+                                RoundCount:%d,
+                                RoundList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.ResetType,
+                                self.LimitLV,
+                                self.RoundCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActLunhuidianInfo=tagMCActLunhuidianInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianInfo.Head.Cmd,m_NAtagMCActLunhuidianInfo.Head.SubCmd))] = m_NAtagMCActLunhuidianInfo
+
+
+#------------------------------------------------------
+# AA 89 轮回殿活动玩家信息 #tagMCActLunhuidianPlayerInfo
+
+class  tagMCActLunhuidianPlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ActNum", c_ubyte),    # 活动编号
+                  ("RoundType", c_ubyte),    # 轮回类型
+                  ("CurRound", c_ubyte),    # 当前轮次
+                  ("CurValue", c_int),    # 累计值
+                  ("AwardRecord", c_int),    # 当前轮次奖励领奖记录,按奖励索引二进制位存储是否已领取,所有奖励已领取后自动进入下一轮,且重置该奖励状态
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x89
+        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 = 0x89
+        self.ActNum = 0
+        self.RoundType = 0
+        self.CurRound = 0
+        self.CurValue = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActLunhuidianPlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 89 轮回殿活动玩家信息 //tagMCActLunhuidianPlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ActNum:%d,
+                                RoundType:%d,
+                                CurRound:%d,
+                                CurValue:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ActNum,
+                                self.RoundType,
+                                self.CurRound,
+                                self.CurValue,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCActLunhuidianPlayerInfo=tagMCActLunhuidianPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianPlayerInfo.Cmd,m_NAtagMCActLunhuidianPlayerInfo.SubCmd))] = m_NAtagMCActLunhuidianPlayerInfo
 
 
 #------------------------------------------------------
@@ -39968,10 +41900,10 @@
         return DumpString
 
 
-class  tagMCActXianXiaMJBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCActXianXiaMJItem> AwardItemList)// 奖励物品列表
+class  tagMCActXianXiaMJAwardEx(Structure):
+    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
+    Count = 0    #(BYTE Count)// 额外奖励物品数
+    AwardItemList = list()    #(vector<tagMCActXianXiaMJItem> AwardItemList)// 额外奖励物品列表
     data = None
 
     def __init__(self):
@@ -39980,7 +41912,7 @@
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
             temAwardItemList = tagMCActXianXiaMJItem()
@@ -39989,7 +41921,7 @@
         return _pos
 
     def Clear(self):
-        self.Rank = 0
+        self.NeedScore = 0
         self.Count = 0
         self.AwardItemList = list()
         return
@@ -40005,7 +41937,7 @@
 
     def GetBuffer(self):
         data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
         data = CommFunc.WriteBYTE(data, self.Count)
         for i in range(self.Count):
             data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -40013,13 +41945,96 @@
 
     def OutputString(self):
         DumpString = '''
-                                Rank:%d,
+                                NeedScore:%d,
                                 Count:%d,
                                 AwardItemList:%s
                                 '''\
                                 %(
+                                self.NeedScore,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCActXianXiaMJBillard(Structure):
+    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+    Count = 0    #(BYTE Count)// 奖励物品数
+    AwardItemList = list()    #(vector<tagMCActXianXiaMJItem> AwardItemList)// 奖励物品列表
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    CountEx = 0    #(BYTE CountEx)// 额外奖励数
+    AwardItemExList = list()    #(vector<tagMCActXianXiaMJAwardEx> AwardItemExList)// 额外奖励列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCActXianXiaMJItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CountEx):
+            temAwardItemExList = tagMCActXianXiaMJAwardEx()
+            _pos = temAwardItemExList.ReadData(_lpData, _pos)
+            self.AwardItemExList.append(temAwardItemExList)
+        return _pos
+
+    def Clear(self):
+        self.Rank = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        self.NeedScore = 0
+        self.CountEx = 0
+        self.AwardItemExList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+        length += 4
+        length += 1
+        for i in range(self.CountEx):
+            length += self.AwardItemExList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.CountEx)
+        for i in range(self.CountEx):
+            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Rank:%d,
+                                Count:%d,
+                                AwardItemList:%s,
+                                NeedScore:%d,
+                                CountEx:%d,
+                                AwardItemExList:%s
+                                '''\
+                                %(
                                 self.Rank,
                                 self.Count,
+                                "...",
+                                self.NeedScore,
+                                self.CountEx,
                                 "..."
                                 )
         return DumpString
@@ -40348,6 +42363,98 @@
 
 m_NAtagMCActXianXiaMJLayerInfo=tagMCActXianXiaMJLayerInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJLayerInfo.Head.Cmd,m_NAtagMCActXianXiaMJLayerInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJLayerInfo
+
+
+#------------------------------------------------------
+# AA 87 运势活动信息 #tagMCActYunshiInfo
+
+class  tagMCActYunshiInfo(Structure):
+    Head = tagHead()
+    ActNum = 0    #(BYTE ActNum)// 活动编号
+    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)// 限制等级
+    TreasureType = 0    #(BYTE TreasureType)// 活动寻宝类型
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x87
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x87
+        self.ActNum = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.ResetType = 0
+        self.LimitLV = 0
+        self.TreasureType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNum)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.TreasureType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNum:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                ResetType:%d,
+                                LimitLV:%d,
+                                TreasureType:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNum,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.ResetType,
+                                self.LimitLV,
+                                self.TreasureType
+                                )
+        return DumpString
+
+
+m_NAtagMCActYunshiInfo=tagMCActYunshiInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActYunshiInfo.Head.Cmd,m_NAtagMCActYunshiInfo.Head.SubCmd))] = m_NAtagMCActYunshiInfo
 
 
 #------------------------------------------------------
@@ -41316,12 +43423,72 @@
         return DumpString
 
 
+class  tagMCCrossActBossTrialAwardEx(Structure):
+    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
+    Count = 0    #(BYTE Count)// 额外奖励物品数
+    AwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 额外奖励物品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCrossActBossTrialItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.NeedScore = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NeedScore:%d,
+                                Count:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.NeedScore,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
 class  tagMCCrossActBossTrialBillard(Structure):
     Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
     Count = 0    #(BYTE Count)// 奖励物品数
     AwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励
     MemCount = 0    #(BYTE MemCount)// 成员奖励物品数
     MemAwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    CountEx = 0    #(BYTE CountEx)// 额外奖励数
+    AwardItemExList = list()    #(vector<tagMCCrossActBossTrialAwardEx> AwardItemExList)// 额外奖励列表
     data = None
 
     def __init__(self):
@@ -41341,6 +43508,12 @@
             temMemAwardItemList = tagMCCrossActBossTrialItem()
             _pos = temMemAwardItemList.ReadData(_lpData, _pos)
             self.MemAwardItemList.append(temMemAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CountEx):
+            temAwardItemExList = tagMCCrossActBossTrialAwardEx()
+            _pos = temAwardItemExList.ReadData(_lpData, _pos)
+            self.AwardItemExList.append(temAwardItemExList)
         return _pos
 
     def Clear(self):
@@ -41349,6 +43522,9 @@
         self.AwardItemList = list()
         self.MemCount = 0
         self.MemAwardItemList = list()
+        self.NeedScore = 0
+        self.CountEx = 0
+        self.AwardItemExList = list()
         return
 
     def GetLength(self):
@@ -41360,6 +43536,10 @@
         length += 1
         for i in range(self.MemCount):
             length += self.MemAwardItemList[i].GetLength()
+        length += 4
+        length += 1
+        for i in range(self.CountEx):
+            length += self.AwardItemExList[i].GetLength()
 
         return length
 
@@ -41372,6 +43552,10 @@
         data = CommFunc.WriteBYTE(data, self.MemCount)
         for i in range(self.MemCount):
             data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.CountEx)
+        for i in range(self.CountEx):
+            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
         return data
 
     def OutputString(self):
@@ -41380,13 +43564,19 @@
                                 Count:%d,
                                 AwardItemList:%s,
                                 MemCount:%d,
-                                MemAwardItemList:%s
+                                MemAwardItemList:%s,
+                                NeedScore:%d,
+                                CountEx:%d,
+                                AwardItemExList:%s
                                 '''\
                                 %(
                                 self.Rank,
                                 self.Count,
                                 "...",
                                 self.MemCount,
+                                "...",
+                                self.NeedScore,
+                                self.CountEx,
                                 "..."
                                 )
         return DumpString
@@ -41403,8 +43593,6 @@
     JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
     IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
     ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
-    RankLimitPersonal = 0    #(WORD RankLimitPersonal)// 个人榜上榜个数保底限制;
-    RankLimitFamily = 0    #(WORD RankLimitFamily)// 仙盟榜上榜个数保底限制;
     PersonalBillCount = 0    #(BYTE PersonalBillCount)
     PersonalBillboardInfoList = list()    #(vector<tagMCCrossActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
     FamilyBillCount = 0    #(BYTE FamilyBillCount)
@@ -41429,8 +43617,6 @@
         self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
         self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RankLimitFamily,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.PersonalBillCount):
             temPersonalBillboardInfoList = tagMCCrossActBossTrialBillard()
@@ -41457,8 +43643,6 @@
         self.JoinEndTime = ""
         self.IsDayReset = 0
         self.ResetType = 0
-        self.RankLimitPersonal = 0
-        self.RankLimitFamily = 0
         self.PersonalBillCount = 0
         self.PersonalBillboardInfoList = list()
         self.FamilyBillCount = 0
@@ -41477,8 +43661,6 @@
         length += 5
         length += 1
         length += 1
-        length += 2
-        length += 2
         length += 1
         for i in range(self.PersonalBillCount):
             length += self.PersonalBillboardInfoList[i].GetLength()
@@ -41500,8 +43682,6 @@
         data = CommFunc.WriteString(data, 5, self.JoinEndTime)
         data = CommFunc.WriteBYTE(data, self.IsDayReset)
         data = CommFunc.WriteBYTE(data, self.ResetType)
-        data = CommFunc.WriteWORD(data, self.RankLimitPersonal)
-        data = CommFunc.WriteWORD(data, self.RankLimitFamily)
         data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
         for i in range(self.PersonalBillCount):
             data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
@@ -41522,8 +43702,6 @@
                                 JoinEndTime:%s,
                                 IsDayReset:%d,
                                 ResetType:%d,
-                                RankLimitPersonal:%d,
-                                RankLimitFamily:%d,
                                 PersonalBillCount:%d,
                                 PersonalBillboardInfoList:%s,
                                 FamilyBillCount:%d,
@@ -41540,8 +43718,6 @@
                                 self.JoinEndTime,
                                 self.IsDayReset,
                                 self.ResetType,
-                                self.RankLimitPersonal,
-                                self.RankLimitFamily,
                                 self.PersonalBillCount,
                                 "...",
                                 self.FamilyBillCount,
@@ -41600,10 +43776,10 @@
         return DumpString
 
 
-class  tagMCCrossActGubaoBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActGubaoItem> AwardItemList)// 奖励物品列表
+class  tagMCCrossActGubaoAwardEx(Structure):
+    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
+    Count = 0    #(BYTE Count)// 额外奖励物品数
+    AwardItemList = list()    #(vector<tagMCCrossActGubaoItem> AwardItemList)// 额外奖励物品列表
     data = None
 
     def __init__(self):
@@ -41612,7 +43788,7 @@
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
             temAwardItemList = tagMCCrossActGubaoItem()
@@ -41621,7 +43797,7 @@
         return _pos
 
     def Clear(self):
-        self.Rank = 0
+        self.NeedScore = 0
         self.Count = 0
         self.AwardItemList = list()
         return
@@ -41637,7 +43813,7 @@
 
     def GetBuffer(self):
         data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
         data = CommFunc.WriteBYTE(data, self.Count)
         for i in range(self.Count):
             data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -41645,13 +43821,96 @@
 
     def OutputString(self):
         DumpString = '''
-                                Rank:%d,
+                                NeedScore:%d,
                                 Count:%d,
                                 AwardItemList:%s
                                 '''\
                                 %(
+                                self.NeedScore,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCCrossActGubaoBillard(Structure):
+    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+    Count = 0    #(BYTE Count)// 奖励物品数
+    AwardItemList = list()    #(vector<tagMCCrossActGubaoItem> AwardItemList)// 奖励物品列表
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    CountEx = 0    #(BYTE CountEx)// 额外奖励数
+    AwardItemExList = list()    #(vector<tagMCCrossActGubaoAwardEx> AwardItemExList)// 额外奖励列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCrossActGubaoItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CountEx):
+            temAwardItemExList = tagMCCrossActGubaoAwardEx()
+            _pos = temAwardItemExList.ReadData(_lpData, _pos)
+            self.AwardItemExList.append(temAwardItemExList)
+        return _pos
+
+    def Clear(self):
+        self.Rank = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        self.NeedScore = 0
+        self.CountEx = 0
+        self.AwardItemExList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+        length += 4
+        length += 1
+        for i in range(self.CountEx):
+            length += self.AwardItemExList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.CountEx)
+        for i in range(self.CountEx):
+            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Rank:%d,
+                                Count:%d,
+                                AwardItemList:%s,
+                                NeedScore:%d,
+                                CountEx:%d,
+                                AwardItemExList:%s
+                                '''\
+                                %(
                                 self.Rank,
                                 self.Count,
+                                "...",
+                                self.NeedScore,
+                                self.CountEx,
                                 "..."
                                 )
         return DumpString
@@ -41666,7 +43925,6 @@
     EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
     JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
     JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
-    RankLimitPersonal = 0    #(WORD RankLimitPersonal)// 个人榜上榜积分保底限制;
     PersonalBillCount = 0    #(BYTE PersonalBillCount)
     PersonalBillboardInfoList = list()    #(vector<tagMCCrossActGubaoBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
     data = None
@@ -41687,7 +43945,6 @@
         self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
         self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
         self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.PersonalBillCount):
             temPersonalBillboardInfoList = tagMCCrossActGubaoBillard()
@@ -41707,7 +43964,6 @@
         self.EndtDate = ""
         self.JoinStartTime = ""
         self.JoinEndTime = ""
-        self.RankLimitPersonal = 0
         self.PersonalBillCount = 0
         self.PersonalBillboardInfoList = list()
         return
@@ -41722,7 +43978,6 @@
         length += 10
         length += 5
         length += 5
-        length += 2
         length += 1
         for i in range(self.PersonalBillCount):
             length += self.PersonalBillboardInfoList[i].GetLength()
@@ -41739,7 +43994,6 @@
         data = CommFunc.WriteString(data, 10, self.EndtDate)
         data = CommFunc.WriteString(data, 5, self.JoinStartTime)
         data = CommFunc.WriteString(data, 5, self.JoinEndTime)
-        data = CommFunc.WriteWORD(data, self.RankLimitPersonal)
         data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
         for i in range(self.PersonalBillCount):
             data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
@@ -41755,7 +44009,6 @@
                                 EndtDate:%s,
                                 JoinStartTime:%s,
                                 JoinEndTime:%s,
-                                RankLimitPersonal:%d,
                                 PersonalBillCount:%d,
                                 PersonalBillboardInfoList:%s
                                 '''\
@@ -41768,7 +44021,6 @@
                                 self.EndtDate,
                                 self.JoinStartTime,
                                 self.JoinEndTime,
-                                self.RankLimitPersonal,
                                 self.PersonalBillCount,
                                 "..."
                                 )
@@ -42081,6 +44333,434 @@
 
 
 #------------------------------------------------------
+# AA 90 炼器跨服活动信息 #tagMCCrossActLianqiInfo
+
+class  tagMCCrossActLianqiItem(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(tagMCCrossActLianqiItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 90 炼器跨服活动信息 //tagMCCrossActLianqiInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagMCCrossActLianqiBillard(Structure):
+    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+    Count = 0    #(BYTE Count)// 奖励物品数
+    AwardItemList = list()    #(vector<tagMCCrossActLianqiItem> AwardItemList)// 奖励物品列表
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCrossActLianqiItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Rank = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        self.NeedScore = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Rank:%d,
+                                Count:%d,
+                                AwardItemList:%s,
+                                NeedScore:%d
+                                '''\
+                                %(
+                                self.Rank,
+                                self.Count,
+                                "...",
+                                self.NeedScore
+                                )
+        return DumpString
+
+
+class  tagMCCrossActLianqiInfo(Structure):
+    Head = tagHead()
+    ServerInfoLen = 0    #(BYTE ServerInfoLen)
+    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
+    GroupValue1 = 0    #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
+    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    PersonalBillCount = 0    #(BYTE PersonalBillCount)
+    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActLianqiBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x90
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
+        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PersonalBillCount):
+            temPersonalBillboardInfoList = tagMCCrossActLianqiBillard()
+            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
+            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x90
+        self.ServerInfoLen = 0
+        self.ServerIDRangeInfo = ""
+        self.GroupValue1 = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.JoinStartTime = ""
+        self.JoinEndTime = ""
+        self.LimitLV = 0
+        self.PersonalBillCount = 0
+        self.PersonalBillboardInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ServerIDRangeInfo)
+        length += 1
+        length += 10
+        length += 10
+        length += 5
+        length += 5
+        length += 2
+        length += 1
+        for i in range(self.PersonalBillCount):
+            length += self.PersonalBillboardInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
+        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
+        data = CommFunc.WriteBYTE(data, self.GroupValue1)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
+        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
+        for i in range(self.PersonalBillCount):
+            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ServerInfoLen:%d,
+                                ServerIDRangeInfo:%s,
+                                GroupValue1:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                JoinStartTime:%s,
+                                JoinEndTime:%s,
+                                LimitLV:%d,
+                                PersonalBillCount:%d,
+                                PersonalBillboardInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ServerInfoLen,
+                                self.ServerIDRangeInfo,
+                                self.GroupValue1,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.JoinStartTime,
+                                self.JoinEndTime,
+                                self.LimitLV,
+                                self.PersonalBillCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossActLianqiInfo=tagMCCrossActLianqiInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActLianqiInfo.Head.Cmd,m_NAtagMCCrossActLianqiInfo.Head.SubCmd))] = m_NAtagMCCrossActLianqiInfo
+
+
+#------------------------------------------------------
+# AA 91 炼器活动玩家信息 #tagMCActLianqiPlayerInfo
+
+class  tagMCActLianqiTileMove(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Row", c_ubyte),    # 行,0为第1行
+                  ("Col", c_ubyte),    # 列,0为第1列
+                  ("ToRow", c_ubyte),    # 移动到目标行
+                  ("ToCol", 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.Row = 0
+        self.Col = 0
+        self.ToRow = 0
+        self.ToCol = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCActLianqiTileMove)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 91 炼器活动玩家信息 //tagMCActLianqiPlayerInfo:
+                                Row:%d,
+                                Col:%d,
+                                ToRow:%d,
+                                ToCol:%d
+                                '''\
+                                %(
+                                self.Row,
+                                self.Col,
+                                self.ToRow,
+                                self.ToCol
+                                )
+        return DumpString
+
+
+class  tagMCActLianqiPlayerInfo(Structure):
+    Head = tagHead()
+    Score = 0    #(DWORD Score)// 当前活动积分
+    ScoreHighest = 0    #(DWORD ScoreHighest)// 当前活动最高积分,即上榜积分
+    Energy = 0    #(WORD Energy)// 当前体力
+    EnergyTime = 0    #(DWORD EnergyTime)// 上次恢复体力时间戳,为0时不用处理倒计时
+    LVAwardMax = 0    #(DWORD LVAwardMax)// 已激活的最大合成奖励等级
+    LVAwardState = 0    #(DWORD LVAwardState)// 最大合成等级奖励领取记录,按等级二进制位存储是否已领取
+    UseItemLen = 0    #(BYTE UseItemLen)
+    UseItemCntList = list()    #(vector<WORD> UseItemCntList)// 本局已使用辅助道具次数 [辅助道具1使用次数, ...]
+    GridDataLen = 0    #(BYTE GridDataLen)// 格子数据长度
+    GridData = ""    #(String GridData)// 格子二维行列数据,一定会同步,直接替换,行从上往下排 [[第1行格子1,格子2, ...], ...]
+    OPType = 0    #(BYTE OPType)// 0-无(如初始化,GM等后端直接设置);1-移动;2-使用道具;3-重新开始;如果是因为操作引起的格子数据变化,则在相关操作表现完毕后再展示最新行列数据,否则直接变更
+    MoveCount = 0    #(BYTE MoveCount)
+    MoveList = list()    #(vector<tagMCActLianqiTileMove> MoveList)// 图块移动列表,可能没有数据,有的话先表现移动
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x91
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ScoreHighest,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Energy,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.EnergyTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LVAwardMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LVAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.UseItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.UseItemLen):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.UseItemCntList.append(value)
+        self.GridDataLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GridData,_pos = CommFunc.ReadString(_lpData, _pos,self.GridDataLen)
+        self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoveCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MoveCount):
+            temMoveList = tagMCActLianqiTileMove()
+            _pos = temMoveList.ReadData(_lpData, _pos)
+            self.MoveList.append(temMoveList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x91
+        self.Score = 0
+        self.ScoreHighest = 0
+        self.Energy = 0
+        self.EnergyTime = 0
+        self.LVAwardMax = 0
+        self.LVAwardState = 0
+        self.UseItemLen = 0
+        self.UseItemCntList = list()
+        self.GridDataLen = 0
+        self.GridData = ""
+        self.OPType = 0
+        self.MoveCount = 0
+        self.MoveList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += 2 * self.UseItemLen
+        length += 1
+        length += len(self.GridData)
+        length += 1
+        length += 1
+        for i in range(self.MoveCount):
+            length += self.MoveList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Score)
+        data = CommFunc.WriteDWORD(data, self.ScoreHighest)
+        data = CommFunc.WriteWORD(data, self.Energy)
+        data = CommFunc.WriteDWORD(data, self.EnergyTime)
+        data = CommFunc.WriteDWORD(data, self.LVAwardMax)
+        data = CommFunc.WriteDWORD(data, self.LVAwardState)
+        data = CommFunc.WriteBYTE(data, self.UseItemLen)
+        for i in range(self.UseItemLen):
+            data = CommFunc.WriteWORD(data, self.UseItemCntList[i])
+        data = CommFunc.WriteBYTE(data, self.GridDataLen)
+        data = CommFunc.WriteString(data, self.GridDataLen, self.GridData)
+        data = CommFunc.WriteBYTE(data, self.OPType)
+        data = CommFunc.WriteBYTE(data, self.MoveCount)
+        for i in range(self.MoveCount):
+            data = CommFunc.WriteString(data, self.MoveList[i].GetLength(), self.MoveList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Score:%d,
+                                ScoreHighest:%d,
+                                Energy:%d,
+                                EnergyTime:%d,
+                                LVAwardMax:%d,
+                                LVAwardState:%d,
+                                UseItemLen:%d,
+                                UseItemCntList:%s,
+                                GridDataLen:%d,
+                                GridData:%s,
+                                OPType:%d,
+                                MoveCount:%d,
+                                MoveList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Score,
+                                self.ScoreHighest,
+                                self.Energy,
+                                self.EnergyTime,
+                                self.LVAwardMax,
+                                self.LVAwardState,
+                                self.UseItemLen,
+                                "...",
+                                self.GridDataLen,
+                                self.GridData,
+                                self.OPType,
+                                self.MoveCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCActLianqiPlayerInfo=tagMCActLianqiPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLianqiPlayerInfo.Head.Cmd,m_NAtagMCActLianqiPlayerInfo.Head.SubCmd))] = m_NAtagMCActLianqiPlayerInfo
+
+
+#------------------------------------------------------
 # AA 80 仙匣秘境跨服活动信息 #tagMCCrossActXianXiaMJInfo
 
 class  tagMCCrossActXianXiaMJItem(Structure):
@@ -42126,10 +44806,10 @@
         return DumpString
 
 
-class  tagMCCrossActXianXiaMJBillard(Structure):
-    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
-    Count = 0    #(BYTE Count)// 奖励物品数
-    AwardItemList = list()    #(vector<tagMCCrossActXianXiaMJItem> AwardItemList)// 奖励物品列表
+class  tagMCCrossActXianXiaMJAwardEx(Structure):
+    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
+    Count = 0    #(BYTE Count)// 额外奖励物品数
+    AwardItemList = list()    #(vector<tagMCCrossActXianXiaMJItem> AwardItemList)// 额外奖励物品列表
     data = None
 
     def __init__(self):
@@ -42138,7 +44818,7 @@
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
-        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
             temAwardItemList = tagMCCrossActXianXiaMJItem()
@@ -42147,7 +44827,7 @@
         return _pos
 
     def Clear(self):
-        self.Rank = 0
+        self.NeedScore = 0
         self.Count = 0
         self.AwardItemList = list()
         return
@@ -42163,7 +44843,7 @@
 
     def GetBuffer(self):
         data = ''
-        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
         data = CommFunc.WriteBYTE(data, self.Count)
         for i in range(self.Count):
             data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -42171,13 +44851,96 @@
 
     def OutputString(self):
         DumpString = '''
-                                Rank:%d,
+                                NeedScore:%d,
                                 Count:%d,
                                 AwardItemList:%s
                                 '''\
                                 %(
+                                self.NeedScore,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagMCCrossActXianXiaMJBillard(Structure):
+    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+    Count = 0    #(BYTE Count)// 奖励物品数
+    AwardItemList = list()    #(vector<tagMCCrossActXianXiaMJItem> AwardItemList)// 奖励物品列表
+    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
+    CountEx = 0    #(BYTE CountEx)// 额外奖励数
+    AwardItemExList = list()    #(vector<tagMCCrossActXianXiaMJAwardEx> AwardItemExList)// 额外奖励列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAwardItemList = tagMCCrossActXianXiaMJItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CountEx):
+            temAwardItemExList = tagMCCrossActXianXiaMJAwardEx()
+            _pos = temAwardItemExList.ReadData(_lpData, _pos)
+            self.AwardItemExList.append(temAwardItemExList)
+        return _pos
+
+    def Clear(self):
+        self.Rank = 0
+        self.Count = 0
+        self.AwardItemList = list()
+        self.NeedScore = 0
+        self.CountEx = 0
+        self.AwardItemExList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.AwardItemList[i].GetLength()
+        length += 4
+        length += 1
+        for i in range(self.CountEx):
+            length += self.AwardItemExList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.Rank)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.NeedScore)
+        data = CommFunc.WriteBYTE(data, self.CountEx)
+        for i in range(self.CountEx):
+            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Rank:%d,
+                                Count:%d,
+                                AwardItemList:%s,
+                                NeedScore:%d,
+                                CountEx:%d,
+                                AwardItemExList:%s
+                                '''\
+                                %(
                                 self.Rank,
                                 self.Count,
+                                "...",
+                                self.NeedScore,
+                                self.CountEx,
                                 "..."
                                 )
         return DumpString
@@ -42193,7 +44956,6 @@
     JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
     JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
     IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
-    RankLimitPersonal = 0    #(WORD RankLimitPersonal)// 个人榜上榜积分保底限制;
     PersonalBillCount = 0    #(BYTE PersonalBillCount)
     PersonalBillboardInfoList = list()    #(vector<tagMCCrossActXianXiaMJBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
     data = None
@@ -42215,7 +44977,6 @@
         self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
         self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
         self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.PersonalBillCount):
             temPersonalBillboardInfoList = tagMCCrossActXianXiaMJBillard()
@@ -42236,7 +44997,6 @@
         self.JoinStartTime = ""
         self.JoinEndTime = ""
         self.IsDayReset = 0
-        self.RankLimitPersonal = 0
         self.PersonalBillCount = 0
         self.PersonalBillboardInfoList = list()
         return
@@ -42252,7 +45012,6 @@
         length += 5
         length += 5
         length += 1
-        length += 2
         length += 1
         for i in range(self.PersonalBillCount):
             length += self.PersonalBillboardInfoList[i].GetLength()
@@ -42270,7 +45029,6 @@
         data = CommFunc.WriteString(data, 5, self.JoinStartTime)
         data = CommFunc.WriteString(data, 5, self.JoinEndTime)
         data = CommFunc.WriteBYTE(data, self.IsDayReset)
-        data = CommFunc.WriteWORD(data, self.RankLimitPersonal)
         data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
         for i in range(self.PersonalBillCount):
             data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
@@ -42287,7 +45045,6 @@
                                 JoinStartTime:%s,
                                 JoinEndTime:%s,
                                 IsDayReset:%d,
-                                RankLimitPersonal:%d,
                                 PersonalBillCount:%d,
                                 PersonalBillboardInfoList:%s
                                 '''\
@@ -42301,7 +45058,6 @@
                                 self.JoinStartTime,
                                 self.JoinEndTime,
                                 self.IsDayReset,
-                                self.RankLimitPersonal,
                                 self.PersonalBillCount,
                                 "..."
                                 )
@@ -46512,6 +49268,121 @@
 
 
 #------------------------------------------------------
+# AA 05 推金币信息 #tagMCTuijinbiInfo
+
+class  tagMCTuijinbiPool(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PrizeType", c_ubyte),    # 台面奖励类型: 1-金币;2-仙玉币
+                  ("PrizeCount", 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.PrizeType = 0
+        self.PrizeCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCTuijinbiPool)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 05 推金币信息 //tagMCTuijinbiInfo:
+                                PrizeType:%d,
+                                PrizeCount:%d
+                                '''\
+                                %(
+                                self.PrizeType,
+                                self.PrizeCount
+                                )
+        return DumpString
+
+
+class  tagMCTuijinbiInfo(Structure):
+    Head = tagHead()
+    DrawNum = 0    #(BYTE DrawNum)// 本次抽中位置,为0时表示非抽奖同步
+    PoolPrizeCnt = 0    #(BYTE PoolPrizeCnt)
+    PoolPrizeList = list()    #(vector<tagMCTuijinbiPool> PoolPrizeList)// 台面奖池信息列表,每次都完整通知
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.DrawNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PoolPrizeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PoolPrizeCnt):
+            temPoolPrizeList = tagMCTuijinbiPool()
+            _pos = temPoolPrizeList.ReadData(_lpData, _pos)
+            self.PoolPrizeList.append(temPoolPrizeList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAA
+        self.Head.SubCmd = 0x05
+        self.DrawNum = 0
+        self.PoolPrizeCnt = 0
+        self.PoolPrizeList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.PoolPrizeCnt):
+            length += self.PoolPrizeList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.DrawNum)
+        data = CommFunc.WriteBYTE(data, self.PoolPrizeCnt)
+        for i in range(self.PoolPrizeCnt):
+            data = CommFunc.WriteString(data, self.PoolPrizeList[i].GetLength(), self.PoolPrizeList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                DrawNum:%d,
+                                PoolPrizeCnt:%d,
+                                PoolPrizeList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.DrawNum,
+                                self.PoolPrizeCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCTuijinbiInfo=tagMCTuijinbiInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTuijinbiInfo.Head.Cmd,m_NAtagMCTuijinbiInfo.Head.SubCmd))] = m_NAtagMCTuijinbiInfo
+
+
+#------------------------------------------------------
 # AA 0A 周狂欢活动信息 #tagMCWeekPartyInfo
 
 class  tagMCWeekPartyItem(Structure):
@@ -48863,6 +51734,238 @@
 
 
 #------------------------------------------------------
+# B1 17 头像信息 #tagMCFaceInfo
+
+class  tagMCFace(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("FaceID", c_int),    #头像ID
+                  ("State", c_ubyte),    #是否已激活
+                  ("EndTime", c_int),    #到期时间戳,0为永久
+                  ("Star", 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.FaceID = 0
+        self.State = 0
+        self.EndTime = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFace)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 17 头像信息 //tagMCFaceInfo:
+                                FaceID:%d,
+                                State:%d,
+                                EndTime:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.FaceID,
+                                self.State,
+                                self.EndTime,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagMCFaceInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    FaceList = list()    #(vector<tagMCFace> FaceList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x17
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temFaceList = tagMCFace()
+            _pos = temFaceList.ReadData(_lpData, _pos)
+            self.FaceList.append(temFaceList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x17
+        self.Count = 0
+        self.FaceList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.FaceList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.FaceList[i].GetLength(), self.FaceList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                FaceList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFaceInfo=tagMCFaceInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaceInfo.Head.Cmd,m_NAtagMCFaceInfo.Head.SubCmd))] = m_NAtagMCFaceInfo
+
+
+#------------------------------------------------------
+# B1 18 头像框信息 #tagMCFacePicInfo
+
+class  tagMCFacePic(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("FacePicID", c_int),    #头像框ID
+                  ("State", c_ubyte),    #是否已激活
+                  ("EndTime", c_int),    #到期时间戳,0为永久
+                  ("Star", 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.FacePicID = 0
+        self.State = 0
+        self.EndTime = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCFacePic)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 18 头像框信息 //tagMCFacePicInfo:
+                                FacePicID:%d,
+                                State:%d,
+                                EndTime:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.FacePicID,
+                                self.State,
+                                self.EndTime,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagMCFacePicInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    FacePicList = list()    #(vector<tagMCFacePic> FacePicList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x18
+        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):
+            temFacePicList = tagMCFacePic()
+            _pos = temFacePicList.ReadData(_lpData, _pos)
+            self.FacePicList.append(temFacePicList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x18
+        self.Count = 0
+        self.FacePicList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.FacePicList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.FacePicList[i].GetLength(), self.FacePicList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                FacePicList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCFacePicInfo=tagMCFacePicInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFacePicInfo.Head.Cmd,m_NAtagMCFacePicInfo.Head.SubCmd))] = m_NAtagMCFacePicInfo
+
+
+#------------------------------------------------------
 # B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList
 
 class  tagMCFuncSysPrivilegeInfo(Structure):
@@ -49707,6 +52810,80 @@
 
 
 #------------------------------------------------------
+# B1 15 天道树信息 #tagMCTiandaoTreeInfo
+
+class  tagMCTiandaoTreeInfo(Structure):
+    Head = tagHead()
+    Qiyun = 0    #(DWORD Qiyun)// 当前气运值
+    AwardCount = 0    #(BYTE AwardCount)// 天道果领取记录值个数
+    AwardStateList = list()    #(vector<DWORD> AwardStateList)// 天道果领取记录值列表,按奖励索引位二进制记录是否已领取,一个值可存31位,如值1存0~30,值2存31~61,...
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Qiyun,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.AwardStateList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x15
+        self.Qiyun = 0
+        self.AwardCount = 0
+        self.AwardStateList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 4 * self.AwardCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Qiyun)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteDWORD(data, self.AwardStateList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Qiyun:%d,
+                                AwardCount:%d,
+                                AwardStateList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Qiyun,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCTiandaoTreeInfo=tagMCTiandaoTreeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTiandaoTreeInfo.Head.Cmd,m_NAtagMCTiandaoTreeInfo.Head.SubCmd))] = m_NAtagMCTiandaoTreeInfo
+
+
+#------------------------------------------------------
 # B1 12 培养功能境界信息 #tagMCTrainRealmLVInfo
 
 class  tagMCTrainRealmLV(Structure):
@@ -49812,6 +52989,229 @@
 
 m_NAtagMCTrainRealmLVInfo=tagMCTrainRealmLVInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTrainRealmLVInfo.Head.Cmd,m_NAtagMCTrainRealmLVInfo.Head.SubCmd))] = m_NAtagMCTrainRealmLVInfo
+
+
+#------------------------------------------------------
+# B1 16 累计消耗货币信息 #tagMCUseMoneyTotalInfo
+
+class  tagMCUseMoneyTotal(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("MoneyType", c_ubyte),    # 货币类型,仅同步需要记录的货币类型
+                  ("UseTotal", 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.MoneyType = 0
+        self.UseTotal = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCUseMoneyTotal)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 16 累计消耗货币信息 //tagMCUseMoneyTotalInfo:
+                                MoneyType:%d,
+                                UseTotal:%d
+                                '''\
+                                %(
+                                self.MoneyType,
+                                self.UseTotal
+                                )
+        return DumpString
+
+
+class  tagMCUseMoneyTotalInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    InfoList = list()    #(vector<tagMCUseMoneyTotal> InfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x16
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temInfoList = tagMCUseMoneyTotal()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x16
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.InfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCUseMoneyTotalInfo=tagMCUseMoneyTotalInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseMoneyTotalInfo.Head.Cmd,m_NAtagMCUseMoneyTotalInfo.Head.SubCmd))] = m_NAtagMCUseMoneyTotalInfo
+
+
+#------------------------------------------------------
+# B1 14 仙宫信息 #tagMCXiangongInfo
+
+class  tagMCXiangong(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("XiangongID", c_ushort),    # 仙宫ID
+                  ("LikeStateToday", 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.XiangongID = 0
+        self.LikeStateToday = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCXiangong)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 14 仙宫信息 //tagMCXiangongInfo:
+                                XiangongID:%d,
+                                LikeStateToday:%d
+                                '''\
+                                %(
+                                self.XiangongID,
+                                self.LikeStateToday
+                                )
+        return DumpString
+
+
+class  tagMCXiangongInfo(Structure):
+    Head = tagHead()
+    LikeStateToday = 0    #(BYTE LikeStateToday)// 今日是否已点赞,指仙宫的外层点赞,非某个指定仙宫
+    XiangongCount = 0    #(BYTE XiangongCount)
+    XiangongList = list()    #(vector<tagMCXiangong> XiangongList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x14
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.LikeStateToday,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.XiangongCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.XiangongCount):
+            temXiangongList = tagMCXiangong()
+            _pos = temXiangongList.ReadData(_lpData, _pos)
+            self.XiangongList.append(temXiangongList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x14
+        self.LikeStateToday = 0
+        self.XiangongCount = 0
+        self.XiangongList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.XiangongCount):
+            length += self.XiangongList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.LikeStateToday)
+        data = CommFunc.WriteBYTE(data, self.XiangongCount)
+        for i in range(self.XiangongCount):
+            data = CommFunc.WriteString(data, self.XiangongList[i].GetLength(), self.XiangongList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                LikeStateToday:%d,
+                                XiangongCount:%d,
+                                XiangongList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.LikeStateToday,
+                                self.XiangongCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCXiangongInfo=tagMCXiangongInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXiangongInfo.Head.Cmd,m_NAtagMCXiangongInfo.Head.SubCmd))] = m_NAtagMCXiangongInfo
 
 
 #------------------------------------------------------
@@ -50669,6 +54069,8 @@
     LV = 0    #(WORD LV)// 玩家等级
     Job = 0    #(BYTE Job)// 玩家职业, 如果是机器人,则职业有值,服务端控制
     RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
     FightPower = 0    #(DWORD FightPower)// 玩家战力
     Relation = 0    #(BYTE Relation)// 关系:0-无,1-好友,2-盟友
     IsNeedGold = 0    #(BYTE IsNeedGold)// 是否需要仙玉召唤
@@ -50687,6 +54089,8 @@
         self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IsNeedGold,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -50700,6 +54104,8 @@
         self.LV = 0
         self.Job = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         self.FightPower = 0
         self.Relation = 0
         self.IsNeedGold = 0
@@ -50715,6 +54121,8 @@
         length += 1
         length += 2
         length += 4
+        length += 4
+        length += 4
         length += 1
         length += 1
 
@@ -50729,6 +54137,8 @@
         data = CommFunc.WriteWORD(data, self.LV)
         data = CommFunc.WriteBYTE(data, self.Job)
         data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
         data = CommFunc.WriteDWORD(data, self.FightPower)
         data = CommFunc.WriteBYTE(data, self.Relation)
         data = CommFunc.WriteBYTE(data, self.IsNeedGold)
@@ -50743,6 +54153,8 @@
                                 LV:%d,
                                 Job:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 FightPower:%d,
                                 Relation:%d,
                                 IsNeedGold:%d
@@ -50755,6 +54167,8 @@
                                 self.LV,
                                 self.Job,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.FightPower,
                                 self.Relation,
                                 self.IsNeedGold
@@ -53694,6 +57108,7 @@
                   ("DayWinCount", c_ubyte),    # 当日已胜利次数
                   ("DayBuyCount", c_ubyte),    # 当日已购买次数
                   ("DayItemAddCount", c_ubyte),    # 当日物品增加次数
+                  ("DayRefreshCount", c_ushort),    # 今日已刷新匹配次数
                   ]
 
     def __init__(self):
@@ -53719,6 +57134,7 @@
         self.DayWinCount = 0
         self.DayBuyCount = 0
         self.DayItemAddCount = 0
+        self.DayRefreshCount = 0
         return
 
     def GetLength(self):
@@ -53739,7 +57155,8 @@
                                 DayPKCount:%d,
                                 DayWinCount:%d,
                                 DayBuyCount:%d,
-                                DayItemAddCount:%d
+                                DayItemAddCount:%d,
+                                DayRefreshCount:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -53752,7 +57169,8 @@
                                 self.DayPKCount,
                                 self.DayWinCount,
                                 self.DayBuyCount,
-                                self.DayItemAddCount
+                                self.DayItemAddCount,
+                                self.DayRefreshCount
                                 )
         return DumpString
 

--
Gitblit v1.8.0