ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -1747,6 +1747,8 @@
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)//名字
    PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
    data = None
@@ -1759,6 +1761,8 @@
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
@@ -1766,6 +1770,8 @@
        self.NameLen = 0
        self.Name = ""
        self.PlayeJob = 0
        self.Face = 0
        self.FacePic = 0
        self.MoneyNum = 0
        return
@@ -1775,6 +1781,8 @@
        length += len(self.Name)
        length += 1
        length += 4
        length += 4
        length += 4
        return length
@@ -1783,6 +1791,8 @@
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteBYTE(data, self.PlayeJob)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.MoneyNum)
        return data
@@ -1791,12 +1801,16 @@
                                NameLen:%d,
                                Name:%s,
                                PlayeJob:%d,
                                Face:%d,
                                FacePic:%d,
                                MoneyNum:%d
                                '''\
                                %(
                                self.NameLen,
                                self.Name,
                                self.PlayeJob,
                                self.Face,
                                self.FacePic,
                                self.MoneyNum
                                )
        return DumpString
@@ -1885,6 +1899,8 @@
    Name = ""    #(String Name)//玩家名字
    Time = 0    #(DWORD Time)//时间
    PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    MoneyType = 0    #(BYTE MoneyType)//金钱类型
    MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
    GetWay = 0    #(BYTE GetWay)//获得途径
@@ -1907,6 +1923,8 @@
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -1924,6 +1942,8 @@
        self.Name = ""
        self.Time = 0
        self.PlayeJob = 0
        self.Face = 0
        self.FacePic = 0
        self.MoneyType = 0
        self.MoneyNum = 0
        self.GetWay = 0
@@ -1942,6 +1962,8 @@
        length += len(self.Name)
        length += 4
        length += 1
        length += 4
        length += 4
        length += 1
        length += 4
        length += 1
@@ -1961,6 +1983,8 @@
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteDWORD(data, self.Time)
        data = CommFunc.WriteBYTE(data, self.PlayeJob)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteBYTE(data, self.MoneyType)
        data = CommFunc.WriteDWORD(data, self.MoneyNum)
        data = CommFunc.WriteBYTE(data, self.GetWay)
@@ -1979,6 +2003,8 @@
                                Name:%s,
                                Time:%d,
                                PlayeJob:%d,
                                Face:%d,
                                FacePic:%d,
                                MoneyType:%d,
                                MoneyNum:%d,
                                GetWay:%d,
@@ -1995,6 +2021,8 @@
                                self.Name,
                                self.Time,
                                self.PlayeJob,
                                self.Face,
                                self.FacePic,
                                self.MoneyType,
                                self.MoneyNum,
                                self.GetWay,
@@ -2684,6 +2712,246 @@
#------------------------------------------------------
# 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):
@@ -2968,6 +3236,8 @@
    AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
    IsWin = 0    #(BYTE IsWin)//是否获胜
    Time = 0    #(DWORD Time)//时间戳
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
@@ -2988,6 +3258,8 @@
        self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen)
        self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -3003,6 +3275,8 @@
        self.AddScore = ""
        self.IsWin = 0
        self.Time = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -3018,6 +3292,8 @@
        length += 1
        length += len(self.AddScore)
        length += 1
        length += 4
        length += 4
        length += 4
        return length
@@ -3036,6 +3312,8 @@
        data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore)
        data = CommFunc.WriteBYTE(data, self.IsWin)
        data = CommFunc.WriteDWORD(data, self.Time)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
@@ -3051,7 +3329,9 @@
                                AddScoreLen:%d,
                                AddScore:%s,
                                IsWin:%d,
                                Time:%d
                                Time:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -3065,7 +3345,9 @@
                                self.AddScoreLen,
                                self.AddScore,
                                self.IsWin,
                                self.Time
                                self.Time,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -3148,6 +3430,8 @@
    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
    Score = 0    #(DWORD Score)//积分
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
@@ -3164,6 +3448,8 @@
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -3175,6 +3461,8 @@
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Score = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -3184,6 +3472,8 @@
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
@@ -3200,6 +3490,8 @@
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.Score)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
@@ -3211,7 +3503,9 @@
                                RealmLV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d
                                Score:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -3221,7 +3515,9 @@
                                self.RealmLV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score
                                self.Score,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -4652,7 +4948,7 @@
    ID = 0    #(DWORD ID)
    ID2 = 0    #(DWORD ID2)
    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
    Name2 = ""    #(char Name2[33])//名字2
    Name2 = ""    #(char Name2[65])//名字2
    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
    Value1 = 0    #(DWORD Value1)//排序依赖的值,比如,等级
    Value2 = 0    #(DWORD Value2)//排序依赖的值,比如,战斗力
@@ -4679,7 +4975,7 @@
        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65)
        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -4724,7 +5020,7 @@
        length += 4
        length += 4
        length += 33
        length += 33
        length += 65
        length += 1
        length += 4
        length += 4
@@ -4748,7 +5044,7 @@
        data = CommFunc.WriteDWORD(data, self.ID)
        data = CommFunc.WriteDWORD(data, self.ID2)
        data = CommFunc.WriteString(data, 33, self.Name1)
        data = CommFunc.WriteString(data, 33, self.Name2)
        data = CommFunc.WriteString(data, 65, self.Name2)
        data = CommFunc.WriteBYTE(data, self.Type2)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteDWORD(data, self.Value2)
@@ -5796,6 +6092,8 @@
    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)
@@ -5815,6 +6113,8 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.EquipShowIDCount):
@@ -5831,6 +6131,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.EquipShowSwitch = 0
        self.EquipShowIDCount = 0
        self.EquipShowID = list()
@@ -5847,6 +6149,8 @@
        length += 1
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += 4 * self.EquipShowIDCount
@@ -5862,6 +6166,8 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
        data = CommFunc.WriteBYTE(data, self.EquipShowIDCount)
        for i in range(self.EquipShowIDCount):
@@ -5878,6 +6184,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                EquipShowSwitch:%d,
                                EquipShowIDCount:%d,
                                EquipShowID:%s
@@ -5891,6 +6199,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.EquipShowSwitch,
                                self.EquipShowIDCount,
                                "..."
@@ -5983,6 +6293,8 @@
    LV = 0    #(WORD LV)// 玩家等级
    Job = 0    #(BYTE Job)// 玩家职业
    RealmLV = 0    #(WORD RealmLV)// 玩家境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
@@ -5999,6 +6311,8 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -6010,6 +6324,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -6022,6 +6338,8 @@
        length += 2
        length += 1
        length += 2
        length += 4
        length += 4
        return length
@@ -6035,6 +6353,8 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
@@ -6046,7 +6366,9 @@
                                Name:%s,
                                LV:%d,
                                Job:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.AddTime,
@@ -6056,7 +6378,9 @@
                                self.Name,
                                self.LV,
                                self.Job,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -7680,6 +8004,8 @@
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)//等级
    RealmLV = 0    #(BYTE RealmLV)//境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    MapID = 0    #(DWORD MapID)
    LineID = 0    #(DWORD LineID)
    NPCID = 0    #(DWORD NPCID)
@@ -7699,6 +8025,8 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -7713,6 +8041,8 @@
        self.Job = 0
        self.LV = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.MapID = 0
        self.LineID = 0
        self.NPCID = 0
@@ -7731,6 +8061,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 2
        length += len(self.ExData)
@@ -7744,6 +8076,8 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.MapID)
        data = CommFunc.WriteDWORD(data, self.LineID)
        data = CommFunc.WriteDWORD(data, self.NPCID)
@@ -7759,6 +8093,8 @@
                                Job:%d,
                                LV:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                MapID:%d,
                                LineID:%d,
                                NPCID:%d,
@@ -7772,6 +8108,8 @@
                                self.Job,
                                self.LV,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.MapID,
                                self.LineID,
                                self.NPCID,
@@ -8230,6 +8568,8 @@
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)
    RealmLV = 0    #(BYTE RealmLV)//境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    MapID = 0    #(DWORD MapID)
    LineID = 0    #(DWORD LineID)
    NPCID = 0    #(DWORD NPCID)
@@ -8254,6 +8594,8 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -8274,6 +8616,8 @@
        self.Job = 0
        self.LV = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.MapID = 0
        self.LineID = 0
        self.NPCID = 0
@@ -8295,6 +8639,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 2
        length += len(self.ExData)
        length += 19
@@ -8311,6 +8657,8 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.MapID)
        data = CommFunc.WriteDWORD(data, self.LineID)
        data = CommFunc.WriteDWORD(data, self.NPCID)
@@ -8329,6 +8677,8 @@
                                Job:%d,
                                LV:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                MapID:%d,
                                LineID:%d,
                                NPCID:%d,
@@ -8345,6 +8695,8 @@
                                self.Job,
                                self.LV,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.MapID,
                                self.LineID,
                                self.NPCID,
@@ -8448,7 +8800,9 @@
    RobPlayerID = 0    #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺
    RobWorkerCount = 0    #(BYTE RobWorkerCount)// 抢夺工人个数
    RobPlayerName = ""    #(char RobPlayerName[33])
    RobJob = 0    #(BYTE RobJob)
    RobFace = 0    #(DWORD RobFace)
    RobFacePic = 0    #(DWORD RobFacePic)
    data = None
    def __init__(self):
@@ -8470,7 +8824,9 @@
        self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.RobJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RobFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -8487,7 +8843,9 @@
        self.RobPlayerID = 0
        self.RobWorkerCount = 0
        self.RobPlayerName = ""
        self.RobJob = 0
        self.RobFace = 0
        self.RobFacePic = 0
        return
    def GetLength(self):
@@ -8505,6 +8863,8 @@
        length += 4
        length += 1
        length += 33
        length += 1
        length += 4
        length += 4
        return length
@@ -8524,7 +8884,9 @@
        data = CommFunc.WriteDWORD(data, self.RobPlayerID)
        data = CommFunc.WriteBYTE(data, self.RobWorkerCount)
        data = CommFunc.WriteString(data, 33, self.RobPlayerName)
        data = CommFunc.WriteBYTE(data, self.RobJob)
        data = CommFunc.WriteDWORD(data, self.RobFace)
        data = CommFunc.WriteDWORD(data, self.RobFacePic)
        return data
    def OutputString(self):
@@ -8542,7 +8904,9 @@
                                RobPlayerID:%d,
                                RobWorkerCount:%d,
                                RobPlayerName:%s,
                                RobFace:%d
                                RobJob:%d,
                                RobFace:%d,
                                RobFacePic:%d
                                '''\
                                %(
                                self.Index,
@@ -8558,7 +8922,9 @@
                                self.RobPlayerID,
                                self.RobWorkerCount,
                                self.RobPlayerName,
                                self.RobFace
                                self.RobJob,
                                self.RobFace,
                                self.RobFacePic
                                )
        return DumpString
