ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -2712,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):
@@ -2996,7 +3236,6 @@
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)//等级
    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
    Face = 0    #(DWORD Face)//基本脸型
    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
    Score = 0    #(DWORD Score)//积分
@@ -3004,6 +3243,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):
@@ -3017,7 +3258,6 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -3025,6 +3265,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):
@@ -3033,7 +3275,6 @@
        self.Job = 0
        self.LV = 0
        self.RealmLV = 0
        self.Face = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Score = 0
@@ -3041,6 +3282,8 @@
        self.AddScore = ""
        self.IsWin = 0
        self.Time = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -3053,10 +3296,11 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        length += len(self.AddScore)
        length += 1
        length += 4
        length += 4
        length += 4
        return length
@@ -3068,7 +3312,6 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.Score)
@@ -3076,6 +3319,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):
@@ -3085,14 +3330,15 @@
                                Job:%d,
                                LV:%d,
                                RealmLV:%d,
                                Face:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d,
                                AddScoreLen:%d,
                                AddScore:%s,
                                IsWin:%d,
                                Time:%d
                                Time:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -3100,14 +3346,15 @@
                                self.Job,
                                self.LV,
                                self.RealmLV,
                                self.Face,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score,
                                self.AddScoreLen,
                                self.AddScore,
                                self.IsWin,
                                self.Time
                                self.Time,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -3187,10 +3434,11 @@
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)//等级
    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
    Face = 0    #(DWORD Face)//基本脸型
    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):
@@ -3204,10 +3452,11 @@
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.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):
@@ -3216,10 +3465,11 @@
        self.Job = 0
        self.LV = 0
        self.RealmLV = 0
        self.Face = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Score = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -3229,6 +3479,7 @@
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
@@ -3243,10 +3494,11 @@
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.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):
@@ -3256,10 +3508,11 @@
                                Job:%d,
                                LV:%d,
                                RealmLV:%d,
                                Face:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d
                                Score:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -3267,10 +3520,11 @@
                                self.Job,
                                self.LV,
                                self.RealmLV,
                                self.Face,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score
                                self.Score,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -4701,7 +4955,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)//排序依赖的值,比如,战斗力
@@ -4728,7 +4982,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)
@@ -4773,7 +5027,7 @@
        length += 4
        length += 4
        length += 33
        length += 33
        length += 65
        length += 1
        length += 4
        length += 4
@@ -4797,7 +5051,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)
@@ -5845,6 +6099,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)
@@ -5864,6 +6120,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):
@@ -5880,6 +6138,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()
@@ -5896,6 +6156,8 @@
        length += 1
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += 4 * self.EquipShowIDCount
@@ -5911,6 +6173,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):
@@ -5927,6 +6191,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                EquipShowSwitch:%d,
                                EquipShowIDCount:%d,
                                EquipShowID:%s
@@ -5940,6 +6206,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.EquipShowSwitch,
                                self.EquipShowIDCount,
                                "..."
@@ -6032,6 +6300,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):
@@ -6048,6 +6318,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):
@@ -6059,6 +6331,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -6071,6 +6345,8 @@
        length += 2
        length += 1
        length += 2
        length += 4
        length += 4
        return length
@@ -6084,6 +6360,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):
@@ -6095,7 +6373,9 @@
                                Name:%s,
                                LV:%d,
                                Job:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.AddTime,
@@ -6105,7 +6385,9 @@
                                self.Name,
                                self.LV,
                                self.Job,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -8525,7 +8807,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):
@@ -8547,7 +8831,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):
@@ -8564,7 +8850,9 @@
        self.RobPlayerID = 0
        self.RobWorkerCount = 0
        self.RobPlayerName = ""
        self.RobJob = 0
        self.RobFace = 0
        self.RobFacePic = 0
        return
    def GetLength(self):
@@ -8582,6 +8870,8 @@
        length += 4
        length += 1
        length += 33
        length += 1
        length += 4
        length += 4
        return length
