From 71d77df560af421d106484e9276e89297b88e40a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 04 六月 2025 19:09:47 +0800
Subject: [PATCH] 0312 调整结构简化为 只有 Client和Server概念 导出

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 38455 +++++++++++++++++++++++++++++------------------------------
 1 files changed, 18,751 insertions(+), 19,704 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 3a5a7e5..0b5955d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -1117,19710 +1117,6 @@
 
 
 #------------------------------------------------------
-# A4 0C 多仙盟boss活动信息 #tagGCAllFamilyBossInfo
-
-class  tagGCAllFamilyBossInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("IsEnd", c_ubyte),    # 是否已结束
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA4
-        self.SubCmd = 0x0C
-        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 = 0xA4
-        self.SubCmd = 0x0C
-        self.IsEnd = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCAllFamilyBossInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A4 0C 多仙盟boss活动信息 //tagGCAllFamilyBossInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                IsEnd:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.IsEnd
-                                )
-        return DumpString
-
-
-m_NAtagGCAllFamilyBossInfo=tagGCAllFamilyBossInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossInfo.Cmd,m_NAtagGCAllFamilyBossInfo.SubCmd))] = m_NAtagGCAllFamilyBossInfo
-
-
-#------------------------------------------------------
-# A4 11 传功邀请信息 #tagGCChuangongInviteInfo
-
-class  tagGCChuangongInviteInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 发起邀请的玩家ID
-    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()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x11
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.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.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x11
-        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 += self.Head.GetLength()
-        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.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        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 = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo
-
-
-#------------------------------------------------------
-# A4 12 传功开始 #tagGCChuangongStart
-
-class  tagGCChuangongStart(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 一起传功的玩家ID
-    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()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.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.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x12
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.LV = 0
-        self.Job = 0
-        self.RealmLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        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 = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV
-                                )
-        return DumpString
-
-
-m_NAtagGCChuangongStart=tagGCChuangongStart()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart
-
-
-#------------------------------------------------------
-# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo
-
-class  tagGCFakeFamilyInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    FakeIDList = list()    #(vector<DWORD> FakeIDList)// 假仙盟名字索引1开始
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x0A
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.FakeIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x0A
-        self.Count = 0
-        self.FakeIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4 * self.Count
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteDWORD(data, self.FakeIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                FakeIDList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFakeFamilyInfo=tagGCFakeFamilyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFakeFamilyInfo.Head.Cmd,m_NAtagGCFakeFamilyInfo.Head.SubCmd))] = m_NAtagGCFakeFamilyInfo
-
-
-#------------------------------------------------------
-# A4 03 家族行为信息 #tagGCFamilyActionInfo
-
-class  tagGCFamilyAction(Structure):
-    Time = 0    #(DWORD Time)//时间
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)
-    Value1 = 0    #(DWORD Value1)//数值1
-    Value2 = 0    #(DWORD Value2)//数值2
-    Value3 = 0    #(DWORD Value3)//数值3
-    Value4 = 0    #(DWORD Value4)//数值4
-    Value5 = 0    #(DWORD Value5)//数值5
-    Value6 = 0    #(DWORD Value6)//数值6
-    UseDataLen = 0    #(WORD UseDataLen)
-    UseData = ""    #(String UseData)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.UseDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UseData,_pos = CommFunc.ReadString(_lpData, _pos,self.UseDataLen)
-        return _pos
-
-    def Clear(self):
-        self.Time = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.Value1 = 0
-        self.Value2 = 0
-        self.Value3 = 0
-        self.Value4 = 0
-        self.Value5 = 0
-        self.Value6 = 0
-        self.UseDataLen = 0
-        self.UseData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += len(self.UseData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.Time)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteDWORD(data, self.Value1)
-        data = CommFunc.WriteDWORD(data, self.Value2)
-        data = CommFunc.WriteDWORD(data, self.Value3)
-        data = CommFunc.WriteDWORD(data, self.Value4)
-        data = CommFunc.WriteDWORD(data, self.Value5)
-        data = CommFunc.WriteDWORD(data, self.Value6)
-        data = CommFunc.WriteWORD(data, self.UseDataLen)
-        data = CommFunc.WriteString(data, self.UseDataLen, self.UseData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Time:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                Value1:%d,
-                                Value2:%d,
-                                Value3:%d,
-                                Value4:%d,
-                                Value5:%d,
-                                Value6:%d,
-                                UseDataLen:%d,
-                                UseData:%s
-                                '''\
-                                %(
-                                self.Time,
-                                self.NameLen,
-                                self.Name,
-                                self.Value1,
-                                self.Value2,
-                                self.Value3,
-                                self.Value4,
-                                self.Value5,
-                                self.Value6,
-                                self.UseDataLen,
-                                self.UseData
-                                )
-        return DumpString
-
-
-class  tagGCFamilyActionInfo(Structure):
-    Head = tagHead()
-    FamilyID = 0    #(DWORD FamilyID)//家族ID
-    ActionType = 0    #(BYTE ActionType)//类型
-    Count = 0    #(WORD Count)//数量
-    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count	
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ActionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temFamilyActionList = tagGCFamilyAction()
-            _pos = temFamilyActionList.ReadData(_lpData, _pos)
-            self.FamilyActionList.append(temFamilyActionList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x03
-        self.FamilyID = 0
-        self.ActionType = 0
-        self.Count = 0
-        self.FamilyActionList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 2
-        for i in range(self.Count):
-            length += self.FamilyActionList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteBYTE(data, self.ActionType)
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.FamilyActionList[i].GetLength(), self.FamilyActionList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FamilyID:%d,
-                                ActionType:%d,
-                                Count:%d,
-                                FamilyActionList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FamilyID,
-                                self.ActionType,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyActionInfo=tagGCFamilyActionInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyActionInfo.Head.Cmd,m_NAtagGCFamilyActionInfo.Head.SubCmd))] = m_NAtagGCFamilyActionInfo
-
-
-#------------------------------------------------------
-# A4 0E 家族boss副本信息 #tagGCFamilyBosFBInfo
-
-class  tagGCFamilyBosFBInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("HurtTotal", c_int),    # 仙盟累计伤血,亿求余部分
-                  ("HurtTotalPoint", c_int),    # 仙盟累计伤血,亿整除部分
-                  ("FightMemCount", c_ubyte),    # 目前正在仙盟boss副本中的成员数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA4
-        self.SubCmd = 0x0E
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA4
-        self.SubCmd = 0x0E
-        self.HurtTotal = 0
-        self.HurtTotalPoint = 0
-        self.FightMemCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyBosFBInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A4 0E 家族boss副本信息 //tagGCFamilyBosFBInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                HurtTotal:%d,
-                                HurtTotalPoint:%d,
-                                FightMemCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.HurtTotal,
-                                self.HurtTotalPoint,
-                                self.FightMemCount
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyBosFBInfo=tagGCFamilyBosFBInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBosFBInfo.Cmd,m_NAtagGCFamilyBosFBInfo.SubCmd))] = m_NAtagGCFamilyBosFBInfo
-
-
-#------------------------------------------------------
-# A4 02 家族boss副本开启及击杀信息 #tagGCFamilyBossFBInfo
-
-class  tagGCFamilyBossFBInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("IsOpen", c_int),    # 是否已开启
-                  ("OpenCnt", c_ubyte),    # 本周已开启次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA4
-        self.SubCmd = 0x02
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA4
-        self.SubCmd = 0x02
-        self.IsOpen = 0
-        self.OpenCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyBossFBInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A4 02 家族boss副本开启及击杀信息 //tagGCFamilyBossFBInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                IsOpen:%d,
-                                OpenCnt:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.IsOpen,
-                                self.OpenCnt
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyBossFBInfo=tagGCFamilyBossFBInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBossFBInfo.Cmd,m_NAtagGCFamilyBossFBInfo.SubCmd))] = m_NAtagGCFamilyBossFBInfo
-
-
-#------------------------------------------------------
-# A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo
-
-class  tagFGrabRedPacketInfo(Structure):
-    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
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        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
-
-    def Clear(self):
-        self.NameLen = 0
-        self.Name = ""
-        self.PlayeJob = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.MoneyNum = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += len(self.Name)
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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
-
-    def OutputString(self):
-        DumpString = '''
-                                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
-
-
-class  tagGCFamilyRedPacketGrabInfo(Structure):
-    Head = tagHead()
-    RedPacketID = 0    #(DWORD RedPacketID)//红包唯一ID
-    Count = 0    #(BYTE Count)//数量
-    GrabInfo = list()    #(vector<tagFGrabRedPacketInfo> GrabInfo)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x05
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temGrabInfo = tagFGrabRedPacketInfo()
-            _pos = temGrabInfo.ReadData(_lpData, _pos)
-            self.GrabInfo.append(temGrabInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x05
-        self.RedPacketID = 0
-        self.Count = 0
-        self.GrabInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        for i in range(self.Count):
-            length += self.GrabInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.RedPacketID)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.GrabInfo[i].GetLength(), self.GrabInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RedPacketID:%d,
-                                Count:%d,
-                                GrabInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RedPacketID,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyRedPacketGrabInfo=tagGCFamilyRedPacketGrabInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketGrabInfo.Head.Cmd,m_NAtagGCFamilyRedPacketGrabInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketGrabInfo
-
-
-#------------------------------------------------------
-# A4 04 家族红包总信息 #tagGCFamilyRedPacketInfo
-
-class  tagFRedPacketInfo(Structure):
-    RedPacketID = 0    #(DWORD RedPacketID)//红包唯一ID
-    PlayerID = 0    #(DWORD PlayerID)//玩家ID
-    NameLen = 0    #(BYTE NameLen)
-    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)//获得途径
-    PacketCnt = 0    #(BYTE PacketCnt)//可抢个数
-    State = 0    #(BYTE State)//0未发,1未领取,2已领取,3全部领完
-    WishLen = 0    #(BYTE WishLen)
-    Wish = ""    #(String Wish)//祝福语
-    IsAnonymous = 0    #(BYTE IsAnonymous)//是否匿名
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.RedPacketID,_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.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)
-        self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen)
-        self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.RedPacketID = 0
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.Time = 0
-        self.PlayeJob = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.MoneyType = 0
-        self.MoneyNum = 0
-        self.GetWay = 0
-        self.PacketCnt = 0
-        self.State = 0
-        self.WishLen = 0
-        self.Wish = ""
-        self.IsAnonymous = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 4
-        length += 1
-        length += 4
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        length += 1
-        length += len(self.Wish)
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.RedPacketID)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        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)
-        data = CommFunc.WriteBYTE(data, self.PacketCnt)
-        data = CommFunc.WriteBYTE(data, self.State)
-        data = CommFunc.WriteBYTE(data, self.WishLen)
-        data = CommFunc.WriteString(data, self.WishLen, self.Wish)
-        data = CommFunc.WriteBYTE(data, self.IsAnonymous)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                RedPacketID:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                Time:%d,
-                                PlayeJob:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                MoneyType:%d,
-                                MoneyNum:%d,
-                                GetWay:%d,
-                                PacketCnt:%d,
-                                State:%d,
-                                WishLen:%d,
-                                Wish:%s,
-                                IsAnonymous:%d
-                                '''\
-                                %(
-                                self.RedPacketID,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.Time,
-                                self.PlayeJob,
-                                self.Face,
-                                self.FacePic,
-                                self.MoneyType,
-                                self.MoneyNum,
-                                self.GetWay,
-                                self.PacketCnt,
-                                self.State,
-                                self.WishLen,
-                                self.Wish,
-                                self.IsAnonymous
-                                )
-        return DumpString
-
-
-class  tagGCFamilyRedPacketInfo(Structure):
-    Head = tagHead()
-    IsAll = 0    #(BYTE IsAll)//是否全部红包
-    Count = 0    #(BYTE Count)//红包数量
-    RedPacketInfo = list()    #(vector<tagFRedPacketInfo> RedPacketInfo)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temRedPacketInfo = tagFRedPacketInfo()
-            _pos = temRedPacketInfo.ReadData(_lpData, _pos)
-            self.RedPacketInfo.append(temRedPacketInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x04
-        self.IsAll = 0
-        self.Count = 0
-        self.RedPacketInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.Count):
-            length += self.RedPacketInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.IsAll)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.RedPacketInfo[i].GetLength(), self.RedPacketInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                IsAll:%d,
-                                Count:%d,
-                                RedPacketInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.IsAll,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyRedPacketInfo=tagGCFamilyRedPacketInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketInfo.Head.Cmd,m_NAtagGCFamilyRedPacketInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketInfo
-
-
-#------------------------------------------------------
-# A4 06 家族仓库物品信息 #tagGCFamilyStoreItemInfo
-
-class  tagGCFamilyStoreItem(Structure):
-    Index = 0    #(BYTE Index)// 仓库格子索引,从0开始代表第一格
-    ItemID = 0    #(DWORD ItemID)// 物品ID
-    ItemDataLen = 0    #(WORD ItemDataLen)
-    ItemData = ""    #(String ItemData)//size = ItemDataLen
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen)
-        return _pos
-
-    def Clear(self):
-        self.Index = 0
-        self.ItemID = 0
-        self.ItemDataLen = 0
-        self.ItemData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 2
-        length += len(self.ItemData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Index)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.ItemDataLen)
-        data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Index:%d,
-                                ItemID:%d,
-                                ItemDataLen:%d,
-                                ItemData:%s
-                                '''\
-                                %(
-                                self.Index,
-                                self.ItemID,
-                                self.ItemDataLen,
-                                self.ItemData
-                                )
-        return DumpString
-
-
-class  tagGCFamilyStoreItemInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)//数量
-    StoreItemList = list()    #(vector<tagGCFamilyStoreItem> StoreItemList)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x06
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temStoreItemList = tagGCFamilyStoreItem()
-            _pos = temStoreItemList.ReadData(_lpData, _pos)
-            self.StoreItemList.append(temStoreItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x06
-        self.Count = 0
-        self.StoreItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.StoreItemList[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.StoreItemList[i].GetLength(), self.StoreItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                StoreItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyStoreItemInfo=tagGCFamilyStoreItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemInfo.Head.Cmd,m_NAtagGCFamilyStoreItemInfo.Head.SubCmd))] = m_NAtagGCFamilyStoreItemInfo
-
-
-#------------------------------------------------------
-# A4 07 家族仓库物品清除 #tagGCFamilyStoreItemClear
-
-class  tagGCFamilyStoreItemClear(Structure):
-    Head = tagHead()
-    ClearType = 0    #(BYTE ClearType)//0-指定格子清除; 1-所有物品清除
-    IndexCount = 0    #(BYTE IndexCount)
-    IndexList = list()    #(vector<BYTE> IndexList)//清除的格子索引, 仅指定格子清除时有效,从0开始代表第一格
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x07
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ClearType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.IndexCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.IndexList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x07
-        self.ClearType = 0
-        self.IndexCount = 0
-        self.IndexList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 1 * self.IndexCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ClearType)
-        data = CommFunc.WriteBYTE(data, self.IndexCount)
-        for i in range(self.IndexCount):
-            data = CommFunc.WriteBYTE(data, self.IndexList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ClearType:%d,
-                                IndexCount:%d,
-                                IndexList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ClearType,
-                                self.IndexCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyStoreItemClear=tagGCFamilyStoreItemClear()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemClear.Head.Cmd,m_NAtagGCFamilyStoreItemClear.Head.SubCmd))] = m_NAtagGCFamilyStoreItemClear
-
-
-#------------------------------------------------------
-# A4 09 家族守卫人皇信息通知 #tagGCFamilySWRHInfo
-
-class  tagGCFamilySWRHInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("HasJoin", c_ubyte),    # 是否已参与
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA4
-        self.SubCmd = 0x09
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA4
-        self.SubCmd = 0x09
-        self.HasJoin = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilySWRHInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A4 09 家族守卫人皇信息通知 //tagGCFamilySWRHInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                HasJoin:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.HasJoin
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilySWRHInfo=tagGCFamilySWRHInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilySWRHInfo.Cmd,m_NAtagGCFamilySWRHInfo.SubCmd))] = m_NAtagGCFamilySWRHInfo
-
-
-#------------------------------------------------------
-# A4 0B 玩家参与的仙盟联赛仙盟信息 #tagGCPlayerJoinFamilyWarInfo
-
-class  tagGCPlayerJoinFamilyWarInfo(Structure):
-    Head = tagHead()
-    JoinFamilyID = 0    #(DWORD JoinFamilyID)//参与的仙盟ID,默认0本仙盟,仙盟不同时才会收到本包
-    JoinFamilyNameLen = 0    #(BYTE JoinFamilyNameLen)
-    JoinFamilyName = ""    #(String JoinFamilyName)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x0B
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.JoinFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.JoinFamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.JoinFamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.JoinFamilyNameLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x0B
-        self.JoinFamilyID = 0
-        self.JoinFamilyNameLen = 0
-        self.JoinFamilyName = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.JoinFamilyName)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.JoinFamilyID)
-        data = CommFunc.WriteBYTE(data, self.JoinFamilyNameLen)
-        data = CommFunc.WriteString(data, self.JoinFamilyNameLen, self.JoinFamilyName)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                JoinFamilyID:%d,
-                                JoinFamilyNameLen:%d,
-                                JoinFamilyName:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.JoinFamilyID,
-                                self.JoinFamilyNameLen,
-                                self.JoinFamilyName
-                                )
-        return DumpString
-
-
-m_NAtagGCPlayerJoinFamilyWarInfo=tagGCPlayerJoinFamilyWarInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerJoinFamilyWarInfo.Head.Cmd,m_NAtagGCPlayerJoinFamilyWarInfo.Head.SubCmd))] = m_NAtagGCPlayerJoinFamilyWarInfo
-
-
-#------------------------------------------------------
-# A4 08 查看家族 #tagGCPyAllFamilyView
-
-class  tagGCPyFamilyView(Structure):
-    FamilyIndex = 0    #(WORD FamilyIndex)
-    FamilyID = 0    #(DWORD FamilyID)//家族ID
-    FamilyNameLen = 0    #(BYTE FamilyNameLen)
-    FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
-    LeaderID = 0    #(DWORD LeaderID)//族长ID
-    LeaderNameLen = 0    #(BYTE LeaderNameLen)
-    LeaderName = ""    #(String LeaderName)//size = LeaderNameLen
-    LeaderOfficialRank = 0    #(BYTE LeaderOfficialRank)//境界
-    FamilyLV = 0    #(WORD FamilyLV)//家族等级
-    FamilyMemberCount = 0    #(WORD FamilyMemberCount)//家族人数
-    JoinAccept = 0    #(BYTE JoinAccept)//申请状态
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.FamilyIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyNameLen)
-        self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LeaderNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,self.LeaderNameLen)
-        self.LeaderOfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FamilyMemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.JoinAccept,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        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):
-        self.FamilyIndex = 0
-        self.FamilyID = 0
-        self.FamilyNameLen = 0
-        self.FamilyName = ""
-        self.LeaderID = 0
-        self.LeaderNameLen = 0
-        self.LeaderName = ""
-        self.LeaderOfficialRank = 0
-        self.FamilyLV = 0
-        self.FamilyMemberCount = 0
-        self.JoinAccept = 0
-        self.WarRank = 0
-        self.TotalFightPower = 0
-        self.TotalFightPowerEx = 0
-        self.EmblemID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 2
-        length += 4
-        length += 1
-        length += len(self.FamilyName)
-        length += 4
-        length += 1
-        length += len(self.LeaderName)
-        length += 1
-        length += 2
-        length += 2
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteWORD(data, self.FamilyIndex)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteBYTE(data, self.FamilyNameLen)
-        data = CommFunc.WriteString(data, self.FamilyNameLen, self.FamilyName)
-        data = CommFunc.WriteDWORD(data, self.LeaderID)
-        data = CommFunc.WriteBYTE(data, self.LeaderNameLen)
-        data = CommFunc.WriteString(data, self.LeaderNameLen, self.LeaderName)
-        data = CommFunc.WriteBYTE(data, self.LeaderOfficialRank)
-        data = CommFunc.WriteWORD(data, self.FamilyLV)
-        data = CommFunc.WriteWORD(data, self.FamilyMemberCount)
-        data = CommFunc.WriteBYTE(data, self.JoinAccept)
-        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):
-        DumpString = '''
-                                FamilyIndex:%d,
-                                FamilyID:%d,
-                                FamilyNameLen:%d,
-                                FamilyName:%s,
-                                LeaderID:%d,
-                                LeaderNameLen:%d,
-                                LeaderName:%s,
-                                LeaderOfficialRank:%d,
-                                FamilyLV:%d,
-                                FamilyMemberCount:%d,
-                                JoinAccept:%d,
-                                WarRank:%d,
-                                TotalFightPower:%d,
-                                TotalFightPowerEx:%d,
-                                EmblemID:%d
-                                '''\
-                                %(
-                                self.FamilyIndex,
-                                self.FamilyID,
-                                self.FamilyNameLen,
-                                self.FamilyName,
-                                self.LeaderID,
-                                self.LeaderNameLen,
-                                self.LeaderName,
-                                self.LeaderOfficialRank,
-                                self.FamilyLV,
-                                self.FamilyMemberCount,
-                                self.JoinAccept,
-                                self.WarRank,
-                                self.TotalFightPower,
-                                self.TotalFightPowerEx,
-                                self.EmblemID
-                                )
-        return DumpString
-
-
-class  tagGCPyAllFamilyView(Structure):
-    Head = tagHead()
-    TotalCount = 0    #(DWORD TotalCount)//一共有多少页
-    CurPage = 0    #(WORD CurPage)//当前第几页, 每页个数:FAMILY_VIEW_PAGE_COUNT
-    PageCount = 0    #(BYTE PageCount)//这一页有多少数目
-    Family = list()    #(vector<tagGCPyFamilyView> Family)//size = PageCount
-    IsSearching = 0    #(BYTE IsSearching)//是否在模糊搜索状态下
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CurPage,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PageCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PageCount):
-            temFamily = tagGCPyFamilyView()
-            _pos = temFamily.ReadData(_lpData, _pos)
-            self.Family.append(temFamily)
-        self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x08
-        self.TotalCount = 0
-        self.CurPage = 0
-        self.PageCount = 0
-        self.Family = list()
-        self.IsSearching = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 2
-        length += 1
-        for i in range(self.PageCount):
-            length += self.Family[i].GetLength()
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.TotalCount)
-        data = CommFunc.WriteWORD(data, self.CurPage)
-        data = CommFunc.WriteBYTE(data, self.PageCount)
-        for i in range(self.PageCount):
-            data = CommFunc.WriteString(data, self.Family[i].GetLength(), self.Family[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.IsSearching)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TotalCount:%d,
-                                CurPage:%d,
-                                PageCount:%d,
-                                Family:%s,
-                                IsSearching:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TotalCount,
-                                self.CurPage,
-                                self.PageCount,
-                                "...",
-                                self.IsSearching
-                                )
-        return DumpString
-
-
-m_NAtagGCPyAllFamilyView=tagGCPyAllFamilyView()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPyAllFamilyView.Head.Cmd,m_NAtagGCPyAllFamilyView.Head.SubCmd))] = m_NAtagGCPyAllFamilyView
-
-
-#------------------------------------------------------
-# A4 0D 通知建盟次数 #tagGCServerCreatFamilyTimes
-
-class  tagGCServerCreatFamilyTimes(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Times", c_int),    #建盟次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA4
-        self.SubCmd = 0x0D
-        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 = 0xA4
-        self.SubCmd = 0x0D
-        self.Times = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCServerCreatFamilyTimes)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A4 0D 通知建盟次数 //tagGCServerCreatFamilyTimes:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Times:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Times
-                                )
-        return DumpString
-
-
-m_NAtagGCServerCreatFamilyTimes=tagGCServerCreatFamilyTimes()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCServerCreatFamilyTimes.Cmd,m_NAtagGCServerCreatFamilyTimes.SubCmd))] = m_NAtagGCServerCreatFamilyTimes
-
-
-#------------------------------------------------------
-# A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo
-
-class  tagGCTagFamilyMember(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)//size = NameLen
-    FamilyLV = 0    #(BYTE FamilyLV)//家族成员等级
-    LV = 0    #(WORD LV)
-    Job = 0    #(BYTE Job)//职业
-    Face = 0    #(DWORD Face)//头像
-    FacePic = 0    #(DWORD FacePic)//头像外框
-    OfficialRank = 0    #(BYTE OfficialRank)//境界
-    FightPower = 0    #(DWORD FightPower)//成员战力,求余亿部分
-    FightPowerEx = 0    #(DWORD FightPowerEx)//成员战力,整除亿部分
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.FamilyLV = 0
-        self.LV = 0
-        self.Job = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.OfficialRank = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 1
-        length += 2
-        length += 1
-        length += 4
-        length += 4
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteBYTE(data, self.FamilyLV)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        data = CommFunc.WriteBYTE(data, self.OfficialRank)
-        data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                FamilyLV:%d,
-                                LV:%d,
-                                Job:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                OfficialRank:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.FamilyLV,
-                                self.LV,
-                                self.Job,
-                                self.Face,
-                                self.FacePic,
-                                self.OfficialRank,
-                                self.FightPower,
-                                self.FightPowerEx
-                                )
-        return DumpString
-
-
-class  tagGCTagFamilyInfo(Structure):
-    Head = tagHead()
-    FamilyID = 0    #(DWORD FamilyID)
-    FamilyName = ""    #(char FamilyName[33])//家族名称
-    FamilyLV = 0    #(WORD FamilyLV)//家族等级
-    BroadcastLen = 0    #(WORD BroadcastLen)//公告
-    Broadcast = ""    #(String Broadcast)//size = BroadcastLen
-    MemberCount = 0    #(WORD MemberCount)//人数
-    Member = list()    #(vector<tagGCTagFamilyMember> Member)//size = MemberCount
-    FightPower = 0    #(DWORD FightPower)//仙盟总战力,求余亿部分
-    FightPowerEx = 0    #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
-    EmblemID = 0    #(DWORD EmblemID)//徽章ID
-    ServerID = 0    #(DWORD ServerID)//仙盟区服ID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x13
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen)
-        self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.MemberCount):
-            temMember = tagGCTagFamilyMember()
-            _pos = temMember.ReadData(_lpData, _pos)
-            self.Member.append(temMember)
-        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x13
-        self.FamilyID = 0
-        self.FamilyName = ""
-        self.FamilyLV = 0
-        self.BroadcastLen = 0
-        self.Broadcast = ""
-        self.MemberCount = 0
-        self.Member = list()
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.EmblemID = 0
-        self.ServerID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 33
-        length += 2
-        length += 2
-        length += len(self.Broadcast)
-        length += 2
-        for i in range(self.MemberCount):
-            length += self.Member[i].GetLength()
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteString(data, 33, self.FamilyName)
-        data = CommFunc.WriteWORD(data, self.FamilyLV)
-        data = CommFunc.WriteWORD(data, self.BroadcastLen)
-        data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast)
-        data = CommFunc.WriteWORD(data, self.MemberCount)
-        for i in range(self.MemberCount):
-            data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.EmblemID)
-        data = CommFunc.WriteDWORD(data, self.ServerID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FamilyID:%d,
-                                FamilyName:%s,
-                                FamilyLV:%d,
-                                BroadcastLen:%d,
-                                Broadcast:%s,
-                                MemberCount:%d,
-                                Member:%s,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                EmblemID:%d,
-                                ServerID:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FamilyID,
-                                self.FamilyName,
-                                self.FamilyLV,
-                                self.BroadcastLen,
-                                self.Broadcast,
-                                self.MemberCount,
-                                "...",
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.EmblemID,
-                                self.ServerID
-                                )
-        return DumpString
-
-
-m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo
-
-
-#------------------------------------------------------
-#A4 01  查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo
-
-class  tagtMemberInfo(Structure):
-    PlayerID = 0    #(DWORD PlayerID)//玩家ID
-    NameLen = 0    #(BYTE NameLen)//名字长度
-    Name = ""    #(String Name)//size=NameLen
-    PlayerLV = 0    #(WORD PlayerLV)//玩家等级
-    PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
-    PlayeFightPower = 0    #(DWORD PlayeFightPower)//玩家战斗力,求余亿部分
-    PlayeFightPowerEx = 0    #(DWORD PlayeFightPowerEx)//玩家战斗力,整除亿部分,1代表1亿
-    RequestTime = 0    #(DWORD RequestTime)//申请时间
-    IsOnLine = 0    #(BYTE IsOnLine)//是否在线
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayeFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayeFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.IsOnLine,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.PlayerLV = 0
-        self.PlayeJob = 0
-        self.PlayeFightPower = 0
-        self.PlayeFightPowerEx = 0
-        self.RequestTime = 0
-        self.IsOnLine = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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.PlayerLV)
-        data = CommFunc.WriteBYTE(data, self.PlayeJob)
-        data = CommFunc.WriteDWORD(data, self.PlayeFightPower)
-        data = CommFunc.WriteDWORD(data, self.PlayeFightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.RequestTime)
-        data = CommFunc.WriteBYTE(data, self.IsOnLine)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                PlayerLV:%d,
-                                PlayeJob:%d,
-                                PlayeFightPower:%d,
-                                PlayeFightPowerEx:%d,
-                                RequestTime:%d,
-                                IsOnLine:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.PlayerLV,
-                                self.PlayeJob,
-                                self.PlayeFightPower,
-                                self.PlayeFightPowerEx,
-                                self.RequestTime,
-                                self.IsOnLine
-                                )
-        return DumpString
-
-
-class  tagGCViewFamilyRequestInfo(Structure):
-    Head = tagHead()
-    RequestMemberCount = 0    #(BYTE RequestMemberCount)//申请成员的数量
-    MemberInfo = list()    #(vector<tagtMemberInfo> MemberInfo)//size = RequestMemberCount
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RequestMemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RequestMemberCount):
-            temMemberInfo = tagtMemberInfo()
-            _pos = temMemberInfo.ReadData(_lpData, _pos)
-            self.MemberInfo.append(temMemberInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA4
-        self.Head.SubCmd = 0x01
-        self.RequestMemberCount = 0
-        self.MemberInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.RequestMemberCount):
-            length += self.MemberInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RequestMemberCount)
-        for i in range(self.RequestMemberCount):
-            data = CommFunc.WriteString(data, self.MemberInfo[i].GetLength(), self.MemberInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RequestMemberCount:%d,
-                                MemberInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RequestMemberCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCViewFamilyRequestInfo=tagGCViewFamilyRequestInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCViewFamilyRequestInfo.Head.Cmd,m_NAtagGCViewFamilyRequestInfo.Head.SubCmd))] = m_NAtagGCViewFamilyRequestInfo
-
-
-#------------------------------------------------------
-# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
-
-class  tagGCArenaBattlePlayerInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID
-    PlayerName = ""    #(char PlayerName[33])
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)//等级
-    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
-    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
-    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
-    Score = 0    #(DWORD Score)//积分
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x26
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x26
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.Score = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.Score)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                Score:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.Score
-                                )
-        return DumpString
-
-
-m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo
-
-
-#------------------------------------------------------
-# A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
-
-class  tagGCArenaBattleRecord(Structure):
-    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
-    PlayerName = ""    #(char PlayerName[33])
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)//等级
-    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
-    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
-    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
-    Score = 0    #(DWORD Score)//积分
-    AddScoreLen = 0    #(BYTE AddScoreLen)
-    AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
-    IsWin = 0    #(BYTE IsWin)//是否获胜
-    Time = 0    #(DWORD Time)//时间戳
-    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.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        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):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.Score = 0
-        self.AddScoreLen = 0
-        self.AddScore = ""
-        self.IsWin = 0
-        self.Time = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.AddScore)
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.Score)
-        data = CommFunc.WriteBYTE(data, self.AddScoreLen)
-        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):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                Score:%d,
-                                AddScoreLen:%d,
-                                AddScore:%s,
-                                IsWin:%d,
-                                Time:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.Score,
-                                self.AddScoreLen,
-                                self.AddScore,
-                                self.IsWin,
-                                self.Time,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCArenaBattleRecordList(Structure):
-    Head = tagHead()
-    RecordCount = 0    #(BYTE RecordCount)
-    BattleRecordList = list()    #(vector<tagGCArenaBattleRecord> BattleRecordList)// 对战列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x23
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RecordCount):
-            temBattleRecordList = tagGCArenaBattleRecord()
-            _pos = temBattleRecordList.ReadData(_lpData, _pos)
-            self.BattleRecordList.append(temBattleRecordList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x23
-        self.RecordCount = 0
-        self.BattleRecordList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.RecordCount):
-            length += self.BattleRecordList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RecordCount)
-        for i in range(self.RecordCount):
-            data = CommFunc.WriteString(data, self.BattleRecordList[i].GetLength(), self.BattleRecordList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RecordCount:%d,
-                                BattleRecordList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RecordCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCArenaBattleRecordList=tagGCArenaBattleRecordList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattleRecordList.Head.Cmd,m_NAtagGCArenaBattleRecordList.Head.SubCmd))] = m_NAtagGCArenaBattleRecordList
-
-
-#------------------------------------------------------
-# A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList
-
-class  tagGCArenaMatchInfo(Structure):
-    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
-    PlayerName = ""    #(char PlayerName[33])
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)//等级
-    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
-    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
-    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
-    Score = 0    #(DWORD Score)//积分
-    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.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.Score = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.Score)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                Score:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.Score,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCArenaMatchList(Structure):
-    Head = tagHead()
-    MatchCount = 0    #(BYTE MatchCount)
-    MatchList = list()    #(vector<tagGCArenaMatchInfo> MatchList)// 匹配列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x22
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MatchCount):
-            temMatchList = tagGCArenaMatchInfo()
-            _pos = temMatchList.ReadData(_lpData, _pos)
-            self.MatchList.append(temMatchList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x22
-        self.MatchCount = 0
-        self.MatchList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.MatchCount):
-            length += self.MatchList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.MatchCount)
-        for i in range(self.MatchCount):
-            data = CommFunc.WriteString(data, self.MatchList[i].GetLength(), self.MatchList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                MatchCount:%d,
-                                MatchList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.MatchCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCArenaMatchList=tagGCArenaMatchList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaMatchList.Head.Cmd,m_NAtagGCArenaMatchList.Head.SubCmd))] = m_NAtagGCArenaMatchList
-
-
-#------------------------------------------------------
-# A9 09 通知BOSS关注记录 #tagGCBossAttentionInfo
-
-class  tagGCBossAttention(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("BossID", c_int),    # bossID
-                  ("AddState", 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.BossID = 0
-        self.AddState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCBossAttention)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 09 通知BOSS关注记录 //tagGCBossAttentionInfo:
-                                BossID:%d,
-                                AddState:%d
-                                '''\
-                                %(
-                                self.BossID,
-                                self.AddState
-                                )
-        return DumpString
-
-
-class  tagGCBossAttentionInfo(Structure):
-    Head = tagHead()
-    BossCnt = 0    #(BYTE BossCnt)//boss个数
-    BossList = list()    #(vector<tagGCBossAttention> BossList)//列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x09
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BossCnt):
-            temBossList = tagGCBossAttention()
-            _pos = temBossList.ReadData(_lpData, _pos)
-            self.BossList.append(temBossList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x09
-        self.BossCnt = 0
-        self.BossList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.BossCnt):
-            length += self.BossList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.BossCnt)
-        for i in range(self.BossCnt):
-            data = CommFunc.WriteString(data, self.BossList[i].GetLength(), self.BossList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                BossCnt:%d,
-                                BossList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.BossCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCBossAttentionInfo=tagGCBossAttentionInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossAttentionInfo.Head.Cmd,m_NAtagGCBossAttentionInfo.Head.SubCmd))] = m_NAtagGCBossAttentionInfo
-
-
-#------------------------------------------------------
-# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo
-
-class  tagGCBossShuntLineState(Structure):
-    BossID = 0    #(DWORD BossID)// bossID
-    LineCount = 0    #(BYTE LineCount)
-    LineIDList = list()    #(vector<BYTE> LineIDList)// 线路ID列表
-    StateList = list()    #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.LineCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.LineIDList.append(value)
-        for i in range(self.LineCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.StateList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.BossID = 0
-        self.LineCount = 0
-        self.LineIDList = list()
-        self.StateList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += 1 * self.LineCount
-        length += 1 * self.LineCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.BossID)
-        data = CommFunc.WriteBYTE(data, self.LineCount)
-        for i in range(self.LineCount):
-            data = CommFunc.WriteBYTE(data, self.LineIDList[i])
-        for i in range(self.LineCount):
-            data = CommFunc.WriteBYTE(data, self.StateList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                BossID:%d,
-                                LineCount:%d,
-                                LineIDList:%s,
-                                StateList:%s
-                                '''\
-                                %(
-                                self.BossID,
-                                self.LineCount,
-                                "...",
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCBossShuntLineStateInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    BossLineStateInfo = list()    #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temBossLineStateInfo = tagGCBossShuntLineState()
-            _pos = temBossLineStateInfo.ReadData(_lpData, _pos)
-            self.BossLineStateInfo.append(temBossLineStateInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x01
-        self.Count = 0
-        self.BossLineStateInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.BossLineStateInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                BossLineStateInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo
-
-
-#------------------------------------------------------
-# A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice
-
-class  tagGCBourseItemPrice(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ItemID", c_int),    #物品ID
-                  ("Price", c_int),    #最新成交单价
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA9
-        self.SubCmd = 0xAC
-        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 = 0xA9
-        self.SubCmd = 0xAC
-        self.ItemID = 0
-        self.Price = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCBourseItemPrice)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 AC 交易所物品最新成交价通知 //tagGCBourseItemPrice:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ItemID:%d,
-                                Price:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ItemID,
-                                self.Price
-                                )
-        return DumpString
-
-
-m_NAtagGCBourseItemPrice=tagGCBourseItemPrice()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseItemPrice.Cmd,m_NAtagGCBourseItemPrice.SubCmd))] = m_NAtagGCBourseItemPrice
-
-
-#------------------------------------------------------
-# A9 AB 交易所交易记录通知 #tagGCBourseRecordInfo
-
-class  tagGCBourseRecord(Structure):
-    Type = 0    #(BYTE Type)//类型 0-购买 1-卖出
-    Timestamp = 0    #(DWORD Timestamp)//时间戳
-    TradeTax = 0    #(DWORD TradeTax)//交易税
-    TradeMoney = 0    #(DWORD TradeMoney)//收支
-    ItemDataLen = 0    #(WORD ItemDataLen)
-    ItemData = ""    #(String ItemData)//自定义数据
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Timestamp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TradeTax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TradeMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen)
-        return _pos
-
-    def Clear(self):
-        self.Type = 0
-        self.Timestamp = 0
-        self.TradeTax = 0
-        self.TradeMoney = 0
-        self.ItemDataLen = 0
-        self.ItemData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += len(self.ItemData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Type)
-        data = CommFunc.WriteDWORD(data, self.Timestamp)
-        data = CommFunc.WriteDWORD(data, self.TradeTax)
-        data = CommFunc.WriteDWORD(data, self.TradeMoney)
-        data = CommFunc.WriteWORD(data, self.ItemDataLen)
-        data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Type:%d,
-                                Timestamp:%d,
-                                TradeTax:%d,
-                                TradeMoney:%d,
-                                ItemDataLen:%d,
-                                ItemData:%s
-                                '''\
-                                %(
-                                self.Type,
-                                self.Timestamp,
-                                self.TradeTax,
-                                self.TradeMoney,
-                                self.ItemDataLen,
-                                self.ItemData
-                                )
-        return DumpString
-
-
-class  tagGCBourseRecordInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)//数量
-    RecordList = list()    #(vector<tagGCBourseRecord> RecordList)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xAB
-        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):
-            temRecordList = tagGCBourseRecord()
-            _pos = temRecordList.ReadData(_lpData, _pos)
-            self.RecordList.append(temRecordList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xAB
-        self.Count = 0
-        self.RecordList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.RecordList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                RecordList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCBourseRecordInfo=tagGCBourseRecordInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseRecordInfo.Head.Cmd,m_NAtagGCBourseRecordInfo.Head.SubCmd))] = m_NAtagGCBourseRecordInfo
-
-
-#------------------------------------------------------
-#A9 AA 删除邮件通知 #tagGCDelCompensationResult
-
-class  tagGCDelCompensationResult(Structure):
-    Head = tagHead()
-    GUID = ""    #(char GUID[40])
-    Result = 0    #(BYTE Result)// 删除状态 0  不成功  1成功
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xAA
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xAA
-        self.GUID = ""
-        self.Result = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 40
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 40, self.GUID)
-        data = CommFunc.WriteBYTE(data, self.Result)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                GUID:%s,
-                                Result:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.GUID,
-                                self.Result
-                                )
-        return DumpString
-
-
-m_NAtagGCDelCompensationResult=tagGCDelCompensationResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelCompensationResult.Head.Cmd,m_NAtagGCDelCompensationResult.Head.SubCmd))] = m_NAtagGCDelCompensationResult
-
-
-#------------------------------------------------------
-# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime
-
-class  tagDogzTimeInfoObj(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("NPCID", c_int),    # npcid
-                  ("RefreshSecond", c_int),    # 刷新倒计时, 秒
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.NPCID = 0
-        self.RefreshSecond = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagDogzTimeInfoObj)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime:
-                                NPCID:%d,
-                                RefreshSecond:%d
-                                '''\
-                                %(
-                                self.NPCID,
-                                self.RefreshSecond
-                                )
-        return DumpString
-
-
-class  tagGCDogzNPCRefreshTime(Structure):
-    Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)//信息个数
-    InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Cnt):
-            temInfoList = tagDogzTimeInfoObj()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x04
-        self.Cnt = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Cnt):
-            length += self.InfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Cnt)
-        for i in range(self.Cnt):
-            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Cnt:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Cnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime
-
-
-#------------------------------------------------------
-# A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo
-
-class  tagGCFriendSendEnergyInfo(Structure):
-    Head = tagHead()
-    DataSize = 0    #(DWORD DataSize)
-    SendData = ""    #(String SendData)//赠送记录
-    RecvSize = 0    #(DWORD RecvSize)
-    RecvData = ""    #(String RecvData)//可接收记录
-    HasRecvCnt = 0    #(DWORD HasRecvCnt)//已接收个数
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA9
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SendData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
-        self.RecvSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RecvData,_pos = CommFunc.ReadString(_lpData, _pos,self.RecvSize)
-        self.HasRecvCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA9
-        self.DataSize = 0
-        self.SendData = ""
-        self.RecvSize = 0
-        self.RecvData = ""
-        self.HasRecvCnt = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += len(self.SendData)
-        length += 4
-        length += len(self.RecvData)
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.SendData)
-        data = CommFunc.WriteDWORD(data, self.RecvSize)
-        data = CommFunc.WriteString(data, self.RecvSize, self.RecvData)
-        data = CommFunc.WriteDWORD(data, self.HasRecvCnt)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                DataSize:%d,
-                                SendData:%s,
-                                RecvSize:%d,
-                                RecvData:%s,
-                                HasRecvCnt:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.DataSize,
-                                self.SendData,
-                                self.RecvSize,
-                                self.RecvData,
-                                self.HasRecvCnt
-                                )
-        return DumpString
-
-
-m_NAtagGCFriendSendEnergyInfo=tagGCFriendSendEnergyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendSendEnergyInfo.Head.Cmd,m_NAtagGCFriendSendEnergyInfo.Head.SubCmd))] = m_NAtagGCFriendSendEnergyInfo
-
-
-#------------------------------------------------------
-#A9 02 世界boss相关信息 #tagGCGameWorldBossInfo
-
-class  tagBossInfoObj(Structure):
-    BossID = 0    #(DWORD BossID)// bossID
-    IsAlive = 0    #(BYTE IsAlive)// 是否存活
-    RecordLen = 0    #(WORD RecordLen)// 长度
-    KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
-    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒	
-    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒	
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.IsAlive,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen)
-        self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.BossID = 0
-        self.IsAlive = 0
-        self.RecordLen = 0
-        self.KillRecord = ""
-        self.RefreshSecond = 0
-        self.RefreshCD = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += 2
-        length += len(self.KillRecord)
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.BossID)
-        data = CommFunc.WriteBYTE(data, self.IsAlive)
-        data = CommFunc.WriteWORD(data, self.RecordLen)
-        data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord)
-        data = CommFunc.WriteDWORD(data, self.RefreshSecond)
-        data = CommFunc.WriteDWORD(data, self.RefreshCD)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                BossID:%d,
-                                IsAlive:%d,
-                                RecordLen:%d,
-                                KillRecord:%s,
-                                RefreshSecond:%d,
-                                RefreshCD:%d
-                                '''\
-                                %(
-                                self.BossID,
-                                self.IsAlive,
-                                self.RecordLen,
-                                self.KillRecord,
-                                self.RefreshSecond,
-                                self.RefreshCD
-                                )
-        return DumpString
-
-
-class  tagGCGameWorldBossInfo(Structure):
-    Head = tagHead()
-    BossCnt = 0    #(BYTE BossCnt)//boss信息个数
-    BossInfoList = list()    #(vector<tagBossInfoObj> BossInfoList)//boss信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x02
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BossCnt):
-            temBossInfoList = tagBossInfoObj()
-            _pos = temBossInfoList.ReadData(_lpData, _pos)
-            self.BossInfoList.append(temBossInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x02
-        self.BossCnt = 0
-        self.BossInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.BossCnt):
-            length += self.BossInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.BossCnt)
-        for i in range(self.BossCnt):
-            data = CommFunc.WriteString(data, self.BossInfoList[i].GetLength(), self.BossInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                BossCnt:%d,
-                                BossInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.BossCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCGameWorldBossInfo=tagGCGameWorldBossInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGameWorldBossInfo.Head.Cmd,m_NAtagGCGameWorldBossInfo.Head.SubCmd))] = m_NAtagGCGameWorldBossInfo
-
-
-#------------------------------------------------------
-# A9 08 渡劫副本护法通知 #tagGCRealmFBHelpInfo
-
-class  tagGCRealmFBHelpInfo(Structure):
-    Head = tagHead()
-    PlayerName = ""    #(char PlayerName[33])//玩家名字
-    PlayerID = 0    #(DWORD PlayerID)//玩家ID
-    RealmLV = 0    #(BYTE RealmLV)//玩家境界
-    Job = 0    #(BYTE Job)//玩家职业
-    JobRank = 0    #(BYTE JobRank)//玩家职业阶级
-    AtkAdd = 0    #(BYTE AtkAdd)//获得加成
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.JobRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AtkAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x08
-        self.PlayerName = ""
-        self.PlayerID = 0
-        self.RealmLV = 0
-        self.Job = 0
-        self.JobRank = 0
-        self.AtkAdd = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 33
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.RealmLV)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteBYTE(data, self.JobRank)
-        data = CommFunc.WriteBYTE(data, self.AtkAdd)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerName:%s,
-                                PlayerID:%d,
-                                RealmLV:%d,
-                                Job:%d,
-                                JobRank:%d,
-                                AtkAdd:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerName,
-                                self.PlayerID,
-                                self.RealmLV,
-                                self.Job,
-                                self.JobRank,
-                                self.AtkAdd
-                                )
-        return DumpString
-
-
-m_NAtagGCRealmFBHelpInfo=tagGCRealmFBHelpInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRealmFBHelpInfo.Head.Cmd,m_NAtagGCRealmFBHelpInfo.Head.SubCmd))] = m_NAtagGCRealmFBHelpInfo
-
-
-#------------------------------------------------------
-# A9 A7 通知可抢的红包信息 #tagGCGrabRedPacketInfo
-
-class  tagGCGrabRedPacketInfo(Structure):
-    Head = tagHead()
-    RedPacketCnt = 0    #(DWORD RedPacketCnt)//可抢红包个数
-    StrLen = 0    #(WORD StrLen)//字符串长度
-    OwnerName = ""    #(String OwnerName)//红包主人名字
-    RedPacketID = 0    #(DWORD RedPacketID)//可抢红包ID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA7
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RedPacketCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen)
-        self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA7
-        self.RedPacketCnt = 0
-        self.StrLen = 0
-        self.OwnerName = ""
-        self.RedPacketID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 2
-        length += len(self.OwnerName)
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.RedPacketCnt)
-        data = CommFunc.WriteWORD(data, self.StrLen)
-        data = CommFunc.WriteString(data, self.StrLen, self.OwnerName)
-        data = CommFunc.WriteDWORD(data, self.RedPacketID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RedPacketCnt:%d,
-                                StrLen:%d,
-                                OwnerName:%s,
-                                RedPacketID:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RedPacketCnt,
-                                self.StrLen,
-                                self.OwnerName,
-                                self.RedPacketID
-                                )
-        return DumpString
-
-
-m_NAtagGCGrabRedPacketInfo=tagGCGrabRedPacketInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketInfo.Head.Cmd,m_NAtagGCGrabRedPacketInfo.Head.SubCmd))] = m_NAtagGCGrabRedPacketInfo
-
-
-#------------------------------------------------------
-# A9 A6 通知抢红包结果 #tagGCGrabRedPacketResult
-
-class  tagGCGrabRedPacketResult(Structure):
-    Head = tagHead()
-    StrLen = 0    #(WORD StrLen)//字符串长度
-    OwnerName = ""    #(String OwnerName)//红包主人名字
-    TotalMoney = 0    #(DWORD TotalMoney)//红包总额
-    DataSize = 0    #(DWORD DataSize)
-    GrabInfo = ""    #(String GrabInfo)//抢红包具体结果
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA6
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen)
-        self.TotalMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GrabInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA6
-        self.StrLen = 0
-        self.OwnerName = ""
-        self.TotalMoney = 0
-        self.DataSize = 0
-        self.GrabInfo = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += len(self.OwnerName)
-        length += 4
-        length += 4
-        length += len(self.GrabInfo)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.StrLen)
-        data = CommFunc.WriteString(data, self.StrLen, self.OwnerName)
-        data = CommFunc.WriteDWORD(data, self.TotalMoney)
-        data = CommFunc.WriteDWORD(data, self.DataSize)
-        data = CommFunc.WriteString(data, self.DataSize, self.GrabInfo)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StrLen:%d,
-                                OwnerName:%s,
-                                TotalMoney:%d,
-                                DataSize:%d,
-                                GrabInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StrLen,
-                                self.OwnerName,
-                                self.TotalMoney,
-                                self.DataSize,
-                                self.GrabInfo
-                                )
-        return DumpString
-
-
-m_NAtagGCGrabRedPacketResult=tagGCGrabRedPacketResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketResult.Head.Cmd,m_NAtagGCGrabRedPacketResult.Head.SubCmd))] = m_NAtagGCGrabRedPacketResult
-
-
-#------------------------------------------------------
-# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo
-
-class  tagGCNotifyEquipClassEquip(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("ItemID", c_int),    
-                  ("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.ItemID = 0
-        self.Star = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCNotifyEquipClassEquip)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo:
-                                ItemID:%d,
-                                Star:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.Star
-                                )
-        return DumpString
-
-
-class  tagGCNotifyEquipDetailInfo(Structure):
-    Head = tagHead()
-    ItemGUID = ""    #(char ItemGUID[40])
-    ItemID = 0    #(DWORD ItemID)
-    Star = 0    #(BYTE Star)//星级
-    PlusLV = 0    #(WORD PlusLV)//强化等级
-    EvolveLV = 0    #(BYTE EvolveLV)//进化等级
-    WashLV = 0    #(BYTE WashLV)//洗练等级
-    WashValueCount = 0    #(BYTE WashValueCount)
-    WashValueList = list()    #(vector<DWORD> WashValueList)//洗练值
-    StoneIDCount = 0    #(BYTE StoneIDCount)
-    StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
-    ClassEquipCount = 0    #(BYTE ClassEquipCount)
-    ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x05
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.WashValueCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.WashValueList.append(value)
-        self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.StoneIDCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.StoneIDList.append(value)
-        self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ClassEquipCount):
-            temClassEquipList = tagGCNotifyEquipClassEquip()
-            _pos = temClassEquipList.ReadData(_lpData, _pos)
-            self.ClassEquipList.append(temClassEquipList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x05
-        self.ItemGUID = ""
-        self.ItemID = 0
-        self.Star = 0
-        self.PlusLV = 0
-        self.EvolveLV = 0
-        self.WashLV = 0
-        self.WashValueCount = 0
-        self.WashValueList = list()
-        self.StoneIDCount = 0
-        self.StoneIDList = list()
-        self.ClassEquipCount = 0
-        self.ClassEquipList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 40
-        length += 4
-        length += 1
-        length += 2
-        length += 1
-        length += 1
-        length += 1
-        length += 4 * self.WashValueCount
-        length += 1
-        length += 4 * self.StoneIDCount
-        length += 1
-        for i in range(self.ClassEquipCount):
-            length += self.ClassEquipList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteBYTE(data, self.Star)
-        data = CommFunc.WriteWORD(data, self.PlusLV)
-        data = CommFunc.WriteBYTE(data, self.EvolveLV)
-        data = CommFunc.WriteBYTE(data, self.WashLV)
-        data = CommFunc.WriteBYTE(data, self.WashValueCount)
-        for i in range(self.WashValueCount):
-            data = CommFunc.WriteDWORD(data, self.WashValueList[i])
-        data = CommFunc.WriteBYTE(data, self.StoneIDCount)
-        for i in range(self.StoneIDCount):
-            data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
-        data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
-        for i in range(self.ClassEquipCount):
-            data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ItemGUID:%s,
-                                ItemID:%d,
-                                Star:%d,
-                                PlusLV:%d,
-                                EvolveLV:%d,
-                                WashLV:%d,
-                                WashValueCount:%d,
-                                WashValueList:%s,
-                                StoneIDCount:%d,
-                                StoneIDList:%s,
-                                ClassEquipCount:%d,
-                                ClassEquipList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ItemGUID,
-                                self.ItemID,
-                                self.Star,
-                                self.PlusLV,
-                                self.EvolveLV,
-                                self.WashLV,
-                                self.WashValueCount,
-                                "...",
-                                self.StoneIDCount,
-                                "...",
-                                self.ClassEquipCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
-
-
-#------------------------------------------------------
-#A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount
-
-class  tagGCOpenServerCampaignAwardCount(Structure):
-    Head = tagHead()
-    CampaignType = 0    #(BYTE CampaignType)//奖励类型
-    AwardTypeCount = 0    #(BYTE AwardTypeCount)//奖品种类数量
-    GotCountList = list()    #(vector<DWORD> GotCountList)//奖品已领取数量列表,根据种类索引依次
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.CampaignType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AwardTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardTypeCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.GotCountList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x03
-        self.CampaignType = 0
-        self.AwardTypeCount = 0
-        self.GotCountList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 4 * self.AwardTypeCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.CampaignType)
-        data = CommFunc.WriteBYTE(data, self.AwardTypeCount)
-        for i in range(self.AwardTypeCount):
-            data = CommFunc.WriteDWORD(data, self.GotCountList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                CampaignType:%d,
-                                AwardTypeCount:%d,
-                                GotCountList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.CampaignType,
-                                self.AwardTypeCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCOpenServerCampaignAwardCount=tagGCOpenServerCampaignAwardCount()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCOpenServerCampaignAwardCount.Head.Cmd,m_NAtagGCOpenServerCampaignAwardCount.Head.SubCmd))] = m_NAtagGCOpenServerCampaignAwardCount
-
-
-#------------------------------------------------------
-# A9 A2 排行榜信息#tagPYBillboardData
-
-class  tagPYBillboardInfo(Structure):
-    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
-    ID = 0    #(DWORD ID)
-    ID2 = 0    #(DWORD ID2)
-    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
-    Name2 = ""    #(char Name2[65])//名字2
-    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
-    Value1 = 0    #(DWORD Value1)//排序依赖的值,比如,等级
-    Value2 = 0    #(DWORD Value2)//排序依赖的值,比如,战斗力
-    Value3 = 0    #(DWORD Value3)//附加值
-    Value4 = 0    #(DWORD Value4)//附加值
-    Value5 = 0    #(DWORD Value5)//附加值
-    Value6 = 0    #(DWORD Value6)//附加值
-    Value7 = 0    #(DWORD Value7)//附加值
-    Value8 = 0    #(DWORD Value8)//附加值
-    CmpValue = 0    #(DWORD CmpValue)// 比较权值
-    CmpValue2 = 0    #(DWORD CmpValue2)// 比较权值
-    CmpValue3 = 0    #(DWORD CmpValue3)// 比较权值
-    DataLen = 0    #(WORD DataLen)
-    UserData = ""    #(String UserData)//附加
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        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,65)
-        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
-        return _pos
-
-    def Clear(self):
-        self.OrderIndex = 0
-        self.ID = 0
-        self.ID2 = 0
-        self.Name1 = ""
-        self.Name2 = ""
-        self.Type2 = 0
-        self.Value1 = 0
-        self.Value2 = 0
-        self.Value3 = 0
-        self.Value4 = 0
-        self.Value5 = 0
-        self.Value6 = 0
-        self.Value7 = 0
-        self.Value8 = 0
-        self.CmpValue = 0
-        self.CmpValue2 = 0
-        self.CmpValue3 = 0
-        self.DataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 33
-        length += 65
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.OrderIndex)
-        data = CommFunc.WriteDWORD(data, self.ID)
-        data = CommFunc.WriteDWORD(data, self.ID2)
-        data = CommFunc.WriteString(data, 33, self.Name1)
-        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)
-        data = CommFunc.WriteDWORD(data, self.Value3)
-        data = CommFunc.WriteDWORD(data, self.Value4)
-        data = CommFunc.WriteDWORD(data, self.Value5)
-        data = CommFunc.WriteDWORD(data, self.Value6)
-        data = CommFunc.WriteDWORD(data, self.Value7)
-        data = CommFunc.WriteDWORD(data, self.Value8)
-        data = CommFunc.WriteDWORD(data, self.CmpValue)
-        data = CommFunc.WriteDWORD(data, self.CmpValue2)
-        data = CommFunc.WriteDWORD(data, self.CmpValue3)
-        data = CommFunc.WriteWORD(data, self.DataLen)
-        data = CommFunc.WriteString(data, self.DataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                OrderIndex:%d,
-                                ID:%d,
-                                ID2:%d,
-                                Name1:%s,
-                                Name2:%s,
-                                Type2:%d,
-                                Value1:%d,
-                                Value2:%d,
-                                Value3:%d,
-                                Value4:%d,
-                                Value5:%d,
-                                Value6:%d,
-                                Value7:%d,
-                                Value8:%d,
-                                CmpValue:%d,
-                                CmpValue2:%d,
-                                CmpValue3:%d,
-                                DataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.OrderIndex,
-                                self.ID,
-                                self.ID2,
-                                self.Name1,
-                                self.Name2,
-                                self.Type2,
-                                self.Value1,
-                                self.Value2,
-                                self.Value3,
-                                self.Value4,
-                                self.Value5,
-                                self.Value6,
-                                self.Value7,
-                                self.Value8,
-                                self.CmpValue,
-                                self.CmpValue2,
-                                self.CmpValue3,
-                                self.DataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagPYBillboardData(Structure):
-    Head = tagHead()
-    WatchID = 0    #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
-    BillboardCount = 0    #(BYTE BillboardCount)
-    Type = 0    #(BYTE Type)//排行榜类型
-    Billboard = list()    #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA2
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BillboardCount):
-            temBillboard = tagPYBillboardInfo()
-            _pos = temBillboard.ReadData(_lpData, _pos)
-            self.Billboard.append(temBillboard)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA2
-        self.WatchID = 0
-        self.BillboardCount = 0
-        self.Type = 0
-        self.Billboard = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 1
-        for i in range(self.BillboardCount):
-            length += self.Billboard[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.WatchID)
-        data = CommFunc.WriteBYTE(data, self.BillboardCount)
-        data = CommFunc.WriteBYTE(data, self.Type)
-        for i in range(self.BillboardCount):
-            data = CommFunc.WriteString(data, self.Billboard[i].GetLength(), self.Billboard[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                WatchID:%d,
-                                BillboardCount:%d,
-                                Type:%d,
-                                Billboard:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.WatchID,
-                                self.BillboardCount,
-                                self.Type,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagPYBillboardData=tagPYBillboardData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPYBillboardData.Head.Cmd,m_NAtagPYBillboardData.Head.SubCmd))] = m_NAtagPYBillboardData
-
-
-#------------------------------------------------------
-# A9 A3 喇叭聊天内容 #tagGCPYSpeakerContent
-
-class  tagGCPYSpeakerContent(Structure):
-    Head = tagHead()
-    AccIDLen = 0    #(BYTE AccIDLen)
-    AccID = ""    #(String AccID)//size = AccIDLen
-    PlayerID = 0    #(DWORD PlayerID)// 子服的玩家ID,该ID有值时为本服玩家
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)//size = NameLen
-    SpeakerType = 0    #(BYTE SpeakerType)
-    TextLen = 0    #(WORD TextLen)
-    Text = ""    #(String Text)//size = TextLen
-    ExtraValue = 0    #(DWORD ExtraValue)//附加值
-    Extras = ""    #(char Extras[256])//附加值列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA3
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
-        self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA3
-        self.AccIDLen = 0
-        self.AccID = ""
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.SpeakerType = 0
-        self.TextLen = 0
-        self.Text = ""
-        self.ExtraValue = 0
-        self.Extras = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.AccID)
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 1
-        length += 2
-        length += len(self.Text)
-        length += 4
-        length += 256
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AccIDLen)
-        data = CommFunc.WriteString(data, self.AccIDLen, self.AccID)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteBYTE(data, self.SpeakerType)
-        data = CommFunc.WriteWORD(data, self.TextLen)
-        data = CommFunc.WriteString(data, self.TextLen, self.Text)
-        data = CommFunc.WriteDWORD(data, self.ExtraValue)
-        data = CommFunc.WriteString(data, 256, self.Extras)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AccIDLen:%d,
-                                AccID:%s,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                SpeakerType:%d,
-                                TextLen:%d,
-                                Text:%s,
-                                ExtraValue:%d,
-                                Extras:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AccIDLen,
-                                self.AccID,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.SpeakerType,
-                                self.TextLen,
-                                self.Text,
-                                self.ExtraValue,
-                                self.Extras
-                                )
-        return DumpString
-
-
-m_NAtagGCPYSpeakerContent=tagGCPYSpeakerContent()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPYSpeakerContent.Head.Cmd,m_NAtagGCPYSpeakerContent.Head.SubCmd))] = m_NAtagGCPYSpeakerContent
-
-
-#------------------------------------------------------
-#A9 A1 查询玩家补偿结果封包#tagGCQueryCompensationResult
-
-class  tagGCCompensationItem(Structure):
-    ItemID = 0    #(DWORD ItemID)//物品ID
-    Count = 0    #(DWORD Count)//数量
-    IsBind = 0    #(BYTE IsBind)//是否绑定
-    UserDataLen = 0    #(DWORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据	
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.ItemID = 0
-        self.Count = 0
-        self.IsBind = 0
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 1
-        length += 4
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteDWORD(data, self.Count)
-        data = CommFunc.WriteBYTE(data, self.IsBind)
-        data = CommFunc.WriteDWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemID:%d,
-                                Count:%d,
-                                IsBind:%d,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.Count,
-                                self.IsBind,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagGCCompensationPack(Structure):
-    GUID = ""    #(char GUID[40])//补偿标识
-    CreateTime = ""    #(char CreateTime[30])//邮件接收时间
-    TextLen = 0    #(DWORD TextLen)//文字内容长度
-    Text = ""    #(String Text)//文字内容
-    Count = 0    #(BYTE Count)//当前补偿物品数
-    IsRead = 0    #(BYTE IsRead)//已读状态 0 未读取 1已读取
-    Gold = 0    #(DWORD Gold)//仙玉
-    GoldPaper = 0    #(DWORD GoldPaper)//绑定仙玉
-    Silver = 0    #(DWORD Silver)//铜钱
-    Items = list()    #(vector<tagGCCompensationItem> Items)//补偿物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
-        self.TextLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.IsRead,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temItems = tagGCCompensationItem()
-            _pos = temItems.ReadData(_lpData, _pos)
-            self.Items.append(temItems)
-        return _pos
-
-    def Clear(self):
-        self.GUID = ""
-        self.CreateTime = ""
-        self.TextLen = 0
-        self.Text = ""
-        self.Count = 0
-        self.IsRead = 0
-        self.Gold = 0
-        self.GoldPaper = 0
-        self.Silver = 0
-        self.Items = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 30
-        length += 4
-        length += len(self.Text)
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        for i in range(self.Count):
-            length += self.Items[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.GUID)
-        data = CommFunc.WriteString(data, 30, self.CreateTime)
-        data = CommFunc.WriteDWORD(data, self.TextLen)
-        data = CommFunc.WriteString(data, self.TextLen, self.Text)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        data = CommFunc.WriteBYTE(data, self.IsRead)
-        data = CommFunc.WriteDWORD(data, self.Gold)
-        data = CommFunc.WriteDWORD(data, self.GoldPaper)
-        data = CommFunc.WriteDWORD(data, self.Silver)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                GUID:%s,
-                                CreateTime:%s,
-                                TextLen:%d,
-                                Text:%s,
-                                Count:%d,
-                                IsRead:%d,
-                                Gold:%d,
-                                GoldPaper:%d,
-                                Silver:%d,
-                                Items:%s
-                                '''\
-                                %(
-                                self.GUID,
-                                self.CreateTime,
-                                self.TextLen,
-                                self.Text,
-                                self.Count,
-                                self.IsRead,
-                                self.Gold,
-                                self.GoldPaper,
-                                self.Silver,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCQueryCompensationResult(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)//可领取补偿数
-    PackList = list()    #(vector<tagGCCompensationPack> PackList)//补偿物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA1
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temPackList = tagGCCompensationPack()
-            _pos = temPackList.ReadData(_lpData, _pos)
-            self.PackList.append(temPackList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA1
-        self.Count = 0
-        self.PackList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.PackList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.PackList[i].GetLength(), self.PackList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                PackList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCQueryCompensationResult=tagGCQueryCompensationResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryCompensationResult.Head.Cmd,m_NAtagGCQueryCompensationResult.Head.SubCmd))] = m_NAtagGCQueryCompensationResult
-
-
-#------------------------------------------------------
-# A9 A8 通知可添加的好友信息 #tagGCRecommendFriendsInfo
-
-class  tagRecommendFriendsData(Structure):
-    ID = 0    #(DWORD ID)
-    Name = ""    #(char Name[33])
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        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):
-        self.ID = 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 += 33
-        length += 4
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.ID)
-        data = CommFunc.WriteString(data, 33, self.Name)
-        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):
-        DumpString = '''
-                                ID:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.ID,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCRecommendFriendsInfo(Structure):
-    Head = tagHead()
-    Cnt = 0    #(BYTE Cnt)//信息数
-    FriendsList = list()    #(vector<tagRecommendFriendsData> FriendsList)//成员信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA8
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Cnt):
-            temFriendsList = tagRecommendFriendsData()
-            _pos = temFriendsList.ReadData(_lpData, _pos)
-            self.FriendsList.append(temFriendsList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xA8
-        self.Cnt = 0
-        self.FriendsList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Cnt):
-            length += self.FriendsList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Cnt)
-        for i in range(self.Cnt):
-            data = CommFunc.WriteString(data, self.FriendsList[i].GetLength(), self.FriendsList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Cnt:%d,
-                                FriendsList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Cnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCRecommendFriendsInfo=tagGCRecommendFriendsInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendFriendsInfo.Head.Cmd,m_NAtagGCRecommendFriendsInfo.Head.SubCmd))] = m_NAtagGCRecommendFriendsInfo
-
-
-#------------------------------------------------------
-# A9 AD 通知天星塔全服奖励通关玩家信息 #tagGCSkyTowerPassPlayerInfo
-
-class  tagGCSkyTowerPassPlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    PlayerName = ""    #(char PlayerName[33])
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        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.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):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCSkyTowerPassFloor(Structure):
-    FloorID = 0    #(DWORD FloorID)// 层ID
-    PassPlayerCount = 0    #(BYTE PassPlayerCount)// 通关记录玩家数
-    PassPlayerIDList = list()    #(vector<DWORD> PassPlayerIDList)// 通关记录玩家ID列表 [第1个通过玩家ID, 第2个, ...]
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.FloorID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PassPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PassPlayerCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.PassPlayerIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.FloorID = 0
-        self.PassPlayerCount = 0
-        self.PassPlayerIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += 4 * self.PassPlayerCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.FloorID)
-        data = CommFunc.WriteBYTE(data, self.PassPlayerCount)
-        for i in range(self.PassPlayerCount):
-            data = CommFunc.WriteDWORD(data, self.PassPlayerIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                FloorID:%d,
-                                PassPlayerCount:%d,
-                                PassPlayerIDList:%s
-                                '''\
-                                %(
-                                self.FloorID,
-                                self.PassPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCSkyTowerPassPlayerInfo(Structure):
-    Head = tagHead()
-    FloorCount = 0    #(WORD FloorCount)
-    PassFloorList = list()    #(vector<tagGCSkyTowerPassFloor> PassFloorList)// 通关塔层信息列表
-    PlayerCount = 0    #(WORD PlayerCount)
-    PassPlayerList = list()    #(vector<tagGCSkyTowerPassPlayer> PassPlayerList)// 通关玩家信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xAD
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FloorCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.FloorCount):
-            temPassFloorList = tagGCSkyTowerPassFloor()
-            _pos = temPassFloorList.ReadData(_lpData, _pos)
-            self.PassFloorList.append(temPassFloorList)
-        self.PlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.PlayerCount):
-            temPassPlayerList = tagGCSkyTowerPassPlayer()
-            _pos = temPassPlayerList.ReadData(_lpData, _pos)
-            self.PassPlayerList.append(temPassPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0xAD
-        self.FloorCount = 0
-        self.PassFloorList = list()
-        self.PlayerCount = 0
-        self.PassPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.FloorCount):
-            length += self.PassFloorList[i].GetLength()
-        length += 2
-        for i in range(self.PlayerCount):
-            length += self.PassPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.FloorCount)
-        for i in range(self.FloorCount):
-            data = CommFunc.WriteString(data, self.PassFloorList[i].GetLength(), self.PassFloorList[i].GetBuffer())
-        data = CommFunc.WriteWORD(data, self.PlayerCount)
-        for i in range(self.PlayerCount):
-            data = CommFunc.WriteString(data, self.PassPlayerList[i].GetLength(), self.PassPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FloorCount:%d,
-                                PassFloorList:%s,
-                                PlayerCount:%d,
-                                PassPlayerList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FloorCount,
-                                "...",
-                                self.PlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCSkyTowerPassPlayerInfo=tagGCSkyTowerPassPlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSkyTowerPassPlayerInfo.Head.Cmd,m_NAtagGCSkyTowerPassPlayerInfo.Head.SubCmd))] = m_NAtagGCSkyTowerPassPlayerInfo
-
-
-#------------------------------------------------------
-# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo
-
-class  tagGCStoreServerBuyCnt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("GoodsID", c_int),    #商品标识
-                  ("BuyCnt", c_int),    #购买次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.GoodsID = 0
-        self.BuyCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCStoreServerBuyCnt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo:
-                                GoodsID:%d,
-                                BuyCnt:%d
-                                '''\
-                                %(
-                                self.GoodsID,
-                                self.BuyCnt
-                                )
-        return DumpString
-
-
-class  tagGCStoreServerBuyCntInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)//数量
-    InfoList = list()    #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x06
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temInfoList = tagGCStoreServerBuyCnt()
-            _pos = temInfoList.ReadData(_lpData, _pos)
-            self.InfoList.append(temInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA9
-        self.Head.SubCmd = 0x06
-        self.Count = 0
-        self.InfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.InfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                InfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
-
-
-#------------------------------------------------------
-#A9 21 角色改名结果 #tagUpdatePlayerNameResult
-
-class  tagUpdatePlayerNameResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Result", c_ubyte),    #角色改名结果
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA9
-        self.SubCmd = 0x21
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xA9
-        self.SubCmd = 0x21
-        self.Result = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagUpdatePlayerNameResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//A9 21 角色改名结果 //tagUpdatePlayerNameResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Result:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Result
-                                )
-        return DumpString
-
-
-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
-
-
-#------------------------------------------------------
-# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList
-
-class  tagGCFamilyBossHurtInfo(Structure):
-    NPCID = 0    #(DWORD NPCID)
-    CurHP = 0    #(DWORD CurHP)
-    CurHPEx = 0    #(DWORD CurHPEx)
-    MaxHP = 0    #(DWORD MaxHP)
-    MaxHPEx = 0    #(DWORD MaxHPEx)
-    FamilyID = 0    #(DWORD FamilyID)// 最大实时伤血仙盟
-    NameLen = 0    #(BYTE NameLen)
-    FamilyName = ""    #(String FamilyName)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        return _pos
-
-    def Clear(self):
-        self.NPCID = 0
-        self.CurHP = 0
-        self.CurHPEx = 0
-        self.MaxHP = 0
-        self.MaxHPEx = 0
-        self.FamilyID = 0
-        self.NameLen = 0
-        self.FamilyName = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.FamilyName)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.NPCID)
-        data = CommFunc.WriteDWORD(data, self.CurHP)
-        data = CommFunc.WriteDWORD(data, self.CurHPEx)
-        data = CommFunc.WriteDWORD(data, self.MaxHP)
-        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.FamilyName)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NPCID:%d,
-                                CurHP:%d,
-                                CurHPEx:%d,
-                                MaxHP:%d,
-                                MaxHPEx:%d,
-                                FamilyID:%d,
-                                NameLen:%d,
-                                FamilyName:%s
-                                '''\
-                                %(
-                                self.NPCID,
-                                self.CurHP,
-                                self.CurHPEx,
-                                self.MaxHP,
-                                self.MaxHPEx,
-                                self.FamilyID,
-                                self.NameLen,
-                                self.FamilyName
-                                )
-        return DumpString
-
-
-class  tagGCAllFamilyBossHurtInfoList(Structure):
-    Head = tagHead()
-    NPCCount = 0    #(BYTE NPCCount)// 个数
-    NPCHurtInfo = list()    #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x10
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.NPCCount):
-            temNPCHurtInfo = tagGCFamilyBossHurtInfo()
-            _pos = temNPCHurtInfo.ReadData(_lpData, _pos)
-            self.NPCHurtInfo.append(temNPCHurtInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x10
-        self.NPCCount = 0
-        self.NPCHurtInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.NPCCount):
-            length += self.NPCHurtInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.NPCCount)
-        for i in range(self.NPCCount):
-            data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                NPCCount:%d,
-                                NPCHurtInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.NPCCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList
-
-
-#------------------------------------------------------
-# AC 08 boss复活点数通知 #tagGCBossRebornPoint
-
-class  tagGCBossRebornPoint(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("Point", c_int),    # 复活点数
-                  ("TotalPoint", c_int),    # 复活总点数
-                  ("RebornCnt", c_ushort),    # 今日已复活次数
-                  ("TotalRebornCnt", c_ushort),    # 每日可复活总次数,0为不限制
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x08
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAC
-        self.SubCmd = 0x08
-        self.Point = 0
-        self.TotalPoint = 0
-        self.RebornCnt = 0
-        self.TotalRebornCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCBossRebornPoint)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                Point:%d,
-                                TotalPoint:%d,
-                                RebornCnt:%d,
-                                TotalRebornCnt:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.Point,
-                                self.TotalPoint,
-                                self.RebornCnt,
-                                self.TotalRebornCnt
-                                )
-        return DumpString
-
-
-m_NAtagGCBossRebornPoint=tagGCBossRebornPoint()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint
-
-
-#------------------------------------------------------
-# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
-
-class  tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagGCCrossActAllRechargeAward(Structure):
-    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
-    NeedRMB = 0    #(DWORD NeedRMB)// 所需全民充值RMB
-    NeedPlayerCount = 0    #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
-    NowPlayerCount = 0    #(WORD NowPlayerCount)// 当前充值达到该档玩家数
-    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
-    AwardItemList = list()    #(vector<tagGCCrossActAllRechargeItem> 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.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardItemCount):
-            temAwardItemList = tagGCCrossActAllRechargeItem()
-            _pos = temAwardItemList.ReadData(_lpData, _pos)
-            self.AwardItemList.append(temAwardItemList)
-        return _pos
-
-    def Clear(self):
-        self.AwardIndex = 0
-        self.NeedRMB = 0
-        self.NeedPlayerCount = 0
-        self.NowPlayerCount = 0
-        self.AwardItemCount = 0
-        self.AwardItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 2
-        length += 2
-        length += 1
-        for i in range(self.AwardItemCount):
-            length += self.AwardItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.AwardIndex)
-        data = CommFunc.WriteDWORD(data, self.NeedRMB)
-        data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
-        data = CommFunc.WriteWORD(data, self.NowPlayerCount)
-        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
-        for i in range(self.AwardItemCount):
-            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AwardIndex:%d,
-                                NeedRMB:%d,
-                                NeedPlayerCount:%d,
-                                NowPlayerCount:%d,
-                                AwardItemCount:%d,
-                                AwardItemList:%s
-                                '''\
-                                %(
-                                self.AwardIndex,
-                                self.NeedRMB,
-                                self.NeedPlayerCount,
-                                self.NowPlayerCount,
-                                self.AwardItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCCrossActAllRechargeInfo(Structure):
-    Head = tagHead()
-    ServerInfoLen = 0    #(BYTE ServerInfoLen)
-    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    AwardCount = 0    #(BYTE AwardCount)
-    AwardList = list()    #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
-        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AwardCount):
-            temAwardList = tagGCCrossActAllRechargeAward()
-            _pos = temAwardList.ReadData(_lpData, _pos)
-            self.AwardList.append(temAwardList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x13
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.AwardCount = 0
-        self.AwardList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 10
-        length += 10
-        length += 1
-        for i in range(self.AwardCount):
-            length += self.AwardList[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.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.AwardCount)
-        for i in range(self.AwardCount):
-            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                AwardCount:%d,
-                                AwardList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.AwardCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
-
-
-#------------------------------------------------------
-# AC 12 跨服运营活动结束 # tagGCCrossActEnd
-
-class  tagGCCrossActEnd(Structure):
-    Head = tagHead()
-    ActNameLen = 0    #(BYTE ActNameLen)
-    ActName = ""    #(String ActName)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ActName,_pos = CommFunc.ReadString(_lpData, _pos,self.ActNameLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x12
-        self.ActNameLen = 0
-        self.ActName = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ActName)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ActNameLen)
-        data = CommFunc.WriteString(data, self.ActNameLen, self.ActName)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActNameLen:%d,
-                                ActName:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActNameLen,
-                                self.ActName
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossActEnd=tagGCCrossActEnd()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActEnd.Head.Cmd,m_NAtagGCCrossActEnd.Head.SubCmd))] = m_NAtagGCCrossActEnd
-
-
-#------------------------------------------------------
-# AC 09 仙界盛典活动信息 #tagGCFairyCeremonyInfo
-
-class  tagGCFairyCeremonyInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    WorldLV = 0    #(WORD WorldLV)// 世界等级
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x09
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x09
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.WorldLV = 0
-        self.LimitLV = 0
-        self.ResetType = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 2
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.WorldLV)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.ResetType)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                WorldLV:%d,
-                                LimitLV:%d,
-                                ResetType:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.WorldLV,
-                                self.LimitLV,
-                                self.ResetType
-                                )
-        return DumpString
-
-
-m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo
-
-
-#------------------------------------------------------
-# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo
-
-class  tagGCFamilyWarInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("WorldLV", c_ushort),    # 当前进行中的联赛世界等级
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x01
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAC
-        self.SubCmd = 0x01
-        self.WorldLV = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyWarInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                WorldLV:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.WorldLV
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo
-
-
-#------------------------------------------------------
-# AC 11 节日红包活动信息 #tagGCFeastRedPacketInfo
-
-class  tagGCFeastRedPacketDay(Structure):
-    RedPacketCount = 0    #(BYTE RedPacketCount)
-    RedPacketIDList = list()    #(vector<WORD> RedPacketIDList)// 当日定时发放的系统红包表ID列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.RedPacketCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RedPacketCount):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.RedPacketIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.RedPacketCount = 0
-        self.RedPacketIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 2 * self.RedPacketCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.RedPacketCount)
-        for i in range(self.RedPacketCount):
-            data = CommFunc.WriteWORD(data, self.RedPacketIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                RedPacketCount:%d,
-                                RedPacketIDList:%s
-                                '''\
-                                %(
-                                self.RedPacketCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCFeastRedPacketInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
-    RedPacketDays = 0    #(BYTE RedPacketDays)
-    RedPacketDayList = list()    #(vector<tagGCFeastRedPacketDay> RedPacketDayList)// 每日系统红包信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x11
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RedPacketDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RedPacketDays):
-            temRedPacketDayList = tagGCFeastRedPacketDay()
-            _pos = temRedPacketDayList.ReadData(_lpData, _pos)
-            self.RedPacketDayList.append(temRedPacketDayList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x11
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.LimitLV = 0
-        self.ResetType = 0
-        self.RedPacketDays = 0
-        self.RedPacketDayList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 1
-        length += 1
-        for i in range(self.RedPacketDays):
-            length += self.RedPacketDayList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.ResetType)
-        data = CommFunc.WriteBYTE(data, self.RedPacketDays)
-        for i in range(self.RedPacketDays):
-            data = CommFunc.WriteString(data, self.RedPacketDayList[i].GetLength(), self.RedPacketDayList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                LimitLV:%d,
-                                ResetType:%d,
-                                RedPacketDays:%d,
-                                RedPacketDayList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.LimitLV,
-                                self.ResetType,
-                                self.RedPacketDays,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFeastRedPacketInfo=tagGCFeastRedPacketInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFeastRedPacketInfo.Head.Cmd,m_NAtagGCFeastRedPacketInfo.Head.SubCmd))] = m_NAtagGCFeastRedPacketInfo
-
-
-#------------------------------------------------------
-# AC 02 通知仙魔之争信息 #tagGCXMZZInfo
-
-class  tagGCXMZZInfo(Structure):
-    Head = tagHead()
-    Len = 0    #(WORD Len)
-    StageRecord = ""    #(String StageRecord)// 阶段胜负记录
-    Score1 = 0    #(DWORD Score1)// 仙界阵营积分
-    Score2 = 0    #(DWORD Score2)// 魔界阵营积分
-    TopScore = 0    #(DWORD TopScore)// 积分第1名积分
-    TopName = ""    #(char TopName[33])// 积分第1名名字
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x02
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.StageRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
-        self.Score1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Score2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TopScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TopName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x02
-        self.Len = 0
-        self.StageRecord = ""
-        self.Score1 = 0
-        self.Score2 = 0
-        self.TopScore = 0
-        self.TopName = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += len(self.StageRecord)
-        length += 4
-        length += 4
-        length += 4
-        length += 33
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Len)
-        data = CommFunc.WriteString(data, self.Len, self.StageRecord)
-        data = CommFunc.WriteDWORD(data, self.Score1)
-        data = CommFunc.WriteDWORD(data, self.Score2)
-        data = CommFunc.WriteDWORD(data, self.TopScore)
-        data = CommFunc.WriteString(data, 33, self.TopName)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Len:%d,
-                                StageRecord:%s,
-                                Score1:%d,
-                                Score2:%d,
-                                TopScore:%d,
-                                TopName:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Len,
-                                self.StageRecord,
-                                self.Score1,
-                                self.Score2,
-                                self.TopScore,
-                                self.TopName
-                                )
-        return DumpString
-
-
-m_NAtagGCXMZZInfo=tagGCXMZZInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZInfo.Head.Cmd,m_NAtagGCXMZZInfo.Head.SubCmd))] = m_NAtagGCXMZZInfo
-
-
-#------------------------------------------------------
-# AC 03 通知仙魔之争自己信息 #tagGCXMZZSelfInfo
-
-class  tagGCXMZZSelfInfo(Structure):
-    Head = tagHead()
-    Faction = 0    #(BYTE Faction)// 所属阵营
-    Score = 0    #(DWORD Score)// 积分
-    WinCnt = 0    #(BYTE WinCnt)// 胜场数
-    WinCntAwardRecord = 0    #(DWORD WinCntAwardRecord)// 胜场奖励领取记录
-    Len = 0    #(WORD Len)// 押注记录
-    BetRecord = ""    #(String BetRecord)// 押注记录
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WinCntAwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.BetRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x03
-        self.Faction = 0
-        self.Score = 0
-        self.WinCnt = 0
-        self.WinCntAwardRecord = 0
-        self.Len = 0
-        self.BetRecord = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 1
-        length += 4
-        length += 2
-        length += len(self.BetRecord)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Faction)
-        data = CommFunc.WriteDWORD(data, self.Score)
-        data = CommFunc.WriteBYTE(data, self.WinCnt)
-        data = CommFunc.WriteDWORD(data, self.WinCntAwardRecord)
-        data = CommFunc.WriteWORD(data, self.Len)
-        data = CommFunc.WriteString(data, self.Len, self.BetRecord)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Faction:%d,
-                                Score:%d,
-                                WinCnt:%d,
-                                WinCntAwardRecord:%d,
-                                Len:%d,
-                                BetRecord:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Faction,
-                                self.Score,
-                                self.WinCnt,
-                                self.WinCntAwardRecord,
-                                self.Len,
-                                self.BetRecord
-                                )
-        return DumpString
-
-
-m_NAtagGCXMZZSelfInfo=tagGCXMZZSelfInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZSelfInfo.Head.Cmd,m_NAtagGCXMZZSelfInfo.Head.SubCmd))] = m_NAtagGCXMZZSelfInfo
-
-
-#------------------------------------------------------
-# AC 07 骑宠Boss信息 #tagGCHorsePetBossInfo
-
-class  tagGCHorsePetBossInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("IsEnd", c_int),    # 是否已结束(按位代表对应线路是否结束)
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xAC
-        self.SubCmd = 0x07
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xAC
-        self.SubCmd = 0x07
-        self.IsEnd = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCHorsePetBossInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// AC 07 骑宠Boss信息 //tagGCHorsePetBossInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                IsEnd:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.IsEnd
-                                )
-        return DumpString
-
-
-m_NAtagGCHorsePetBossInfo=tagGCHorsePetBossInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCHorsePetBossInfo.Cmd,m_NAtagGCHorsePetBossInfo.SubCmd))] = m_NAtagGCHorsePetBossInfo
-
-
-#------------------------------------------------------
-# AC 06 多倍经验活动信息 #tagGCMultiExpRateInfo
-
-class  tagGCMultiExpRateTime(Structure):
-    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
-    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        return _pos
-
-    def Clear(self):
-        self.StartTime = ""
-        self.EndtTime = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 5
-        length += 5
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 5, self.StartTime)
-        data = CommFunc.WriteString(data, 5, self.EndtTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                StartTime:%s,
-                                EndtTime:%s
-                                '''\
-                                %(
-                                self.StartTime,
-                                self.EndtTime
-                                )
-        return DumpString
-
-
-class  tagGCMultiExpRateInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
-    ActivityTime = list()    #(vector<tagGCMultiExpRateTime> ActivityTime)//活动时间
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    AddExpRate = 0    #(DWORD AddExpRate)// 增加的经验倍率,万分率
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x06
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ActivityTimeCount):
-            temActivityTime = tagGCMultiExpRateTime()
-            _pos = temActivityTime.ReadData(_lpData, _pos)
-            self.ActivityTime.append(temActivityTime)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AddExpRate,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x06
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.ActivityTimeCount = 0
-        self.ActivityTime = list()
-        self.LimitLV = 0
-        self.AddExpRate = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 1
-        for i in range(self.ActivityTimeCount):
-            length += self.ActivityTime[i].GetLength()
-        length += 2
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
-        for i in range(self.ActivityTimeCount):
-            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteDWORD(data, self.AddExpRate)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                ActivityTimeCount:%d,
-                                ActivityTime:%s,
-                                LimitLV:%d,
-                                AddExpRate:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.ActivityTimeCount,
-                                "...",
-                                self.LimitLV,
-                                self.AddExpRate
-                                )
-        return DumpString
-
-
-m_NAtagGCMultiExpRateInfo=tagGCMultiExpRateInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiExpRateInfo.Head.Cmd,m_NAtagGCMultiExpRateInfo.Head.SubCmd))] = m_NAtagGCMultiExpRateInfo
-
-
-#------------------------------------------------------
-# AC 0A 多倍修行点活动信息 #tagGCMultiRealmPointInfo
-
-class  tagGCMultiRealmPointInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    Multiple = 0    #(BYTE Multiple)// 倍数
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    LimitPoint = 0    #(DWORD LimitPoint)// 限制获得修行点
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x0A
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LimitPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x0A
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.Multiple = 0
-        self.LimitLV = 0
-        self.LimitPoint = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 1
-        length += 2
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.Multiple)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteDWORD(data, self.LimitPoint)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                Multiple:%d,
-                                LimitLV:%d,
-                                LimitPoint:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.Multiple,
-                                self.LimitLV,
-                                self.LimitPoint
-                                )
-        return DumpString
-
-
-m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo
-
-
-#------------------------------------------------------
-# AC 0B 新仙界盛典活动信息 #tagGCNewFairyCeremonyInfo
-
-class  tagGCNewFairyCeremonyInfo(Structure):
-    Head = tagHead()
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    WorldLV = 0    #(WORD WorldLV)// 世界等级
-    LimitLV = 0    #(WORD LimitLV)// 限制等级
-    ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x0B
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x0B
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.WorldLV = 0
-        self.LimitLV = 0
-        self.ResetType = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 10
-        length += 10
-        length += 2
-        length += 2
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteWORD(data, self.WorldLV)
-        data = CommFunc.WriteWORD(data, self.LimitLV)
-        data = CommFunc.WriteBYTE(data, self.ResetType)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                WorldLV:%d,
-                                LimitLV:%d,
-                                ResetType:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.StartDate,
-                                self.EndtDate,
-                                self.WorldLV,
-                                self.LimitLV,
-                                self.ResetType
-                                )
-        return DumpString
-
-
-m_NAtagGCNewFairyCeremonyInfo=tagGCNewFairyCeremonyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNewFairyCeremonyInfo.Head.Cmd,m_NAtagGCNewFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCNewFairyCeremonyInfo
-
-
-#------------------------------------------------------
-# AC 05 红包删除 #tagGCRedPacketDel
-
-class  tagGCRedPacketDel(Structure):
-    Head = tagHead()
-    Cnt = 0    #(DWORD Cnt)// 个数
-    DelRedPacketID = list()    #(vector<DWORD> DelRedPacketID)// 红包ID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x05
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Cnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        for i in range(self.Cnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.DelRedPacketID.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x05
-        self.Cnt = 0
-        self.DelRedPacketID = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4 * self.Cnt
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.Cnt)
-        for i in range(self.Cnt):
-            data = CommFunc.WriteDWORD(data, self.DelRedPacketID[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Cnt:%d,
-                                DelRedPacketID:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Cnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCRedPacketDel=tagGCRedPacketDel()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRedPacketDel.Head.Cmd,m_NAtagGCRedPacketDel.Head.SubCmd))] = m_NAtagGCRedPacketDel
-
-
-#------------------------------------------------------
-# AC 04 通知仙魔之争对战信息 #tagGCXMZZFightInfo
-
-class  tagGCXMZZFightInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)//玩家ID
-    PropDataSize = 0    #(DWORD PropDataSize)
-    PropData = ""    #(String PropData)//属性记录
-    ItemDataSize = 0    #(DWORD ItemDataSize)
-    ItemData = ""    #(String ItemData)//物品记录
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PropDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize)
-        self.ItemDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xAC
-        self.Head.SubCmd = 0x04
-        self.PlayerID = 0
-        self.PropDataSize = 0
-        self.PropData = ""
-        self.ItemDataSize = 0
-        self.ItemData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4
-        length += len(self.PropData)
-        length += 4
-        length += len(self.ItemData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteDWORD(data, self.PropDataSize)
-        data = CommFunc.WriteString(data, self.PropDataSize, self.PropData)
-        data = CommFunc.WriteDWORD(data, self.ItemDataSize)
-        data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                PropDataSize:%d,
-                                PropData:%s,
-                                ItemDataSize:%d,
-                                ItemData:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.PropDataSize,
-                                self.PropData,
-                                self.ItemDataSize,
-                                self.ItemData
-                                )
-        return DumpString
-
-
-m_NAtagGCXMZZFightInfo=tagGCXMZZFightInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZFightInfo.Head.Cmd,m_NAtagGCXMZZFightInfo.Head.SubCmd))] = m_NAtagGCXMZZFightInfo
-
-
-#------------------------------------------------------
-# B0 01 新增协助 #tagGCAssistInfoList
-
-class  tagGCAssistInfo(Structure):
-    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
-    PlayerID = 0    #(DWORD PlayerID)
-    PlayerName = ""    #(char PlayerName[33])
-    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)
-    ExDataLen = 0    #(WORD ExDataLen)
-    ExData = ""    #(String ExData)//其他自定义数据
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.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)
-        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
-        return _pos
-
-    def Clear(self):
-        self.AssistGUID = ""
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.MapID = 0
-        self.LineID = 0
-        self.NPCID = 0
-        self.ExDataLen = 0
-        self.ExData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += len(self.ExData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.AssistGUID)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.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)
-        data = CommFunc.WriteWORD(data, self.ExDataLen)
-        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                AssistGUID:%s,
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                MapID:%d,
-                                LineID:%d,
-                                NPCID:%d,
-                                ExDataLen:%d,
-                                ExData:%s
-                                '''\
-                                %(
-                                self.AssistGUID,
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.MapID,
-                                self.LineID,
-                                self.NPCID,
-                                self.ExDataLen,
-                                self.ExData
-                                )
-        return DumpString
-
-
-class  tagGCAssistInfoList(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    AssistInfoList = list()    #(vector<tagGCAssistInfo> AssistInfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAssistInfoList = tagGCAssistInfo()
-            _pos = temAssistInfoList.ReadData(_lpData, _pos)
-            self.AssistInfoList.append(temAssistInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x01
-        self.Count = 0
-        self.AssistInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.AssistInfoList[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.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                AssistInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCAssistInfoList=tagGCAssistInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
-
-
-#------------------------------------------------------
-# B0 03 正在进行中的协助 #tagGCAssistingInfo
-
-class  tagGCAssistingInfo(Structure):
-    Head = tagHead()
-    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x03
-        self.AssistGUID = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 40
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 40, self.AssistGUID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AssistGUID:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AssistGUID
-                                )
-        return DumpString
-
-
-m_NAtagGCAssistingInfo=tagGCAssistingInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo
-
-
-#------------------------------------------------------
-# B0 08 协助结束 #tagGCAssistOver
-
-class  tagGCAssistOver(Structure):
-    Head = tagHead()
-    IsTagPlayerReason = 0    #(BYTE IsTagPlayerReason)//是否发布方原因
-    ReasonLen = 0    #(BYTE ReasonLen)
-    Reason = ""    #(String Reason)//原因
-    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.IsTagPlayerReason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ReasonLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Reason,_pos = CommFunc.ReadString(_lpData, _pos,self.ReasonLen)
-        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x08
-        self.IsTagPlayerReason = 0
-        self.ReasonLen = 0
-        self.Reason = ""
-        self.AssistGUID = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += len(self.Reason)
-        length += 40
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.IsTagPlayerReason)
-        data = CommFunc.WriteBYTE(data, self.ReasonLen)
-        data = CommFunc.WriteString(data, self.ReasonLen, self.Reason)
-        data = CommFunc.WriteString(data, 40, self.AssistGUID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                IsTagPlayerReason:%d,
-                                ReasonLen:%d,
-                                Reason:%s,
-                                AssistGUID:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.IsTagPlayerReason,
-                                self.ReasonLen,
-                                self.Reason,
-                                self.AssistGUID
-                                )
-        return DumpString
-
-
-m_NAtagGCAssistOver=tagGCAssistOver()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistOver.Head.Cmd,m_NAtagGCAssistOver.Head.SubCmd))] = m_NAtagGCAssistOver
-
-
-#------------------------------------------------------
-# B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount
-
-class  tagGCCanGetAssistThanksGiftCount(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CanGetCount", c_ubyte),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x06
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x06
-        self.CanGetCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCCanGetAssistThanksGiftCount)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CanGetCount:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CanGetCount
-                                )
-        return DumpString
-
-
-m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount
-
-
-#------------------------------------------------------
-# B0 02 删除协助 #tagGCClearAssist
-
-class  tagGCClearAssist(Structure):
-    Head = tagHead()
-    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x02
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x02
-        self.AssistGUID = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 40
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 40, self.AssistGUID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AssistGUID:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AssistGUID
-                                )
-        return DumpString
-
-
-m_NAtagGCClearAssist=tagGCClearAssist()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
-
-
-#------------------------------------------------------
-#B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
-
-class  tagFamilyArrestOverState(Structure):
-    ID = 0    #(DWORD ID)//悬赏任务ID
-    NameLen = 0    #(WORD NameLen)//名字长度
-    Name = ""    #(String Name)//size = NameLen
-    OverState = 0    #(DWORD OverState)//任务完成情况
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.OverState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.ID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.OverState = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 2
-        length += len(self.Name)
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.ID)
-        data = CommFunc.WriteWORD(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteDWORD(data, self.OverState)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                OverState:%d
-                                '''\
-                                %(
-                                self.ID,
-                                self.NameLen,
-                                self.Name,
-                                self.OverState
-                                )
-        return DumpString
-
-
-class  tagFamilyArrestOverStateInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count	
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x26
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temArrestOverStateInfo = tagFamilyArrestOverState()
-            _pos = temArrestOverStateInfo.ReadData(_lpData, _pos)
-            self.ArrestOverStateInfo.append(temArrestOverStateInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x26
-        self.Count = 0
-        self.ArrestOverStateInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.ArrestOverStateInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.ArrestOverStateInfo[i].GetLength(), self.ArrestOverStateInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                ArrestOverStateInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo
-
-
-#------------------------------------------------------
-# B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
-
-class  tagGCGetAssistThanksGiftPreview(Structure):
-    Head = tagHead()
-    ItemID = 0    #(DWORD ItemID)//礼盒ID
-    PlayerID = 0    #(DWORD PlayerID)//发起玩家ID
-    PlayerName = ""    #(char PlayerName[33])
-    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)
-    ExDataLen = 0    #(WORD ExDataLen)
-    ExData = ""    #(String ExData)//其他自定义数据
-    TimeStr = ""    #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss
-    ExtraAward = 0    #(BYTE ExtraAward)//是否有额外奖励
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x05
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.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)
-        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
-        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x05
-        self.ItemID = 0
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.MapID = 0
-        self.LineID = 0
-        self.NPCID = 0
-        self.ExDataLen = 0
-        self.ExData = ""
-        self.TimeStr = ""
-        self.ExtraAward = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += len(self.ExData)
-        length += 19
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.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)
-        data = CommFunc.WriteWORD(data, self.ExDataLen)
-        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
-        data = CommFunc.WriteString(data, 19, self.TimeStr)
-        data = CommFunc.WriteBYTE(data, self.ExtraAward)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ItemID:%d,
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                MapID:%d,
-                                LineID:%d,
-                                NPCID:%d,
-                                ExDataLen:%d,
-                                ExData:%s,
-                                TimeStr:%s,
-                                ExtraAward:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ItemID,
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.MapID,
-                                self.LineID,
-                                self.NPCID,
-                                self.ExDataLen,
-                                self.ExData,
-                                self.TimeStr,
-                                self.ExtraAward
-                                )
-        return DumpString
-
-
-m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview
-
-
-#------------------------------------------------------
-# B0 34 福地结算奖励信息 #tagGCMineAreaAwardInfo
-
-class  tagGCMineAreaAwardInfo(Structure):
-    Head = tagHead()
-    AwardType = 0    #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知
-    AwardLen = 0    #(BYTE AwardLen)
-    AwardInfo = ""    #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...]
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x34
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x34
-        self.AwardType = 0
-        self.AwardLen = 0
-        self.AwardInfo = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += len(self.AwardInfo)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AwardType)
-        data = CommFunc.WriteBYTE(data, self.AwardLen)
-        data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AwardType:%d,
-                                AwardLen:%d,
-                                AwardInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AwardType,
-                                self.AwardLen,
-                                self.AwardInfo
-                                )
-        return DumpString
-
-
-m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo
-
-
-#------------------------------------------------------
-# B0 33 福地详细信息 #tagGCMineAreaInfo
-
-class  tagGCMineItem(Structure):
-    Index = 0    #(BYTE Index)// 矿物所在福地位置索引,0~n
-    MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物
-    MineType = 0    #(BYTE MineType)// 矿物类型:0-常规;1-超级
-    UpdTime = 0    #(DWORD UpdTime)// 最后一次更新时间戳
-    PosLen = 0    #(BYTE PosLen)
-    Position = ""    #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒
-    SpeedLen = 0    #(BYTE SpeedLen)
-    MoveSpeed = ""    #(String MoveSpeed)// 移动速度,x格/秒,支持小数
-    EndTime = 0    #(DWORD EndTime)// 拉取结束时间戳
-    WorkerCount = 0    #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen)
-        self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen)
-        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        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):
-        self.Index = 0
-        self.MineID = 0
-        self.MineType = 0
-        self.UpdTime = 0
-        self.PosLen = 0
-        self.Position = ""
-        self.SpeedLen = 0
-        self.MoveSpeed = ""
-        self.EndTime = 0
-        self.WorkerCount = 0
-        self.RobPlayerID = 0
-        self.RobWorkerCount = 0
-        self.RobPlayerName = ""
-        self.RobJob = 0
-        self.RobFace = 0
-        self.RobFacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 2
-        length += 1
-        length += 4
-        length += 1
-        length += len(self.Position)
-        length += 1
-        length += len(self.MoveSpeed)
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Index)
-        data = CommFunc.WriteWORD(data, self.MineID)
-        data = CommFunc.WriteBYTE(data, self.MineType)
-        data = CommFunc.WriteDWORD(data, self.UpdTime)
-        data = CommFunc.WriteBYTE(data, self.PosLen)
-        data = CommFunc.WriteString(data, self.PosLen, self.Position)
-        data = CommFunc.WriteBYTE(data, self.SpeedLen)
-        data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed)
-        data = CommFunc.WriteDWORD(data, self.EndTime)
-        data = CommFunc.WriteBYTE(data, self.WorkerCount)
-        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):
-        DumpString = '''
-                                Index:%d,
-                                MineID:%d,
-                                MineType:%d,
-                                UpdTime:%d,
-                                PosLen:%d,
-                                Position:%s,
-                                SpeedLen:%d,
-                                MoveSpeed:%s,
-                                EndTime:%d,
-                                WorkerCount:%d,
-                                RobPlayerID:%d,
-                                RobWorkerCount:%d,
-                                RobPlayerName:%s,
-                                RobJob:%d,
-                                RobFace:%d,
-                                RobFacePic:%d
-                                '''\
-                                %(
-                                self.Index,
-                                self.MineID,
-                                self.MineType,
-                                self.UpdTime,
-                                self.PosLen,
-                                self.Position,
-                                self.SpeedLen,
-                                self.MoveSpeed,
-                                self.EndTime,
-                                self.WorkerCount,
-                                self.RobPlayerID,
-                                self.RobWorkerCount,
-                                self.RobPlayerName,
-                                self.RobJob,
-                                self.RobFace,
-                                self.RobFacePic
-                                )
-        return DumpString
-
-
-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)
-    RobValue = 0    #(DWORD RobValue)// 抢劫敌对值
-    MineCount = 0    #(BYTE MineCount)
-    MineItemList = list()    #(vector<tagGCMineItem> MineItemList)// 矿物列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        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.RobValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MineCount):
-            temMineItemList = tagGCMineItem()
-            _pos = temMineItemList.ReadData(_lpData, _pos)
-            self.MineItemList.append(temMineItemList)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.RobValue = 0
-        self.MineCount = 0
-        self.MineItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.MineCount):
-            length += self.MineItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        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.WriteDWORD(data, self.RobValue)
-        data = CommFunc.WriteBYTE(data, self.MineCount)
-        for i in range(self.MineCount):
-            data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                RobValue:%d,
-                                MineCount:%d,
-                                MineItemList:%s
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.Face,
-                                self.FacePic,
-                                self.RobValue,
-                                self.MineCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCMineAreaInfo(Structure):
-    Head = tagHead()
-    QueryType = 0    #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表
-    QueryValue = 0    #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机
-    AreaCount = 0    #(BYTE AreaCount)
-    AreaList = list()    #(vector<tagGCMineArea> AreaList)// 福地列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x33
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AreaCount):
-            temAreaList = tagGCMineArea()
-            _pos = temAreaList.ReadData(_lpData, _pos)
-            self.AreaList.append(temAreaList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x33
-        self.QueryType = 0
-        self.QueryValue = 0
-        self.AreaCount = 0
-        self.AreaList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 1
-        for i in range(self.AreaCount):
-            length += self.AreaList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.QueryType)
-        data = CommFunc.WriteDWORD(data, self.QueryValue)
-        data = CommFunc.WriteBYTE(data, self.AreaCount)
-        for i in range(self.AreaCount):
-            data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                QueryType:%d,
-                                QueryValue:%d,
-                                AreaCount:%d,
-                                AreaList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.QueryType,
-                                self.QueryValue,
-                                self.AreaCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCMineAreaInfo=tagGCMineAreaInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo
-
-
-#------------------------------------------------------
-# B0 35 福地记录信息 #tagGCMineAreaRecordInfo
-
-class  tagGCMineAreaRecord(Structure):
-    RecordType = 0    #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢
-    TagPlayerID = 0    #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        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):
-        self.RecordType = 0
-        self.TagPlayerID = 0
-        self.RecordTime = 0
-        self.MineID = 0
-        self.TagPlayerName = ""
-        self.TagJob = 0
-        self.TagFace = 0
-        self.TagFacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 4
-        length += 2
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.RecordType)
-        data = CommFunc.WriteDWORD(data, self.TagPlayerID)
-        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):
-        DumpString = '''
-                                RecordType:%d,
-                                TagPlayerID:%d,
-                                RecordTime:%d,
-                                MineID:%d,
-                                TagPlayerName:%s,
-                                TagJob:%d,
-                                TagFace:%d,
-                                TagFacePic:%d
-                                '''\
-                                %(
-                                self.RecordType,
-                                self.TagPlayerID,
-                                self.RecordTime,
-                                self.MineID,
-                                self.TagPlayerName,
-                                self.TagJob,
-                                self.TagFace,
-                                self.TagFacePic
-                                )
-        return DumpString
-
-
-class  tagGCMineAreaRecordInfo(Structure):
-    Head = tagHead()
-    RecordCount = 0    #(BYTE RecordCount)
-    AreaRecordList = list()    #(vector<tagGCMineAreaRecord> AreaRecordList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x35
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RecordCount):
-            temAreaRecordList = tagGCMineAreaRecord()
-            _pos = temAreaRecordList.ReadData(_lpData, _pos)
-            self.AreaRecordList.append(temAreaRecordList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x35
-        self.RecordCount = 0
-        self.AreaRecordList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.RecordCount):
-            length += self.AreaRecordList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RecordCount)
-        for i in range(self.RecordCount):
-            data = CommFunc.WriteString(data, self.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RecordCount:%d,
-                                AreaRecordList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RecordCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo
-
-
-#------------------------------------------------------
-# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet
-
-class  tagGCMineItemPullPreviewRet(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    # 福地所属玩家ID,0默认自己
-                  ("ItemIndex", c_ubyte),    # 物品所在位置索引0~n
-                  ("WorkerCount", c_ubyte),    # 上工人人数
-                  ("NeedSeconds", c_int),    # 预计需要时间,秒
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x32
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x32
-        self.PlayerID = 0
-        self.ItemIndex = 0
-        self.WorkerCount = 0
-        self.NeedSeconds = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCMineItemPullPreviewRet)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                ItemIndex:%d,
-                                WorkerCount:%d,
-                                NeedSeconds:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.ItemIndex,
-                                self.WorkerCount,
-                                self.NeedSeconds
-                                )
-        return DumpString
-
-
-m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet
-
-
-#------------------------------------------------------
-# B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
-
-class  tagGCAssistPlayerInfo(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    PlayerName = ""    #(char PlayerName[33])
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        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.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):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteBYTE(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCUseAssistThanksGiftPreview(Structure):
-    Head = tagHead()
-    ItemID = 0    #(DWORD ItemID)//礼盒ID
-    MapID = 0    #(DWORD MapID)
-    LineID = 0    #(DWORD LineID)
-    NPCID = 0    #(DWORD NPCID)
-    ExDataLen = 0    #(WORD ExDataLen)
-    ExData = ""    #(String ExData)//其他自定义数据
-    AssistPlayerCount = 0    #(BYTE AssistPlayerCount)
-    AssistPlayerList = list()    #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ItemID,_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)
-        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
-        self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AssistPlayerCount):
-            temAssistPlayerList = tagGCAssistPlayerInfo()
-            _pos = temAssistPlayerList.ReadData(_lpData, _pos)
-            self.AssistPlayerList.append(temAssistPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x04
-        self.ItemID = 0
-        self.MapID = 0
-        self.LineID = 0
-        self.NPCID = 0
-        self.ExDataLen = 0
-        self.ExData = ""
-        self.AssistPlayerCount = 0
-        self.AssistPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += len(self.ExData)
-        length += 1
-        for i in range(self.AssistPlayerCount):
-            length += self.AssistPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteDWORD(data, self.MapID)
-        data = CommFunc.WriteDWORD(data, self.LineID)
-        data = CommFunc.WriteDWORD(data, self.NPCID)
-        data = CommFunc.WriteWORD(data, self.ExDataLen)
-        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
-        data = CommFunc.WriteBYTE(data, self.AssistPlayerCount)
-        for i in range(self.AssistPlayerCount):
-            data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ItemID:%d,
-                                MapID:%d,
-                                LineID:%d,
-                                NPCID:%d,
-                                ExDataLen:%d,
-                                ExData:%s,
-                                AssistPlayerCount:%d,
-                                AssistPlayerList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ItemID,
-                                self.MapID,
-                                self.LineID,
-                                self.NPCID,
-                                self.ExDataLen,
-                                self.ExData,
-                                self.AssistPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
-
-
-#------------------------------------------------------
-# B0 20 膜拜信息列表 #tagGCWorshipInfoList
-
-class  tagGCWorshipInfo(Structure):
-    PlayerID = 0    #(DWORD PlayerID)// 目标玩家ID
-    WorshipType = 0    #(BYTE WorshipType)// 膜拜类型
-    WorshipValue = 0    #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
-    InfoLen = 0    #(WORD InfoLen)
-    PlayerInfo = ""    #(String PlayerInfo)// 玩家信息{k:v, ...}
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.WorshipType = 0
-        self.WorshipValue = 0
-        self.InfoLen = 0
-        self.PlayerInfo = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += 4
-        length += 2
-        length += len(self.PlayerInfo)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.WorshipType)
-        data = CommFunc.WriteDWORD(data, self.WorshipValue)
-        data = CommFunc.WriteWORD(data, self.InfoLen)
-        data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                WorshipType:%d,
-                                WorshipValue:%d,
-                                InfoLen:%d,
-                                PlayerInfo:%s
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.WorshipType,
-                                self.WorshipValue,
-                                self.InfoLen,
-                                self.PlayerInfo
-                                )
-        return DumpString
-
-
-class  tagGCWorshipInfoList(Structure):
-    Head = tagHead()
-    WorshipCount = 0    #(BYTE WorshipCount)
-    WorshipInfoList = list()    #(vector<tagGCWorshipInfo> WorshipInfoList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x20
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.WorshipCount):
-            temWorshipInfoList = tagGCWorshipInfo()
-            _pos = temWorshipInfoList.ReadData(_lpData, _pos)
-            self.WorshipInfoList.append(temWorshipInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x20
-        self.WorshipCount = 0
-        self.WorshipInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.WorshipCount):
-            length += self.WorshipInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.WorshipCount)
-        for i in range(self.WorshipCount):
-            data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                WorshipCount:%d,
-                                WorshipInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.WorshipCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCWorshipInfoList=tagGCWorshipInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList
-
-
-#------------------------------------------------------
-# B0 21 膜拜结果 #tagGCWorshipResult
-
-class  tagGCWorshipResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    # 目标玩家ID
-                  ("WorshipType", c_ubyte),    # 膜拜类型
-                  ("WorshipValue", c_int),    # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
-                  ("Result", c_ubyte),    # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标;
-                  ("MoneyType", c_ubyte),    # 货币类型
-                  ("MoneyValue", c_int),    # 货币奖励
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x21
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x21
-        self.PlayerID = 0
-        self.WorshipType = 0
-        self.WorshipValue = 0
-        self.Result = 0
-        self.MoneyType = 0
-        self.MoneyValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCWorshipResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                WorshipType:%d,
-                                WorshipValue:%d,
-                                Result:%d,
-                                MoneyType:%d,
-                                MoneyValue:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.WorshipType,
-                                self.WorshipValue,
-                                self.Result,
-                                self.MoneyType,
-                                self.MoneyValue
-                                )
-        return DumpString
-
-
-m_NAtagGCWorshipResult=tagGCWorshipResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult
-
-
-#------------------------------------------------------
-#B3 03 询问是否允许添加好友#tagGCFriendAskIfJoin
-
-class  tagGCFriendAskIfJoin(Structure):
-    Head = tagHead()
-    AskID = 0    #(DWORD AskID)//请求好友的人
-    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):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AskID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        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):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x03
-        self.AskID = 0
-        self.Name = ""
-        self.LV = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 33
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.AskID)
-        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):
-        DumpString = '''
-                                Head:%s,
-                                AskID:%d,
-                                Name:%s,
-                                LV:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AskID,
-                                self.Name,
-                                self.LV,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-m_NAtagGCFriendAskIfJoin=tagGCFriendAskIfJoin()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendAskIfJoin.Head.Cmd,m_NAtagGCFriendAskIfJoin.Head.SubCmd))] = m_NAtagGCFriendAskIfJoin
-
-
-#------------------------------------------------------
-# B3 24 喜糖列表 #tagGCCandyList
-
-class  tagGCCandyInfo(Structure):
-    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
-    NameALen = 0    #(BYTE NameALen)
-    PlayerNameA = ""    #(String PlayerNameA)
-    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
-    NameBLen = 0    #(BYTE NameBLen)
-    PlayerNameB = ""    #(String PlayerNameB)
-    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
-    MarryTime = 0    #(DWORD MarryTime)// 成亲时间戳,秒
-    EndTime = 0    #(DWORD EndTime)// 结束时间戳,秒
-    Prosperity = 0    #(DWORD Prosperity)// 当前繁荣度
-    FireworksTotalBuyCount = 0    #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数
-    FireworksPlayerBuyCount = 0    #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数
-    PlayerFreeEatCandyCount = 0    #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
-        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
-        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerIDA = 0
-        self.NameALen = 0
-        self.PlayerNameA = ""
-        self.PlayerIDB = 0
-        self.NameBLen = 0
-        self.PlayerNameB = ""
-        self.BridePriceID = 0
-        self.MarryTime = 0
-        self.EndTime = 0
-        self.Prosperity = 0
-        self.FireworksTotalBuyCount = 0
-        self.FireworksPlayerBuyCount = 0
-        self.PlayerFreeEatCandyCount = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerNameA)
-        length += 4
-        length += 1
-        length += len(self.PlayerNameB)
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
-        data = CommFunc.WriteBYTE(data, self.NameALen)
-        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
-        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
-        data = CommFunc.WriteBYTE(data, self.NameBLen)
-        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
-        data = CommFunc.WriteBYTE(data, self.BridePriceID)
-        data = CommFunc.WriteDWORD(data, self.MarryTime)
-        data = CommFunc.WriteDWORD(data, self.EndTime)
-        data = CommFunc.WriteDWORD(data, self.Prosperity)
-        data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount)
-        data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount)
-        data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerIDA:%d,
-                                NameALen:%d,
-                                PlayerNameA:%s,
-                                PlayerIDB:%d,
-                                NameBLen:%d,
-                                PlayerNameB:%s,
-                                BridePriceID:%d,
-                                MarryTime:%d,
-                                EndTime:%d,
-                                Prosperity:%d,
-                                FireworksTotalBuyCount:%d,
-                                FireworksPlayerBuyCount:%d,
-                                PlayerFreeEatCandyCount:%d
-                                '''\
-                                %(
-                                self.PlayerIDA,
-                                self.NameALen,
-                                self.PlayerNameA,
-                                self.PlayerIDB,
-                                self.NameBLen,
-                                self.PlayerNameB,
-                                self.BridePriceID,
-                                self.MarryTime,
-                                self.EndTime,
-                                self.Prosperity,
-                                self.FireworksTotalBuyCount,
-                                self.FireworksPlayerBuyCount,
-                                self.PlayerFreeEatCandyCount
-                                )
-        return DumpString
-
-
-class  tagGCCandyList(Structure):
-    Head = tagHead()
-    CandyCount = 0    #(WORD CandyCount)
-    CandyInfoList = list()    #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x24
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.CandyCount):
-            temCandyInfoList = tagGCCandyInfo()
-            _pos = temCandyInfoList.ReadData(_lpData, _pos)
-            self.CandyInfoList.append(temCandyInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x24
-        self.CandyCount = 0
-        self.CandyInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.CandyCount):
-            length += self.CandyInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.CandyCount)
-        for i in range(self.CandyCount):
-            data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                CandyCount:%d,
-                                CandyInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.CandyCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCandyList=tagGCCandyList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList
-
-
-#------------------------------------------------------
-# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList
-
-class  tagGCCharmOfferBillboardData(Structure):
-    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
-    PlayerID = 0    #(DWORD PlayerID)// 玩家ID - 贡献者
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    CharmValue = 0    #(DWORD CharmValue)//贡献魅力值
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.OrderIndex = 0
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.CharmValue = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.OrderIndex)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteDWORD(data, self.CharmValue)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                OrderIndex:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                CharmValue:%d
-                                '''\
-                                %(
-                                self.OrderIndex,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.CharmValue
-                                )
-        return DumpString
-
-
-class  tagGCCharmOfferBillboardDataList(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 魅力玩家ID
-    QueryType = 0    #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜
-    DataCount = 0    #(BYTE DataCount)
-    OfferBillboardDataList = list()    #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x19
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DataCount):
-            temOfferBillboardDataList = tagGCCharmOfferBillboardData()
-            _pos = temOfferBillboardDataList.ReadData(_lpData, _pos)
-            self.OfferBillboardDataList.append(temOfferBillboardDataList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x19
-        self.PlayerID = 0
-        self.QueryType = 0
-        self.DataCount = 0
-        self.OfferBillboardDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 1
-        for i in range(self.DataCount):
-            length += self.OfferBillboardDataList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.QueryType)
-        data = CommFunc.WriteBYTE(data, self.DataCount)
-        for i in range(self.DataCount):
-            data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                QueryType:%d,
-                                DataCount:%d,
-                                OfferBillboardDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.QueryType,
-                                self.DataCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList
-
-
-#------------------------------------------------------
-# B3 26 伴侣信息 #tagGCCoupleInfo
-
-class  tagGCCoupleInfo(Structure):
-    Head = tagHead()
-    CoupleID = 0    #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取
-    NameLen = 0    #(BYTE NameLen)
-    CoupleName = ""    #(String CoupleName)
-    NewMarryTime = 0    #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算
-    MarryTime = 0    #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算
-    BridePriceState = 0    #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次
-    BreakRequestID = 0    #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求
-    BreakRequestTime = 0    #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期
-    PlayerBreakRequestTime = 0    #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x26
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x26
-        self.CoupleID = 0
-        self.NameLen = 0
-        self.CoupleName = ""
-        self.NewMarryTime = 0
-        self.MarryTime = 0
-        self.BridePriceState = 0
-        self.BreakRequestID = 0
-        self.BreakRequestTime = 0
-        self.PlayerBreakRequestTime = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.CoupleName)
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.CoupleID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.CoupleName)
-        data = CommFunc.WriteDWORD(data, self.NewMarryTime)
-        data = CommFunc.WriteDWORD(data, self.MarryTime)
-        data = CommFunc.WriteDWORD(data, self.BridePriceState)
-        data = CommFunc.WriteDWORD(data, self.BreakRequestID)
-        data = CommFunc.WriteDWORD(data, self.BreakRequestTime)
-        data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                CoupleID:%d,
-                                NameLen:%d,
-                                CoupleName:%s,
-                                NewMarryTime:%d,
-                                MarryTime:%d,
-                                BridePriceState:%d,
-                                BreakRequestID:%d,
-                                BreakRequestTime:%d,
-                                PlayerBreakRequestTime:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.CoupleID,
-                                self.NameLen,
-                                self.CoupleName,
-                                self.NewMarryTime,
-                                self.MarryTime,
-                                self.BridePriceState,
-                                self.BreakRequestID,
-                                self.BreakRequestTime,
-                                self.PlayerBreakRequestTime
-                                )
-        return DumpString
-
-
-m_NAtagGCCoupleInfo=tagGCCoupleInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo
-
-
-#------------------------------------------------------
-# B3 22 收到提亲信息 #tagGCMarryReqInfo
-
-class  tagGCMarryReqInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x22
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x22
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.BridePriceID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.BridePriceID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                BridePriceID:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.BridePriceID
-                                )
-        return DumpString
-
-
-m_NAtagGCMarryReqInfo=tagGCMarryReqInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo
-
-
-#------------------------------------------------------
-# B3 21 提亲发送成功 #tagGCMarryReqOK
-
-class  tagGCMarryReqOK(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x21
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x21
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCMarryReqOK)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagGCMarryReqOK=tagGCMarryReqOK()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK
-
-
-#------------------------------------------------------
-# B3 23 提亲回应结果 #tagGCMarryResponseRet
-
-class  tagGCMarryResponseRet(Structure):
-    Head = tagHead()
-    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
-    NameALen = 0    #(BYTE NameALen)
-    PlayerNameA = ""    #(String PlayerNameA)
-    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
-    NameBLen = 0    #(BYTE NameBLen)
-    PlayerNameB = ""    #(String PlayerNameB)
-    IsOK = 0    #(BYTE IsOK)// 是否同意,0-否,1-是;  如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x23
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
-        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
-        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x23
-        self.PlayerIDA = 0
-        self.NameALen = 0
-        self.PlayerNameA = ""
-        self.PlayerIDB = 0
-        self.NameBLen = 0
-        self.PlayerNameB = ""
-        self.IsOK = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.PlayerNameA)
-        length += 4
-        length += 1
-        length += len(self.PlayerNameB)
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
-        data = CommFunc.WriteBYTE(data, self.NameALen)
-        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
-        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
-        data = CommFunc.WriteBYTE(data, self.NameBLen)
-        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
-        data = CommFunc.WriteBYTE(data, self.IsOK)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerIDA:%d,
-                                NameALen:%d,
-                                PlayerNameA:%s,
-                                PlayerIDB:%d,
-                                NameBLen:%d,
-                                PlayerNameB:%s,
-                                IsOK:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerIDA,
-                                self.NameALen,
-                                self.PlayerNameA,
-                                self.PlayerIDB,
-                                self.NameBLen,
-                                self.PlayerNameB,
-                                self.IsOK
-                                )
-        return DumpString
-
-
-m_NAtagGCMarryResponseRet=tagGCMarryResponseRet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet
-
-
-#------------------------------------------------------
-# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo
-
-class  tagGCPlayerCharmValueInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CharmValueTotal", c_int),    #当前魅力值 - 总
-                  ("CharmValueWeek", c_int),    #当前魅力值 - 周
-                  ("CharmValueDay", c_int),    #当前魅力值 - 日
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x25
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x25
-        self.CharmValueTotal = 0
-        self.CharmValueWeek = 0
-        self.CharmValueDay = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCPlayerCharmValueInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CharmValueTotal:%d,
-                                CharmValueWeek:%d,
-                                CharmValueDay:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CharmValueTotal,
-                                self.CharmValueWeek,
-                                self.CharmValueDay
-                                )
-        return DumpString
-
-
-m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo
-
-
-#------------------------------------------------------
-# B3 15 相关玩家在线状态变更同步 #tagGCRelatedPlayerOnlineState
-
-class  tagGCRelatedPlayerOnlineState(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    # 相关玩家ID
-                  ("OfflineValue", c_int),    # 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线;
-                  ("IsCross", c_ubyte),    # 是否跨服同步的,如果是跨服则离线时间计算时要取跨服服务器时间
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x15
-        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 = 0xB3
-        self.SubCmd = 0x15
-        self.PlayerID = 0
-        self.OfflineValue = 0
-        self.IsCross = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCRelatedPlayerOnlineState)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 15 相关玩家在线状态变更同步 //tagGCRelatedPlayerOnlineState:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                OfflineValue:%d,
-                                IsCross:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.OfflineValue,
-                                self.IsCross
-                                )
-        return DumpString
-
-
-m_NAtagGCRelatedPlayerOnlineState=tagGCRelatedPlayerOnlineState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRelatedPlayerOnlineState.Cmd,m_NAtagGCRelatedPlayerOnlineState.SubCmd))] = m_NAtagGCRelatedPlayerOnlineState
-
-
-#------------------------------------------------------
-# B3 20 送礼物成功通知 #tagGCSendGiftsOKList
-
-class  tagGCSendGiftsOK(Structure):
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 赠送方玩家名
-    PlayerID = 0    #(DWORD PlayerID)// 赠送方玩家ID
-    GiftNum = 0    #(WORD GiftNum)// 赠送礼物编号
-    GiftCount = 0    #(DWORD GiftCount)// 赠送礼物数量
-    SendTime = 0    #(DWORD SendTime)// 赠送时间戳
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.NameLen = 0
-        self.Name = ""
-        self.PlayerID = 0
-        self.GiftNum = 0
-        self.GiftCount = 0
-        self.SendTime = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += len(self.Name)
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteWORD(data, self.GiftNum)
-        data = CommFunc.WriteDWORD(data, self.GiftCount)
-        data = CommFunc.WriteDWORD(data, self.SendTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NameLen:%d,
-                                Name:%s,
-                                PlayerID:%d,
-                                GiftNum:%d,
-                                GiftCount:%d,
-                                SendTime:%d
-                                '''\
-                                %(
-                                self.NameLen,
-                                self.Name,
-                                self.PlayerID,
-                                self.GiftNum,
-                                self.GiftCount,
-                                self.SendTime
-                                )
-        return DumpString
-
-
-class  tagGCSendGiftsOKList(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    SendGiftsOKList = list()    #(vector<tagGCSendGiftsOK> SendGiftsOKList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x20
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temSendGiftsOKList = tagGCSendGiftsOK()
-            _pos = temSendGiftsOKList.ReadData(_lpData, _pos)
-            self.SendGiftsOKList.append(temSendGiftsOKList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x20
-        self.Count = 0
-        self.SendGiftsOKList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.SendGiftsOKList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                SendGiftsOKList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList
-
-
-#------------------------------------------------------
-# B3 14 社交人群伴侣信息 #tagGCSocialCouples
-
-class  tagGCSocialCouple(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("PlayerID", c_int),    
-                  ("CoupleID", c_int),    #伴侣ID
-                  ]
-
-    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.PlayerID = 0
-        self.CoupleID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCSocialCouple)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B3 14 社交人群伴侣信息 //tagGCSocialCouples:
-                                PlayerID:%d,
-                                CoupleID:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.CoupleID
-                                )
-        return DumpString
-
-
-class  tagGCSocialCouples(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    Player = list()    #(vector<tagGCSocialCouple> Player)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temPlayer = tagGCSocialCouple()
-            _pos = temPlayer.ReadData(_lpData, _pos)
-            self.Player.append(temPlayer)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x14
-        self.Count = 0
-        self.Player = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.Player[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                Player:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCSocialCouples=tagGCSocialCouples()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialCouples.Head.Cmd,m_NAtagGCSocialCouples.Head.SubCmd))] = m_NAtagGCSocialCouples
-
-
-#------------------------------------------------------
-#B3 01 添加社交对象 #tagGCAddSocialPlayer
-
-class  tagGCAddSocialPlayer(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
-                  ("PlayerID", c_int),    
-                  ("SortValue", c_int),    #最近联系人和仇人按时间排序
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x01
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x01
-        self.GroupType = 0
-        self.PlayerID = 0
-        self.SortValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCAddSocialPlayer)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B3 01 添加社交对象 //tagGCAddSocialPlayer:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                GroupType:%d,
-                                PlayerID:%d,
-                                SortValue:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.GroupType,
-                                self.PlayerID,
-                                self.SortValue
-                                )
-        return DumpString
-
-
-m_NAtagGCAddSocialPlayer=tagGCAddSocialPlayer()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddSocialPlayer.Cmd,m_NAtagGCAddSocialPlayer.SubCmd))] = m_NAtagGCAddSocialPlayer
-
-
-#------------------------------------------------------
-#B3 09 回复玩家简短信息 #tagGCAnswerPlayerShortInfo
-
-class  tagGCAnswerPlayerShortInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)
-    PlayerName = ""    #(char PlayerName[33])
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)//等级
-    RealmLV = 0    #(WORD RealmLV)//境界
-    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):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x09
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.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):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x09
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.OnlineType = 0
-        self.IsInTeam = 0
-        self.ServerGroupID = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 2
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.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):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                OnlineType:%d,
-                                IsInTeam:%d,
-                                ServerGroupID:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.OnlineType,
-                                self.IsInTeam,
-                                self.ServerGroupID,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-m_NAtagGCAnswerPlayerShortInfo=tagGCAnswerPlayerShortInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAnswerPlayerShortInfo.Head.Cmd,m_NAtagGCAnswerPlayerShortInfo.Head.SubCmd))] = m_NAtagGCAnswerPlayerShortInfo
-
-
-#------------------------------------------------------
-#B3 02 删除社交对象 #tagGCDelSocialPlayer
-
-class  tagGCDelSocialPlayer(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
-                  ("PlayerID", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x02
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x02
-        self.GroupType = 0
-        self.PlayerID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCDelSocialPlayer)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B3 02 删除社交对象 //tagGCDelSocialPlayer:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                GroupType:%d,
-                                PlayerID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.GroupType,
-                                self.PlayerID
-                                )
-        return DumpString
-
-
-m_NAtagGCDelSocialPlayer=tagGCDelSocialPlayer()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelSocialPlayer.Cmd,m_NAtagGCDelSocialPlayer.SubCmd))] = m_NAtagGCDelSocialPlayer
-
-
-#------------------------------------------------------
-#B3 04 社交人群基本信息 #tagGCSocialPlayers
-
-class  tagGCSocialPlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    PlayerName = ""    #(char PlayerName[33])
-    Job = 0    #(BYTE Job)
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        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.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):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.OnlineType = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 2
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteBYTE(data, self.OnlineType)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                OnlineType:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.OnlineType,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCSocialPlayers(Structure):
-    Head = tagHead()
-    Count = 0    #(WORD Count)
-    Player = list()    #(vector<tagGCSocialPlayer> Player)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temPlayer = tagGCSocialPlayer()
-            _pos = temPlayer.ReadData(_lpData, _pos)
-            self.Player.append(temPlayer)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x04
-        self.Count = 0
-        self.Player = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        for i in range(self.Count):
-            length += self.Player[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                Player:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCSocialPlayers=tagGCSocialPlayers()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialPlayers.Head.Cmd,m_NAtagGCSocialPlayers.Head.SubCmd))] = m_NAtagGCSocialPlayers
-
-
-#------------------------------------------------------
-#B3 08 通知玩家分组信息 #tagGCGroupPlayers
-
-class  tagGCGroupPlayer(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("PlayerID", c_int),    
-                  ("SortValue", 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.PlayerID = 0
-        self.SortValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCGroupPlayer)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B3 08 通知玩家分组信息 //tagGCGroupPlayers:
-                                PlayerID:%d,
-                                SortValue:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.SortValue
-                                )
-        return DumpString
-
-
-class  tagGCGroupPlayers(Structure):
-    Head = tagHead()
-    GroupType = 0    #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 5亲密组
-    Count = 0    #(WORD Count)
-    Players = list()    #(vector<tagGCGroupPlayer> Players)//size = Count
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.GroupType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temPlayers = tagGCGroupPlayer()
-            _pos = temPlayers.ReadData(_lpData, _pos)
-            self.Players.append(temPlayers)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x08
-        self.GroupType = 0
-        self.Count = 0
-        self.Players = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 2
-        for i in range(self.Count):
-            length += self.Players[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.GroupType)
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.Players[i].GetLength(), self.Players[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                GroupType:%d,
-                                Count:%d,
-                                Players:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.GroupType,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCGroupPlayers=tagGCGroupPlayers()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGroupPlayers.Head.Cmd,m_NAtagGCGroupPlayers.Head.SubCmd))] = m_NAtagGCGroupPlayers
-
-
-#------------------------------------------------------
-#B3 05 社交圈内广播玩家名称 #tagGCSocialName
-
-class  tagGCSocialName(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)
-    Name = ""    #(char Name[33])
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x05
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB3
-        self.Head.SubCmd = 0x05
-        self.PlayerID = 0
-        self.Name = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 33
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.Name)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                Name:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.Name
-                                )
-        return DumpString
-
-
-m_NAtagGCSocialName=tagGCSocialName()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialName.Head.Cmd,m_NAtagGCSocialName.Head.SubCmd))] = m_NAtagGCSocialName
-
-
-#------------------------------------------------------
-#B3 06 社交玩家在线情况 #tagGCSocialOnline
-
-class  tagGCSocialOnline(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    
-                  ("OnlineType", c_ubyte),    #0不在线 1在线 2脱机在线
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x06
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x06
-        self.PlayerID = 0
-        self.OnlineType = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCSocialOnline)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B3 06 社交玩家在线情况 //tagGCSocialOnline:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                OnlineType:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.OnlineType
-                                )
-        return DumpString
-
-
-m_NAtagGCSocialOnline=tagGCSocialOnline()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialOnline.Cmd,m_NAtagGCSocialOnline.SubCmd))] = m_NAtagGCSocialOnline
-
-
-#------------------------------------------------------
-#B3 07 社交玩家属性广播 #tagGCSocialRefreshType
-
-class  tagGCSocialRefreshType(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    
-                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__	
-                  ("Value", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB3
-        self.SubCmd = 0x07
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB3
-        self.SubCmd = 0x07
-        self.PlayerID = 0
-        self.RefreshType = 0
-        self.Value = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCSocialRefreshType)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''//B3 07 社交玩家属性广播 //tagGCSocialRefreshType:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                RefreshType:%d,
-                                Value:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.RefreshType,
-                                self.Value
-                                )
-        return DumpString
-
-
-m_NAtagGCSocialRefreshType=tagGCSocialRefreshType()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialRefreshType.Cmd,m_NAtagGCSocialRefreshType.SubCmd))] = m_NAtagGCSocialRefreshType
-
-
-#------------------------------------------------------
-# B5 04 拍卖行新上架拍品 #tagGCAddAuctionItemInfo
-
-class  tagGCAddAuctionItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    ItemID = 0    #(DWORD ItemID)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.ItemID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                ItemID:%d
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.ItemID
-                                )
-        return DumpString
-
-
-class  tagGCAddAuctionItemInfo(Structure):
-    Head = tagHead()
-    AddCount = 0    #(BYTE AddCount)
-    AddAuctionItemList = list()    #(vector<tagGCAddAuctionItem> AddAuctionItemList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AddCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AddCount):
-            temAddAuctionItemList = tagGCAddAuctionItem()
-            _pos = temAddAuctionItemList.ReadData(_lpData, _pos)
-            self.AddAuctionItemList.append(temAddAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x04
-        self.AddCount = 0
-        self.AddAuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.AddCount):
-            length += self.AddAuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AddCount)
-        for i in range(self.AddCount):
-            data = CommFunc.WriteString(data, self.AddAuctionItemList[i].GetLength(), self.AddAuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AddCount:%d,
-                                AddAuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AddCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCAddAuctionItemInfo=tagGCAddAuctionItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddAuctionItemInfo.Head.Cmd,m_NAtagGCAddAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAddAuctionItemInfo
-
-
-#------------------------------------------------------
-# B5 07 拍卖行关注的物品ID #tagGCAttentionAuctionItemID
-
-class  tagGCAttentionAuctionItemID(Structure):
-    Head = tagHead()
-    AttentionCount = 0    #(BYTE AttentionCount)
-    AttentionItemIDList = list()    #(vector<DWORD> AttentionItemIDList)// 关注的物品ID列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x07
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AttentionCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AttentionCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.AttentionItemIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x07
-        self.AttentionCount = 0
-        self.AttentionItemIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4 * self.AttentionCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AttentionCount)
-        for i in range(self.AttentionCount):
-            data = CommFunc.WriteDWORD(data, self.AttentionItemIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AttentionCount:%d,
-                                AttentionItemIDList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AttentionCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCAttentionAuctionItemID=tagGCAttentionAuctionItemID()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemID.Head.Cmd,m_NAtagGCAttentionAuctionItemID.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemID
-
-
-#------------------------------------------------------
-# B5 06 拍卖行关注中的拍品信息 #tagGCAttentionAuctionItemInfo
-
-class  tagGCAttentionAuctionItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
-    ItemID = 0    #(DWORD ItemID)
-    ItemCount = 0    #(WORD ItemCount)
-    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
-    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
-    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
-    UserDataLen = 0    #(WORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.FamilyID = 0
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.AddTime = ""
-        self.BidderPrice = 0
-        self.BiddingTime = ""
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-        length += 4
-        length += 2
-        length += 19
-        length += 4
-        length += 19
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        data = CommFunc.WriteString(data, 19, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.BidderPrice)
-        data = CommFunc.WriteString(data, 19, self.BiddingTime)
-        data = CommFunc.WriteWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                FamilyID:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                AddTime:%s,
-                                BidderPrice:%d,
-                                BiddingTime:%s,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.FamilyID,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.AddTime,
-                                self.BidderPrice,
-                                self.BiddingTime,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagGCAttentionAuctionItemInfo(Structure):
-    Head = tagHead()
-    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
-    AuctionItemList = list()    #(vector<tagGCAttentionAuctionItem> AuctionItemList)//拍品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x06
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AuctionItemCount):
-            temAuctionItemList = tagGCAttentionAuctionItem()
-            _pos = temAuctionItemList.ReadData(_lpData, _pos)
-            self.AuctionItemList.append(temAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x06
-        self.AuctionItemCount = 0
-        self.AuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.AuctionItemCount):
-            length += self.AuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
-        for i in range(self.AuctionItemCount):
-            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AuctionItemCount:%d,
-                                AuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AuctionItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCAttentionAuctionItemInfo=tagGCAttentionAuctionItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemInfo.Head.Cmd,m_NAtagGCAttentionAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemInfo
-
-
-#------------------------------------------------------
-# B5 01 拍卖行拍卖中的物品信息 #tagGCAuctionItemInfo
-
-class  tagGCAuctionItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
-    ItemID = 0    #(DWORD ItemID)
-    ItemCount = 0    #(WORD ItemCount)
-    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
-    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
-    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
-    UserDataLen = 0    #(WORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.FamilyID = 0
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.AddTime = ""
-        self.BidderPrice = 0
-        self.BiddingTime = ""
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-        length += 4
-        length += 2
-        length += 19
-        length += 4
-        length += 19
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        data = CommFunc.WriteString(data, 19, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.BidderPrice)
-        data = CommFunc.WriteString(data, 19, self.BiddingTime)
-        data = CommFunc.WriteWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                FamilyID:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                AddTime:%s,
-                                BidderPrice:%d,
-                                BiddingTime:%s,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.FamilyID,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.AddTime,
-                                self.BidderPrice,
-                                self.BiddingTime,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagGCAuctionItemInfo(Structure):
-    Head = tagHead()
-    Job = 0    #(BYTE Job)//过滤职业,0为不限制
-    ItemTypeCount = 0    #(BYTE ItemTypeCount)
-    ItemTypeList = list()    #(vector<DWORD> ItemTypeList)//指定的物品类型
-    ClassLV = 0    #(BYTE ClassLV)//过滤阶数,0为不限制
-    SpecItemIDCount = 0    #(BYTE SpecItemIDCount)//指定物品ID个数
-    SpecItemIDList = list()    #(vector<DWORD> SpecItemIDList)//指定物品ID
-    FromItemGUID = ""    #(char FromItemGUID[40])//从哪个物品开始查询
-    QueryDir = 0    #(BYTE QueryDir)//查询方向,1-往后查,2-往前查,3-定位查询
-    QueryCount = 0    #(BYTE QueryCount)//查询个数,0为全部
-    QueryRemainlCount = 0    #(WORD QueryRemainlCount)//查询条件对应查询方向剩余个数
-    AuctionItemCount = 0    #(BYTE AuctionItemCount)//返回拍品数量
-    AuctionItemList = list()    #(vector<tagGCAuctionItem> AuctionItemList)//返回拍品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ItemTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ItemTypeCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.ItemTypeList.append(value)
-        self.ClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SpecItemIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.SpecItemIDCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.SpecItemIDList.append(value)
-        self.FromItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.QueryDir,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.QueryCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.QueryRemainlCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AuctionItemCount):
-            temAuctionItemList = tagGCAuctionItem()
-            _pos = temAuctionItemList.ReadData(_lpData, _pos)
-            self.AuctionItemList.append(temAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x01
-        self.Job = 0
-        self.ItemTypeCount = 0
-        self.ItemTypeList = list()
-        self.ClassLV = 0
-        self.SpecItemIDCount = 0
-        self.SpecItemIDList = list()
-        self.FromItemGUID = ""
-        self.QueryDir = 0
-        self.QueryCount = 0
-        self.QueryRemainlCount = 0
-        self.AuctionItemCount = 0
-        self.AuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 4 * self.ItemTypeCount
-        length += 1
-        length += 1
-        length += 4 * self.SpecItemIDCount
-        length += 40
-        length += 1
-        length += 1
-        length += 2
-        length += 1
-        for i in range(self.AuctionItemCount):
-            length += self.AuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteBYTE(data, self.ItemTypeCount)
-        for i in range(self.ItemTypeCount):
-            data = CommFunc.WriteDWORD(data, self.ItemTypeList[i])
-        data = CommFunc.WriteBYTE(data, self.ClassLV)
-        data = CommFunc.WriteBYTE(data, self.SpecItemIDCount)
-        for i in range(self.SpecItemIDCount):
-            data = CommFunc.WriteDWORD(data, self.SpecItemIDList[i])
-        data = CommFunc.WriteString(data, 40, self.FromItemGUID)
-        data = CommFunc.WriteBYTE(data, self.QueryDir)
-        data = CommFunc.WriteBYTE(data, self.QueryCount)
-        data = CommFunc.WriteWORD(data, self.QueryRemainlCount)
-        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
-        for i in range(self.AuctionItemCount):
-            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Job:%d,
-                                ItemTypeCount:%d,
-                                ItemTypeList:%s,
-                                ClassLV:%d,
-                                SpecItemIDCount:%d,
-                                SpecItemIDList:%s,
-                                FromItemGUID:%s,
-                                QueryDir:%d,
-                                QueryCount:%d,
-                                QueryRemainlCount:%d,
-                                AuctionItemCount:%d,
-                                AuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Job,
-                                self.ItemTypeCount,
-                                "...",
-                                self.ClassLV,
-                                self.SpecItemIDCount,
-                                "...",
-                                self.FromItemGUID,
-                                self.QueryDir,
-                                self.QueryCount,
-                                self.QueryRemainlCount,
-                                self.AuctionItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCAuctionItemInfo=tagGCAuctionItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAuctionItemInfo.Head.Cmd,m_NAtagGCAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAuctionItemInfo
-
-
-#------------------------------------------------------
-# B5 10 拍卖行玩家竞价中的物品信息 #tagGCBiddingItemInfo
-
-class  tagGCBiddingItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
-    ItemID = 0    #(DWORD ItemID)
-    ItemCount = 0    #(WORD ItemCount)
-    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
-    BidderID = 0    #(DWORD BidderID)//竞拍玩家ID,也就是当前最高竞价玩家ID
-    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
-    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
-    UserDataLen = 0    #(WORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.FamilyID = 0
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.AddTime = ""
-        self.BidderID = 0
-        self.BidderPrice = 0
-        self.BiddingTime = ""
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-        length += 4
-        length += 2
-        length += 19
-        length += 4
-        length += 4
-        length += 19
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        data = CommFunc.WriteString(data, 19, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.BidderID)
-        data = CommFunc.WriteDWORD(data, self.BidderPrice)
-        data = CommFunc.WriteString(data, 19, self.BiddingTime)
-        data = CommFunc.WriteWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                FamilyID:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                AddTime:%s,
-                                BidderID:%d,
-                                BidderPrice:%d,
-                                BiddingTime:%s,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.FamilyID,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.AddTime,
-                                self.BidderID,
-                                self.BidderPrice,
-                                self.BiddingTime,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagGCBiddingItemInfo(Structure):
-    Head = tagHead()
-    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
-    AuctionItemList = list()    #(vector<tagGCBiddingItem> AuctionItemList)//拍品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x10
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AuctionItemCount):
-            temAuctionItemList = tagGCBiddingItem()
-            _pos = temAuctionItemList.ReadData(_lpData, _pos)
-            self.AuctionItemList.append(temAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x10
-        self.AuctionItemCount = 0
-        self.AuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.AuctionItemCount):
-            length += self.AuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
-        for i in range(self.AuctionItemCount):
-            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AuctionItemCount:%d,
-                                AuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AuctionItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCBiddingItemInfo=tagGCBiddingItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBiddingItemInfo.Head.Cmd,m_NAtagGCBiddingItemInfo.Head.SubCmd))] = m_NAtagGCBiddingItemInfo
-
-
-#------------------------------------------------------
-# B5 09 拍卖行清除拍品 #tagGCClearAuctionItemInfo
-
-class  tagGCClearAuctionItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s
-                                '''\
-                                %(
-                                self.ItemGUID
-                                )
-        return DumpString
-
-
-class  tagGCClearAuctionItemInfo(Structure):
-    Head = tagHead()
-    ClearCount = 0    #(BYTE ClearCount)
-    ClearAuctionItemList = list()    #(vector<tagGCClearAuctionItem> ClearAuctionItemList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x09
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ClearCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ClearCount):
-            temClearAuctionItemList = tagGCClearAuctionItem()
-            _pos = temClearAuctionItemList.ReadData(_lpData, _pos)
-            self.ClearAuctionItemList.append(temClearAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x09
-        self.ClearCount = 0
-        self.ClearAuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.ClearCount):
-            length += self.ClearAuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ClearCount)
-        for i in range(self.ClearCount):
-            data = CommFunc.WriteString(data, self.ClearAuctionItemList[i].GetLength(), self.ClearAuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ClearCount:%d,
-                                ClearAuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ClearCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCClearAuctionItemInfo=tagGCClearAuctionItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAuctionItemInfo.Head.Cmd,m_NAtagGCClearAuctionItemInfo.Head.SubCmd))] = m_NAtagGCClearAuctionItemInfo
-
-
-#------------------------------------------------------
-# B5 11 部位升星自动购买拍品消耗信息 #tagGCEquipStarAutoBuyCostInfo
-
-class  tagGCEquipStarAutoBuyCostInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ClassLV", c_ubyte),    # 当前要升星的境界阶
-                  ("EquipPlace", c_ubyte),    #当前要升星的装备位
-                  ("CurStar", c_ubyte),    #当前星级
-                  ("CurRate", c_ubyte),    #当前自动购买后的总概率,不满100则代表拍品库存不足
-                  ("AutoBuyCostMoney", c_int),    #自动购买所需总消耗
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB5
-        self.SubCmd = 0x11
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB5
-        self.SubCmd = 0x11
-        self.ClassLV = 0
-        self.EquipPlace = 0
-        self.CurStar = 0
-        self.CurRate = 0
-        self.AutoBuyCostMoney = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCEquipStarAutoBuyCostInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B5 11 部位升星自动购买拍品消耗信息 //tagGCEquipStarAutoBuyCostInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ClassLV:%d,
-                                EquipPlace:%d,
-                                CurStar:%d,
-                                CurRate:%d,
-                                AutoBuyCostMoney:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ClassLV,
-                                self.EquipPlace,
-                                self.CurStar,
-                                self.CurRate,
-                                self.AutoBuyCostMoney
-                                )
-        return DumpString
-
-
-m_NAtagGCEquipStarAutoBuyCostInfo=tagGCEquipStarAutoBuyCostInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEquipStarAutoBuyCostInfo.Cmd,m_NAtagGCEquipStarAutoBuyCostInfo.SubCmd))] = m_NAtagGCEquipStarAutoBuyCostInfo
-
-
-#------------------------------------------------------
-# B5 05 拍卖行仙盟拍卖中的物品信息 #tagGCFamilyAuctionItemInfo
-
-class  tagGCFamilyAuctionItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
-    ItemID = 0    #(DWORD ItemID)
-    ItemCount = 0    #(WORD ItemCount)
-    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
-    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
-    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
-    UserDataLen = 0    #(WORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据
-    FamilyPlayerIDLen = 0    #(WORD FamilyPlayerIDLen)
-    FamilyPlayerIDInfo = ""    #(String FamilyPlayerIDInfo)//可获得收益的仙盟玩家ID信息
-    AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        self.FamilyPlayerIDLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FamilyPlayerIDInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyPlayerIDLen)
-        self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.FamilyID = 0
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.AddTime = ""
-        self.BidderPrice = 0
-        self.BiddingTime = ""
-        self.UserDataLen = 0
-        self.UserData = ""
-        self.FamilyPlayerIDLen = 0
-        self.FamilyPlayerIDInfo = ""
-        self.AuctionType = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-        length += 4
-        length += 2
-        length += 19
-        length += 4
-        length += 19
-        length += 2
-        length += len(self.UserData)
-        length += 2
-        length += len(self.FamilyPlayerIDInfo)
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        data = CommFunc.WriteString(data, 19, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.BidderPrice)
-        data = CommFunc.WriteString(data, 19, self.BiddingTime)
-        data = CommFunc.WriteWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        data = CommFunc.WriteWORD(data, self.FamilyPlayerIDLen)
-        data = CommFunc.WriteString(data, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo)
-        data = CommFunc.WriteBYTE(data, self.AuctionType)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                FamilyID:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                AddTime:%s,
-                                BidderPrice:%d,
-                                BiddingTime:%s,
-                                UserDataLen:%d,
-                                UserData:%s,
-                                FamilyPlayerIDLen:%d,
-                                FamilyPlayerIDInfo:%s,
-                                AuctionType:%d
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.FamilyID,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.AddTime,
-                                self.BidderPrice,
-                                self.BiddingTime,
-                                self.UserDataLen,
-                                self.UserData,
-                                self.FamilyPlayerIDLen,
-                                self.FamilyPlayerIDInfo,
-                                self.AuctionType
-                                )
-        return DumpString
-
-
-class  tagGCFamilyAuctionItemInfo(Structure):
-    Head = tagHead()
-    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
-    AuctionItemList = list()    #(vector<tagGCFamilyAuctionItem> AuctionItemList)//拍品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x05
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AuctionItemCount):
-            temAuctionItemList = tagGCFamilyAuctionItem()
-            _pos = temAuctionItemList.ReadData(_lpData, _pos)
-            self.AuctionItemList.append(temAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x05
-        self.AuctionItemCount = 0
-        self.AuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.AuctionItemCount):
-            length += self.AuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
-        for i in range(self.AuctionItemCount):
-            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AuctionItemCount:%d,
-                                AuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AuctionItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyAuctionItemInfo=tagGCFamilyAuctionItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyAuctionItemInfo.Head.Cmd,m_NAtagGCFamilyAuctionItemInfo.Head.SubCmd))] = m_NAtagGCFamilyAuctionItemInfo
-
-
-#------------------------------------------------------
-# B5 02 拍卖行玩家拍卖中的物品信息 #tagGCPlayerAuctionItemInfo
-
-class  tagGCPlayerAuctionItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
-    ItemID = 0    #(DWORD ItemID)
-    ItemCount = 0    #(WORD ItemCount)
-    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
-    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
-    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
-    UserDataLen = 0    #(WORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.FamilyID = 0
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.AddTime = ""
-        self.BidderPrice = 0
-        self.BiddingTime = ""
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-        length += 4
-        length += 2
-        length += 19
-        length += 4
-        length += 19
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        data = CommFunc.WriteString(data, 19, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.BidderPrice)
-        data = CommFunc.WriteString(data, 19, self.BiddingTime)
-        data = CommFunc.WriteWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                FamilyID:%d,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                AddTime:%s,
-                                BidderPrice:%d,
-                                BiddingTime:%s,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.FamilyID,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.AddTime,
-                                self.BidderPrice,
-                                self.BiddingTime,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagGCPlayerAuctionItemInfo(Structure):
-    Head = tagHead()
-    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
-    AuctionItemList = list()    #(vector<tagGCPlayerAuctionItem> AuctionItemList)//拍品列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x02
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AuctionItemCount):
-            temAuctionItemList = tagGCPlayerAuctionItem()
-            _pos = temAuctionItemList.ReadData(_lpData, _pos)
-            self.AuctionItemList.append(temAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x02
-        self.AuctionItemCount = 0
-        self.AuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.AuctionItemCount):
-            length += self.AuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
-        for i in range(self.AuctionItemCount):
-            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AuctionItemCount:%d,
-                                AuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AuctionItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCPlayerAuctionItemInfo=tagGCPlayerAuctionItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionItemInfo.Head.Cmd,m_NAtagGCPlayerAuctionItemInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionItemInfo
-
-
-#------------------------------------------------------
-# B5 03 拍卖行玩家拍卖记录 #tagGCPlayerAuctionRecordInfo
-
-class  tagGCPlayerAuctionRecord(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
-    RecordType = 0    #(BYTE RecordType)//记录类型 0-我的拍品记录 1-仙盟拍品记录 2-我的竞拍记录
-    RecordResult = 0    #(BYTE RecordResult)//记录结果 0-流拍 1-拍卖成交 2-回收 3-竞价成功 4-竞价失败
-    RecordTime = ""    #(char RecordTime[19])//记录时间 yyyy-MM-dd hh:mm:ss
-    BidderPrice = 0    #(DWORD BidderPrice)//成交价格
-    BidderName = ""    #(char BidderName[33])//成交玩家名
-    ItemID = 0    #(DWORD ItemID)
-    ItemCount = 0    #(WORD ItemCount)
-    UserDataLen = 0    #(WORD UserDataLen)
-    UserData = ""    #(String UserData)//自定义数据
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RecordResult,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RecordTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BidderName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.FamilyID = 0
-        self.RecordType = 0
-        self.RecordResult = 0
-        self.RecordTime = ""
-        self.BidderPrice = 0
-        self.BidderName = ""
-        self.ItemID = 0
-        self.ItemCount = 0
-        self.UserDataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 4
-        length += 1
-        length += 1
-        length += 19
-        length += 4
-        length += 33
-        length += 4
-        length += 2
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteBYTE(data, self.RecordType)
-        data = CommFunc.WriteBYTE(data, self.RecordResult)
-        data = CommFunc.WriteString(data, 19, self.RecordTime)
-        data = CommFunc.WriteDWORD(data, self.BidderPrice)
-        data = CommFunc.WriteString(data, 33, self.BidderName)
-        data = CommFunc.WriteDWORD(data, self.ItemID)
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        data = CommFunc.WriteWORD(data, self.UserDataLen)
-        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                FamilyID:%d,
-                                RecordType:%d,
-                                RecordResult:%d,
-                                RecordTime:%s,
-                                BidderPrice:%d,
-                                BidderName:%s,
-                                ItemID:%d,
-                                ItemCount:%d,
-                                UserDataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.FamilyID,
-                                self.RecordType,
-                                self.RecordResult,
-                                self.RecordTime,
-                                self.BidderPrice,
-                                self.BidderName,
-                                self.ItemID,
-                                self.ItemCount,
-                                self.UserDataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagGCPlayerAuctionRecordInfo(Structure):
-    Head = tagHead()
-    Count = 0    #(BYTE Count)
-    AuctionRecordList = list()    #(vector<tagGCPlayerAuctionRecord> AuctionRecordList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temAuctionRecordList = tagGCPlayerAuctionRecord()
-            _pos = temAuctionRecordList.ReadData(_lpData, _pos)
-            self.AuctionRecordList.append(temAuctionRecordList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x03
-        self.Count = 0
-        self.AuctionRecordList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.Count):
-            length += self.AuctionRecordList[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.AuctionRecordList[i].GetLength(), self.AuctionRecordList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Count:%d,
-                                AuctionRecordList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCPlayerAuctionRecordInfo=tagGCPlayerAuctionRecordInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionRecordInfo.Head.Cmd,m_NAtagGCPlayerAuctionRecordInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionRecordInfo
-
-
-#------------------------------------------------------
-# B5 08 拍卖行刷新拍品 #tagGCRefreshAuctionItemInfo
-
-class  tagGCRefreshAuctionItem(Structure):
-    ItemGUID = ""    #(char ItemGUID[40])
-    AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
-    AddTime = ""    #(char AddTime[19])//上架时间
-    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID	
-    BidderPrice = 0    #(DWORD BidderPrice)//最高竞拍价格
-    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
-        self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        return _pos
-
-    def Clear(self):
-        self.ItemGUID = ""
-        self.AuctionType = 0
-        self.AddTime = ""
-        self.BidderID = 0
-        self.BidderPrice = 0
-        self.BiddingTime = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 40
-        length += 1
-        length += 19
-        length += 4
-        length += 4
-        length += 19
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 40, self.ItemGUID)
-        data = CommFunc.WriteBYTE(data, self.AuctionType)
-        data = CommFunc.WriteString(data, 19, self.AddTime)
-        data = CommFunc.WriteDWORD(data, self.BidderID)
-        data = CommFunc.WriteDWORD(data, self.BidderPrice)
-        data = CommFunc.WriteString(data, 19, self.BiddingTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ItemGUID:%s,
-                                AuctionType:%d,
-                                AddTime:%s,
-                                BidderID:%d,
-                                BidderPrice:%d,
-                                BiddingTime:%s
-                                '''\
-                                %(
-                                self.ItemGUID,
-                                self.AuctionType,
-                                self.AddTime,
-                                self.BidderID,
-                                self.BidderPrice,
-                                self.BiddingTime
-                                )
-        return DumpString
-
-
-class  tagGCRefreshAuctionItemInfo(Structure):
-    Head = tagHead()
-    RefreshCount = 0    #(BYTE RefreshCount)
-    RefreshAuctionItemList = list()    #(vector<tagGCRefreshAuctionItem> RefreshAuctionItemList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RefreshCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RefreshCount):
-            temRefreshAuctionItemList = tagGCRefreshAuctionItem()
-            _pos = temRefreshAuctionItemList.ReadData(_lpData, _pos)
-            self.RefreshAuctionItemList.append(temRefreshAuctionItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB5
-        self.Head.SubCmd = 0x08
-        self.RefreshCount = 0
-        self.RefreshAuctionItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.RefreshCount):
-            length += self.RefreshAuctionItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RefreshCount)
-        for i in range(self.RefreshCount):
-            data = CommFunc.WriteString(data, self.RefreshAuctionItemList[i].GetLength(), self.RefreshAuctionItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RefreshCount:%d,
-                                RefreshAuctionItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RefreshCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCRefreshAuctionItemInfo=tagGCRefreshAuctionItemInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRefreshAuctionItemInfo.Head.Cmd,m_NAtagGCRefreshAuctionItemInfo.Head.SubCmd))] = m_NAtagGCRefreshAuctionItemInfo
-
-
-#------------------------------------------------------
-# B9 13 进入组队副本失败原因 #tagGCEnterTeamFBFailReason
-
-class  tagGCEnterTeamFBFailReason(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("MapID", c_int),    # 请求进入的地图ID
-                  ("AskType", c_ubyte),    # 请求类型: 0-匹配请求;1-进入请求
-                  ("Reason", c_ubyte),    # 失败原因:2-次数不足;3-进入CD中;6-门票不足
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB9
-        self.SubCmd = 0x13
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB9
-        self.SubCmd = 0x13
-        self.MapID = 0
-        self.AskType = 0
-        self.Reason = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCEnterTeamFBFailReason)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B9 13 进入组队副本失败原因 //tagGCEnterTeamFBFailReason:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                MapID:%d,
-                                AskType:%d,
-                                Reason:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.MapID,
-                                self.AskType,
-                                self.Reason
-                                )
-        return DumpString
-
-
-m_NAtagGCEnterTeamFBFailReason=tagGCEnterTeamFBFailReason()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEnterTeamFBFailReason.Cmd,m_NAtagGCEnterTeamFBFailReason.SubCmd))] = m_NAtagGCEnterTeamFBFailReason
-
-
-#------------------------------------------------------
-# B9 23 功能队伍解散 #tagGCFuncTeamDissolve
-
-class  tagGCFuncTeamDissolve(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TeamID", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB9
-        self.SubCmd = 0x23
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB9
-        self.SubCmd = 0x23
-        self.TeamID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFuncTeamDissolve)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B9 23 功能队伍解散 //tagGCFuncTeamDissolve:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TeamID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TeamID
-                                )
-        return DumpString
-
-
-m_NAtagGCFuncTeamDissolve=tagGCFuncTeamDissolve()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamDissolve.Cmd,m_NAtagGCFuncTeamDissolve.SubCmd))] = m_NAtagGCFuncTeamDissolve
-
-
-#------------------------------------------------------
-# B9 22 功能队伍列表 #tagGCFuncTeamList
-
-class  tagGCFuncTeamMem(Structure):
-    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)//头像框
-    FightPower = 0    #(DWORD FightPower)// 战力,求余亿
-    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
-    Value1 = 0    #(DWORD Value1)//值1
-    Value2 = 0    #(DWORD Value2)//值2
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        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.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        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.FightPower = 0
-        self.FightPowerEx = 0
-        self.Value1 = 0
-        self.Value2 = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.Value1)
-        data = CommFunc.WriteDWORD(data, self.Value2)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ServerID:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                Value1:%d,
-                                Value2:%d
-                                '''\
-                                %(
-                                self.ServerID,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.Value1,
-                                self.Value2
-                                )
-        return DumpString
-
-
-class  tagGCFuncTeam(Structure):
-    TeamID = 0    #(DWORD TeamID)
-    CreateTime = 0    #(DWORD CreateTime)//创建队伍时间戳
-    FuncMapEx = 0    #(DWORD FuncMapEx)//功能地图扩展,如不同的层级
-    NameLen = 0    #(BYTE NameLen)
-    TeamName = ""    #(String TeamName)//队伍名称
-    CaptainID = 0    #(DWORD CaptainID)//队长ID,队伍ServerID直接取队长的ServerID
-    MinLV = 0    #(WORD MinLV)//最低等级限制
-    MinFightPower = 0    #(DWORD MinFightPower)//最低战力限制,求余亿
-    MinFightPowerEx = 0    #(DWORD MinFightPowerEx)//最低战力限制,整除亿
-    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
-    NeedCheck = 0    #(BYTE NeedCheck)//是否需要审核
-    Value1 = 0    #(DWORD Value1)//值1
-    Value2 = 0    #(DWORD Value2)//值2
-    MemberCount = 0    #(BYTE MemberCount)
-    MemberList = list()    #(vector<tagGCFuncTeamMem> MemberList)// 成员列表
-    ApplyCount = 0    #(WORD ApplyCount)
-    ApplyIDList = list()    #(vector<DWORD> ApplyIDList)// 申请玩家ID列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CreateTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TeamName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.CaptainID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MinFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MinFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedCheck,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemberCount):
-            temMemberList = tagGCFuncTeamMem()
-            _pos = temMemberList.ReadData(_lpData, _pos)
-            self.MemberList.append(temMemberList)
-        self.ApplyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.ApplyCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.ApplyIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.TeamID = 0
-        self.CreateTime = 0
-        self.FuncMapEx = 0
-        self.NameLen = 0
-        self.TeamName = ""
-        self.CaptainID = 0
-        self.MinLV = 0
-        self.MinFightPower = 0
-        self.MinFightPowerEx = 0
-        self.ServerOnly = 0
-        self.NeedCheck = 0
-        self.Value1 = 0
-        self.Value2 = 0
-        self.MemberCount = 0
-        self.MemberList = list()
-        self.ApplyCount = 0
-        self.ApplyIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.TeamName)
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.MemberCount):
-            length += self.MemberList[i].GetLength()
-        length += 2
-        length += 4 * self.ApplyCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.TeamID)
-        data = CommFunc.WriteDWORD(data, self.CreateTime)
-        data = CommFunc.WriteDWORD(data, self.FuncMapEx)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.TeamName)
-        data = CommFunc.WriteDWORD(data, self.CaptainID)
-        data = CommFunc.WriteWORD(data, self.MinLV)
-        data = CommFunc.WriteDWORD(data, self.MinFightPower)
-        data = CommFunc.WriteDWORD(data, self.MinFightPowerEx)
-        data = CommFunc.WriteBYTE(data, self.ServerOnly)
-        data = CommFunc.WriteBYTE(data, self.NeedCheck)
-        data = CommFunc.WriteDWORD(data, self.Value1)
-        data = CommFunc.WriteDWORD(data, self.Value2)
-        data = CommFunc.WriteBYTE(data, self.MemberCount)
-        for i in range(self.MemberCount):
-            data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer())
-        data = CommFunc.WriteWORD(data, self.ApplyCount)
-        for i in range(self.ApplyCount):
-            data = CommFunc.WriteDWORD(data, self.ApplyIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                TeamID:%d,
-                                CreateTime:%d,
-                                FuncMapEx:%d,
-                                NameLen:%d,
-                                TeamName:%s,
-                                CaptainID:%d,
-                                MinLV:%d,
-                                MinFightPower:%d,
-                                MinFightPowerEx:%d,
-                                ServerOnly:%d,
-                                NeedCheck:%d,
-                                Value1:%d,
-                                Value2:%d,
-                                MemberCount:%d,
-                                MemberList:%s,
-                                ApplyCount:%d,
-                                ApplyIDList:%s
-                                '''\
-                                %(
-                                self.TeamID,
-                                self.CreateTime,
-                                self.FuncMapEx,
-                                self.NameLen,
-                                self.TeamName,
-                                self.CaptainID,
-                                self.MinLV,
-                                self.MinFightPower,
-                                self.MinFightPowerEx,
-                                self.ServerOnly,
-                                self.NeedCheck,
-                                self.Value1,
-                                self.Value2,
-                                self.MemberCount,
-                                "...",
-                                self.ApplyCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCFuncTeamList(Structure):
-    Head = tagHead()
-    FuncMapID = 0    #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID
-    FuncMapEx = 0    #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级,0代表所有
-    StartIndex = 0    #(DWORD StartIndex)// 查看的起始索引, 默认0
-    QueryCnt = 0    #(BYTE QueryCnt)// 查看条数,默认20,最大不超过100
-    HaveSpace = 0    #(BYTE HaveSpace)// 是否只查看有空位置的队伍
-    IDLimitType = 0    #(BYTE IDLimitType)// ID限制类型:1-同仙盟队长;2-同ServerGroupID队长;3-同ServerID队长
-    SearchLen = 0    #(BYTE SearchLen)
-    SearchMsg = ""    #(String SearchMsg)// 指定搜索时有用,可搜索指定队伍ID或模糊搜索队伍名称,搜索时返回最多QueryCnt个数的队伍
-    LoopIndex = 0    #(DWORD LoopIndex)// 服务器检索到的索引,列表下拉时下一个查询包的StartIndex从这个LoopIndex开始
-    TeamCount = 0    #(BYTE TeamCount)// 如果返回的队伍数小于QueryCnt,代表服务器已经没有满足条件的队伍了,列表再下拉时不再发查询包
-    TeamList = list()    #(vector<tagGCFuncTeam> TeamList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x22
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.StartIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.QueryCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.HaveSpace,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.IDLimitType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SearchLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SearchMsg,_pos = CommFunc.ReadString(_lpData, _pos,self.SearchLen)
-        self.LoopIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TeamCount):
-            temTeamList = tagGCFuncTeam()
-            _pos = temTeamList.ReadData(_lpData, _pos)
-            self.TeamList.append(temTeamList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x22
-        self.FuncMapID = 0
-        self.FuncMapEx = 0
-        self.StartIndex = 0
-        self.QueryCnt = 0
-        self.HaveSpace = 0
-        self.IDLimitType = 0
-        self.SearchLen = 0
-        self.SearchMsg = ""
-        self.LoopIndex = 0
-        self.TeamCount = 0
-        self.TeamList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        length += 1
-        length += len(self.SearchMsg)
-        length += 4
-        length += 1
-        for i in range(self.TeamCount):
-            length += self.TeamList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.FuncMapID)
-        data = CommFunc.WriteDWORD(data, self.FuncMapEx)
-        data = CommFunc.WriteDWORD(data, self.StartIndex)
-        data = CommFunc.WriteBYTE(data, self.QueryCnt)
-        data = CommFunc.WriteBYTE(data, self.HaveSpace)
-        data = CommFunc.WriteBYTE(data, self.IDLimitType)
-        data = CommFunc.WriteBYTE(data, self.SearchLen)
-        data = CommFunc.WriteString(data, self.SearchLen, self.SearchMsg)
-        data = CommFunc.WriteDWORD(data, self.LoopIndex)
-        data = CommFunc.WriteBYTE(data, self.TeamCount)
-        for i in range(self.TeamCount):
-            data = CommFunc.WriteString(data, self.TeamList[i].GetLength(), self.TeamList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FuncMapID:%d,
-                                FuncMapEx:%d,
-                                StartIndex:%d,
-                                QueryCnt:%d,
-                                HaveSpace:%d,
-                                IDLimitType:%d,
-                                SearchLen:%d,
-                                SearchMsg:%s,
-                                LoopIndex:%d,
-                                TeamCount:%d,
-                                TeamList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FuncMapID,
-                                self.FuncMapEx,
-                                self.StartIndex,
-                                self.QueryCnt,
-                                self.HaveSpace,
-                                self.IDLimitType,
-                                self.SearchLen,
-                                self.SearchMsg,
-                                self.LoopIndex,
-                                self.TeamCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFuncTeamList=tagGCFuncTeamList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamList.Head.Cmd,m_NAtagGCFuncTeamList.Head.SubCmd))] = m_NAtagGCFuncTeamList
-
-
-#------------------------------------------------------
-# B9 20 功能队伍刷新 #tagGCFuncTeamRefresh
-
-class  tagGCFuncTeamRefreshApply(Structure):
-    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)//头像框
-    FightPower = 0    #(DWORD FightPower)// 战力,求余亿
-    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        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.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        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.FightPower = 0
-        self.FightPowerEx = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ServerID:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d
-                                '''\
-                                %(
-                                self.ServerID,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.FightPower,
-                                self.FightPowerEx
-                                )
-        return DumpString
-
-
-class  tagGCFuncTeamRefreshMem(Structure):
-    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)//头像框
-    FightPower = 0    #(DWORD FightPower)// 战力,求余亿
-    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
-    OfflineValue = 0    #(DWORD OfflineValue)// 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线;
-    Value1 = 0    #(DWORD Value1)//值1
-    Value2 = 0    #(DWORD Value2)//值2
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        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.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.OfflineValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        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.FightPower = 0
-        self.FightPowerEx = 0
-        self.OfflineValue = 0
-        self.Value1 = 0
-        self.Value2 = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.OfflineValue)
-        data = CommFunc.WriteDWORD(data, self.Value1)
-        data = CommFunc.WriteDWORD(data, self.Value2)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ServerID:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                OfflineValue:%d,
-                                Value1:%d,
-                                Value2:%d
-                                '''\
-                                %(
-                                self.ServerID,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.OfflineValue,
-                                self.Value1,
-                                self.Value2
-                                )
-        return DumpString
-
-
-class  tagGCFuncTeamRefresh(Structure):
-    Head = tagHead()
-    TeamID = 0    #(DWORD TeamID)
-    CreateTime = 0    #(DWORD CreateTime)//创建队伍时间戳
-    FuncMapID = 0    #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID
-    FuncMapEx = 0    #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级
-    NameLen = 0    #(BYTE NameLen)
-    TeamName = ""    #(String TeamName)// 队伍名称
-    CaptainID = 0    #(DWORD CaptainID)//队长ID,队伍ServerID直接取队长的ServerID
-    MinLV = 0    #(WORD MinLV)//最低等级限制
-    MinFightPower = 0    #(DWORD MinFightPower)//最低战力限制,求余亿
-    MinFightPowerEx = 0    #(DWORD MinFightPowerEx)//最低战力限制,整除亿
-    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
-    NeedCheck = 0    #(BYTE NeedCheck)//是否需要审核
-    Value1 = 0    #(DWORD Value1)//值1
-    Value2 = 0    #(DWORD Value2)//值2
-    MemberCount = 0    #(BYTE MemberCount)
-    MemberList = list()    #(vector<tagGCFuncTeamRefreshMem> MemberList)// 成员列表
-    ApplyCount = 0    #(WORD ApplyCount)
-    ApplyIDList = list()    #(vector<DWORD> ApplyIDList)// 申请玩家ID列表
-    ApplyInfoList = list()    #(vector<tagGCFuncTeamRefreshApply> ApplyInfoList)// 申请玩家明细列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x20
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CreateTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TeamName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.CaptainID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MinFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MinFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NeedCheck,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemberCount):
-            temMemberList = tagGCFuncTeamRefreshMem()
-            _pos = temMemberList.ReadData(_lpData, _pos)
-            self.MemberList.append(temMemberList)
-        self.ApplyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.ApplyCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.ApplyIDList.append(value)
-        for i in range(self.ApplyCount):
-            temApplyInfoList = tagGCFuncTeamRefreshApply()
-            _pos = temApplyInfoList.ReadData(_lpData, _pos)
-            self.ApplyInfoList.append(temApplyInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x20
-        self.TeamID = 0
-        self.CreateTime = 0
-        self.FuncMapID = 0
-        self.FuncMapEx = 0
-        self.NameLen = 0
-        self.TeamName = ""
-        self.CaptainID = 0
-        self.MinLV = 0
-        self.MinFightPower = 0
-        self.MinFightPowerEx = 0
-        self.ServerOnly = 0
-        self.NeedCheck = 0
-        self.Value1 = 0
-        self.Value2 = 0
-        self.MemberCount = 0
-        self.MemberList = list()
-        self.ApplyCount = 0
-        self.ApplyIDList = list()
-        self.ApplyInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.TeamName)
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.MemberCount):
-            length += self.MemberList[i].GetLength()
-        length += 2
-        length += 4 * self.ApplyCount
-        for i in range(self.ApplyCount):
-            length += self.ApplyInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.TeamID)
-        data = CommFunc.WriteDWORD(data, self.CreateTime)
-        data = CommFunc.WriteDWORD(data, self.FuncMapID)
-        data = CommFunc.WriteDWORD(data, self.FuncMapEx)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.TeamName)
-        data = CommFunc.WriteDWORD(data, self.CaptainID)
-        data = CommFunc.WriteWORD(data, self.MinLV)
-        data = CommFunc.WriteDWORD(data, self.MinFightPower)
-        data = CommFunc.WriteDWORD(data, self.MinFightPowerEx)
-        data = CommFunc.WriteBYTE(data, self.ServerOnly)
-        data = CommFunc.WriteBYTE(data, self.NeedCheck)
-        data = CommFunc.WriteDWORD(data, self.Value1)
-        data = CommFunc.WriteDWORD(data, self.Value2)
-        data = CommFunc.WriteBYTE(data, self.MemberCount)
-        for i in range(self.MemberCount):
-            data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer())
-        data = CommFunc.WriteWORD(data, self.ApplyCount)
-        for i in range(self.ApplyCount):
-            data = CommFunc.WriteDWORD(data, self.ApplyIDList[i])
-        for i in range(self.ApplyCount):
-            data = CommFunc.WriteString(data, self.ApplyInfoList[i].GetLength(), self.ApplyInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TeamID:%d,
-                                CreateTime:%d,
-                                FuncMapID:%d,
-                                FuncMapEx:%d,
-                                NameLen:%d,
-                                TeamName:%s,
-                                CaptainID:%d,
-                                MinLV:%d,
-                                MinFightPower:%d,
-                                MinFightPowerEx:%d,
-                                ServerOnly:%d,
-                                NeedCheck:%d,
-                                Value1:%d,
-                                Value2:%d,
-                                MemberCount:%d,
-                                MemberList:%s,
-                                ApplyCount:%d,
-                                ApplyIDList:%s,
-                                ApplyInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TeamID,
-                                self.CreateTime,
-                                self.FuncMapID,
-                                self.FuncMapEx,
-                                self.NameLen,
-                                self.TeamName,
-                                self.CaptainID,
-                                self.MinLV,
-                                self.MinFightPower,
-                                self.MinFightPowerEx,
-                                self.ServerOnly,
-                                self.NeedCheck,
-                                self.Value1,
-                                self.Value2,
-                                self.MemberCount,
-                                "...",
-                                self.ApplyCount,
-                                "...",
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFuncTeamRefresh=tagGCFuncTeamRefresh()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamRefresh.Head.Cmd,m_NAtagGCFuncTeamRefresh.Head.SubCmd))] = m_NAtagGCFuncTeamRefresh
-
-
-#------------------------------------------------------
-# B9 01 收到邀请加入队伍信息 #tagGCInviteJoinTeamInfo
-
-class  tagGCInviteJoinTeamInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 发起邀请的玩家ID
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 发起邀请的玩家名,size = NameLen
-    LV = 0    #(WORD LV)// 玩家等级
-    Job = 0    #(BYTE Job)// 玩家职业
-    JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
-    RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
-    TagMapID = 0    #(DWORD TagMapID)// 目标地图
-    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.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.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x01
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.LV = 0
-        self.Job = 0
-        self.JobLevel = 0
-        self.RealmLV = 0
-        self.TagMapID = 0
-        self.TagMapEx = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 4
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        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.WriteBYTE(data, self.JobLevel)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.TagMapID)
-        data = CommFunc.WriteWORD(data, self.TagMapEx)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                JobLevel:%d,
-                                RealmLV:%d,
-                                TagMapID:%d,
-                                TagMapEx:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.JobLevel,
-                                self.RealmLV,
-                                self.TagMapID,
-                                self.TagMapEx
-                                )
-        return DumpString
-
-
-m_NAtagGCInviteJoinTeamInfo=tagGCInviteJoinTeamInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCInviteJoinTeamInfo.Head.Cmd,m_NAtagGCInviteJoinTeamInfo.Head.SubCmd))] = m_NAtagGCInviteJoinTeamInfo
-
-
-#------------------------------------------------------
-# B9 09 组队目标队伍信息列表 #tagGCTagMapTeamList
-
-class  tagGCTagMapTeam(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 队长名称
-    LV = 0    #(WORD LV)// 队长等级
-    Job = 0    #(BYTE Job)// 队长职业
-    JobLevel = 0    #(BYTE JobLevel)// 队长职业阶级
-    RealmLV = 0    #(WORD RealmLV)// 队长境界等级
-    MemberCount = 0    #(BYTE MemberCount)// 队伍人数
-    ReqMinLV = 0    #(WORD ReqMinLV)// 队员最低等级限制
-    ReqMaxLV = 0    #(WORD ReqMaxLV)// 队员最高等级限制
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.LV = 0
-        self.Job = 0
-        self.JobLevel = 0
-        self.RealmLV = 0
-        self.MemberCount = 0
-        self.ReqMinLV = 0
-        self.ReqMaxLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 1
-        length += 2
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteBYTE(data, self.JobLevel)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteBYTE(data, self.MemberCount)
-        data = CommFunc.WriteWORD(data, self.ReqMinLV)
-        data = CommFunc.WriteWORD(data, self.ReqMaxLV)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                LV:%d,
-                                Job:%d,
-                                JobLevel:%d,
-                                RealmLV:%d,
-                                MemberCount:%d,
-                                ReqMinLV:%d,
-                                ReqMaxLV:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.LV,
-                                self.Job,
-                                self.JobLevel,
-                                self.RealmLV,
-                                self.MemberCount,
-                                self.ReqMinLV,
-                                self.ReqMaxLV
-                                )
-        return DumpString
-
-
-class  tagGCTagMapTeamList(Structure):
-    Head = tagHead()
-    TagMapID = 0    #(DWORD TagMapID)// 目标地图
-    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
-    IsTagEx = 0    #(BYTE IsTagEx)// 是否对应目标扩展的; 0否1是
-    MatchState = 0    #(BYTE MatchState)// 0-全部;1-匹配中的;
-    TeamCount = 0    #(BYTE TeamCount)
-    TeamList = list()    #(vector<tagGCTagMapTeam> TeamList)// 队伍列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x09
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsTagEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TeamCount):
-            temTeamList = tagGCTagMapTeam()
-            _pos = temTeamList.ReadData(_lpData, _pos)
-            self.TeamList.append(temTeamList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x09
-        self.TagMapID = 0
-        self.TagMapEx = 0
-        self.IsTagEx = 0
-        self.MatchState = 0
-        self.TeamCount = 0
-        self.TeamList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 2
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.TeamCount):
-            length += self.TeamList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.TagMapID)
-        data = CommFunc.WriteWORD(data, self.TagMapEx)
-        data = CommFunc.WriteBYTE(data, self.IsTagEx)
-        data = CommFunc.WriteBYTE(data, self.MatchState)
-        data = CommFunc.WriteBYTE(data, self.TeamCount)
-        for i in range(self.TeamCount):
-            data = CommFunc.WriteString(data, self.TeamList[i].GetLength(), self.TeamList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TagMapID:%d,
-                                TagMapEx:%d,
-                                IsTagEx:%d,
-                                MatchState:%d,
-                                TeamCount:%d,
-                                TeamList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TagMapID,
-                                self.TagMapEx,
-                                self.IsTagEx,
-                                self.MatchState,
-                                self.TeamCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCTagMapTeamList=tagGCTagMapTeamList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagMapTeamList.Head.Cmd,m_NAtagGCTagMapTeamList.Head.SubCmd))] = m_NAtagGCTagMapTeamList
-
-
-#------------------------------------------------------
-# B9 21 查找玩家功能队伍结果 #tagGCQueryPlayerFuncTeamRet
-
-class  tagGCQueryPlayerFuncTeamRet(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FuncMapID", c_int),    # 功能地图ID或自定义的活动功能ID
-                  ("TeamID", c_int),    # 玩家所属队伍ID,目前只同步0的情况,如果玩家有队伍统一B920封包同步处理
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB9
-        self.SubCmd = 0x21
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB9
-        self.SubCmd = 0x21
-        self.FuncMapID = 0
-        self.TeamID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCQueryPlayerFuncTeamRet)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B9 21 查找玩家功能队伍结果 //tagGCQueryPlayerFuncTeamRet:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FuncMapID:%d,
-                                TeamID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FuncMapID,
-                                self.TeamID
-                                )
-        return DumpString
-
-
-m_NAtagGCQueryPlayerFuncTeamRet=tagGCQueryPlayerFuncTeamRet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryPlayerFuncTeamRet.Cmd,m_NAtagGCQueryPlayerFuncTeamRet.SubCmd))] = m_NAtagGCQueryPlayerFuncTeamRet
-
-
-#------------------------------------------------------
-# B9 08 推荐组队的附近玩家信息 #tagGCRecommendNearbyPlayerList
-
-class  tagGCRecommendNearbyPlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 玩家名,size = NameLen
-    LV = 0    #(WORD LV)// 玩家等级
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        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.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):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.LV = 0
-        self.Job = 0
-        self.JobLevel = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        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.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):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                JobLevel:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.JobLevel,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCRecommendNearbyPlayerList(Structure):
-    Head = tagHead()
-    PlayerCount = 0    #(BYTE PlayerCount)
-    PlayerList = list()    #(vector<tagGCRecommendNearbyPlayer> PlayerList)// 推荐玩家列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x08
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PlayerCount):
-            temPlayerList = tagGCRecommendNearbyPlayer()
-            _pos = temPlayerList.ReadData(_lpData, _pos)
-            self.PlayerList.append(temPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x08
-        self.PlayerCount = 0
-        self.PlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.PlayerCount):
-            length += self.PlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PlayerCount)
-        for i in range(self.PlayerCount):
-            data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerCount:%d,
-                                PlayerList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCRecommendNearbyPlayerList=tagGCRecommendNearbyPlayerList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendNearbyPlayerList.Head.Cmd,m_NAtagGCRecommendNearbyPlayerList.Head.SubCmd))] = m_NAtagGCRecommendNearbyPlayerList
-
-
-#------------------------------------------------------
-# B9 07 收到请求加入队伍信息 #tagGCRequestJoinTeam
-
-class  tagGCRequestJoinTeam(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)// 发起请求的玩家ID
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 发起请求的玩家名,size = NameLen
-    LV = 0    #(WORD LV)// 玩家等级
-    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):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x07
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.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.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):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x07
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.LV = 0
-        self.Job = 0
-        self.JobLevel = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.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.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):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                LV:%d,
-                                Job:%d,
-                                JobLevel:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.LV,
-                                self.Job,
-                                self.JobLevel,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-m_NAtagGCRequestJoinTeam=tagGCRequestJoinTeam()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRequestJoinTeam.Head.Cmd,m_NAtagGCRequestJoinTeam.Head.SubCmd))] = m_NAtagGCRequestJoinTeam
-
-
-#------------------------------------------------------
-# B9 04 刷新场景队伍回应包 #tagGCSceneTeamRefresh
-
-class  tagGCSceneTeam(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 队长名称
-    LV = 0    #(WORD LV)// 队长等级
-    Job = 0    #(BYTE Job)// 队长职业
-    JobLevel = 0    #(BYTE JobLevel)// 队长职业阶级
-    RealmLV = 0    #(WORD RealmLV)// 队长境界等级
-    MemberCount = 0    #(BYTE MemberCount)// 队伍人数
-    TagMapID = 0    #(DWORD TagMapID)// 目标地图
-    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
-    ReqMinLV = 0    #(WORD ReqMinLV)// 队员最低等级限制
-    ReqMaxLV = 0    #(WORD ReqMaxLV)// 队员最高等级限制
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.LV = 0
-        self.Job = 0
-        self.JobLevel = 0
-        self.RealmLV = 0
-        self.MemberCount = 0
-        self.TagMapID = 0
-        self.TagMapEx = 0
-        self.ReqMinLV = 0
-        self.ReqMaxLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 1
-        length += 4
-        length += 2
-        length += 2
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteBYTE(data, self.JobLevel)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteBYTE(data, self.MemberCount)
-        data = CommFunc.WriteDWORD(data, self.TagMapID)
-        data = CommFunc.WriteWORD(data, self.TagMapEx)
-        data = CommFunc.WriteWORD(data, self.ReqMinLV)
-        data = CommFunc.WriteWORD(data, self.ReqMaxLV)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                LV:%d,
-                                Job:%d,
-                                JobLevel:%d,
-                                RealmLV:%d,
-                                MemberCount:%d,
-                                TagMapID:%d,
-                                TagMapEx:%d,
-                                ReqMinLV:%d,
-                                ReqMaxLV:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.LV,
-                                self.Job,
-                                self.JobLevel,
-                                self.RealmLV,
-                                self.MemberCount,
-                                self.TagMapID,
-                                self.TagMapEx,
-                                self.ReqMinLV,
-                                self.ReqMaxLV
-                                )
-        return DumpString
-
-
-class  tagGCSceneTeamRefresh(Structure):
-    Head = tagHead()
-    TeamCount = 0    #(BYTE TeamCount)
-    SceneTeamList = list()    #(vector<tagGCSceneTeam> SceneTeamList)// 场景队伍列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TeamCount):
-            temSceneTeamList = tagGCSceneTeam()
-            _pos = temSceneTeamList.ReadData(_lpData, _pos)
-            self.SceneTeamList.append(temSceneTeamList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x04
-        self.TeamCount = 0
-        self.SceneTeamList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.TeamCount):
-            length += self.SceneTeamList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.TeamCount)
-        for i in range(self.TeamCount):
-            data = CommFunc.WriteString(data, self.SceneTeamList[i].GetLength(), self.SceneTeamList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TeamCount:%d,
-                                SceneTeamList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TeamCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCSceneTeamRefresh=tagGCSceneTeamRefresh()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSceneTeamRefresh.Head.Cmd,m_NAtagGCSceneTeamRefresh.Head.SubCmd))] = m_NAtagGCSceneTeamRefresh
-
-
-#------------------------------------------------------
-# B9 11 队员进入副本准备状态刷新 #tagGCTeamEnterFBPrepare
-
-class  tagGCTeamMemPrepareState(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("PlayerID", c_int),    
-                  ("PrepareState", c_ubyte),    # 状态,0-未准备,1-已准备,2-拒绝
-                  ]
-
-    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.PlayerID = 0
-        self.PrepareState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCTeamMemPrepareState)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B9 11 队员进入副本准备状态刷新 //tagGCTeamEnterFBPrepare:
-                                PlayerID:%d,
-                                PrepareState:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PrepareState
-                                )
-        return DumpString
-
-
-class  tagGCTeamEnterFBPrepare(Structure):
-    Head = tagHead()
-    TagMapID = 0    #(DWORD TagMapID)// 目标地图,不一定是队伍目标
-    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
-    IsPrepareErr = 0    #(BYTE IsPrepareErr)// 是否准备异常(在所有队员都准备好后准备传入副本出现有队员最终不能进入的情况时该值为1)
-    MemCount = 0    #(BYTE MemCount)
-    MemStateList = list()    #(vector<tagGCTeamMemPrepareState> MemStateList)// 队员状态列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x11
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsPrepareErr,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemCount):
-            temMemStateList = tagGCTeamMemPrepareState()
-            _pos = temMemStateList.ReadData(_lpData, _pos)
-            self.MemStateList.append(temMemStateList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x11
-        self.TagMapID = 0
-        self.TagMapEx = 0
-        self.IsPrepareErr = 0
-        self.MemCount = 0
-        self.MemStateList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 2
-        length += 1
-        length += 1
-        for i in range(self.MemCount):
-            length += self.MemStateList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.TagMapID)
-        data = CommFunc.WriteWORD(data, self.TagMapEx)
-        data = CommFunc.WriteBYTE(data, self.IsPrepareErr)
-        data = CommFunc.WriteBYTE(data, self.MemCount)
-        for i in range(self.MemCount):
-            data = CommFunc.WriteString(data, self.MemStateList[i].GetLength(), self.MemStateList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TagMapID:%d,
-                                TagMapEx:%d,
-                                IsPrepareErr:%d,
-                                MemCount:%d,
-                                MemStateList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TagMapID,
-                                self.TagMapEx,
-                                self.IsPrepareErr,
-                                self.MemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCTeamEnterFBPrepare=tagGCTeamEnterFBPrepare()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamEnterFBPrepare.Head.Cmd,m_NAtagGCTeamEnterFBPrepare.Head.SubCmd))] = m_NAtagGCTeamEnterFBPrepare
-
-
-#------------------------------------------------------
-# B9 03 队伍信息变更 #tagGCTeamInfoChange
-
-class  tagGCTeamInfoChange(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("TagMapID", c_int),    # 目标地图
-                  ("TagMapEx", c_ushort),    # 目标地图扩展
-                  ("ReqMinLV", c_ushort),    # 队员最低等级限制
-                  ("ReqMaxLV", c_ushort),    # 队员最高等级限制
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB9
-        self.SubCmd = 0x03
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB9
-        self.SubCmd = 0x03
-        self.TagMapID = 0
-        self.TagMapEx = 0
-        self.ReqMinLV = 0
-        self.ReqMaxLV = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCTeamInfoChange)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B9 03 队伍信息变更 //tagGCTeamInfoChange:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                TagMapID:%d,
-                                TagMapEx:%d,
-                                ReqMinLV:%d,
-                                ReqMaxLV:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.TagMapID,
-                                self.TagMapEx,
-                                self.ReqMinLV,
-                                self.ReqMaxLV
-                                )
-        return DumpString
-
-
-m_NAtagGCTeamInfoChange=tagGCTeamInfoChange()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamInfoChange.Cmd,m_NAtagGCTeamInfoChange.SubCmd))] = m_NAtagGCTeamInfoChange
-
-
-#------------------------------------------------------
-# B9 10 队伍或玩家匹配状态变更 #tagGCTeamMatchState
-
-class  tagGCTeamMatchState(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("IsMatching", c_ubyte),    # 是否匹配中, 0否1是
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB9
-        self.SubCmd = 0x10
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB9
-        self.SubCmd = 0x10
-        self.IsMatching = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCTeamMatchState)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B9 10 队伍或玩家匹配状态变更 //tagGCTeamMatchState:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                IsMatching:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.IsMatching
-                                )
-        return DumpString
-
-
-m_NAtagGCTeamMatchState=tagGCTeamMatchState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMatchState.Cmd,m_NAtagGCTeamMatchState.SubCmd))] = m_NAtagGCTeamMatchState
-
-
-#------------------------------------------------------
-# B9 02 队伍成员信息刷新 #tagGCTeamMemberInfo
-
-class  tagGCTeamMember(Structure):
-    Index = 0    #(BYTE Index)// 队员编号
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    Name = ""    #(String Name)// 玩家名,size = NameLen
-    MemberLV = 0    #(BYTE MemberLV)// 成员等级, 0-普通成员, 2-队长
-    LV = 0    #(WORD LV)// 玩家等级
-    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
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Index,_pos = CommFunc.ReadBYTE(_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.MemberLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        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)
-        return _pos
-
-    def Clear(self):
-        self.Index = 0
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.Name = ""
-        self.MemberLV = 0
-        self.LV = 0
-        self.Job = 0
-        self.JobLevel = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.PlayerState = 0
-        self.MapID = 0
-        self.LineID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 1
-        length += len(self.Name)
-        length += 1
-        length += 2
-        length += 1
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Index)
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.Name)
-        data = CommFunc.WriteBYTE(data, self.MemberLV)
-        data = CommFunc.WriteWORD(data, self.LV)
-        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)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Index:%d,
-                                PlayerID:%d,
-                                NameLen:%d,
-                                Name:%s,
-                                MemberLV:%d,
-                                LV:%d,
-                                Job:%d,
-                                JobLevel:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                PlayerState:%d,
-                                MapID:%d,
-                                LineID:%d
-                                '''\
-                                %(
-                                self.Index,
-                                self.PlayerID,
-                                self.NameLen,
-                                self.Name,
-                                self.MemberLV,
-                                self.LV,
-                                self.Job,
-                                self.JobLevel,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.PlayerState,
-                                self.MapID,
-                                self.LineID
-                                )
-        return DumpString
-
-
-class  tagGCTeamMemberInfo(Structure):
-    Head = tagHead()
-    TeamID = 0    #(DWORD TeamID)
-    TagMapID = 0    #(DWORD TagMapID)// 目标地图
-    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
-    ReqMinLV = 0    #(WORD ReqMinLV)// 队员最低等级限制
-    ReqMaxLV = 0    #(WORD ReqMaxLV)// 队员最高等级限制
-    MemberCount = 0    #(BYTE MemberCount)
-    MemberList = list()    #(vector<tagGCTeamMember> MemberList)// 成员列表, size = MemberCount
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x02
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemberCount):
-            temMemberList = tagGCTeamMember()
-            _pos = temMemberList.ReadData(_lpData, _pos)
-            self.MemberList.append(temMemberList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x02
-        self.TeamID = 0
-        self.TagMapID = 0
-        self.TagMapEx = 0
-        self.ReqMinLV = 0
-        self.ReqMaxLV = 0
-        self.MemberCount = 0
-        self.MemberList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 4
-        length += 2
-        length += 2
-        length += 2
-        length += 1
-        for i in range(self.MemberCount):
-            length += self.MemberList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.TeamID)
-        data = CommFunc.WriteDWORD(data, self.TagMapID)
-        data = CommFunc.WriteWORD(data, self.TagMapEx)
-        data = CommFunc.WriteWORD(data, self.ReqMinLV)
-        data = CommFunc.WriteWORD(data, self.ReqMaxLV)
-        data = CommFunc.WriteBYTE(data, self.MemberCount)
-        for i in range(self.MemberCount):
-            data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TeamID:%d,
-                                TagMapID:%d,
-                                TagMapEx:%d,
-                                ReqMinLV:%d,
-                                ReqMaxLV:%d,
-                                MemberCount:%d,
-                                MemberList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TeamID,
-                                self.TagMapID,
-                                self.TagMapEx,
-                                self.ReqMinLV,
-                                self.ReqMaxLV,
-                                self.MemberCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCTeamMemberInfo=tagGCTeamMemberInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberInfo.Head.Cmd,m_NAtagGCTeamMemberInfo.Head.SubCmd))] = m_NAtagGCTeamMemberInfo
-
-
-#------------------------------------------------------
-# B9 05 队伍成员属性刷新 #tagGCTeamMemberRefreshProperty
-
-class  tagGCTeamMemberRefreshProperty(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    
-                  ("RefreshType", c_ubyte),    #刷新类型,同0418属性类型
-                  ("Value", c_int),    
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB9
-        self.SubCmd = 0x05
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB9
-        self.SubCmd = 0x05
-        self.PlayerID = 0
-        self.RefreshType = 0
-        self.Value = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCTeamMemberRefreshProperty)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B9 05 队伍成员属性刷新 //tagGCTeamMemberRefreshProperty:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                RefreshType:%d,
-                                Value:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.RefreshType,
-                                self.Value
-                                )
-        return DumpString
-
-
-m_NAtagGCTeamMemberRefreshProperty=tagGCTeamMemberRefreshProperty()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberRefreshProperty.Cmd,m_NAtagGCTeamMemberRefreshProperty.SubCmd))] = m_NAtagGCTeamMemberRefreshProperty
-
-
-#------------------------------------------------------
-#  B9 12 队员功能数据查询结果 #tagGCTeamMemFuncDataList
-
-class  tagGCTeamMemFuncData(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    DataLen = 0    #(WORD DataLen)
-    MemFuncData = ""    #(String MemFuncData)// 队员对应功能数据查询结果
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MemFuncData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.DataLen = 0
-        self.MemFuncData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 2
-        length += len(self.MemFuncData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteWORD(data, self.DataLen)
-        data = CommFunc.WriteString(data, self.DataLen, self.MemFuncData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                DataLen:%d,
-                                MemFuncData:%s
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.DataLen,
-                                self.MemFuncData
-                                )
-        return DumpString
-
-
-class  tagGCTeamMemFuncDataList(Structure):
-    Head = tagHead()
-    TeamMemFuncType = 0    #(BYTE TeamMemFuncType)// 查询队员的功能数据类型
-    MemCount = 0    #(BYTE MemCount)
-    MemFuncDataList = list()    #(vector<tagGCTeamMemFuncData> MemFuncDataList)// 数据列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TeamMemFuncType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MemCount):
-            temMemFuncDataList = tagGCTeamMemFuncData()
-            _pos = temMemFuncDataList.ReadData(_lpData, _pos)
-            self.MemFuncDataList.append(temMemFuncDataList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB9
-        self.Head.SubCmd = 0x12
-        self.TeamMemFuncType = 0
-        self.MemCount = 0
-        self.MemFuncDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.MemCount):
-            length += self.MemFuncDataList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.TeamMemFuncType)
-        data = CommFunc.WriteBYTE(data, self.MemCount)
-        for i in range(self.MemCount):
-            data = CommFunc.WriteString(data, self.MemFuncDataList[i].GetLength(), self.MemFuncDataList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TeamMemFuncType:%d,
-                                MemCount:%d,
-                                MemFuncDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TeamMemFuncType,
-                                self.MemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCTeamMemFuncDataList=tagGCTeamMemFuncDataList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemFuncDataList.Head.Cmd,m_NAtagGCTeamMemFuncDataList.Head.SubCmd))] = m_NAtagGCTeamMemFuncDataList
-
-
-#------------------------------------------------------
-# C0 23 跨服排位竞猜个人信息 #tagGCChampionshipGuessPriInfo
-
-class  tagGCChampionshipGuessPlayerPri(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("PlayerID", c_int),    # 目标玩家ID
-                  ("MoneyTotal", c_int),    # 已投注该玩家货币总数
-                  ("GuessRank", c_ubyte),    # 竞猜名次,没有名次的竞猜默认0;1-代表第一名
-                  ]
-
-    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.PlayerID = 0
-        self.MoneyTotal = 0
-        self.GuessRank = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCChampionshipGuessPlayerPri)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 23 跨服排位竞猜个人信息 //tagGCChampionshipGuessPriInfo:
-                                PlayerID:%d,
-                                MoneyTotal:%d,
-                                GuessRank:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.MoneyTotal,
-                                self.GuessRank
-                                )
-        return DumpString
-
-
-class  tagGCChampionshipGuessPriList(Structure):
-    GuessType = 0    #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位
-    PlayerCount = 0    #(BYTE PlayerCount)
-    GuessPlayerList = list()    #(vector<tagGCChampionshipGuessPlayerPri> GuessPlayerList)// 被竞猜玩家列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PlayerCount):
-            temGuessPlayerList = tagGCChampionshipGuessPlayerPri()
-            _pos = temGuessPlayerList.ReadData(_lpData, _pos)
-            self.GuessPlayerList.append(temGuessPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.GuessType = 0
-        self.PlayerCount = 0
-        self.GuessPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        for i in range(self.PlayerCount):
-            length += self.GuessPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.GuessType)
-        data = CommFunc.WriteBYTE(data, self.PlayerCount)
-        for i in range(self.PlayerCount):
-            data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                GuessType:%d,
-                                PlayerCount:%d,
-                                GuessPlayerList:%s
-                                '''\
-                                %(
-                                self.GuessType,
-                                self.PlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCChampionshipGuessPriInfo(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 排位数据分区ID
-    Count = 0    #(BYTE Count)
-    GuessList = list()    #(vector<tagGCChampionshipGuessPriList> GuessList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x23
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temGuessList = tagGCChampionshipGuessPriList()
-            _pos = temGuessList.ReadData(_lpData, _pos)
-            self.GuessList.append(temGuessList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x23
-        self.ZoneID = 0
-        self.Count = 0
-        self.GuessList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.Count):
-            length += self.GuessList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                Count:%d,
-                                GuessList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCChampionshipGuessPriInfo=tagGCChampionshipGuessPriInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPriInfo.Head.Cmd,m_NAtagGCChampionshipGuessPriInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPriInfo
-
-
-#------------------------------------------------------
-# C0 22 跨服排位竞猜公共信息 #tagGCChampionshipGuessPubInfo
-
-class  tagGCChampionshipGuessPlayerPub(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("PlayerID", c_int),    # 目标玩家ID
-                  ("SupportCount", 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.PlayerID = 0
-        self.SupportCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCChampionshipGuessPlayerPub)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 22 跨服排位竞猜公共信息 //tagGCChampionshipGuessPubInfo:
-                                PlayerID:%d,
-                                SupportCount:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.SupportCount
-                                )
-        return DumpString
-
-
-class  tagGCChampionshipGuessPubList(Structure):
-    GuessType = 0    #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位
-    PlayerCount = 0    #(BYTE PlayerCount)
-    GuessPlayerList = list()    #(vector<tagGCChampionshipGuessPlayerPub> GuessPlayerList)// 被竞猜玩家列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PlayerCount):
-            temGuessPlayerList = tagGCChampionshipGuessPlayerPub()
-            _pos = temGuessPlayerList.ReadData(_lpData, _pos)
-            self.GuessPlayerList.append(temGuessPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.GuessType = 0
-        self.PlayerCount = 0
-        self.GuessPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        for i in range(self.PlayerCount):
-            length += self.GuessPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.GuessType)
-        data = CommFunc.WriteBYTE(data, self.PlayerCount)
-        for i in range(self.PlayerCount):
-            data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                GuessType:%d,
-                                PlayerCount:%d,
-                                GuessPlayerList:%s
-                                '''\
-                                %(
-                                self.GuessType,
-                                self.PlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCChampionshipGuessPubInfo(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 排位数据分区ID
-    Count = 0    #(BYTE Count)
-    GuessList = list()    #(vector<tagGCChampionshipGuessPubList> GuessList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x22
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.Count):
-            temGuessList = tagGCChampionshipGuessPubList()
-            _pos = temGuessList.ReadData(_lpData, _pos)
-            self.GuessList.append(temGuessList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x22
-        self.ZoneID = 0
-        self.Count = 0
-        self.GuessList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.Count):
-            length += self.GuessList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteBYTE(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                Count:%d,
-                                GuessList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCChampionshipGuessPubInfo=tagGCChampionshipGuessPubInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPubInfo.Head.Cmd,m_NAtagGCChampionshipGuessPubInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPubInfo
-
-
-#------------------------------------------------------
-# C0 19 跨服排位仙官申请回应结果 #tagGCChampionshipOfficialApplyReplyRet
-
-class  tagGCChampionshipOfficialApplyReplyRet(Structure):
-    Head = tagHead()
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 界主玩家名
-    MainOfficialID = 0    #(WORD MainOfficialID)//界主官职ID
-    OfficialID = 0    #(WORD OfficialID)//申请官职ID
-    IsOK = 0    #(BYTE IsOK)//是否同意;1-是;0-否
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x19
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x19
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.MainOfficialID = 0
-        self.OfficialID = 0
-        self.IsOK = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-        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.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.MainOfficialID)
-        data = CommFunc.WriteWORD(data, self.OfficialID)
-        data = CommFunc.WriteBYTE(data, self.IsOK)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                MainOfficialID:%d,
-                                OfficialID:%d,
-                                IsOK:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.NameLen,
-                                self.PlayerName,
-                                self.MainOfficialID,
-                                self.OfficialID,
-                                self.IsOK
-                                )
-        return DumpString
-
-
-m_NAtagGCChampionshipOfficialApplyReplyRet=tagGCChampionshipOfficialApplyReplyRet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialApplyReplyRet.Head.Cmd,m_NAtagGCChampionshipOfficialApplyReplyRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialApplyReplyRet
-
-
-#------------------------------------------------------
-# C0 21 跨服排位仙官挑战记录 #tagGCChampionshipOfficialChallengeRecordInfo
-
-class  tagGCChampionshipOfficialChallengeRecord(Structure):
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    ChallengeTime = 0    #(DWORD ChallengeTime)//挑战时间戳
-    Ret = 0    #(BYTE Ret)//挑战结果;0-失败;1-获胜;
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.ChallengeTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.ChallengeTime = 0
-        self.Ret = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += len(self.PlayerName)
-        length += 4
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteDWORD(data, self.ChallengeTime)
-        data = CommFunc.WriteBYTE(data, self.Ret)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NameLen:%d,
-                                PlayerName:%s,
-                                ChallengeTime:%d,
-                                Ret:%d
-                                '''\
-                                %(
-                                self.NameLen,
-                                self.PlayerName,
-                                self.ChallengeTime,
-                                self.Ret
-                                )
-        return DumpString
-
-
-class  tagGCChampionshipOfficialChallengeRecordInfo(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 分区ID
-    MainOfficialID = 0    #(WORD MainOfficialID)// 界主官职ID
-    OfficialID = 0    #(WORD OfficialID)// 记录的官职ID
-    RecordCount = 0    #(BYTE RecordCount)// 挑战记录数
-    RecordList = list()    #(vector<tagGCChampionshipOfficialChallengeRecord> RecordList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x21
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RecordCount):
-            temRecordList = tagGCChampionshipOfficialChallengeRecord()
-            _pos = temRecordList.ReadData(_lpData, _pos)
-            self.RecordList.append(temRecordList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x21
-        self.ZoneID = 0
-        self.MainOfficialID = 0
-        self.OfficialID = 0
-        self.RecordCount = 0
-        self.RecordList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 2
-        length += 2
-        length += 1
-        for i in range(self.RecordCount):
-            length += self.RecordList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteWORD(data, self.MainOfficialID)
-        data = CommFunc.WriteWORD(data, self.OfficialID)
-        data = CommFunc.WriteBYTE(data, self.RecordCount)
-        for i in range(self.RecordCount):
-            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                MainOfficialID:%d,
-                                OfficialID:%d,
-                                RecordCount:%d,
-                                RecordList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.MainOfficialID,
-                                self.OfficialID,
-                                self.RecordCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCChampionshipOfficialChallengeRecordInfo=tagGCChampionshipOfficialChallengeRecordInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRecordInfo
-
-
-#------------------------------------------------------
-# C0 20 跨服排位仙官挑战结果 #tagGCChampionshipOfficialChallengeRet
-
-class  tagGCChampionshipOfficialChallengeRet(Structure):
-    Head = tagHead()
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 原仙官玩家名,可能为空,代表本来无玩家
-    MainOfficialID = 0    #(WORD MainOfficialID)//界主官职ID
-    OfficialID = 0    #(WORD OfficialID)//挑战的官职ID
-    Ret = 0    #(BYTE Ret)//挑战结果;0-失败;1-获胜;2-目标仙官玩家ID已变更,可刷新后重试
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x20
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x20
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.MainOfficialID = 0
-        self.OfficialID = 0
-        self.Ret = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-        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.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.MainOfficialID)
-        data = CommFunc.WriteWORD(data, self.OfficialID)
-        data = CommFunc.WriteBYTE(data, self.Ret)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                MainOfficialID:%d,
-                                OfficialID:%d,
-                                Ret:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.NameLen,
-                                self.PlayerName,
-                                self.MainOfficialID,
-                                self.OfficialID,
-                                self.Ret
-                                )
-        return DumpString
-
-
-m_NAtagGCChampionshipOfficialChallengeRet=tagGCChampionshipOfficialChallengeRet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRet.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRet
-
-
-#------------------------------------------------------
-# C0 18 跨服排位官职信息 #tagGCChampionshipOfficialInfo
-
-class  tagGCChampionshipOfficialPlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)// 玩家ID
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)
-    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):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.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):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteDWORD(data, self.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):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCChampionshipOfficial(Structure):
-    OfficialID = 0    #(DWORD OfficialID)// 官职ID
-    LastDismissJuniorTime = 0    #(DWORD LastDismissJuniorTime)// 上次辞退下级仙官时间戳,跨服时间,如果自己是本界主时,用于计算辞退CD
-    WorshipCount = 0    #(DWORD WorshipCount)// 被膜拜次数
-    WorshipDouble = 0    #(BYTE WorshipDouble)// 今日是否双倍膜拜,仅在规定时间点内有用
-    OfficialPlayer=tagGCChampionshipOfficialPlayer()    #(tagGCChampionshipOfficialPlayer OfficialPlayer)// 任职玩家信息,可能没有
-    ApplyPlayerCount = 0    #(BYTE ApplyPlayerCount)// 申请该仙官玩家数
-    ApplyPlayerList = list()    #(vector<tagGCChampionshipOfficialPlayer> ApplyPlayerList)// 申请该仙官玩家列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.OfficialID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LastDismissJuniorTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WorshipCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WorshipDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        _pos = self.OfficialPlayer.ReadData(_lpData,_pos)
-        self.ApplyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ApplyPlayerCount):
-            temApplyPlayerList = tagGCChampionshipOfficialPlayer()
-            _pos = temApplyPlayerList.ReadData(_lpData, _pos)
-            self.ApplyPlayerList.append(temApplyPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.OfficialID = 0
-        self.LastDismissJuniorTime = 0
-        self.WorshipCount = 0
-        self.WorshipDouble = 0
-        self.OfficialPlayer=tagGCChampionshipOfficialPlayer()
-        self.OfficialPlayer.Clear()
-        self.ApplyPlayerCount = 0
-        self.ApplyPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += self.OfficialPlayer.GetLength()
-        length += 1
-        for i in range(self.ApplyPlayerCount):
-            length += self.ApplyPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.OfficialID)
-        data = CommFunc.WriteDWORD(data, self.LastDismissJuniorTime)
-        data = CommFunc.WriteDWORD(data, self.WorshipCount)
-        data = CommFunc.WriteBYTE(data, self.WorshipDouble)
-        data = CommFunc.WriteString(data,self.OfficialPlayer.GetLength(),self.OfficialPlayer.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ApplyPlayerCount)
-        for i in range(self.ApplyPlayerCount):
-            data = CommFunc.WriteString(data, self.ApplyPlayerList[i].GetLength(), self.ApplyPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                OfficialID:%d,
-                                LastDismissJuniorTime:%d,
-                                WorshipCount:%d,
-                                WorshipDouble:%d,
-                                OfficialPlayer:%s,
-                                ApplyPlayerCount:%d,
-                                ApplyPlayerList:%s
-                                '''\
-                                %(
-                                self.OfficialID,
-                                self.LastDismissJuniorTime,
-                                self.WorshipCount,
-                                self.WorshipDouble,
-                                self.OfficialPlayer.OutputString(),
-                                self.ApplyPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCChampionshipOfficialInfo(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 官职数据分区ID
-    OfficialCount = 0    #(BYTE OfficialCount)// 官职数,包含界主及所有仙官
-    OfficialList = list()    #(vector<tagGCChampionshipOfficial> OfficialList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x18
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.OfficialCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.OfficialCount):
-            temOfficialList = tagGCChampionshipOfficial()
-            _pos = temOfficialList.ReadData(_lpData, _pos)
-            self.OfficialList.append(temOfficialList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x18
-        self.ZoneID = 0
-        self.OfficialCount = 0
-        self.OfficialList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.OfficialCount):
-            length += self.OfficialList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteBYTE(data, self.OfficialCount)
-        for i in range(self.OfficialCount):
-            data = CommFunc.WriteString(data, self.OfficialList[i].GetLength(), self.OfficialList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                OfficialCount:%d,
-                                OfficialList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.OfficialCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCChampionshipOfficialInfo=tagGCChampionshipOfficialInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialInfo.Head.Cmd,m_NAtagGCChampionshipOfficialInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialInfo
-
-
-#------------------------------------------------------
-# C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo
-
-class  tagGCCrossBattlefieldPlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    PlayerName = ""    #(char PlayerName[33])
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)//等级
-    RealmLV = 0    #(WORD RealmLV)//境界
-    FightPower = 0    #(DWORD FightPower)//战力求余亿部分
-    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        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.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteWORD(data, self.RealmLV)
-        data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.FightPower,
-                                self.FightPowerEx
-                                )
-        return DumpString
-
-
-class  tagGCCrossBattlefieldBuyPlayer(Structure):
-    BuyPlayerID = 0    #(DWORD BuyPlayerID)//购买的玩家ID,即召集人
-    Faction = 0    #(BYTE Faction)//阵营 1-红;2-蓝
-    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
-    FactionPlayerCount = 0    #(BYTE FactionPlayerCount)
-    FactionPlayerList = list()    #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FactionPlayerCount):
-            temFactionPlayerList = tagGCCrossBattlefieldPlayer()
-            _pos = temFactionPlayerList.ReadData(_lpData, _pos)
-            self.FactionPlayerList.append(temFactionPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.BuyPlayerID = 0
-        self.Faction = 0
-        self.ServerOnly = 0
-        self.FactionPlayerCount = 0
-        self.FactionPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.FactionPlayerCount):
-            length += self.FactionPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.BuyPlayerID)
-        data = CommFunc.WriteBYTE(data, self.Faction)
-        data = CommFunc.WriteBYTE(data, self.ServerOnly)
-        data = CommFunc.WriteBYTE(data, self.FactionPlayerCount)
-        for i in range(self.FactionPlayerCount):
-            data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                BuyPlayerID:%d,
-                                Faction:%d,
-                                ServerOnly:%d,
-                                FactionPlayerCount:%d,
-                                FactionPlayerList:%s
-                                '''\
-                                %(
-                                self.BuyPlayerID,
-                                self.Faction,
-                                self.ServerOnly,
-                                self.FactionPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCCrossBattlefieldBuyHM(Structure):
-    Hour = 0    #(BYTE Hour)//战场开启时
-    Minute = 0    #(BYTE Minute)//战场开启分
-    BuyPlayerCount = 0    #(BYTE BuyPlayerCount)
-    BuyPlayerList = list()    #(vector<tagGCCrossBattlefieldBuyPlayer> BuyPlayerList)//购买本场次的玩家信息列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.BuyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BuyPlayerCount):
-            temBuyPlayerList = tagGCCrossBattlefieldBuyPlayer()
-            _pos = temBuyPlayerList.ReadData(_lpData, _pos)
-            self.BuyPlayerList.append(temBuyPlayerList)
-        return _pos
-
-    def Clear(self):
-        self.Hour = 0
-        self.Minute = 0
-        self.BuyPlayerCount = 0
-        self.BuyPlayerList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.BuyPlayerCount):
-            length += self.BuyPlayerList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Hour)
-        data = CommFunc.WriteBYTE(data, self.Minute)
-        data = CommFunc.WriteBYTE(data, self.BuyPlayerCount)
-        for i in range(self.BuyPlayerCount):
-            data = CommFunc.WriteString(data, self.BuyPlayerList[i].GetLength(), self.BuyPlayerList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Hour:%d,
-                                Minute:%d,
-                                BuyPlayerCount:%d,
-                                BuyPlayerList:%s
-                                '''\
-                                %(
-                                self.Hour,
-                                self.Minute,
-                                self.BuyPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCCrossBattlefieldBuyInfo(Structure):
-    Head = tagHead()
-    HMCount = 0    #(BYTE HMCount)// 为0时清空重置,其他为增量更新
-    HMBuyList = list()    #(vector<tagGCCrossBattlefieldBuyHM> HMBuyList)//购买场次列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x09
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.HMCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.HMCount):
-            temHMBuyList = tagGCCrossBattlefieldBuyHM()
-            _pos = temHMBuyList.ReadData(_lpData, _pos)
-            self.HMBuyList.append(temHMBuyList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x09
-        self.HMCount = 0
-        self.HMBuyList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.HMCount):
-            length += self.HMBuyList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.HMCount)
-        for i in range(self.HMCount):
-            data = CommFunc.WriteString(data, self.HMBuyList[i].GetLength(), self.HMBuyList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                HMCount:%d,
-                                HMBuyList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.HMCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossBattlefieldBuyInfo=tagGCCrossBattlefieldBuyInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBattlefieldBuyInfo.Head.Cmd,m_NAtagGCCrossBattlefieldBuyInfo.Head.SubCmd))] = m_NAtagGCCrossBattlefieldBuyInfo
-
-
-#------------------------------------------------------
-# C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo
-
-class  tagGCCrossBillboardData(Structure):
-    OrderIndex = 0    #(WORD OrderIndex)//名次索引,0代表第一名
-    ID = 0    #(DWORD ID)
-    ID2 = 0    #(DWORD ID2)
-    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
-    Name2 = ""    #(char Name2[65])//名字2
-    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
-    Value1 = 0    #(DWORD Value1)//自定义值1
-    Value2 = 0    #(DWORD Value2)//自定义值2
-    Value3 = 0    #(DWORD Value3)//附加值
-    Value4 = 0    #(DWORD Value4)//附加值
-    Value5 = 0    #(DWORD Value5)//附加值
-    Value6 = 0    #(DWORD Value6)//附加值
-    Value7 = 0    #(DWORD Value7)//附加值
-    Value8 = 0    #(DWORD Value8)//附加值
-    CmpValue = 0    #(DWORD CmpValue)// 比较权值
-    CmpValue2 = 0    #(DWORD CmpValue2)// 比较权值
-    CmpValue3 = 0    #(DWORD CmpValue3)// 比较权值
-    DataLen = 0    #(WORD DataLen)
-    UserData = ""    #(String UserData)//附加
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.OrderIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        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,65)
-        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
-        return _pos
-
-    def Clear(self):
-        self.OrderIndex = 0
-        self.ID = 0
-        self.ID2 = 0
-        self.Name1 = ""
-        self.Name2 = ""
-        self.Type2 = 0
-        self.Value1 = 0
-        self.Value2 = 0
-        self.Value3 = 0
-        self.Value4 = 0
-        self.Value5 = 0
-        self.Value6 = 0
-        self.Value7 = 0
-        self.Value8 = 0
-        self.CmpValue = 0
-        self.CmpValue2 = 0
-        self.CmpValue3 = 0
-        self.DataLen = 0
-        self.UserData = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 2
-        length += 4
-        length += 4
-        length += 33
-        length += 65
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += len(self.UserData)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteWORD(data, self.OrderIndex)
-        data = CommFunc.WriteDWORD(data, self.ID)
-        data = CommFunc.WriteDWORD(data, self.ID2)
-        data = CommFunc.WriteString(data, 33, self.Name1)
-        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)
-        data = CommFunc.WriteDWORD(data, self.Value3)
-        data = CommFunc.WriteDWORD(data, self.Value4)
-        data = CommFunc.WriteDWORD(data, self.Value5)
-        data = CommFunc.WriteDWORD(data, self.Value6)
-        data = CommFunc.WriteDWORD(data, self.Value7)
-        data = CommFunc.WriteDWORD(data, self.Value8)
-        data = CommFunc.WriteDWORD(data, self.CmpValue)
-        data = CommFunc.WriteDWORD(data, self.CmpValue2)
-        data = CommFunc.WriteDWORD(data, self.CmpValue3)
-        data = CommFunc.WriteWORD(data, self.DataLen)
-        data = CommFunc.WriteString(data, self.DataLen, self.UserData)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                OrderIndex:%d,
-                                ID:%d,
-                                ID2:%d,
-                                Name1:%s,
-                                Name2:%s,
-                                Type2:%d,
-                                Value1:%d,
-                                Value2:%d,
-                                Value3:%d,
-                                Value4:%d,
-                                Value5:%d,
-                                Value6:%d,
-                                Value7:%d,
-                                Value8:%d,
-                                CmpValue:%d,
-                                CmpValue2:%d,
-                                CmpValue3:%d,
-                                DataLen:%d,
-                                UserData:%s
-                                '''\
-                                %(
-                                self.OrderIndex,
-                                self.ID,
-                                self.ID2,
-                                self.Name1,
-                                self.Name2,
-                                self.Type2,
-                                self.Value1,
-                                self.Value2,
-                                self.Value3,
-                                self.Value4,
-                                self.Value5,
-                                self.Value6,
-                                self.Value7,
-                                self.Value8,
-                                self.CmpValue,
-                                self.CmpValue2,
-                                self.CmpValue3,
-                                self.DataLen,
-                                self.UserData
-                                )
-        return DumpString
-
-
-class  tagGCCrossBillboardInfo(Structure):
-    Head = tagHead()
-    Type = 0    #(BYTE Type)//榜单类型
-    GroupValue1 = 0    #(DWORD GroupValue1)// 分组值1
-    GroupValue2 = 0    #(DWORD GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
-    WatchID = 0    #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
-    BillboardCount = 0    #(BYTE BillboardCount)
-    CrossBillboardDataList = list()    #(vector<tagGCCrossBillboardData> CrossBillboardDataList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x07
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.GroupValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.GroupValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BillboardCount):
-            temCrossBillboardDataList = tagGCCrossBillboardData()
-            _pos = temCrossBillboardDataList.ReadData(_lpData, _pos)
-            self.CrossBillboardDataList.append(temCrossBillboardDataList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x07
-        self.Type = 0
-        self.GroupValue1 = 0
-        self.GroupValue2 = 0
-        self.WatchID = 0
-        self.BillboardCount = 0
-        self.CrossBillboardDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.BillboardCount):
-            length += self.CrossBillboardDataList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.Type)
-        data = CommFunc.WriteDWORD(data, self.GroupValue1)
-        data = CommFunc.WriteDWORD(data, self.GroupValue2)
-        data = CommFunc.WriteDWORD(data, self.WatchID)
-        data = CommFunc.WriteBYTE(data, self.BillboardCount)
-        for i in range(self.BillboardCount):
-            data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                Type:%d,
-                                GroupValue1:%d,
-                                GroupValue2:%d,
-                                WatchID:%d,
-                                BillboardCount:%d,
-                                CrossBillboardDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.Type,
-                                self.GroupValue1,
-                                self.GroupValue2,
-                                self.WatchID,
-                                self.BillboardCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo
-
-
-#------------------------------------------------------
-# C0 16 跨服排位战斗结果 #tagGCCrossChampionshipPKOver
-
-class  tagGCCrossChampionshipPKOver(Structure):
-    Head = tagHead()
-    GroupMark = 0    #(DWORD GroupMark)// 分组标识:64、32、16、8 - 64、32、16、8强赛;4 - 半决赛; 2 - 决赛
-    TimeStr = ""    #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss
-    OverType = 0    #(BYTE OverType)// 0-正常,1-有人离线
-    WinnerID = 0    #(DWORD WinnerID)// 胜方ID
-    LoserID = 0    #(DWORD LoserID)// 败方ID
-    RoundCount = 0    #(BYTE RoundCount)// PK回合数
-    RoundWinnerID = list()    #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
-    TagNameLen = 0    #(BYTE TagNameLen)
-    TagName = ""    #(String TagName)
-    Rank = 0    #(BYTE Rank)// 最终名次,决赛才有
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x16
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RoundCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.RoundWinnerID.append(value)
-        self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen)
-        self.Rank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x16
-        self.GroupMark = 0
-        self.TimeStr = ""
-        self.OverType = 0
-        self.WinnerID = 0
-        self.LoserID = 0
-        self.RoundCount = 0
-        self.RoundWinnerID = list()
-        self.TagNameLen = 0
-        self.TagName = ""
-        self.Rank = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 19
-        length += 1
-        length += 4
-        length += 4
-        length += 1
-        length += 4 * self.RoundCount
-        length += 1
-        length += len(self.TagName)
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.GroupMark)
-        data = CommFunc.WriteString(data, 19, self.TimeStr)
-        data = CommFunc.WriteBYTE(data, self.OverType)
-        data = CommFunc.WriteDWORD(data, self.WinnerID)
-        data = CommFunc.WriteDWORD(data, self.LoserID)
-        data = CommFunc.WriteBYTE(data, self.RoundCount)
-        for i in range(self.RoundCount):
-            data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
-        data = CommFunc.WriteBYTE(data, self.TagNameLen)
-        data = CommFunc.WriteString(data, self.TagNameLen, self.TagName)
-        data = CommFunc.WriteBYTE(data, self.Rank)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                GroupMark:%d,
-                                TimeStr:%s,
-                                OverType:%d,
-                                WinnerID:%d,
-                                LoserID:%d,
-                                RoundCount:%d,
-                                RoundWinnerID:%s,
-                                TagNameLen:%d,
-                                TagName:%s,
-                                Rank:%d
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.GroupMark,
-                                self.TimeStr,
-                                self.OverType,
-                                self.WinnerID,
-                                self.LoserID,
-                                self.RoundCount,
-                                "...",
-                                self.TagNameLen,
-                                self.TagName,
-                                self.Rank
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossChampionshipPKOver=tagGCCrossChampionshipPKOver()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKOver.Head.Cmd,m_NAtagGCCrossChampionshipPKOver.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKOver
-
-
-#------------------------------------------------------
-# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo
-
-class  tagGCCrossChampionshipPKBattle(Structure):
-    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, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        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):
-        length = 0
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += len(self.BattleRet)
-
-        return length
-
-    def GetBuffer(self):
-        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 = '''
-                                BattleNum:%d,
-                                WinPlayerID:%d,
-                                PlayerIDA:%d,
-                                PlayerIDB:%d,
-                                BattleRetLen:%d,
-                                BattleRet:%s
-                                '''\
-                                %(
-                                self.BattleNum,
-                                self.WinPlayerID,
-                                self.PlayerIDA,
-                                self.PlayerIDB,
-                                self.BattleRetLen,
-                                self.BattleRet
-                                )
-        return DumpString
-
-
-class  tagGCCrossChampionshipPKGroup(Structure):
-    GroupMark = 0    #(DWORD GroupMark)// 战斗分区mark, 如 64、32、16、8、4-半决赛、2-决赛;
-    BattleCount = 0    #(BYTE BattleCount)// 对战组数
-    BattleList = list()    #(vector<tagGCCrossChampionshipPKBattle> BattleList)// 对战组列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.BattleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BattleCount):
-            temBattleList = tagGCCrossChampionshipPKBattle()
-            _pos = temBattleList.ReadData(_lpData, _pos)
-            self.BattleList.append(temBattleList)
-        return _pos
-
-    def Clear(self):
-        self.GroupMark = 0
-        self.BattleCount = 0
-        self.BattleList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        for i in range(self.BattleCount):
-            length += self.BattleList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.GroupMark)
-        data = CommFunc.WriteBYTE(data, self.BattleCount)
-        for i in range(self.BattleCount):
-            data = CommFunc.WriteString(data, self.BattleList[i].GetLength(), self.BattleList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                GroupMark:%d,
-                                BattleCount:%d,
-                                BattleList:%s
-                                '''\
-                                %(
-                                self.GroupMark,
-                                self.BattleCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCCrossChampionshipPKPlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)// 玩家ID
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)
-    FightPower = 0    #(DWORD FightPower)// 战力求余亿部分
-    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力整除亿部分
-    RealmLV = 0    #(WORD RealmLV)
-    Face = 0    #(DWORD Face)//基本脸型
-    FacePic = 0    #(DWORD FacePic)//头像框
-    ServerID = 0    #(DWORD ServerID)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.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)
-        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.ServerID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 1
-        length += 2
-        length += 4
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.WriteDWORD(data, self.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)
-        data = CommFunc.WriteDWORD(data, self.ServerID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                ServerID:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.ServerID
-                                )
-        return DumpString
-
-
-class  tagGCCrossChampionshipPKZoneGroupInfo(Structure):
-    Head = tagHead()
-    ActID = 0    #(DWORD ActID)// 活动ID,活动ID不同则可重置前端排位赛相关缓存数据
-    StateError = 0    #(BYTE StateError)// 本次活动是否已经出现流程状态异常;如服务器异常或维护服务器导致跳过步骤,则会废弃该次比赛,直到下次新活动;
-    ZoneID = 0    #(BYTE ZoneID)// 排位分区ID
-    PlayerCount = 0    #(BYTE PlayerCount)// 参赛玩家数
-    PlayerList = list()    #(vector<tagGCCrossChampionshipPKPlayer> PlayerList)
-    GroupCount = 0    #(WORD GroupCount)
-    GroupList = list()    #(vector<tagGCCrossChampionshipPKGroup> GroupList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x15
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PlayerCount):
-            temPlayerList = tagGCCrossChampionshipPKPlayer()
-            _pos = temPlayerList.ReadData(_lpData, _pos)
-            self.PlayerList.append(temPlayerList)
-        self.GroupCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.GroupCount):
-            temGroupList = tagGCCrossChampionshipPKGroup()
-            _pos = temGroupList.ReadData(_lpData, _pos)
-            self.GroupList.append(temGroupList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x15
-        self.ActID = 0
-        self.StateError = 0
-        self.ZoneID = 0
-        self.PlayerCount = 0
-        self.PlayerList = list()
-        self.GroupCount = 0
-        self.GroupList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.PlayerCount):
-            length += self.PlayerList[i].GetLength()
-        length += 2
-        for i in range(self.GroupCount):
-            length += self.GroupList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.ActID)
-        data = CommFunc.WriteBYTE(data, self.StateError)
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteBYTE(data, self.PlayerCount)
-        for i in range(self.PlayerCount):
-            data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer())
-        data = CommFunc.WriteWORD(data, self.GroupCount)
-        for i in range(self.GroupCount):
-            data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ActID:%d,
-                                StateError:%d,
-                                ZoneID:%d,
-                                PlayerCount:%d,
-                                PlayerList:%s,
-                                GroupCount:%d,
-                                GroupList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ActID,
-                                self.StateError,
-                                self.ZoneID,
-                                self.PlayerCount,
-                                "...",
-                                self.GroupCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossChampionshipPKZoneGroupInfo=tagGCCrossChampionshipPKZoneGroupInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.Cmd,m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKZoneGroupInfo
-
-
-#------------------------------------------------------
-# C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo
-
-class  tagGCCrossRealmPKBillboardData(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    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)
-    DanLV = 0    #(BYTE DanLV)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.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)
-        self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.FightPower = 0
-        self.RealmLV = 0
-        self.PKScore = 0
-        self.DanLV = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 2
-        length += 4
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.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)
-        data = CommFunc.WriteBYTE(data, self.DanLV)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                FightPower:%d,
-                                RealmLV:%d,
-                                PKScore:%d,
-                                DanLV:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.Job,
-                                self.Face,
-                                self.FacePic,
-                                self.FightPower,
-                                self.RealmLV,
-                                self.PKScore,
-                                self.DanLV
-                                )
-        return DumpString
-
-
-class  tagGCCrossRealmPKBillboardInfo(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 赛区ID	
-    SeasonID = 0    #(BYTE SeasonID)// 赛季ID	
-    Count = 0    #(WORD Count)
-    PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x05
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SeasonID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temPKBillboardList = tagGCCrossRealmPKBillboardData()
-            _pos = temPKBillboardList.ReadData(_lpData, _pos)
-            self.PKBillboardList.append(temPKBillboardList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x05
-        self.ZoneID = 0
-        self.SeasonID = 0
-        self.Count = 0
-        self.PKBillboardList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 2
-        for i in range(self.Count):
-            length += self.PKBillboardList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteBYTE(data, self.SeasonID)
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.PKBillboardList[i].GetLength(), self.PKBillboardList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                SeasonID:%d,
-                                Count:%d,
-                                PKBillboardList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.SeasonID,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossRealmPKBillboardInfo=tagGCCrossRealmPKBillboardInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKBillboardInfo.Head.Cmd,m_NAtagGCCrossRealmPKBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKBillboardInfo
-
-
-#------------------------------------------------------
-# C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK
-
-class  tagGCCrossRealmPKMatchPlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 跨服名字
-    Job = 0    #(BYTE Job)
-    LV = 0    #(WORD LV)
-    RealmLV = 0    #(WORD RealmLV)//境界
-    Face = 0    #(DWORD Face)//基本脸型
-    FacePic = 0    #(DWORD FacePic)//头像框
-    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
-    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
-    ServerID = 0    #(DWORD ServerID)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.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.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.LV = 0
-        self.RealmLV = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.ServerID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += len(self.PlayerName)
-        length += 1
-        length += 2
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteWORD(data, self.LV)
-        data = CommFunc.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.ServerID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                LV:%d,
-                                RealmLV:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                ServerID:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.Job,
-                                self.LV,
-                                self.RealmLV,
-                                self.Face,
-                                self.FacePic,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.ServerID
-                                )
-        return DumpString
-
-
-class  tagGCCrossRealmPKMatchOK(Structure):
-    Head = tagHead()
-    MatchPlayerCount = 0    #(BYTE MatchPlayerCount)
-    MatchPlayer = list()    #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x01
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MatchPlayerCount):
-            temMatchPlayer = tagGCCrossRealmPKMatchPlayer()
-            _pos = temMatchPlayer.ReadData(_lpData, _pos)
-            self.MatchPlayer.append(temMatchPlayer)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x01
-        self.MatchPlayerCount = 0
-        self.MatchPlayer = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.MatchPlayerCount):
-            length += self.MatchPlayer[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.MatchPlayerCount)
-        for i in range(self.MatchPlayerCount):
-            data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                MatchPlayerCount:%d,
-                                MatchPlayer:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.MatchPlayerCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossRealmPKMatchOK=tagGCCrossRealmPKMatchOK()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKMatchOK.Head.Cmd,m_NAtagGCCrossRealmPKMatchOK.Head.SubCmd))] = m_NAtagGCCrossRealmPKMatchOK
-
-
-#------------------------------------------------------
-# C0 03 跨服PK战斗结果 #tagGCCrossRealmPKOverInfo
-
-class  tagGCCrossRealmPKOverInfo(Structure):
-    Head = tagHead()
-    TimeStr = ""    #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss
-    OverType = 0    #(BYTE OverType)// 0-正常,1-有人离线
-    WinnerID = 0    #(DWORD WinnerID)// 胜方ID
-    RoundCount = 0    #(BYTE RoundCount)// PK回合数
-    RoundWinnerID = list()    #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
-    AddScore = 0    #(WORD AddScore)// 本场加分
-    Score = 0    #(DWORD Score)// 当前积分
-    DanLV = 0    #(BYTE DanLV)// 当前段位
-    CWinCnt = 0    #(WORD CWinCnt)// 当前连胜数
-    TagNameLen = 0    #(BYTE TagNameLen)
-    TagName = ""    #(String TagName)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x03
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
-        self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RoundCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.RoundWinnerID.append(value)
-        self.AddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.CWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x03
-        self.TimeStr = ""
-        self.OverType = 0
-        self.WinnerID = 0
-        self.RoundCount = 0
-        self.RoundWinnerID = list()
-        self.AddScore = 0
-        self.Score = 0
-        self.DanLV = 0
-        self.CWinCnt = 0
-        self.TagNameLen = 0
-        self.TagName = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 19
-        length += 1
-        length += 4
-        length += 1
-        length += 4 * self.RoundCount
-        length += 2
-        length += 4
-        length += 1
-        length += 2
-        length += 1
-        length += len(self.TagName)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteString(data, 19, self.TimeStr)
-        data = CommFunc.WriteBYTE(data, self.OverType)
-        data = CommFunc.WriteDWORD(data, self.WinnerID)
-        data = CommFunc.WriteBYTE(data, self.RoundCount)
-        for i in range(self.RoundCount):
-            data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
-        data = CommFunc.WriteWORD(data, self.AddScore)
-        data = CommFunc.WriteDWORD(data, self.Score)
-        data = CommFunc.WriteBYTE(data, self.DanLV)
-        data = CommFunc.WriteWORD(data, self.CWinCnt)
-        data = CommFunc.WriteBYTE(data, self.TagNameLen)
-        data = CommFunc.WriteString(data, self.TagNameLen, self.TagName)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                TimeStr:%s,
-                                OverType:%d,
-                                WinnerID:%d,
-                                RoundCount:%d,
-                                RoundWinnerID:%s,
-                                AddScore:%d,
-                                Score:%d,
-                                DanLV:%d,
-                                CWinCnt:%d,
-                                TagNameLen:%d,
-                                TagName:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.TimeStr,
-                                self.OverType,
-                                self.WinnerID,
-                                self.RoundCount,
-                                "...",
-                                self.AddScore,
-                                self.Score,
-                                self.DanLV,
-                                self.CWinCnt,
-                                self.TagNameLen,
-                                self.TagName
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossRealmPKOverInfo=tagGCCrossRealmPKOverInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKOverInfo.Head.Cmd,m_NAtagGCCrossRealmPKOverInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKOverInfo
-
-
-#------------------------------------------------------
-# C0 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo
-
-class  tagGCCrossRealmPKSeason(Structure):
-    SeasonID = 0    #(WORD SeasonID)// 当前赛季ID
-    StartDate = ""    #(char StartDate[10])// 开始日期 yyyy-MM-dd
-    EndDate = ""    #(char EndDate[10])// 结束日期 yyyy-MM-dd
-    EndTime = ""    #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        return _pos
-
-    def Clear(self):
-        self.SeasonID = 0
-        self.StartDate = ""
-        self.EndDate = ""
-        self.EndTime = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 2
-        length += 10
-        length += 10
-        length += 5
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteWORD(data, self.SeasonID)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndDate)
-        data = CommFunc.WriteString(data, 5, self.EndTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                SeasonID:%d,
-                                StartDate:%s,
-                                EndDate:%s,
-                                EndTime:%s
-                                '''\
-                                %(
-                                self.SeasonID,
-                                self.StartDate,
-                                self.EndDate,
-                                self.EndTime
-                                )
-        return DumpString
-
-
-class  tagGCCrossRealmPKZone(Structure):
-    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
-    ZoneNameLen = 0    #(BYTE ZoneNameLen)
-    ZoneName = ""    #(String ZoneName)// 赛区名
-    SeasonCount = 0    #(WORD SeasonCount)
-    SeasonList = list()    #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen)
-        self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.SeasonCount):
-            temSeasonList = tagGCCrossRealmPKSeason()
-            _pos = temSeasonList.ReadData(_lpData, _pos)
-            self.SeasonList.append(temSeasonList)
-        return _pos
-
-    def Clear(self):
-        self.ZoneID = 0
-        self.ZoneNameLen = 0
-        self.ZoneName = ""
-        self.SeasonCount = 0
-        self.SeasonList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        length += len(self.ZoneName)
-        length += 2
-        for i in range(self.SeasonCount):
-            length += self.SeasonList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteBYTE(data, self.ZoneNameLen)
-        data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName)
-        data = CommFunc.WriteWORD(data, self.SeasonCount)
-        for i in range(self.SeasonCount):
-            data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                ZoneID:%d,
-                                ZoneNameLen:%d,
-                                ZoneName:%s,
-                                SeasonCount:%d,
-                                SeasonList:%s
-                                '''\
-                                %(
-                                self.ZoneID,
-                                self.ZoneNameLen,
-                                self.ZoneName,
-                                self.SeasonCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCCrossRealmPKSeasonInfo(Structure):
-    Head = tagHead()
-    ZoneCount = 0    #(BYTE ZoneCount)// 赛区个数
-    ZoneList = list()    #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x04
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ZoneCount):
-            temZoneList = tagGCCrossRealmPKZone()
-            _pos = temZoneList.ReadData(_lpData, _pos)
-            self.ZoneList.append(temZoneList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x04
-        self.ZoneCount = 0
-        self.ZoneList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.ZoneCount):
-            length += self.ZoneList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneCount)
-        for i in range(self.ZoneCount):
-            data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneCount:%d,
-                                ZoneList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo
-
-
-#------------------------------------------------------
-# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState
-
-class  tagGCCrossRealmPKSeasonState(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 所属赛区ID
-    SeasonID = 0    #(WORD SeasonID)// 当前赛季ID
-    SeasonState = 0    #(BYTE SeasonState)// 赛季状态;0-未开启,1-开启中,2-已结束
-    MatchState = 0    #(BYTE MatchState)// 匹配状态;0-未开启;1-开启中
-    CrossZoneNameLen = 0    #(BYTE CrossZoneNameLen)
-    CrossZoneName = ""    #(String CrossZoneName)// 跨服分区名
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x06
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.SeasonState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.CrossZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.CrossZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.CrossZoneNameLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x06
-        self.ZoneID = 0
-        self.SeasonID = 0
-        self.SeasonState = 0
-        self.MatchState = 0
-        self.CrossZoneNameLen = 0
-        self.CrossZoneName = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 2
-        length += 1
-        length += 1
-        length += 1
-        length += len(self.CrossZoneName)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteWORD(data, self.SeasonID)
-        data = CommFunc.WriteBYTE(data, self.SeasonState)
-        data = CommFunc.WriteBYTE(data, self.MatchState)
-        data = CommFunc.WriteBYTE(data, self.CrossZoneNameLen)
-        data = CommFunc.WriteString(data, self.CrossZoneNameLen, self.CrossZoneName)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                SeasonID:%d,
-                                SeasonState:%d,
-                                MatchState:%d,
-                                CrossZoneNameLen:%d,
-                                CrossZoneName:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.SeasonID,
-                                self.SeasonState,
-                                self.MatchState,
-                                self.CrossZoneNameLen,
-                                self.CrossZoneName
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Head.Cmd,m_NAtagGCCrossRealmPKSeasonState.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState
-
-
-#------------------------------------------------------
-# C0 02 跨服PK开始匹配 #tagGCCrossRealmPKStartMatch
-
-class  tagGCCrossRealmPKStartMatch(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("IsRobot", c_ubyte),    # 是否匹配机器人
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        self.SubCmd = 0x02
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xC0
-        self.SubCmd = 0x02
-        self.IsRobot = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCCrossRealmPKStartMatch)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                IsRobot:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.IsRobot
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
-
-
-#------------------------------------------------------
-# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo
-
-class  tagGCCrossYaomoBossPlayerHurtInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("HurtTotal", c_int),    # 总伤害值,小于亿部分
-                  ("HurtTotalEx", c_int),    # 总伤害值,整除亿部分
-                  ("AwardState", c_int),    # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        self.SubCmd = 0x11
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xC0
-        self.SubCmd = 0x11
-        self.HurtTotal = 0
-        self.HurtTotalEx = 0
-        self.AwardState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCCrossYaomoBossPlayerHurtInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                HurtTotal:%d,
-                                HurtTotalEx:%d,
-                                AwardState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.HurtTotal,
-                                self.HurtTotalEx,
-                                self.AwardState
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo
-
-
-#------------------------------------------------------
-# C0 10 跨服所属分区信息 #tagGCCrossZoneInfo
-
-class  tagGCCrossZoneInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CommZoneID", c_ubyte),    # 所属常规分区ID
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        self.SubCmd = 0x10
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xC0
-        self.SubCmd = 0x10
-        self.CommZoneID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCCrossZoneInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 10 跨服所属分区信息 //tagGCCrossZoneInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CommZoneID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CommZoneID
-                                )
-        return DumpString
-
-
-m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo
-
-
-#------------------------------------------------------
-# C0 24 仙盟攻城战活动信息 #tagGCFamilyGCZActInfo
-
-class  tagGCFamilyGCZActFamily(Structure):
-    FamilyID = 0    #(DWORD FamilyID)
-    Name = ""    #(char Name[33])//参与仙盟名字
-    LV = 0    #(BYTE LV)//仙盟等级
-    ServerID = 0    #(DWORD ServerID)//仙盟所属区服ID
-    EmblemID = 0    #(DWORD EmblemID)//徽章ID
-    FightPower = 0    #(DWORD FightPower)//仙盟总战力,求余亿部分
-    FightPowerEx = 0    #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
-    LeaderID = 0    #(DWORD LeaderID)//盟主ID
-    LeaderName = ""    #(char LeaderName[33])//盟主名
-    LeaderFace = 0    #(DWORD LeaderFace)
-    LeaderFacePic = 0    #(DWORD LeaderFacePic)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.LeaderFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LeaderFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.FamilyID = 0
-        self.Name = ""
-        self.LV = 0
-        self.ServerID = 0
-        self.EmblemID = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.LeaderID = 0
-        self.LeaderName = ""
-        self.LeaderFace = 0
-        self.LeaderFacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 33
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteString(data, 33, self.Name)
-        data = CommFunc.WriteBYTE(data, self.LV)
-        data = CommFunc.WriteDWORD(data, self.ServerID)
-        data = CommFunc.WriteDWORD(data, self.EmblemID)
-        data = CommFunc.WriteDWORD(data, self.FightPower)
-        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.LeaderID)
-        data = CommFunc.WriteString(data, 33, self.LeaderName)
-        data = CommFunc.WriteDWORD(data, self.LeaderFace)
-        data = CommFunc.WriteDWORD(data, self.LeaderFacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                FamilyID:%d,
-                                Name:%s,
-                                LV:%d,
-                                ServerID:%d,
-                                EmblemID:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                LeaderID:%d,
-                                LeaderName:%s,
-                                LeaderFace:%d,
-                                LeaderFacePic:%d
-                                '''\
-                                %(
-                                self.FamilyID,
-                                self.Name,
-                                self.LV,
-                                self.ServerID,
-                                self.EmblemID,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.LeaderID,
-                                self.LeaderName,
-                                self.LeaderFace,
-                                self.LeaderFacePic
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZActInfo(Structure):
-    Head = tagHead()
-    ServerInfoLen = 0    #(BYTE ServerInfoLen)
-    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
-    ZoneID = 0    #(BYTE ZoneID)// 活动分区ID,公示期为0
-    ActID = 0    #(DWORD ActID)// 活动ID,代表某一次活动的唯一ID,前端如果有活动相关的本地记录可以通过验证此ID变更进行重置
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    JoinFamilyCnt = 0    #(BYTE JoinFamilyCnt)// 参与仙盟数
-    ActFlowID = 0    #(WORD ActFlowID)// 活动流程ID,对应H.活动时间流程表中的编号,前端根据跨服时间自行计算当前所处流程状态
-    GuessTemplateID = 0    #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示
-    PersonalTemplateID = 0    #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
-    FamilyTemplateID = 0    #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
-    StateError = 0    #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示
-    FamilyCount = 0    #(BYTE FamilyCount)
-    ActFamilyList = list()    #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x24
-        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.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.JoinFamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.ActFlowID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FamilyCount):
-            temActFamilyList = tagGCFamilyGCZActFamily()
-            _pos = temActFamilyList.ReadData(_lpData, _pos)
-            self.ActFamilyList.append(temActFamilyList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x24
-        self.ServerInfoLen = 0
-        self.ServerIDRangeInfo = ""
-        self.ZoneID = 0
-        self.ActID = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.JoinFamilyCnt = 0
-        self.ActFlowID = 0
-        self.GuessTemplateID = 0
-        self.PersonalTemplateID = 0
-        self.FamilyTemplateID = 0
-        self.StateError = 0
-        self.FamilyCount = 0
-        self.ActFamilyList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += len(self.ServerIDRangeInfo)
-        length += 1
-        length += 4
-        length += 10
-        length += 10
-        length += 1
-        length += 2
-        length += 2
-        length += 2
-        length += 2
-        length += 4
-        length += 1
-        for i in range(self.FamilyCount):
-            length += self.ActFamilyList[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.ZoneID)
-        data = CommFunc.WriteDWORD(data, self.ActID)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.JoinFamilyCnt)
-        data = CommFunc.WriteWORD(data, self.ActFlowID)
-        data = CommFunc.WriteWORD(data, self.GuessTemplateID)
-        data = CommFunc.WriteWORD(data, self.PersonalTemplateID)
-        data = CommFunc.WriteWORD(data, self.FamilyTemplateID)
-        data = CommFunc.WriteDWORD(data, self.StateError)
-        data = CommFunc.WriteBYTE(data, self.FamilyCount)
-        for i in range(self.FamilyCount):
-            data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ServerInfoLen:%d,
-                                ServerIDRangeInfo:%s,
-                                ZoneID:%d,
-                                ActID:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                JoinFamilyCnt:%d,
-                                ActFlowID:%d,
-                                GuessTemplateID:%d,
-                                PersonalTemplateID:%d,
-                                FamilyTemplateID:%d,
-                                StateError:%d,
-                                FamilyCount:%d,
-                                ActFamilyList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ServerInfoLen,
-                                self.ServerIDRangeInfo,
-                                self.ZoneID,
-                                self.ActID,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.JoinFamilyCnt,
-                                self.ActFlowID,
-                                self.GuessTemplateID,
-                                self.PersonalTemplateID,
-                                self.FamilyTemplateID,
-                                self.StateError,
-                                self.FamilyCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZActInfo=tagGCFamilyGCZActInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZActInfo.Head.Cmd,m_NAtagGCFamilyGCZActInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZActInfo
-
-
-#------------------------------------------------------
-# C0 29 仙盟攻城战城池战斗信息 #tagGCFamilyGCZBatCityInfo
-
-class  tagGCFamilyGCZBatCityInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("CityID", c_int),    #城池ID
-                  ("CityLV", c_ubyte),    #城池等级
-                  ("FamilyID", c_int),    #所属仙盟ID,可能为0
-                  ("GuardID", c_int),    #当前防守成员ID,为0时表示没有防守成员了,城池已被击毁
-                  ("HP", c_int),    #防守成员剩余生命,求余亿部分,剩余生命为0时代表该防守成员被击败
-                  ("HPEx", c_int),    #防守成员剩余生命,整除亿部分
-                  ("HPMax", c_int),    #防守成员最大生命,求余亿部分
-                  ("HPMaxEx", c_int),    #防守成员最大生命,整除亿部分
-                  ("AtkPlayerID", c_int),    #发起攻击的玩家ID,可能为0,判断是否自己的ID进行相应的攻击表现
-                  ("AtkRet", c_ubyte),    #攻击结果,仅在攻击玩家ID不为0时有效,0--成功;1-目标已被击杀;2-城池已被摧毁;3-其他
-                  ("KillCnt", c_ubyte),    #本次攻击击杀防守人员数
-                  ("HurtValue", c_int),    #伤害飘血,求余亿部分
-                  ("HurtValueEx", c_int),    #伤害飘血,整除亿部分
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xC0
-        self.SubCmd = 0x29
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xC0
-        self.SubCmd = 0x29
-        self.CityID = 0
-        self.CityLV = 0
-        self.FamilyID = 0
-        self.GuardID = 0
-        self.HP = 0
-        self.HPEx = 0
-        self.HPMax = 0
-        self.HPMaxEx = 0
-        self.AtkPlayerID = 0
-        self.AtkRet = 0
-        self.KillCnt = 0
-        self.HurtValue = 0
-        self.HurtValueEx = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZBatCityInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 29 仙盟攻城战城池战斗信息 //tagGCFamilyGCZBatCityInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                CityID:%d,
-                                CityLV:%d,
-                                FamilyID:%d,
-                                GuardID:%d,
-                                HP:%d,
-                                HPEx:%d,
-                                HPMax:%d,
-                                HPMaxEx:%d,
-                                AtkPlayerID:%d,
-                                AtkRet:%d,
-                                KillCnt:%d,
-                                HurtValue:%d,
-                                HurtValueEx:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.CityID,
-                                self.CityLV,
-                                self.FamilyID,
-                                self.GuardID,
-                                self.HP,
-                                self.HPEx,
-                                self.HPMax,
-                                self.HPMaxEx,
-                                self.AtkPlayerID,
-                                self.AtkRet,
-                                self.KillCnt,
-                                self.HurtValue,
-                                self.HurtValueEx
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZBatCityInfo=tagGCFamilyGCZBatCityInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatCityInfo.Cmd,m_NAtagGCFamilyGCZBatCityInfo.SubCmd))] = m_NAtagGCFamilyGCZBatCityInfo
-
-
-#------------------------------------------------------
-# C0 25 仙盟攻城战轮次分组信息 #tagGCFamilyGCZBatGroupInfo
-
-class  tagGCFamilyGCZBatGroup(Structure):
-    GroupNum = 0    #(BYTE GroupNum)// 分组编号,从1开始,对应A
-    FamilyIDCnt = 0    #(BYTE FamilyIDCnt)
-    FamilyIDList = list()    #(vector<DWORD> FamilyIDList)// 仙盟ID列表,前端可以通过判断参与的仙盟ID是否在某个分组里面验证有没有战场参赛资格
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.FamilyIDCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FamilyIDCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.FamilyIDList.append(value)
-        return _pos
-
-    def Clear(self):
-        self.GroupNum = 0
-        self.FamilyIDCnt = 0
-        self.FamilyIDList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        length += 4 * self.FamilyIDCnt
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.GroupNum)
-        data = CommFunc.WriteBYTE(data, self.FamilyIDCnt)
-        for i in range(self.FamilyIDCnt):
-            data = CommFunc.WriteDWORD(data, self.FamilyIDList[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                GroupNum:%d,
-                                FamilyIDCnt:%d,
-                                FamilyIDList:%s
-                                '''\
-                                %(
-                                self.GroupNum,
-                                self.FamilyIDCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZBat(Structure):
-    BatType = 0    #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
-    GroupCnt = 0    #(BYTE GroupCnt)// 分组数
-    GroupList = list()    #(vector<tagGCFamilyGCZBatGroup> GroupList)// 分组列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.GroupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.GroupCnt):
-            temGroupList = tagGCFamilyGCZBatGroup()
-            _pos = temGroupList.ReadData(_lpData, _pos)
-            self.GroupList.append(temGroupList)
-        return _pos
-
-    def Clear(self):
-        self.BatType = 0
-        self.GroupCnt = 0
-        self.GroupList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 1
-        for i in range(self.GroupCnt):
-            length += self.GroupList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.BatType)
-        data = CommFunc.WriteBYTE(data, self.GroupCnt)
-        for i in range(self.GroupCnt):
-            data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                BatType:%d,
-                                GroupCnt:%d,
-                                GroupList:%s
-                                '''\
-                                %(
-                                self.BatType,
-                                self.GroupCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZBatGroupInfo(Structure):
-    Head = tagHead()
-    RoundNum = 0    #(BYTE RoundNum)// 第x轮的分组,从1开始,没有在对应轮次战场分组里的视为没有该轮次的参赛资格
-    BatTypeCnt = 0    #(BYTE BatTypeCnt)// 战场类型数
-    BatList = list()    #(vector<tagGCFamilyGCZBat> BatList)//战场列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x25
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.BatTypeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BatTypeCnt):
-            temBatList = tagGCFamilyGCZBat()
-            _pos = temBatList.ReadData(_lpData, _pos)
-            self.BatList.append(temBatList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x25
-        self.RoundNum = 0
-        self.BatTypeCnt = 0
-        self.BatList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        for i in range(self.BatTypeCnt):
-            length += self.BatList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RoundNum)
-        data = CommFunc.WriteBYTE(data, self.BatTypeCnt)
-        for i in range(self.BatTypeCnt):
-            data = CommFunc.WriteString(data, self.BatList[i].GetLength(), self.BatList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RoundNum:%d,
-                                BatTypeCnt:%d,
-                                BatList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RoundNum,
-                                self.BatTypeCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZBatGroupInfo=tagGCFamilyGCZBatGroupInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatGroupInfo.Head.Cmd,m_NAtagGCFamilyGCZBatGroupInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatGroupInfo
-
-
-#------------------------------------------------------
-# C0 30 仙盟攻城战战斗战报 #tagGCFamilyGCZBatReport
-
-class  tagGCFamilyGCZBatRepHurt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("TagFamilyID", c_int),    #目标仙盟ID
-                  ("HurtValue", c_int),    #输出伤害,求余亿部分
-                  ("HurtValueEx", 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.TagFamilyID = 0
-        self.HurtValue = 0
-        self.HurtValueEx = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZBatRepHurt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 30 仙盟攻城战战斗战报 //tagGCFamilyGCZBatReport:
-                                TagFamilyID:%d,
-                                HurtValue:%d,
-                                HurtValueEx:%d
-                                '''\
-                                %(
-                                self.TagFamilyID,
-                                self.HurtValue,
-                                self.HurtValueEx
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZBatReport(Structure):
-    Head = tagHead()
-    FamilyID = 0    #(DWORD FamilyID)// 战报仙盟ID
-    DefRepCnt = 0    #(BYTE DefRepCnt)
-    DefRepList = list()    #(vector<tagGCFamilyGCZBatRepHurt> DefRepList)// 防守战报
-    AtkRepCnt = 0    #(BYTE AtkRepCnt)
-    AtkRepList = list()    #(vector<tagGCFamilyGCZBatRepHurt> AtkRepList)// 进攻战报
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x30
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.DefRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DefRepCnt):
-            temDefRepList = tagGCFamilyGCZBatRepHurt()
-            _pos = temDefRepList.ReadData(_lpData, _pos)
-            self.DefRepList.append(temDefRepList)
-        self.AtkRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AtkRepCnt):
-            temAtkRepList = tagGCFamilyGCZBatRepHurt()
-            _pos = temAtkRepList.ReadData(_lpData, _pos)
-            self.AtkRepList.append(temAtkRepList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x30
-        self.FamilyID = 0
-        self.DefRepCnt = 0
-        self.DefRepList = list()
-        self.AtkRepCnt = 0
-        self.AtkRepList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        for i in range(self.DefRepCnt):
-            length += self.DefRepList[i].GetLength()
-        length += 1
-        for i in range(self.AtkRepCnt):
-            length += self.AtkRepList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteBYTE(data, self.DefRepCnt)
-        for i in range(self.DefRepCnt):
-            data = CommFunc.WriteString(data, self.DefRepList[i].GetLength(), self.DefRepList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AtkRepCnt)
-        for i in range(self.AtkRepCnt):
-            data = CommFunc.WriteString(data, self.AtkRepList[i].GetLength(), self.AtkRepList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FamilyID:%d,
-                                DefRepCnt:%d,
-                                DefRepList:%s,
-                                AtkRepCnt:%d,
-                                AtkRepList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FamilyID,
-                                self.DefRepCnt,
-                                "...",
-                                self.AtkRepCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZBatReport=tagGCFamilyGCZBatReport()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatReport.Head.Cmd,m_NAtagGCFamilyGCZBatReport.Head.SubCmd))] = m_NAtagGCFamilyGCZBatReport
-
-
-#------------------------------------------------------
-# C0 28 仙盟攻城战城池场景信息 #tagGCFamilyGCZBatSceneInfo
-
-class  tagGCFamilyGCZBatScenePlayer(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    Name = ""    #(char Name[33])
-    Job = 0    #(BYTE Job)
-    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.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_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)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.Name = ""
-        self.Job = 0
-        self.Face = 0
-        self.FacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.Name)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                Name:%s,
-                                Job:%d,
-                                Face:%d,
-                                FacePic:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.Name,
-                                self.Job,
-                                self.Face,
-                                self.FacePic
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZBatSceneHurt(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("CityID", c_int),    #被攻击的城池ID
-                  ("HurtValue", c_int),    #伤害飘血,求余亿部分
-                  ("HurtValueEx", 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.CityID = 0
-        self.HurtValue = 0
-        self.HurtValueEx = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZBatSceneHurt)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
-                                CityID:%d,
-                                HurtValue:%d,
-                                HurtValueEx:%d
-                                '''\
-                                %(
-                                self.CityID,
-                                self.HurtValue,
-                                self.HurtValueEx
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZBatSceneCity(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("CityID", c_int),    #城池ID
-                  ("CityLV", c_ubyte),    #城池等级
-                  ("FamilyID", c_int),    #所属仙盟ID,可能为0
-                  ("Rank", c_ubyte),    #当前名次,从1开始
-                  ("HP", c_int),    #剩余生命,求余亿部分,剩余生命为0时代表被摧毁
-                  ("HPEx", c_int),    #剩余生命,整除亿部分
-                  ("HPMax", c_int),    #最大生命,求余亿部分
-                  ("HPMaxEx", c_int),    #最大生命,整除亿部分
-                  ("LastAtkedTime", 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.CityID = 0
-        self.CityLV = 0
-        self.FamilyID = 0
-        self.Rank = 0
-        self.HP = 0
-        self.HPEx = 0
-        self.HPMax = 0
-        self.HPMaxEx = 0
-        self.LastAtkedTime = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZBatSceneCity)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
-                                CityID:%d,
-                                CityLV:%d,
-                                FamilyID:%d,
-                                Rank:%d,
-                                HP:%d,
-                                HPEx:%d,
-                                HPMax:%d,
-                                HPMaxEx:%d,
-                                LastAtkedTime:%d
-                                '''\
-                                %(
-                                self.CityID,
-                                self.CityLV,
-                                self.FamilyID,
-                                self.Rank,
-                                self.HP,
-                                self.HPEx,
-                                self.HPMax,
-                                self.HPMaxEx,
-                                self.LastAtkedTime
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZBatSceneInfo(Structure):
-    Head = tagHead()
-    BatType = 0    #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
-    GroupNum = 0    #(BYTE GroupNum)// 分组编号,从1开始,对应A
-    TopFamilyID = 0    #(DWORD TopFamilyID)// 伤害第一仙盟ID
-    TopLeaderID = 0    #(DWORD TopLeaderID)// 伤害第一盟主ID
-    TopPlayerID = 0    #(DWORD TopPlayerID)// 伤害第一玩家ID
-    TopPlayerFamilyID = 0    #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID
-    AtkPlayerID = 0    #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息
-    AtkType = 0    #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效
-    KillCnt = 0    #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效
-    HurtCnt = 0    #(BYTE HurtCnt)
-    HurtList = list()    #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效
-    CityCnt = 0    #(BYTE CityCnt)
-    CityList = list()    #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池
-    PlayerCnt = 0    #(BYTE PlayerCnt)
-    PlayerInfoList = list()    #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x28
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.HurtCnt):
-            temHurtList = tagGCFamilyGCZBatSceneHurt()
-            _pos = temHurtList.ReadData(_lpData, _pos)
-            self.HurtList.append(temHurtList)
-        self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.CityCnt):
-            temCityList = tagGCFamilyGCZBatSceneCity()
-            _pos = temCityList.ReadData(_lpData, _pos)
-            self.CityList.append(temCityList)
-        self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PlayerCnt):
-            temPlayerInfoList = tagGCFamilyGCZBatScenePlayer()
-            _pos = temPlayerInfoList.ReadData(_lpData, _pos)
-            self.PlayerInfoList.append(temPlayerInfoList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x28
-        self.BatType = 0
-        self.GroupNum = 0
-        self.TopFamilyID = 0
-        self.TopLeaderID = 0
-        self.TopPlayerID = 0
-        self.TopPlayerFamilyID = 0
-        self.AtkPlayerID = 0
-        self.AtkType = 0
-        self.KillCnt = 0
-        self.HurtCnt = 0
-        self.HurtList = list()
-        self.CityCnt = 0
-        self.CityList = list()
-        self.PlayerCnt = 0
-        self.PlayerInfoList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        length += 1
-        length += 1
-        for i in range(self.HurtCnt):
-            length += self.HurtList[i].GetLength()
-        length += 1
-        for i in range(self.CityCnt):
-            length += self.CityList[i].GetLength()
-        length += 1
-        for i in range(self.PlayerCnt):
-            length += self.PlayerInfoList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.BatType)
-        data = CommFunc.WriteBYTE(data, self.GroupNum)
-        data = CommFunc.WriteDWORD(data, self.TopFamilyID)
-        data = CommFunc.WriteDWORD(data, self.TopLeaderID)
-        data = CommFunc.WriteDWORD(data, self.TopPlayerID)
-        data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID)
-        data = CommFunc.WriteDWORD(data, self.AtkPlayerID)
-        data = CommFunc.WriteBYTE(data, self.AtkType)
-        data = CommFunc.WriteBYTE(data, self.KillCnt)
-        data = CommFunc.WriteBYTE(data, self.HurtCnt)
-        for i in range(self.HurtCnt):
-            data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.CityCnt)
-        for i in range(self.CityCnt):
-            data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.PlayerCnt)
-        for i in range(self.PlayerCnt):
-            data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                BatType:%d,
-                                GroupNum:%d,
-                                TopFamilyID:%d,
-                                TopLeaderID:%d,
-                                TopPlayerID:%d,
-                                TopPlayerFamilyID:%d,
-                                AtkPlayerID:%d,
-                                AtkType:%d,
-                                KillCnt:%d,
-                                HurtCnt:%d,
-                                HurtList:%s,
-                                CityCnt:%d,
-                                CityList:%s,
-                                PlayerCnt:%d,
-                                PlayerInfoList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.BatType,
-                                self.GroupNum,
-                                self.TopFamilyID,
-                                self.TopLeaderID,
-                                self.TopPlayerID,
-                                self.TopPlayerFamilyID,
-                                self.AtkPlayerID,
-                                self.AtkType,
-                                self.KillCnt,
-                                self.HurtCnt,
-                                "...",
-                                self.CityCnt,
-                                "...",
-                                self.PlayerCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo
-
-
-#------------------------------------------------------
-# C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo
-
-class  tagGCFamilyGCZCampMem(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    Name = ""    #(char Name[33])//参与玩家名字
-    FamilyLV = 0    #(BYTE FamilyLV)//参与时的家族职位
-    Job = 0    #(BYTE Job)
-    Face = 0    #(DWORD Face)//基本脸型
-    FacePic = 0    #(DWORD FacePic)//头像框
-    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
-    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
-    HP = 0    #(DWORD HP)//剩余生命,求余亿部分
-    HPEx = 0    #(DWORD HPEx)//剩余生命,整除亿部分
-    HPMax = 0    #(DWORD HPMax)//最大生命,求余亿部分
-    HPMaxEx = 0    #(DWORD HPMaxEx)//最大生命,整除亿部分
-    TotalHurt = 0    #(DWORD TotalHurt)//活动总伤害,求余亿部分,如果不在榜上则读该值
-    TotalHurtEx = 0    #(DWORD TotalHurtEx)//活动总伤害,整除亿部分
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TotalHurt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TotalHurtEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.Name = ""
-        self.FamilyLV = 0
-        self.Job = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.FightPower = 0
-        self.FightPowerEx = 0
-        self.HP = 0
-        self.HPEx = 0
-        self.HPMax = 0
-        self.HPMaxEx = 0
-        self.TotalHurt = 0
-        self.TotalHurtEx = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.Name)
-        data = CommFunc.WriteBYTE(data, self.FamilyLV)
-        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.WriteDWORD(data, self.FightPowerEx)
-        data = CommFunc.WriteDWORD(data, self.HP)
-        data = CommFunc.WriteDWORD(data, self.HPEx)
-        data = CommFunc.WriteDWORD(data, self.HPMax)
-        data = CommFunc.WriteDWORD(data, self.HPMaxEx)
-        data = CommFunc.WriteDWORD(data, self.TotalHurt)
-        data = CommFunc.WriteDWORD(data, self.TotalHurtEx)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                Name:%s,
-                                FamilyLV:%d,
-                                Job:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                FightPower:%d,
-                                FightPowerEx:%d,
-                                HP:%d,
-                                HPEx:%d,
-                                HPMax:%d,
-                                HPMaxEx:%d,
-                                TotalHurt:%d,
-                                TotalHurtEx:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.Name,
-                                self.FamilyLV,
-                                self.Job,
-                                self.Face,
-                                self.FacePic,
-                                self.FightPower,
-                                self.FightPowerEx,
-                                self.HP,
-                                self.HPEx,
-                                self.HPMax,
-                                self.HPMaxEx,
-                                self.TotalHurt,
-                                self.TotalHurtEx
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZCampRound(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("RoundNum", c_ubyte),    #轮次编号,从1开始
-                  ("BatType", c_ubyte),    #所在战场类型
-                  ("GroupNum", c_ubyte),    #所在分组编号
-                  ("Rank", c_ubyte),    #本轮排名
-                  ("Score", c_ushort),    #本轮积分,总积分为所有轮次累加
-                  ("UpdownState", c_ubyte),    #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型
-                  ]
-
-    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.RoundNum = 0
-        self.BatType = 0
-        self.GroupNum = 0
-        self.Rank = 0
-        self.Score = 0
-        self.UpdownState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZCampRound)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo:
-                                RoundNum:%d,
-                                BatType:%d,
-                                GroupNum:%d,
-                                Rank:%d,
-                                Score:%d,
-                                UpdownState:%d
-                                '''\
-                                %(
-                                self.RoundNum,
-                                self.BatType,
-                                self.GroupNum,
-                                self.Rank,
-                                self.Score,
-                                self.UpdownState
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZCampInfo(Structure):
-    Head = tagHead()
-    FamilyID = 0    #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准
-    CampLV = 0    #(WORD CampLV)//大本营当前等级
-    CampExp = 0    #(DWORD CampExp)//大本营当前经验
-    CityLV = 0    #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样
-    HPBase = 0    #(DWORD HPBase)//基础生命,求余亿部分
-    HPBaseEx = 0    #(DWORD HPBaseEx)//基础生命,整除亿部分
-    HPMax = 0    #(DWORD HPMax)//总生命,求余亿部分
-    HPMaxEx = 0    #(DWORD HPMaxEx)//总大生命,整除亿部分
-    HP = 0    #(DWORD HP)//剩余生命,求余亿部分
-    HPEx = 0    #(DWORD HPEx)//剩余生命,整除亿部分
-    RoundCnt = 0    #(BYTE RoundCnt)
-    RoundInfoList = list()    #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息
-    DefMemCnt = 0    #(BYTE DefMemCnt)
-    DefMemList = list()    #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x26
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.HPBase,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPBaseEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RoundCnt):
-            temRoundInfoList = tagGCFamilyGCZCampRound()
-            _pos = temRoundInfoList.ReadData(_lpData, _pos)
-            self.RoundInfoList.append(temRoundInfoList)
-        self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.DefMemCnt):
-            temDefMemList = tagGCFamilyGCZCampMem()
-            _pos = temDefMemList.ReadData(_lpData, _pos)
-            self.DefMemList.append(temDefMemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x26
-        self.FamilyID = 0
-        self.CampLV = 0
-        self.CampExp = 0
-        self.CityLV = 0
-        self.HPBase = 0
-        self.HPBaseEx = 0
-        self.HPMax = 0
-        self.HPMaxEx = 0
-        self.HP = 0
-        self.HPEx = 0
-        self.RoundCnt = 0
-        self.RoundInfoList = list()
-        self.DefMemCnt = 0
-        self.DefMemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 2
-        length += 4
-        length += 2
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.RoundCnt):
-            length += self.RoundInfoList[i].GetLength()
-        length += 1
-        for i in range(self.DefMemCnt):
-            length += self.DefMemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteWORD(data, self.CampLV)
-        data = CommFunc.WriteDWORD(data, self.CampExp)
-        data = CommFunc.WriteWORD(data, self.CityLV)
-        data = CommFunc.WriteDWORD(data, self.HPBase)
-        data = CommFunc.WriteDWORD(data, self.HPBaseEx)
-        data = CommFunc.WriteDWORD(data, self.HPMax)
-        data = CommFunc.WriteDWORD(data, self.HPMaxEx)
-        data = CommFunc.WriteDWORD(data, self.HP)
-        data = CommFunc.WriteDWORD(data, self.HPEx)
-        data = CommFunc.WriteBYTE(data, self.RoundCnt)
-        for i in range(self.RoundCnt):
-            data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.DefMemCnt)
-        for i in range(self.DefMemCnt):
-            data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FamilyID:%d,
-                                CampLV:%d,
-                                CampExp:%d,
-                                CityLV:%d,
-                                HPBase:%d,
-                                HPBaseEx:%d,
-                                HPMax:%d,
-                                HPMaxEx:%d,
-                                HP:%d,
-                                HPEx:%d,
-                                RoundCnt:%d,
-                                RoundInfoList:%s,
-                                DefMemCnt:%d,
-                                DefMemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FamilyID,
-                                self.CampLV,
-                                self.CampExp,
-                                self.CityLV,
-                                self.HPBase,
-                                self.HPBaseEx,
-                                self.HPMax,
-                                self.HPMaxEx,
-                                self.HP,
-                                self.HPEx,
-                                self.RoundCnt,
-                                "...",
-                                self.DefMemCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZCampInfo=tagGCFamilyGCZCampInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZCampInfo.Head.Cmd,m_NAtagGCFamilyGCZCampInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZCampInfo
-
-
-#------------------------------------------------------
-# C0 27 仙盟攻城战成员贡献值信息 #tagGCFamilyGCZContributionInfo
-
-class  tagGCFamilyGCZContribution(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("PlayerID", c_int),    
-                  ("ContributionValue", 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.PlayerID = 0
-        self.ContributionValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZContribution)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 27 仙盟攻城战成员贡献值信息 //tagGCFamilyGCZContributionInfo:
-                                PlayerID:%d,
-                                ContributionValue:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.ContributionValue
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZContributionInfo(Structure):
-    Head = tagHead()
-    ContriCnt = 0    #(BYTE ContriCnt)
-    ContriList = list()    #(vector<tagGCFamilyGCZContribution> ContriList)//成员贡献值列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x27
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ContriCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ContriCnt):
-            temContriList = tagGCFamilyGCZContribution()
-            _pos = temContriList.ReadData(_lpData, _pos)
-            self.ContriList.append(temContriList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x27
-        self.ContriCnt = 0
-        self.ContriList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.ContriCnt):
-            length += self.ContriList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ContriCnt)
-        for i in range(self.ContriCnt):
-            data = CommFunc.WriteString(data, self.ContriList[i].GetLength(), self.ContriList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ContriCnt:%d,
-                                ContriList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ContriCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZContributionInfo=tagGCFamilyGCZContributionInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZContributionInfo.Head.Cmd,m_NAtagGCFamilyGCZContributionInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZContributionInfo
-
-
-#------------------------------------------------------
-# C0 31 仙盟攻城战分组仙盟成员伤害明细 #tagGCFamilyGCZGroupFamilyMemHurtInfo
-
-class  tagGCFamilyGCZGroupFamilyMemHurt(Structure):
-    PlayerID = 0    #(DWORD PlayerID)
-    Name = ""    #(char Name[33])//参与玩家名字
-    HurtValue = 0    #(DWORD HurtValue)//伤害,求余亿部分
-    HurtValueEx = 0    #(DWORD HurtValueEx)//伤害,整除亿部分
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.Name = ""
-        self.HurtValue = 0
-        self.HurtValueEx = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.Name)
-        data = CommFunc.WriteDWORD(data, self.HurtValue)
-        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                Name:%s,
-                                HurtValue:%d,
-                                HurtValueEx:%d
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.Name,
-                                self.HurtValue,
-                                self.HurtValueEx
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZGroupFamilyMemHurtInfo(Structure):
-    Head = tagHead()
-    FamilyID = 0    #(DWORD FamilyID)//查看的目标仙盟ID
-    HurtMemCnt = 0    #(BYTE HurtMemCnt)
-    HurtMemList = list()    #(vector<tagGCFamilyGCZGroupFamilyMemHurt> HurtMemList)//成员伤害明细列表,只算城池被摧毁前的伤害,未排序,前端自己排序
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x31
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.HurtMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.HurtMemCnt):
-            temHurtMemList = tagGCFamilyGCZGroupFamilyMemHurt()
-            _pos = temHurtMemList.ReadData(_lpData, _pos)
-            self.HurtMemList.append(temHurtMemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x31
-        self.FamilyID = 0
-        self.HurtMemCnt = 0
-        self.HurtMemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        for i in range(self.HurtMemCnt):
-            length += self.HurtMemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.FamilyID)
-        data = CommFunc.WriteBYTE(data, self.HurtMemCnt)
-        for i in range(self.HurtMemCnt):
-            data = CommFunc.WriteString(data, self.HurtMemList[i].GetLength(), self.HurtMemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FamilyID:%d,
-                                HurtMemCnt:%d,
-                                HurtMemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FamilyID,
-                                self.HurtMemCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo=tagGCFamilyGCZGroupFamilyMemHurtInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.Cmd,m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo
-
-
-#------------------------------------------------------
-# C0 32 仙盟攻城战竞猜名单信息 #tagGCFamilyGCZGuessInfo
-
-class  tagGCFamilyGCZGuessFamily(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("FamilyID", c_int),    #备选仙盟ID
-                  ("GuessValue", c_ushort),    #竞猜热度值,玩家每次选择则加1,重复选择也算
-                  ]
-
-    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.FamilyID = 0
-        self.GuessValue = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZGuessFamily)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
-                                FamilyID:%d,
-                                GuessValue:%d
-                                '''\
-                                %(
-                                self.FamilyID,
-                                self.GuessValue
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZGuessRight(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("AwardID", c_ubyte),    #奖励ID
-                  ("RightPlayerCnt", c_ushort),    #猜中玩家个数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.AwardID = 0
-        self.RightPlayerCnt = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagGCFamilyGCZGuessRight)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
-                                AwardID:%d,
-                                RightPlayerCnt:%d
-                                '''\
-                                %(
-                                self.AwardID,
-                                self.RightPlayerCnt
-                                )
-        return DumpString
-
-
-class  tagGCFamilyGCZGuessInfo(Structure):
-    Head = tagHead()
-    PlayerID = 0    #(DWORD PlayerID)//竞猜玩家ID,有玩家修改竞猜时会附带该信息,如果是自己ID,则更新自己的竞猜选项,否则无视
-    SelectCnt = 0    #(BYTE SelectCnt)
-    SelectFamilyIDList = list()    #(vector<DWORD> SelectFamilyIDList)//竞猜玩家选择的仙盟ID顺序
-    FinalCnt = 0    #(BYTE FinalCnt)
-    FinalFamilyIDList = list()    #(vector<DWORD> FinalFamilyIDList)//最终排名顺序,仅活动排名出来后才有值
-    RightCnt = 0    #(BYTE RightCnt)
-    RightInfoList = list()    #(vector<tagGCFamilyGCZGuessRight> RightInfoList)//猜中个数明细列表
-    FamilyCnt = 0    #(BYTE FamilyCnt)
-    GuessFamilyList = list()    #(vector<tagGCFamilyGCZGuessFamily> GuessFamilyList)//备选仙盟名单列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x32
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.SelectCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.SelectFamilyIDList.append(value)
-        self.FinalCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FinalCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.FinalFamilyIDList.append(value)
-        self.RightCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RightCnt):
-            temRightInfoList = tagGCFamilyGCZGuessRight()
-            _pos = temRightInfoList.ReadData(_lpData, _pos)
-            self.RightInfoList.append(temRightInfoList)
-        self.FamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FamilyCnt):
-            temGuessFamilyList = tagGCFamilyGCZGuessFamily()
-            _pos = temGuessFamilyList.ReadData(_lpData, _pos)
-            self.GuessFamilyList.append(temGuessFamilyList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x32
-        self.PlayerID = 0
-        self.SelectCnt = 0
-        self.SelectFamilyIDList = list()
-        self.FinalCnt = 0
-        self.FinalFamilyIDList = list()
-        self.RightCnt = 0
-        self.RightInfoList = list()
-        self.FamilyCnt = 0
-        self.GuessFamilyList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 4
-        length += 1
-        length += 4 * self.SelectCnt
-        length += 1
-        length += 4 * self.FinalCnt
-        length += 1
-        for i in range(self.RightCnt):
-            length += self.RightInfoList[i].GetLength()
-        length += 1
-        for i in range(self.FamilyCnt):
-            length += self.GuessFamilyList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteBYTE(data, self.SelectCnt)
-        for i in range(self.SelectCnt):
-            data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i])
-        data = CommFunc.WriteBYTE(data, self.FinalCnt)
-        for i in range(self.FinalCnt):
-            data = CommFunc.WriteDWORD(data, self.FinalFamilyIDList[i])
-        data = CommFunc.WriteBYTE(data, self.RightCnt)
-        for i in range(self.RightCnt):
-            data = CommFunc.WriteString(data, self.RightInfoList[i].GetLength(), self.RightInfoList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.FamilyCnt)
-        for i in range(self.FamilyCnt):
-            data = CommFunc.WriteString(data, self.GuessFamilyList[i].GetLength(), self.GuessFamilyList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                PlayerID:%d,
-                                SelectCnt:%d,
-                                SelectFamilyIDList:%s,
-                                FinalCnt:%d,
-                                FinalFamilyIDList:%s,
-                                RightCnt:%d,
-                                RightInfoList:%s,
-                                FamilyCnt:%d,
-                                GuessFamilyList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.PlayerID,
-                                self.SelectCnt,
-                                "...",
-                                self.FinalCnt,
-                                "...",
-                                self.RightCnt,
-                                "...",
-                                self.FamilyCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCFamilyGCZGuessInfo=tagGCFamilyGCZGuessInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGuessInfo.Head.Cmd,m_NAtagGCFamilyGCZGuessInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGuessInfo
-
-
-#------------------------------------------------------
-# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo
-
-class  tagGCLuckyCloudBuyLotteryRec(Structure):
-    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
-    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)// 中奖玩家名
-    LotteryNum = 0    #(WORD LotteryNum)// 开奖号码
-    LotteryTime = 0    #(DWORD LotteryTime)// 开奖时间戳,秒
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.SuperItemID = 0
-        self.SuperItemCount = 0
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.LotteryNum = 0
-        self.LotteryTime = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 1
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.SuperItemID)
-        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.LotteryNum)
-        data = CommFunc.WriteDWORD(data, self.LotteryTime)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                SuperItemID:%d,
-                                SuperItemCount:%d,
-                                NameLen:%d,
-                                PlayerName:%s,
-                                LotteryNum:%d,
-                                LotteryTime:%d
-                                '''\
-                                %(
-                                self.SuperItemID,
-                                self.SuperItemCount,
-                                self.NameLen,
-                                self.PlayerName,
-                                self.LotteryNum,
-                                self.LotteryTime
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyLotteryRecInfo(Structure):
-    Head = tagHead()
-    ZoneCount = 0    #(BYTE ZoneCount)// 分区数
-    ZoneIDList = list()    #(vector<BYTE> ZoneIDList)// 所有分区ID列表
-    ZoneID = 0    #(BYTE ZoneID)// 返回记录分区ID
-    Count = 0    #(WORD Count)
-    LotteryRecList = list()    #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x14
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.ZoneCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.ZoneIDList.append(value)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temLotteryRecList = tagGCLuckyCloudBuyLotteryRec()
-            _pos = temLotteryRecList.ReadData(_lpData, _pos)
-            self.LotteryRecList.append(temLotteryRecList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x14
-        self.ZoneCount = 0
-        self.ZoneIDList = list()
-        self.ZoneID = 0
-        self.Count = 0
-        self.LotteryRecList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1 * self.ZoneCount
-        length += 1
-        length += 2
-        for i in range(self.Count):
-            length += self.LotteryRecList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneCount)
-        for i in range(self.ZoneCount):
-            data = CommFunc.WriteBYTE(data, self.ZoneIDList[i])
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneCount:%d,
-                                ZoneIDList:%s,
-                                ZoneID:%d,
-                                Count:%d,
-                                LotteryRecList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneCount,
-                                "...",
-                                self.ZoneID,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo
-
-
-#------------------------------------------------------
-# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo
-
-class  tagGCLuckyCloudBuyNumRec(Structure):
-    NameLen = 0    #(BYTE NameLen)
-    PlayerName = ""    #(String PlayerName)
-    BuyNum = 0    #(WORD BuyNum)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
-        self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.NameLen = 0
-        self.PlayerName = ""
-        self.BuyNum = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += len(self.PlayerName)
-        length += 2
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.NameLen)
-        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
-        data = CommFunc.WriteWORD(data, self.BuyNum)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                NameLen:%d,
-                                PlayerName:%s,
-                                BuyNum:%d
-                                '''\
-                                %(
-                                self.NameLen,
-                                self.PlayerName,
-                                self.BuyNum
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyNumRecInfo(Structure):
-    Head = tagHead()
-    RemainCount = 0    #(WORD RemainCount)// 开奖剩余份数
-    Count = 0    #(WORD Count)
-    BuyNumRecList = list()    #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x13
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.Count):
-            temBuyNumRecList = tagGCLuckyCloudBuyNumRec()
-            _pos = temBuyNumRecList.ReadData(_lpData, _pos)
-            self.BuyNumRecList.append(temBuyNumRecList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x13
-        self.RemainCount = 0
-        self.Count = 0
-        self.BuyNumRecList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2
-        for i in range(self.Count):
-            length += self.BuyNumRecList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.RemainCount)
-        data = CommFunc.WriteWORD(data, self.Count)
-        for i in range(self.Count):
-            data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RemainCount:%d,
-                                Count:%d,
-                                BuyNumRecList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RemainCount,
-                                self.Count,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo
-
-
-#------------------------------------------------------
-# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo
-
-class  tagGCLuckyCloudBuyRoundItem(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(tagGCLuckyCloudBuyRoundItem)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo:
-                                ItemID:%d,
-                                ItemCount:%d,
-                                IsBind:%d
-                                '''\
-                                %(
-                                self.ItemID,
-                                self.ItemCount,
-                                self.IsBind
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyRoundTime(Structure):
-    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
-    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
-    RoundMax = 0    #(BYTE RoundMax)// 本时段最大轮次
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
-        self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.StartTime = ""
-        self.EndtTime = ""
-        self.RoundMax = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 5
-        length += 5
-        length += 1
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, 5, self.StartTime)
-        data = CommFunc.WriteString(data, 5, self.EndtTime)
-        data = CommFunc.WriteBYTE(data, self.RoundMax)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                StartTime:%s,
-                                EndtTime:%s,
-                                RoundMax:%d
-                                '''\
-                                %(
-                                self.StartTime,
-                                self.EndtTime,
-                                self.RoundMax
-                                )
-        return DumpString
-
-
-class  tagGCLuckyCloudBuyRoundInfo(Structure):
-    Head = tagHead()
-    ZoneID = 0    #(BYTE ZoneID)// 所属分区ID
-    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
-    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
-    RoundTimeCount = 0    #(BYTE RoundTimeCount)
-    RoundTimeList = list()    #(vector<tagGCLuckyCloudBuyRoundTime> RoundTimeList)//轮次时间段
-    RoundID = 0    #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存
-    RoundNum = 0    #(BYTE RoundNum)// 当前时段第几轮
-    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
-    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
-    SuperItemMoneyType = 0    #(BYTE SuperItemMoneyType)// 大奖价值货币类型
-    SuperItemMoneyValue = 0    #(DWORD SuperItemMoneyValue)// 大奖价值
-    LVLimit = 0    #(WORD LVLimit)//开启等级
-    BaseItemCount = 0    #(BYTE BaseItemCount)// 每次购买固定奖励物品数
-    BaseItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息
-    RandItemCount = 0    #(BYTE RandItemCount)// 每次购买随机奖励物品数
-    RandItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
-        self.RoundTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RoundTimeCount):
-            temRoundTimeList = tagGCLuckyCloudBuyRoundTime()
-            _pos = temRoundTimeList.ReadData(_lpData, _pos)
-            self.RoundTimeList.append(temRoundTimeList)
-        self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.LVLimit,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.BaseItemCount):
-            temBaseItemList = tagGCLuckyCloudBuyRoundItem()
-            _pos = temBaseItemList.ReadData(_lpData, _pos)
-            self.BaseItemList.append(temBaseItemList)
-        self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RandItemCount):
-            temRandItemList = tagGCLuckyCloudBuyRoundItem()
-            _pos = temRandItemList.ReadData(_lpData, _pos)
-            self.RandItemList.append(temRandItemList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xC0
-        self.Head.SubCmd = 0x12
-        self.ZoneID = 0
-        self.StartDate = ""
-        self.EndtDate = ""
-        self.RoundTimeCount = 0
-        self.RoundTimeList = list()
-        self.RoundID = 0
-        self.RoundNum = 0
-        self.SuperItemID = 0
-        self.SuperItemCount = 0
-        self.SuperItemMoneyType = 0
-        self.SuperItemMoneyValue = 0
-        self.LVLimit = 0
-        self.BaseItemCount = 0
-        self.BaseItemList = list()
-        self.RandItemCount = 0
-        self.RandItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 10
-        length += 10
-        length += 1
-        for i in range(self.RoundTimeCount):
-            length += self.RoundTimeList[i].GetLength()
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += 1
-        length += 4
-        length += 2
-        length += 1
-        for i in range(self.BaseItemCount):
-            length += self.BaseItemList[i].GetLength()
-        length += 1
-        for i in range(self.RandItemCount):
-            length += self.RandItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.ZoneID)
-        data = CommFunc.WriteString(data, 10, self.StartDate)
-        data = CommFunc.WriteString(data, 10, self.EndtDate)
-        data = CommFunc.WriteBYTE(data, self.RoundTimeCount)
-        for i in range(self.RoundTimeCount):
-            data = CommFunc.WriteString(data, self.RoundTimeList[i].GetLength(), self.RoundTimeList[i].GetBuffer())
-        data = CommFunc.WriteDWORD(data, self.RoundID)
-        data = CommFunc.WriteBYTE(data, self.RoundNum)
-        data = CommFunc.WriteDWORD(data, self.SuperItemID)
-        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
-        data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType)
-        data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue)
-        data = CommFunc.WriteWORD(data, self.LVLimit)
-        data = CommFunc.WriteBYTE(data, self.BaseItemCount)
-        for i in range(self.BaseItemCount):
-            data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RandItemCount)
-        for i in range(self.RandItemCount):
-            data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ZoneID:%d,
-                                StartDate:%s,
-                                EndtDate:%s,
-                                RoundTimeCount:%d,
-                                RoundTimeList:%s,
-                                RoundID:%d,
-                                RoundNum:%d,
-                                SuperItemID:%d,
-                                SuperItemCount:%d,
-                                SuperItemMoneyType:%d,
-                                SuperItemMoneyValue:%d,
-                                LVLimit:%d,
-                                BaseItemCount:%d,
-                                BaseItemList:%s,
-                                RandItemCount:%d,
-                                RandItemList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ZoneID,
-                                self.StartDate,
-                                self.EndtDate,
-                                self.RoundTimeCount,
-                                "...",
-                                self.RoundID,
-                                self.RoundNum,
-                                self.SuperItemID,
-                                self.SuperItemCount,
-                                self.SuperItemMoneyType,
-                                self.SuperItemMoneyValue,
-                                self.LVLimit,
-                                self.BaseItemCount,
-                                "...",
-                                self.RandItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo
-
-
-#------------------------------------------------------
 #A1 25 请求切换地图失败#tagMCChangeMapFail
 
 class  tagMCChangeMapFail(Structure):
@@ -32083,6 +12379,2004 @@
 
 
 #------------------------------------------------------
+# A4 0C 多仙盟boss活动信息 #tagGCAllFamilyBossInfo
+
+class  tagGCAllFamilyBossInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsEnd", c_ubyte),    # 是否已结束
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA4
+        self.SubCmd = 0x0C
+        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 = 0xA4
+        self.SubCmd = 0x0C
+        self.IsEnd = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCAllFamilyBossInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A4 0C 多仙盟boss活动信息 //tagGCAllFamilyBossInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsEnd:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsEnd
+                                )
+        return DumpString
+
+
+m_NAtagGCAllFamilyBossInfo=tagGCAllFamilyBossInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossInfo.Cmd,m_NAtagGCAllFamilyBossInfo.SubCmd))] = m_NAtagGCAllFamilyBossInfo
+
+
+#------------------------------------------------------
+# A4 11 传功邀请信息 #tagGCChuangongInviteInfo
+
+class  tagGCChuangongInviteInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 发起邀请的玩家ID
+    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()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.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.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x11
+        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 += self.Head.GetLength()
+        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.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        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 = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo
+
+
+#------------------------------------------------------
+# A4 12 传功开始 #tagGCChuangongStart
+
+class  tagGCChuangongStart(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 一起传功的玩家ID
+    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()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.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.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x12
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.LV = 0
+        self.Job = 0
+        self.RealmLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        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 = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                RealmLV:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV
+                                )
+        return DumpString
+
+
+m_NAtagGCChuangongStart=tagGCChuangongStart()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart
+
+
+#------------------------------------------------------
+# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo
+
+class  tagGCFakeFamilyInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    FakeIDList = list()    #(vector<DWORD> FakeIDList)// 假仙盟名字索引1开始
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.FakeIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0A
+        self.Count = 0
+        self.FakeIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.Count
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteDWORD(data, self.FakeIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                FakeIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFakeFamilyInfo=tagGCFakeFamilyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFakeFamilyInfo.Head.Cmd,m_NAtagGCFakeFamilyInfo.Head.SubCmd))] = m_NAtagGCFakeFamilyInfo
+
+
+#------------------------------------------------------
+# A4 03 家族行为信息 #tagGCFamilyActionInfo
+
+class  tagGCFamilyAction(Structure):
+    Time = 0    #(DWORD Time)//时间
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)
+    Value1 = 0    #(DWORD Value1)//数值1
+    Value2 = 0    #(DWORD Value2)//数值2
+    Value3 = 0    #(DWORD Value3)//数值3
+    Value4 = 0    #(DWORD Value4)//数值4
+    Value5 = 0    #(DWORD Value5)//数值5
+    Value6 = 0    #(DWORD Value6)//数值6
+    UseDataLen = 0    #(WORD UseDataLen)
+    UseData = ""    #(String UseData)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.UseDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UseData,_pos = CommFunc.ReadString(_lpData, _pos,self.UseDataLen)
+        return _pos
+
+    def Clear(self):
+        self.Time = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.Value1 = 0
+        self.Value2 = 0
+        self.Value3 = 0
+        self.Value4 = 0
+        self.Value5 = 0
+        self.Value6 = 0
+        self.UseDataLen = 0
+        self.UseData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.UseData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.Time)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteDWORD(data, self.Value1)
+        data = CommFunc.WriteDWORD(data, self.Value2)
+        data = CommFunc.WriteDWORD(data, self.Value3)
+        data = CommFunc.WriteDWORD(data, self.Value4)
+        data = CommFunc.WriteDWORD(data, self.Value5)
+        data = CommFunc.WriteDWORD(data, self.Value6)
+        data = CommFunc.WriteWORD(data, self.UseDataLen)
+        data = CommFunc.WriteString(data, self.UseDataLen, self.UseData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Time:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                Value1:%d,
+                                Value2:%d,
+                                Value3:%d,
+                                Value4:%d,
+                                Value5:%d,
+                                Value6:%d,
+                                UseDataLen:%d,
+                                UseData:%s
+                                '''\
+                                %(
+                                self.Time,
+                                self.NameLen,
+                                self.Name,
+                                self.Value1,
+                                self.Value2,
+                                self.Value3,
+                                self.Value4,
+                                self.Value5,
+                                self.Value6,
+                                self.UseDataLen,
+                                self.UseData
+                                )
+        return DumpString
+
+
+class  tagGCFamilyActionInfo(Structure):
+    Head = tagHead()
+    FamilyID = 0    #(DWORD FamilyID)//家族ID
+    ActionType = 0    #(BYTE ActionType)//类型
+    Count = 0    #(WORD Count)//数量
+    FamilyActionList = list()    #(vector<tagGCFamilyAction> FamilyActionList)//size = Count	
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ActionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temFamilyActionList = tagGCFamilyAction()
+            _pos = temFamilyActionList.ReadData(_lpData, _pos)
+            self.FamilyActionList.append(temFamilyActionList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x03
+        self.FamilyID = 0
+        self.ActionType = 0
+        self.Count = 0
+        self.FamilyActionList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 2
+        for i in range(self.Count):
+            length += self.FamilyActionList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.ActionType)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.FamilyActionList[i].GetLength(), self.FamilyActionList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FamilyID:%d,
+                                ActionType:%d,
+                                Count:%d,
+                                FamilyActionList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FamilyID,
+                                self.ActionType,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyActionInfo=tagGCFamilyActionInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyActionInfo.Head.Cmd,m_NAtagGCFamilyActionInfo.Head.SubCmd))] = m_NAtagGCFamilyActionInfo
+
+
+#------------------------------------------------------
+# A4 0E 家族boss副本信息 #tagGCFamilyBosFBInfo
+
+class  tagGCFamilyBosFBInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("HurtTotal", c_int),    # 仙盟累计伤血,亿求余部分
+                  ("HurtTotalPoint", c_int),    # 仙盟累计伤血,亿整除部分
+                  ("FightMemCount", c_ubyte),    # 目前正在仙盟boss副本中的成员数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA4
+        self.SubCmd = 0x0E
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA4
+        self.SubCmd = 0x0E
+        self.HurtTotal = 0
+        self.HurtTotalPoint = 0
+        self.FightMemCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyBosFBInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A4 0E 家族boss副本信息 //tagGCFamilyBosFBInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                HurtTotal:%d,
+                                HurtTotalPoint:%d,
+                                FightMemCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.HurtTotal,
+                                self.HurtTotalPoint,
+                                self.FightMemCount
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyBosFBInfo=tagGCFamilyBosFBInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBosFBInfo.Cmd,m_NAtagGCFamilyBosFBInfo.SubCmd))] = m_NAtagGCFamilyBosFBInfo
+
+
+#------------------------------------------------------
+# A4 02 家族boss副本开启及击杀信息 #tagGCFamilyBossFBInfo
+
+class  tagGCFamilyBossFBInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsOpen", c_int),    # 是否已开启
+                  ("OpenCnt", c_ubyte),    # 本周已开启次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA4
+        self.SubCmd = 0x02
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA4
+        self.SubCmd = 0x02
+        self.IsOpen = 0
+        self.OpenCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyBossFBInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A4 02 家族boss副本开启及击杀信息 //tagGCFamilyBossFBInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsOpen:%d,
+                                OpenCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsOpen,
+                                self.OpenCnt
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyBossFBInfo=tagGCFamilyBossFBInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBossFBInfo.Cmd,m_NAtagGCFamilyBossFBInfo.SubCmd))] = m_NAtagGCFamilyBossFBInfo
+
+
+#------------------------------------------------------
+# A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo
+
+class  tagFGrabRedPacketInfo(Structure):
+    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
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        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
+
+    def Clear(self):
+        self.NameLen = 0
+        self.Name = ""
+        self.PlayeJob = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.MoneyNum = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += len(self.Name)
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        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
+
+    def OutputString(self):
+        DumpString = '''
+                                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
+
+
+class  tagGCFamilyRedPacketGrabInfo(Structure):
+    Head = tagHead()
+    RedPacketID = 0    #(DWORD RedPacketID)//红包唯一ID
+    Count = 0    #(BYTE Count)//数量
+    GrabInfo = list()    #(vector<tagFGrabRedPacketInfo> GrabInfo)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temGrabInfo = tagFGrabRedPacketInfo()
+            _pos = temGrabInfo.ReadData(_lpData, _pos)
+            self.GrabInfo.append(temGrabInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x05
+        self.RedPacketID = 0
+        self.Count = 0
+        self.GrabInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.Count):
+            length += self.GrabInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.RedPacketID)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.GrabInfo[i].GetLength(), self.GrabInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RedPacketID:%d,
+                                Count:%d,
+                                GrabInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RedPacketID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyRedPacketGrabInfo=tagGCFamilyRedPacketGrabInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketGrabInfo.Head.Cmd,m_NAtagGCFamilyRedPacketGrabInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketGrabInfo
+
+
+#------------------------------------------------------
+# A4 04 家族红包总信息 #tagGCFamilyRedPacketInfo
+
+class  tagFRedPacketInfo(Structure):
+    RedPacketID = 0    #(DWORD RedPacketID)//红包唯一ID
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    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)//获得途径
+    PacketCnt = 0    #(BYTE PacketCnt)//可抢个数
+    State = 0    #(BYTE State)//0未发,1未领取,2已领取,3全部领完
+    WishLen = 0    #(BYTE WishLen)
+    Wish = ""    #(String Wish)//祝福语
+    IsAnonymous = 0    #(BYTE IsAnonymous)//是否匿名
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.RedPacketID,_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.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)
+        self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen)
+        self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.RedPacketID = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.Time = 0
+        self.PlayeJob = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.MoneyType = 0
+        self.MoneyNum = 0
+        self.GetWay = 0
+        self.PacketCnt = 0
+        self.State = 0
+        self.WishLen = 0
+        self.Wish = ""
+        self.IsAnonymous = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 4
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+        length += len(self.Wish)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.RedPacketID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        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)
+        data = CommFunc.WriteBYTE(data, self.PacketCnt)
+        data = CommFunc.WriteBYTE(data, self.State)
+        data = CommFunc.WriteBYTE(data, self.WishLen)
+        data = CommFunc.WriteString(data, self.WishLen, self.Wish)
+        data = CommFunc.WriteBYTE(data, self.IsAnonymous)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                RedPacketID:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                Time:%d,
+                                PlayeJob:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                MoneyType:%d,
+                                MoneyNum:%d,
+                                GetWay:%d,
+                                PacketCnt:%d,
+                                State:%d,
+                                WishLen:%d,
+                                Wish:%s,
+                                IsAnonymous:%d
+                                '''\
+                                %(
+                                self.RedPacketID,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.Time,
+                                self.PlayeJob,
+                                self.Face,
+                                self.FacePic,
+                                self.MoneyType,
+                                self.MoneyNum,
+                                self.GetWay,
+                                self.PacketCnt,
+                                self.State,
+                                self.WishLen,
+                                self.Wish,
+                                self.IsAnonymous
+                                )
+        return DumpString
+
+
+class  tagGCFamilyRedPacketInfo(Structure):
+    Head = tagHead()
+    IsAll = 0    #(BYTE IsAll)//是否全部红包
+    Count = 0    #(BYTE Count)//红包数量
+    RedPacketInfo = list()    #(vector<tagFRedPacketInfo> RedPacketInfo)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temRedPacketInfo = tagFRedPacketInfo()
+            _pos = temRedPacketInfo.ReadData(_lpData, _pos)
+            self.RedPacketInfo.append(temRedPacketInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x04
+        self.IsAll = 0
+        self.Count = 0
+        self.RedPacketInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.Count):
+            length += self.RedPacketInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsAll)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.RedPacketInfo[i].GetLength(), self.RedPacketInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                IsAll:%d,
+                                Count:%d,
+                                RedPacketInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.IsAll,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyRedPacketInfo=tagGCFamilyRedPacketInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyRedPacketInfo.Head.Cmd,m_NAtagGCFamilyRedPacketInfo.Head.SubCmd))] = m_NAtagGCFamilyRedPacketInfo
+
+
+#------------------------------------------------------
+# A4 06 家族仓库物品信息 #tagGCFamilyStoreItemInfo
+
+class  tagGCFamilyStoreItem(Structure):
+    Index = 0    #(BYTE Index)// 仓库格子索引,从0开始代表第一格
+    ItemID = 0    #(DWORD ItemID)// 物品ID
+    ItemDataLen = 0    #(WORD ItemDataLen)
+    ItemData = ""    #(String ItemData)//size = ItemDataLen
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen)
+        return _pos
+
+    def Clear(self):
+        self.Index = 0
+        self.ItemID = 0
+        self.ItemDataLen = 0
+        self.ItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 2
+        length += len(self.ItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Index)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemDataLen)
+        data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Index:%d,
+                                ItemID:%d,
+                                ItemDataLen:%d,
+                                ItemData:%s
+                                '''\
+                                %(
+                                self.Index,
+                                self.ItemID,
+                                self.ItemDataLen,
+                                self.ItemData
+                                )
+        return DumpString
+
+
+class  tagGCFamilyStoreItemInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)//数量
+    StoreItemList = list()    #(vector<tagGCFamilyStoreItem> StoreItemList)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temStoreItemList = tagGCFamilyStoreItem()
+            _pos = temStoreItemList.ReadData(_lpData, _pos)
+            self.StoreItemList.append(temStoreItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x06
+        self.Count = 0
+        self.StoreItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.StoreItemList[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.StoreItemList[i].GetLength(), self.StoreItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                StoreItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyStoreItemInfo=tagGCFamilyStoreItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemInfo.Head.Cmd,m_NAtagGCFamilyStoreItemInfo.Head.SubCmd))] = m_NAtagGCFamilyStoreItemInfo
+
+
+#------------------------------------------------------
+# A4 07 家族仓库物品清除 #tagGCFamilyStoreItemClear
+
+class  tagGCFamilyStoreItemClear(Structure):
+    Head = tagHead()
+    ClearType = 0    #(BYTE ClearType)//0-指定格子清除; 1-所有物品清除
+    IndexCount = 0    #(BYTE IndexCount)
+    IndexList = list()    #(vector<BYTE> IndexList)//清除的格子索引, 仅指定格子清除时有效,从0开始代表第一格
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ClearType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.IndexCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.IndexList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x07
+        self.ClearType = 0
+        self.IndexCount = 0
+        self.IndexList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 1 * self.IndexCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ClearType)
+        data = CommFunc.WriteBYTE(data, self.IndexCount)
+        for i in range(self.IndexCount):
+            data = CommFunc.WriteBYTE(data, self.IndexList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ClearType:%d,
+                                IndexCount:%d,
+                                IndexList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ClearType,
+                                self.IndexCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyStoreItemClear=tagGCFamilyStoreItemClear()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemClear.Head.Cmd,m_NAtagGCFamilyStoreItemClear.Head.SubCmd))] = m_NAtagGCFamilyStoreItemClear
+
+
+#------------------------------------------------------
+# A4 09 家族守卫人皇信息通知 #tagGCFamilySWRHInfo
+
+class  tagGCFamilySWRHInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("HasJoin", c_ubyte),    # 是否已参与
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA4
+        self.SubCmd = 0x09
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA4
+        self.SubCmd = 0x09
+        self.HasJoin = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilySWRHInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A4 09 家族守卫人皇信息通知 //tagGCFamilySWRHInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                HasJoin:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.HasJoin
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilySWRHInfo=tagGCFamilySWRHInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilySWRHInfo.Cmd,m_NAtagGCFamilySWRHInfo.SubCmd))] = m_NAtagGCFamilySWRHInfo
+
+
+#------------------------------------------------------
+# A4 0B 玩家参与的仙盟联赛仙盟信息 #tagGCPlayerJoinFamilyWarInfo
+
+class  tagGCPlayerJoinFamilyWarInfo(Structure):
+    Head = tagHead()
+    JoinFamilyID = 0    #(DWORD JoinFamilyID)//参与的仙盟ID,默认0本仙盟,仙盟不同时才会收到本包
+    JoinFamilyNameLen = 0    #(BYTE JoinFamilyNameLen)
+    JoinFamilyName = ""    #(String JoinFamilyName)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0B
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.JoinFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.JoinFamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.JoinFamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.JoinFamilyNameLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x0B
+        self.JoinFamilyID = 0
+        self.JoinFamilyNameLen = 0
+        self.JoinFamilyName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.JoinFamilyName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.JoinFamilyID)
+        data = CommFunc.WriteBYTE(data, self.JoinFamilyNameLen)
+        data = CommFunc.WriteString(data, self.JoinFamilyNameLen, self.JoinFamilyName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                JoinFamilyID:%d,
+                                JoinFamilyNameLen:%d,
+                                JoinFamilyName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.JoinFamilyID,
+                                self.JoinFamilyNameLen,
+                                self.JoinFamilyName
+                                )
+        return DumpString
+
+
+m_NAtagGCPlayerJoinFamilyWarInfo=tagGCPlayerJoinFamilyWarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerJoinFamilyWarInfo.Head.Cmd,m_NAtagGCPlayerJoinFamilyWarInfo.Head.SubCmd))] = m_NAtagGCPlayerJoinFamilyWarInfo
+
+
+#------------------------------------------------------
+# A4 08 查看家族 #tagGCPyAllFamilyView
+
+class  tagGCPyFamilyView(Structure):
+    FamilyIndex = 0    #(WORD FamilyIndex)
+    FamilyID = 0    #(DWORD FamilyID)//家族ID
+    FamilyNameLen = 0    #(BYTE FamilyNameLen)
+    FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
+    LeaderID = 0    #(DWORD LeaderID)//族长ID
+    LeaderNameLen = 0    #(BYTE LeaderNameLen)
+    LeaderName = ""    #(String LeaderName)//size = LeaderNameLen
+    LeaderOfficialRank = 0    #(BYTE LeaderOfficialRank)//境界
+    FamilyLV = 0    #(WORD FamilyLV)//家族等级
+    FamilyMemberCount = 0    #(WORD FamilyMemberCount)//家族人数
+    JoinAccept = 0    #(BYTE JoinAccept)//申请状态
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.FamilyIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyNameLen)
+        self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LeaderNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,self.LeaderNameLen)
+        self.LeaderOfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FamilyMemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.JoinAccept,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        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):
+        self.FamilyIndex = 0
+        self.FamilyID = 0
+        self.FamilyNameLen = 0
+        self.FamilyName = ""
+        self.LeaderID = 0
+        self.LeaderNameLen = 0
+        self.LeaderName = ""
+        self.LeaderOfficialRank = 0
+        self.FamilyLV = 0
+        self.FamilyMemberCount = 0
+        self.JoinAccept = 0
+        self.WarRank = 0
+        self.TotalFightPower = 0
+        self.TotalFightPowerEx = 0
+        self.EmblemID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 2
+        length += 4
+        length += 1
+        length += len(self.FamilyName)
+        length += 4
+        length += 1
+        length += len(self.LeaderName)
+        length += 1
+        length += 2
+        length += 2
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteWORD(data, self.FamilyIndex)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.FamilyNameLen)
+        data = CommFunc.WriteString(data, self.FamilyNameLen, self.FamilyName)
+        data = CommFunc.WriteDWORD(data, self.LeaderID)
+        data = CommFunc.WriteBYTE(data, self.LeaderNameLen)
+        data = CommFunc.WriteString(data, self.LeaderNameLen, self.LeaderName)
+        data = CommFunc.WriteBYTE(data, self.LeaderOfficialRank)
+        data = CommFunc.WriteWORD(data, self.FamilyLV)
+        data = CommFunc.WriteWORD(data, self.FamilyMemberCount)
+        data = CommFunc.WriteBYTE(data, self.JoinAccept)
+        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):
+        DumpString = '''
+                                FamilyIndex:%d,
+                                FamilyID:%d,
+                                FamilyNameLen:%d,
+                                FamilyName:%s,
+                                LeaderID:%d,
+                                LeaderNameLen:%d,
+                                LeaderName:%s,
+                                LeaderOfficialRank:%d,
+                                FamilyLV:%d,
+                                FamilyMemberCount:%d,
+                                JoinAccept:%d,
+                                WarRank:%d,
+                                TotalFightPower:%d,
+                                TotalFightPowerEx:%d,
+                                EmblemID:%d
+                                '''\
+                                %(
+                                self.FamilyIndex,
+                                self.FamilyID,
+                                self.FamilyNameLen,
+                                self.FamilyName,
+                                self.LeaderID,
+                                self.LeaderNameLen,
+                                self.LeaderName,
+                                self.LeaderOfficialRank,
+                                self.FamilyLV,
+                                self.FamilyMemberCount,
+                                self.JoinAccept,
+                                self.WarRank,
+                                self.TotalFightPower,
+                                self.TotalFightPowerEx,
+                                self.EmblemID
+                                )
+        return DumpString
+
+
+class  tagGCPyAllFamilyView(Structure):
+    Head = tagHead()
+    TotalCount = 0    #(DWORD TotalCount)//一共有多少页
+    CurPage = 0    #(WORD CurPage)//当前第几页, 每页个数:FAMILY_VIEW_PAGE_COUNT
+    PageCount = 0    #(BYTE PageCount)//这一页有多少数目
+    Family = list()    #(vector<tagGCPyFamilyView> Family)//size = PageCount
+    IsSearching = 0    #(BYTE IsSearching)//是否在模糊搜索状态下
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurPage,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PageCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PageCount):
+            temFamily = tagGCPyFamilyView()
+            _pos = temFamily.ReadData(_lpData, _pos)
+            self.Family.append(temFamily)
+        self.IsSearching,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x08
+        self.TotalCount = 0
+        self.CurPage = 0
+        self.PageCount = 0
+        self.Family = list()
+        self.IsSearching = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 2
+        length += 1
+        for i in range(self.PageCount):
+            length += self.Family[i].GetLength()
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.TotalCount)
+        data = CommFunc.WriteWORD(data, self.CurPage)
+        data = CommFunc.WriteBYTE(data, self.PageCount)
+        for i in range(self.PageCount):
+            data = CommFunc.WriteString(data, self.Family[i].GetLength(), self.Family[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsSearching)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TotalCount:%d,
+                                CurPage:%d,
+                                PageCount:%d,
+                                Family:%s,
+                                IsSearching:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TotalCount,
+                                self.CurPage,
+                                self.PageCount,
+                                "...",
+                                self.IsSearching
+                                )
+        return DumpString
+
+
+m_NAtagGCPyAllFamilyView=tagGCPyAllFamilyView()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPyAllFamilyView.Head.Cmd,m_NAtagGCPyAllFamilyView.Head.SubCmd))] = m_NAtagGCPyAllFamilyView
+
+
+#------------------------------------------------------
+# A4 0D 通知建盟次数 #tagGCServerCreatFamilyTimes
+
+class  tagGCServerCreatFamilyTimes(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Times", c_int),    #建盟次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA4
+        self.SubCmd = 0x0D
+        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 = 0xA4
+        self.SubCmd = 0x0D
+        self.Times = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCServerCreatFamilyTimes)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A4 0D 通知建盟次数 //tagGCServerCreatFamilyTimes:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Times:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Times
+                                )
+        return DumpString
+
+
+m_NAtagGCServerCreatFamilyTimes=tagGCServerCreatFamilyTimes()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCServerCreatFamilyTimes.Cmd,m_NAtagGCServerCreatFamilyTimes.SubCmd))] = m_NAtagGCServerCreatFamilyTimes
+
+
+#------------------------------------------------------
+# A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo
+
+class  tagGCTagFamilyMember(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)//size = NameLen
+    FamilyLV = 0    #(BYTE FamilyLV)//家族成员等级
+    LV = 0    #(WORD LV)
+    Job = 0    #(BYTE Job)//职业
+    Face = 0    #(DWORD Face)//头像
+    FacePic = 0    #(DWORD FacePic)//头像外框
+    OfficialRank = 0    #(BYTE OfficialRank)//境界
+    FightPower = 0    #(DWORD FightPower)//成员战力,求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//成员战力,整除亿部分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.FamilyLV = 0
+        self.LV = 0
+        self.Job = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.OfficialRank = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteBYTE(data, self.FamilyLV)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        data = CommFunc.WriteBYTE(data, self.OfficialRank)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                FamilyLV:%d,
+                                LV:%d,
+                                Job:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                OfficialRank:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.FamilyLV,
+                                self.LV,
+                                self.Job,
+                                self.Face,
+                                self.FacePic,
+                                self.OfficialRank,
+                                self.FightPower,
+                                self.FightPowerEx
+                                )
+        return DumpString
+
+
+class  tagGCTagFamilyInfo(Structure):
+    Head = tagHead()
+    FamilyID = 0    #(DWORD FamilyID)
+    FamilyName = ""    #(char FamilyName[33])//家族名称
+    FamilyLV = 0    #(WORD FamilyLV)//家族等级
+    BroadcastLen = 0    #(WORD BroadcastLen)//公告
+    Broadcast = ""    #(String Broadcast)//size = BroadcastLen
+    MemberCount = 0    #(WORD MemberCount)//人数
+    Member = list()    #(vector<tagGCTagFamilyMember> Member)//size = MemberCount
+    FightPower = 0    #(DWORD FightPower)//仙盟总战力,求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
+    EmblemID = 0    #(DWORD EmblemID)//徽章ID
+    ServerID = 0    #(DWORD ServerID)//仙盟区服ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen)
+        self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.MemberCount):
+            temMember = tagGCTagFamilyMember()
+            _pos = temMember.ReadData(_lpData, _pos)
+            self.Member.append(temMember)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x13
+        self.FamilyID = 0
+        self.FamilyName = ""
+        self.FamilyLV = 0
+        self.BroadcastLen = 0
+        self.Broadcast = ""
+        self.MemberCount = 0
+        self.Member = list()
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.EmblemID = 0
+        self.ServerID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+        length += 2
+        length += 2
+        length += len(self.Broadcast)
+        length += 2
+        for i in range(self.MemberCount):
+            length += self.Member[i].GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteString(data, 33, self.FamilyName)
+        data = CommFunc.WriteWORD(data, self.FamilyLV)
+        data = CommFunc.WriteWORD(data, self.BroadcastLen)
+        data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast)
+        data = CommFunc.WriteWORD(data, self.MemberCount)
+        for i in range(self.MemberCount):
+            data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.EmblemID)
+        data = CommFunc.WriteDWORD(data, self.ServerID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FamilyID:%d,
+                                FamilyName:%s,
+                                FamilyLV:%d,
+                                BroadcastLen:%d,
+                                Broadcast:%s,
+                                MemberCount:%d,
+                                Member:%s,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                EmblemID:%d,
+                                ServerID:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FamilyID,
+                                self.FamilyName,
+                                self.FamilyLV,
+                                self.BroadcastLen,
+                                self.Broadcast,
+                                self.MemberCount,
+                                "...",
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.EmblemID,
+                                self.ServerID
+                                )
+        return DumpString
+
+
+m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo
+
+
+#------------------------------------------------------
+#A4 01  查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo
+
+class  tagtMemberInfo(Structure):
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    NameLen = 0    #(BYTE NameLen)//名字长度
+    Name = ""    #(String Name)//size=NameLen
+    PlayerLV = 0    #(WORD PlayerLV)//玩家等级
+    PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
+    PlayeFightPower = 0    #(DWORD PlayeFightPower)//玩家战斗力,求余亿部分
+    PlayeFightPowerEx = 0    #(DWORD PlayeFightPowerEx)//玩家战斗力,整除亿部分,1代表1亿
+    RequestTime = 0    #(DWORD RequestTime)//申请时间
+    IsOnLine = 0    #(BYTE IsOnLine)//是否在线
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayeFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayeFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.IsOnLine,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.PlayerLV = 0
+        self.PlayeJob = 0
+        self.PlayeFightPower = 0
+        self.PlayeFightPowerEx = 0
+        self.RequestTime = 0
+        self.IsOnLine = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        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.PlayerLV)
+        data = CommFunc.WriteBYTE(data, self.PlayeJob)
+        data = CommFunc.WriteDWORD(data, self.PlayeFightPower)
+        data = CommFunc.WriteDWORD(data, self.PlayeFightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.RequestTime)
+        data = CommFunc.WriteBYTE(data, self.IsOnLine)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                PlayerLV:%d,
+                                PlayeJob:%d,
+                                PlayeFightPower:%d,
+                                PlayeFightPowerEx:%d,
+                                RequestTime:%d,
+                                IsOnLine:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.PlayerLV,
+                                self.PlayeJob,
+                                self.PlayeFightPower,
+                                self.PlayeFightPowerEx,
+                                self.RequestTime,
+                                self.IsOnLine
+                                )
+        return DumpString
+
+
+class  tagGCViewFamilyRequestInfo(Structure):
+    Head = tagHead()
+    RequestMemberCount = 0    #(BYTE RequestMemberCount)//申请成员的数量
+    MemberInfo = list()    #(vector<tagtMemberInfo> MemberInfo)//size = RequestMemberCount
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RequestMemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RequestMemberCount):
+            temMemberInfo = tagtMemberInfo()
+            _pos = temMemberInfo.ReadData(_lpData, _pos)
+            self.MemberInfo.append(temMemberInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA4
+        self.Head.SubCmd = 0x01
+        self.RequestMemberCount = 0
+        self.MemberInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.RequestMemberCount):
+            length += self.MemberInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RequestMemberCount)
+        for i in range(self.RequestMemberCount):
+            data = CommFunc.WriteString(data, self.MemberInfo[i].GetLength(), self.MemberInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RequestMemberCount:%d,
+                                MemberInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RequestMemberCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCViewFamilyRequestInfo=tagGCViewFamilyRequestInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCViewFamilyRequestInfo.Head.Cmd,m_NAtagGCViewFamilyRequestInfo.Head.SubCmd))] = m_NAtagGCViewFamilyRequestInfo
+
+
+#------------------------------------------------------
 # A5 35 王者仙盟每日俸禄奖励状态 #tagMCChampionFamilyDailyReward
 
 class  tagMCChampionFamilyDailyReward(Structure):
@@ -37721,6 +20015,3350 @@
 
 m_NAtagMCVirtualItemDrop=tagMCVirtualItemDrop()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVirtualItemDrop.Head.Cmd,m_NAtagMCVirtualItemDrop.Head.SubCmd))] = m_NAtagMCVirtualItemDrop
+
+
+#------------------------------------------------------
+# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
+
+class  tagGCArenaBattlePlayerInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x26
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.Score = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.Score
+                                )
+        return DumpString
+
+
+m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo
+
+
+#------------------------------------------------------
+# A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
+
+class  tagGCArenaBattleRecord(Structure):
+    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
+    AddScoreLen = 0    #(BYTE AddScoreLen)
+    AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
+    IsWin = 0    #(BYTE IsWin)//是否获胜
+    Time = 0    #(DWORD Time)//时间戳
+    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.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        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):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.Score = 0
+        self.AddScoreLen = 0
+        self.AddScore = ""
+        self.IsWin = 0
+        self.Time = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.AddScore)
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        data = CommFunc.WriteBYTE(data, self.AddScoreLen)
+        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):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d,
+                                AddScoreLen:%d,
+                                AddScore:%s,
+                                IsWin:%d,
+                                Time:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.Score,
+                                self.AddScoreLen,
+                                self.AddScore,
+                                self.IsWin,
+                                self.Time,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCArenaBattleRecordList(Structure):
+    Head = tagHead()
+    RecordCount = 0    #(BYTE RecordCount)
+    BattleRecordList = list()    #(vector<tagGCArenaBattleRecord> BattleRecordList)// 对战列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x23
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temBattleRecordList = tagGCArenaBattleRecord()
+            _pos = temBattleRecordList.ReadData(_lpData, _pos)
+            self.BattleRecordList.append(temBattleRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x23
+        self.RecordCount = 0
+        self.BattleRecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.BattleRecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.BattleRecordList[i].GetLength(), self.BattleRecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCount:%d,
+                                BattleRecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCArenaBattleRecordList=tagGCArenaBattleRecordList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattleRecordList.Head.Cmd,m_NAtagGCArenaBattleRecordList.Head.SubCmd))] = m_NAtagGCArenaBattleRecordList
+
+
+#------------------------------------------------------
+# A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList
+
+class  tagGCArenaMatchInfo(Structure):
+    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
+    Score = 0    #(DWORD Score)//积分
+    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.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.Score = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                Score:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.Score,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCArenaMatchList(Structure):
+    Head = tagHead()
+    MatchCount = 0    #(BYTE MatchCount)
+    MatchList = list()    #(vector<tagGCArenaMatchInfo> MatchList)// 匹配列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x22
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MatchCount):
+            temMatchList = tagGCArenaMatchInfo()
+            _pos = temMatchList.ReadData(_lpData, _pos)
+            self.MatchList.append(temMatchList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x22
+        self.MatchCount = 0
+        self.MatchList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.MatchCount):
+            length += self.MatchList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.MatchCount)
+        for i in range(self.MatchCount):
+            data = CommFunc.WriteString(data, self.MatchList[i].GetLength(), self.MatchList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MatchCount:%d,
+                                MatchList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MatchCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCArenaMatchList=tagGCArenaMatchList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaMatchList.Head.Cmd,m_NAtagGCArenaMatchList.Head.SubCmd))] = m_NAtagGCArenaMatchList
+
+
+#------------------------------------------------------
+# A9 09 通知BOSS关注记录 #tagGCBossAttentionInfo
+
+class  tagGCBossAttention(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("BossID", c_int),    # bossID
+                  ("AddState", 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.BossID = 0
+        self.AddState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCBossAttention)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 09 通知BOSS关注记录 //tagGCBossAttentionInfo:
+                                BossID:%d,
+                                AddState:%d
+                                '''\
+                                %(
+                                self.BossID,
+                                self.AddState
+                                )
+        return DumpString
+
+
+class  tagGCBossAttentionInfo(Structure):
+    Head = tagHead()
+    BossCnt = 0    #(BYTE BossCnt)//boss个数
+    BossList = list()    #(vector<tagGCBossAttention> BossList)//列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BossCnt):
+            temBossList = tagGCBossAttention()
+            _pos = temBossList.ReadData(_lpData, _pos)
+            self.BossList.append(temBossList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x09
+        self.BossCnt = 0
+        self.BossList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.BossCnt):
+            length += self.BossList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.BossCnt)
+        for i in range(self.BossCnt):
+            data = CommFunc.WriteString(data, self.BossList[i].GetLength(), self.BossList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                BossCnt:%d,
+                                BossList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.BossCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCBossAttentionInfo=tagGCBossAttentionInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossAttentionInfo.Head.Cmd,m_NAtagGCBossAttentionInfo.Head.SubCmd))] = m_NAtagGCBossAttentionInfo
+
+
+#------------------------------------------------------
+# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo
+
+class  tagGCBossShuntLineState(Structure):
+    BossID = 0    #(DWORD BossID)// bossID
+    LineCount = 0    #(BYTE LineCount)
+    LineIDList = list()    #(vector<BYTE> LineIDList)// 线路ID列表
+    StateList = list()    #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.LineCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.LineIDList.append(value)
+        for i in range(self.LineCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.StateList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.BossID = 0
+        self.LineCount = 0
+        self.LineIDList = list()
+        self.StateList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1 * self.LineCount
+        length += 1 * self.LineCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.BossID)
+        data = CommFunc.WriteBYTE(data, self.LineCount)
+        for i in range(self.LineCount):
+            data = CommFunc.WriteBYTE(data, self.LineIDList[i])
+        for i in range(self.LineCount):
+            data = CommFunc.WriteBYTE(data, self.StateList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BossID:%d,
+                                LineCount:%d,
+                                LineIDList:%s,
+                                StateList:%s
+                                '''\
+                                %(
+                                self.BossID,
+                                self.LineCount,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCBossShuntLineStateInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    BossLineStateInfo = list()    #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temBossLineStateInfo = tagGCBossShuntLineState()
+            _pos = temBossLineStateInfo.ReadData(_lpData, _pos)
+            self.BossLineStateInfo.append(temBossLineStateInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x01
+        self.Count = 0
+        self.BossLineStateInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.BossLineStateInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                BossLineStateInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo
+
+
+#------------------------------------------------------
+# A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice
+
+class  tagGCBourseItemPrice(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ItemID", c_int),    #物品ID
+                  ("Price", c_int),    #最新成交单价
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA9
+        self.SubCmd = 0xAC
+        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 = 0xA9
+        self.SubCmd = 0xAC
+        self.ItemID = 0
+        self.Price = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCBourseItemPrice)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 AC 交易所物品最新成交价通知 //tagGCBourseItemPrice:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ItemID:%d,
+                                Price:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ItemID,
+                                self.Price
+                                )
+        return DumpString
+
+
+m_NAtagGCBourseItemPrice=tagGCBourseItemPrice()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseItemPrice.Cmd,m_NAtagGCBourseItemPrice.SubCmd))] = m_NAtagGCBourseItemPrice
+
+
+#------------------------------------------------------
+# A9 AB 交易所交易记录通知 #tagGCBourseRecordInfo
+
+class  tagGCBourseRecord(Structure):
+    Type = 0    #(BYTE Type)//类型 0-购买 1-卖出
+    Timestamp = 0    #(DWORD Timestamp)//时间戳
+    TradeTax = 0    #(DWORD TradeTax)//交易税
+    TradeMoney = 0    #(DWORD TradeMoney)//收支
+    ItemDataLen = 0    #(WORD ItemDataLen)
+    ItemData = ""    #(String ItemData)//自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Timestamp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TradeTax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TradeMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen)
+        return _pos
+
+    def Clear(self):
+        self.Type = 0
+        self.Timestamp = 0
+        self.TradeTax = 0
+        self.TradeMoney = 0
+        self.ItemDataLen = 0
+        self.ItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Type)
+        data = CommFunc.WriteDWORD(data, self.Timestamp)
+        data = CommFunc.WriteDWORD(data, self.TradeTax)
+        data = CommFunc.WriteDWORD(data, self.TradeMoney)
+        data = CommFunc.WriteWORD(data, self.ItemDataLen)
+        data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Type:%d,
+                                Timestamp:%d,
+                                TradeTax:%d,
+                                TradeMoney:%d,
+                                ItemDataLen:%d,
+                                ItemData:%s
+                                '''\
+                                %(
+                                self.Type,
+                                self.Timestamp,
+                                self.TradeTax,
+                                self.TradeMoney,
+                                self.ItemDataLen,
+                                self.ItemData
+                                )
+        return DumpString
+
+
+class  tagGCBourseRecordInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)//数量
+    RecordList = list()    #(vector<tagGCBourseRecord> RecordList)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xAB
+        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):
+            temRecordList = tagGCBourseRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xAB
+        self.Count = 0
+        self.RecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.RecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                RecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCBourseRecordInfo=tagGCBourseRecordInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseRecordInfo.Head.Cmd,m_NAtagGCBourseRecordInfo.Head.SubCmd))] = m_NAtagGCBourseRecordInfo
+
+
+#------------------------------------------------------
+#A9 AA 删除邮件通知 #tagGCDelCompensationResult
+
+class  tagGCDelCompensationResult(Structure):
+    Head = tagHead()
+    GUID = ""    #(char GUID[40])
+    Result = 0    #(BYTE Result)// 删除状态 0  不成功  1成功
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xAA
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xAA
+        self.GUID = ""
+        self.Result = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.GUID)
+        data = CommFunc.WriteBYTE(data, self.Result)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                GUID:%s,
+                                Result:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.GUID,
+                                self.Result
+                                )
+        return DumpString
+
+
+m_NAtagGCDelCompensationResult=tagGCDelCompensationResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelCompensationResult.Head.Cmd,m_NAtagGCDelCompensationResult.Head.SubCmd))] = m_NAtagGCDelCompensationResult
+
+
+#------------------------------------------------------
+# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime
+
+class  tagDogzTimeInfoObj(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NPCID", c_int),    # npcid
+                  ("RefreshSecond", c_int),    # 刷新倒计时, 秒
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.NPCID = 0
+        self.RefreshSecond = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagDogzTimeInfoObj)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime:
+                                NPCID:%d,
+                                RefreshSecond:%d
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.RefreshSecond
+                                )
+        return DumpString
+
+
+class  tagGCDogzNPCRefreshTime(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)//信息个数
+    InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temInfoList = tagDogzTimeInfoObj()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x04
+        self.Cnt = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Cnt):
+            length += self.InfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime
+
+
+#------------------------------------------------------
+# A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo
+
+class  tagGCFriendSendEnergyInfo(Structure):
+    Head = tagHead()
+    DataSize = 0    #(DWORD DataSize)
+    SendData = ""    #(String SendData)//赠送记录
+    RecvSize = 0    #(DWORD RecvSize)
+    RecvData = ""    #(String RecvData)//可接收记录
+    HasRecvCnt = 0    #(DWORD HasRecvCnt)//已接收个数
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA9
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SendData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
+        self.RecvSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RecvData,_pos = CommFunc.ReadString(_lpData, _pos,self.RecvSize)
+        self.HasRecvCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA9
+        self.DataSize = 0
+        self.SendData = ""
+        self.RecvSize = 0
+        self.RecvData = ""
+        self.HasRecvCnt = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += len(self.SendData)
+        length += 4
+        length += len(self.RecvData)
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.DataSize)
+        data = CommFunc.WriteString(data, self.DataSize, self.SendData)
+        data = CommFunc.WriteDWORD(data, self.RecvSize)
+        data = CommFunc.WriteString(data, self.RecvSize, self.RecvData)
+        data = CommFunc.WriteDWORD(data, self.HasRecvCnt)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                DataSize:%d,
+                                SendData:%s,
+                                RecvSize:%d,
+                                RecvData:%s,
+                                HasRecvCnt:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.DataSize,
+                                self.SendData,
+                                self.RecvSize,
+                                self.RecvData,
+                                self.HasRecvCnt
+                                )
+        return DumpString
+
+
+m_NAtagGCFriendSendEnergyInfo=tagGCFriendSendEnergyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendSendEnergyInfo.Head.Cmd,m_NAtagGCFriendSendEnergyInfo.Head.SubCmd))] = m_NAtagGCFriendSendEnergyInfo
+
+
+#------------------------------------------------------
+#A9 02 世界boss相关信息 #tagGCGameWorldBossInfo
+
+class  tagBossInfoObj(Structure):
+    BossID = 0    #(DWORD BossID)// bossID
+    IsAlive = 0    #(BYTE IsAlive)// 是否存活
+    RecordLen = 0    #(WORD RecordLen)// 长度
+    KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
+    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒	
+    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒	
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.IsAlive,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen)
+        self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.BossID = 0
+        self.IsAlive = 0
+        self.RecordLen = 0
+        self.KillRecord = ""
+        self.RefreshSecond = 0
+        self.RefreshCD = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 2
+        length += len(self.KillRecord)
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.BossID)
+        data = CommFunc.WriteBYTE(data, self.IsAlive)
+        data = CommFunc.WriteWORD(data, self.RecordLen)
+        data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord)
+        data = CommFunc.WriteDWORD(data, self.RefreshSecond)
+        data = CommFunc.WriteDWORD(data, self.RefreshCD)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BossID:%d,
+                                IsAlive:%d,
+                                RecordLen:%d,
+                                KillRecord:%s,
+                                RefreshSecond:%d,
+                                RefreshCD:%d
+                                '''\
+                                %(
+                                self.BossID,
+                                self.IsAlive,
+                                self.RecordLen,
+                                self.KillRecord,
+                                self.RefreshSecond,
+                                self.RefreshCD
+                                )
+        return DumpString
+
+
+class  tagGCGameWorldBossInfo(Structure):
+    Head = tagHead()
+    BossCnt = 0    #(BYTE BossCnt)//boss信息个数
+    BossInfoList = list()    #(vector<tagBossInfoObj> BossInfoList)//boss信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BossCnt):
+            temBossInfoList = tagBossInfoObj()
+            _pos = temBossInfoList.ReadData(_lpData, _pos)
+            self.BossInfoList.append(temBossInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x02
+        self.BossCnt = 0
+        self.BossInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.BossCnt):
+            length += self.BossInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.BossCnt)
+        for i in range(self.BossCnt):
+            data = CommFunc.WriteString(data, self.BossInfoList[i].GetLength(), self.BossInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                BossCnt:%d,
+                                BossInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.BossCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCGameWorldBossInfo=tagGCGameWorldBossInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGameWorldBossInfo.Head.Cmd,m_NAtagGCGameWorldBossInfo.Head.SubCmd))] = m_NAtagGCGameWorldBossInfo
+
+
+#------------------------------------------------------
+# A9 08 渡劫副本护法通知 #tagGCRealmFBHelpInfo
+
+class  tagGCRealmFBHelpInfo(Structure):
+    Head = tagHead()
+    PlayerName = ""    #(char PlayerName[33])//玩家名字
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    RealmLV = 0    #(BYTE RealmLV)//玩家境界
+    Job = 0    #(BYTE Job)//玩家职业
+    JobRank = 0    #(BYTE JobRank)//玩家职业阶级
+    AtkAdd = 0    #(BYTE AtkAdd)//获得加成
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.JobRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AtkAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x08
+        self.PlayerName = ""
+        self.PlayerID = 0
+        self.RealmLV = 0
+        self.Job = 0
+        self.JobRank = 0
+        self.AtkAdd = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 33
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteBYTE(data, self.JobRank)
+        data = CommFunc.WriteBYTE(data, self.AtkAdd)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerName:%s,
+                                PlayerID:%d,
+                                RealmLV:%d,
+                                Job:%d,
+                                JobRank:%d,
+                                AtkAdd:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerName,
+                                self.PlayerID,
+                                self.RealmLV,
+                                self.Job,
+                                self.JobRank,
+                                self.AtkAdd
+                                )
+        return DumpString
+
+
+m_NAtagGCRealmFBHelpInfo=tagGCRealmFBHelpInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRealmFBHelpInfo.Head.Cmd,m_NAtagGCRealmFBHelpInfo.Head.SubCmd))] = m_NAtagGCRealmFBHelpInfo
+
+
+#------------------------------------------------------
+# A9 A7 通知可抢的红包信息 #tagGCGrabRedPacketInfo
+
+class  tagGCGrabRedPacketInfo(Structure):
+    Head = tagHead()
+    RedPacketCnt = 0    #(DWORD RedPacketCnt)//可抢红包个数
+    StrLen = 0    #(WORD StrLen)//字符串长度
+    OwnerName = ""    #(String OwnerName)//红包主人名字
+    RedPacketID = 0    #(DWORD RedPacketID)//可抢红包ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA7
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RedPacketCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen)
+        self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA7
+        self.RedPacketCnt = 0
+        self.StrLen = 0
+        self.OwnerName = ""
+        self.RedPacketID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 2
+        length += len(self.OwnerName)
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.RedPacketCnt)
+        data = CommFunc.WriteWORD(data, self.StrLen)
+        data = CommFunc.WriteString(data, self.StrLen, self.OwnerName)
+        data = CommFunc.WriteDWORD(data, self.RedPacketID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RedPacketCnt:%d,
+                                StrLen:%d,
+                                OwnerName:%s,
+                                RedPacketID:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RedPacketCnt,
+                                self.StrLen,
+                                self.OwnerName,
+                                self.RedPacketID
+                                )
+        return DumpString
+
+
+m_NAtagGCGrabRedPacketInfo=tagGCGrabRedPacketInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketInfo.Head.Cmd,m_NAtagGCGrabRedPacketInfo.Head.SubCmd))] = m_NAtagGCGrabRedPacketInfo
+
+
+#------------------------------------------------------
+# A9 A6 通知抢红包结果 #tagGCGrabRedPacketResult
+
+class  tagGCGrabRedPacketResult(Structure):
+    Head = tagHead()
+    StrLen = 0    #(WORD StrLen)//字符串长度
+    OwnerName = ""    #(String OwnerName)//红包主人名字
+    TotalMoney = 0    #(DWORD TotalMoney)//红包总额
+    DataSize = 0    #(DWORD DataSize)
+    GrabInfo = ""    #(String GrabInfo)//抢红包具体结果
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA6
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StrLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.StrLen)
+        self.TotalMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GrabInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA6
+        self.StrLen = 0
+        self.OwnerName = ""
+        self.TotalMoney = 0
+        self.DataSize = 0
+        self.GrabInfo = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += len(self.OwnerName)
+        length += 4
+        length += 4
+        length += len(self.GrabInfo)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.StrLen)
+        data = CommFunc.WriteString(data, self.StrLen, self.OwnerName)
+        data = CommFunc.WriteDWORD(data, self.TotalMoney)
+        data = CommFunc.WriteDWORD(data, self.DataSize)
+        data = CommFunc.WriteString(data, self.DataSize, self.GrabInfo)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StrLen:%d,
+                                OwnerName:%s,
+                                TotalMoney:%d,
+                                DataSize:%d,
+                                GrabInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StrLen,
+                                self.OwnerName,
+                                self.TotalMoney,
+                                self.DataSize,
+                                self.GrabInfo
+                                )
+        return DumpString
+
+
+m_NAtagGCGrabRedPacketResult=tagGCGrabRedPacketResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGrabRedPacketResult.Head.Cmd,m_NAtagGCGrabRedPacketResult.Head.SubCmd))] = m_NAtagGCGrabRedPacketResult
+
+
+#------------------------------------------------------
+# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo
+
+class  tagGCNotifyEquipClassEquip(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("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.ItemID = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCNotifyEquipClassEquip)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo:
+                                ItemID:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagGCNotifyEquipDetailInfo(Structure):
+    Head = tagHead()
+    ItemGUID = ""    #(char ItemGUID[40])
+    ItemID = 0    #(DWORD ItemID)
+    Star = 0    #(BYTE Star)//星级
+    PlusLV = 0    #(WORD PlusLV)//强化等级
+    EvolveLV = 0    #(BYTE EvolveLV)//进化等级
+    WashLV = 0    #(BYTE WashLV)//洗练等级
+    WashValueCount = 0    #(BYTE WashValueCount)
+    WashValueList = list()    #(vector<DWORD> WashValueList)//洗练值
+    StoneIDCount = 0    #(BYTE StoneIDCount)
+    StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
+    ClassEquipCount = 0    #(BYTE ClassEquipCount)
+    ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.WashValueCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.WashValueList.append(value)
+        self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.StoneIDCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.StoneIDList.append(value)
+        self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ClassEquipCount):
+            temClassEquipList = tagGCNotifyEquipClassEquip()
+            _pos = temClassEquipList.ReadData(_lpData, _pos)
+            self.ClassEquipList.append(temClassEquipList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x05
+        self.ItemGUID = ""
+        self.ItemID = 0
+        self.Star = 0
+        self.PlusLV = 0
+        self.EvolveLV = 0
+        self.WashLV = 0
+        self.WashValueCount = 0
+        self.WashValueList = list()
+        self.StoneIDCount = 0
+        self.StoneIDList = list()
+        self.ClassEquipCount = 0
+        self.ClassEquipList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+        length += 4
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        length += 1
+        length += 4 * self.WashValueCount
+        length += 1
+        length += 4 * self.StoneIDCount
+        length += 1
+        for i in range(self.ClassEquipCount):
+            length += self.ClassEquipList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteBYTE(data, self.Star)
+        data = CommFunc.WriteWORD(data, self.PlusLV)
+        data = CommFunc.WriteBYTE(data, self.EvolveLV)
+        data = CommFunc.WriteBYTE(data, self.WashLV)
+        data = CommFunc.WriteBYTE(data, self.WashValueCount)
+        for i in range(self.WashValueCount):
+            data = CommFunc.WriteDWORD(data, self.WashValueList[i])
+        data = CommFunc.WriteBYTE(data, self.StoneIDCount)
+        for i in range(self.StoneIDCount):
+            data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
+        data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
+        for i in range(self.ClassEquipCount):
+            data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemGUID:%s,
+                                ItemID:%d,
+                                Star:%d,
+                                PlusLV:%d,
+                                EvolveLV:%d,
+                                WashLV:%d,
+                                WashValueCount:%d,
+                                WashValueList:%s,
+                                StoneIDCount:%d,
+                                StoneIDList:%s,
+                                ClassEquipCount:%d,
+                                ClassEquipList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemGUID,
+                                self.ItemID,
+                                self.Star,
+                                self.PlusLV,
+                                self.EvolveLV,
+                                self.WashLV,
+                                self.WashValueCount,
+                                "...",
+                                self.StoneIDCount,
+                                "...",
+                                self.ClassEquipCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
+
+
+#------------------------------------------------------
+#A9 03 开服活动奖励数量刷新#tagGCOpenServerCampaignAwardCount
+
+class  tagGCOpenServerCampaignAwardCount(Structure):
+    Head = tagHead()
+    CampaignType = 0    #(BYTE CampaignType)//奖励类型
+    AwardTypeCount = 0    #(BYTE AwardTypeCount)//奖品种类数量
+    GotCountList = list()    #(vector<DWORD> GotCountList)//奖品已领取数量列表,根据种类索引依次
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CampaignType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardTypeCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.GotCountList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x03
+        self.CampaignType = 0
+        self.AwardTypeCount = 0
+        self.GotCountList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4 * self.AwardTypeCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.CampaignType)
+        data = CommFunc.WriteBYTE(data, self.AwardTypeCount)
+        for i in range(self.AwardTypeCount):
+            data = CommFunc.WriteDWORD(data, self.GotCountList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CampaignType:%d,
+                                AwardTypeCount:%d,
+                                GotCountList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CampaignType,
+                                self.AwardTypeCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCOpenServerCampaignAwardCount=tagGCOpenServerCampaignAwardCount()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCOpenServerCampaignAwardCount.Head.Cmd,m_NAtagGCOpenServerCampaignAwardCount.Head.SubCmd))] = m_NAtagGCOpenServerCampaignAwardCount
+
+
+#------------------------------------------------------
+# A9 A2 排行榜信息#tagPYBillboardData
+
+class  tagPYBillboardInfo(Structure):
+    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
+    ID = 0    #(DWORD ID)
+    ID2 = 0    #(DWORD ID2)
+    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
+    Name2 = ""    #(char Name2[65])//名字2
+    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
+    Value1 = 0    #(DWORD Value1)//排序依赖的值,比如,等级
+    Value2 = 0    #(DWORD Value2)//排序依赖的值,比如,战斗力
+    Value3 = 0    #(DWORD Value3)//附加值
+    Value4 = 0    #(DWORD Value4)//附加值
+    Value5 = 0    #(DWORD Value5)//附加值
+    Value6 = 0    #(DWORD Value6)//附加值
+    Value7 = 0    #(DWORD Value7)//附加值
+    Value8 = 0    #(DWORD Value8)//附加值
+    CmpValue = 0    #(DWORD CmpValue)// 比较权值
+    CmpValue2 = 0    #(DWORD CmpValue2)// 比较权值
+    CmpValue3 = 0    #(DWORD CmpValue3)// 比较权值
+    DataLen = 0    #(WORD DataLen)
+    UserData = ""    #(String UserData)//附加
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        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,65)
+        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
+        return _pos
+
+    def Clear(self):
+        self.OrderIndex = 0
+        self.ID = 0
+        self.ID2 = 0
+        self.Name1 = ""
+        self.Name2 = ""
+        self.Type2 = 0
+        self.Value1 = 0
+        self.Value2 = 0
+        self.Value3 = 0
+        self.Value4 = 0
+        self.Value5 = 0
+        self.Value6 = 0
+        self.Value7 = 0
+        self.Value8 = 0
+        self.CmpValue = 0
+        self.CmpValue2 = 0
+        self.CmpValue3 = 0
+        self.DataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 33
+        length += 65
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.OrderIndex)
+        data = CommFunc.WriteDWORD(data, self.ID)
+        data = CommFunc.WriteDWORD(data, self.ID2)
+        data = CommFunc.WriteString(data, 33, self.Name1)
+        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)
+        data = CommFunc.WriteDWORD(data, self.Value3)
+        data = CommFunc.WriteDWORD(data, self.Value4)
+        data = CommFunc.WriteDWORD(data, self.Value5)
+        data = CommFunc.WriteDWORD(data, self.Value6)
+        data = CommFunc.WriteDWORD(data, self.Value7)
+        data = CommFunc.WriteDWORD(data, self.Value8)
+        data = CommFunc.WriteDWORD(data, self.CmpValue)
+        data = CommFunc.WriteDWORD(data, self.CmpValue2)
+        data = CommFunc.WriteDWORD(data, self.CmpValue3)
+        data = CommFunc.WriteWORD(data, self.DataLen)
+        data = CommFunc.WriteString(data, self.DataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                OrderIndex:%d,
+                                ID:%d,
+                                ID2:%d,
+                                Name1:%s,
+                                Name2:%s,
+                                Type2:%d,
+                                Value1:%d,
+                                Value2:%d,
+                                Value3:%d,
+                                Value4:%d,
+                                Value5:%d,
+                                Value6:%d,
+                                Value7:%d,
+                                Value8:%d,
+                                CmpValue:%d,
+                                CmpValue2:%d,
+                                CmpValue3:%d,
+                                DataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.OrderIndex,
+                                self.ID,
+                                self.ID2,
+                                self.Name1,
+                                self.Name2,
+                                self.Type2,
+                                self.Value1,
+                                self.Value2,
+                                self.Value3,
+                                self.Value4,
+                                self.Value5,
+                                self.Value6,
+                                self.Value7,
+                                self.Value8,
+                                self.CmpValue,
+                                self.CmpValue2,
+                                self.CmpValue3,
+                                self.DataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagPYBillboardData(Structure):
+    Head = tagHead()
+    WatchID = 0    #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
+    BillboardCount = 0    #(BYTE BillboardCount)
+    Type = 0    #(BYTE Type)//排行榜类型
+    Billboard = list()    #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA2
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BillboardCount):
+            temBillboard = tagPYBillboardInfo()
+            _pos = temBillboard.ReadData(_lpData, _pos)
+            self.Billboard.append(temBillboard)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA2
+        self.WatchID = 0
+        self.BillboardCount = 0
+        self.Type = 0
+        self.Billboard = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 1
+        for i in range(self.BillboardCount):
+            length += self.Billboard[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.WatchID)
+        data = CommFunc.WriteBYTE(data, self.BillboardCount)
+        data = CommFunc.WriteBYTE(data, self.Type)
+        for i in range(self.BillboardCount):
+            data = CommFunc.WriteString(data, self.Billboard[i].GetLength(), self.Billboard[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                WatchID:%d,
+                                BillboardCount:%d,
+                                Type:%d,
+                                Billboard:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.WatchID,
+                                self.BillboardCount,
+                                self.Type,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagPYBillboardData=tagPYBillboardData()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPYBillboardData.Head.Cmd,m_NAtagPYBillboardData.Head.SubCmd))] = m_NAtagPYBillboardData
+
+
+#------------------------------------------------------
+# A9 A3 喇叭聊天内容 #tagGCPYSpeakerContent
+
+class  tagGCPYSpeakerContent(Structure):
+    Head = tagHead()
+    AccIDLen = 0    #(BYTE AccIDLen)
+    AccID = ""    #(String AccID)//size = AccIDLen
+    PlayerID = 0    #(DWORD PlayerID)// 子服的玩家ID,该ID有值时为本服玩家
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)//size = NameLen
+    SpeakerType = 0    #(BYTE SpeakerType)
+    TextLen = 0    #(WORD TextLen)
+    Text = ""    #(String Text)//size = TextLen
+    ExtraValue = 0    #(DWORD ExtraValue)//附加值
+    Extras = ""    #(char Extras[256])//附加值列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA3
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
+        self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA3
+        self.AccIDLen = 0
+        self.AccID = ""
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.SpeakerType = 0
+        self.TextLen = 0
+        self.Text = ""
+        self.ExtraValue = 0
+        self.Extras = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.AccID)
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 1
+        length += 2
+        length += len(self.Text)
+        length += 4
+        length += 256
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AccIDLen)
+        data = CommFunc.WriteString(data, self.AccIDLen, self.AccID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteBYTE(data, self.SpeakerType)
+        data = CommFunc.WriteWORD(data, self.TextLen)
+        data = CommFunc.WriteString(data, self.TextLen, self.Text)
+        data = CommFunc.WriteDWORD(data, self.ExtraValue)
+        data = CommFunc.WriteString(data, 256, self.Extras)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AccIDLen:%d,
+                                AccID:%s,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                SpeakerType:%d,
+                                TextLen:%d,
+                                Text:%s,
+                                ExtraValue:%d,
+                                Extras:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AccIDLen,
+                                self.AccID,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.SpeakerType,
+                                self.TextLen,
+                                self.Text,
+                                self.ExtraValue,
+                                self.Extras
+                                )
+        return DumpString
+
+
+m_NAtagGCPYSpeakerContent=tagGCPYSpeakerContent()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPYSpeakerContent.Head.Cmd,m_NAtagGCPYSpeakerContent.Head.SubCmd))] = m_NAtagGCPYSpeakerContent
+
+
+#------------------------------------------------------
+#A9 A1 查询玩家补偿结果封包#tagGCQueryCompensationResult
+
+class  tagGCCompensationItem(Structure):
+    ItemID = 0    #(DWORD ItemID)//物品ID
+    Count = 0    #(DWORD Count)//数量
+    IsBind = 0    #(BYTE IsBind)//是否绑定
+    UserDataLen = 0    #(DWORD UserDataLen)
+    UserData = ""    #(String UserData)//自定义数据	
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
+        return _pos
+
+    def Clear(self):
+        self.ItemID = 0
+        self.Count = 0
+        self.IsBind = 0
+        self.UserDataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        length += 4
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteDWORD(data, self.Count)
+        data = CommFunc.WriteBYTE(data, self.IsBind)
+        data = CommFunc.WriteDWORD(data, self.UserDataLen)
+        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemID:%d,
+                                Count:%d,
+                                IsBind:%d,
+                                UserDataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.Count,
+                                self.IsBind,
+                                self.UserDataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagGCCompensationPack(Structure):
+    GUID = ""    #(char GUID[40])//补偿标识
+    CreateTime = ""    #(char CreateTime[30])//邮件接收时间
+    TextLen = 0    #(DWORD TextLen)//文字内容长度
+    Text = ""    #(String Text)//文字内容
+    Count = 0    #(BYTE Count)//当前补偿物品数
+    IsRead = 0    #(BYTE IsRead)//已读状态 0 未读取 1已读取
+    Gold = 0    #(DWORD Gold)//仙玉
+    GoldPaper = 0    #(DWORD GoldPaper)//绑定仙玉
+    Silver = 0    #(DWORD Silver)//铜钱
+    Items = list()    #(vector<tagGCCompensationItem> Items)//补偿物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
+        self.TextLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsRead,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temItems = tagGCCompensationItem()
+            _pos = temItems.ReadData(_lpData, _pos)
+            self.Items.append(temItems)
+        return _pos
+
+    def Clear(self):
+        self.GUID = ""
+        self.CreateTime = ""
+        self.TextLen = 0
+        self.Text = ""
+        self.Count = 0
+        self.IsRead = 0
+        self.Gold = 0
+        self.GoldPaper = 0
+        self.Silver = 0
+        self.Items = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 30
+        length += 4
+        length += len(self.Text)
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        for i in range(self.Count):
+            length += self.Items[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.GUID)
+        data = CommFunc.WriteString(data, 30, self.CreateTime)
+        data = CommFunc.WriteDWORD(data, self.TextLen)
+        data = CommFunc.WriteString(data, self.TextLen, self.Text)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        data = CommFunc.WriteBYTE(data, self.IsRead)
+        data = CommFunc.WriteDWORD(data, self.Gold)
+        data = CommFunc.WriteDWORD(data, self.GoldPaper)
+        data = CommFunc.WriteDWORD(data, self.Silver)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GUID:%s,
+                                CreateTime:%s,
+                                TextLen:%d,
+                                Text:%s,
+                                Count:%d,
+                                IsRead:%d,
+                                Gold:%d,
+                                GoldPaper:%d,
+                                Silver:%d,
+                                Items:%s
+                                '''\
+                                %(
+                                self.GUID,
+                                self.CreateTime,
+                                self.TextLen,
+                                self.Text,
+                                self.Count,
+                                self.IsRead,
+                                self.Gold,
+                                self.GoldPaper,
+                                self.Silver,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCQueryCompensationResult(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)//可领取补偿数
+    PackList = list()    #(vector<tagGCCompensationPack> PackList)//补偿物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA1
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temPackList = tagGCCompensationPack()
+            _pos = temPackList.ReadData(_lpData, _pos)
+            self.PackList.append(temPackList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA1
+        self.Count = 0
+        self.PackList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.PackList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.PackList[i].GetLength(), self.PackList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                PackList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCQueryCompensationResult=tagGCQueryCompensationResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryCompensationResult.Head.Cmd,m_NAtagGCQueryCompensationResult.Head.SubCmd))] = m_NAtagGCQueryCompensationResult
+
+
+#------------------------------------------------------
+# A9 A8 通知可添加的好友信息 #tagGCRecommendFriendsInfo
+
+class  tagRecommendFriendsData(Structure):
+    ID = 0    #(DWORD ID)
+    Name = ""    #(char Name[33])
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        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):
+        self.ID = 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 += 33
+        length += 4
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.ID)
+        data = CommFunc.WriteString(data, 33, self.Name)
+        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):
+        DumpString = '''
+                                ID:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.ID,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCRecommendFriendsInfo(Structure):
+    Head = tagHead()
+    Cnt = 0    #(BYTE Cnt)//信息数
+    FriendsList = list()    #(vector<tagRecommendFriendsData> FriendsList)//成员信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA8
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Cnt):
+            temFriendsList = tagRecommendFriendsData()
+            _pos = temFriendsList.ReadData(_lpData, _pos)
+            self.FriendsList.append(temFriendsList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xA8
+        self.Cnt = 0
+        self.FriendsList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Cnt):
+            length += self.FriendsList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteString(data, self.FriendsList[i].GetLength(), self.FriendsList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                FriendsList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCRecommendFriendsInfo=tagGCRecommendFriendsInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendFriendsInfo.Head.Cmd,m_NAtagGCRecommendFriendsInfo.Head.SubCmd))] = m_NAtagGCRecommendFriendsInfo
+
+
+#------------------------------------------------------
+# A9 AD 通知天星塔全服奖励通关玩家信息 #tagGCSkyTowerPassPlayerInfo
+
+class  tagGCSkyTowerPassPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        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.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):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCSkyTowerPassFloor(Structure):
+    FloorID = 0    #(DWORD FloorID)// 层ID
+    PassPlayerCount = 0    #(BYTE PassPlayerCount)// 通关记录玩家数
+    PassPlayerIDList = list()    #(vector<DWORD> PassPlayerIDList)// 通关记录玩家ID列表 [第1个通过玩家ID, 第2个, ...]
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.FloorID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PassPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PassPlayerCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.PassPlayerIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.FloorID = 0
+        self.PassPlayerCount = 0
+        self.PassPlayerIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 4 * self.PassPlayerCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.FloorID)
+        data = CommFunc.WriteBYTE(data, self.PassPlayerCount)
+        for i in range(self.PassPlayerCount):
+            data = CommFunc.WriteDWORD(data, self.PassPlayerIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                FloorID:%d,
+                                PassPlayerCount:%d,
+                                PassPlayerIDList:%s
+                                '''\
+                                %(
+                                self.FloorID,
+                                self.PassPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCSkyTowerPassPlayerInfo(Structure):
+    Head = tagHead()
+    FloorCount = 0    #(WORD FloorCount)
+    PassFloorList = list()    #(vector<tagGCSkyTowerPassFloor> PassFloorList)// 通关塔层信息列表
+    PlayerCount = 0    #(WORD PlayerCount)
+    PassPlayerList = list()    #(vector<tagGCSkyTowerPassPlayer> PassPlayerList)// 通关玩家信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xAD
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FloorCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.FloorCount):
+            temPassFloorList = tagGCSkyTowerPassFloor()
+            _pos = temPassFloorList.ReadData(_lpData, _pos)
+            self.PassFloorList.append(temPassFloorList)
+        self.PlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temPassPlayerList = tagGCSkyTowerPassPlayer()
+            _pos = temPassPlayerList.ReadData(_lpData, _pos)
+            self.PassPlayerList.append(temPassPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0xAD
+        self.FloorCount = 0
+        self.PassFloorList = list()
+        self.PlayerCount = 0
+        self.PassPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.FloorCount):
+            length += self.PassFloorList[i].GetLength()
+        length += 2
+        for i in range(self.PlayerCount):
+            length += self.PassPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.FloorCount)
+        for i in range(self.FloorCount):
+            data = CommFunc.WriteString(data, self.PassFloorList[i].GetLength(), self.PassFloorList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.PassPlayerList[i].GetLength(), self.PassPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FloorCount:%d,
+                                PassFloorList:%s,
+                                PlayerCount:%d,
+                                PassPlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FloorCount,
+                                "...",
+                                self.PlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCSkyTowerPassPlayerInfo=tagGCSkyTowerPassPlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSkyTowerPassPlayerInfo.Head.Cmd,m_NAtagGCSkyTowerPassPlayerInfo.Head.SubCmd))] = m_NAtagGCSkyTowerPassPlayerInfo
+
+
+#------------------------------------------------------
+# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo
+
+class  tagGCStoreServerBuyCnt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("GoodsID", c_int),    #商品标识
+                  ("BuyCnt", c_int),    #购买次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.GoodsID = 0
+        self.BuyCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCStoreServerBuyCnt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo:
+                                GoodsID:%d,
+                                BuyCnt:%d
+                                '''\
+                                %(
+                                self.GoodsID,
+                                self.BuyCnt
+                                )
+        return DumpString
+
+
+class  tagGCStoreServerBuyCntInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)//数量
+    InfoList = list()    #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temInfoList = tagGCStoreServerBuyCnt()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA9
+        self.Head.SubCmd = 0x06
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.InfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
+
+
+#------------------------------------------------------
+#A9 21 角色改名结果 #tagUpdatePlayerNameResult
+
+class  tagUpdatePlayerNameResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Result", c_ubyte),    #角色改名结果
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA9
+        self.SubCmd = 0x21
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA9
+        self.SubCmd = 0x21
+        self.Result = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagUpdatePlayerNameResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//A9 21 角色改名结果 //tagUpdatePlayerNameResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Result:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Result
+                                )
+        return DumpString
+
+
+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
 
 
 #------------------------------------------------------
@@ -54056,6 +39694,1490 @@
 
 
 #------------------------------------------------------
+# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList
+
+class  tagGCFamilyBossHurtInfo(Structure):
+    NPCID = 0    #(DWORD NPCID)
+    CurHP = 0    #(DWORD CurHP)
+    CurHPEx = 0    #(DWORD CurHPEx)
+    MaxHP = 0    #(DWORD MaxHP)
+    MaxHPEx = 0    #(DWORD MaxHPEx)
+    FamilyID = 0    #(DWORD FamilyID)// 最大实时伤血仙盟
+    NameLen = 0    #(BYTE NameLen)
+    FamilyName = ""    #(String FamilyName)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        return _pos
+
+    def Clear(self):
+        self.NPCID = 0
+        self.CurHP = 0
+        self.CurHPEx = 0
+        self.MaxHP = 0
+        self.MaxHPEx = 0
+        self.FamilyID = 0
+        self.NameLen = 0
+        self.FamilyName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.FamilyName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteDWORD(data, self.CurHP)
+        data = CommFunc.WriteDWORD(data, self.CurHPEx)
+        data = CommFunc.WriteDWORD(data, self.MaxHP)
+        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.FamilyName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NPCID:%d,
+                                CurHP:%d,
+                                CurHPEx:%d,
+                                MaxHP:%d,
+                                MaxHPEx:%d,
+                                FamilyID:%d,
+                                NameLen:%d,
+                                FamilyName:%s
+                                '''\
+                                %(
+                                self.NPCID,
+                                self.CurHP,
+                                self.CurHPEx,
+                                self.MaxHP,
+                                self.MaxHPEx,
+                                self.FamilyID,
+                                self.NameLen,
+                                self.FamilyName
+                                )
+        return DumpString
+
+
+class  tagGCAllFamilyBossHurtInfoList(Structure):
+    Head = tagHead()
+    NPCCount = 0    #(BYTE NPCCount)// 个数
+    NPCHurtInfo = list()    #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x10
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.NPCCount):
+            temNPCHurtInfo = tagGCFamilyBossHurtInfo()
+            _pos = temNPCHurtInfo.ReadData(_lpData, _pos)
+            self.NPCHurtInfo.append(temNPCHurtInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x10
+        self.NPCCount = 0
+        self.NPCHurtInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.NPCCount):
+            length += self.NPCHurtInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.NPCCount)
+        for i in range(self.NPCCount):
+            data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                NPCCount:%d,
+                                NPCHurtInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.NPCCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList
+
+
+#------------------------------------------------------
+# AC 08 boss复活点数通知 #tagGCBossRebornPoint
+
+class  tagGCBossRebornPoint(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Point", c_int),    # 复活点数
+                  ("TotalPoint", c_int),    # 复活总点数
+                  ("RebornCnt", c_ushort),    # 今日已复活次数
+                  ("TotalRebornCnt", c_ushort),    # 每日可复活总次数,0为不限制
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x08
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAC
+        self.SubCmd = 0x08
+        self.Point = 0
+        self.TotalPoint = 0
+        self.RebornCnt = 0
+        self.TotalRebornCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCBossRebornPoint)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Point:%d,
+                                TotalPoint:%d,
+                                RebornCnt:%d,
+                                TotalRebornCnt:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Point,
+                                self.TotalPoint,
+                                self.RebornCnt,
+                                self.TotalRebornCnt
+                                )
+        return DumpString
+
+
+m_NAtagGCBossRebornPoint=tagGCBossRebornPoint()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint
+
+
+#------------------------------------------------------
+# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
+
+class  tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedRMB = 0    #(DWORD NeedRMB)// 所需全民充值RMB
+    NeedPlayerCount = 0    #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
+    NowPlayerCount = 0    #(WORD NowPlayerCount)// 当前充值达到该档玩家数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItemList = list()    #(vector<tagGCCrossActAllRechargeItem> 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.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagGCCrossActAllRechargeItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedRMB = 0
+        self.NeedPlayerCount = 0
+        self.NowPlayerCount = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedRMB)
+        data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
+        data = CommFunc.WriteWORD(data, self.NowPlayerCount)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedRMB:%d,
+                                NeedPlayerCount:%d,
+                                NowPlayerCount:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedRMB,
+                                self.NeedPlayerCount,
+                                self.NowPlayerCount,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeInfo(Structure):
+    Head = tagHead()
+    ServerInfoLen = 0    #(BYTE ServerInfoLen)
+    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardList = list()    #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardList = tagGCCrossActAllRechargeAward()
+            _pos = temAwardList.ReadData(_lpData, _pos)
+            self.AwardList.append(temAwardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        self.ServerInfoLen = 0
+        self.ServerIDRangeInfo = ""
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AwardCount = 0
+        self.AwardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ServerIDRangeInfo)
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardList[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.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ServerInfoLen:%d,
+                                ServerIDRangeInfo:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AwardCount:%d,
+                                AwardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ServerInfoLen,
+                                self.ServerIDRangeInfo,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
+
+
+#------------------------------------------------------
+# AC 12 跨服运营活动结束 # tagGCCrossActEnd
+
+class  tagGCCrossActEnd(Structure):
+    Head = tagHead()
+    ActNameLen = 0    #(BYTE ActNameLen)
+    ActName = ""    #(String ActName)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ActName,_pos = CommFunc.ReadString(_lpData, _pos,self.ActNameLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x12
+        self.ActNameLen = 0
+        self.ActName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ActName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ActNameLen)
+        data = CommFunc.WriteString(data, self.ActNameLen, self.ActName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActNameLen:%d,
+                                ActName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActNameLen,
+                                self.ActName
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossActEnd=tagGCCrossActEnd()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActEnd.Head.Cmd,m_NAtagGCCrossActEnd.Head.SubCmd))] = m_NAtagGCCrossActEnd
+
+
+#------------------------------------------------------
+# AC 09 仙界盛典活动信息 #tagGCFairyCeremonyInfo
+
+class  tagGCFairyCeremonyInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    WorldLV = 0    #(WORD WorldLV)// 世界等级
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x09
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.WorldLV = 0
+        self.LimitLV = 0
+        self.ResetType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 2
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.WorldLV)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                WorldLV:%d,
+                                LimitLV:%d,
+                                ResetType:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.WorldLV,
+                                self.LimitLV,
+                                self.ResetType
+                                )
+        return DumpString
+
+
+m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo
+
+
+#------------------------------------------------------
+# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo
+
+class  tagGCFamilyWarInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("WorldLV", c_ushort),    # 当前进行中的联赛世界等级
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x01
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAC
+        self.SubCmd = 0x01
+        self.WorldLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyWarInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                WorldLV:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.WorldLV
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo
+
+
+#------------------------------------------------------
+# AC 11 节日红包活动信息 #tagGCFeastRedPacketInfo
+
+class  tagGCFeastRedPacketDay(Structure):
+    RedPacketCount = 0    #(BYTE RedPacketCount)
+    RedPacketIDList = list()    #(vector<WORD> RedPacketIDList)// 当日定时发放的系统红包表ID列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.RedPacketCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RedPacketCount):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.RedPacketIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.RedPacketCount = 0
+        self.RedPacketIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 2 * self.RedPacketCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.RedPacketCount)
+        for i in range(self.RedPacketCount):
+            data = CommFunc.WriteWORD(data, self.RedPacketIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                RedPacketCount:%d,
+                                RedPacketIDList:%s
+                                '''\
+                                %(
+                                self.RedPacketCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCFeastRedPacketInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
+    RedPacketDays = 0    #(BYTE RedPacketDays)
+    RedPacketDayList = list()    #(vector<tagGCFeastRedPacketDay> RedPacketDayList)// 每日系统红包信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RedPacketDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RedPacketDays):
+            temRedPacketDayList = tagGCFeastRedPacketDay()
+            _pos = temRedPacketDayList.ReadData(_lpData, _pos)
+            self.RedPacketDayList.append(temRedPacketDayList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x11
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.LimitLV = 0
+        self.ResetType = 0
+        self.RedPacketDays = 0
+        self.RedPacketDayList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.RedPacketDays):
+            length += self.RedPacketDayList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        data = CommFunc.WriteBYTE(data, self.RedPacketDays)
+        for i in range(self.RedPacketDays):
+            data = CommFunc.WriteString(data, self.RedPacketDayList[i].GetLength(), self.RedPacketDayList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                LimitLV:%d,
+                                ResetType:%d,
+                                RedPacketDays:%d,
+                                RedPacketDayList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.LimitLV,
+                                self.ResetType,
+                                self.RedPacketDays,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFeastRedPacketInfo=tagGCFeastRedPacketInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFeastRedPacketInfo.Head.Cmd,m_NAtagGCFeastRedPacketInfo.Head.SubCmd))] = m_NAtagGCFeastRedPacketInfo
+
+
+#------------------------------------------------------
+# AC 02 通知仙魔之争信息 #tagGCXMZZInfo
+
+class  tagGCXMZZInfo(Structure):
+    Head = tagHead()
+    Len = 0    #(WORD Len)
+    StageRecord = ""    #(String StageRecord)// 阶段胜负记录
+    Score1 = 0    #(DWORD Score1)// 仙界阵营积分
+    Score2 = 0    #(DWORD Score2)// 魔界阵营积分
+    TopScore = 0    #(DWORD TopScore)// 积分第1名积分
+    TopName = ""    #(char TopName[33])// 积分第1名名字
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.StageRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
+        self.Score1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Score2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TopScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TopName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x02
+        self.Len = 0
+        self.StageRecord = ""
+        self.Score1 = 0
+        self.Score2 = 0
+        self.TopScore = 0
+        self.TopName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += len(self.StageRecord)
+        length += 4
+        length += 4
+        length += 4
+        length += 33
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Len)
+        data = CommFunc.WriteString(data, self.Len, self.StageRecord)
+        data = CommFunc.WriteDWORD(data, self.Score1)
+        data = CommFunc.WriteDWORD(data, self.Score2)
+        data = CommFunc.WriteDWORD(data, self.TopScore)
+        data = CommFunc.WriteString(data, 33, self.TopName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Len:%d,
+                                StageRecord:%s,
+                                Score1:%d,
+                                Score2:%d,
+                                TopScore:%d,
+                                TopName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Len,
+                                self.StageRecord,
+                                self.Score1,
+                                self.Score2,
+                                self.TopScore,
+                                self.TopName
+                                )
+        return DumpString
+
+
+m_NAtagGCXMZZInfo=tagGCXMZZInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZInfo.Head.Cmd,m_NAtagGCXMZZInfo.Head.SubCmd))] = m_NAtagGCXMZZInfo
+
+
+#------------------------------------------------------
+# AC 03 通知仙魔之争自己信息 #tagGCXMZZSelfInfo
+
+class  tagGCXMZZSelfInfo(Structure):
+    Head = tagHead()
+    Faction = 0    #(BYTE Faction)// 所属阵营
+    Score = 0    #(DWORD Score)// 积分
+    WinCnt = 0    #(BYTE WinCnt)// 胜场数
+    WinCntAwardRecord = 0    #(DWORD WinCntAwardRecord)// 胜场奖励领取记录
+    Len = 0    #(WORD Len)// 押注记录
+    BetRecord = ""    #(String BetRecord)// 押注记录
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WinCntAwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.BetRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x03
+        self.Faction = 0
+        self.Score = 0
+        self.WinCnt = 0
+        self.WinCntAwardRecord = 0
+        self.Len = 0
+        self.BetRecord = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 1
+        length += 4
+        length += 2
+        length += len(self.BetRecord)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Faction)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        data = CommFunc.WriteBYTE(data, self.WinCnt)
+        data = CommFunc.WriteDWORD(data, self.WinCntAwardRecord)
+        data = CommFunc.WriteWORD(data, self.Len)
+        data = CommFunc.WriteString(data, self.Len, self.BetRecord)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Faction:%d,
+                                Score:%d,
+                                WinCnt:%d,
+                                WinCntAwardRecord:%d,
+                                Len:%d,
+                                BetRecord:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Faction,
+                                self.Score,
+                                self.WinCnt,
+                                self.WinCntAwardRecord,
+                                self.Len,
+                                self.BetRecord
+                                )
+        return DumpString
+
+
+m_NAtagGCXMZZSelfInfo=tagGCXMZZSelfInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZSelfInfo.Head.Cmd,m_NAtagGCXMZZSelfInfo.Head.SubCmd))] = m_NAtagGCXMZZSelfInfo
+
+
+#------------------------------------------------------
+# AC 07 骑宠Boss信息 #tagGCHorsePetBossInfo
+
+class  tagGCHorsePetBossInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsEnd", c_int),    # 是否已结束(按位代表对应线路是否结束)
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAC
+        self.SubCmd = 0x07
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAC
+        self.SubCmd = 0x07
+        self.IsEnd = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCHorsePetBossInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 07 骑宠Boss信息 //tagGCHorsePetBossInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsEnd:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsEnd
+                                )
+        return DumpString
+
+
+m_NAtagGCHorsePetBossInfo=tagGCHorsePetBossInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCHorsePetBossInfo.Cmd,m_NAtagGCHorsePetBossInfo.SubCmd))] = m_NAtagGCHorsePetBossInfo
+
+
+#------------------------------------------------------
+# AC 06 多倍经验活动信息 #tagGCMultiExpRateInfo
+
+class  tagGCMultiExpRateTime(Structure):
+    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
+    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.StartTime = ""
+        self.EndtTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 5
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 5, self.StartTime)
+        data = CommFunc.WriteString(data, 5, self.EndtTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                StartTime:%s,
+                                EndtTime:%s
+                                '''\
+                                %(
+                                self.StartTime,
+                                self.EndtTime
+                                )
+        return DumpString
+
+
+class  tagGCMultiExpRateInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    ActivityTimeCount = 0    #(BYTE ActivityTimeCount)
+    ActivityTime = list()    #(vector<tagGCMultiExpRateTime> ActivityTime)//活动时间
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    AddExpRate = 0    #(DWORD AddExpRate)// 增加的经验倍率,万分率
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ActivityTimeCount):
+            temActivityTime = tagGCMultiExpRateTime()
+            _pos = temActivityTime.ReadData(_lpData, _pos)
+            self.ActivityTime.append(temActivityTime)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddExpRate,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x06
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.ActivityTimeCount = 0
+        self.ActivityTime = list()
+        self.LimitLV = 0
+        self.AddExpRate = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.ActivityTimeCount):
+            length += self.ActivityTime[i].GetLength()
+        length += 2
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.ActivityTimeCount)
+        for i in range(self.ActivityTimeCount):
+            data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteDWORD(data, self.AddExpRate)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                ActivityTimeCount:%d,
+                                ActivityTime:%s,
+                                LimitLV:%d,
+                                AddExpRate:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.ActivityTimeCount,
+                                "...",
+                                self.LimitLV,
+                                self.AddExpRate
+                                )
+        return DumpString
+
+
+m_NAtagGCMultiExpRateInfo=tagGCMultiExpRateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiExpRateInfo.Head.Cmd,m_NAtagGCMultiExpRateInfo.Head.SubCmd))] = m_NAtagGCMultiExpRateInfo
+
+
+#------------------------------------------------------
+# AC 0A 多倍修行点活动信息 #tagGCMultiRealmPointInfo
+
+class  tagGCMultiRealmPointInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    Multiple = 0    #(BYTE Multiple)// 倍数
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    LimitPoint = 0    #(DWORD LimitPoint)// 限制获得修行点
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0A
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LimitPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0A
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.Multiple = 0
+        self.LimitLV = 0
+        self.LimitPoint = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.Multiple)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteDWORD(data, self.LimitPoint)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                Multiple:%d,
+                                LimitLV:%d,
+                                LimitPoint:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.Multiple,
+                                self.LimitLV,
+                                self.LimitPoint
+                                )
+        return DumpString
+
+
+m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo
+
+
+#------------------------------------------------------
+# AC 0B 新仙界盛典活动信息 #tagGCNewFairyCeremonyInfo
+
+class  tagGCNewFairyCeremonyInfo(Structure):
+    Head = tagHead()
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    WorldLV = 0    #(WORD WorldLV)// 世界等级
+    LimitLV = 0    #(WORD LimitLV)// 限制等级
+    ResetType = 0    #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0B
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x0B
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.WorldLV = 0
+        self.LimitLV = 0
+        self.ResetType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 10
+        length += 10
+        length += 2
+        length += 2
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteWORD(data, self.WorldLV)
+        data = CommFunc.WriteWORD(data, self.LimitLV)
+        data = CommFunc.WriteBYTE(data, self.ResetType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                WorldLV:%d,
+                                LimitLV:%d,
+                                ResetType:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.StartDate,
+                                self.EndtDate,
+                                self.WorldLV,
+                                self.LimitLV,
+                                self.ResetType
+                                )
+        return DumpString
+
+
+m_NAtagGCNewFairyCeremonyInfo=tagGCNewFairyCeremonyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNewFairyCeremonyInfo.Head.Cmd,m_NAtagGCNewFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCNewFairyCeremonyInfo
+
+
+#------------------------------------------------------
+# AC 05 红包删除 #tagGCRedPacketDel
+
+class  tagGCRedPacketDel(Structure):
+    Head = tagHead()
+    Cnt = 0    #(DWORD Cnt)// 个数
+    DelRedPacketID = list()    #(vector<DWORD> DelRedPacketID)// 红包ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Cnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        for i in range(self.Cnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.DelRedPacketID.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x05
+        self.Cnt = 0
+        self.DelRedPacketID = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4 * self.Cnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.Cnt)
+        for i in range(self.Cnt):
+            data = CommFunc.WriteDWORD(data, self.DelRedPacketID[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Cnt:%d,
+                                DelRedPacketID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Cnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCRedPacketDel=tagGCRedPacketDel()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRedPacketDel.Head.Cmd,m_NAtagGCRedPacketDel.Head.SubCmd))] = m_NAtagGCRedPacketDel
+
+
+#------------------------------------------------------
+# AC 04 通知仙魔之争对战信息 #tagGCXMZZFightInfo
+
+class  tagGCXMZZFightInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//玩家ID
+    PropDataSize = 0    #(DWORD PropDataSize)
+    PropData = ""    #(String PropData)//属性记录
+    ItemDataSize = 0    #(DWORD ItemDataSize)
+    ItemData = ""    #(String ItemData)//物品记录
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PropDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize)
+        self.ItemDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x04
+        self.PlayerID = 0
+        self.PropDataSize = 0
+        self.PropData = ""
+        self.ItemDataSize = 0
+        self.ItemData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += len(self.PropData)
+        length += 4
+        length += len(self.ItemData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteDWORD(data, self.PropDataSize)
+        data = CommFunc.WriteString(data, self.PropDataSize, self.PropData)
+        data = CommFunc.WriteDWORD(data, self.ItemDataSize)
+        data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                PropDataSize:%d,
+                                PropData:%s,
+                                ItemDataSize:%d,
+                                ItemData:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.PropDataSize,
+                                self.PropData,
+                                self.ItemDataSize,
+                                self.ItemData
+                                )
+        return DumpString
+
+
+m_NAtagGCXMZZFightInfo=tagGCXMZZFightInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXMZZFightInfo.Head.Cmd,m_NAtagGCXMZZFightInfo.Head.SubCmd))] = m_NAtagGCXMZZFightInfo
+
+
+#------------------------------------------------------
 # AF 02 合服活动奖励状态 #tagMCMixCampaignAwardRecord
 
 class  tagMCMixCampaignAwardRecord(Structure):
@@ -54288,6 +41410,441 @@
 
 
 #------------------------------------------------------
+# B0 01 新增协助 #tagGCAssistInfoList
+
+class  tagGCAssistInfo(Structure):
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    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)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.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)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        return _pos
+
+    def Clear(self):
+        self.AssistGUID = ""
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.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)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AssistGUID:%s,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s
+                                '''\
+                                %(
+                                self.AssistGUID,
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData
+                                )
+        return DumpString
+
+
+class  tagGCAssistInfoList(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    AssistInfoList = list()    #(vector<tagGCAssistInfo> AssistInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAssistInfoList = tagGCAssistInfo()
+            _pos = temAssistInfoList.ReadData(_lpData, _pos)
+            self.AssistInfoList.append(temAssistInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x01
+        self.Count = 0
+        self.AssistInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.AssistInfoList[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.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                AssistInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistInfoList=tagGCAssistInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
+
+
+#------------------------------------------------------
+# B0 03 正在进行中的协助 #tagGCAssistingInfo
+
+class  tagGCAssistingInfo(Structure):
+    Head = tagHead()
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x03
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistingInfo=tagGCAssistingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo
+
+
+#------------------------------------------------------
+# B0 08 协助结束 #tagGCAssistOver
+
+class  tagGCAssistOver(Structure):
+    Head = tagHead()
+    IsTagPlayerReason = 0    #(BYTE IsTagPlayerReason)//是否发布方原因
+    ReasonLen = 0    #(BYTE ReasonLen)
+    Reason = ""    #(String Reason)//原因
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.IsTagPlayerReason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ReasonLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Reason,_pos = CommFunc.ReadString(_lpData, _pos,self.ReasonLen)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x08
+        self.IsTagPlayerReason = 0
+        self.ReasonLen = 0
+        self.Reason = ""
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.Reason)
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.IsTagPlayerReason)
+        data = CommFunc.WriteBYTE(data, self.ReasonLen)
+        data = CommFunc.WriteString(data, self.ReasonLen, self.Reason)
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                IsTagPlayerReason:%d,
+                                ReasonLen:%d,
+                                Reason:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.IsTagPlayerReason,
+                                self.ReasonLen,
+                                self.Reason,
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCAssistOver=tagGCAssistOver()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistOver.Head.Cmd,m_NAtagGCAssistOver.Head.SubCmd))] = m_NAtagGCAssistOver
+
+
+#------------------------------------------------------
+# B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount
+
+class  tagGCCanGetAssistThanksGiftCount(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CanGetCount", c_ubyte),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        self.SubCmd = 0x06
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB0
+        self.SubCmd = 0x06
+        self.CanGetCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCanGetAssistThanksGiftCount)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CanGetCount:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CanGetCount
+                                )
+        return DumpString
+
+
+m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount
+
+
+#------------------------------------------------------
+# B0 02 删除协助 #tagGCClearAssist
+
+class  tagGCClearAssist(Structure):
+    Head = tagHead()
+    AssistGUID = ""    #(char AssistGUID[40])//协助GUID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x02
+        self.AssistGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 40, self.AssistGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AssistGUID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AssistGUID
+                                )
+        return DumpString
+
+
+m_NAtagGCClearAssist=tagGCClearAssist()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
+
+
+#------------------------------------------------------
 #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState
 
 class  tagFamilyArrestAwardReceiveState(Structure):
@@ -54340,6 +41897,134 @@
 
 
 #------------------------------------------------------
+#B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
+
+class  tagFamilyArrestOverState(Structure):
+    ID = 0    #(DWORD ID)//悬赏任务ID
+    NameLen = 0    #(WORD NameLen)//名字长度
+    Name = ""    #(String Name)//size = NameLen
+    OverState = 0    #(DWORD OverState)//任务完成情况
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.OverState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.ID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.OverState = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 2
+        length += len(self.Name)
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.ID)
+        data = CommFunc.WriteWORD(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteDWORD(data, self.OverState)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                OverState:%d
+                                '''\
+                                %(
+                                self.ID,
+                                self.NameLen,
+                                self.Name,
+                                self.OverState
+                                )
+        return DumpString
+
+
+class  tagFamilyArrestOverStateInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)
+    ArrestOverStateInfo = list()    #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count	
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temArrestOverStateInfo = tagFamilyArrestOverState()
+            _pos = temArrestOverStateInfo.ReadData(_lpData, _pos)
+            self.ArrestOverStateInfo.append(temArrestOverStateInfo)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x26
+        self.Count = 0
+        self.ArrestOverStateInfo = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.ArrestOverStateInfo[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.ArrestOverStateInfo[i].GetLength(), self.ArrestOverStateInfo[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ArrestOverStateInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo
+
+
+#------------------------------------------------------
 # B0 50 收杆结果 #tagMCFishResult
 
 class  tagMCFishResult(Structure):
@@ -54385,6 +42070,770 @@
 
 m_NAtagMCFishResult=tagMCFishResult()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFishResult.Cmd,m_NAtagMCFishResult.SubCmd))] = m_NAtagMCFishResult
+
+
+#------------------------------------------------------
+# B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
+
+class  tagGCGetAssistThanksGiftPreview(Structure):
+    Head = tagHead()
+    ItemID = 0    #(DWORD ItemID)//礼盒ID
+    PlayerID = 0    #(DWORD PlayerID)//发起玩家ID
+    PlayerName = ""    #(char PlayerName[33])
+    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)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    TimeStr = ""    #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss
+    ExtraAward = 0    #(BYTE ExtraAward)//是否有额外奖励
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.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)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x05
+        self.ItemID = 0
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        self.TimeStr = ""
+        self.ExtraAward = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+        length += 19
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.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)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        data = CommFunc.WriteString(data, 19, self.TimeStr)
+        data = CommFunc.WriteBYTE(data, self.ExtraAward)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemID:%d,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s,
+                                TimeStr:%s,
+                                ExtraAward:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemID,
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData,
+                                self.TimeStr,
+                                self.ExtraAward
+                                )
+        return DumpString
+
+
+m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview
+
+
+#------------------------------------------------------
+# B0 34 福地结算奖励信息 #tagGCMineAreaAwardInfo
+
+class  tagGCMineAreaAwardInfo(Structure):
+    Head = tagHead()
+    AwardType = 0    #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知
+    AwardLen = 0    #(BYTE AwardLen)
+    AwardInfo = ""    #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...]
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x34
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x34
+        self.AwardType = 0
+        self.AwardLen = 0
+        self.AwardInfo = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += len(self.AwardInfo)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AwardType)
+        data = CommFunc.WriteBYTE(data, self.AwardLen)
+        data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AwardType:%d,
+                                AwardLen:%d,
+                                AwardInfo:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AwardType,
+                                self.AwardLen,
+                                self.AwardInfo
+                                )
+        return DumpString
+
+
+m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo
+
+
+#------------------------------------------------------
+# B0 33 福地详细信息 #tagGCMineAreaInfo
+
+class  tagGCMineItem(Structure):
+    Index = 0    #(BYTE Index)// 矿物所在福地位置索引,0~n
+    MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物
+    MineType = 0    #(BYTE MineType)// 矿物类型:0-常规;1-超级
+    UpdTime = 0    #(DWORD UpdTime)// 最后一次更新时间戳
+    PosLen = 0    #(BYTE PosLen)
+    Position = ""    #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒
+    SpeedLen = 0    #(BYTE SpeedLen)
+    MoveSpeed = ""    #(String MoveSpeed)// 移动速度,x格/秒,支持小数
+    EndTime = 0    #(DWORD EndTime)// 拉取结束时间戳
+    WorkerCount = 0    #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen)
+        self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen)
+        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        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):
+        self.Index = 0
+        self.MineID = 0
+        self.MineType = 0
+        self.UpdTime = 0
+        self.PosLen = 0
+        self.Position = ""
+        self.SpeedLen = 0
+        self.MoveSpeed = ""
+        self.EndTime = 0
+        self.WorkerCount = 0
+        self.RobPlayerID = 0
+        self.RobWorkerCount = 0
+        self.RobPlayerName = ""
+        self.RobJob = 0
+        self.RobFace = 0
+        self.RobFacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 1
+        length += len(self.Position)
+        length += 1
+        length += len(self.MoveSpeed)
+        length += 4
+        length += 1
+        length += 4
+        length += 1
+        length += 33
+        length += 1
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Index)
+        data = CommFunc.WriteWORD(data, self.MineID)
+        data = CommFunc.WriteBYTE(data, self.MineType)
+        data = CommFunc.WriteDWORD(data, self.UpdTime)
+        data = CommFunc.WriteBYTE(data, self.PosLen)
+        data = CommFunc.WriteString(data, self.PosLen, self.Position)
+        data = CommFunc.WriteBYTE(data, self.SpeedLen)
+        data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed)
+        data = CommFunc.WriteDWORD(data, self.EndTime)
+        data = CommFunc.WriteBYTE(data, self.WorkerCount)
+        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):
+        DumpString = '''
+                                Index:%d,
+                                MineID:%d,
+                                MineType:%d,
+                                UpdTime:%d,
+                                PosLen:%d,
+                                Position:%s,
+                                SpeedLen:%d,
+                                MoveSpeed:%s,
+                                EndTime:%d,
+                                WorkerCount:%d,
+                                RobPlayerID:%d,
+                                RobWorkerCount:%d,
+                                RobPlayerName:%s,
+                                RobJob:%d,
+                                RobFace:%d,
+                                RobFacePic:%d
+                                '''\
+                                %(
+                                self.Index,
+                                self.MineID,
+                                self.MineType,
+                                self.UpdTime,
+                                self.PosLen,
+                                self.Position,
+                                self.SpeedLen,
+                                self.MoveSpeed,
+                                self.EndTime,
+                                self.WorkerCount,
+                                self.RobPlayerID,
+                                self.RobWorkerCount,
+                                self.RobPlayerName,
+                                self.RobJob,
+                                self.RobFace,
+                                self.RobFacePic
+                                )
+        return DumpString
+
+
+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)
+    RobValue = 0    #(DWORD RobValue)// 抢劫敌对值
+    MineCount = 0    #(BYTE MineCount)
+    MineItemList = list()    #(vector<tagGCMineItem> MineItemList)// 矿物列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        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.RobValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MineCount):
+            temMineItemList = tagGCMineItem()
+            _pos = temMineItemList.ReadData(_lpData, _pos)
+            self.MineItemList.append(temMineItemList)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.RobValue = 0
+        self.MineCount = 0
+        self.MineItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.MineCount):
+            length += self.MineItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        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.WriteDWORD(data, self.RobValue)
+        data = CommFunc.WriteBYTE(data, self.MineCount)
+        for i in range(self.MineCount):
+            data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                RobValue:%d,
+                                MineCount:%d,
+                                MineItemList:%s
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.Face,
+                                self.FacePic,
+                                self.RobValue,
+                                self.MineCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCMineAreaInfo(Structure):
+    Head = tagHead()
+    QueryType = 0    #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表
+    QueryValue = 0    #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机
+    AreaCount = 0    #(BYTE AreaCount)
+    AreaList = list()    #(vector<tagGCMineArea> AreaList)// 福地列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x33
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AreaCount):
+            temAreaList = tagGCMineArea()
+            _pos = temAreaList.ReadData(_lpData, _pos)
+            self.AreaList.append(temAreaList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x33
+        self.QueryType = 0
+        self.QueryValue = 0
+        self.AreaCount = 0
+        self.AreaList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 1
+        for i in range(self.AreaCount):
+            length += self.AreaList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.QueryType)
+        data = CommFunc.WriteDWORD(data, self.QueryValue)
+        data = CommFunc.WriteBYTE(data, self.AreaCount)
+        for i in range(self.AreaCount):
+            data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                QueryType:%d,
+                                QueryValue:%d,
+                                AreaCount:%d,
+                                AreaList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.QueryType,
+                                self.QueryValue,
+                                self.AreaCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCMineAreaInfo=tagGCMineAreaInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo
+
+
+#------------------------------------------------------
+# B0 35 福地记录信息 #tagGCMineAreaRecordInfo
+
+class  tagGCMineAreaRecord(Structure):
+    RecordType = 0    #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢
+    TagPlayerID = 0    #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        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):
+        self.RecordType = 0
+        self.TagPlayerID = 0
+        self.RecordTime = 0
+        self.MineID = 0
+        self.TagPlayerName = ""
+        self.TagJob = 0
+        self.TagFace = 0
+        self.TagFacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 4
+        length += 2
+        length += 33
+        length += 1
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.RecordType)
+        data = CommFunc.WriteDWORD(data, self.TagPlayerID)
+        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):
+        DumpString = '''
+                                RecordType:%d,
+                                TagPlayerID:%d,
+                                RecordTime:%d,
+                                MineID:%d,
+                                TagPlayerName:%s,
+                                TagJob:%d,
+                                TagFace:%d,
+                                TagFacePic:%d
+                                '''\
+                                %(
+                                self.RecordType,
+                                self.TagPlayerID,
+                                self.RecordTime,
+                                self.MineID,
+                                self.TagPlayerName,
+                                self.TagJob,
+                                self.TagFace,
+                                self.TagFacePic
+                                )
+        return DumpString
+
+
+class  tagGCMineAreaRecordInfo(Structure):
+    Head = tagHead()
+    RecordCount = 0    #(BYTE RecordCount)
+    AreaRecordList = list()    #(vector<tagGCMineAreaRecord> AreaRecordList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x35
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temAreaRecordList = tagGCMineAreaRecord()
+            _pos = temAreaRecordList.ReadData(_lpData, _pos)
+            self.AreaRecordList.append(temAreaRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x35
+        self.RecordCount = 0
+        self.AreaRecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.AreaRecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RecordCount:%d,
+                                AreaRecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo
+
+
+#------------------------------------------------------
+# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet
+
+class  tagGCMineItemPullPreviewRet(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    # 福地所属玩家ID,0默认自己
+                  ("ItemIndex", c_ubyte),    # 物品所在位置索引0~n
+                  ("WorkerCount", c_ubyte),    # 上工人人数
+                  ("NeedSeconds", c_int),    # 预计需要时间,秒
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        self.SubCmd = 0x32
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB0
+        self.SubCmd = 0x32
+        self.PlayerID = 0
+        self.ItemIndex = 0
+        self.WorkerCount = 0
+        self.NeedSeconds = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCMineItemPullPreviewRet)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d,
+                                ItemIndex:%d,
+                                WorkerCount:%d,
+                                NeedSeconds:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID,
+                                self.ItemIndex,
+                                self.WorkerCount,
+                                self.NeedSeconds
+                                )
+        return DumpString
+
+
+m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet
 
 
 #------------------------------------------------------
@@ -54577,6 +43026,404 @@
 
 m_NAtagMCTodayAssistMoneyInfo=tagMCTodayAssistMoneyInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTodayAssistMoneyInfo.Cmd,m_NAtagMCTodayAssistMoneyInfo.SubCmd))] = m_NAtagMCTodayAssistMoneyInfo
+
+
+#------------------------------------------------------
+# B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
+
+class  tagGCAssistPlayerInfo(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        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.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):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCUseAssistThanksGiftPreview(Structure):
+    Head = tagHead()
+    ItemID = 0    #(DWORD ItemID)//礼盒ID
+    MapID = 0    #(DWORD MapID)
+    LineID = 0    #(DWORD LineID)
+    NPCID = 0    #(DWORD NPCID)
+    ExDataLen = 0    #(WORD ExDataLen)
+    ExData = ""    #(String ExData)//其他自定义数据
+    AssistPlayerCount = 0    #(BYTE AssistPlayerCount)
+    AssistPlayerList = list()    #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ItemID,_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)
+        self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
+        self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AssistPlayerCount):
+            temAssistPlayerList = tagGCAssistPlayerInfo()
+            _pos = temAssistPlayerList.ReadData(_lpData, _pos)
+            self.AssistPlayerList.append(temAssistPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x04
+        self.ItemID = 0
+        self.MapID = 0
+        self.LineID = 0
+        self.NPCID = 0
+        self.ExDataLen = 0
+        self.ExData = ""
+        self.AssistPlayerCount = 0
+        self.AssistPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.ExData)
+        length += 1
+        for i in range(self.AssistPlayerCount):
+            length += self.AssistPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteDWORD(data, self.LineID)
+        data = CommFunc.WriteDWORD(data, self.NPCID)
+        data = CommFunc.WriteWORD(data, self.ExDataLen)
+        data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
+        data = CommFunc.WriteBYTE(data, self.AssistPlayerCount)
+        for i in range(self.AssistPlayerCount):
+            data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ItemID:%d,
+                                MapID:%d,
+                                LineID:%d,
+                                NPCID:%d,
+                                ExDataLen:%d,
+                                ExData:%s,
+                                AssistPlayerCount:%d,
+                                AssistPlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ItemID,
+                                self.MapID,
+                                self.LineID,
+                                self.NPCID,
+                                self.ExDataLen,
+                                self.ExData,
+                                self.AssistPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
+
+
+#------------------------------------------------------
+# B0 20 膜拜信息列表 #tagGCWorshipInfoList
+
+class  tagGCWorshipInfo(Structure):
+    PlayerID = 0    #(DWORD PlayerID)// 目标玩家ID
+    WorshipType = 0    #(BYTE WorshipType)// 膜拜类型
+    WorshipValue = 0    #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
+    InfoLen = 0    #(WORD InfoLen)
+    PlayerInfo = ""    #(String PlayerInfo)// 玩家信息{k:v, ...}
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.WorshipType = 0
+        self.WorshipValue = 0
+        self.InfoLen = 0
+        self.PlayerInfo = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 4
+        length += 2
+        length += len(self.PlayerInfo)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.WorshipType)
+        data = CommFunc.WriteDWORD(data, self.WorshipValue)
+        data = CommFunc.WriteWORD(data, self.InfoLen)
+        data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                WorshipType:%d,
+                                WorshipValue:%d,
+                                InfoLen:%d,
+                                PlayerInfo:%s
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.WorshipType,
+                                self.WorshipValue,
+                                self.InfoLen,
+                                self.PlayerInfo
+                                )
+        return DumpString
+
+
+class  tagGCWorshipInfoList(Structure):
+    Head = tagHead()
+    WorshipCount = 0    #(BYTE WorshipCount)
+    WorshipInfoList = list()    #(vector<tagGCWorshipInfo> WorshipInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.WorshipCount):
+            temWorshipInfoList = tagGCWorshipInfo()
+            _pos = temWorshipInfoList.ReadData(_lpData, _pos)
+            self.WorshipInfoList.append(temWorshipInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x20
+        self.WorshipCount = 0
+        self.WorshipInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.WorshipCount):
+            length += self.WorshipInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.WorshipCount)
+        for i in range(self.WorshipCount):
+            data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                WorshipCount:%d,
+                                WorshipInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.WorshipCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCWorshipInfoList=tagGCWorshipInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList
+
+
+#------------------------------------------------------
+# B0 21 膜拜结果 #tagGCWorshipResult
+
+class  tagGCWorshipResult(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    # 目标玩家ID
+                  ("WorshipType", c_ubyte),    # 膜拜类型
+                  ("WorshipValue", c_int),    # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
+                  ("Result", c_ubyte),    # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标;
+                  ("MoneyType", c_ubyte),    # 货币类型
+                  ("MoneyValue", c_int),    # 货币奖励
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB0
+        self.SubCmd = 0x21
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB0
+        self.SubCmd = 0x21
+        self.PlayerID = 0
+        self.WorshipType = 0
+        self.WorshipValue = 0
+        self.Result = 0
+        self.MoneyType = 0
+        self.MoneyValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCWorshipResult)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d,
+                                WorshipType:%d,
+                                WorshipValue:%d,
+                                Result:%d,
+                                MoneyType:%d,
+                                MoneyValue:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID,
+                                self.WorshipType,
+                                self.WorshipValue,
+                                self.Result,
+                                self.MoneyType,
+                                self.MoneyValue
+                                )
+        return DumpString
+
+
+m_NAtagGCWorshipResult=tagGCWorshipResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult
 
 
 #------------------------------------------------------
@@ -58132,6 +46979,551 @@
 
 
 #------------------------------------------------------
+#B3 03 询问是否允许添加好友#tagGCFriendAskIfJoin
+
+class  tagGCFriendAskIfJoin(Structure):
+    Head = tagHead()
+    AskID = 0    #(DWORD AskID)//请求好友的人
+    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):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AskID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        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):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x03
+        self.AskID = 0
+        self.Name = ""
+        self.LV = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.AskID)
+        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):
+        DumpString = '''
+                                Head:%s,
+                                AskID:%d,
+                                Name:%s,
+                                LV:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AskID,
+                                self.Name,
+                                self.LV,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+m_NAtagGCFriendAskIfJoin=tagGCFriendAskIfJoin()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendAskIfJoin.Head.Cmd,m_NAtagGCFriendAskIfJoin.Head.SubCmd))] = m_NAtagGCFriendAskIfJoin
+
+
+#------------------------------------------------------
+# B3 24 喜糖列表 #tagGCCandyList
+
+class  tagGCCandyInfo(Structure):
+    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
+    NameALen = 0    #(BYTE NameALen)
+    PlayerNameA = ""    #(String PlayerNameA)
+    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
+    NameBLen = 0    #(BYTE NameBLen)
+    PlayerNameB = ""    #(String PlayerNameB)
+    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
+    MarryTime = 0    #(DWORD MarryTime)// 成亲时间戳,秒
+    EndTime = 0    #(DWORD EndTime)// 结束时间戳,秒
+    Prosperity = 0    #(DWORD Prosperity)// 当前繁荣度
+    FireworksTotalBuyCount = 0    #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数
+    FireworksPlayerBuyCount = 0    #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数
+    PlayerFreeEatCandyCount = 0    #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
+        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
+        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerIDA = 0
+        self.NameALen = 0
+        self.PlayerNameA = ""
+        self.PlayerIDB = 0
+        self.NameBLen = 0
+        self.PlayerNameB = ""
+        self.BridePriceID = 0
+        self.MarryTime = 0
+        self.EndTime = 0
+        self.Prosperity = 0
+        self.FireworksTotalBuyCount = 0
+        self.FireworksPlayerBuyCount = 0
+        self.PlayerFreeEatCandyCount = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerNameA)
+        length += 4
+        length += 1
+        length += len(self.PlayerNameB)
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
+        data = CommFunc.WriteBYTE(data, self.NameALen)
+        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
+        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
+        data = CommFunc.WriteBYTE(data, self.NameBLen)
+        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
+        data = CommFunc.WriteBYTE(data, self.BridePriceID)
+        data = CommFunc.WriteDWORD(data, self.MarryTime)
+        data = CommFunc.WriteDWORD(data, self.EndTime)
+        data = CommFunc.WriteDWORD(data, self.Prosperity)
+        data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount)
+        data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount)
+        data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerIDA:%d,
+                                NameALen:%d,
+                                PlayerNameA:%s,
+                                PlayerIDB:%d,
+                                NameBLen:%d,
+                                PlayerNameB:%s,
+                                BridePriceID:%d,
+                                MarryTime:%d,
+                                EndTime:%d,
+                                Prosperity:%d,
+                                FireworksTotalBuyCount:%d,
+                                FireworksPlayerBuyCount:%d,
+                                PlayerFreeEatCandyCount:%d
+                                '''\
+                                %(
+                                self.PlayerIDA,
+                                self.NameALen,
+                                self.PlayerNameA,
+                                self.PlayerIDB,
+                                self.NameBLen,
+                                self.PlayerNameB,
+                                self.BridePriceID,
+                                self.MarryTime,
+                                self.EndTime,
+                                self.Prosperity,
+                                self.FireworksTotalBuyCount,
+                                self.FireworksPlayerBuyCount,
+                                self.PlayerFreeEatCandyCount
+                                )
+        return DumpString
+
+
+class  tagGCCandyList(Structure):
+    Head = tagHead()
+    CandyCount = 0    #(WORD CandyCount)
+    CandyInfoList = list()    #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x24
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.CandyCount):
+            temCandyInfoList = tagGCCandyInfo()
+            _pos = temCandyInfoList.ReadData(_lpData, _pos)
+            self.CandyInfoList.append(temCandyInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x24
+        self.CandyCount = 0
+        self.CandyInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.CandyCount):
+            length += self.CandyInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.CandyCount)
+        for i in range(self.CandyCount):
+            data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CandyCount:%d,
+                                CandyInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CandyCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCandyList=tagGCCandyList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList
+
+
+#------------------------------------------------------
+# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList
+
+class  tagGCCharmOfferBillboardData(Structure):
+    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
+    PlayerID = 0    #(DWORD PlayerID)// 玩家ID - 贡献者
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    CharmValue = 0    #(DWORD CharmValue)//贡献魅力值
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.OrderIndex = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.CharmValue = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.OrderIndex)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteDWORD(data, self.CharmValue)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                OrderIndex:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                CharmValue:%d
+                                '''\
+                                %(
+                                self.OrderIndex,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.CharmValue
+                                )
+        return DumpString
+
+
+class  tagGCCharmOfferBillboardDataList(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 魅力玩家ID
+    QueryType = 0    #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜
+    DataCount = 0    #(BYTE DataCount)
+    OfferBillboardDataList = list()    #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x19
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DataCount):
+            temOfferBillboardDataList = tagGCCharmOfferBillboardData()
+            _pos = temOfferBillboardDataList.ReadData(_lpData, _pos)
+            self.OfferBillboardDataList.append(temOfferBillboardDataList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x19
+        self.PlayerID = 0
+        self.QueryType = 0
+        self.DataCount = 0
+        self.OfferBillboardDataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 1
+        for i in range(self.DataCount):
+            length += self.OfferBillboardDataList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.QueryType)
+        data = CommFunc.WriteBYTE(data, self.DataCount)
+        for i in range(self.DataCount):
+            data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                QueryType:%d,
+                                DataCount:%d,
+                                OfferBillboardDataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.QueryType,
+                                self.DataCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList
+
+
+#------------------------------------------------------
+# B3 26 伴侣信息 #tagGCCoupleInfo
+
+class  tagGCCoupleInfo(Structure):
+    Head = tagHead()
+    CoupleID = 0    #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取
+    NameLen = 0    #(BYTE NameLen)
+    CoupleName = ""    #(String CoupleName)
+    NewMarryTime = 0    #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算
+    MarryTime = 0    #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算
+    BridePriceState = 0    #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次
+    BreakRequestID = 0    #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求
+    BreakRequestTime = 0    #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期
+    PlayerBreakRequestTime = 0    #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x26
+        self.CoupleID = 0
+        self.NameLen = 0
+        self.CoupleName = ""
+        self.NewMarryTime = 0
+        self.MarryTime = 0
+        self.BridePriceState = 0
+        self.BreakRequestID = 0
+        self.BreakRequestTime = 0
+        self.PlayerBreakRequestTime = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.CoupleName)
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.CoupleID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.CoupleName)
+        data = CommFunc.WriteDWORD(data, self.NewMarryTime)
+        data = CommFunc.WriteDWORD(data, self.MarryTime)
+        data = CommFunc.WriteDWORD(data, self.BridePriceState)
+        data = CommFunc.WriteDWORD(data, self.BreakRequestID)
+        data = CommFunc.WriteDWORD(data, self.BreakRequestTime)
+        data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CoupleID:%d,
+                                NameLen:%d,
+                                CoupleName:%s,
+                                NewMarryTime:%d,
+                                MarryTime:%d,
+                                BridePriceState:%d,
+                                BreakRequestID:%d,
+                                BreakRequestTime:%d,
+                                PlayerBreakRequestTime:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CoupleID,
+                                self.NameLen,
+                                self.CoupleName,
+                                self.NewMarryTime,
+                                self.MarryTime,
+                                self.BridePriceState,
+                                self.BreakRequestID,
+                                self.BreakRequestTime,
+                                self.PlayerBreakRequestTime
+                                )
+        return DumpString
+
+
+m_NAtagGCCoupleInfo=tagGCCoupleInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo
+
+
+#------------------------------------------------------
 # B3 30 情缘相关信息 #tagMCLoveInfo
 
 class  tagMCLoveInfo(Structure):
@@ -58289,6 +47681,1288 @@
 
 m_NAtagMCLoveRingUnlockOK=tagMCLoveRingUnlockOK()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingUnlockOK.Cmd,m_NAtagMCLoveRingUnlockOK.SubCmd))] = m_NAtagMCLoveRingUnlockOK
+
+
+#------------------------------------------------------
+# B3 22 收到提亲信息 #tagGCMarryReqInfo
+
+class  tagGCMarryReqInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x22
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x22
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.BridePriceID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.BridePriceID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                BridePriceID:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.BridePriceID
+                                )
+        return DumpString
+
+
+m_NAtagGCMarryReqInfo=tagGCMarryReqInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo
+
+
+#------------------------------------------------------
+# B3 21 提亲发送成功 #tagGCMarryReqOK
+
+class  tagGCMarryReqOK(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x21
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x21
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCMarryReqOK)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK:
+                                Cmd:%s,
+                                SubCmd:%s
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd
+                                )
+        return DumpString
+
+
+m_NAtagGCMarryReqOK=tagGCMarryReqOK()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK
+
+
+#------------------------------------------------------
+# B3 23 提亲回应结果 #tagGCMarryResponseRet
+
+class  tagGCMarryResponseRet(Structure):
+    Head = tagHead()
+    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
+    NameALen = 0    #(BYTE NameALen)
+    PlayerNameA = ""    #(String PlayerNameA)
+    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
+    NameBLen = 0    #(BYTE NameBLen)
+    PlayerNameB = ""    #(String PlayerNameB)
+    IsOK = 0    #(BYTE IsOK)// 是否同意,0-否,1-是;  如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x23
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
+        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
+        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x23
+        self.PlayerIDA = 0
+        self.NameALen = 0
+        self.PlayerNameA = ""
+        self.PlayerIDB = 0
+        self.NameBLen = 0
+        self.PlayerNameB = ""
+        self.IsOK = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.PlayerNameA)
+        length += 4
+        length += 1
+        length += len(self.PlayerNameB)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
+        data = CommFunc.WriteBYTE(data, self.NameALen)
+        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
+        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
+        data = CommFunc.WriteBYTE(data, self.NameBLen)
+        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
+        data = CommFunc.WriteBYTE(data, self.IsOK)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerIDA:%d,
+                                NameALen:%d,
+                                PlayerNameA:%s,
+                                PlayerIDB:%d,
+                                NameBLen:%d,
+                                PlayerNameB:%s,
+                                IsOK:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerIDA,
+                                self.NameALen,
+                                self.PlayerNameA,
+                                self.PlayerIDB,
+                                self.NameBLen,
+                                self.PlayerNameB,
+                                self.IsOK
+                                )
+        return DumpString
+
+
+m_NAtagGCMarryResponseRet=tagGCMarryResponseRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet
+
+
+#------------------------------------------------------
+# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo
+
+class  tagGCPlayerCharmValueInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CharmValueTotal", c_int),    #当前魅力值 - 总
+                  ("CharmValueWeek", c_int),    #当前魅力值 - 周
+                  ("CharmValueDay", c_int),    #当前魅力值 - 日
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x25
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x25
+        self.CharmValueTotal = 0
+        self.CharmValueWeek = 0
+        self.CharmValueDay = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCPlayerCharmValueInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CharmValueTotal:%d,
+                                CharmValueWeek:%d,
+                                CharmValueDay:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CharmValueTotal,
+                                self.CharmValueWeek,
+                                self.CharmValueDay
+                                )
+        return DumpString
+
+
+m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo
+
+
+#------------------------------------------------------
+# B3 15 相关玩家在线状态变更同步 #tagGCRelatedPlayerOnlineState
+
+class  tagGCRelatedPlayerOnlineState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    # 相关玩家ID
+                  ("OfflineValue", c_int),    # 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线;
+                  ("IsCross", c_ubyte),    # 是否跨服同步的,如果是跨服则离线时间计算时要取跨服服务器时间
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x15
+        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 = 0xB3
+        self.SubCmd = 0x15
+        self.PlayerID = 0
+        self.OfflineValue = 0
+        self.IsCross = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCRelatedPlayerOnlineState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 15 相关玩家在线状态变更同步 //tagGCRelatedPlayerOnlineState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d,
+                                OfflineValue:%d,
+                                IsCross:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID,
+                                self.OfflineValue,
+                                self.IsCross
+                                )
+        return DumpString
+
+
+m_NAtagGCRelatedPlayerOnlineState=tagGCRelatedPlayerOnlineState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRelatedPlayerOnlineState.Cmd,m_NAtagGCRelatedPlayerOnlineState.SubCmd))] = m_NAtagGCRelatedPlayerOnlineState
+
+
+#------------------------------------------------------
+# B3 20 送礼物成功通知 #tagGCSendGiftsOKList
+
+class  tagGCSendGiftsOK(Structure):
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 赠送方玩家名
+    PlayerID = 0    #(DWORD PlayerID)// 赠送方玩家ID
+    GiftNum = 0    #(WORD GiftNum)// 赠送礼物编号
+    GiftCount = 0    #(DWORD GiftCount)// 赠送礼物数量
+    SendTime = 0    #(DWORD SendTime)// 赠送时间戳
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.NameLen = 0
+        self.Name = ""
+        self.PlayerID = 0
+        self.GiftNum = 0
+        self.GiftCount = 0
+        self.SendTime = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += len(self.Name)
+        length += 4
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteWORD(data, self.GiftNum)
+        data = CommFunc.WriteDWORD(data, self.GiftCount)
+        data = CommFunc.WriteDWORD(data, self.SendTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NameLen:%d,
+                                Name:%s,
+                                PlayerID:%d,
+                                GiftNum:%d,
+                                GiftCount:%d,
+                                SendTime:%d
+                                '''\
+                                %(
+                                self.NameLen,
+                                self.Name,
+                                self.PlayerID,
+                                self.GiftNum,
+                                self.GiftCount,
+                                self.SendTime
+                                )
+        return DumpString
+
+
+class  tagGCSendGiftsOKList(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)
+    SendGiftsOKList = list()    #(vector<tagGCSendGiftsOK> SendGiftsOKList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temSendGiftsOKList = tagGCSendGiftsOK()
+            _pos = temSendGiftsOKList.ReadData(_lpData, _pos)
+            self.SendGiftsOKList.append(temSendGiftsOKList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x20
+        self.Count = 0
+        self.SendGiftsOKList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.SendGiftsOKList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                SendGiftsOKList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList
+
+
+#------------------------------------------------------
+# B3 14 社交人群伴侣信息 #tagGCSocialCouples
+
+class  tagGCSocialCouple(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    
+                  ("CoupleID", c_int),    #伴侣ID
+                  ]
+
+    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.PlayerID = 0
+        self.CoupleID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCSocialCouple)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B3 14 社交人群伴侣信息 //tagGCSocialCouples:
+                                PlayerID:%d,
+                                CoupleID:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.CoupleID
+                                )
+        return DumpString
+
+
+class  tagGCSocialCouples(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)
+    Player = list()    #(vector<tagGCSocialCouple> Player)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x14
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temPlayer = tagGCSocialCouple()
+            _pos = temPlayer.ReadData(_lpData, _pos)
+            self.Player.append(temPlayer)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x14
+        self.Count = 0
+        self.Player = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.Player[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                Player:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCSocialCouples=tagGCSocialCouples()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialCouples.Head.Cmd,m_NAtagGCSocialCouples.Head.SubCmd))] = m_NAtagGCSocialCouples
+
+
+#------------------------------------------------------
+#B3 01 添加社交对象 #tagGCAddSocialPlayer
+
+class  tagGCAddSocialPlayer(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
+                  ("PlayerID", c_int),    
+                  ("SortValue", c_int),    #最近联系人和仇人按时间排序
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x01
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x01
+        self.GroupType = 0
+        self.PlayerID = 0
+        self.SortValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCAddSocialPlayer)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B3 01 添加社交对象 //tagGCAddSocialPlayer:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GroupType:%d,
+                                PlayerID:%d,
+                                SortValue:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GroupType,
+                                self.PlayerID,
+                                self.SortValue
+                                )
+        return DumpString
+
+
+m_NAtagGCAddSocialPlayer=tagGCAddSocialPlayer()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddSocialPlayer.Cmd,m_NAtagGCAddSocialPlayer.SubCmd))] = m_NAtagGCAddSocialPlayer
+
+
+#------------------------------------------------------
+#B3 09 回复玩家简短信息 #tagGCAnswerPlayerShortInfo
+
+class  tagGCAnswerPlayerShortInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界
+    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):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.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):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x09
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.OnlineType = 0
+        self.IsInTeam = 0
+        self.ServerGroupID = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.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):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                OnlineType:%d,
+                                IsInTeam:%d,
+                                ServerGroupID:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.OnlineType,
+                                self.IsInTeam,
+                                self.ServerGroupID,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+m_NAtagGCAnswerPlayerShortInfo=tagGCAnswerPlayerShortInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAnswerPlayerShortInfo.Head.Cmd,m_NAtagGCAnswerPlayerShortInfo.Head.SubCmd))] = m_NAtagGCAnswerPlayerShortInfo
+
+
+#------------------------------------------------------
+#B3 02 删除社交对象 #tagGCDelSocialPlayer
+
+class  tagGCDelSocialPlayer(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GroupType", c_ubyte),    # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
+                  ("PlayerID", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x02
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x02
+        self.GroupType = 0
+        self.PlayerID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCDelSocialPlayer)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B3 02 删除社交对象 //tagGCDelSocialPlayer:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GroupType:%d,
+                                PlayerID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GroupType,
+                                self.PlayerID
+                                )
+        return DumpString
+
+
+m_NAtagGCDelSocialPlayer=tagGCDelSocialPlayer()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelSocialPlayer.Cmd,m_NAtagGCDelSocialPlayer.SubCmd))] = m_NAtagGCDelSocialPlayer
+
+
+#------------------------------------------------------
+#B3 04 社交人群基本信息 #tagGCSocialPlayers
+
+class  tagGCSocialPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        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.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):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.OnlineType = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 1
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteBYTE(data, self.OnlineType)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                OnlineType:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.OnlineType,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCSocialPlayers(Structure):
+    Head = tagHead()
+    Count = 0    #(WORD Count)
+    Player = list()    #(vector<tagGCSocialPlayer> Player)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temPlayer = tagGCSocialPlayer()
+            _pos = temPlayer.ReadData(_lpData, _pos)
+            self.Player.append(temPlayer)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x04
+        self.Count = 0
+        self.Player = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        for i in range(self.Count):
+            length += self.Player[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                Player:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCSocialPlayers=tagGCSocialPlayers()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialPlayers.Head.Cmd,m_NAtagGCSocialPlayers.Head.SubCmd))] = m_NAtagGCSocialPlayers
+
+
+#------------------------------------------------------
+#B3 08 通知玩家分组信息 #tagGCGroupPlayers
+
+class  tagGCGroupPlayer(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    
+                  ("SortValue", 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.PlayerID = 0
+        self.SortValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCGroupPlayer)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B3 08 通知玩家分组信息 //tagGCGroupPlayers:
+                                PlayerID:%d,
+                                SortValue:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.SortValue
+                                )
+        return DumpString
+
+
+class  tagGCGroupPlayers(Structure):
+    Head = tagHead()
+    GroupType = 0    #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 5亲密组
+    Count = 0    #(WORD Count)
+    Players = list()    #(vector<tagGCGroupPlayer> Players)//size = Count
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.GroupType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temPlayers = tagGCGroupPlayer()
+            _pos = temPlayers.ReadData(_lpData, _pos)
+            self.Players.append(temPlayers)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x08
+        self.GroupType = 0
+        self.Count = 0
+        self.Players = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2
+        for i in range(self.Count):
+            length += self.Players[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.GroupType)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.Players[i].GetLength(), self.Players[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                GroupType:%d,
+                                Count:%d,
+                                Players:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.GroupType,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCGroupPlayers=tagGCGroupPlayers()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGroupPlayers.Head.Cmd,m_NAtagGCGroupPlayers.Head.SubCmd))] = m_NAtagGCGroupPlayers
+
+
+#------------------------------------------------------
+#B3 05 社交圈内广播玩家名称 #tagGCSocialName
+
+class  tagGCSocialName(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)
+    Name = ""    #(char Name[33])
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB3
+        self.Head.SubCmd = 0x05
+        self.PlayerID = 0
+        self.Name = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 33
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.Name)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                Name:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.Name
+                                )
+        return DumpString
+
+
+m_NAtagGCSocialName=tagGCSocialName()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialName.Head.Cmd,m_NAtagGCSocialName.Head.SubCmd))] = m_NAtagGCSocialName
+
+
+#------------------------------------------------------
+#B3 06 社交玩家在线情况 #tagGCSocialOnline
+
+class  tagGCSocialOnline(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    
+                  ("OnlineType", c_ubyte),    #0不在线 1在线 2脱机在线
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x06
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x06
+        self.PlayerID = 0
+        self.OnlineType = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCSocialOnline)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B3 06 社交玩家在线情况 //tagGCSocialOnline:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d,
+                                OnlineType:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID,
+                                self.OnlineType
+                                )
+        return DumpString
+
+
+m_NAtagGCSocialOnline=tagGCSocialOnline()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialOnline.Cmd,m_NAtagGCSocialOnline.SubCmd))] = m_NAtagGCSocialOnline
+
+
+#------------------------------------------------------
+#B3 07 社交玩家属性广播 #tagGCSocialRefreshType
+
+class  tagGCSocialRefreshType(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    
+                  ("RefreshType", c_ubyte),    #参考CDBPlayerRefresh__	
+                  ("Value", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB3
+        self.SubCmd = 0x07
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB3
+        self.SubCmd = 0x07
+        self.PlayerID = 0
+        self.RefreshType = 0
+        self.Value = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCSocialRefreshType)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''//B3 07 社交玩家属性广播 //tagGCSocialRefreshType:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d,
+                                RefreshType:%d,
+                                Value:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID,
+                                self.RefreshType,
+                                self.Value
+                                )
+        return DumpString
+
+
+m_NAtagGCSocialRefreshType=tagGCSocialRefreshType()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialRefreshType.Cmd,m_NAtagGCSocialRefreshType.SubCmd))] = m_NAtagGCSocialRefreshType
 
 
 #------------------------------------------------------
@@ -60046,6 +50720,1660 @@
 
 
 #------------------------------------------------------
+# B5 04 拍卖行新上架拍品 #tagGCAddAuctionItemInfo
+
+class  tagGCAddAuctionItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    ItemID = 0    #(DWORD ItemID)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.ItemID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                ItemID:%d
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.ItemID
+                                )
+        return DumpString
+
+
+class  tagGCAddAuctionItemInfo(Structure):
+    Head = tagHead()
+    AddCount = 0    #(BYTE AddCount)
+    AddAuctionItemList = list()    #(vector<tagGCAddAuctionItem> AddAuctionItemList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AddCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AddCount):
+            temAddAuctionItemList = tagGCAddAuctionItem()
+            _pos = temAddAuctionItemList.ReadData(_lpData, _pos)
+            self.AddAuctionItemList.append(temAddAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x04
+        self.AddCount = 0
+        self.AddAuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.AddCount):
+            length += self.AddAuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AddCount)
+        for i in range(self.AddCount):
+            data = CommFunc.WriteString(data, self.AddAuctionItemList[i].GetLength(), self.AddAuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AddCount:%d,
+                                AddAuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AddCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAddAuctionItemInfo=tagGCAddAuctionItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAddAuctionItemInfo.Head.Cmd,m_NAtagGCAddAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAddAuctionItemInfo
+
+
+#------------------------------------------------------
+# B5 07 拍卖行关注的物品ID #tagGCAttentionAuctionItemID
+
+class  tagGCAttentionAuctionItemID(Structure):
+    Head = tagHead()
+    AttentionCount = 0    #(BYTE AttentionCount)
+    AttentionItemIDList = list()    #(vector<DWORD> AttentionItemIDList)// 关注的物品ID列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AttentionCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AttentionCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.AttentionItemIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x07
+        self.AttentionCount = 0
+        self.AttentionItemIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4 * self.AttentionCount
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AttentionCount)
+        for i in range(self.AttentionCount):
+            data = CommFunc.WriteDWORD(data, self.AttentionItemIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AttentionCount:%d,
+                                AttentionItemIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AttentionCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAttentionAuctionItemID=tagGCAttentionAuctionItemID()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemID.Head.Cmd,m_NAtagGCAttentionAuctionItemID.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemID
+
+
+#------------------------------------------------------
+# B5 06 拍卖行关注中的拍品信息 #tagGCAttentionAuctionItemInfo
+
+class  tagGCAttentionAuctionItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
+    ItemID = 0    #(DWORD ItemID)
+    ItemCount = 0    #(WORD ItemCount)
+    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
+    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
+    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
+    UserDataLen = 0    #(WORD UserDataLen)
+    UserData = ""    #(String UserData)//自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.FamilyID = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.AddTime = ""
+        self.BidderPrice = 0
+        self.BiddingTime = ""
+        self.UserDataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 4
+        length += 2
+        length += 19
+        length += 4
+        length += 19
+        length += 2
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemCount)
+        data = CommFunc.WriteString(data, 19, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.BidderPrice)
+        data = CommFunc.WriteString(data, 19, self.BiddingTime)
+        data = CommFunc.WriteWORD(data, self.UserDataLen)
+        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                FamilyID:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                AddTime:%s,
+                                BidderPrice:%d,
+                                BiddingTime:%s,
+                                UserDataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.FamilyID,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.AddTime,
+                                self.BidderPrice,
+                                self.BiddingTime,
+                                self.UserDataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagGCAttentionAuctionItemInfo(Structure):
+    Head = tagHead()
+    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
+    AuctionItemList = list()    #(vector<tagGCAttentionAuctionItem> AuctionItemList)//拍品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AuctionItemCount):
+            temAuctionItemList = tagGCAttentionAuctionItem()
+            _pos = temAuctionItemList.ReadData(_lpData, _pos)
+            self.AuctionItemList.append(temAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x06
+        self.AuctionItemCount = 0
+        self.AuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.AuctionItemCount):
+            length += self.AuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
+        for i in range(self.AuctionItemCount):
+            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AuctionItemCount:%d,
+                                AuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AuctionItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAttentionAuctionItemInfo=tagGCAttentionAuctionItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAttentionAuctionItemInfo.Head.Cmd,m_NAtagGCAttentionAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAttentionAuctionItemInfo
+
+
+#------------------------------------------------------
+# B5 01 拍卖行拍卖中的物品信息 #tagGCAuctionItemInfo
+
+class  tagGCAuctionItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
+    ItemID = 0    #(DWORD ItemID)
+    ItemCount = 0    #(WORD ItemCount)
+    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
+    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
+    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
+    UserDataLen = 0    #(WORD UserDataLen)
+    UserData = ""    #(String UserData)//自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.FamilyID = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.AddTime = ""
+        self.BidderPrice = 0
+        self.BiddingTime = ""
+        self.UserDataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 4
+        length += 2
+        length += 19
+        length += 4
+        length += 19
+        length += 2
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemCount)
+        data = CommFunc.WriteString(data, 19, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.BidderPrice)
+        data = CommFunc.WriteString(data, 19, self.BiddingTime)
+        data = CommFunc.WriteWORD(data, self.UserDataLen)
+        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                FamilyID:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                AddTime:%s,
+                                BidderPrice:%d,
+                                BiddingTime:%s,
+                                UserDataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.FamilyID,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.AddTime,
+                                self.BidderPrice,
+                                self.BiddingTime,
+                                self.UserDataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagGCAuctionItemInfo(Structure):
+    Head = tagHead()
+    Job = 0    #(BYTE Job)//过滤职业,0为不限制
+    ItemTypeCount = 0    #(BYTE ItemTypeCount)
+    ItemTypeList = list()    #(vector<DWORD> ItemTypeList)//指定的物品类型
+    ClassLV = 0    #(BYTE ClassLV)//过滤阶数,0为不限制
+    SpecItemIDCount = 0    #(BYTE SpecItemIDCount)//指定物品ID个数
+    SpecItemIDList = list()    #(vector<DWORD> SpecItemIDList)//指定物品ID
+    FromItemGUID = ""    #(char FromItemGUID[40])//从哪个物品开始查询
+    QueryDir = 0    #(BYTE QueryDir)//查询方向,1-往后查,2-往前查,3-定位查询
+    QueryCount = 0    #(BYTE QueryCount)//查询个数,0为全部
+    QueryRemainlCount = 0    #(WORD QueryRemainlCount)//查询条件对应查询方向剩余个数
+    AuctionItemCount = 0    #(BYTE AuctionItemCount)//返回拍品数量
+    AuctionItemList = list()    #(vector<tagGCAuctionItem> AuctionItemList)//返回拍品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ItemTypeCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.ItemTypeList.append(value)
+        self.ClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SpecItemIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SpecItemIDCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.SpecItemIDList.append(value)
+        self.FromItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.QueryDir,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.QueryCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.QueryRemainlCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AuctionItemCount):
+            temAuctionItemList = tagGCAuctionItem()
+            _pos = temAuctionItemList.ReadData(_lpData, _pos)
+            self.AuctionItemList.append(temAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x01
+        self.Job = 0
+        self.ItemTypeCount = 0
+        self.ItemTypeList = list()
+        self.ClassLV = 0
+        self.SpecItemIDCount = 0
+        self.SpecItemIDList = list()
+        self.FromItemGUID = ""
+        self.QueryDir = 0
+        self.QueryCount = 0
+        self.QueryRemainlCount = 0
+        self.AuctionItemCount = 0
+        self.AuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4 * self.ItemTypeCount
+        length += 1
+        length += 1
+        length += 4 * self.SpecItemIDCount
+        length += 40
+        length += 1
+        length += 1
+        length += 2
+        length += 1
+        for i in range(self.AuctionItemCount):
+            length += self.AuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteBYTE(data, self.ItemTypeCount)
+        for i in range(self.ItemTypeCount):
+            data = CommFunc.WriteDWORD(data, self.ItemTypeList[i])
+        data = CommFunc.WriteBYTE(data, self.ClassLV)
+        data = CommFunc.WriteBYTE(data, self.SpecItemIDCount)
+        for i in range(self.SpecItemIDCount):
+            data = CommFunc.WriteDWORD(data, self.SpecItemIDList[i])
+        data = CommFunc.WriteString(data, 40, self.FromItemGUID)
+        data = CommFunc.WriteBYTE(data, self.QueryDir)
+        data = CommFunc.WriteBYTE(data, self.QueryCount)
+        data = CommFunc.WriteWORD(data, self.QueryRemainlCount)
+        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
+        for i in range(self.AuctionItemCount):
+            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Job:%d,
+                                ItemTypeCount:%d,
+                                ItemTypeList:%s,
+                                ClassLV:%d,
+                                SpecItemIDCount:%d,
+                                SpecItemIDList:%s,
+                                FromItemGUID:%s,
+                                QueryDir:%d,
+                                QueryCount:%d,
+                                QueryRemainlCount:%d,
+                                AuctionItemCount:%d,
+                                AuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Job,
+                                self.ItemTypeCount,
+                                "...",
+                                self.ClassLV,
+                                self.SpecItemIDCount,
+                                "...",
+                                self.FromItemGUID,
+                                self.QueryDir,
+                                self.QueryCount,
+                                self.QueryRemainlCount,
+                                self.AuctionItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCAuctionItemInfo=tagGCAuctionItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAuctionItemInfo.Head.Cmd,m_NAtagGCAuctionItemInfo.Head.SubCmd))] = m_NAtagGCAuctionItemInfo
+
+
+#------------------------------------------------------
+# B5 10 拍卖行玩家竞价中的物品信息 #tagGCBiddingItemInfo
+
+class  tagGCBiddingItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
+    ItemID = 0    #(DWORD ItemID)
+    ItemCount = 0    #(WORD ItemCount)
+    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
+    BidderID = 0    #(DWORD BidderID)//竞拍玩家ID,也就是当前最高竞价玩家ID
+    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
+    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
+    UserDataLen = 0    #(WORD UserDataLen)
+    UserData = ""    #(String UserData)//自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.FamilyID = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.AddTime = ""
+        self.BidderID = 0
+        self.BidderPrice = 0
+        self.BiddingTime = ""
+        self.UserDataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 4
+        length += 2
+        length += 19
+        length += 4
+        length += 4
+        length += 19
+        length += 2
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemCount)
+        data = CommFunc.WriteString(data, 19, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.BidderID)
+        data = CommFunc.WriteDWORD(data, self.BidderPrice)
+        data = CommFunc.WriteString(data, 19, self.BiddingTime)
+        data = CommFunc.WriteWORD(data, self.UserDataLen)
+        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                FamilyID:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                AddTime:%s,
+                                BidderID:%d,
+                                BidderPrice:%d,
+                                BiddingTime:%s,
+                                UserDataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.FamilyID,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.AddTime,
+                                self.BidderID,
+                                self.BidderPrice,
+                                self.BiddingTime,
+                                self.UserDataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagGCBiddingItemInfo(Structure):
+    Head = tagHead()
+    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
+    AuctionItemList = list()    #(vector<tagGCBiddingItem> AuctionItemList)//拍品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x10
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AuctionItemCount):
+            temAuctionItemList = tagGCBiddingItem()
+            _pos = temAuctionItemList.ReadData(_lpData, _pos)
+            self.AuctionItemList.append(temAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x10
+        self.AuctionItemCount = 0
+        self.AuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.AuctionItemCount):
+            length += self.AuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
+        for i in range(self.AuctionItemCount):
+            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AuctionItemCount:%d,
+                                AuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AuctionItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCBiddingItemInfo=tagGCBiddingItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBiddingItemInfo.Head.Cmd,m_NAtagGCBiddingItemInfo.Head.SubCmd))] = m_NAtagGCBiddingItemInfo
+
+
+#------------------------------------------------------
+# B5 09 拍卖行清除拍品 #tagGCClearAuctionItemInfo
+
+class  tagGCClearAuctionItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s
+                                '''\
+                                %(
+                                self.ItemGUID
+                                )
+        return DumpString
+
+
+class  tagGCClearAuctionItemInfo(Structure):
+    Head = tagHead()
+    ClearCount = 0    #(BYTE ClearCount)
+    ClearAuctionItemList = list()    #(vector<tagGCClearAuctionItem> ClearAuctionItemList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ClearCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ClearCount):
+            temClearAuctionItemList = tagGCClearAuctionItem()
+            _pos = temClearAuctionItemList.ReadData(_lpData, _pos)
+            self.ClearAuctionItemList.append(temClearAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x09
+        self.ClearCount = 0
+        self.ClearAuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.ClearCount):
+            length += self.ClearAuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ClearCount)
+        for i in range(self.ClearCount):
+            data = CommFunc.WriteString(data, self.ClearAuctionItemList[i].GetLength(), self.ClearAuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ClearCount:%d,
+                                ClearAuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ClearCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCClearAuctionItemInfo=tagGCClearAuctionItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAuctionItemInfo.Head.Cmd,m_NAtagGCClearAuctionItemInfo.Head.SubCmd))] = m_NAtagGCClearAuctionItemInfo
+
+
+#------------------------------------------------------
+# B5 11 部位升星自动购买拍品消耗信息 #tagGCEquipStarAutoBuyCostInfo
+
+class  tagGCEquipStarAutoBuyCostInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ClassLV", c_ubyte),    # 当前要升星的境界阶
+                  ("EquipPlace", c_ubyte),    #当前要升星的装备位
+                  ("CurStar", c_ubyte),    #当前星级
+                  ("CurRate", c_ubyte),    #当前自动购买后的总概率,不满100则代表拍品库存不足
+                  ("AutoBuyCostMoney", c_int),    #自动购买所需总消耗
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB5
+        self.SubCmd = 0x11
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB5
+        self.SubCmd = 0x11
+        self.ClassLV = 0
+        self.EquipPlace = 0
+        self.CurStar = 0
+        self.CurRate = 0
+        self.AutoBuyCostMoney = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCEquipStarAutoBuyCostInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B5 11 部位升星自动购买拍品消耗信息 //tagGCEquipStarAutoBuyCostInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ClassLV:%d,
+                                EquipPlace:%d,
+                                CurStar:%d,
+                                CurRate:%d,
+                                AutoBuyCostMoney:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ClassLV,
+                                self.EquipPlace,
+                                self.CurStar,
+                                self.CurRate,
+                                self.AutoBuyCostMoney
+                                )
+        return DumpString
+
+
+m_NAtagGCEquipStarAutoBuyCostInfo=tagGCEquipStarAutoBuyCostInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEquipStarAutoBuyCostInfo.Cmd,m_NAtagGCEquipStarAutoBuyCostInfo.SubCmd))] = m_NAtagGCEquipStarAutoBuyCostInfo
+
+
+#------------------------------------------------------
+# B5 05 拍卖行仙盟拍卖中的物品信息 #tagGCFamilyAuctionItemInfo
+
+class  tagGCFamilyAuctionItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
+    ItemID = 0    #(DWORD ItemID)
+    ItemCount = 0    #(WORD ItemCount)
+    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
+    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
+    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
+    UserDataLen = 0    #(WORD UserDataLen)
+    UserData = ""    #(String UserData)//自定义数据
+    FamilyPlayerIDLen = 0    #(WORD FamilyPlayerIDLen)
+    FamilyPlayerIDInfo = ""    #(String FamilyPlayerIDInfo)//可获得收益的仙盟玩家ID信息
+    AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
+        self.FamilyPlayerIDLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FamilyPlayerIDInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.FamilyPlayerIDLen)
+        self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.FamilyID = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.AddTime = ""
+        self.BidderPrice = 0
+        self.BiddingTime = ""
+        self.UserDataLen = 0
+        self.UserData = ""
+        self.FamilyPlayerIDLen = 0
+        self.FamilyPlayerIDInfo = ""
+        self.AuctionType = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 4
+        length += 2
+        length += 19
+        length += 4
+        length += 19
+        length += 2
+        length += len(self.UserData)
+        length += 2
+        length += len(self.FamilyPlayerIDInfo)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemCount)
+        data = CommFunc.WriteString(data, 19, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.BidderPrice)
+        data = CommFunc.WriteString(data, 19, self.BiddingTime)
+        data = CommFunc.WriteWORD(data, self.UserDataLen)
+        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
+        data = CommFunc.WriteWORD(data, self.FamilyPlayerIDLen)
+        data = CommFunc.WriteString(data, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo)
+        data = CommFunc.WriteBYTE(data, self.AuctionType)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                FamilyID:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                AddTime:%s,
+                                BidderPrice:%d,
+                                BiddingTime:%s,
+                                UserDataLen:%d,
+                                UserData:%s,
+                                FamilyPlayerIDLen:%d,
+                                FamilyPlayerIDInfo:%s,
+                                AuctionType:%d
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.FamilyID,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.AddTime,
+                                self.BidderPrice,
+                                self.BiddingTime,
+                                self.UserDataLen,
+                                self.UserData,
+                                self.FamilyPlayerIDLen,
+                                self.FamilyPlayerIDInfo,
+                                self.AuctionType
+                                )
+        return DumpString
+
+
+class  tagGCFamilyAuctionItemInfo(Structure):
+    Head = tagHead()
+    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
+    AuctionItemList = list()    #(vector<tagGCFamilyAuctionItem> AuctionItemList)//拍品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AuctionItemCount):
+            temAuctionItemList = tagGCFamilyAuctionItem()
+            _pos = temAuctionItemList.ReadData(_lpData, _pos)
+            self.AuctionItemList.append(temAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x05
+        self.AuctionItemCount = 0
+        self.AuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.AuctionItemCount):
+            length += self.AuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
+        for i in range(self.AuctionItemCount):
+            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AuctionItemCount:%d,
+                                AuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AuctionItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyAuctionItemInfo=tagGCFamilyAuctionItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyAuctionItemInfo.Head.Cmd,m_NAtagGCFamilyAuctionItemInfo.Head.SubCmd))] = m_NAtagGCFamilyAuctionItemInfo
+
+
+#------------------------------------------------------
+# B5 02 拍卖行玩家拍卖中的物品信息 #tagGCPlayerAuctionItemInfo
+
+class  tagGCPlayerAuctionItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
+    ItemID = 0    #(DWORD ItemID)
+    ItemCount = 0    #(WORD ItemCount)
+    AddTime = ""    #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss
+    BidderPrice = 0    #(DWORD BidderPrice)//竞拍玩家出价
+    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
+    UserDataLen = 0    #(WORD UserDataLen)
+    UserData = ""    #(String UserData)//自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.FamilyID = 0
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.AddTime = ""
+        self.BidderPrice = 0
+        self.BiddingTime = ""
+        self.UserDataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 4
+        length += 2
+        length += 19
+        length += 4
+        length += 19
+        length += 2
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemCount)
+        data = CommFunc.WriteString(data, 19, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.BidderPrice)
+        data = CommFunc.WriteString(data, 19, self.BiddingTime)
+        data = CommFunc.WriteWORD(data, self.UserDataLen)
+        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                FamilyID:%d,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                AddTime:%s,
+                                BidderPrice:%d,
+                                BiddingTime:%s,
+                                UserDataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.FamilyID,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.AddTime,
+                                self.BidderPrice,
+                                self.BiddingTime,
+                                self.UserDataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagGCPlayerAuctionItemInfo(Structure):
+    Head = tagHead()
+    AuctionItemCount = 0    #(BYTE AuctionItemCount)//拍品数量
+    AuctionItemList = list()    #(vector<tagGCPlayerAuctionItem> AuctionItemList)//拍品列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.AuctionItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AuctionItemCount):
+            temAuctionItemList = tagGCPlayerAuctionItem()
+            _pos = temAuctionItemList.ReadData(_lpData, _pos)
+            self.AuctionItemList.append(temAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x02
+        self.AuctionItemCount = 0
+        self.AuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.AuctionItemCount):
+            length += self.AuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AuctionItemCount)
+        for i in range(self.AuctionItemCount):
+            data = CommFunc.WriteString(data, self.AuctionItemList[i].GetLength(), self.AuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                AuctionItemCount:%d,
+                                AuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.AuctionItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCPlayerAuctionItemInfo=tagGCPlayerAuctionItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionItemInfo.Head.Cmd,m_NAtagGCPlayerAuctionItemInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionItemInfo
+
+
+#------------------------------------------------------
+# B5 03 拍卖行玩家拍卖记录 #tagGCPlayerAuctionRecordInfo
+
+class  tagGCPlayerAuctionRecord(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    FamilyID = 0    #(DWORD FamilyID)//有值时为仙盟拍品
+    RecordType = 0    #(BYTE RecordType)//记录类型 0-我的拍品记录 1-仙盟拍品记录 2-我的竞拍记录
+    RecordResult = 0    #(BYTE RecordResult)//记录结果 0-流拍 1-拍卖成交 2-回收 3-竞价成功 4-竞价失败
+    RecordTime = ""    #(char RecordTime[19])//记录时间 yyyy-MM-dd hh:mm:ss
+    BidderPrice = 0    #(DWORD BidderPrice)//成交价格
+    BidderName = ""    #(char BidderName[33])//成交玩家名
+    ItemID = 0    #(DWORD ItemID)
+    ItemCount = 0    #(WORD ItemCount)
+    UserDataLen = 0    #(WORD UserDataLen)
+    UserData = ""    #(String UserData)//自定义数据
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RecordResult,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RecordTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BidderName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.FamilyID = 0
+        self.RecordType = 0
+        self.RecordResult = 0
+        self.RecordTime = ""
+        self.BidderPrice = 0
+        self.BidderName = ""
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.UserDataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 4
+        length += 1
+        length += 1
+        length += 19
+        length += 4
+        length += 33
+        length += 4
+        length += 2
+        length += 2
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.RecordType)
+        data = CommFunc.WriteBYTE(data, self.RecordResult)
+        data = CommFunc.WriteString(data, 19, self.RecordTime)
+        data = CommFunc.WriteDWORD(data, self.BidderPrice)
+        data = CommFunc.WriteString(data, 33, self.BidderName)
+        data = CommFunc.WriteDWORD(data, self.ItemID)
+        data = CommFunc.WriteWORD(data, self.ItemCount)
+        data = CommFunc.WriteWORD(data, self.UserDataLen)
+        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                FamilyID:%d,
+                                RecordType:%d,
+                                RecordResult:%d,
+                                RecordTime:%s,
+                                BidderPrice:%d,
+                                BidderName:%s,
+                                ItemID:%d,
+                                ItemCount:%d,
+                                UserDataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.FamilyID,
+                                self.RecordType,
+                                self.RecordResult,
+                                self.RecordTime,
+                                self.BidderPrice,
+                                self.BidderName,
+                                self.ItemID,
+                                self.ItemCount,
+                                self.UserDataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagGCPlayerAuctionRecordInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    AuctionRecordList = list()    #(vector<tagGCPlayerAuctionRecord> AuctionRecordList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temAuctionRecordList = tagGCPlayerAuctionRecord()
+            _pos = temAuctionRecordList.ReadData(_lpData, _pos)
+            self.AuctionRecordList.append(temAuctionRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x03
+        self.Count = 0
+        self.AuctionRecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.AuctionRecordList[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.AuctionRecordList[i].GetLength(), self.AuctionRecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                AuctionRecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCPlayerAuctionRecordInfo=tagGCPlayerAuctionRecordInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerAuctionRecordInfo.Head.Cmd,m_NAtagGCPlayerAuctionRecordInfo.Head.SubCmd))] = m_NAtagGCPlayerAuctionRecordInfo
+
+
+#------------------------------------------------------
+# B5 08 拍卖行刷新拍品 #tagGCRefreshAuctionItemInfo
+
+class  tagGCRefreshAuctionItem(Structure):
+    ItemGUID = ""    #(char ItemGUID[40])
+    AuctionType = 0    #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
+    AddTime = ""    #(char AddTime[19])//上架时间
+    BidderID = 0    #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID	
+    BidderPrice = 0    #(DWORD BidderPrice)//最高竞拍价格
+    BiddingTime = ""    #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
+        self.AuctionType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        return _pos
+
+    def Clear(self):
+        self.ItemGUID = ""
+        self.AuctionType = 0
+        self.AddTime = ""
+        self.BidderID = 0
+        self.BidderPrice = 0
+        self.BiddingTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 40
+        length += 1
+        length += 19
+        length += 4
+        length += 4
+        length += 19
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 40, self.ItemGUID)
+        data = CommFunc.WriteBYTE(data, self.AuctionType)
+        data = CommFunc.WriteString(data, 19, self.AddTime)
+        data = CommFunc.WriteDWORD(data, self.BidderID)
+        data = CommFunc.WriteDWORD(data, self.BidderPrice)
+        data = CommFunc.WriteString(data, 19, self.BiddingTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ItemGUID:%s,
+                                AuctionType:%d,
+                                AddTime:%s,
+                                BidderID:%d,
+                                BidderPrice:%d,
+                                BiddingTime:%s
+                                '''\
+                                %(
+                                self.ItemGUID,
+                                self.AuctionType,
+                                self.AddTime,
+                                self.BidderID,
+                                self.BidderPrice,
+                                self.BiddingTime
+                                )
+        return DumpString
+
+
+class  tagGCRefreshAuctionItemInfo(Structure):
+    Head = tagHead()
+    RefreshCount = 0    #(BYTE RefreshCount)
+    RefreshAuctionItemList = list()    #(vector<tagGCRefreshAuctionItem> RefreshAuctionItemList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RefreshCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RefreshCount):
+            temRefreshAuctionItemList = tagGCRefreshAuctionItem()
+            _pos = temRefreshAuctionItemList.ReadData(_lpData, _pos)
+            self.RefreshAuctionItemList.append(temRefreshAuctionItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB5
+        self.Head.SubCmd = 0x08
+        self.RefreshCount = 0
+        self.RefreshAuctionItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.RefreshCount):
+            length += self.RefreshAuctionItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RefreshCount)
+        for i in range(self.RefreshCount):
+            data = CommFunc.WriteString(data, self.RefreshAuctionItemList[i].GetLength(), self.RefreshAuctionItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RefreshCount:%d,
+                                RefreshAuctionItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RefreshCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCRefreshAuctionItemInfo=tagGCRefreshAuctionItemInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRefreshAuctionItemInfo.Head.Cmd,m_NAtagGCRefreshAuctionItemInfo.Head.SubCmd))] = m_NAtagGCRefreshAuctionItemInfo
+
+
+#------------------------------------------------------
+# B9 13 进入组队副本失败原因 #tagGCEnterTeamFBFailReason
+
+class  tagGCEnterTeamFBFailReason(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("MapID", c_int),    # 请求进入的地图ID
+                  ("AskType", c_ubyte),    # 请求类型: 0-匹配请求;1-进入请求
+                  ("Reason", c_ubyte),    # 失败原因:2-次数不足;3-进入CD中;6-门票不足
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        self.SubCmd = 0x13
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB9
+        self.SubCmd = 0x13
+        self.MapID = 0
+        self.AskType = 0
+        self.Reason = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCEnterTeamFBFailReason)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 13 进入组队副本失败原因 //tagGCEnterTeamFBFailReason:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                MapID:%d,
+                                AskType:%d,
+                                Reason:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.MapID,
+                                self.AskType,
+                                self.Reason
+                                )
+        return DumpString
+
+
+m_NAtagGCEnterTeamFBFailReason=tagGCEnterTeamFBFailReason()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEnterTeamFBFailReason.Cmd,m_NAtagGCEnterTeamFBFailReason.SubCmd))] = m_NAtagGCEnterTeamFBFailReason
+
+
+#------------------------------------------------------
 # B9 23 功能队伍解散 #tagMCFuncTeamDissolve
 
 class  tagMCFuncTeamDissolve(Structure):
@@ -60943,6 +53271,317 @@
 
 
 #------------------------------------------------------
+# B9 01 收到邀请加入队伍信息 #tagGCInviteJoinTeamInfo
+
+class  tagGCInviteJoinTeamInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 发起邀请的玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 发起邀请的玩家名,size = NameLen
+    LV = 0    #(WORD LV)// 玩家等级
+    Job = 0    #(BYTE Job)// 玩家职业
+    JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
+    RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
+    TagMapID = 0    #(DWORD TagMapID)// 目标地图
+    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.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.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x01
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.LV = 0
+        self.Job = 0
+        self.JobLevel = 0
+        self.RealmLV = 0
+        self.TagMapID = 0
+        self.TagMapEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 4
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        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.WriteBYTE(data, self.JobLevel)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.TagMapID)
+        data = CommFunc.WriteWORD(data, self.TagMapEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                JobLevel:%d,
+                                RealmLV:%d,
+                                TagMapID:%d,
+                                TagMapEx:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.JobLevel,
+                                self.RealmLV,
+                                self.TagMapID,
+                                self.TagMapEx
+                                )
+        return DumpString
+
+
+m_NAtagGCInviteJoinTeamInfo=tagGCInviteJoinTeamInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCInviteJoinTeamInfo.Head.Cmd,m_NAtagGCInviteJoinTeamInfo.Head.SubCmd))] = m_NAtagGCInviteJoinTeamInfo
+
+
+#------------------------------------------------------
+# B9 09 组队目标队伍信息列表 #tagGCTagMapTeamList
+
+class  tagGCTagMapTeam(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 队长名称
+    LV = 0    #(WORD LV)// 队长等级
+    Job = 0    #(BYTE Job)// 队长职业
+    JobLevel = 0    #(BYTE JobLevel)// 队长职业阶级
+    RealmLV = 0    #(WORD RealmLV)// 队长境界等级
+    MemberCount = 0    #(BYTE MemberCount)// 队伍人数
+    ReqMinLV = 0    #(WORD ReqMinLV)// 队员最低等级限制
+    ReqMaxLV = 0    #(WORD ReqMaxLV)// 队员最高等级限制
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.LV = 0
+        self.Job = 0
+        self.JobLevel = 0
+        self.RealmLV = 0
+        self.MemberCount = 0
+        self.ReqMinLV = 0
+        self.ReqMaxLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 1
+        length += 2
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteBYTE(data, self.JobLevel)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteBYTE(data, self.MemberCount)
+        data = CommFunc.WriteWORD(data, self.ReqMinLV)
+        data = CommFunc.WriteWORD(data, self.ReqMaxLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                LV:%d,
+                                Job:%d,
+                                JobLevel:%d,
+                                RealmLV:%d,
+                                MemberCount:%d,
+                                ReqMinLV:%d,
+                                ReqMaxLV:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.LV,
+                                self.Job,
+                                self.JobLevel,
+                                self.RealmLV,
+                                self.MemberCount,
+                                self.ReqMinLV,
+                                self.ReqMaxLV
+                                )
+        return DumpString
+
+
+class  tagGCTagMapTeamList(Structure):
+    Head = tagHead()
+    TagMapID = 0    #(DWORD TagMapID)// 目标地图
+    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
+    IsTagEx = 0    #(BYTE IsTagEx)// 是否对应目标扩展的; 0否1是
+    MatchState = 0    #(BYTE MatchState)// 0-全部;1-匹配中的;
+    TeamCount = 0    #(BYTE TeamCount)
+    TeamList = list()    #(vector<tagGCTagMapTeam> TeamList)// 队伍列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsTagEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TeamCount):
+            temTeamList = tagGCTagMapTeam()
+            _pos = temTeamList.ReadData(_lpData, _pos)
+            self.TeamList.append(temTeamList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x09
+        self.TagMapID = 0
+        self.TagMapEx = 0
+        self.IsTagEx = 0
+        self.MatchState = 0
+        self.TeamCount = 0
+        self.TeamList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 2
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.TeamCount):
+            length += self.TeamList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.TagMapID)
+        data = CommFunc.WriteWORD(data, self.TagMapEx)
+        data = CommFunc.WriteBYTE(data, self.IsTagEx)
+        data = CommFunc.WriteBYTE(data, self.MatchState)
+        data = CommFunc.WriteBYTE(data, self.TeamCount)
+        for i in range(self.TeamCount):
+            data = CommFunc.WriteString(data, self.TeamList[i].GetLength(), self.TeamList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TagMapID:%d,
+                                TagMapEx:%d,
+                                IsTagEx:%d,
+                                MatchState:%d,
+                                TeamCount:%d,
+                                TeamList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TagMapID,
+                                self.TagMapEx,
+                                self.IsTagEx,
+                                self.MatchState,
+                                self.TeamCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCTagMapTeamList=tagGCTagMapTeamList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagMapTeamList.Head.Cmd,m_NAtagGCTagMapTeamList.Head.SubCmd))] = m_NAtagGCTagMapTeamList
+
+
+#------------------------------------------------------
 # B9 21 查找玩家功能队伍结果 #tagMCQueryPlayerFuncTeamRet
 
 class  tagMCQueryPlayerFuncTeamRet(Structure):
@@ -60999,6 +53638,6414 @@
 
 
 #------------------------------------------------------
+# B9 08 推荐组队的附近玩家信息 #tagGCRecommendNearbyPlayerList
+
+class  tagGCRecommendNearbyPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 玩家名,size = NameLen
+    LV = 0    #(WORD LV)// 玩家等级
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        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.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):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.LV = 0
+        self.Job = 0
+        self.JobLevel = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        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.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):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                JobLevel:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.JobLevel,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCRecommendNearbyPlayerList(Structure):
+    Head = tagHead()
+    PlayerCount = 0    #(BYTE PlayerCount)
+    PlayerList = list()    #(vector<tagGCRecommendNearbyPlayer> PlayerList)// 推荐玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x08
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temPlayerList = tagGCRecommendNearbyPlayer()
+            _pos = temPlayerList.ReadData(_lpData, _pos)
+            self.PlayerList.append(temPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x08
+        self.PlayerCount = 0
+        self.PlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.PlayerCount):
+            length += self.PlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerCount:%d,
+                                PlayerList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCRecommendNearbyPlayerList=tagGCRecommendNearbyPlayerList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendNearbyPlayerList.Head.Cmd,m_NAtagGCRecommendNearbyPlayerList.Head.SubCmd))] = m_NAtagGCRecommendNearbyPlayerList
+
+
+#------------------------------------------------------
+# B9 07 收到请求加入队伍信息 #tagGCRequestJoinTeam
+
+class  tagGCRequestJoinTeam(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)// 发起请求的玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 发起请求的玩家名,size = NameLen
+    LV = 0    #(WORD LV)// 玩家等级
+    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):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.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.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):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x07
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.LV = 0
+        self.Job = 0
+        self.JobLevel = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.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.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):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                LV:%d,
+                                Job:%d,
+                                JobLevel:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.LV,
+                                self.Job,
+                                self.JobLevel,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+m_NAtagGCRequestJoinTeam=tagGCRequestJoinTeam()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRequestJoinTeam.Head.Cmd,m_NAtagGCRequestJoinTeam.Head.SubCmd))] = m_NAtagGCRequestJoinTeam
+
+
+#------------------------------------------------------
+# B9 04 刷新场景队伍回应包 #tagGCSceneTeamRefresh
+
+class  tagGCSceneTeam(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 队长名称
+    LV = 0    #(WORD LV)// 队长等级
+    Job = 0    #(BYTE Job)// 队长职业
+    JobLevel = 0    #(BYTE JobLevel)// 队长职业阶级
+    RealmLV = 0    #(WORD RealmLV)// 队长境界等级
+    MemberCount = 0    #(BYTE MemberCount)// 队伍人数
+    TagMapID = 0    #(DWORD TagMapID)// 目标地图
+    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
+    ReqMinLV = 0    #(WORD ReqMinLV)// 队员最低等级限制
+    ReqMaxLV = 0    #(WORD ReqMaxLV)// 队员最高等级限制
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.LV = 0
+        self.Job = 0
+        self.JobLevel = 0
+        self.RealmLV = 0
+        self.MemberCount = 0
+        self.TagMapID = 0
+        self.TagMapEx = 0
+        self.ReqMinLV = 0
+        self.ReqMaxLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 1
+        length += 4
+        length += 2
+        length += 2
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteBYTE(data, self.JobLevel)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteBYTE(data, self.MemberCount)
+        data = CommFunc.WriteDWORD(data, self.TagMapID)
+        data = CommFunc.WriteWORD(data, self.TagMapEx)
+        data = CommFunc.WriteWORD(data, self.ReqMinLV)
+        data = CommFunc.WriteWORD(data, self.ReqMaxLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                LV:%d,
+                                Job:%d,
+                                JobLevel:%d,
+                                RealmLV:%d,
+                                MemberCount:%d,
+                                TagMapID:%d,
+                                TagMapEx:%d,
+                                ReqMinLV:%d,
+                                ReqMaxLV:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.LV,
+                                self.Job,
+                                self.JobLevel,
+                                self.RealmLV,
+                                self.MemberCount,
+                                self.TagMapID,
+                                self.TagMapEx,
+                                self.ReqMinLV,
+                                self.ReqMaxLV
+                                )
+        return DumpString
+
+
+class  tagGCSceneTeamRefresh(Structure):
+    Head = tagHead()
+    TeamCount = 0    #(BYTE TeamCount)
+    SceneTeamList = list()    #(vector<tagGCSceneTeam> SceneTeamList)// 场景队伍列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.TeamCount):
+            temSceneTeamList = tagGCSceneTeam()
+            _pos = temSceneTeamList.ReadData(_lpData, _pos)
+            self.SceneTeamList.append(temSceneTeamList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x04
+        self.TeamCount = 0
+        self.SceneTeamList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.TeamCount):
+            length += self.SceneTeamList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.TeamCount)
+        for i in range(self.TeamCount):
+            data = CommFunc.WriteString(data, self.SceneTeamList[i].GetLength(), self.SceneTeamList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TeamCount:%d,
+                                SceneTeamList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TeamCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCSceneTeamRefresh=tagGCSceneTeamRefresh()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSceneTeamRefresh.Head.Cmd,m_NAtagGCSceneTeamRefresh.Head.SubCmd))] = m_NAtagGCSceneTeamRefresh
+
+
+#------------------------------------------------------
+# B9 11 队员进入副本准备状态刷新 #tagGCTeamEnterFBPrepare
+
+class  tagGCTeamMemPrepareState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    
+                  ("PrepareState", c_ubyte),    # 状态,0-未准备,1-已准备,2-拒绝
+                  ]
+
+    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.PlayerID = 0
+        self.PrepareState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCTeamMemPrepareState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 11 队员进入副本准备状态刷新 //tagGCTeamEnterFBPrepare:
+                                PlayerID:%d,
+                                PrepareState:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PrepareState
+                                )
+        return DumpString
+
+
+class  tagGCTeamEnterFBPrepare(Structure):
+    Head = tagHead()
+    TagMapID = 0    #(DWORD TagMapID)// 目标地图,不一定是队伍目标
+    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
+    IsPrepareErr = 0    #(BYTE IsPrepareErr)// 是否准备异常(在所有队员都准备好后准备传入副本出现有队员最终不能进入的情况时该值为1)
+    MemCount = 0    #(BYTE MemCount)
+    MemStateList = list()    #(vector<tagGCTeamMemPrepareState> MemStateList)// 队员状态列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x11
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsPrepareErr,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MemCount):
+            temMemStateList = tagGCTeamMemPrepareState()
+            _pos = temMemStateList.ReadData(_lpData, _pos)
+            self.MemStateList.append(temMemStateList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x11
+        self.TagMapID = 0
+        self.TagMapEx = 0
+        self.IsPrepareErr = 0
+        self.MemCount = 0
+        self.MemStateList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 2
+        length += 1
+        length += 1
+        for i in range(self.MemCount):
+            length += self.MemStateList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.TagMapID)
+        data = CommFunc.WriteWORD(data, self.TagMapEx)
+        data = CommFunc.WriteBYTE(data, self.IsPrepareErr)
+        data = CommFunc.WriteBYTE(data, self.MemCount)
+        for i in range(self.MemCount):
+            data = CommFunc.WriteString(data, self.MemStateList[i].GetLength(), self.MemStateList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TagMapID:%d,
+                                TagMapEx:%d,
+                                IsPrepareErr:%d,
+                                MemCount:%d,
+                                MemStateList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TagMapID,
+                                self.TagMapEx,
+                                self.IsPrepareErr,
+                                self.MemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCTeamEnterFBPrepare=tagGCTeamEnterFBPrepare()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamEnterFBPrepare.Head.Cmd,m_NAtagGCTeamEnterFBPrepare.Head.SubCmd))] = m_NAtagGCTeamEnterFBPrepare
+
+
+#------------------------------------------------------
+# B9 03 队伍信息变更 #tagGCTeamInfoChange
+
+class  tagGCTeamInfoChange(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("TagMapID", c_int),    # 目标地图
+                  ("TagMapEx", c_ushort),    # 目标地图扩展
+                  ("ReqMinLV", c_ushort),    # 队员最低等级限制
+                  ("ReqMaxLV", c_ushort),    # 队员最高等级限制
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        self.SubCmd = 0x03
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB9
+        self.SubCmd = 0x03
+        self.TagMapID = 0
+        self.TagMapEx = 0
+        self.ReqMinLV = 0
+        self.ReqMaxLV = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCTeamInfoChange)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 03 队伍信息变更 //tagGCTeamInfoChange:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                TagMapID:%d,
+                                TagMapEx:%d,
+                                ReqMinLV:%d,
+                                ReqMaxLV:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.TagMapID,
+                                self.TagMapEx,
+                                self.ReqMinLV,
+                                self.ReqMaxLV
+                                )
+        return DumpString
+
+
+m_NAtagGCTeamInfoChange=tagGCTeamInfoChange()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamInfoChange.Cmd,m_NAtagGCTeamInfoChange.SubCmd))] = m_NAtagGCTeamInfoChange
+
+
+#------------------------------------------------------
+# B9 10 队伍或玩家匹配状态变更 #tagGCTeamMatchState
+
+class  tagGCTeamMatchState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsMatching", c_ubyte),    # 是否匹配中, 0否1是
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        self.SubCmd = 0x10
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB9
+        self.SubCmd = 0x10
+        self.IsMatching = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCTeamMatchState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 10 队伍或玩家匹配状态变更 //tagGCTeamMatchState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsMatching:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsMatching
+                                )
+        return DumpString
+
+
+m_NAtagGCTeamMatchState=tagGCTeamMatchState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMatchState.Cmd,m_NAtagGCTeamMatchState.SubCmd))] = m_NAtagGCTeamMatchState
+
+
+#------------------------------------------------------
+# B9 02 队伍成员信息刷新 #tagGCTeamMemberInfo
+
+class  tagGCTeamMember(Structure):
+    Index = 0    #(BYTE Index)// 队员编号
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    Name = ""    #(String Name)// 玩家名,size = NameLen
+    MemberLV = 0    #(BYTE MemberLV)// 成员等级, 0-普通成员, 2-队长
+    LV = 0    #(WORD LV)// 玩家等级
+    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
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Index,_pos = CommFunc.ReadBYTE(_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.MemberLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        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)
+        return _pos
+
+    def Clear(self):
+        self.Index = 0
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.Name = ""
+        self.MemberLV = 0
+        self.LV = 0
+        self.Job = 0
+        self.JobLevel = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.PlayerState = 0
+        self.MapID = 0
+        self.LineID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 1
+        length += len(self.Name)
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+        length += 1
+        length += 4
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Index)
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.Name)
+        data = CommFunc.WriteBYTE(data, self.MemberLV)
+        data = CommFunc.WriteWORD(data, self.LV)
+        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)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Index:%d,
+                                PlayerID:%d,
+                                NameLen:%d,
+                                Name:%s,
+                                MemberLV:%d,
+                                LV:%d,
+                                Job:%d,
+                                JobLevel:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                PlayerState:%d,
+                                MapID:%d,
+                                LineID:%d
+                                '''\
+                                %(
+                                self.Index,
+                                self.PlayerID,
+                                self.NameLen,
+                                self.Name,
+                                self.MemberLV,
+                                self.LV,
+                                self.Job,
+                                self.JobLevel,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic,
+                                self.PlayerState,
+                                self.MapID,
+                                self.LineID
+                                )
+        return DumpString
+
+
+class  tagGCTeamMemberInfo(Structure):
+    Head = tagHead()
+    TeamID = 0    #(DWORD TeamID)
+    TagMapID = 0    #(DWORD TagMapID)// 目标地图
+    TagMapEx = 0    #(WORD TagMapEx)// 目标地图扩展
+    ReqMinLV = 0    #(WORD ReqMinLV)// 队员最低等级限制
+    ReqMaxLV = 0    #(WORD ReqMaxLV)// 队员最高等级限制
+    MemberCount = 0    #(BYTE MemberCount)
+    MemberList = list()    #(vector<tagGCTeamMember> MemberList)// 成员列表, size = MemberCount
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x02
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TagMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TagMapEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ReqMinLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ReqMaxLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MemberCount):
+            temMemberList = tagGCTeamMember()
+            _pos = temMemberList.ReadData(_lpData, _pos)
+            self.MemberList.append(temMemberList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x02
+        self.TeamID = 0
+        self.TagMapID = 0
+        self.TagMapEx = 0
+        self.ReqMinLV = 0
+        self.ReqMaxLV = 0
+        self.MemberCount = 0
+        self.MemberList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 2
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.MemberCount):
+            length += self.MemberList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.TeamID)
+        data = CommFunc.WriteDWORD(data, self.TagMapID)
+        data = CommFunc.WriteWORD(data, self.TagMapEx)
+        data = CommFunc.WriteWORD(data, self.ReqMinLV)
+        data = CommFunc.WriteWORD(data, self.ReqMaxLV)
+        data = CommFunc.WriteBYTE(data, self.MemberCount)
+        for i in range(self.MemberCount):
+            data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TeamID:%d,
+                                TagMapID:%d,
+                                TagMapEx:%d,
+                                ReqMinLV:%d,
+                                ReqMaxLV:%d,
+                                MemberCount:%d,
+                                MemberList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TeamID,
+                                self.TagMapID,
+                                self.TagMapEx,
+                                self.ReqMinLV,
+                                self.ReqMaxLV,
+                                self.MemberCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCTeamMemberInfo=tagGCTeamMemberInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberInfo.Head.Cmd,m_NAtagGCTeamMemberInfo.Head.SubCmd))] = m_NAtagGCTeamMemberInfo
+
+
+#------------------------------------------------------
+# B9 05 队伍成员属性刷新 #tagGCTeamMemberRefreshProperty
+
+class  tagGCTeamMemberRefreshProperty(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("PlayerID", c_int),    
+                  ("RefreshType", c_ubyte),    #刷新类型,同0418属性类型
+                  ("Value", c_int),    
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xB9
+        self.SubCmd = 0x05
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xB9
+        self.SubCmd = 0x05
+        self.PlayerID = 0
+        self.RefreshType = 0
+        self.Value = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCTeamMemberRefreshProperty)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B9 05 队伍成员属性刷新 //tagGCTeamMemberRefreshProperty:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                PlayerID:%d,
+                                RefreshType:%d,
+                                Value:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.PlayerID,
+                                self.RefreshType,
+                                self.Value
+                                )
+        return DumpString
+
+
+m_NAtagGCTeamMemberRefreshProperty=tagGCTeamMemberRefreshProperty()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemberRefreshProperty.Cmd,m_NAtagGCTeamMemberRefreshProperty.SubCmd))] = m_NAtagGCTeamMemberRefreshProperty
+
+
+#------------------------------------------------------
+#  B9 12 队员功能数据查询结果 #tagGCTeamMemFuncDataList
+
+class  tagGCTeamMemFuncData(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    DataLen = 0    #(WORD DataLen)
+    MemFuncData = ""    #(String MemFuncData)// 队员对应功能数据查询结果
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.MemFuncData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.DataLen = 0
+        self.MemFuncData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 2
+        length += len(self.MemFuncData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteWORD(data, self.DataLen)
+        data = CommFunc.WriteString(data, self.DataLen, self.MemFuncData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                DataLen:%d,
+                                MemFuncData:%s
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.DataLen,
+                                self.MemFuncData
+                                )
+        return DumpString
+
+
+class  tagGCTeamMemFuncDataList(Structure):
+    Head = tagHead()
+    TeamMemFuncType = 0    #(BYTE TeamMemFuncType)// 查询队员的功能数据类型
+    MemCount = 0    #(BYTE MemCount)
+    MemFuncDataList = list()    #(vector<tagGCTeamMemFuncData> MemFuncDataList)// 数据列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TeamMemFuncType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MemCount):
+            temMemFuncDataList = tagGCTeamMemFuncData()
+            _pos = temMemFuncDataList.ReadData(_lpData, _pos)
+            self.MemFuncDataList.append(temMemFuncDataList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB9
+        self.Head.SubCmd = 0x12
+        self.TeamMemFuncType = 0
+        self.MemCount = 0
+        self.MemFuncDataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.MemCount):
+            length += self.MemFuncDataList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.TeamMemFuncType)
+        data = CommFunc.WriteBYTE(data, self.MemCount)
+        for i in range(self.MemCount):
+            data = CommFunc.WriteString(data, self.MemFuncDataList[i].GetLength(), self.MemFuncDataList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TeamMemFuncType:%d,
+                                MemCount:%d,
+                                MemFuncDataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TeamMemFuncType,
+                                self.MemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCTeamMemFuncDataList=tagGCTeamMemFuncDataList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTeamMemFuncDataList.Head.Cmd,m_NAtagGCTeamMemFuncDataList.Head.SubCmd))] = m_NAtagGCTeamMemFuncDataList
+
+
+#------------------------------------------------------
+# C0 23 跨服排位竞猜个人信息 #tagGCChampionshipGuessPriInfo
+
+class  tagGCChampionshipGuessPlayerPri(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    # 目标玩家ID
+                  ("MoneyTotal", c_int),    # 已投注该玩家货币总数
+                  ("GuessRank", c_ubyte),    # 竞猜名次,没有名次的竞猜默认0;1-代表第一名
+                  ]
+
+    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.PlayerID = 0
+        self.MoneyTotal = 0
+        self.GuessRank = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCChampionshipGuessPlayerPri)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 23 跨服排位竞猜个人信息 //tagGCChampionshipGuessPriInfo:
+                                PlayerID:%d,
+                                MoneyTotal:%d,
+                                GuessRank:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.MoneyTotal,
+                                self.GuessRank
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPriList(Structure):
+    GuessType = 0    #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位
+    PlayerCount = 0    #(BYTE PlayerCount)
+    GuessPlayerList = list()    #(vector<tagGCChampionshipGuessPlayerPri> GuessPlayerList)// 被竞猜玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temGuessPlayerList = tagGCChampionshipGuessPlayerPri()
+            _pos = temGuessPlayerList.ReadData(_lpData, _pos)
+            self.GuessPlayerList.append(temGuessPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.GuessType = 0
+        self.PlayerCount = 0
+        self.GuessPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        for i in range(self.PlayerCount):
+            length += self.GuessPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GuessType)
+        data = CommFunc.WriteBYTE(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GuessType:%d,
+                                PlayerCount:%d,
+                                GuessPlayerList:%s
+                                '''\
+                                %(
+                                self.GuessType,
+                                self.PlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPriInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 排位数据分区ID
+    Count = 0    #(BYTE Count)
+    GuessList = list()    #(vector<tagGCChampionshipGuessPriList> GuessList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x23
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temGuessList = tagGCChampionshipGuessPriList()
+            _pos = temGuessList.ReadData(_lpData, _pos)
+            self.GuessList.append(temGuessList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x23
+        self.ZoneID = 0
+        self.Count = 0
+        self.GuessList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.Count):
+            length += self.GuessList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                Count:%d,
+                                GuessList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipGuessPriInfo=tagGCChampionshipGuessPriInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPriInfo.Head.Cmd,m_NAtagGCChampionshipGuessPriInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPriInfo
+
+
+#------------------------------------------------------
+# C0 22 跨服排位竞猜公共信息 #tagGCChampionshipGuessPubInfo
+
+class  tagGCChampionshipGuessPlayerPub(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    # 目标玩家ID
+                  ("SupportCount", 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.PlayerID = 0
+        self.SupportCount = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCChampionshipGuessPlayerPub)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 22 跨服排位竞猜公共信息 //tagGCChampionshipGuessPubInfo:
+                                PlayerID:%d,
+                                SupportCount:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.SupportCount
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPubList(Structure):
+    GuessType = 0    #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位
+    PlayerCount = 0    #(BYTE PlayerCount)
+    GuessPlayerList = list()    #(vector<tagGCChampionshipGuessPlayerPub> GuessPlayerList)// 被竞猜玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temGuessPlayerList = tagGCChampionshipGuessPlayerPub()
+            _pos = temGuessPlayerList.ReadData(_lpData, _pos)
+            self.GuessPlayerList.append(temGuessPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.GuessType = 0
+        self.PlayerCount = 0
+        self.GuessPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        for i in range(self.PlayerCount):
+            length += self.GuessPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GuessType)
+        data = CommFunc.WriteBYTE(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GuessType:%d,
+                                PlayerCount:%d,
+                                GuessPlayerList:%s
+                                '''\
+                                %(
+                                self.GuessType,
+                                self.PlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipGuessPubInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 排位数据分区ID
+    Count = 0    #(BYTE Count)
+    GuessList = list()    #(vector<tagGCChampionshipGuessPubList> GuessList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x22
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temGuessList = tagGCChampionshipGuessPubList()
+            _pos = temGuessList.ReadData(_lpData, _pos)
+            self.GuessList.append(temGuessList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x22
+        self.ZoneID = 0
+        self.Count = 0
+        self.GuessList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.Count):
+            length += self.GuessList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                Count:%d,
+                                GuessList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipGuessPubInfo=tagGCChampionshipGuessPubInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPubInfo.Head.Cmd,m_NAtagGCChampionshipGuessPubInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPubInfo
+
+
+#------------------------------------------------------
+# C0 19 跨服排位仙官申请回应结果 #tagGCChampionshipOfficialApplyReplyRet
+
+class  tagGCChampionshipOfficialApplyReplyRet(Structure):
+    Head = tagHead()
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 界主玩家名
+    MainOfficialID = 0    #(WORD MainOfficialID)//界主官职ID
+    OfficialID = 0    #(WORD OfficialID)//申请官职ID
+    IsOK = 0    #(BYTE IsOK)//是否同意;1-是;0-否
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x19
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x19
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.IsOK = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        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.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.MainOfficialID)
+        data = CommFunc.WriteWORD(data, self.OfficialID)
+        data = CommFunc.WriteBYTE(data, self.IsOK)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                IsOK:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.NameLen,
+                                self.PlayerName,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.IsOK
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialApplyReplyRet=tagGCChampionshipOfficialApplyReplyRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialApplyReplyRet.Head.Cmd,m_NAtagGCChampionshipOfficialApplyReplyRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialApplyReplyRet
+
+
+#------------------------------------------------------
+# C0 21 跨服排位仙官挑战记录 #tagGCChampionshipOfficialChallengeRecordInfo
+
+class  tagGCChampionshipOfficialChallengeRecord(Structure):
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    ChallengeTime = 0    #(DWORD ChallengeTime)//挑战时间戳
+    Ret = 0    #(BYTE Ret)//挑战结果;0-失败;1-获胜;
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.ChallengeTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.ChallengeTime = 0
+        self.Ret = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += len(self.PlayerName)
+        length += 4
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteDWORD(data, self.ChallengeTime)
+        data = CommFunc.WriteBYTE(data, self.Ret)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NameLen:%d,
+                                PlayerName:%s,
+                                ChallengeTime:%d,
+                                Ret:%d
+                                '''\
+                                %(
+                                self.NameLen,
+                                self.PlayerName,
+                                self.ChallengeTime,
+                                self.Ret
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipOfficialChallengeRecordInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 分区ID
+    MainOfficialID = 0    #(WORD MainOfficialID)// 界主官职ID
+    OfficialID = 0    #(WORD OfficialID)// 记录的官职ID
+    RecordCount = 0    #(BYTE RecordCount)// 挑战记录数
+    RecordList = list()    #(vector<tagGCChampionshipOfficialChallengeRecord> RecordList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x21
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RecordCount):
+            temRecordList = tagGCChampionshipOfficialChallengeRecord()
+            _pos = temRecordList.ReadData(_lpData, _pos)
+            self.RecordList.append(temRecordList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x21
+        self.ZoneID = 0
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.RecordCount = 0
+        self.RecordList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.RecordCount):
+            length += self.RecordList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteWORD(data, self.MainOfficialID)
+        data = CommFunc.WriteWORD(data, self.OfficialID)
+        data = CommFunc.WriteBYTE(data, self.RecordCount)
+        for i in range(self.RecordCount):
+            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                RecordCount:%d,
+                                RecordList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.RecordCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialChallengeRecordInfo=tagGCChampionshipOfficialChallengeRecordInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRecordInfo
+
+
+#------------------------------------------------------
+# C0 20 跨服排位仙官挑战结果 #tagGCChampionshipOfficialChallengeRet
+
+class  tagGCChampionshipOfficialChallengeRet(Structure):
+    Head = tagHead()
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 原仙官玩家名,可能为空,代表本来无玩家
+    MainOfficialID = 0    #(WORD MainOfficialID)//界主官职ID
+    OfficialID = 0    #(WORD OfficialID)//挑战的官职ID
+    Ret = 0    #(BYTE Ret)//挑战结果;0-失败;1-获胜;2-目标仙官玩家ID已变更,可刷新后重试
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x20
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.MainOfficialID = 0
+        self.OfficialID = 0
+        self.Ret = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        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.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.MainOfficialID)
+        data = CommFunc.WriteWORD(data, self.OfficialID)
+        data = CommFunc.WriteBYTE(data, self.Ret)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                MainOfficialID:%d,
+                                OfficialID:%d,
+                                Ret:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.NameLen,
+                                self.PlayerName,
+                                self.MainOfficialID,
+                                self.OfficialID,
+                                self.Ret
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialChallengeRet=tagGCChampionshipOfficialChallengeRet()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRet.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRet
+
+
+#------------------------------------------------------
+# C0 18 跨服排位官职信息 #tagGCChampionshipOfficialInfo
+
+class  tagGCChampionshipOfficialPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)// 玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    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):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.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):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.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):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipOfficial(Structure):
+    OfficialID = 0    #(DWORD OfficialID)// 官职ID
+    LastDismissJuniorTime = 0    #(DWORD LastDismissJuniorTime)// 上次辞退下级仙官时间戳,跨服时间,如果自己是本界主时,用于计算辞退CD
+    WorshipCount = 0    #(DWORD WorshipCount)// 被膜拜次数
+    WorshipDouble = 0    #(BYTE WorshipDouble)// 今日是否双倍膜拜,仅在规定时间点内有用
+    OfficialPlayer=tagGCChampionshipOfficialPlayer()    #(tagGCChampionshipOfficialPlayer OfficialPlayer)// 任职玩家信息,可能没有
+    ApplyPlayerCount = 0    #(BYTE ApplyPlayerCount)// 申请该仙官玩家数
+    ApplyPlayerList = list()    #(vector<tagGCChampionshipOfficialPlayer> ApplyPlayerList)// 申请该仙官玩家列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.OfficialID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LastDismissJuniorTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WorshipCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WorshipDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        _pos = self.OfficialPlayer.ReadData(_lpData,_pos)
+        self.ApplyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ApplyPlayerCount):
+            temApplyPlayerList = tagGCChampionshipOfficialPlayer()
+            _pos = temApplyPlayerList.ReadData(_lpData, _pos)
+            self.ApplyPlayerList.append(temApplyPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.OfficialID = 0
+        self.LastDismissJuniorTime = 0
+        self.WorshipCount = 0
+        self.WorshipDouble = 0
+        self.OfficialPlayer=tagGCChampionshipOfficialPlayer()
+        self.OfficialPlayer.Clear()
+        self.ApplyPlayerCount = 0
+        self.ApplyPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += self.OfficialPlayer.GetLength()
+        length += 1
+        for i in range(self.ApplyPlayerCount):
+            length += self.ApplyPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.OfficialID)
+        data = CommFunc.WriteDWORD(data, self.LastDismissJuniorTime)
+        data = CommFunc.WriteDWORD(data, self.WorshipCount)
+        data = CommFunc.WriteBYTE(data, self.WorshipDouble)
+        data = CommFunc.WriteString(data,self.OfficialPlayer.GetLength(),self.OfficialPlayer.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ApplyPlayerCount)
+        for i in range(self.ApplyPlayerCount):
+            data = CommFunc.WriteString(data, self.ApplyPlayerList[i].GetLength(), self.ApplyPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                OfficialID:%d,
+                                LastDismissJuniorTime:%d,
+                                WorshipCount:%d,
+                                WorshipDouble:%d,
+                                OfficialPlayer:%s,
+                                ApplyPlayerCount:%d,
+                                ApplyPlayerList:%s
+                                '''\
+                                %(
+                                self.OfficialID,
+                                self.LastDismissJuniorTime,
+                                self.WorshipCount,
+                                self.WorshipDouble,
+                                self.OfficialPlayer.OutputString(),
+                                self.ApplyPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCChampionshipOfficialInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 官职数据分区ID
+    OfficialCount = 0    #(BYTE OfficialCount)// 官职数,包含界主及所有仙官
+    OfficialList = list()    #(vector<tagGCChampionshipOfficial> OfficialList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x18
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.OfficialCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.OfficialCount):
+            temOfficialList = tagGCChampionshipOfficial()
+            _pos = temOfficialList.ReadData(_lpData, _pos)
+            self.OfficialList.append(temOfficialList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x18
+        self.ZoneID = 0
+        self.OfficialCount = 0
+        self.OfficialList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.OfficialCount):
+            length += self.OfficialList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.OfficialCount)
+        for i in range(self.OfficialCount):
+            data = CommFunc.WriteString(data, self.OfficialList[i].GetLength(), self.OfficialList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                OfficialCount:%d,
+                                OfficialList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.OfficialCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCChampionshipOfficialInfo=tagGCChampionshipOfficialInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialInfo.Head.Cmd,m_NAtagGCChampionshipOfficialInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialInfo
+
+
+#------------------------------------------------------
+# C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo
+
+class  tagGCCrossBattlefieldPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    PlayerName = ""    #(char PlayerName[33])
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)//等级
+    RealmLV = 0    #(WORD RealmLV)//境界
+    FightPower = 0    #(DWORD FightPower)//战力求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        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.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteWORD(data, self.RealmLV)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.FightPower,
+                                self.FightPowerEx
+                                )
+        return DumpString
+
+
+class  tagGCCrossBattlefieldBuyPlayer(Structure):
+    BuyPlayerID = 0    #(DWORD BuyPlayerID)//购买的玩家ID,即召集人
+    Faction = 0    #(BYTE Faction)//阵营 1-红;2-蓝
+    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
+    FactionPlayerCount = 0    #(BYTE FactionPlayerCount)
+    FactionPlayerList = list()    #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FactionPlayerCount):
+            temFactionPlayerList = tagGCCrossBattlefieldPlayer()
+            _pos = temFactionPlayerList.ReadData(_lpData, _pos)
+            self.FactionPlayerList.append(temFactionPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.BuyPlayerID = 0
+        self.Faction = 0
+        self.ServerOnly = 0
+        self.FactionPlayerCount = 0
+        self.FactionPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.FactionPlayerCount):
+            length += self.FactionPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.BuyPlayerID)
+        data = CommFunc.WriteBYTE(data, self.Faction)
+        data = CommFunc.WriteBYTE(data, self.ServerOnly)
+        data = CommFunc.WriteBYTE(data, self.FactionPlayerCount)
+        for i in range(self.FactionPlayerCount):
+            data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BuyPlayerID:%d,
+                                Faction:%d,
+                                ServerOnly:%d,
+                                FactionPlayerCount:%d,
+                                FactionPlayerList:%s
+                                '''\
+                                %(
+                                self.BuyPlayerID,
+                                self.Faction,
+                                self.ServerOnly,
+                                self.FactionPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossBattlefieldBuyHM(Structure):
+    Hour = 0    #(BYTE Hour)//战场开启时
+    Minute = 0    #(BYTE Minute)//战场开启分
+    BuyPlayerCount = 0    #(BYTE BuyPlayerCount)
+    BuyPlayerList = list()    #(vector<tagGCCrossBattlefieldBuyPlayer> BuyPlayerList)//购买本场次的玩家信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.BuyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BuyPlayerCount):
+            temBuyPlayerList = tagGCCrossBattlefieldBuyPlayer()
+            _pos = temBuyPlayerList.ReadData(_lpData, _pos)
+            self.BuyPlayerList.append(temBuyPlayerList)
+        return _pos
+
+    def Clear(self):
+        self.Hour = 0
+        self.Minute = 0
+        self.BuyPlayerCount = 0
+        self.BuyPlayerList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.BuyPlayerCount):
+            length += self.BuyPlayerList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.Hour)
+        data = CommFunc.WriteBYTE(data, self.Minute)
+        data = CommFunc.WriteBYTE(data, self.BuyPlayerCount)
+        for i in range(self.BuyPlayerCount):
+            data = CommFunc.WriteString(data, self.BuyPlayerList[i].GetLength(), self.BuyPlayerList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Hour:%d,
+                                Minute:%d,
+                                BuyPlayerCount:%d,
+                                BuyPlayerList:%s
+                                '''\
+                                %(
+                                self.Hour,
+                                self.Minute,
+                                self.BuyPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossBattlefieldBuyInfo(Structure):
+    Head = tagHead()
+    HMCount = 0    #(BYTE HMCount)// 为0时清空重置,其他为增量更新
+    HMBuyList = list()    #(vector<tagGCCrossBattlefieldBuyHM> HMBuyList)//购买场次列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x09
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.HMCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.HMCount):
+            temHMBuyList = tagGCCrossBattlefieldBuyHM()
+            _pos = temHMBuyList.ReadData(_lpData, _pos)
+            self.HMBuyList.append(temHMBuyList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x09
+        self.HMCount = 0
+        self.HMBuyList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.HMCount):
+            length += self.HMBuyList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.HMCount)
+        for i in range(self.HMCount):
+            data = CommFunc.WriteString(data, self.HMBuyList[i].GetLength(), self.HMBuyList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                HMCount:%d,
+                                HMBuyList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.HMCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossBattlefieldBuyInfo=tagGCCrossBattlefieldBuyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBattlefieldBuyInfo.Head.Cmd,m_NAtagGCCrossBattlefieldBuyInfo.Head.SubCmd))] = m_NAtagGCCrossBattlefieldBuyInfo
+
+
+#------------------------------------------------------
+# C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo
+
+class  tagGCCrossBillboardData(Structure):
+    OrderIndex = 0    #(WORD OrderIndex)//名次索引,0代表第一名
+    ID = 0    #(DWORD ID)
+    ID2 = 0    #(DWORD ID2)
+    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
+    Name2 = ""    #(char Name2[65])//名字2
+    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
+    Value1 = 0    #(DWORD Value1)//自定义值1
+    Value2 = 0    #(DWORD Value2)//自定义值2
+    Value3 = 0    #(DWORD Value3)//附加值
+    Value4 = 0    #(DWORD Value4)//附加值
+    Value5 = 0    #(DWORD Value5)//附加值
+    Value6 = 0    #(DWORD Value6)//附加值
+    Value7 = 0    #(DWORD Value7)//附加值
+    Value8 = 0    #(DWORD Value8)//附加值
+    CmpValue = 0    #(DWORD CmpValue)// 比较权值
+    CmpValue2 = 0    #(DWORD CmpValue2)// 比较权值
+    CmpValue3 = 0    #(DWORD CmpValue3)// 比较权值
+    DataLen = 0    #(WORD DataLen)
+    UserData = ""    #(String UserData)//附加
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.OrderIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        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,65)
+        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
+        return _pos
+
+    def Clear(self):
+        self.OrderIndex = 0
+        self.ID = 0
+        self.ID2 = 0
+        self.Name1 = ""
+        self.Name2 = ""
+        self.Type2 = 0
+        self.Value1 = 0
+        self.Value2 = 0
+        self.Value3 = 0
+        self.Value4 = 0
+        self.Value5 = 0
+        self.Value6 = 0
+        self.Value7 = 0
+        self.Value8 = 0
+        self.CmpValue = 0
+        self.CmpValue2 = 0
+        self.CmpValue3 = 0
+        self.DataLen = 0
+        self.UserData = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 2
+        length += 4
+        length += 4
+        length += 33
+        length += 65
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += len(self.UserData)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteWORD(data, self.OrderIndex)
+        data = CommFunc.WriteDWORD(data, self.ID)
+        data = CommFunc.WriteDWORD(data, self.ID2)
+        data = CommFunc.WriteString(data, 33, self.Name1)
+        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)
+        data = CommFunc.WriteDWORD(data, self.Value3)
+        data = CommFunc.WriteDWORD(data, self.Value4)
+        data = CommFunc.WriteDWORD(data, self.Value5)
+        data = CommFunc.WriteDWORD(data, self.Value6)
+        data = CommFunc.WriteDWORD(data, self.Value7)
+        data = CommFunc.WriteDWORD(data, self.Value8)
+        data = CommFunc.WriteDWORD(data, self.CmpValue)
+        data = CommFunc.WriteDWORD(data, self.CmpValue2)
+        data = CommFunc.WriteDWORD(data, self.CmpValue3)
+        data = CommFunc.WriteWORD(data, self.DataLen)
+        data = CommFunc.WriteString(data, self.DataLen, self.UserData)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                OrderIndex:%d,
+                                ID:%d,
+                                ID2:%d,
+                                Name1:%s,
+                                Name2:%s,
+                                Type2:%d,
+                                Value1:%d,
+                                Value2:%d,
+                                Value3:%d,
+                                Value4:%d,
+                                Value5:%d,
+                                Value6:%d,
+                                Value7:%d,
+                                Value8:%d,
+                                CmpValue:%d,
+                                CmpValue2:%d,
+                                CmpValue3:%d,
+                                DataLen:%d,
+                                UserData:%s
+                                '''\
+                                %(
+                                self.OrderIndex,
+                                self.ID,
+                                self.ID2,
+                                self.Name1,
+                                self.Name2,
+                                self.Type2,
+                                self.Value1,
+                                self.Value2,
+                                self.Value3,
+                                self.Value4,
+                                self.Value5,
+                                self.Value6,
+                                self.Value7,
+                                self.Value8,
+                                self.CmpValue,
+                                self.CmpValue2,
+                                self.CmpValue3,
+                                self.DataLen,
+                                self.UserData
+                                )
+        return DumpString
+
+
+class  tagGCCrossBillboardInfo(Structure):
+    Head = tagHead()
+    Type = 0    #(BYTE Type)//榜单类型
+    GroupValue1 = 0    #(DWORD GroupValue1)// 分组值1
+    GroupValue2 = 0    #(DWORD GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
+    WatchID = 0    #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
+    BillboardCount = 0    #(BYTE BillboardCount)
+    CrossBillboardDataList = list()    #(vector<tagGCCrossBillboardData> CrossBillboardDataList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x07
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GroupValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.GroupValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BillboardCount):
+            temCrossBillboardDataList = tagGCCrossBillboardData()
+            _pos = temCrossBillboardDataList.ReadData(_lpData, _pos)
+            self.CrossBillboardDataList.append(temCrossBillboardDataList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x07
+        self.Type = 0
+        self.GroupValue1 = 0
+        self.GroupValue2 = 0
+        self.WatchID = 0
+        self.BillboardCount = 0
+        self.CrossBillboardDataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.BillboardCount):
+            length += self.CrossBillboardDataList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Type)
+        data = CommFunc.WriteDWORD(data, self.GroupValue1)
+        data = CommFunc.WriteDWORD(data, self.GroupValue2)
+        data = CommFunc.WriteDWORD(data, self.WatchID)
+        data = CommFunc.WriteBYTE(data, self.BillboardCount)
+        for i in range(self.BillboardCount):
+            data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Type:%d,
+                                GroupValue1:%d,
+                                GroupValue2:%d,
+                                WatchID:%d,
+                                BillboardCount:%d,
+                                CrossBillboardDataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Type,
+                                self.GroupValue1,
+                                self.GroupValue2,
+                                self.WatchID,
+                                self.BillboardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo
+
+
+#------------------------------------------------------
+# C0 16 跨服排位战斗结果 #tagGCCrossChampionshipPKOver
+
+class  tagGCCrossChampionshipPKOver(Structure):
+    Head = tagHead()
+    GroupMark = 0    #(DWORD GroupMark)// 分组标识:64、32、16、8 - 64、32、16、8强赛;4 - 半决赛; 2 - 决赛
+    TimeStr = ""    #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss
+    OverType = 0    #(BYTE OverType)// 0-正常,1-有人离线
+    WinnerID = 0    #(DWORD WinnerID)// 胜方ID
+    LoserID = 0    #(DWORD LoserID)// 败方ID
+    RoundCount = 0    #(BYTE RoundCount)// PK回合数
+    RoundWinnerID = list()    #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
+    TagNameLen = 0    #(BYTE TagNameLen)
+    TagName = ""    #(String TagName)
+    Rank = 0    #(BYTE Rank)// 最终名次,决赛才有
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x16
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RoundCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.RoundWinnerID.append(value)
+        self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen)
+        self.Rank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x16
+        self.GroupMark = 0
+        self.TimeStr = ""
+        self.OverType = 0
+        self.WinnerID = 0
+        self.LoserID = 0
+        self.RoundCount = 0
+        self.RoundWinnerID = list()
+        self.TagNameLen = 0
+        self.TagName = ""
+        self.Rank = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 19
+        length += 1
+        length += 4
+        length += 4
+        length += 1
+        length += 4 * self.RoundCount
+        length += 1
+        length += len(self.TagName)
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.GroupMark)
+        data = CommFunc.WriteString(data, 19, self.TimeStr)
+        data = CommFunc.WriteBYTE(data, self.OverType)
+        data = CommFunc.WriteDWORD(data, self.WinnerID)
+        data = CommFunc.WriteDWORD(data, self.LoserID)
+        data = CommFunc.WriteBYTE(data, self.RoundCount)
+        for i in range(self.RoundCount):
+            data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
+        data = CommFunc.WriteBYTE(data, self.TagNameLen)
+        data = CommFunc.WriteString(data, self.TagNameLen, self.TagName)
+        data = CommFunc.WriteBYTE(data, self.Rank)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                GroupMark:%d,
+                                TimeStr:%s,
+                                OverType:%d,
+                                WinnerID:%d,
+                                LoserID:%d,
+                                RoundCount:%d,
+                                RoundWinnerID:%s,
+                                TagNameLen:%d,
+                                TagName:%s,
+                                Rank:%d
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.GroupMark,
+                                self.TimeStr,
+                                self.OverType,
+                                self.WinnerID,
+                                self.LoserID,
+                                self.RoundCount,
+                                "...",
+                                self.TagNameLen,
+                                self.TagName,
+                                self.Rank
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossChampionshipPKOver=tagGCCrossChampionshipPKOver()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKOver.Head.Cmd,m_NAtagGCCrossChampionshipPKOver.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKOver
+
+
+#------------------------------------------------------
+# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo
+
+class  tagGCCrossChampionshipPKBattle(Structure):
+    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, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        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):
+        length = 0
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += len(self.BattleRet)
+
+        return length
+
+    def GetBuffer(self):
+        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 = '''
+                                BattleNum:%d,
+                                WinPlayerID:%d,
+                                PlayerIDA:%d,
+                                PlayerIDB:%d,
+                                BattleRetLen:%d,
+                                BattleRet:%s
+                                '''\
+                                %(
+                                self.BattleNum,
+                                self.WinPlayerID,
+                                self.PlayerIDA,
+                                self.PlayerIDB,
+                                self.BattleRetLen,
+                                self.BattleRet
+                                )
+        return DumpString
+
+
+class  tagGCCrossChampionshipPKGroup(Structure):
+    GroupMark = 0    #(DWORD GroupMark)// 战斗分区mark, 如 64、32、16、8、4-半决赛、2-决赛;
+    BattleCount = 0    #(BYTE BattleCount)// 对战组数
+    BattleList = list()    #(vector<tagGCCrossChampionshipPKBattle> BattleList)// 对战组列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.BattleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BattleCount):
+            temBattleList = tagGCCrossChampionshipPKBattle()
+            _pos = temBattleList.ReadData(_lpData, _pos)
+            self.BattleList.append(temBattleList)
+        return _pos
+
+    def Clear(self):
+        self.GroupMark = 0
+        self.BattleCount = 0
+        self.BattleList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        for i in range(self.BattleCount):
+            length += self.BattleList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.GroupMark)
+        data = CommFunc.WriteBYTE(data, self.BattleCount)
+        for i in range(self.BattleCount):
+            data = CommFunc.WriteString(data, self.BattleList[i].GetLength(), self.BattleList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GroupMark:%d,
+                                BattleCount:%d,
+                                BattleList:%s
+                                '''\
+                                %(
+                                self.GroupMark,
+                                self.BattleCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossChampionshipPKPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)// 玩家ID
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    FightPower = 0    #(DWORD FightPower)// 战力求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力整除亿部分
+    RealmLV = 0    #(WORD RealmLV)
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
+    ServerID = 0    #(DWORD ServerID)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.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)
+        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.ServerID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += 2
+        length += 4
+        length += 4
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.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)
+        data = CommFunc.WriteDWORD(data, self.ServerID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                ServerID:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic,
+                                self.ServerID
+                                )
+        return DumpString
+
+
+class  tagGCCrossChampionshipPKZoneGroupInfo(Structure):
+    Head = tagHead()
+    ActID = 0    #(DWORD ActID)// 活动ID,活动ID不同则可重置前端排位赛相关缓存数据
+    StateError = 0    #(BYTE StateError)// 本次活动是否已经出现流程状态异常;如服务器异常或维护服务器导致跳过步骤,则会废弃该次比赛,直到下次新活动;
+    ZoneID = 0    #(BYTE ZoneID)// 排位分区ID
+    PlayerCount = 0    #(BYTE PlayerCount)// 参赛玩家数
+    PlayerList = list()    #(vector<tagGCCrossChampionshipPKPlayer> PlayerList)
+    GroupCount = 0    #(WORD GroupCount)
+    GroupList = list()    #(vector<tagGCCrossChampionshipPKGroup> GroupList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x15
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCount):
+            temPlayerList = tagGCCrossChampionshipPKPlayer()
+            _pos = temPlayerList.ReadData(_lpData, _pos)
+            self.PlayerList.append(temPlayerList)
+        self.GroupCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.GroupCount):
+            temGroupList = tagGCCrossChampionshipPKGroup()
+            _pos = temGroupList.ReadData(_lpData, _pos)
+            self.GroupList.append(temGroupList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x15
+        self.ActID = 0
+        self.StateError = 0
+        self.ZoneID = 0
+        self.PlayerCount = 0
+        self.PlayerList = list()
+        self.GroupCount = 0
+        self.GroupList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.PlayerCount):
+            length += self.PlayerList[i].GetLength()
+        length += 2
+        for i in range(self.GroupCount):
+            length += self.GroupList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.ActID)
+        data = CommFunc.WriteBYTE(data, self.StateError)
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.PlayerCount)
+        for i in range(self.PlayerCount):
+            data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer())
+        data = CommFunc.WriteWORD(data, self.GroupCount)
+        for i in range(self.GroupCount):
+            data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ActID:%d,
+                                StateError:%d,
+                                ZoneID:%d,
+                                PlayerCount:%d,
+                                PlayerList:%s,
+                                GroupCount:%d,
+                                GroupList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ActID,
+                                self.StateError,
+                                self.ZoneID,
+                                self.PlayerCount,
+                                "...",
+                                self.GroupCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossChampionshipPKZoneGroupInfo=tagGCCrossChampionshipPKZoneGroupInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.Cmd,m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKZoneGroupInfo
+
+
+#------------------------------------------------------
+# C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo
+
+class  tagGCCrossRealmPKBillboardData(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    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)
+    DanLV = 0    #(BYTE DanLV)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.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)
+        self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.FightPower = 0
+        self.RealmLV = 0
+        self.PKScore = 0
+        self.DanLV = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 2
+        length += 4
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.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)
+        data = CommFunc.WriteBYTE(data, self.DanLV)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                FightPower:%d,
+                                RealmLV:%d,
+                                PKScore:%d,
+                                DanLV:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.Job,
+                                self.Face,
+                                self.FacePic,
+                                self.FightPower,
+                                self.RealmLV,
+                                self.PKScore,
+                                self.DanLV
+                                )
+        return DumpString
+
+
+class  tagGCCrossRealmPKBillboardInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 赛区ID	
+    SeasonID = 0    #(BYTE SeasonID)// 赛季ID	
+    Count = 0    #(WORD Count)
+    PKBillboardList = list()    #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x05
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SeasonID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temPKBillboardList = tagGCCrossRealmPKBillboardData()
+            _pos = temPKBillboardList.ReadData(_lpData, _pos)
+            self.PKBillboardList.append(temPKBillboardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x05
+        self.ZoneID = 0
+        self.SeasonID = 0
+        self.Count = 0
+        self.PKBillboardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 2
+        for i in range(self.Count):
+            length += self.PKBillboardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.SeasonID)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.PKBillboardList[i].GetLength(), self.PKBillboardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                SeasonID:%d,
+                                Count:%d,
+                                PKBillboardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.SeasonID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKBillboardInfo=tagGCCrossRealmPKBillboardInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKBillboardInfo.Head.Cmd,m_NAtagGCCrossRealmPKBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKBillboardInfo
+
+
+#------------------------------------------------------
+# C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK
+
+class  tagGCCrossRealmPKMatchPlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 跨服名字
+    Job = 0    #(BYTE Job)
+    LV = 0    #(WORD LV)
+    RealmLV = 0    #(WORD RealmLV)//境界
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
+    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
+    ServerID = 0    #(DWORD ServerID)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.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.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.Job = 0
+        self.LV = 0
+        self.RealmLV = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.ServerID = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += len(self.PlayerName)
+        length += 1
+        length += 2
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteWORD(data, self.LV)
+        data = CommFunc.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.ServerID)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                Job:%d,
+                                LV:%d,
+                                RealmLV:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                ServerID:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.Job,
+                                self.LV,
+                                self.RealmLV,
+                                self.Face,
+                                self.FacePic,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.ServerID
+                                )
+        return DumpString
+
+
+class  tagGCCrossRealmPKMatchOK(Structure):
+    Head = tagHead()
+    MatchPlayerCount = 0    #(BYTE MatchPlayerCount)
+    MatchPlayer = list()    #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x01
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.MatchPlayerCount):
+            temMatchPlayer = tagGCCrossRealmPKMatchPlayer()
+            _pos = temMatchPlayer.ReadData(_lpData, _pos)
+            self.MatchPlayer.append(temMatchPlayer)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x01
+        self.MatchPlayerCount = 0
+        self.MatchPlayer = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.MatchPlayerCount):
+            length += self.MatchPlayer[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.MatchPlayerCount)
+        for i in range(self.MatchPlayerCount):
+            data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                MatchPlayerCount:%d,
+                                MatchPlayer:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.MatchPlayerCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKMatchOK=tagGCCrossRealmPKMatchOK()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKMatchOK.Head.Cmd,m_NAtagGCCrossRealmPKMatchOK.Head.SubCmd))] = m_NAtagGCCrossRealmPKMatchOK
+
+
+#------------------------------------------------------
+# C0 03 跨服PK战斗结果 #tagGCCrossRealmPKOverInfo
+
+class  tagGCCrossRealmPKOverInfo(Structure):
+    Head = tagHead()
+    TimeStr = ""    #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss
+    OverType = 0    #(BYTE OverType)// 0-正常,1-有人离线
+    WinnerID = 0    #(DWORD WinnerID)// 胜方ID
+    RoundCount = 0    #(BYTE RoundCount)// PK回合数
+    RoundWinnerID = list()    #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表
+    AddScore = 0    #(WORD AddScore)// 本场加分
+    Score = 0    #(DWORD Score)// 当前积分
+    DanLV = 0    #(BYTE DanLV)// 当前段位
+    CWinCnt = 0    #(WORD CWinCnt)// 当前连胜数
+    TagNameLen = 0    #(BYTE TagNameLen)
+    TagName = ""    #(String TagName)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x03
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
+        self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RoundCount):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.RoundWinnerID.append(value)
+        self.AddScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x03
+        self.TimeStr = ""
+        self.OverType = 0
+        self.WinnerID = 0
+        self.RoundCount = 0
+        self.RoundWinnerID = list()
+        self.AddScore = 0
+        self.Score = 0
+        self.DanLV = 0
+        self.CWinCnt = 0
+        self.TagNameLen = 0
+        self.TagName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 19
+        length += 1
+        length += 4
+        length += 1
+        length += 4 * self.RoundCount
+        length += 2
+        length += 4
+        length += 1
+        length += 2
+        length += 1
+        length += len(self.TagName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteString(data, 19, self.TimeStr)
+        data = CommFunc.WriteBYTE(data, self.OverType)
+        data = CommFunc.WriteDWORD(data, self.WinnerID)
+        data = CommFunc.WriteBYTE(data, self.RoundCount)
+        for i in range(self.RoundCount):
+            data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i])
+        data = CommFunc.WriteWORD(data, self.AddScore)
+        data = CommFunc.WriteDWORD(data, self.Score)
+        data = CommFunc.WriteBYTE(data, self.DanLV)
+        data = CommFunc.WriteWORD(data, self.CWinCnt)
+        data = CommFunc.WriteBYTE(data, self.TagNameLen)
+        data = CommFunc.WriteString(data, self.TagNameLen, self.TagName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                TimeStr:%s,
+                                OverType:%d,
+                                WinnerID:%d,
+                                RoundCount:%d,
+                                RoundWinnerID:%s,
+                                AddScore:%d,
+                                Score:%d,
+                                DanLV:%d,
+                                CWinCnt:%d,
+                                TagNameLen:%d,
+                                TagName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.TimeStr,
+                                self.OverType,
+                                self.WinnerID,
+                                self.RoundCount,
+                                "...",
+                                self.AddScore,
+                                self.Score,
+                                self.DanLV,
+                                self.CWinCnt,
+                                self.TagNameLen,
+                                self.TagName
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKOverInfo=tagGCCrossRealmPKOverInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKOverInfo.Head.Cmd,m_NAtagGCCrossRealmPKOverInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKOverInfo
+
+
+#------------------------------------------------------
+# C0 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo
+
+class  tagGCCrossRealmPKSeason(Structure):
+    SeasonID = 0    #(WORD SeasonID)// 当前赛季ID
+    StartDate = ""    #(char StartDate[10])// 开始日期 yyyy-MM-dd
+    EndDate = ""    #(char EndDate[10])// 结束日期 yyyy-MM-dd
+    EndTime = ""    #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        return _pos
+
+    def Clear(self):
+        self.SeasonID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.EndTime = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 2
+        length += 10
+        length += 10
+        length += 5
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteWORD(data, self.SeasonID)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndDate)
+        data = CommFunc.WriteString(data, 5, self.EndTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                SeasonID:%d,
+                                StartDate:%s,
+                                EndDate:%s,
+                                EndTime:%s
+                                '''\
+                                %(
+                                self.SeasonID,
+                                self.StartDate,
+                                self.EndDate,
+                                self.EndTime
+                                )
+        return DumpString
+
+
+class  tagGCCrossRealmPKZone(Structure):
+    ZoneID = 0    #(BYTE ZoneID)// 赛区ID
+    ZoneNameLen = 0    #(BYTE ZoneNameLen)
+    ZoneName = ""    #(String ZoneName)// 赛区名
+    SeasonCount = 0    #(WORD SeasonCount)
+    SeasonList = list()    #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen)
+        self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.SeasonCount):
+            temSeasonList = tagGCCrossRealmPKSeason()
+            _pos = temSeasonList.ReadData(_lpData, _pos)
+            self.SeasonList.append(temSeasonList)
+        return _pos
+
+    def Clear(self):
+        self.ZoneID = 0
+        self.ZoneNameLen = 0
+        self.ZoneName = ""
+        self.SeasonCount = 0
+        self.SeasonList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += len(self.ZoneName)
+        length += 2
+        for i in range(self.SeasonCount):
+            length += self.SeasonList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteBYTE(data, self.ZoneNameLen)
+        data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName)
+        data = CommFunc.WriteWORD(data, self.SeasonCount)
+        for i in range(self.SeasonCount):
+            data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                ZoneID:%d,
+                                ZoneNameLen:%d,
+                                ZoneName:%s,
+                                SeasonCount:%d,
+                                SeasonList:%s
+                                '''\
+                                %(
+                                self.ZoneID,
+                                self.ZoneNameLen,
+                                self.ZoneName,
+                                self.SeasonCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossRealmPKSeasonInfo(Structure):
+    Head = tagHead()
+    ZoneCount = 0    #(BYTE ZoneCount)// 赛区个数
+    ZoneList = list()    #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x04
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ZoneCount):
+            temZoneList = tagGCCrossRealmPKZone()
+            _pos = temZoneList.ReadData(_lpData, _pos)
+            self.ZoneList.append(temZoneList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x04
+        self.ZoneCount = 0
+        self.ZoneList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.ZoneCount):
+            length += self.ZoneList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneCount)
+        for i in range(self.ZoneCount):
+            data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneCount:%d,
+                                ZoneList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo
+
+
+#------------------------------------------------------
+# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState
+
+class  tagGCCrossRealmPKSeasonState(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 所属赛区ID
+    SeasonID = 0    #(WORD SeasonID)// 当前赛季ID
+    SeasonState = 0    #(BYTE SeasonState)// 赛季状态;0-未开启,1-开启中,2-已结束
+    MatchState = 0    #(BYTE MatchState)// 匹配状态;0-未开启;1-开启中
+    CrossZoneNameLen = 0    #(BYTE CrossZoneNameLen)
+    CrossZoneName = ""    #(String CrossZoneName)// 跨服分区名
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x06
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.SeasonState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.MatchState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CrossZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.CrossZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.CrossZoneNameLen)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x06
+        self.ZoneID = 0
+        self.SeasonID = 0
+        self.SeasonState = 0
+        self.MatchState = 0
+        self.CrossZoneNameLen = 0
+        self.CrossZoneName = ""
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 2
+        length += 1
+        length += 1
+        length += 1
+        length += len(self.CrossZoneName)
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteWORD(data, self.SeasonID)
+        data = CommFunc.WriteBYTE(data, self.SeasonState)
+        data = CommFunc.WriteBYTE(data, self.MatchState)
+        data = CommFunc.WriteBYTE(data, self.CrossZoneNameLen)
+        data = CommFunc.WriteString(data, self.CrossZoneNameLen, self.CrossZoneName)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                SeasonID:%d,
+                                SeasonState:%d,
+                                MatchState:%d,
+                                CrossZoneNameLen:%d,
+                                CrossZoneName:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.SeasonID,
+                                self.SeasonState,
+                                self.MatchState,
+                                self.CrossZoneNameLen,
+                                self.CrossZoneName
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Head.Cmd,m_NAtagGCCrossRealmPKSeasonState.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState
+
+
+#------------------------------------------------------
+# C0 02 跨服PK开始匹配 #tagGCCrossRealmPKStartMatch
+
+class  tagGCCrossRealmPKStartMatch(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("IsRobot", c_ubyte),    # 是否匹配机器人
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x02
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x02
+        self.IsRobot = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossRealmPKStartMatch)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                IsRobot:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.IsRobot
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch
+
+
+#------------------------------------------------------
+# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo
+
+class  tagGCCrossYaomoBossPlayerHurtInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("HurtTotal", c_int),    # 总伤害值,小于亿部分
+                  ("HurtTotalEx", c_int),    # 总伤害值,整除亿部分
+                  ("AwardState", c_int),    # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x11
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x11
+        self.HurtTotal = 0
+        self.HurtTotalEx = 0
+        self.AwardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossYaomoBossPlayerHurtInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                HurtTotal:%d,
+                                HurtTotalEx:%d,
+                                AwardState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.HurtTotal,
+                                self.HurtTotalEx,
+                                self.AwardState
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo
+
+
+#------------------------------------------------------
+# C0 10 跨服所属分区信息 #tagGCCrossZoneInfo
+
+class  tagGCCrossZoneInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CommZoneID", c_ubyte),    # 所属常规分区ID
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x10
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x10
+        self.CommZoneID = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossZoneInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 10 跨服所属分区信息 //tagGCCrossZoneInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CommZoneID:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CommZoneID
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo
+
+
+#------------------------------------------------------
+# C0 24 仙盟攻城战活动信息 #tagGCFamilyGCZActInfo
+
+class  tagGCFamilyGCZActFamily(Structure):
+    FamilyID = 0    #(DWORD FamilyID)
+    Name = ""    #(char Name[33])//参与仙盟名字
+    LV = 0    #(BYTE LV)//仙盟等级
+    ServerID = 0    #(DWORD ServerID)//仙盟所属区服ID
+    EmblemID = 0    #(DWORD EmblemID)//徽章ID
+    FightPower = 0    #(DWORD FightPower)//仙盟总战力,求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
+    LeaderID = 0    #(DWORD LeaderID)//盟主ID
+    LeaderName = ""    #(char LeaderName[33])//盟主名
+    LeaderFace = 0    #(DWORD LeaderFace)
+    LeaderFacePic = 0    #(DWORD LeaderFacePic)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.LeaderFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LeaderFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.FamilyID = 0
+        self.Name = ""
+        self.LV = 0
+        self.ServerID = 0
+        self.EmblemID = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.LeaderID = 0
+        self.LeaderName = ""
+        self.LeaderFace = 0
+        self.LeaderFacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 33
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteBYTE(data, self.LV)
+        data = CommFunc.WriteDWORD(data, self.ServerID)
+        data = CommFunc.WriteDWORD(data, self.EmblemID)
+        data = CommFunc.WriteDWORD(data, self.FightPower)
+        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.LeaderID)
+        data = CommFunc.WriteString(data, 33, self.LeaderName)
+        data = CommFunc.WriteDWORD(data, self.LeaderFace)
+        data = CommFunc.WriteDWORD(data, self.LeaderFacePic)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                FamilyID:%d,
+                                Name:%s,
+                                LV:%d,
+                                ServerID:%d,
+                                EmblemID:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                LeaderID:%d,
+                                LeaderName:%s,
+                                LeaderFace:%d,
+                                LeaderFacePic:%d
+                                '''\
+                                %(
+                                self.FamilyID,
+                                self.Name,
+                                self.LV,
+                                self.ServerID,
+                                self.EmblemID,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.LeaderID,
+                                self.LeaderName,
+                                self.LeaderFace,
+                                self.LeaderFacePic
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZActInfo(Structure):
+    Head = tagHead()
+    ServerInfoLen = 0    #(BYTE ServerInfoLen)
+    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
+    ZoneID = 0    #(BYTE ZoneID)// 活动分区ID,公示期为0
+    ActID = 0    #(DWORD ActID)// 活动ID,代表某一次活动的唯一ID,前端如果有活动相关的本地记录可以通过验证此ID变更进行重置
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    JoinFamilyCnt = 0    #(BYTE JoinFamilyCnt)// 参与仙盟数
+    ActFlowID = 0    #(WORD ActFlowID)// 活动流程ID,对应H.活动时间流程表中的编号,前端根据跨服时间自行计算当前所处流程状态
+    GuessTemplateID = 0    #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示
+    PersonalTemplateID = 0    #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
+    FamilyTemplateID = 0    #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
+    StateError = 0    #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示
+    FamilyCount = 0    #(BYTE FamilyCount)
+    ActFamilyList = list()    #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x24
+        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.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.JoinFamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ActFlowID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FamilyCount):
+            temActFamilyList = tagGCFamilyGCZActFamily()
+            _pos = temActFamilyList.ReadData(_lpData, _pos)
+            self.ActFamilyList.append(temActFamilyList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x24
+        self.ServerInfoLen = 0
+        self.ServerIDRangeInfo = ""
+        self.ZoneID = 0
+        self.ActID = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.JoinFamilyCnt = 0
+        self.ActFlowID = 0
+        self.GuessTemplateID = 0
+        self.PersonalTemplateID = 0
+        self.FamilyTemplateID = 0
+        self.StateError = 0
+        self.FamilyCount = 0
+        self.ActFamilyList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ServerIDRangeInfo)
+        length += 1
+        length += 4
+        length += 10
+        length += 10
+        length += 1
+        length += 2
+        length += 2
+        length += 2
+        length += 2
+        length += 4
+        length += 1
+        for i in range(self.FamilyCount):
+            length += self.ActFamilyList[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.ZoneID)
+        data = CommFunc.WriteDWORD(data, self.ActID)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.JoinFamilyCnt)
+        data = CommFunc.WriteWORD(data, self.ActFlowID)
+        data = CommFunc.WriteWORD(data, self.GuessTemplateID)
+        data = CommFunc.WriteWORD(data, self.PersonalTemplateID)
+        data = CommFunc.WriteWORD(data, self.FamilyTemplateID)
+        data = CommFunc.WriteDWORD(data, self.StateError)
+        data = CommFunc.WriteBYTE(data, self.FamilyCount)
+        for i in range(self.FamilyCount):
+            data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ServerInfoLen:%d,
+                                ServerIDRangeInfo:%s,
+                                ZoneID:%d,
+                                ActID:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                JoinFamilyCnt:%d,
+                                ActFlowID:%d,
+                                GuessTemplateID:%d,
+                                PersonalTemplateID:%d,
+                                FamilyTemplateID:%d,
+                                StateError:%d,
+                                FamilyCount:%d,
+                                ActFamilyList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ServerInfoLen,
+                                self.ServerIDRangeInfo,
+                                self.ZoneID,
+                                self.ActID,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.JoinFamilyCnt,
+                                self.ActFlowID,
+                                self.GuessTemplateID,
+                                self.PersonalTemplateID,
+                                self.FamilyTemplateID,
+                                self.StateError,
+                                self.FamilyCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZActInfo=tagGCFamilyGCZActInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZActInfo.Head.Cmd,m_NAtagGCFamilyGCZActInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZActInfo
+
+
+#------------------------------------------------------
+# C0 29 仙盟攻城战城池战斗信息 #tagGCFamilyGCZBatCityInfo
+
+class  tagGCFamilyGCZBatCityInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CityID", c_int),    #城池ID
+                  ("CityLV", c_ubyte),    #城池等级
+                  ("FamilyID", c_int),    #所属仙盟ID,可能为0
+                  ("GuardID", c_int),    #当前防守成员ID,为0时表示没有防守成员了,城池已被击毁
+                  ("HP", c_int),    #防守成员剩余生命,求余亿部分,剩余生命为0时代表该防守成员被击败
+                  ("HPEx", c_int),    #防守成员剩余生命,整除亿部分
+                  ("HPMax", c_int),    #防守成员最大生命,求余亿部分
+                  ("HPMaxEx", c_int),    #防守成员最大生命,整除亿部分
+                  ("AtkPlayerID", c_int),    #发起攻击的玩家ID,可能为0,判断是否自己的ID进行相应的攻击表现
+                  ("AtkRet", c_ubyte),    #攻击结果,仅在攻击玩家ID不为0时有效,0--成功;1-目标已被击杀;2-城池已被摧毁;3-其他
+                  ("KillCnt", c_ubyte),    #本次攻击击杀防守人员数
+                  ("HurtValue", c_int),    #伤害飘血,求余亿部分
+                  ("HurtValueEx", c_int),    #伤害飘血,整除亿部分
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xC0
+        self.SubCmd = 0x29
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xC0
+        self.SubCmd = 0x29
+        self.CityID = 0
+        self.CityLV = 0
+        self.FamilyID = 0
+        self.GuardID = 0
+        self.HP = 0
+        self.HPEx = 0
+        self.HPMax = 0
+        self.HPMaxEx = 0
+        self.AtkPlayerID = 0
+        self.AtkRet = 0
+        self.KillCnt = 0
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZBatCityInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 29 仙盟攻城战城池战斗信息 //tagGCFamilyGCZBatCityInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CityID:%d,
+                                CityLV:%d,
+                                FamilyID:%d,
+                                GuardID:%d,
+                                HP:%d,
+                                HPEx:%d,
+                                HPMax:%d,
+                                HPMaxEx:%d,
+                                AtkPlayerID:%d,
+                                AtkRet:%d,
+                                KillCnt:%d,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CityID,
+                                self.CityLV,
+                                self.FamilyID,
+                                self.GuardID,
+                                self.HP,
+                                self.HPEx,
+                                self.HPMax,
+                                self.HPMaxEx,
+                                self.AtkPlayerID,
+                                self.AtkRet,
+                                self.KillCnt,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZBatCityInfo=tagGCFamilyGCZBatCityInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatCityInfo.Cmd,m_NAtagGCFamilyGCZBatCityInfo.SubCmd))] = m_NAtagGCFamilyGCZBatCityInfo
+
+
+#------------------------------------------------------
+# C0 25 仙盟攻城战轮次分组信息 #tagGCFamilyGCZBatGroupInfo
+
+class  tagGCFamilyGCZBatGroup(Structure):
+    GroupNum = 0    #(BYTE GroupNum)// 分组编号,从1开始,对应A
+    FamilyIDCnt = 0    #(BYTE FamilyIDCnt)
+    FamilyIDList = list()    #(vector<DWORD> FamilyIDList)// 仙盟ID列表,前端可以通过判断参与的仙盟ID是否在某个分组里面验证有没有战场参赛资格
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.FamilyIDCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FamilyIDCnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.FamilyIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.GroupNum = 0
+        self.FamilyIDCnt = 0
+        self.FamilyIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        length += 4 * self.FamilyIDCnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.GroupNum)
+        data = CommFunc.WriteBYTE(data, self.FamilyIDCnt)
+        for i in range(self.FamilyIDCnt):
+            data = CommFunc.WriteDWORD(data, self.FamilyIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                GroupNum:%d,
+                                FamilyIDCnt:%d,
+                                FamilyIDList:%s
+                                '''\
+                                %(
+                                self.GroupNum,
+                                self.FamilyIDCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZBat(Structure):
+    BatType = 0    #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
+    GroupCnt = 0    #(BYTE GroupCnt)// 分组数
+    GroupList = list()    #(vector<tagGCFamilyGCZBatGroup> GroupList)// 分组列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GroupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.GroupCnt):
+            temGroupList = tagGCFamilyGCZBatGroup()
+            _pos = temGroupList.ReadData(_lpData, _pos)
+            self.GroupList.append(temGroupList)
+        return _pos
+
+    def Clear(self):
+        self.BatType = 0
+        self.GroupCnt = 0
+        self.GroupList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 1
+        for i in range(self.GroupCnt):
+            length += self.GroupList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.BatType)
+        data = CommFunc.WriteBYTE(data, self.GroupCnt)
+        for i in range(self.GroupCnt):
+            data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                BatType:%d,
+                                GroupCnt:%d,
+                                GroupList:%s
+                                '''\
+                                %(
+                                self.BatType,
+                                self.GroupCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZBatGroupInfo(Structure):
+    Head = tagHead()
+    RoundNum = 0    #(BYTE RoundNum)// 第x轮的分组,从1开始,没有在对应轮次战场分组里的视为没有该轮次的参赛资格
+    BatTypeCnt = 0    #(BYTE BatTypeCnt)// 战场类型数
+    BatList = list()    #(vector<tagGCFamilyGCZBat> BatList)//战场列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x25
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.BatTypeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BatTypeCnt):
+            temBatList = tagGCFamilyGCZBat()
+            _pos = temBatList.ReadData(_lpData, _pos)
+            self.BatList.append(temBatList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x25
+        self.RoundNum = 0
+        self.BatTypeCnt = 0
+        self.BatList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        for i in range(self.BatTypeCnt):
+            length += self.BatList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RoundNum)
+        data = CommFunc.WriteBYTE(data, self.BatTypeCnt)
+        for i in range(self.BatTypeCnt):
+            data = CommFunc.WriteString(data, self.BatList[i].GetLength(), self.BatList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RoundNum:%d,
+                                BatTypeCnt:%d,
+                                BatList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RoundNum,
+                                self.BatTypeCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZBatGroupInfo=tagGCFamilyGCZBatGroupInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatGroupInfo.Head.Cmd,m_NAtagGCFamilyGCZBatGroupInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatGroupInfo
+
+
+#------------------------------------------------------
+# C0 30 仙盟攻城战战斗战报 #tagGCFamilyGCZBatReport
+
+class  tagGCFamilyGCZBatRepHurt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("TagFamilyID", c_int),    #目标仙盟ID
+                  ("HurtValue", c_int),    #输出伤害,求余亿部分
+                  ("HurtValueEx", 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.TagFamilyID = 0
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZBatRepHurt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 30 仙盟攻城战战斗战报 //tagGCFamilyGCZBatReport:
+                                TagFamilyID:%d,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.TagFamilyID,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZBatReport(Structure):
+    Head = tagHead()
+    FamilyID = 0    #(DWORD FamilyID)// 战报仙盟ID
+    DefRepCnt = 0    #(BYTE DefRepCnt)
+    DefRepList = list()    #(vector<tagGCFamilyGCZBatRepHurt> DefRepList)// 防守战报
+    AtkRepCnt = 0    #(BYTE AtkRepCnt)
+    AtkRepList = list()    #(vector<tagGCFamilyGCZBatRepHurt> AtkRepList)// 进攻战报
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x30
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.DefRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DefRepCnt):
+            temDefRepList = tagGCFamilyGCZBatRepHurt()
+            _pos = temDefRepList.ReadData(_lpData, _pos)
+            self.DefRepList.append(temDefRepList)
+        self.AtkRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AtkRepCnt):
+            temAtkRepList = tagGCFamilyGCZBatRepHurt()
+            _pos = temAtkRepList.ReadData(_lpData, _pos)
+            self.AtkRepList.append(temAtkRepList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x30
+        self.FamilyID = 0
+        self.DefRepCnt = 0
+        self.DefRepList = list()
+        self.AtkRepCnt = 0
+        self.AtkRepList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.DefRepCnt):
+            length += self.DefRepList[i].GetLength()
+        length += 1
+        for i in range(self.AtkRepCnt):
+            length += self.AtkRepList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.DefRepCnt)
+        for i in range(self.DefRepCnt):
+            data = CommFunc.WriteString(data, self.DefRepList[i].GetLength(), self.DefRepList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.AtkRepCnt)
+        for i in range(self.AtkRepCnt):
+            data = CommFunc.WriteString(data, self.AtkRepList[i].GetLength(), self.AtkRepList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FamilyID:%d,
+                                DefRepCnt:%d,
+                                DefRepList:%s,
+                                AtkRepCnt:%d,
+                                AtkRepList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FamilyID,
+                                self.DefRepCnt,
+                                "...",
+                                self.AtkRepCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZBatReport=tagGCFamilyGCZBatReport()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatReport.Head.Cmd,m_NAtagGCFamilyGCZBatReport.Head.SubCmd))] = m_NAtagGCFamilyGCZBatReport
+
+
+#------------------------------------------------------
+# C0 28 仙盟攻城战城池场景信息 #tagGCFamilyGCZBatSceneInfo
+
+class  tagGCFamilyGCZBatScenePlayer(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    Name = ""    #(char Name[33])
+    Job = 0    #(BYTE Job)
+    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.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Name,_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)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.Name = ""
+        self.Job = 0
+        self.Face = 0
+        self.FacePic = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteBYTE(data, self.Job)
+        data = CommFunc.WriteDWORD(data, self.Face)
+        data = CommFunc.WriteDWORD(data, self.FacePic)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                Name:%s,
+                                Job:%d,
+                                Face:%d,
+                                FacePic:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.Name,
+                                self.Job,
+                                self.Face,
+                                self.FacePic
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZBatSceneHurt(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("CityID", c_int),    #被攻击的城池ID
+                  ("HurtValue", c_int),    #伤害飘血,求余亿部分
+                  ("HurtValueEx", 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.CityID = 0
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZBatSceneHurt)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
+                                CityID:%d,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.CityID,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZBatSceneCity(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("CityID", c_int),    #城池ID
+                  ("CityLV", c_ubyte),    #城池等级
+                  ("FamilyID", c_int),    #所属仙盟ID,可能为0
+                  ("Rank", c_ubyte),    #当前名次,从1开始
+                  ("HP", c_int),    #剩余生命,求余亿部分,剩余生命为0时代表被摧毁
+                  ("HPEx", c_int),    #剩余生命,整除亿部分
+                  ("HPMax", c_int),    #最大生命,求余亿部分
+                  ("HPMaxEx", c_int),    #最大生命,整除亿部分
+                  ("LastAtkedTime", 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.CityID = 0
+        self.CityLV = 0
+        self.FamilyID = 0
+        self.Rank = 0
+        self.HP = 0
+        self.HPEx = 0
+        self.HPMax = 0
+        self.HPMaxEx = 0
+        self.LastAtkedTime = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZBatSceneCity)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
+                                CityID:%d,
+                                CityLV:%d,
+                                FamilyID:%d,
+                                Rank:%d,
+                                HP:%d,
+                                HPEx:%d,
+                                HPMax:%d,
+                                HPMaxEx:%d,
+                                LastAtkedTime:%d
+                                '''\
+                                %(
+                                self.CityID,
+                                self.CityLV,
+                                self.FamilyID,
+                                self.Rank,
+                                self.HP,
+                                self.HPEx,
+                                self.HPMax,
+                                self.HPMaxEx,
+                                self.LastAtkedTime
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZBatSceneInfo(Structure):
+    Head = tagHead()
+    BatType = 0    #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
+    GroupNum = 0    #(BYTE GroupNum)// 分组编号,从1开始,对应A
+    TopFamilyID = 0    #(DWORD TopFamilyID)// 伤害第一仙盟ID
+    TopLeaderID = 0    #(DWORD TopLeaderID)// 伤害第一盟主ID
+    TopPlayerID = 0    #(DWORD TopPlayerID)// 伤害第一玩家ID
+    TopPlayerFamilyID = 0    #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID
+    AtkPlayerID = 0    #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息
+    AtkType = 0    #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效
+    KillCnt = 0    #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效
+    HurtCnt = 0    #(BYTE HurtCnt)
+    HurtList = list()    #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效
+    CityCnt = 0    #(BYTE CityCnt)
+    CityList = list()    #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池
+    PlayerCnt = 0    #(BYTE PlayerCnt)
+    PlayerInfoList = list()    #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x28
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.HurtCnt):
+            temHurtList = tagGCFamilyGCZBatSceneHurt()
+            _pos = temHurtList.ReadData(_lpData, _pos)
+            self.HurtList.append(temHurtList)
+        self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CityCnt):
+            temCityList = tagGCFamilyGCZBatSceneCity()
+            _pos = temCityList.ReadData(_lpData, _pos)
+            self.CityList.append(temCityList)
+        self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PlayerCnt):
+            temPlayerInfoList = tagGCFamilyGCZBatScenePlayer()
+            _pos = temPlayerInfoList.ReadData(_lpData, _pos)
+            self.PlayerInfoList.append(temPlayerInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x28
+        self.BatType = 0
+        self.GroupNum = 0
+        self.TopFamilyID = 0
+        self.TopLeaderID = 0
+        self.TopPlayerID = 0
+        self.TopPlayerFamilyID = 0
+        self.AtkPlayerID = 0
+        self.AtkType = 0
+        self.KillCnt = 0
+        self.HurtCnt = 0
+        self.HurtList = list()
+        self.CityCnt = 0
+        self.CityList = list()
+        self.PlayerCnt = 0
+        self.PlayerInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += 1
+        length += 1
+        for i in range(self.HurtCnt):
+            length += self.HurtList[i].GetLength()
+        length += 1
+        for i in range(self.CityCnt):
+            length += self.CityList[i].GetLength()
+        length += 1
+        for i in range(self.PlayerCnt):
+            length += self.PlayerInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.BatType)
+        data = CommFunc.WriteBYTE(data, self.GroupNum)
+        data = CommFunc.WriteDWORD(data, self.TopFamilyID)
+        data = CommFunc.WriteDWORD(data, self.TopLeaderID)
+        data = CommFunc.WriteDWORD(data, self.TopPlayerID)
+        data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID)
+        data = CommFunc.WriteDWORD(data, self.AtkPlayerID)
+        data = CommFunc.WriteBYTE(data, self.AtkType)
+        data = CommFunc.WriteBYTE(data, self.KillCnt)
+        data = CommFunc.WriteBYTE(data, self.HurtCnt)
+        for i in range(self.HurtCnt):
+            data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.CityCnt)
+        for i in range(self.CityCnt):
+            data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.PlayerCnt)
+        for i in range(self.PlayerCnt):
+            data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                BatType:%d,
+                                GroupNum:%d,
+                                TopFamilyID:%d,
+                                TopLeaderID:%d,
+                                TopPlayerID:%d,
+                                TopPlayerFamilyID:%d,
+                                AtkPlayerID:%d,
+                                AtkType:%d,
+                                KillCnt:%d,
+                                HurtCnt:%d,
+                                HurtList:%s,
+                                CityCnt:%d,
+                                CityList:%s,
+                                PlayerCnt:%d,
+                                PlayerInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.BatType,
+                                self.GroupNum,
+                                self.TopFamilyID,
+                                self.TopLeaderID,
+                                self.TopPlayerID,
+                                self.TopPlayerFamilyID,
+                                self.AtkPlayerID,
+                                self.AtkType,
+                                self.KillCnt,
+                                self.HurtCnt,
+                                "...",
+                                self.CityCnt,
+                                "...",
+                                self.PlayerCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo
+
+
+#------------------------------------------------------
+# C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo
+
+class  tagGCFamilyGCZCampMem(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    Name = ""    #(char Name[33])//参与玩家名字
+    FamilyLV = 0    #(BYTE FamilyLV)//参与时的家族职位
+    Job = 0    #(BYTE Job)
+    Face = 0    #(DWORD Face)//基本脸型
+    FacePic = 0    #(DWORD FacePic)//头像框
+    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
+    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
+    HP = 0    #(DWORD HP)//剩余生命,求余亿部分
+    HPEx = 0    #(DWORD HPEx)//剩余生命,整除亿部分
+    HPMax = 0    #(DWORD HPMax)//最大生命,求余亿部分
+    HPMaxEx = 0    #(DWORD HPMaxEx)//最大生命,整除亿部分
+    TotalHurt = 0    #(DWORD TotalHurt)//活动总伤害,求余亿部分,如果不在榜上则读该值
+    TotalHurtEx = 0    #(DWORD TotalHurtEx)//活动总伤害,整除亿部分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TotalHurt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.TotalHurtEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.Name = ""
+        self.FamilyLV = 0
+        self.Job = 0
+        self.Face = 0
+        self.FacePic = 0
+        self.FightPower = 0
+        self.FightPowerEx = 0
+        self.HP = 0
+        self.HPEx = 0
+        self.HPMax = 0
+        self.HPMaxEx = 0
+        self.TotalHurt = 0
+        self.TotalHurtEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 1
+        length += 1
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteBYTE(data, self.FamilyLV)
+        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.WriteDWORD(data, self.FightPowerEx)
+        data = CommFunc.WriteDWORD(data, self.HP)
+        data = CommFunc.WriteDWORD(data, self.HPEx)
+        data = CommFunc.WriteDWORD(data, self.HPMax)
+        data = CommFunc.WriteDWORD(data, self.HPMaxEx)
+        data = CommFunc.WriteDWORD(data, self.TotalHurt)
+        data = CommFunc.WriteDWORD(data, self.TotalHurtEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                Name:%s,
+                                FamilyLV:%d,
+                                Job:%d,
+                                Face:%d,
+                                FacePic:%d,
+                                FightPower:%d,
+                                FightPowerEx:%d,
+                                HP:%d,
+                                HPEx:%d,
+                                HPMax:%d,
+                                HPMaxEx:%d,
+                                TotalHurt:%d,
+                                TotalHurtEx:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.Name,
+                                self.FamilyLV,
+                                self.Job,
+                                self.Face,
+                                self.FacePic,
+                                self.FightPower,
+                                self.FightPowerEx,
+                                self.HP,
+                                self.HPEx,
+                                self.HPMax,
+                                self.HPMaxEx,
+                                self.TotalHurt,
+                                self.TotalHurtEx
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZCampRound(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("RoundNum", c_ubyte),    #轮次编号,从1开始
+                  ("BatType", c_ubyte),    #所在战场类型
+                  ("GroupNum", c_ubyte),    #所在分组编号
+                  ("Rank", c_ubyte),    #本轮排名
+                  ("Score", c_ushort),    #本轮积分,总积分为所有轮次累加
+                  ("UpdownState", c_ubyte),    #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型
+                  ]
+
+    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.RoundNum = 0
+        self.BatType = 0
+        self.GroupNum = 0
+        self.Rank = 0
+        self.Score = 0
+        self.UpdownState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZCampRound)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo:
+                                RoundNum:%d,
+                                BatType:%d,
+                                GroupNum:%d,
+                                Rank:%d,
+                                Score:%d,
+                                UpdownState:%d
+                                '''\
+                                %(
+                                self.RoundNum,
+                                self.BatType,
+                                self.GroupNum,
+                                self.Rank,
+                                self.Score,
+                                self.UpdownState
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZCampInfo(Structure):
+    Head = tagHead()
+    FamilyID = 0    #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准
+    CampLV = 0    #(WORD CampLV)//大本营当前等级
+    CampExp = 0    #(DWORD CampExp)//大本营当前经验
+    CityLV = 0    #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样
+    HPBase = 0    #(DWORD HPBase)//基础生命,求余亿部分
+    HPBaseEx = 0    #(DWORD HPBaseEx)//基础生命,整除亿部分
+    HPMax = 0    #(DWORD HPMax)//总生命,求余亿部分
+    HPMaxEx = 0    #(DWORD HPMaxEx)//总大生命,整除亿部分
+    HP = 0    #(DWORD HP)//剩余生命,求余亿部分
+    HPEx = 0    #(DWORD HPEx)//剩余生命,整除亿部分
+    RoundCnt = 0    #(BYTE RoundCnt)
+    RoundInfoList = list()    #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息
+    DefMemCnt = 0    #(BYTE DefMemCnt)
+    DefMemList = list()    #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x26
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.HPBase,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPBaseEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RoundCnt):
+            temRoundInfoList = tagGCFamilyGCZCampRound()
+            _pos = temRoundInfoList.ReadData(_lpData, _pos)
+            self.RoundInfoList.append(temRoundInfoList)
+        self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.DefMemCnt):
+            temDefMemList = tagGCFamilyGCZCampMem()
+            _pos = temDefMemList.ReadData(_lpData, _pos)
+            self.DefMemList.append(temDefMemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x26
+        self.FamilyID = 0
+        self.CampLV = 0
+        self.CampExp = 0
+        self.CityLV = 0
+        self.HPBase = 0
+        self.HPBaseEx = 0
+        self.HPMax = 0
+        self.HPMaxEx = 0
+        self.HP = 0
+        self.HPEx = 0
+        self.RoundCnt = 0
+        self.RoundInfoList = list()
+        self.DefMemCnt = 0
+        self.DefMemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 2
+        length += 4
+        length += 2
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        for i in range(self.RoundCnt):
+            length += self.RoundInfoList[i].GetLength()
+        length += 1
+        for i in range(self.DefMemCnt):
+            length += self.DefMemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteWORD(data, self.CampLV)
+        data = CommFunc.WriteDWORD(data, self.CampExp)
+        data = CommFunc.WriteWORD(data, self.CityLV)
+        data = CommFunc.WriteDWORD(data, self.HPBase)
+        data = CommFunc.WriteDWORD(data, self.HPBaseEx)
+        data = CommFunc.WriteDWORD(data, self.HPMax)
+        data = CommFunc.WriteDWORD(data, self.HPMaxEx)
+        data = CommFunc.WriteDWORD(data, self.HP)
+        data = CommFunc.WriteDWORD(data, self.HPEx)
+        data = CommFunc.WriteBYTE(data, self.RoundCnt)
+        for i in range(self.RoundCnt):
+            data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.DefMemCnt)
+        for i in range(self.DefMemCnt):
+            data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FamilyID:%d,
+                                CampLV:%d,
+                                CampExp:%d,
+                                CityLV:%d,
+                                HPBase:%d,
+                                HPBaseEx:%d,
+                                HPMax:%d,
+                                HPMaxEx:%d,
+                                HP:%d,
+                                HPEx:%d,
+                                RoundCnt:%d,
+                                RoundInfoList:%s,
+                                DefMemCnt:%d,
+                                DefMemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FamilyID,
+                                self.CampLV,
+                                self.CampExp,
+                                self.CityLV,
+                                self.HPBase,
+                                self.HPBaseEx,
+                                self.HPMax,
+                                self.HPMaxEx,
+                                self.HP,
+                                self.HPEx,
+                                self.RoundCnt,
+                                "...",
+                                self.DefMemCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZCampInfo=tagGCFamilyGCZCampInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZCampInfo.Head.Cmd,m_NAtagGCFamilyGCZCampInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZCampInfo
+
+
+#------------------------------------------------------
+# C0 27 仙盟攻城战成员贡献值信息 #tagGCFamilyGCZContributionInfo
+
+class  tagGCFamilyGCZContribution(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("PlayerID", c_int),    
+                  ("ContributionValue", 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.PlayerID = 0
+        self.ContributionValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZContribution)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 27 仙盟攻城战成员贡献值信息 //tagGCFamilyGCZContributionInfo:
+                                PlayerID:%d,
+                                ContributionValue:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.ContributionValue
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZContributionInfo(Structure):
+    Head = tagHead()
+    ContriCnt = 0    #(BYTE ContriCnt)
+    ContriList = list()    #(vector<tagGCFamilyGCZContribution> ContriList)//成员贡献值列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x27
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ContriCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ContriCnt):
+            temContriList = tagGCFamilyGCZContribution()
+            _pos = temContriList.ReadData(_lpData, _pos)
+            self.ContriList.append(temContriList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x27
+        self.ContriCnt = 0
+        self.ContriList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.ContriCnt):
+            length += self.ContriList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ContriCnt)
+        for i in range(self.ContriCnt):
+            data = CommFunc.WriteString(data, self.ContriList[i].GetLength(), self.ContriList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ContriCnt:%d,
+                                ContriList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ContriCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZContributionInfo=tagGCFamilyGCZContributionInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZContributionInfo.Head.Cmd,m_NAtagGCFamilyGCZContributionInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZContributionInfo
+
+
+#------------------------------------------------------
+# C0 31 仙盟攻城战分组仙盟成员伤害明细 #tagGCFamilyGCZGroupFamilyMemHurtInfo
+
+class  tagGCFamilyGCZGroupFamilyMemHurt(Structure):
+    PlayerID = 0    #(DWORD PlayerID)
+    Name = ""    #(char Name[33])//参与玩家名字
+    HurtValue = 0    #(DWORD HurtValue)//伤害,求余亿部分
+    HurtValueEx = 0    #(DWORD HurtValueEx)//伤害,整除亿部分
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.PlayerID = 0
+        self.Name = ""
+        self.HurtValue = 0
+        self.HurtValueEx = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 33
+        length += 4
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteString(data, 33, self.Name)
+        data = CommFunc.WriteDWORD(data, self.HurtValue)
+        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                PlayerID:%d,
+                                Name:%s,
+                                HurtValue:%d,
+                                HurtValueEx:%d
+                                '''\
+                                %(
+                                self.PlayerID,
+                                self.Name,
+                                self.HurtValue,
+                                self.HurtValueEx
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZGroupFamilyMemHurtInfo(Structure):
+    Head = tagHead()
+    FamilyID = 0    #(DWORD FamilyID)//查看的目标仙盟ID
+    HurtMemCnt = 0    #(BYTE HurtMemCnt)
+    HurtMemList = list()    #(vector<tagGCFamilyGCZGroupFamilyMemHurt> HurtMemList)//成员伤害明细列表,只算城池被摧毁前的伤害,未排序,前端自己排序
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x31
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HurtMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.HurtMemCnt):
+            temHurtMemList = tagGCFamilyGCZGroupFamilyMemHurt()
+            _pos = temHurtMemList.ReadData(_lpData, _pos)
+            self.HurtMemList.append(temHurtMemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x31
+        self.FamilyID = 0
+        self.HurtMemCnt = 0
+        self.HurtMemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        for i in range(self.HurtMemCnt):
+            length += self.HurtMemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.FamilyID)
+        data = CommFunc.WriteBYTE(data, self.HurtMemCnt)
+        for i in range(self.HurtMemCnt):
+            data = CommFunc.WriteString(data, self.HurtMemList[i].GetLength(), self.HurtMemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FamilyID:%d,
+                                HurtMemCnt:%d,
+                                HurtMemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FamilyID,
+                                self.HurtMemCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo=tagGCFamilyGCZGroupFamilyMemHurtInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.Cmd,m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo
+
+
+#------------------------------------------------------
+# C0 32 仙盟攻城战竞猜名单信息 #tagGCFamilyGCZGuessInfo
+
+class  tagGCFamilyGCZGuessFamily(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("FamilyID", c_int),    #备选仙盟ID
+                  ("GuessValue", c_ushort),    #竞猜热度值,玩家每次选择则加1,重复选择也算
+                  ]
+
+    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.FamilyID = 0
+        self.GuessValue = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZGuessFamily)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
+                                FamilyID:%d,
+                                GuessValue:%d
+                                '''\
+                                %(
+                                self.FamilyID,
+                                self.GuessValue
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZGuessRight(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("AwardID", c_ubyte),    #奖励ID
+                  ("RightPlayerCnt", c_ushort),    #猜中玩家个数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.AwardID = 0
+        self.RightPlayerCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCFamilyGCZGuessRight)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
+                                AwardID:%d,
+                                RightPlayerCnt:%d
+                                '''\
+                                %(
+                                self.AwardID,
+                                self.RightPlayerCnt
+                                )
+        return DumpString
+
+
+class  tagGCFamilyGCZGuessInfo(Structure):
+    Head = tagHead()
+    PlayerID = 0    #(DWORD PlayerID)//竞猜玩家ID,有玩家修改竞猜时会附带该信息,如果是自己ID,则更新自己的竞猜选项,否则无视
+    SelectCnt = 0    #(BYTE SelectCnt)
+    SelectFamilyIDList = list()    #(vector<DWORD> SelectFamilyIDList)//竞猜玩家选择的仙盟ID顺序
+    FinalCnt = 0    #(BYTE FinalCnt)
+    FinalFamilyIDList = list()    #(vector<DWORD> FinalFamilyIDList)//最终排名顺序,仅活动排名出来后才有值
+    RightCnt = 0    #(BYTE RightCnt)
+    RightInfoList = list()    #(vector<tagGCFamilyGCZGuessRight> RightInfoList)//猜中个数明细列表
+    FamilyCnt = 0    #(BYTE FamilyCnt)
+    GuessFamilyList = list()    #(vector<tagGCFamilyGCZGuessFamily> GuessFamilyList)//备选仙盟名单列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x32
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.SelectCnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.SelectFamilyIDList.append(value)
+        self.FinalCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FinalCnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.FinalFamilyIDList.append(value)
+        self.RightCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RightCnt):
+            temRightInfoList = tagGCFamilyGCZGuessRight()
+            _pos = temRightInfoList.ReadData(_lpData, _pos)
+            self.RightInfoList.append(temRightInfoList)
+        self.FamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FamilyCnt):
+            temGuessFamilyList = tagGCFamilyGCZGuessFamily()
+            _pos = temGuessFamilyList.ReadData(_lpData, _pos)
+            self.GuessFamilyList.append(temGuessFamilyList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x32
+        self.PlayerID = 0
+        self.SelectCnt = 0
+        self.SelectFamilyIDList = list()
+        self.FinalCnt = 0
+        self.FinalFamilyIDList = list()
+        self.RightCnt = 0
+        self.RightInfoList = list()
+        self.FamilyCnt = 0
+        self.GuessFamilyList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 1
+        length += 4 * self.SelectCnt
+        length += 1
+        length += 4 * self.FinalCnt
+        length += 1
+        for i in range(self.RightCnt):
+            length += self.RightInfoList[i].GetLength()
+        length += 1
+        for i in range(self.FamilyCnt):
+            length += self.GuessFamilyList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.PlayerID)
+        data = CommFunc.WriteBYTE(data, self.SelectCnt)
+        for i in range(self.SelectCnt):
+            data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i])
+        data = CommFunc.WriteBYTE(data, self.FinalCnt)
+        for i in range(self.FinalCnt):
+            data = CommFunc.WriteDWORD(data, self.FinalFamilyIDList[i])
+        data = CommFunc.WriteBYTE(data, self.RightCnt)
+        for i in range(self.RightCnt):
+            data = CommFunc.WriteString(data, self.RightInfoList[i].GetLength(), self.RightInfoList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.FamilyCnt)
+        for i in range(self.FamilyCnt):
+            data = CommFunc.WriteString(data, self.GuessFamilyList[i].GetLength(), self.GuessFamilyList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                PlayerID:%d,
+                                SelectCnt:%d,
+                                SelectFamilyIDList:%s,
+                                FinalCnt:%d,
+                                FinalFamilyIDList:%s,
+                                RightCnt:%d,
+                                RightInfoList:%s,
+                                FamilyCnt:%d,
+                                GuessFamilyList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.PlayerID,
+                                self.SelectCnt,
+                                "...",
+                                self.FinalCnt,
+                                "...",
+                                self.RightCnt,
+                                "...",
+                                self.FamilyCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCFamilyGCZGuessInfo=tagGCFamilyGCZGuessInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGuessInfo.Head.Cmd,m_NAtagGCFamilyGCZGuessInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGuessInfo
+
+
+#------------------------------------------------------
+# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo
+
+class  tagGCLuckyCloudBuyLotteryRec(Structure):
+    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
+    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)// 中奖玩家名
+    LotteryNum = 0    #(WORD LotteryNum)// 开奖号码
+    LotteryTime = 0    #(DWORD LotteryTime)// 开奖时间戳,秒
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.SuperItemID = 0
+        self.SuperItemCount = 0
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.LotteryNum = 0
+        self.LotteryTime = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 1
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+        length += 4
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.SuperItemID)
+        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.LotteryNum)
+        data = CommFunc.WriteDWORD(data, self.LotteryTime)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                SuperItemID:%d,
+                                SuperItemCount:%d,
+                                NameLen:%d,
+                                PlayerName:%s,
+                                LotteryNum:%d,
+                                LotteryTime:%d
+                                '''\
+                                %(
+                                self.SuperItemID,
+                                self.SuperItemCount,
+                                self.NameLen,
+                                self.PlayerName,
+                                self.LotteryNum,
+                                self.LotteryTime
+                                )
+        return DumpString
+
+
+class  tagGCLuckyCloudBuyLotteryRecInfo(Structure):
+    Head = tagHead()
+    ZoneCount = 0    #(BYTE ZoneCount)// 分区数
+    ZoneIDList = list()    #(vector<BYTE> ZoneIDList)// 所有分区ID列表
+    ZoneID = 0    #(BYTE ZoneID)// 返回记录分区ID
+    Count = 0    #(WORD Count)
+    LotteryRecList = list()    #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x14
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.ZoneCount):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.ZoneIDList.append(value)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temLotteryRecList = tagGCLuckyCloudBuyLotteryRec()
+            _pos = temLotteryRecList.ReadData(_lpData, _pos)
+            self.LotteryRecList.append(temLotteryRecList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x14
+        self.ZoneCount = 0
+        self.ZoneIDList = list()
+        self.ZoneID = 0
+        self.Count = 0
+        self.LotteryRecList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1 * self.ZoneCount
+        length += 1
+        length += 2
+        for i in range(self.Count):
+            length += self.LotteryRecList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneCount)
+        for i in range(self.ZoneCount):
+            data = CommFunc.WriteBYTE(data, self.ZoneIDList[i])
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneCount:%d,
+                                ZoneIDList:%s,
+                                ZoneID:%d,
+                                Count:%d,
+                                LotteryRecList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneCount,
+                                "...",
+                                self.ZoneID,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo
+
+
+#------------------------------------------------------
+# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo
+
+class  tagGCLuckyCloudBuyNumRec(Structure):
+    NameLen = 0    #(BYTE NameLen)
+    PlayerName = ""    #(String PlayerName)
+    BuyNum = 0    #(WORD BuyNum)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+        self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.NameLen = 0
+        self.PlayerName = ""
+        self.BuyNum = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += len(self.PlayerName)
+        length += 2
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.NameLen)
+        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
+        data = CommFunc.WriteWORD(data, self.BuyNum)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                NameLen:%d,
+                                PlayerName:%s,
+                                BuyNum:%d
+                                '''\
+                                %(
+                                self.NameLen,
+                                self.PlayerName,
+                                self.BuyNum
+                                )
+        return DumpString
+
+
+class  tagGCLuckyCloudBuyNumRecInfo(Structure):
+    Head = tagHead()
+    RemainCount = 0    #(WORD RemainCount)// 开奖剩余份数
+    Count = 0    #(WORD Count)
+    BuyNumRecList = list()    #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temBuyNumRecList = tagGCLuckyCloudBuyNumRec()
+            _pos = temBuyNumRecList.ReadData(_lpData, _pos)
+            self.BuyNumRecList.append(temBuyNumRecList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x13
+        self.RemainCount = 0
+        self.Count = 0
+        self.BuyNumRecList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 2
+        for i in range(self.Count):
+            length += self.BuyNumRecList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.RemainCount)
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                RemainCount:%d,
+                                Count:%d,
+                                BuyNumRecList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.RemainCount,
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo
+
+
+#------------------------------------------------------
+# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo
+
+class  tagGCLuckyCloudBuyRoundItem(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(tagGCLuckyCloudBuyRoundItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagGCLuckyCloudBuyRoundTime(Structure):
+    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
+    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
+    RoundMax = 0    #(BYTE RoundMax)// 本时段最大轮次
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+        self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        return _pos
+
+    def Clear(self):
+        self.StartTime = ""
+        self.EndtTime = ""
+        self.RoundMax = 0
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 5
+        length += 5
+        length += 1
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, 5, self.StartTime)
+        data = CommFunc.WriteString(data, 5, self.EndtTime)
+        data = CommFunc.WriteBYTE(data, self.RoundMax)
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                StartTime:%s,
+                                EndtTime:%s,
+                                RoundMax:%d
+                                '''\
+                                %(
+                                self.StartTime,
+                                self.EndtTime,
+                                self.RoundMax
+                                )
+        return DumpString
+
+
+class  tagGCLuckyCloudBuyRoundInfo(Structure):
+    Head = tagHead()
+    ZoneID = 0    #(BYTE ZoneID)// 所属分区ID
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    RoundTimeCount = 0    #(BYTE RoundTimeCount)
+    RoundTimeList = list()    #(vector<tagGCLuckyCloudBuyRoundTime> RoundTimeList)//轮次时间段
+    RoundID = 0    #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存
+    RoundNum = 0    #(BYTE RoundNum)// 当前时段第几轮
+    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
+    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
+    SuperItemMoneyType = 0    #(BYTE SuperItemMoneyType)// 大奖价值货币类型
+    SuperItemMoneyValue = 0    #(DWORD SuperItemMoneyValue)// 大奖价值
+    LVLimit = 0    #(WORD LVLimit)//开启等级
+    BaseItemCount = 0    #(BYTE BaseItemCount)// 每次购买固定奖励物品数
+    BaseItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息
+    RandItemCount = 0    #(BYTE RandItemCount)// 每次购买随机奖励物品数
+    RandItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x12
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.RoundTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RoundTimeCount):
+            temRoundTimeList = tagGCLuckyCloudBuyRoundTime()
+            _pos = temRoundTimeList.ReadData(_lpData, _pos)
+            self.RoundTimeList.append(temRoundTimeList)
+        self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LVLimit,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.BaseItemCount):
+            temBaseItemList = tagGCLuckyCloudBuyRoundItem()
+            _pos = temBaseItemList.ReadData(_lpData, _pos)
+            self.BaseItemList.append(temBaseItemList)
+        self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.RandItemCount):
+            temRandItemList = tagGCLuckyCloudBuyRoundItem()
+            _pos = temRandItemList.ReadData(_lpData, _pos)
+            self.RandItemList.append(temRandItemList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xC0
+        self.Head.SubCmd = 0x12
+        self.ZoneID = 0
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.RoundTimeCount = 0
+        self.RoundTimeList = list()
+        self.RoundID = 0
+        self.RoundNum = 0
+        self.SuperItemID = 0
+        self.SuperItemCount = 0
+        self.SuperItemMoneyType = 0
+        self.SuperItemMoneyValue = 0
+        self.LVLimit = 0
+        self.BaseItemCount = 0
+        self.BaseItemList = list()
+        self.RandItemCount = 0
+        self.RandItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.RoundTimeCount):
+            length += self.RoundTimeList[i].GetLength()
+        length += 4
+        length += 1
+        length += 4
+        length += 1
+        length += 1
+        length += 4
+        length += 2
+        length += 1
+        for i in range(self.BaseItemCount):
+            length += self.BaseItemList[i].GetLength()
+        length += 1
+        for i in range(self.RandItemCount):
+            length += self.RandItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZoneID)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.RoundTimeCount)
+        for i in range(self.RoundTimeCount):
+            data = CommFunc.WriteString(data, self.RoundTimeList[i].GetLength(), self.RoundTimeList[i].GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.RoundID)
+        data = CommFunc.WriteBYTE(data, self.RoundNum)
+        data = CommFunc.WriteDWORD(data, self.SuperItemID)
+        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+        data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType)
+        data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue)
+        data = CommFunc.WriteWORD(data, self.LVLimit)
+        data = CommFunc.WriteBYTE(data, self.BaseItemCount)
+        for i in range(self.BaseItemCount):
+            data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.RandItemCount)
+        for i in range(self.RandItemCount):
+            data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZoneID:%d,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                RoundTimeCount:%d,
+                                RoundTimeList:%s,
+                                RoundID:%d,
+                                RoundNum:%d,
+                                SuperItemID:%d,
+                                SuperItemCount:%d,
+                                SuperItemMoneyType:%d,
+                                SuperItemMoneyValue:%d,
+                                LVLimit:%d,
+                                BaseItemCount:%d,
+                                BaseItemList:%s,
+                                RandItemCount:%d,
+                                RandItemList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZoneID,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.RoundTimeCount,
+                                "...",
+                                self.RoundID,
+                                self.RoundNum,
+                                self.SuperItemID,
+                                self.SuperItemCount,
+                                self.SuperItemMoneyType,
+                                self.SuperItemMoneyValue,
+                                self.LVLimit,
+                                self.BaseItemCount,
+                                "...",
+                                self.RandItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo
+
+
+#------------------------------------------------------
 # C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo
 
 class  tagMCChampionshipPlayerInfo(Structure):

--
Gitblit v1.8.0