@@ -8566,7 +8932,10 @@
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
@@ -8579,7 +8948,10 @@
        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()
@@ -8590,7 +8962,10 @@
    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
@@ -8599,6 +8974,9 @@
        length = 0
        length += 4
        length += 33
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        for i in range(self.MineCount):
@@ -8610,7 +8988,10 @@
        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())
@@ -8620,14 +9001,20 @@
        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,
                                "..."
                                )
@@ -8723,7 +9110,9 @@
    RecordTime = 0    #(DWORD RecordTime)// 记录时间戳
    MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID
    TagPlayerName = ""    #(char TagPlayerName[33])
    TagJob = 0    #(BYTE TagJob)
    TagFace = 0    #(DWORD TagFace)
    TagFacePic = 0    #(DWORD TagFacePic)
    data = None
    def __init__(self):
@@ -8737,7 +9126,9 @@
        self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TagFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -8746,7 +9137,9 @@
        self.RecordTime = 0
        self.MineID = 0
        self.TagPlayerName = ""
        self.TagJob = 0
        self.TagFace = 0
        self.TagFacePic = 0
        return
    def GetLength(self):
@@ -8756,6 +9149,8 @@
        length += 4
        length += 2
        length += 33
        length += 1
        length += 4
        length += 4
        return length
@@ -8767,7 +9162,9 @@
        data = CommFunc.WriteDWORD(data, self.RecordTime)
        data = CommFunc.WriteWORD(data, self.MineID)
        data = CommFunc.WriteString(data, 33, self.TagPlayerName)
        data = CommFunc.WriteBYTE(data, self.TagJob)
        data = CommFunc.WriteDWORD(data, self.TagFace)
        data = CommFunc.WriteDWORD(data, self.TagFacePic)
        return data
    def OutputString(self):
@@ -8777,7 +9174,9 @@
                                RecordTime:%d,
                                MineID:%d,
                                TagPlayerName:%s,
                                TagFace:%d
                                TagJob:%d,
                                TagFace:%d,
                                TagFacePic:%d
                                '''\
                                %(
                                self.RecordType,
@@ -8785,7 +9184,9 @@
                                self.RecordTime,
                                self.MineID,
                                self.TagPlayerName,
                                self.TagFace
                                self.TagJob,
                                self.TagFace,
                                self.TagFacePic
                                )
        return DumpString
@@ -8929,6 +9330,8 @@
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)
    RealmLV = 0    #(BYTE RealmLV)//境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
@@ -8942,6 +9345,8 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -8950,6 +9355,8 @@
        self.Job = 0
        self.LV = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -8959,6 +9366,8 @@
        length += 1
        length += 2
        length += 1
        length += 4
        length += 4
        return length
@@ -8969,6 +9378,8 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
@@ -8977,14 +9388,18 @@
                                PlayerName:%s,
                                Job:%d,
                                LV:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.PlayerName,
                                self.Job,
                                self.LV,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -13134,6 +13549,8 @@
    LV = 0    #(WORD LV)// 玩家等级
    Job = 0    #(BYTE Job)// 玩家职业
    RealmLV = 0    #(WORD RealmLV)// 玩家境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)// 战力,求余亿
    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
    Value1 = 0    #(DWORD Value1)//ֵ1
@@ -13153,6 +13570,8 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -13167,6 +13586,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Value1 = 0
@@ -13186,6 +13607,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
@@ -13198,6 +13621,8 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.Value1)
@@ -13213,6 +13638,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Value1:%d,
@@ -13226,6 +13653,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Value1,
@@ -13532,6 +13961,8 @@
    LV = 0    #(WORD LV)// 玩家等级
    Job = 0    #(BYTE Job)// 玩家职业
    RealmLV = 0    #(WORD RealmLV)// 玩家境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)// 战力,求余亿
    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
    data = None
@@ -13549,6 +13980,8 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
@@ -13561,6 +13994,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        return
@@ -13576,6 +14011,8 @@
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
        return length
@@ -13588,6 +14025,8 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        return data
@@ -13601,6 +14040,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d
                                '''\
@@ -13612,6 +14053,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx
                                )
@@ -13626,6 +14069,8 @@
    LV = 0    #(WORD LV)// 玩家等级
    Job = 0    #(BYTE Job)// 玩家职业
    RealmLV = 0    #(WORD RealmLV)// 玩家境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)// 战力,求余亿
    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力,整除亿
    OfflineValue = 0    #(DWORD OfflineValue)// 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线;
@@ -13646,6 +14091,8 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.OfflineValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -13661,6 +14108,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.OfflineValue = 0
@@ -13682,6 +14131,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
@@ -13694,6 +14145,8 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.OfflineValue)
@@ -13710,6 +14163,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                OfflineValue:%d,
@@ -13724,6 +14179,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx,
                                self.OfflineValue,
@@ -14304,6 +14761,8 @@
    Job = 0    #(BYTE Job)// 玩家职业
    JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
    RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
@@ -14319,6 +14778,8 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -14329,6 +14790,8 @@
        self.Job = 0
        self.JobLevel = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -14340,6 +14803,8 @@
        length += 1
        length += 1
        length += 2
        length += 4
        length += 4
        return length
@@ -14352,6 +14817,8 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteBYTE(data, self.JobLevel)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
@@ -14362,7 +14829,9 @@
                                LV:%d,
                                Job:%d,
                                JobLevel:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -14371,7 +14840,9 @@
                                self.LV,
                                self.Job,
                                self.JobLevel,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -14454,6 +14925,8 @@
    Job = 0    #(BYTE Job)// 玩家职业
    JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
    RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
@@ -14472,6 +14945,8 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -14486,6 +14961,8 @@
        self.Job = 0
        self.JobLevel = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -14498,6 +14975,8 @@
        length += 1
        length += 1
        length += 2
        length += 4
        length += 4
        return length
@@ -14511,6 +14990,8 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteBYTE(data, self.JobLevel)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
@@ -14522,7 +15003,9 @@
                                LV:%d,
                                Job:%d,
                                JobLevel:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -14532,7 +15015,9 @@
                                self.LV,
                                self.Job,
                                self.JobLevel,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -14983,6 +15468,8 @@
    Job = 0    #(BYTE Job)// 玩家职业
    JobLevel = 0    #(BYTE JobLevel)// 玩家职业阶级
    RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    PlayerState = 0    #(BYTE PlayerState)// 0: 离线 1:在线
    MapID = 0    #(DWORD MapID)// 地图ID
    LineID = 0    #(BYTE LineID)// 线路ID
@@ -15003,6 +15490,8 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -15018,6 +15507,8 @@
        self.Job = 0
        self.JobLevel = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.PlayerState = 0
        self.MapID = 0
        self.LineID = 0
@@ -15034,6 +15525,8 @@
        length += 1
        length += 1
        length += 2
        length += 4
        length += 4
        length += 1
        length += 4
        length += 1
@@ -15051,6 +15544,8 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteBYTE(data, self.JobLevel)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteBYTE(data, self.PlayerState)
        data = CommFunc.WriteDWORD(data, self.MapID)
        data = CommFunc.WriteBYTE(data, self.LineID)
@@ -15067,6 +15562,8 @@
                                Job:%d,
                                JobLevel:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                PlayerState:%d,
                                MapID:%d,
                                LineID:%d
@@ -15081,6 +15578,8 @@
                                self.Job,
                                self.JobLevel,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.PlayerState,
                                self.MapID,
                                self.LineID
@@ -16056,6 +16555,8 @@
    FightPower = 0    #(DWORD FightPower)// 战力求余亿部分
    FightPowerEx = 0    #(DWORD FightPowerEx)// 战力整除亿部分
    RealmLV = 0    #(WORD RealmLV)
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
@@ -16072,6 +16573,8 @@
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -16083,6 +16586,8 @@
        self.FightPower = 0
        self.FightPowerEx = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -16095,6 +16600,8 @@
        length += 4
        length += 4
        length += 2
        length += 4
        length += 4
        return length
@@ -16108,6 +16615,8 @@
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
@@ -16119,7 +16628,9 @@
                                LV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -16129,7 +16640,9 @@
                                self.LV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -16585,7 +17098,7 @@
    ID = 0    #(DWORD ID)
    ID2 = 0    #(DWORD ID2)
    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
    Name2 = ""    #(char Name2[33])//名字2
    Name2 = ""    #(char Name2[65])//名字2
    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
    Value1 = 0    #(DWORD Value1)//自定义值1
    Value2 = 0    #(DWORD Value2)//自定义值2
@@ -16612,7 +17125,7 @@
        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65)
        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -16657,7 +17170,7 @@
        length += 4
        length += 4
        length += 33
        length += 33
        length += 65
        length += 1
        length += 4
        length += 4
@@ -16681,7 +17194,7 @@
        data = CommFunc.WriteDWORD(data, self.ID)
        data = CommFunc.WriteDWORD(data, self.ID2)
        data = CommFunc.WriteString(data, 33, self.Name1)
        data = CommFunc.WriteString(data, 33, self.Name2)
        data = CommFunc.WriteString(data, 65, self.Name2)
        data = CommFunc.WriteBYTE(data, self.Type2)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteDWORD(data, self.Value2)
@@ -16747,8 +17260,8 @@
class  tagGCCrossBillboardInfo(Structure):
    Head = tagHead()
    Type = 0    #(BYTE Type)//榜单类型
    GroupValue1 = 0    #(BYTE GroupValue1)// 分组值1
    GroupValue2 = 0    #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
    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)
@@ -16764,8 +17277,8 @@
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupValue2,_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):
@@ -16791,8 +17304,8 @@
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        for i in range(self.BillboardCount):
@@ -16804,8 +17317,8 @@
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Type)
        data = CommFunc.WriteBYTE(data, self.GroupValue1)
        data = CommFunc.WriteBYTE(data, self.GroupValue2)
        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):