@@ -8601,7 +8891,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):
@@ -8619,7 +8911,9 @@
                                RobPlayerID:%d,
                                RobWorkerCount:%d,
                                RobPlayerName:%s,
                                RobFace:%d
                                RobJob:%d,
                                RobFace:%d,
                                RobFacePic:%d
                                '''\
                                %(
                                self.Index,
@@ -8635,7 +8929,9 @@
                                self.RobPlayerID,
                                self.RobWorkerCount,
                                self.RobPlayerName,
                                self.RobFace
                                self.RobJob,
                                self.RobFace,
                                self.RobFacePic
                                )
        return DumpString
@@ -8643,7 +8939,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
@@ -8656,7 +8955,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()
@@ -8667,7 +8969,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
@@ -8676,6 +8981,9 @@
        length = 0
        length += 4
        length += 33
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        for i in range(self.MineCount):
@@ -8687,7 +8995,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())
@@ -8697,14 +9008,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,
                                "..."
                                )
@@ -8800,7 +9117,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):
@@ -8814,7 +9133,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):
@@ -8823,7 +9144,9 @@
        self.RecordTime = 0
        self.MineID = 0
        self.TagPlayerName = ""
        self.TagJob = 0
        self.TagFace = 0
        self.TagFacePic = 0
        return
    def GetLength(self):
@@ -8833,6 +9156,8 @@
        length += 4
        length += 2
        length += 33
        length += 1
        length += 4
        length += 4
        return length
@@ -8844,7 +9169,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):
@@ -8854,7 +9181,9 @@
                                RecordTime:%d,
                                MineID:%d,
                                TagPlayerName:%s,
                                TagFace:%d
                                TagJob:%d,
                                TagFace:%d,
                                TagFacePic:%d
                                '''\
                                %(
                                self.RecordType,
@@ -8862,7 +9191,9 @@
                                self.RecordTime,
                                self.MineID,
                                self.TagPlayerName,
                                self.TagFace
                                self.TagJob,
                                self.TagFace,
                                self.TagFacePic
                                )
        return DumpString
@@ -13225,6 +13556,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
@@ -13244,6 +13577,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)
@@ -13258,6 +13593,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
@@ -13277,6 +13614,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
@@ -13289,6 +13628,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)
@@ -13304,6 +13645,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Value1:%d,
@@ -13317,6 +13660,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Value1,
@@ -13623,6 +13968,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
@@ -13640,6 +13987,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
@@ -13652,6 +14001,8 @@
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        return
@@ -13667,6 +14018,8 @@
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
        return length
