From 1d314dd1b124b38f2f64d05211ecda7065691ec0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 15 十月 2024 17:04:56 +0800
Subject: [PATCH] 5328 【越南】【英文】【砍树】神兽装备格子拓展(扩展为150格)

---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 1382 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 1,341 insertions(+), 41 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 09acf79..e928a98 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
 
@@ -5240,6 +5289,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 +5304,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 +5314,8 @@
         self.LV = 0
         self.Job = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -5270,6 +5325,8 @@
         length += 4
         length += 1
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -5280,6 +5337,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 +5347,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 +5438,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 +5453,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 +5463,8 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -5405,6 +5474,8 @@
         length += 1
         length += 2
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -5415,6 +5486,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 +5496,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 +5810,356 @@
 
 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)// 玩家境界
+    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.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.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 += 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.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,
+                                EquipShowSwitch:%d,
+                                EquipShowIDCount:%d,
+                                EquipShowID:%s
+                                '''\
+                                %(
+                                self.AddTime,
+                                self.ServerID,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV,
+                                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)// 玩家境界
+    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)
+        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
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 2
+
+        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)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AddTime:%d,
+                                ServerID:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                RealmLV:%d
+                                '''\
+                                %(
+                                self.AddTime,
+                                self.ServerID,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV
+                                )
+        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 +7708,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 +7729,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 +7745,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 +7765,8 @@
         length += 4
         length += 4
         length += 4
+        length += 4
+        length += 4
         length += 2
         length += len(self.ExData)
 
@@ -7345,6 +7780,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 +7797,8 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 MapID:%d,
                                 LineID:%d,
                                 NPCID:%d,
@@ -7373,6 +7812,8 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.MapID,
                                 self.LineID,
                                 self.NPCID,
@@ -7831,6 +8272,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 +8298,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 +8320,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 +8343,8 @@
         length += 4
         length += 4
         length += 4
+        length += 4
+        length += 4
         length += 2
         length += len(self.ExData)
         length += 19
@@ -7912,6 +8361,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 +8381,8 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 MapID:%d,
                                 LineID:%d,
                                 NPCID:%d,
@@ -7946,6 +8399,8 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.MapID,
                                 self.LineID,
                                 self.NPCID,
@@ -8530,6 +8985,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 +9000,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 +9010,8 @@
         self.Job = 0
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -8560,6 +9021,8 @@
         length += 1
         length += 2
         length += 1
+        length += 4
+        length += 4
 
         return length
 
@@ -8570,6 +9033,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 +9043,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 +9383,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 +9400,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 +9413,8 @@
         self.Name = ""
         self.LV = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -8949,6 +9424,8 @@
         length += 33
         length += 2
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -8959,6 +9436,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 +9446,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 +10587,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 +10608,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 +10625,8 @@
         self.OnlineType = 0
         self.IsInTeam = 0
         self.ServerGroupID = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -10150,6 +10639,8 @@
         length += 2
         length += 1
         length += 1
+        length += 4
+        length += 4
         length += 4
 
         return length
@@ -10165,6 +10656,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 +10670,9 @@
                                 RealmLV:%d,
                                 OnlineType:%d,
                                 IsInTeam:%d,
-                                ServerGroupID:%d
+                                ServerGroupID:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -10188,7 +10683,9 @@
                                 self.RealmLV,
                                 self.OnlineType,
                                 self.IsInTeam,
-                                self.ServerGroupID
+                                self.ServerGroupID,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -10263,6 +10760,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 +10776,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 +10787,8 @@
         self.LV = 0
         self.RealmLV = 0
         self.OnlineType = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -10296,6 +10799,8 @@
         length += 2
         length += 2
         length += 1
+        length += 4
+        length += 4
 
         return length
 
@@ -10307,6 +10812,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 +10823,9 @@
                                 Job:%d,
                                 LV:%d,
                                 RealmLV:%d,
-                                OnlineType:%d
+                                OnlineType:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -10324,7 +10833,9 @@
                                 self.Job,
                                 self.LV,
                                 self.RealmLV,
-                                self.OnlineType
+                                self.OnlineType,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -13863,6 +14374,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 +14391,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 +14403,8 @@
         self.Job = 0
         self.JobLevel = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -13899,6 +14416,8 @@
         length += 1
         length += 1
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -13911,6 +14430,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 +14442,9 @@
                                 LV:%d,
                                 Job:%d,
                                 JobLevel:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -13930,7 +14453,9 @@
                                 self.LV,
                                 self.Job,
                                 self.JobLevel,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -14542,6 +15067,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 +15089,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 +15106,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 +15124,8 @@
         length += 1
         length += 1
         length += 2