@@ -16965,48 +17478,74 @@
# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo
class  tagGCCrossChampionshipPKBattle(Structure):
    _pack_ = 1
    _fields_ = [
                  ("BattleNum", c_ubyte),    # 对战组编号 1~n
                  ("WinPlayerID", c_int),    # 获胜玩家ID
                  ("PlayerIDA", c_int),    # 玩家IDA
                  ("PlayerIDB", c_int),    # 玩家IDB
                  ]
    BattleNum = 0    #(BYTE BattleNum)// 对战组编号 1~n
    WinPlayerID = 0    #(DWORD WinPlayerID)// 获胜玩家ID
    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家IDA
    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家IDB
    BattleRetLen = 0    #(BYTE BattleRetLen)
    BattleRet = ""    #(String BattleRet)// 战斗结果明细 {"playerID":[[第1局胜负,第1局总积分,胜负基础分,hp分,时间分], ...], ...}
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
        self.BattleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WinPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BattleRetLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.BattleRet,_pos = CommFunc.ReadString(_lpData, _pos,self.BattleRetLen)
        return _pos
    def Clear(self):
        self.BattleNum = 0
        self.WinPlayerID = 0
        self.PlayerIDA = 0
        self.PlayerIDB = 0
        self.BattleRetLen = 0
        self.BattleRet = ""
        return
    def GetLength(self):
        return sizeof(tagGCCrossChampionshipPKBattle)
        length = 0
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        length += len(self.BattleRet)
        return length
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
        data = ''
        data = CommFunc.WriteBYTE(data, self.BattleNum)
        data = CommFunc.WriteDWORD(data, self.WinPlayerID)
        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
        data = CommFunc.WriteBYTE(data, self.BattleRetLen)
        data = CommFunc.WriteString(data, self.BattleRetLen, self.BattleRet)
        return data
    def OutputString(self):
        DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo:
        DumpString = '''
                                BattleNum:%d,
                                WinPlayerID:%d,
                                PlayerIDA:%d,
                                PlayerIDB:%d
                                PlayerIDB:%d,
                                BattleRetLen:%d,
                                BattleRet:%s
                                '''\
                                %(
                                self.BattleNum,
                                self.WinPlayerID,
                                self.PlayerIDA,
                                self.PlayerIDB
                                self.PlayerIDB,
                                self.BattleRetLen,
                                self.BattleRet
                                )
        return DumpString
@@ -17077,6 +17616,9 @@
    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):
@@ -17093,6 +17635,9 @@
        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):
@@ -17104,6 +17649,9 @@
        self.FightPower = 0
        self.FightPowerEx = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.ServerID = 0
        return
    def GetLength(self):
@@ -17116,6 +17664,9 @@
        length += 4
        length += 4
        length += 2
        length += 4
        length += 4
        length += 4
        return length
@@ -17129,6 +17680,9 @@
        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):
@@ -17140,7 +17694,10 @@
                                LV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                ServerID:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -17150,7 +17707,10 @@
                                self.LV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.ServerID
                                )
        return DumpString
@@ -17269,6 +17829,8 @@
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)
    RealmLV = 0    #(WORD RealmLV)
    PKScore = 0    #(DWORD PKScore)
@@ -17285,6 +17847,8 @@
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -17296,6 +17860,8 @@
        self.NameLen = 0
        self.PlayerName = ""
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.RealmLV = 0
        self.PKScore = 0
@@ -17309,6 +17875,8 @@
        length += len(self.PlayerName)
        length += 1
        length += 4
        length += 4
        length += 4
        length += 2
        length += 4
        length += 1
@@ -17321,6 +17889,8 @@
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.PKScore)
@@ -17333,6 +17903,8 @@
                                NameLen:%d,
                                PlayerName:%s,
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                RealmLV:%d,
                                PKScore:%d,
@@ -17343,6 +17915,8 @@
                                self.NameLen,
                                self.PlayerName,
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.RealmLV,
                                self.PKScore,
@@ -17440,9 +18014,12 @@
    PlayerName = ""    #(String PlayerName)// 跨服名字
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)
    MaxHP = 0    #(DWORD MaxHP)// 默认满血,求余亿部分
    MaxHPEx = 0    #(DWORD MaxHPEx)// 默认满血,整除亿部分
    MaxProDef = 0    #(DWORD MaxProDef)// 最大护盾
    RealmLV = 0    #(WORD RealmLV)//境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
    ServerID = 0    #(DWORD ServerID)
    data = None
    def __init__(self):
@@ -17456,9 +18033,12 @@
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -17467,9 +18047,12 @@
        self.PlayerName = ""
        self.Job = 0
        self.LV = 0
        self.MaxHP = 0
        self.MaxHPEx = 0
        self.MaxProDef = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.ServerID = 0
        return
    def GetLength(self):
@@ -17479,6 +18062,9 @@
        length += len(self.PlayerName)
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
@@ -17492,9 +18078,12 @@
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteDWORD(data, self.MaxHP)
        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
        data = CommFunc.WriteDWORD(data, self.MaxProDef)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        return data
    def OutputString(self):
@@ -17504,9 +18093,12 @@
                                PlayerName:%s,
                                Job:%d,
                                LV:%d,
                                MaxHP:%d,
                                MaxHPEx:%d,
                                MaxProDef:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                ServerID:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -17514,19 +18106,18 @@
                                self.PlayerName,
                                self.Job,
                                self.LV,
                                self.MaxHP,
                                self.MaxHPEx,
                                self.MaxProDef
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx,
                                self.ServerID
                                )
        return DumpString
class  tagGCCrossRealmPKMatchOK(Structure):
    Head = tagHead()
    RoomID = 0    #(WORD RoomID)// 房间ID
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)// 跨服名字
    Number = 0    #(BYTE Number)// 位置编号;1-左,2-右
    MatchPlayerCount = 0    #(BYTE MatchPlayerCount)
    MatchPlayer = list()    #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家
    data = None
@@ -17540,10 +18131,6 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.RoomID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Number,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MatchPlayerCount):
            temMatchPlayer = tagGCCrossRealmPKMatchPlayer()
@@ -17556,10 +18143,6 @@
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x01
        self.RoomID = 0
        self.NameLen = 0
        self.PlayerName = ""
        self.Number = 0
        self.MatchPlayerCount = 0
        self.MatchPlayer = list()
        return
@@ -17567,10 +18150,6 @@
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 1
        length += len(self.PlayerName)
        length += 1
        length += 1
        for i in range(self.MatchPlayerCount):
            length += self.MatchPlayer[i].GetLength()
@@ -17580,10 +18159,6 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.RoomID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.Number)
        data = CommFunc.WriteBYTE(data, self.MatchPlayerCount)
        for i in range(self.MatchPlayerCount):
            data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer())
@@ -17592,19 +18167,11 @@
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                RoomID:%d,
                                NameLen:%d,
                                PlayerName:%s,
                                Number:%d,
                                MatchPlayerCount:%d,
                                MatchPlayer:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.RoomID,
                                self.NameLen,
                                self.PlayerName,
                                self.Number,
                                self.MatchPlayerCount,
                                "..."
                                )
@@ -18198,6 +18765,1838 @@
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)
    FamilyID = 0    #(DWORD FamilyID)//所属仙盟ID
    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)
        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.PlayerID = 0
        self.Name = ""
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        self.FamilyID = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 33
        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.Name)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FamilyID)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerID:%d,
                                Name:%s,
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                FamilyID:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.Name,
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.FamilyID
                                )
        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
#------------------------------------------------------
@@ -18874,6 +21273,9 @@
class  tagMCCoinToGoldCountInfo(Structure):
    Head = tagHead()
    RealFirstTime = 0    #(DWORD RealFirstTime)// 首次真实充值时间戳
    RealToday = 0    #(DWORD RealToday)// 今日真实充值coin
    RealTotal = 0    #(DWORD RealTotal)// 累计真实充值coin
    RecordCount = 0    #(WORD RecordCount)
    CTGCountInfoList = list()    #(vector<tagMCCoinToGoldCount> CTGCountInfoList)
    data = None
@@ -18887,6 +21289,9 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.RealFirstTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RealToday,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RealTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RecordCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.RecordCount):
            temCTGCountInfoList = tagMCCoinToGoldCount()
@@ -18899,6 +21304,9 @@
        self.Head.Clear()
        self.Head.Cmd = 0xA1
        self.Head.SubCmd = 0x10
        self.RealFirstTime = 0
        self.RealToday = 0
        self.RealTotal = 0
        self.RecordCount = 0
        self.CTGCountInfoList = list()
        return
@@ -18906,6 +21314,9 @@
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 4
        length += 4
        length += 2
        for i in range(self.RecordCount):
            length += self.CTGCountInfoList[i].GetLength()
@@ -18915,6 +21326,9 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.RealFirstTime)
        data = CommFunc.WriteDWORD(data, self.RealToday)
        data = CommFunc.WriteDWORD(data, self.RealTotal)
        data = CommFunc.WriteWORD(data, self.RecordCount)
        for i in range(self.RecordCount):
            data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer())
@@ -18923,11 +21337,17 @@
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                RealFirstTime:%d,
                                RealToday:%d,
                                RealTotal:%d,
                                RecordCount:%d,
                                CTGCountInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.RealFirstTime,
                                self.RealToday,
                                self.RealTotal,
                                self.RecordCount,
                                "..."
                                )
@@ -20112,6 +22532,7 @@
                  ("SubCmd", c_ubyte),
                  ("MapID", c_ushort),    
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ("FuncMapID", c_ushort),    #功能地图ID
                  ]
    def __init__(self):
@@ -20130,6 +22551,7 @@
        self.SubCmd = 0x26
        self.MapID = 0
        self.FuncLineID = 0
        self.FuncMapID = 0
        return
    def GetLength(self):
@@ -20143,13 +22565,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                MapID:%d,
                                FuncLineID:%d
                                FuncLineID:%d,
                                FuncMapID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.MapID,
                                self.FuncLineID
                                self.FuncLineID,
                                self.FuncMapID
                                )
        return DumpString
@@ -20168,6 +22592,7 @@
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),    
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ("FuncMapID", c_ushort),    #功能地图ID
                  ]
    def __init__(self):
@@ -20186,6 +22611,7 @@
        self.SubCmd = 0x27
        self.MapID = 0
        self.FuncLineID = 0
        self.FuncMapID = 0
        return
    def GetLength(self):
@@ -20199,13 +22625,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                MapID:%d,
                                FuncLineID:%d
                                FuncLineID:%d,
                                FuncMapID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.MapID,
                                self.FuncLineID
                                self.FuncLineID,
                                self.FuncMapID
                                )
        return DumpString
@@ -21110,7 +23538,7 @@
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),    #果实物品ID
                  ("EatCnt", c_ushort),    #已使用个数
                  ("EatCnt", c_int),    #已使用个数
                  ("ItemAddCnt", c_int),    #增幅丹增加上限
                  ("ItemBreakCnt", c_int),    #增幅丹突破次数
                  ]
@@ -25623,7 +28051,8 @@
    _pack_ = 1
    _fields_ = [
                  ("MfpType", c_ubyte),    #模块编号类型
                  ("FightPower", c_int),    #本模块战斗力
                  ("FightPower", c_int),    #本模块战斗力,求余亿部分
                  ("FightPowerEx", c_int),    #本模块战斗力,整除亿部分,1代表1亿
                  ]
    def __init__(self):
@@ -25638,6 +28067,7 @@
    def Clear(self):
        self.MfpType = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        return
    def GetLength(self):