@@ -13679,6 +14032,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
@@ -13692,6 +14047,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d
                                '''\
@@ -13703,6 +14060,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx
                                )
@@ -13717,6 +14076,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代表已离线;
@@ -13737,6 +14098,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)
@@ -13752,6 +14115,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
@@ -13773,6 +14138,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
@@ -13785,6 +14152,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)
@@ -13801,6 +14170,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                OfflineValue:%d,
@@ -13815,6 +14186,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx,
                                self.OfflineValue,
@@ -14559,6 +14932,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):
@@ -14577,6 +14952,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):
@@ -14591,6 +14968,8 @@
        self.Job = 0
        self.JobLevel = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
@@ -14603,6 +14982,8 @@
        length += 1
        length += 1
        length += 2
        length += 4
        length += 4
        return length
@@ -14616,6 +14997,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):
@@ -14627,7 +15010,9 @@
                                LV:%d,
                                Job:%d,
                                JobLevel:%d,
                                RealmLV:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -14637,7 +15022,9 @@
                                self.LV,
                                self.Job,
                                self.JobLevel,
                                self.RealmLV
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
@@ -16718,7 +17105,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
@@ -16745,7 +17132,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)
@@ -16790,7 +17177,7 @@
        length += 4
        length += 4
        length += 33
        length += 33
        length += 65
        length += 1
        length += 4
        length += 4
@@ -16814,7 +17201,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)
@@ -16880,8 +17267,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)
@@ -16897,8 +17284,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):
@@ -16924,8 +17311,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):
@@ -16937,8 +17324,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):
@@ -17098,48 +17485,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
@@ -17416,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)
@@ -17432,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)
@@ -17443,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
@@ -17456,6 +17875,8 @@
        length += len(self.PlayerName)
        length += 1
        length += 4
        length += 4
        length += 4
        length += 2
        length += 4
        length += 1
@@ -17468,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)
@@ -17480,6 +17903,8 @@
                                NameLen:%d,
                                PlayerName:%s,
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                RealmLV:%d,
                                PKScore:%d,
@@ -17490,6 +17915,8 @@
                                self.NameLen,
                                self.PlayerName,
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.RealmLV,
                                self.PKScore,
@@ -17587,9 +18014,11 @@
    PlayerName = ""    #(String PlayerName)// 跨服名字
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)
    MaxHP = 0    #(DWORD MaxHP)// 默认满血,求余亿部分
    MaxHPEx = 0    #(DWORD MaxHPEx)// 默认满血,整除亿部分
    MaxProDef = 0    #(DWORD MaxProDef)// 最大护盾
    RealmLV = 0    #(WORD RealmLV)//境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
    data = None
    def __init__(self):
@@ -17603,9 +18032,11 @@
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -17614,9 +18045,11 @@
        self.PlayerName = ""
        self.Job = 0
        self.LV = 0
        self.MaxHP = 0
        self.MaxHPEx = 0
        self.MaxProDef = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        return
    def GetLength(self):
@@ -17626,6 +18059,8 @@
        length += len(self.PlayerName)
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
@@ -17639,9 +18074,11 @@
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteDWORD(data, self.MaxHP)
        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
        data = CommFunc.WriteDWORD(data, self.MaxProDef)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        return data
    def OutputString(self):
@@ -17651,9 +18088,11 @@
                                PlayerName:%s,
                                Job:%d,
                                LV:%d,
                                MaxHP:%d,
                                MaxHPEx:%d,
                                MaxProDef:%d
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -17661,19 +18100,17 @@
                                self.PlayerName,
                                self.Job,
                                self.LV,
                                self.MaxHP,
                                self.MaxHPEx,
                                self.MaxProDef
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx
                                )
        return DumpString
class  tagGCCrossRealmPKMatchOK(Structure):
    Head = tagHead()
    RoomID = 0    #(WORD RoomID)// 房间ID
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)// 跨服名字
    Number = 0    #(BYTE Number)// 位置编号;1-左,2-右
    MatchPlayerCount = 0    #(BYTE MatchPlayerCount)
    MatchPlayer = list()    #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家
    data = None
@@ -17687,10 +18124,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()
@@ -17703,10 +18136,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
@@ -17714,10 +18143,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()
@@ -17727,10 +18152,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())
@@ -17739,19 +18160,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,
                                "..."
                                )
@@ -18345,6 +18758,1817 @@
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])
    Face = 0    #(DWORD Face)
    FacePic = 0    #(DWORD FacePic)
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.PlayerID = 0
        self.Name = ""
        self.Face = 0
        self.FacePic = 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.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerID:%d,
                                Name:%s,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.Name,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
class  tagGCFamilyGCZBatSceneHurt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("CityID", c_int),    #被攻击的城池ID
                  ("HurtValue", c_int),    #伤害飘血,求余亿部分
                  ("HurtValueEx", c_int),    #伤害飘血,整除亿部分
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.CityID = 0
        self.HurtValue = 0
        self.HurtValueEx = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZBatSceneHurt)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
                                CityID:%d,
                                HurtValue:%d,
                                HurtValueEx:%d
                                '''\
                                %(
                                self.CityID,
                                self.HurtValue,
                                self.HurtValueEx
                                )
        return DumpString