+        length += 4
+        length += 4
         length += 1
         length += 4
         length += 1
@@ -14610,6 +15143,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 +15161,8 @@
                                 Job:%d,
                                 JobLevel:%d,
                                 RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
                                 PlayerState:%d,
                                 MapID:%d,
                                 LineID:%d
@@ -14640,6 +15177,8 @@
                                 self.Job,
                                 self.JobLevel,
                                 self.RealmLV,
+                                self.Face,
+                                self.FacePic,
                                 self.PlayerState,
                                 self.MapID,
                                 self.LineID
@@ -15615,6 +16154,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 +16172,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 +16185,8 @@
         self.FightPower = 0
         self.FightPowerEx = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -15654,6 +16199,8 @@
         length += 4
         length += 4
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -15667,6 +16214,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 +16227,9 @@
                                 LV:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -15688,7 +16239,9 @@
                                 self.LV,
                                 self.FightPower,
                                 self.FightPowerEx,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -16636,6 +17189,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 +17207,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 +17220,8 @@
         self.FightPower = 0
         self.FightPowerEx = 0
         self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
         return
 
     def GetLength(self):
@@ -16675,6 +17234,8 @@
         length += 4
         length += 4
         length += 2
+        length += 4
+        length += 4
 
         return length
 
@@ -16688,6 +17249,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 +17262,9 @@
                                 LV:%d,
                                 FightPower:%d,
                                 FightPowerEx:%d,
-                                RealmLV:%d
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
                                 '''\
                                 %(
                                 self.PlayerID,
@@ -16709,7 +17274,9 @@
                                 self.LV,
                                 self.FightPower,
                                 self.FightPowerEx,
-                                self.RealmLV
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
                                 )
         return DumpString
 
@@ -18689,6 +19256,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 +19365,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 +19470,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 +19565,9 @@
         length += 4
         length += 4
         length += 15
+        length += 4
+        length += 4
+        length += 4
         length += 4
         length += 4
         length += 4
@@ -19098,6 +19677,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 +19779,10 @@
                                 ExAttr18:%d,
                                 ExAttr19:%d,
                                 ExAttr20:%d,
-                                HPEx:%d
+                                HPEx:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                RoleType:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -19295,7 +19880,10 @@
                                 self.ExAttr18,
                                 self.ExAttr19,
                                 self.ExAttr20,
-                                self.HPEx
+                                self.HPEx,
+                                self.Face,
+                                self.FacePic,
+                                self.RoleType
                                 )
         return DumpString
 
@@ -30149,18 +30737,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 +30756,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 +31146,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
 
 
 #------------------------------------------------------
@@ -35886,6 +36650,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
@@ -35905,6 +36670,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()
@@ -35923,6 +36689,7 @@
         self.JoinStartTime = ""
         self.JoinEndTime = ""
         self.LimitLV = 0
+        self.ShopType = 0
         self.PersonalBillCount = 0
         self.PersonalBillboardInfoList = list()
         return
@@ -35935,6 +36702,7 @@
         length += 10
         length += 5
         length += 5
+        length += 2
         length += 2
         length += 1
         for i in range(self.PersonalBillCount):
@@ -35951,6 +36719,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())
@@ -35965,6 +36734,7 @@
                                 JoinStartTime:%s,
                                 JoinEndTime:%s,
                                 LimitLV:%d,
+                                ShopType:%d,
                                 PersonalBillCount:%d,
                                 PersonalBillboardInfoList:%s
                                 '''\
@@ -35976,6 +36746,7 @@
                                 self.JoinStartTime,
                                 self.JoinEndTime,
                                 self.LimitLV,
+                                self.ShopType,
                                 self.PersonalBillCount,
                                 "..."
                                 )
@@ -49333,6 +50104,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):
@@ -50177,6 +51180,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):
@@ -50285,6 +51362,229 @@
 
 
 #------------------------------------------------------
+# 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
+
+
+#------------------------------------------------------
 # B1 20 战令信息 #tagMCZhanlingInfo
 
 class  tagMCZhanling(Structure):

--
Gitblit v1.8.0