@@ -25649,11 +28079,13 @@
    def OutputString(self):
        DumpString = '''//A3 A1 各功能模块战斗力信息 //tagMCModuleFightPowerInfo:
                                MfpType:%d,
                                FightPower:%d
                                FightPower:%d,
                                FightPowerEx:%d
                                '''\
                                %(
                                self.MfpType,
                                self.FightPower
                                self.FightPower,
                                self.FightPowerEx
                                )
        return DumpString
@@ -28022,19 +30454,15 @@
#------------------------------------------------------
# A3 11 通知玩家境界信息 #tagMCSyncRealmInfo
class  tagMCSyncRealmInfo(Structure):
class  tagMCSyncRealmTask(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("IsPass", c_ubyte),    #是否通关副本
                  ("XXZLAwardState", c_int),    #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
                  ("TaskID", c_ubyte),
                  ("TaskValue", c_int),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x11
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -28043,36 +30471,99 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA3
        self.SubCmd = 0x11
        self.IsPass = 0
        self.XXZLAwardState = 0
        self.TaskID = 0
        self.TaskValue = 0
        return
    def GetLength(self):
        return sizeof(tagMCSyncRealmInfo)
        return sizeof(tagMCSyncRealmTask)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                IsPass:%d,
                                XXZLAwardState:%d
                                TaskID:%d,
                                TaskValue:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.IsPass,
                                self.XXZLAwardState
                                self.TaskID,
                                self.TaskValue
                                )
        return DumpString
class  tagMCSyncRealmInfo(Structure):
    Head = tagHead()
    TaskAwardState = 0    #(DWORD TaskAwardState)//进阶任务领奖状态;按任务ID二进制位存储是否已领取
    TaskValueCount = 0    #(BYTE TaskValueCount)
    TaskValueList = list()    #(vector<tagMCSyncRealmTask> TaskValueList)//进阶任务值列表,仅有需要记录的任务才会通知
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x11
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.TaskAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TaskValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TaskValueCount):
            temTaskValueList = tagMCSyncRealmTask()
            _pos = temTaskValueList.ReadData(_lpData, _pos)
            self.TaskValueList.append(temTaskValueList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x11
        self.TaskAwardState = 0
        self.TaskValueCount = 0
        self.TaskValueList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        for i in range(self.TaskValueCount):
            length += self.TaskValueList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.TaskAwardState)
        data = CommFunc.WriteBYTE(data, self.TaskValueCount)
        for i in range(self.TaskValueCount):
            data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                TaskAwardState:%d,
                                TaskValueCount:%d,
                                TaskValueList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.TaskAwardState,
                                self.TaskValueCount,
                                "..."
                                )
        return DumpString
m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
#------------------------------------------------------
@@ -28585,13 +31076,11 @@
#------------------------------------------------------
# A3 51 寻宝功能信息 #tagMCTreasureInfo
class  tagMCTreasureTypeInfo(Structure):
class  tagMCTreasureGridLimit(Structure):
    _pack_ = 1
    _fields_ = [
                  ("TreasureType", c_ubyte),    #寻宝类型
                  ("LuckValue", c_ushort),    #当前幸运值
                  ("TreasureCount", c_int),    #已寻宝总次数
                  ("FreeCountToday", c_ushort),    #今日已免费寻宝次数
                  ("GridNum", c_ubyte),    # 有限制抽取次数的格子编号
                  ("GridCnt", c_ushort),    # 已抽到次数
                  ]
    def __init__(self):
@@ -28604,30 +31093,116 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.TreasureType = 0
        self.LuckValue = 0
        self.TreasureCount = 0
        self.FreeCountToday = 0
        self.GridNum = 0
        self.GridCnt = 0
        return
    def GetLength(self):
        return sizeof(tagMCTreasureTypeInfo)
        return sizeof(tagMCTreasureGridLimit)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
                                GridNum:%d,
                                GridCnt:%d
                                '''\
                                %(
                                self.GridNum,
                                self.GridCnt
                                )
        return DumpString
class  tagMCTreasureTypeInfo(Structure):
    TreasureType = 0    #(BYTE TreasureType)//寻宝类型
    LuckValue = 0    #(WORD LuckValue)//当前幸运值
    TreasureCount = 0    #(DWORD TreasureCount)//已寻宝总次数
    TreasureCountToday = 0    #(DWORD TreasureCountToday)//今日已寻宝总次数
    FreeCountToday = 0    #(WORD FreeCountToday)//今日已免费寻宝次数
    TreasureCntAward = 0    #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取
    GridLimitCnt = 0    #(BYTE GridLimitCnt)
    GridLimitCntList = list()    #(vector<tagMCTreasureGridLimit> GridLimitCntList)//有限制抽取次数的格子次数信息
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TreasureCountToday,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FreeCountToday,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureCntAward,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GridLimitCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.GridLimitCnt):
            temGridLimitCntList = tagMCTreasureGridLimit()
            _pos = temGridLimitCntList.ReadData(_lpData, _pos)
            self.GridLimitCntList.append(temGridLimitCntList)
        return _pos
    def Clear(self):
        self.TreasureType = 0
        self.LuckValue = 0
        self.TreasureCount = 0
        self.TreasureCountToday = 0
        self.FreeCountToday = 0
        self.TreasureCntAward = 0
        self.GridLimitCnt = 0
        self.GridLimitCntList = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 2
        length += 4
        length += 4
        length += 2
        length += 4
        length += 1
        for i in range(self.GridLimitCnt):
            length += self.GridLimitCntList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.TreasureType)
        data = CommFunc.WriteWORD(data, self.LuckValue)
        data = CommFunc.WriteDWORD(data, self.TreasureCount)
        data = CommFunc.WriteDWORD(data, self.TreasureCountToday)
        data = CommFunc.WriteWORD(data, self.FreeCountToday)
        data = CommFunc.WriteDWORD(data, self.TreasureCntAward)
        data = CommFunc.WriteBYTE(data, self.GridLimitCnt)
        for i in range(self.GridLimitCnt):
            data = CommFunc.WriteString(data, self.GridLimitCntList[i].GetLength(), self.GridLimitCntList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                TreasureType:%d,
                                LuckValue:%d,
                                TreasureCount:%d,
                                FreeCountToday:%d
                                TreasureCountToday:%d,
                                FreeCountToday:%d,
                                TreasureCntAward:%d,
                                GridLimitCnt:%d,
                                GridLimitCntList:%s
                                '''\
                                %(
                                self.TreasureType,
                                self.LuckValue,
                                self.TreasureCount,
                                self.FreeCountToday
                                self.TreasureCountToday,
                                self.FreeCountToday,
                                self.TreasureCntAward,
                                self.GridLimitCnt,
                                "..."
                                )
        return DumpString
@@ -29802,6 +32377,62 @@
m_NAtagMCFamilySitInfo=tagMCFamilySitInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilySitInfo.Cmd,m_NAtagMCFamilySitInfo.SubCmd))] = m_NAtagMCFamilySitInfo
#------------------------------------------------------
# A5 12 珍宝阁信息 #tagMCFamilyZhenbaogeInfo
class  tagMCFamilyZhenbaogeInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("CutState", c_ubyte),    # 今日是否已砍价,此状态为全局状态,与盟Action砍价状态不同
                  ("BuyState", c_ubyte),    # 今日是否已购买,此状态为全局状态,与盟Action购买状态不同
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA5
        self.SubCmd = 0x12
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA5
        self.SubCmd = 0x12
        self.CutState = 0
        self.BuyState = 0
        return
    def GetLength(self):
        return sizeof(tagMCFamilyZhenbaogeInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A5 12 珍宝阁信息 //tagMCFamilyZhenbaogeInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                CutState:%d,
                                BuyState:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.CutState,
                                self.BuyState
                                )
        return DumpString