class  tagGCFamilyGCZBatSceneCity(Structure):
    _pack_ = 1
    _fields_ = [
                  ("CityID", c_int),    #城池ID
                  ("CityLV", c_ubyte),    #城池等级
                  ("FamilyID", c_int),    #所属仙盟ID,可能为0
                  ("Rank", c_ubyte),    #当前名次,从1开始
                  ("HP", c_int),    #剩余生命,求余亿部分,剩余生命为0时代表被摧毁
                  ("HPEx", c_int),    #剩余生命,整除亿部分
                  ("HPMax", c_int),    #最大生命,求余亿部分
                  ("HPMaxEx", c_int),    #最大生命,整除亿部分
                  ("LastAtkedTime", c_int),    #最后一次被攻击时间戳,可能为0
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.CityID = 0
        self.CityLV = 0
        self.FamilyID = 0
        self.Rank = 0
        self.HP = 0
        self.HPEx = 0
        self.HPMax = 0
        self.HPMaxEx = 0
        self.LastAtkedTime = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZBatSceneCity)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
                                CityID:%d,
                                CityLV:%d,
                                FamilyID:%d,
                                Rank:%d,
                                HP:%d,
                                HPEx:%d,
                                HPMax:%d,
                                HPMaxEx:%d,
                                LastAtkedTime:%d
                                '''\
                                %(
                                self.CityID,
                                self.CityLV,
                                self.FamilyID,
                                self.Rank,
                                self.HP,
                                self.HPEx,
                                self.HPMax,
                                self.HPMaxEx,
                                self.LastAtkedTime
                                )
        return DumpString
class  tagGCFamilyGCZBatSceneInfo(Structure):
    Head = tagHead()
    BatType = 0    #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
    GroupNum = 0    #(BYTE GroupNum)// 分组编号,从1开始,对应A
    TopFamilyID = 0    #(DWORD TopFamilyID)// 伤害第一仙盟ID
    TopLeaderID = 0    #(DWORD TopLeaderID)// 伤害第一盟主ID
    TopPlayerID = 0    #(DWORD TopPlayerID)// 伤害第一玩家ID
    TopPlayerFamilyID = 0    #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID
    AtkPlayerID = 0    #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息
    AtkType = 0    #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效
    KillCnt = 0    #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效
    HurtCnt = 0    #(BYTE HurtCnt)
    HurtList = list()    #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效
    CityCnt = 0    #(BYTE CityCnt)
    CityList = list()    #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池
    PlayerCnt = 0    #(BYTE PlayerCnt)
    PlayerInfoList = list()    #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x28
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.HurtCnt):
            temHurtList = tagGCFamilyGCZBatSceneHurt()
            _pos = temHurtList.ReadData(_lpData, _pos)
            self.HurtList.append(temHurtList)
        self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CityCnt):
            temCityList = tagGCFamilyGCZBatSceneCity()
            _pos = temCityList.ReadData(_lpData, _pos)
            self.CityList.append(temCityList)
        self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PlayerCnt):
            temPlayerInfoList = tagGCFamilyGCZBatScenePlayer()
            _pos = temPlayerInfoList.ReadData(_lpData, _pos)
            self.PlayerInfoList.append(temPlayerInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x28
        self.BatType = 0
        self.GroupNum = 0
        self.TopFamilyID = 0
        self.TopLeaderID = 0
        self.TopPlayerID = 0
        self.TopPlayerFamilyID = 0
        self.AtkPlayerID = 0
        self.AtkType = 0
        self.KillCnt = 0
        self.HurtCnt = 0
        self.HurtList = list()
        self.CityCnt = 0
        self.CityList = list()
        self.PlayerCnt = 0
        self.PlayerInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        length += 1
        length += 1
        for i in range(self.HurtCnt):
            length += self.HurtList[i].GetLength()
        length += 1
        for i in range(self.CityCnt):
            length += self.CityList[i].GetLength()
        length += 1
        for i in range(self.PlayerCnt):
            length += self.PlayerInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.BatType)
        data = CommFunc.WriteBYTE(data, self.GroupNum)
        data = CommFunc.WriteDWORD(data, self.TopFamilyID)
        data = CommFunc.WriteDWORD(data, self.TopLeaderID)
        data = CommFunc.WriteDWORD(data, self.TopPlayerID)
        data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID)
        data = CommFunc.WriteDWORD(data, self.AtkPlayerID)
        data = CommFunc.WriteBYTE(data, self.AtkType)
        data = CommFunc.WriteBYTE(data, self.KillCnt)
        data = CommFunc.WriteBYTE(data, self.HurtCnt)
        for i in range(self.HurtCnt):
            data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CityCnt)
        for i in range(self.CityCnt):
            data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.PlayerCnt)
        for i in range(self.PlayerCnt):
            data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                BatType:%d,
                                GroupNum:%d,
                                TopFamilyID:%d,
                                TopLeaderID:%d,
                                TopPlayerID:%d,
                                TopPlayerFamilyID:%d,
                                AtkPlayerID:%d,
                                AtkType:%d,
                                KillCnt:%d,
                                HurtCnt:%d,
                                HurtList:%s,
                                CityCnt:%d,
                                CityList:%s,
                                PlayerCnt:%d,
                                PlayerInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.BatType,
                                self.GroupNum,
                                self.TopFamilyID,
                                self.TopLeaderID,
                                self.TopPlayerID,
                                self.TopPlayerFamilyID,
                                self.AtkPlayerID,
                                self.AtkType,
                                self.KillCnt,
                                self.HurtCnt,
                                "...",
                                self.CityCnt,
                                "...",
                                self.PlayerCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo
#------------------------------------------------------
# C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo
class  tagGCFamilyGCZCampMem(Structure):
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])//参与玩家名字
    FamilyLV = 0    #(BYTE FamilyLV)//参与时的家族职位
    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.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.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 += 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.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,
                                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.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
#------------------------------------------------------
@@ -20259,6 +22483,7 @@
                  ("SubCmd", c_ubyte),
                  ("MapID", c_ushort),    
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ("FuncMapID", c_ushort),    #功能地图ID
                  ]
    def __init__(self):
@@ -20277,6 +22502,7 @@
        self.SubCmd = 0x26
        self.MapID = 0
        self.FuncLineID = 0
        self.FuncMapID = 0
        return
    def GetLength(self):
@@ -20290,13 +22516,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
@@ -20315,6 +22543,7 @@
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),    
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ("FuncMapID", c_ushort),    #功能地图ID
                  ]
    def __init__(self):
@@ -20333,6 +22562,7 @@
        self.SubCmd = 0x27
        self.MapID = 0
        self.FuncLineID = 0
        self.FuncMapID = 0
        return
    def GetLength(self):
@@ -20346,13 +22576,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
@@ -21253,7 +23485,7 @@
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),    #果实物品ID
                  ("EatCnt", c_ushort),    #已使用个数
                  ("EatCnt", c_int),    #已使用个数
                  ("ItemAddCnt", c_int),    #增幅丹增加上限
                  ("ItemBreakCnt", c_int),    #增幅丹突破次数
                  ]
@@ -25766,7 +27998,8 @@
    _pack_ = 1
    _fields_ = [
                  ("MfpType", c_ubyte),    #模块编号类型
                  ("FightPower", c_int),    #本模块战斗力
                  ("FightPower", c_int),    #本模块战斗力,求余亿部分
                  ("FightPowerEx", c_int),    #本模块战斗力,整除亿部分,1代表1亿
                  ]
    def __init__(self):
@@ -25781,6 +28014,7 @@
    def Clear(self):
        self.MfpType = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        return
    def GetLength(self):
@@ -25792,11 +28026,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
@@ -28736,13 +30972,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):
@@ -28755,30 +30989,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
@@ -32828,6 +35148,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):
@@ -33649,7 +36181,7 @@
    _pack_ = 1
    _fields_ = [
                  ("ItemIndex", c_int),    
                  ("BuyCnt", c_ushort),    # 今日已购买次数
                  ("BuyCnt", c_int),    # 今日已购买次数
                  ("IsReset", c_ubyte),    #是否重置
                  ]
@@ -35445,6 +37977,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):
@@ -35466,6 +38001,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):
@@ -35480,6 +38020,9 @@
        self.LimitLV = 0
        self.AwardCount = 0
        self.AwardInfoList = list()
        self.CTGIDCount = 0
        self.CTGIDList = list()
        self.ShopType = 0
        return
    def GetLength(self):
@@ -35493,6 +38036,9 @@
        length += 1
        for i in range(self.AwardCount):
            length += self.AwardInfoList[i].GetLength()
        length += 1
        length += 2 * self.CTGIDCount
        length += 2
        return length
@@ -35507,6 +38053,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):
@@ -35518,7 +38068,10 @@
                                IsDayReset:%d,
                                LimitLV:%d,
                                AwardCount:%d,
                                AwardInfoList:%s
                                AwardInfoList:%s,
                                CTGIDCount:%d,
                                CTGIDList:%s,
                                ShopType:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -35528,7 +38081,10 @@
                                self.IsDayReset,
                                self.LimitLV,
                                self.AwardCount,
                                "..."
                                "...",
                                self.CTGIDCount,
                                "...",
                                self.ShopType
                                )
        return DumpString
@@ -37870,6 +40426,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):
@@ -37884,12 +40442,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):
@@ -37898,6 +40463,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
@@ -37907,17 +40475,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
@@ -37931,6 +40506,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
@@ -37950,6 +40526,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()
@@ -37968,6 +40545,7 @@
        self.LimitLV = 0
        self.RepSignMoneyType = 0
        self.RepSignMoneyValue = 0
        self.AwardExCTGID = 0
        self.DayCount = 0
        self.AwardDayList = list()
        return
@@ -37981,6 +40559,7 @@
        length += 2
        length += 1
        length += 4
        length += 2
        length += 1
        for i in range(self.DayCount):
            length += self.AwardDayList[i].GetLength()
@@ -37996,6 +40575,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())
@@ -38010,6 +40590,7 @@
                                LimitLV:%d,
                                RepSignMoneyType:%d,
                                RepSignMoneyValue:%d,
                                AwardExCTGID:%d,
                                DayCount:%d,
                                AwardDayList:%s
                                '''\