m_NAtagMCFamilyZhenbaogeInfo=tagMCFamilyZhenbaogeInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyZhenbaogeInfo.Cmd,m_NAtagMCFamilyZhenbaogeInfo.SubCmd))] = m_NAtagMCFamilyZhenbaogeInfo
#------------------------------------------------------
@@ -32621,6 +35252,218 @@
#------------------------------------------------------
# A8 01 获得奖励信息 #tagMCGiveAwardInfo
class  tagMCGiveAwardMoney(Structure):
    _pack_ = 1
    _fields_ = [
                  ("MoneyType", c_ubyte),
                  ("MoneyValue", c_int),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.MoneyType = 0
        self.MoneyValue = 0
        return
    def GetLength(self):
        return sizeof(tagMCGiveAwardMoney)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
                                MoneyType:%d,
                                MoneyValue:%d
                                '''\
                                %(
                                self.MoneyType,
                                self.MoneyValue
                                )
        return DumpString
class  tagMCGiveAwardItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Count", c_int),
                  ("IsBind", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.Count = 0
        self.IsBind = 0
        return
    def GetLength(self):
        return sizeof(tagMCGiveAwardItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
                                ItemID:%d,
                                Count:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.Count,
                                self.IsBind
                                )
        return DumpString
class  tagMCGiveAwardInfo(Structure):
    Head = tagHead()
    EventLen = 0    #(BYTE EventLen)
    EventName = ""    #(String EventName)
    Exp = 0    #(DWORD Exp)// 奖励经验,求余亿部分
    ExpPoint = 0    #(DWORD ExpPoint)// 奖励经验,整除亿部分
    MoneyLen = 0    #(BYTE MoneyLen)
    MoneyList = list()    #(vector<tagMCGiveAwardMoney> MoneyList)// 奖励货币
    ItemLen = 0    #(BYTE ItemLen)
    ItemList = list()    #(vector<tagMCGiveAwardItem> ItemList)// 奖励物品
    DataLen = 0    #(WORD DataLen)
    DataEx = ""    #(String DataEx)// 扩展信息,可由不同的Event自定义信息内容
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA8
        self.Head.SubCmd = 0x01
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.EventLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.EventName,_pos = CommFunc.ReadString(_lpData, _pos,self.EventLen)
        self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MoneyLen):
            temMoneyList = tagMCGiveAwardMoney()
            _pos = temMoneyList.ReadData(_lpData, _pos)
            self.MoneyList.append(temMoneyList)
        self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ItemLen):
            temItemList = tagMCGiveAwardItem()
            _pos = temItemList.ReadData(_lpData, _pos)
            self.ItemList.append(temItemList)
        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.DataEx,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA8
        self.Head.SubCmd = 0x01
        self.EventLen = 0
        self.EventName = ""
        self.Exp = 0
        self.ExpPoint = 0
        self.MoneyLen = 0
        self.MoneyList = list()
        self.ItemLen = 0
        self.ItemList = list()
        self.DataLen = 0
        self.DataEx = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += len(self.EventName)
        length += 4
        length += 4
        length += 1
        for i in range(self.MoneyLen):
            length += self.MoneyList[i].GetLength()
        length += 1
        for i in range(self.ItemLen):
            length += self.ItemList[i].GetLength()
        length += 2
        length += len(self.DataEx)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.EventLen)
        data = CommFunc.WriteString(data, self.EventLen, self.EventName)
        data = CommFunc.WriteDWORD(data, self.Exp)
        data = CommFunc.WriteDWORD(data, self.ExpPoint)
        data = CommFunc.WriteBYTE(data, self.MoneyLen)
        for i in range(self.MoneyLen):
            data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ItemLen)
        for i in range(self.ItemLen):
            data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
        data = CommFunc.WriteWORD(data, self.DataLen)
        data = CommFunc.WriteString(data, self.DataLen, self.DataEx)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                EventLen:%d,
                                EventName:%s,
                                Exp:%d,
                                ExpPoint:%d,
                                MoneyLen:%d,
                                MoneyList:%s,
                                ItemLen:%d,
                                ItemList:%s,
                                DataLen:%d,
                                DataEx:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.EventLen,
                                self.EventName,
                                self.Exp,
                                self.ExpPoint,
                                self.MoneyLen,
                                "...",
                                self.ItemLen,
                                "...",
                                self.DataLen,
                                self.DataEx
                                )
        return DumpString
m_NAtagMCGiveAwardInfo=tagMCGiveAwardInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGiveAwardInfo.Head.Cmd,m_NAtagMCGiveAwardInfo.Head.SubCmd))] = m_NAtagMCGiveAwardInfo
#------------------------------------------------------
# A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
class  tagMCGuradPickupItemSucc(Structure):
@@ -33442,7 +36285,7 @@
    _pack_ = 1
    _fields_ = [
                  ("ItemIndex", c_int),    
                  ("BuyCnt", c_ushort),    # 今日已购买次数
                  ("BuyCnt", c_int),    # 今日已购买次数
                  ("IsReset", c_ubyte),    #是否重置
                  ]
@@ -35238,6 +38081,9 @@
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    AwardCount = 0    #(BYTE AwardCount)
    AwardInfoList = list()    #(vector<tagMCActFamilyCTGAssistAward> AwardInfoList)// 互助奖励列表
    CTGIDCount = 0    #(BYTE CTGIDCount)
    CTGIDList = list()    #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加
    ShopType = 0    #(WORD ShopType)// 开放商店类型
    data = None
    def __init__(self):
@@ -35259,6 +38105,11 @@
            temAwardInfoList = tagMCActFamilyCTGAssistAward()
            _pos = temAwardInfoList.ReadData(_lpData, _pos)
            self.AwardInfoList.append(temAwardInfoList)
        self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CTGIDCount):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.CTGIDList.append(value)
        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -35273,6 +38124,9 @@
        self.LimitLV = 0
        self.AwardCount = 0
        self.AwardInfoList = list()
        self.CTGIDCount = 0
        self.CTGIDList = list()
        self.ShopType = 0
        return
    def GetLength(self):
@@ -35286,6 +38140,9 @@
        length += 1
        for i in range(self.AwardCount):
            length += self.AwardInfoList[i].GetLength()
        length += 1
        length += 2 * self.CTGIDCount
        length += 2
        return length
@@ -35300,6 +38157,10 @@
        data = CommFunc.WriteBYTE(data, self.AwardCount)
        for i in range(self.AwardCount):
            data = CommFunc.WriteString(data, self.AwardInfoList[i].GetLength(), self.AwardInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CTGIDCount)
        for i in range(self.CTGIDCount):
            data = CommFunc.WriteWORD(data, self.CTGIDList[i])
        data = CommFunc.WriteWORD(data, self.ShopType)
        return data
    def OutputString(self):
@@ -35311,7 +38172,10 @@
                                IsDayReset:%d,
                                LimitLV:%d,
                                AwardCount:%d,
                                AwardInfoList:%s
                                AwardInfoList:%s,
                                CTGIDCount:%d,
                                CTGIDList:%s,
                                ShopType:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -35321,7 +38185,10 @@
                                self.IsDayReset,
                                self.LimitLV,
                                self.AwardCount,
                                "..."
                                "...",
                                self.CTGIDCount,
                                "...",
                                self.ShopType
                                )
        return DumpString
@@ -37663,6 +40530,8 @@
    DayNum = 0    #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
    CountEx = 0    #(BYTE CountEx)// 额外奖励物品数
    AwardItemListEx = list()    #(vector<tagMCActLoginNewItem> AwardItemListEx)//  额外奖励物品列表
    data = None
    def __init__(self):
@@ -37677,12 +40546,19 @@
            temAwardItemList = tagMCActLoginNewItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CountEx):
            temAwardItemListEx = tagMCActLoginNewItem()
            _pos = temAwardItemListEx.ReadData(_lpData, _pos)
            self.AwardItemListEx.append(temAwardItemListEx)
        return _pos
    def Clear(self):
        self.DayNum = 0
        self.Count = 0
        self.AwardItemList = list()
        self.CountEx = 0
        self.AwardItemListEx = list()
        return
    def GetLength(self):
@@ -37691,6 +40567,9 @@
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        length += 1
        for i in range(self.CountEx):
            length += self.AwardItemListEx[i].GetLength()
        return length
@@ -37700,17 +40579,24 @@
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CountEx)
        for i in range(self.CountEx):
            data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                DayNum:%d,
                                Count:%d,
                                AwardItemList:%s
                                AwardItemList:%s,
                                CountEx:%d,
                                AwardItemListEx:%s
                                '''\
                                %(
                                self.DayNum,
                                self.Count,
                                "...",
                                self.CountEx,
                                "..."
                                )
        return DumpString
@@ -37724,6 +40610,7 @@
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    RepSignMoneyType = 0    #(BYTE RepSignMoneyType)// 补签消耗货币类型
    RepSignMoneyValue = 0    #(DWORD RepSignMoneyValue)// 补签消耗货币值
    AwardExCTGID = 0    #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
    DayCount = 0    #(BYTE DayCount)
    AwardDayList = list()    #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
    data = None
@@ -37743,6 +40630,7 @@
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DayCount):
            temAwardDayList = tagMCActLoginNewDay()
@@ -37761,6 +40649,7 @@
        self.LimitLV = 0
        self.RepSignMoneyType = 0
        self.RepSignMoneyValue = 0
        self.AwardExCTGID = 0
        self.DayCount = 0
        self.AwardDayList = list()
        return
@@ -37774,6 +40663,7 @@
        length += 2
        length += 1
        length += 4
        length += 2
        length += 1
        for i in range(self.DayCount):
            length += self.AwardDayList[i].GetLength()
@@ -37789,6 +40679,7 @@
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
        data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
        data = CommFunc.WriteWORD(data, self.AwardExCTGID)
        data = CommFunc.WriteBYTE(data, self.DayCount)
        for i in range(self.DayCount):
            data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
@@ -37803,6 +40694,7 @@
                                LimitLV:%d,
                                RepSignMoneyType:%d,
                                RepSignMoneyValue:%d,
                                AwardExCTGID:%d,
                                DayCount:%d,
                                AwardDayList:%s
                                '''\
@@ -37814,6 +40706,7 @@
                                self.LimitLV,
                                self.RepSignMoneyType,
                                self.RepSignMoneyValue,
                                self.AwardExCTGID,
                                self.DayCount,
                                "..."
                                )
@@ -37833,7 +40726,8 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("LoginAward", c_int),    # 是否已领取,按天索引0代表第1天记录当天是否已领取
                  ("LoginAward", c_int),    # 普通奖励领取记录,按天对应二进制位记录是否已领取
                  ("LoginAwardEx", c_int),    # 额外奖励领取记录,按天对应二进制位记录是否已领取
                  ]
    def __init__(self):
@@ -37852,6 +40746,7 @@
        self.SubCmd = 0x70
        self.ActNum = 0
        self.LoginAward = 0
        self.LoginAwardEx = 0
        return
    def GetLength(self):
@@ -37865,19 +40760,402 @@
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                LoginAward:%d
                                LoginAward:%d,
                                LoginAwardEx:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.LoginAward
                                self.LoginAward,
                                self.LoginAwardEx
                                )
        return DumpString
m_NAtagMCActLoginPlayerInfoNew=tagMCActLoginPlayerInfoNew()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginPlayerInfoNew.Cmd,m_NAtagMCActLoginPlayerInfoNew.SubCmd))] = m_NAtagMCActLoginPlayerInfoNew
#------------------------------------------------------
# AA 88 轮回殿活动信息 #tagMCActLunhuidianInfo
class  tagMCActLunhuidianItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("ItemCount", c_ushort),
                  ("IsBind", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.ItemCount = 0
        self.IsBind = 0
        return
    def GetLength(self):
        return sizeof(tagMCActLunhuidianItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 88 轮回殿活动信息 //tagMCActLunhuidianInfo:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagMCActLunhuidianAward(Structure):
    AwardIndex = 0    #(BYTE AwardIndex)// 奖励记录索引 0~30
    NeedValue = 0    #(DWORD NeedValue)// 奖励所需值
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCActLunhuidianItem> AwardItemList)// 奖励物品列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.NeedValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temAwardItemList = tagMCActLunhuidianItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        return _pos
    def Clear(self):
        self.AwardIndex = 0
        self.NeedValue = 0
        self.Count = 0
        self.AwardItemList = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 4
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.AwardIndex)
        data = CommFunc.WriteDWORD(data, self.NeedValue)
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                AwardIndex:%d,
                                NeedValue:%d,
                                Count:%d,
                                AwardItemList:%s
                                '''\
                                %(
                                self.AwardIndex,
                                self.NeedValue,
                                self.Count,
                                "..."
                                )
        return DumpString
class  tagMCActLunhuidianRound(Structure):
    RoundType = 0    #(BYTE RoundType)// 轮回类型
    AwardType = 0    #(BYTE AwardType)// 奖励类型 1-消耗货币;2-寻宝次数
    AwardTypeValue = 0    #(DWORD AwardTypeValue)// 奖励类型对应值,消耗货币时为对应的货币类型,寻宝时为对应的寻宝类型
    RoundMax = 0    #(BYTE RoundMax)// 最大可循环轮次
    AwardCount = 0    #(BYTE AwardCount)
    AwardList = list()    #(vector<tagMCActLunhuidianAward> AwardList)// 每轮奖励列表
    CTGIDCount = 0    #(BYTE CTGIDCount)
    CTGIDList = list()    #(vector<WORD> CTGIDList)// CTGID列表
    ShopType = 0    #(WORD ShopType)// 开放商店类型,可能为0不开放
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.RoundType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardTypeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardCount):
            temAwardList = tagMCActLunhuidianAward()
            _pos = temAwardList.ReadData(_lpData, _pos)
            self.AwardList.append(temAwardList)
        self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CTGIDCount):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.CTGIDList.append(value)
        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.RoundType = 0
        self.AwardType = 0
        self.AwardTypeValue = 0
        self.RoundMax = 0
        self.AwardCount = 0
        self.AwardList = list()
        self.CTGIDCount = 0
        self.CTGIDList = list()
        self.ShopType = 0
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 1
        length += 4
        length += 1
        length += 1
        for i in range(self.AwardCount):
            length += self.AwardList[i].GetLength()
        length += 1
        length += 2 * self.CTGIDCount
        length += 2
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.RoundType)
        data = CommFunc.WriteBYTE(data, self.AwardType)
        data = CommFunc.WriteDWORD(data, self.AwardTypeValue)
        data = CommFunc.WriteBYTE(data, self.RoundMax)
        data = CommFunc.WriteBYTE(data, self.AwardCount)
        for i in range(self.AwardCount):
            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CTGIDCount)
        for i in range(self.CTGIDCount):
            data = CommFunc.WriteWORD(data, self.CTGIDList[i])
        data = CommFunc.WriteWORD(data, self.ShopType)
        return data
    def OutputString(self):
        DumpString = '''
                                RoundType:%d,
                                AwardType:%d,
                                AwardTypeValue:%d,
                                RoundMax:%d,
                                AwardCount:%d,
                                AwardList:%s,
                                CTGIDCount:%d,
                                CTGIDList:%s,
                                ShopType:%d
                                '''\
                                %(
                                self.RoundType,
                                self.AwardType,
                                self.AwardTypeValue,
                                self.RoundMax,
                                self.AwardCount,
                                "...",
                                self.CTGIDCount,
                                "...",
                                self.ShopType
                                )
        return DumpString
class  tagMCActLunhuidianInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)// 活动编号
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    RoundCount = 0    #(BYTE RoundCount)
    RoundList = list()    #(vector<tagMCActLunhuidianRound> RoundList)// 轮回列表,支持多个不同类型轮回同时开启
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x88
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.RoundCount):
            temRoundList = tagMCActLunhuidianRound()
            _pos = temRoundList.ReadData(_lpData, _pos)
            self.RoundList.append(temRoundList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x88
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.ResetType = 0
        self.LimitLV = 0
        self.RoundCount = 0
        self.RoundList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 1
        length += 2
        length += 1
        for i in range(self.RoundCount):
            length += self.RoundList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteBYTE(data, self.ResetType)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.RoundCount)
        for i in range(self.RoundCount):
            data = CommFunc.WriteString(data, self.RoundList[i].GetLength(), self.RoundList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                ResetType:%d,
                                LimitLV:%d,
                                RoundCount:%d,
                                RoundList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.ResetType,
                                self.LimitLV,
                                self.RoundCount,
                                "..."
                                )
        return DumpString
m_NAtagMCActLunhuidianInfo=tagMCActLunhuidianInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianInfo.Head.Cmd,m_NAtagMCActLunhuidianInfo.Head.SubCmd))] = m_NAtagMCActLunhuidianInfo
#------------------------------------------------------
# AA 89 轮回殿活动玩家信息 #tagMCActLunhuidianPlayerInfo
class  tagMCActLunhuidianPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("RoundType", c_ubyte),    # 轮回类型
                  ("CurRound", c_ubyte),    # 当前轮次
                  ("CurValue", c_int),    # 累计值
                  ("AwardRecord", c_int),    # 当前轮次奖励领奖记录,按奖励索引二进制位存储是否已领取,所有奖励已领取后自动进入下一轮,且重置该奖励状态
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        self.SubCmd = 0x89
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xAA
        self.SubCmd = 0x89
        self.ActNum = 0
        self.RoundType = 0
        self.CurRound = 0
        self.CurValue = 0
        self.AwardRecord = 0
        return
    def GetLength(self):
        return sizeof(tagMCActLunhuidianPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 89 轮回殿活动玩家信息 //tagMCActLunhuidianPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                RoundType:%d,
                                CurRound:%d,
                                CurValue:%d,
                                AwardRecord:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.RoundType,
                                self.CurRound,
                                self.CurValue,
                                self.AwardRecord
                                )
        return DumpString
m_NAtagMCActLunhuidianPlayerInfo=tagMCActLunhuidianPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianPlayerInfo.Cmd,m_NAtagMCActLunhuidianPlayerInfo.SubCmd))] = m_NAtagMCActLunhuidianPlayerInfo
#------------------------------------------------------
@@ -41245,6 +44523,98 @@
#------------------------------------------------------
# AA 87 运势活动信息 #tagMCActYunshiInfo
class  tagMCActYunshiInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)// 活动编号
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    TreasureType = 0    #(BYTE TreasureType)// 活动寻宝类型
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x87
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x87
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.ResetType = 0
        self.LimitLV = 0
        self.TreasureType = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 1
        length += 2
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteBYTE(data, self.ResetType)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.TreasureType)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                ResetType:%d,
                                LimitLV:%d,
                                TreasureType:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.ResetType,
                                self.LimitLV,
                                self.TreasureType
                                )
        return DumpString
m_NAtagMCActYunshiInfo=tagMCActYunshiInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActYunshiInfo.Head.Cmd,m_NAtagMCActYunshiInfo.Head.SubCmd))] = m_NAtagMCActYunshiInfo
#------------------------------------------------------
# AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo
class  tagMCAllPeoplePartyCount(Structure):
@@ -43117,6 +46487,510 @@
m_NAtagMCCrossActHorsePetTrainInfo=tagMCCrossActHorsePetTrainInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActHorsePetTrainInfo.Head.Cmd,m_NAtagMCCrossActHorsePetTrainInfo.Head.SubCmd))] = m_NAtagMCCrossActHorsePetTrainInfo
#------------------------------------------------------
# AA 90 炼器跨服活动信息 #tagMCCrossActLianqiInfo
class  tagMCCrossActLianqiItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("ItemCount", c_ushort),
                  ("IsBind", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.ItemCount = 0
        self.IsBind = 0
        return
    def GetLength(self):
        return sizeof(tagMCCrossActLianqiItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 90 炼器跨服活动信息 //tagMCCrossActLianqiInfo:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagMCCrossActLianqiAwardEx(Structure):
    NeedScore = 0    #(DWORD NeedScore)// 额外奖励所需积分
    Count = 0    #(BYTE Count)// 额外奖励物品数
    AwardItemList = list()    #(vector<tagMCCrossActLianqiItem> AwardItemList)// 额外奖励物品列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temAwardItemList = tagMCCrossActLianqiItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        return _pos
    def Clear(self):
        self.NeedScore = 0
        self.Count = 0
        self.AwardItemList = list()
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.NeedScore)
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                NeedScore:%d,
                                Count:%d,
                                AwardItemList:%s
                                '''\
                                %(
                                self.NeedScore,
                                self.Count,
                                "..."
                                )
        return DumpString
class  tagMCCrossActLianqiBillard(Structure):
    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCCrossActLianqiItem> AwardItemList)// 奖励物品列表
    NeedScore = 0    #(DWORD NeedScore)// 上榜所需积分
    CountEx = 0    #(BYTE CountEx)// 额外奖励数
    AwardItemExList = list()    #(vector<tagMCCrossActLianqiAwardEx> AwardItemExList)// 额外奖励列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temAwardItemList = tagMCCrossActLianqiItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CountEx):
            temAwardItemExList = tagMCCrossActLianqiAwardEx()
            _pos = temAwardItemExList.ReadData(_lpData, _pos)
            self.AwardItemExList.append(temAwardItemExList)
        return _pos
    def Clear(self):
        self.Rank = 0
        self.Count = 0
        self.AwardItemList = list()
        self.NeedScore = 0
        self.CountEx = 0
        self.AwardItemExList = list()
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        length += 4
        length += 1
        for i in range(self.CountEx):
            length += self.AwardItemExList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.Rank)
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        data = CommFunc.WriteDWORD(data, self.NeedScore)
        data = CommFunc.WriteBYTE(data, self.CountEx)
        for i in range(self.CountEx):
            data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Rank:%d,
                                Count:%d,
                                AwardItemList:%s,
                                NeedScore:%d,
                                CountEx:%d,
                                AwardItemExList:%s
                                '''\
                                %(
                                self.Rank,
                                self.Count,
                                "...",
                                self.NeedScore,
                                self.CountEx,
                                "..."
                                )
        return DumpString
class  tagMCCrossActLianqiInfo(Structure):
    Head = tagHead()
    ServerInfoLen = 0    #(BYTE ServerInfoLen)
    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
    GroupValue1 = 0    #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    JoinStartTime = ""    #(char JoinStartTime[5])// 参与开始时间点 mm:ss
    JoinEndTime = ""    #(char JoinEndTime[5])// 参与结束时间点 mm:ss
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    PersonalBillCount = 0    #(BYTE PersonalBillCount)
    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActLianqiBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x90
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
        self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PersonalBillCount):
            temPersonalBillboardInfoList = tagMCCrossActLianqiBillard()
            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x90
        self.ServerInfoLen = 0
        self.ServerIDRangeInfo = ""
        self.GroupValue1 = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.JoinStartTime = ""
        self.JoinEndTime = ""
        self.LimitLV = 0
        self.PersonalBillCount = 0
        self.PersonalBillboardInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += len(self.ServerIDRangeInfo)
        length += 1
        length += 10
        length += 10
        length += 5
        length += 5
        length += 2
        length += 1
        for i in range(self.PersonalBillCount):
            length += self.PersonalBillboardInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
        data = CommFunc.WriteBYTE(data, self.GroupValue1)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteString(data, 5, self.JoinStartTime)
        data = CommFunc.WriteString(data, 5, self.JoinEndTime)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
        for i in range(self.PersonalBillCount):
            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ServerInfoLen:%d,
                                ServerIDRangeInfo:%s,
                                GroupValue1:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                JoinStartTime:%s,
                                JoinEndTime:%s,
                                LimitLV:%d,
                                PersonalBillCount:%d,
                                PersonalBillboardInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ServerInfoLen,
                                self.ServerIDRangeInfo,
                                self.GroupValue1,
                                self.StartDate,
                                self.EndtDate,
                                self.JoinStartTime,
                                self.JoinEndTime,
                                self.LimitLV,
                                self.PersonalBillCount,
                                "..."
                                )
        return DumpString