@@ -38021,6 +40602,7 @@
                                self.LimitLV,
                                self.RepSignMoneyType,
                                self.RepSignMoneyValue,
                                self.AwardExCTGID,
                                self.DayCount,
                                "..."
                                )
@@ -38040,7 +40622,8 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("LoginAward", c_int),    # 是否已领取,按天索引0代表第1天记录当天是否已领取
                  ("LoginAward", c_int),    # 普通奖励领取记录,按天对应二进制位记录是否已领取
                  ("LoginAwardEx", c_int),    # 额外奖励领取记录,按天对应二进制位记录是否已领取
                  ]
    def __init__(self):
@@ -38059,6 +40642,7 @@
        self.SubCmd = 0x70
        self.ActNum = 0
        self.LoginAward = 0
        self.LoginAwardEx = 0
        return
    def GetLength(self):
@@ -38072,19 +40656,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
#------------------------------------------------------
@@ -41452,6 +44419,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):
@@ -43324,6 +46383,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
#------------------------------------------------------
@@ -48957,7 +52520,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):
@@ -48974,6 +52538,7 @@
        self.BillAwardRecord = 0
        self.TagAwardRecord = 0
        self.RecordData = 0
        self.RecordDataEx = 0
        return
    def GetLength(self):
@@ -48987,13 +52552,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
@@ -49893,11 +53460,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):
@@ -49913,6 +53482,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)
@@ -49924,6 +53494,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):
@@ -49935,11 +53506,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):
@@ -49949,11 +53522,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
@@ -49964,6 +53539,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])
@@ -49972,6 +53548,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):
@@ -49981,11 +53558,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(),
@@ -49993,11 +53572,13 @@
                                self.EnergyUsed,
                                self.RefreshCount,
                                self.RefreshCountSuper,
                                self.RefreshCountRob,
                                self.TreasureCount,
                                "...",
                                "...",
                                "...",
                                self.HelpAwardCount
                                self.HelpAwardCount,
                                self.HousekeeperEndTime
                                )
        return DumpString