m_NAtagMCCrossActLianqiInfo=tagMCCrossActLianqiInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActLianqiInfo.Head.Cmd,m_NAtagMCCrossActLianqiInfo.Head.SubCmd))] = m_NAtagMCCrossActLianqiInfo
#------------------------------------------------------
# AA 91 炼器活动玩家信息 #tagMCActLianqiPlayerInfo
class  tagMCActLianqiTileMove(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Row", c_ubyte),    # 行,0为第1行
                  ("Col", c_ubyte),    # 列,0为第1列
                  ("ToRow", c_ubyte),    # 移动到目标行
                  ("ToCol", c_ubyte),    # 移动到目标列
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Row = 0
        self.Col = 0
        self.ToRow = 0
        self.ToCol = 0
        return
    def GetLength(self):
        return sizeof(tagMCActLianqiTileMove)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 91 炼器活动玩家信息 //tagMCActLianqiPlayerInfo:
                                Row:%d,
                                Col:%d,
                                ToRow:%d,
                                ToCol:%d
                                '''\
                                %(
                                self.Row,
                                self.Col,
                                self.ToRow,
                                self.ToCol
                                )
        return DumpString
class  tagMCActLianqiPlayerInfo(Structure):
    Head = tagHead()
    Score = 0    #(DWORD Score)// 当前活动积分
    ScoreHighest = 0    #(DWORD ScoreHighest)// 当前活动最高积分,即上榜积分
    Energy = 0    #(WORD Energy)// 当前体力
    EnergyTime = 0    #(DWORD EnergyTime)// 上次恢复体力时间戳,为0时不用处理倒计时
    LVAwardMax = 0    #(DWORD LVAwardMax)// 已激活的最大合成奖励等级
    LVAwardState = 0    #(DWORD LVAwardState)// 最大合成等级奖励领取记录,按等级二进制位存储是否已领取
    UseItemLen = 0    #(BYTE UseItemLen)
    UseItemCntList = list()    #(vector<WORD> UseItemCntList)// 本局已使用辅助道具次数 [辅助道具1使用次数, ...]
    GridDataLen = 0    #(BYTE GridDataLen)// 格子数据长度
    GridData = ""    #(String GridData)// 格子二维行列数据,一定会同步,直接替换,行从上往下排 [[第1行格子1,格子2, ...], ...]
    OPType = 0    #(BYTE OPType)// 0-无(如初始化,GM等后端直接设置);1-移动;2-使用道具;3-重新开始;如果是因为操作引起的格子数据变化,则在相关操作表现完毕后再展示最新行列数据,否则直接变更
    MoveCount = 0    #(BYTE MoveCount)
    MoveList = list()    #(vector<tagMCActLianqiTileMove> MoveList)// 图块移动列表,可能没有数据,有的话先表现移动
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x91
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ScoreHighest,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Energy,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.EnergyTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LVAwardMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LVAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.UseItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.UseItemLen):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.UseItemCntList.append(value)
        self.GridDataLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GridData,_pos = CommFunc.ReadString(_lpData, _pos,self.GridDataLen)
        self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MoveCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MoveCount):
            temMoveList = tagMCActLianqiTileMove()
            _pos = temMoveList.ReadData(_lpData, _pos)
            self.MoveList.append(temMoveList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x91
        self.Score = 0
        self.ScoreHighest = 0
        self.Energy = 0
        self.EnergyTime = 0
        self.LVAwardMax = 0
        self.LVAwardState = 0
        self.UseItemLen = 0
        self.UseItemCntList = list()
        self.GridDataLen = 0
        self.GridData = ""
        self.OPType = 0
        self.MoveCount = 0
        self.MoveList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 4
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += 2 * self.UseItemLen
        length += 1
        length += len(self.GridData)
        length += 1
        length += 1
        for i in range(self.MoveCount):
            length += self.MoveList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.Score)
        data = CommFunc.WriteDWORD(data, self.ScoreHighest)
        data = CommFunc.WriteWORD(data, self.Energy)
        data = CommFunc.WriteDWORD(data, self.EnergyTime)
        data = CommFunc.WriteDWORD(data, self.LVAwardMax)
        data = CommFunc.WriteDWORD(data, self.LVAwardState)
        data = CommFunc.WriteBYTE(data, self.UseItemLen)
        for i in range(self.UseItemLen):
            data = CommFunc.WriteWORD(data, self.UseItemCntList[i])
        data = CommFunc.WriteBYTE(data, self.GridDataLen)
        data = CommFunc.WriteString(data, self.GridDataLen, self.GridData)
        data = CommFunc.WriteBYTE(data, self.OPType)
        data = CommFunc.WriteBYTE(data, self.MoveCount)
        for i in range(self.MoveCount):
            data = CommFunc.WriteString(data, self.MoveList[i].GetLength(), self.MoveList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Score:%d,
                                ScoreHighest:%d,
                                Energy:%d,
                                EnergyTime:%d,
                                LVAwardMax:%d,
                                LVAwardState:%d,
                                UseItemLen:%d,
                                UseItemCntList:%s,
                                GridDataLen:%d,
                                GridData:%s,
                                OPType:%d,
                                MoveCount:%d,
                                MoveList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Score,
                                self.ScoreHighest,
                                self.Energy,
                                self.EnergyTime,
                                self.LVAwardMax,
                                self.LVAwardState,
                                self.UseItemLen,
                                "...",
                                self.GridDataLen,
                                self.GridData,
                                self.OPType,
                                self.MoveCount,
                                "..."
                                )
        return DumpString
m_NAtagMCActLianqiPlayerInfo=tagMCActLianqiPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLianqiPlayerInfo.Head.Cmd,m_NAtagMCActLianqiPlayerInfo.Head.SubCmd))] = m_NAtagMCActLianqiPlayerInfo
#------------------------------------------------------
@@ -48750,7 +52624,8 @@
                  ("CampaignType", c_ubyte),    #奖励类型
                  ("BillAwardRecord", c_ubyte),    #排行奖励是否已领取
                  ("TagAwardRecord", c_int),    #目标奖励索引位领取记录:0-未领;1-已领
                  ("RecordData", c_int),    #活动时的记录值
                  ("RecordData", c_int),    #活动时的记录值,求余亿部分,为了统一逻辑,其他非战力榜的也使用此规则
                  ("RecordDataEx", c_int),    #活动时的记录值,整除亿部分,1代表1亿
                  ]
    def __init__(self):
@@ -48767,6 +52642,7 @@
        self.BillAwardRecord = 0
        self.TagAwardRecord = 0
        self.RecordData = 0
        self.RecordDataEx = 0
        return
    def GetLength(self):
@@ -48780,13 +52656,15 @@
                                CampaignType:%d,
                                BillAwardRecord:%d,
                                TagAwardRecord:%d,
                                RecordData:%d
                                RecordData:%d,
                                RecordDataEx:%d
                                '''\
                                %(
                                self.CampaignType,
                                self.BillAwardRecord,
                                self.TagAwardRecord,
                                self.RecordData
                                self.RecordData,
                                self.RecordDataEx
                                )
        return DumpString
@@ -49686,11 +53564,13 @@
    EnergyUsed = 0    #(WORD EnergyUsed)// 今日已消耗体力
    RefreshCount = 0    #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新
    RefreshCountSuper = 0    #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新
    RefreshCountRob = 0    #(WORD RefreshCountRob)// 今日福地刷新周围玩家次数
    TreasureCount = 0    #(BYTE TreasureCount)// 聚宝盆类型个数,对应类型 0~n
    TreasureState = list()    #(vector<BYTE> TreasureState)// 聚宝盆是否已激活列表,[类型0是否已激活, ...]
    TreasureAward = list()    #(vector<BYTE> TreasureAward)// 聚宝盆奖励是否已领取列表,[类型0是否已领取, ...]
    TreasureProgress = list()    #(vector<BYTE> TreasureProgress)// 聚宝盆进度值列表,[类型0进度值, ...],满进度100
    HelpAwardCount = 0    #(BYTE HelpAwardCount)// 今日已帮助别人奖励次数
    HousekeeperEndTime = 0    #(DWORD HousekeeperEndTime)// 自动管家到期时间戳,有值同时也代表免费试用已使用
    data = None
    def __init__(self):
@@ -49706,6 +53586,7 @@
        self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RefreshCountRob,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TreasureCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
@@ -49717,6 +53598,7 @@
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.TreasureProgress.append(value)
        self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.HousekeeperEndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -49728,11 +53610,13 @@
        self.EnergyUsed = 0
        self.RefreshCount = 0
        self.RefreshCountSuper = 0
        self.RefreshCountRob = 0
        self.TreasureCount = 0
        self.TreasureState = list()
        self.TreasureAward = list()
        self.TreasureProgress = list()
        self.HelpAwardCount = 0
        self.HousekeeperEndTime = 0
        return
    def GetLength(self):
@@ -49742,11 +53626,13 @@
        length += 2
        length += 4
        length += 1
        length += 2
        length += 1
        length += 1 * self.TreasureCount
        length += 1 * self.TreasureCount
        length += 1 * self.TreasureCount
        length += 1
        length += 4
        return length
@@ -49757,6 +53643,7 @@
        data = CommFunc.WriteWORD(data, self.EnergyUsed)
        data = CommFunc.WriteDWORD(data, self.RefreshCount)
        data = CommFunc.WriteBYTE(data, self.RefreshCountSuper)
        data = CommFunc.WriteWORD(data, self.RefreshCountRob)
        data = CommFunc.WriteBYTE(data, self.TreasureCount)
        for i in range(self.TreasureCount):
            data = CommFunc.WriteBYTE(data, self.TreasureState[i])
@@ -49765,6 +53652,7 @@
        for i in range(self.TreasureCount):
            data = CommFunc.WriteBYTE(data, self.TreasureProgress[i])
        data = CommFunc.WriteBYTE(data, self.HelpAwardCount)
        data = CommFunc.WriteDWORD(data, self.HousekeeperEndTime)
        return data
    def OutputString(self):
@@ -49774,11 +53662,13 @@
                                EnergyUsed:%d,
                                RefreshCount:%d,
                                RefreshCountSuper:%d,
                                RefreshCountRob:%d,
                                TreasureCount:%d,
                                TreasureState:%s,
                                TreasureAward:%s,
                                TreasureProgress:%s,
                                HelpAwardCount:%d
                                HelpAwardCount:%d,
                                HousekeeperEndTime:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -49786,11 +53676,13 @@
                                self.EnergyUsed,
                                self.RefreshCount,
                                self.RefreshCountSuper,
                                self.RefreshCountRob,
                                self.TreasureCount,
                                "...",
                                "...",
                                "...",
                                self.HelpAwardCount
                                self.HelpAwardCount,
                                self.HousekeeperEndTime
                                )
        return DumpString