@@ -52011,6 +55592,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)
@@ -52028,6 +55610,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):
@@ -52044,6 +55627,7 @@
        self.ZhanlingType = 0
        self.IsActivite = 0
        self.IsActiviteH = 0
        self.AllFinishTime = 0
        self.Value1 = 0
        self.RewardCount = 0
        self.RewardList = list()
@@ -52055,6 +55639,7 @@
        length += 1
        length += 1
        length += 1
        length += 4
        length += 4
        length += 2
        for i in range(self.RewardCount):
@@ -52068,6 +55653,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):
@@ -52080,6 +55666,7 @@
                                ZhanlingType:%d,
                                IsActivite:%d,
                                IsActiviteH:%d,
                                AllFinishTime:%d,
                                Value1:%d,
                                RewardCount:%d,
                                RewardList:%s
@@ -52089,6 +55676,7 @@
                                self.ZhanlingType,
                                self.IsActivite,
                                self.IsActiviteH,
                                self.AllFinishTime,
                                self.Value1,
                                self.RewardCount,
                                "..."
@@ -52811,6 +56399,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)// 是否需要仙玉召唤
@@ -52829,6 +56419,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)
@@ -52842,6 +56434,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
@@ -52857,6 +56451,8 @@
        length += 1
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += 1
@@ -52871,6 +56467,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)
@@ -52885,6 +56483,8 @@
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                Relation:%d,
                                IsNeedGold:%d
@@ -52897,6 +56497,8 @@
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.Relation,
                                self.IsNeedGold
@@ -56028,6 +59630,7 @@
                  ("DayWinCount", c_ubyte),    # 当日已胜利次数
                  ("DayBuyCount", c_ubyte),    # 当日已购买次数
                  ("DayItemAddCount", c_ubyte),    # 当日物品增加次数
                  ("DayRefreshCount", c_ushort),    # 今日已刷新匹配次数
                  ]
    def __init__(self):
@@ -56053,6 +59656,7 @@
        self.DayWinCount = 0
        self.DayBuyCount = 0
        self.DayItemAddCount = 0
        self.DayRefreshCount = 0
        return
    def GetLength(self):
@@ -56073,7 +59677,8 @@
                                DayPKCount:%d,
                                DayWinCount:%d,
                                DayBuyCount:%d,
                                DayItemAddCount:%d
                                DayItemAddCount:%d,
                                DayRefreshCount:%d
                                '''\
                                %(
                                self.Cmd,
@@ -56086,7 +59691,8 @@
                                self.DayPKCount,
                                self.DayWinCount,
                                self.DayBuyCount,
                                self.DayItemAddCount
                                self.DayItemAddCount,
                                self.DayRefreshCount
                                )
        return DumpString
@@ -56144,6 +59750,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):