@@ -49984,9 +53876,9 @@
    _pack_ = 1
    _fields_ = [
                  ("FaceID", c_int),    #头像ID
                  ("LightTime", c_int),    #点亮时间戳
                  ("ExpireTime", c_int),    #有效时间秒,0为配表固定时间,如果配表时间也为0即代表永久;到期时间=点亮时间+有效时间
                  ("Star", c_ubyte),    # 星级
                  ("State", c_ubyte),    #是否已激活
                  ("EndTime", c_int),    #到期时间戳,0为永久
                  ("Star", c_ubyte),    #星级
                  ]
    def __init__(self):
@@ -50000,8 +53892,8 @@
    def Clear(self):
        self.FaceID = 0
        self.LightTime = 0
        self.ExpireTime = 0
        self.State = 0
        self.EndTime = 0
        self.Star = 0
        return
@@ -50014,14 +53906,14 @@
    def OutputString(self):
        DumpString = '''// B1 17 头像信息 //tagMCFaceInfo:
                                FaceID:%d,
                                LightTime:%d,
                                ExpireTime:%d,
                                State:%d,
                                EndTime:%d,
                                Star:%d
                                '''\
                                %(
                                self.FaceID,
                                self.LightTime,
                                self.ExpireTime,
                                self.State,
                                self.EndTime,
                                self.Star
                                )
        return DumpString
@@ -50100,8 +53992,8 @@
    _pack_ = 1
    _fields_ = [
                  ("FacePicID", c_int),    #头像框ID
                  ("LightTime", c_int),    #点亮时间戳
                  ("ExpireTime", c_int),    #有效时间秒,0为配表固定时间,如果配表时间也为0即代表永久;到期时间=点亮时间+有效时间
                  ("State", c_ubyte),    #是否已激活
                  ("EndTime", c_int),    #到期时间戳,0为永久
                  ("Star", c_ubyte),    #星级
                  ]
@@ -50116,8 +54008,8 @@
    def Clear(self):
        self.FacePicID = 0
        self.LightTime = 0
        self.ExpireTime = 0
        self.State = 0
        self.EndTime = 0
        self.Star = 0
        return
@@ -50130,14 +54022,14 @@
    def OutputString(self):
        DumpString = '''// B1 18 头像框信息 //tagMCFacePicInfo:
                                FacePicID:%d,
                                LightTime:%d,
                                ExpireTime:%d,
                                State:%d,
                                EndTime:%d,
                                Star:%d
                                '''\
                                %(
                                self.FacePicID,
                                self.LightTime,
                                self.ExpireTime,
                                self.State,
                                self.EndTime,
                                self.Star
                                )
        return DumpString
@@ -51513,6 +55405,7 @@
    ZhanlingType = 0    #(BYTE ZhanlingType)// 战令类型
    IsActivite = 0    #(BYTE IsActivite)// 普通战令是否已激活
    IsActiviteH = 0    #(BYTE IsActiviteH)// 高级战令是否已激活
    AllFinishTime = 0    #(DWORD AllFinishTime)// 全部奖励领取完毕的时间戳,未完毕时该值为0,后端会在0点过天时检查可否重置,前端自行做倒计时表现即可
    Value1 = 0    #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳
    RewardCount = 0    #(WORD RewardCount)
    RewardList = list()    #(vector<tagMCZhanling> RewardList)
@@ -51530,6 +55423,7 @@
        self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AllFinishTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.RewardCount):
@@ -51546,6 +55440,7 @@
        self.ZhanlingType = 0
        self.IsActivite = 0
        self.IsActiviteH = 0
        self.AllFinishTime = 0
        self.Value1 = 0
        self.RewardCount = 0
        self.RewardList = list()
@@ -51557,6 +55452,7 @@
        length += 1
        length += 1
        length += 1
        length += 4
        length += 4
        length += 2
        for i in range(self.RewardCount):
@@ -51570,6 +55466,7 @@
        data = CommFunc.WriteBYTE(data, self.ZhanlingType)
        data = CommFunc.WriteBYTE(data, self.IsActivite)
        data = CommFunc.WriteBYTE(data, self.IsActiviteH)
        data = CommFunc.WriteDWORD(data, self.AllFinishTime)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteWORD(data, self.RewardCount)
        for i in range(self.RewardCount):
@@ -51582,6 +55479,7 @@
                                ZhanlingType:%d,
                                IsActivite:%d,
                                IsActiviteH:%d,
                                AllFinishTime:%d,
                                Value1:%d,
                                RewardCount:%d,
                                RewardList:%s
@@ -51591,6 +55489,7 @@
                                self.ZhanlingType,
                                self.IsActivite,
                                self.IsActiviteH,
                                self.AllFinishTime,
                                self.Value1,
                                self.RewardCount,
                                "..."
@@ -52313,6 +56212,8 @@
    LV = 0    #(WORD LV)// 玩家等级
    Job = 0    #(BYTE Job)// 玩家职业, 如果是机器人,则职业有值,服务端控制
    RealmLV = 0    #(WORD RealmLV)// 玩家境界等级
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)// 玩家战力
    Relation = 0    #(BYTE Relation)// 关系:0-无,1-好友,2-盟友
    IsNeedGold = 0    #(BYTE IsNeedGold)// 是否需要仙玉召唤
@@ -52331,6 +56232,8 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsNeedGold,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -52344,6 +56247,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.Relation = 0
        self.IsNeedGold = 0
@@ -52359,6 +56264,8 @@
        length += 1
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += 1
@@ -52373,6 +56280,8 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteBYTE(data, self.Relation)
        data = CommFunc.WriteBYTE(data, self.IsNeedGold)
@@ -52387,6 +56296,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                Relation:%d,
                                IsNeedGold:%d
@@ -52399,6 +56310,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.Relation,
                                self.IsNeedGold
@@ -55338,6 +59251,7 @@
                  ("DayWinCount", c_ubyte),    # 当日已胜利次数
                  ("DayBuyCount", c_ubyte),    # 当日已购买次数
                  ("DayItemAddCount", c_ubyte),    # 当日物品增加次数
                  ("DayRefreshCount", c_ushort),    # 今日已刷新匹配次数
                  ]
    def __init__(self):
@@ -55363,6 +59277,7 @@
        self.DayWinCount = 0
        self.DayBuyCount = 0
        self.DayItemAddCount = 0
        self.DayRefreshCount = 0
        return
    def GetLength(self):
@@ -55383,7 +59298,8 @@
                                DayPKCount:%d,
                                DayWinCount:%d,
                                DayBuyCount:%d,
                                DayItemAddCount:%d
                                DayItemAddCount:%d,
                                DayRefreshCount:%d
                                '''\
                                %(
                                self.Cmd,
@@ -55396,7 +59312,8 @@
                                self.DayPKCount,
                                self.DayWinCount,
                                self.DayBuyCount,
                                self.DayItemAddCount
                                self.DayItemAddCount,
                                self.DayRefreshCount
                                )
        return DumpString
@@ -55454,6 +59371,189 @@
#------------------------------------------------------
# C1 10 仙盟攻城战玩家信息 #tagMCFamilyGCZPlayerInfo
class  tagMCFamilyGCZPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ContributionCnt", c_ubyte),    # 轮次低级捐献已捐献次数,轮次变更时会重置
                  ("Energy", c_ubyte),    # 当前可用免费体力
                  ("EnergyTime", c_int),    # 上次恢复免费体力时间戳,为0时不再恢复
                  ("AwardState", c_int),    # 活动奖励领取状态,按二进制位判断是否已领取,0-竞猜奖励;1-个人排行奖励;2-仙盟排名奖励;
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC1
        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 = 0xC1
        self.SubCmd = 0x10
        self.ContributionCnt = 0
        self.Energy = 0
        self.EnergyTime = 0
        self.AwardState = 0
        return
    def GetLength(self):
        return sizeof(tagMCFamilyGCZPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 10 仙盟攻城战玩家信息 //tagMCFamilyGCZPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ContributionCnt:%d,
                                Energy:%d,
                                EnergyTime:%d,
                                AwardState:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ContributionCnt,
                                self.Energy,
                                self.EnergyTime,
                                self.AwardState
                                )
        return DumpString
m_NAtagMCFamilyGCZPlayerInfo=tagMCFamilyGCZPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZPlayerInfo.Cmd,m_NAtagMCFamilyGCZPlayerInfo.SubCmd))] = m_NAtagMCFamilyGCZPlayerInfo
#------------------------------------------------------
# C1 11 仙盟攻城战圣泉信息 #tagMCFamilyGCZSQInfo
class  tagMCFamilyGCZSQGrid(Structure):
    _pack_ = 1
    _fields_ = [
                  ("GridNum", c_ubyte),    # 格子编号,1~n
                  ("ItemID", c_int),    # 抽中的物品ID,20亿时为过关标记
                  ("ItemCount", 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.GridNum = 0
        self.ItemID = 0
        self.ItemCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCFamilyGCZSQGrid)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 11 仙盟攻城战圣泉信息 //tagMCFamilyGCZSQInfo:
                                GridNum:%d,
                                ItemID:%d,
                                ItemCount:%d
                                '''\
                                %(
                                self.GridNum,
                                self.ItemID,
                                self.ItemCount
                                )
        return DumpString
class  tagMCFamilyGCZSQInfo(Structure):
    Head = tagHead()
    SQLayer = 0    #(BYTE SQLayer)// 当前所在圣泉层,从1开始
    SQGirdCnt = 0    #(BYTE SQGirdCnt)
    SQGridList = list()    #(vector<tagMCFamilyGCZSQGrid> SQGridList)//圣泉当前层已抽格子信息,仅同步全部或变更的格子,前端进行差异更新,层数变更时重置本地记录
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC1
        self.Head.SubCmd = 0x11
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.SQLayer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SQGirdCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SQGirdCnt):
            temSQGridList = tagMCFamilyGCZSQGrid()
            _pos = temSQGridList.ReadData(_lpData, _pos)
            self.SQGridList.append(temSQGridList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC1
        self.Head.SubCmd = 0x11
        self.SQLayer = 0
        self.SQGirdCnt = 0
        self.SQGridList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        for i in range(self.SQGirdCnt):
            length += self.SQGridList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.SQLayer)
        data = CommFunc.WriteBYTE(data, self.SQGirdCnt)
        for i in range(self.SQGirdCnt):
            data = CommFunc.WriteString(data, self.SQGridList[i].GetLength(), self.SQGridList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                SQLayer:%d,
                                SQGirdCnt:%d,
                                SQGridList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.SQLayer,
                                self.SQGirdCnt,
                                "..."
                                )
        return DumpString
m_NAtagMCFamilyGCZSQInfo=tagMCFamilyGCZSQInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZSQInfo.Head.Cmd,m_NAtagMCFamilyGCZSQInfo.Head.SubCmd))] = m_NAtagMCFamilyGCZSQInfo
#------------------------------------------------------
# C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo
class  tagMCLuckyCloudBuyPlayerInfo(Structure):