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):
@@ -8695,6 +8935,7 @@
    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
@@ -8710,6 +8951,7 @@
        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()
@@ -8723,6 +8965,7 @@
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        self.RobValue = 0
        self.MineCount = 0
        self.MineItemList = list()
        return
@@ -8732,6 +8975,7 @@
        length += 4
        length += 33
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
@@ -8747,6 +8991,7 @@
        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())
@@ -8759,6 +9004,7 @@
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                RobValue:%d,
                                MineCount:%d,
                                MineItemList:%s
                                '''\
@@ -8768,6 +9014,7 @@
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.RobValue,
                                self.MineCount,
                                "..."
                                )
@@ -17013,8 +17260,8 @@
class  tagGCCrossBillboardInfo(Structure):
    Head = tagHead()
    Type = 0    #(BYTE Type)//榜单类型
    GroupValue1 = 0    #(BYTE GroupValue1)// 分组值1
    GroupValue2 = 0    #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
    GroupValue1 = 0    #(DWORD GroupValue1)// 分组值1
    GroupValue2 = 0    #(DWORD GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
    WatchID = 0    #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
    BillboardCount = 0    #(BYTE BillboardCount)
    CrossBillboardDataList = list()    #(vector<tagGCCrossBillboardData> CrossBillboardDataList)
@@ -17030,8 +17277,8 @@
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GroupValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BillboardCount):
@@ -17057,8 +17304,8 @@
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        for i in range(self.BillboardCount):
@@ -17070,8 +17317,8 @@
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Type)
        data = CommFunc.WriteBYTE(data, self.GroupValue1)
        data = CommFunc.WriteBYTE(data, self.GroupValue2)
        data = CommFunc.WriteDWORD(data, self.GroupValue1)
        data = CommFunc.WriteDWORD(data, self.GroupValue2)
        data = CommFunc.WriteDWORD(data, self.WatchID)
        data = CommFunc.WriteBYTE(data, self.BillboardCount)
        for i in range(self.BillboardCount):
@@ -17231,48 +17478,74 @@
# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo
class  tagGCCrossChampionshipPKBattle(Structure):
    _pack_ = 1
    _fields_ = [
                  ("BattleNum", c_ubyte),    # 对战组编号 1~n
                  ("WinPlayerID", c_int),    # 获胜玩家ID
                  ("PlayerIDA", c_int),    # 玩家IDA
                  ("PlayerIDB", c_int),    # 玩家IDB
                  ]
    BattleNum = 0    #(BYTE BattleNum)// 对战组编号 1~n
    WinPlayerID = 0    #(DWORD WinPlayerID)// 获胜玩家ID
    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家IDA
    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家IDB
    BattleRetLen = 0    #(BYTE BattleRetLen)
    BattleRet = ""    #(String BattleRet)// 战斗结果明细 {"playerID":[[第1局胜负,第1局总积分,胜负基础分,hp分,时间分], ...], ...}
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
        self.BattleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WinPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BattleRetLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.BattleRet,_pos = CommFunc.ReadString(_lpData, _pos,self.BattleRetLen)
        return _pos
    def Clear(self):
        self.BattleNum = 0
        self.WinPlayerID = 0
        self.PlayerIDA = 0
        self.PlayerIDB = 0
        self.BattleRetLen = 0
        self.BattleRet = ""
        return
    def GetLength(self):
        return sizeof(tagGCCrossChampionshipPKBattle)
        length = 0
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        length += len(self.BattleRet)
        return length
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
        data = ''
        data = CommFunc.WriteBYTE(data, self.BattleNum)
        data = CommFunc.WriteDWORD(data, self.WinPlayerID)
        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
        data = CommFunc.WriteBYTE(data, self.BattleRetLen)
        data = CommFunc.WriteString(data, self.BattleRetLen, self.BattleRet)
        return data
    def OutputString(self):
        DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo:
        DumpString = '''
                                BattleNum:%d,
                                WinPlayerID:%d,
                                PlayerIDA:%d,
                                PlayerIDB:%d
                                PlayerIDB:%d,
                                BattleRetLen:%d,
                                BattleRet:%s
                                '''\
                                %(
                                self.BattleNum,
                                self.WinPlayerID,
                                self.PlayerIDA,
                                self.PlayerIDB
                                self.PlayerIDB,
                                self.BattleRetLen,
                                self.BattleRet
                                )
        return DumpString
@@ -17345,6 +17618,7 @@
    RealmLV = 0    #(WORD RealmLV)
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    ServerID = 0    #(DWORD ServerID)
    data = None
    def __init__(self):
@@ -17363,6 +17637,7 @@
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -17376,6 +17651,7 @@
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.ServerID = 0
        return
    def GetLength(self):
@@ -17388,6 +17664,7 @@
        length += 4
        length += 4
        length += 2
        length += 4
        length += 4
        length += 4
@@ -17405,6 +17682,7 @@
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        return data
    def OutputString(self):
@@ -17418,7 +17696,8 @@
                                FightPowerEx:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                FacePic:%d,
                                ServerID:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -17430,7 +17709,8 @@
                                self.FightPowerEx,
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                self.FacePic,
                                self.ServerID
                                )
        return DumpString
@@ -17739,6 +18019,7 @@
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
    ServerID = 0    #(DWORD ServerID)
    data = None
    def __init__(self):
@@ -17757,6 +18038,7 @@
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -17770,6 +18052,7 @@
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.ServerID = 0
        return
    def GetLength(self):
@@ -17780,6 +18063,7 @@
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
@@ -17799,6 +18083,7 @@
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        return data
    def OutputString(self):
@@ -17812,7 +18097,8 @@
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d
                                FightPowerEx:%d,
                                ServerID:%d
                                '''\
                                %(
                                self.PlayerID,
@@ -17824,7 +18110,8 @@
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx
                                self.FightPowerEx,
                                self.ServerID
                                )
        return DumpString
@@ -18478,6 +18765,1838 @@
m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo
#------------------------------------------------------
# C0 24 仙盟攻城战活动信息 #tagGCFamilyGCZActInfo
class  tagGCFamilyGCZActFamily(Structure):
    FamilyID = 0    #(DWORD FamilyID)
    Name = ""    #(char Name[33])//参与仙盟名字
    LV = 0    #(BYTE LV)//仙盟等级
    ServerID = 0    #(DWORD ServerID)//仙盟所属区服ID
    EmblemID = 0    #(DWORD EmblemID)//徽章ID
    FightPower = 0    #(DWORD FightPower)//仙盟总战力,求余亿部分
    FightPowerEx = 0    #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
    LeaderID = 0    #(DWORD LeaderID)//盟主ID
    LeaderName = ""    #(char LeaderName[33])//盟主名
    LeaderFace = 0    #(DWORD LeaderFace)
    LeaderFacePic = 0    #(DWORD LeaderFacePic)
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.LeaderFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LeaderFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.FamilyID = 0
        self.Name = ""
        self.LV = 0
        self.ServerID = 0
        self.EmblemID = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.LeaderID = 0
        self.LeaderName = ""
        self.LeaderFace = 0
        self.LeaderFacePic = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 33
        length += 1
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 33
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.FamilyID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.LV)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        data = CommFunc.WriteDWORD(data, self.EmblemID)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.LeaderID)
        data = CommFunc.WriteString(data, 33, self.LeaderName)
        data = CommFunc.WriteDWORD(data, self.LeaderFace)
        data = CommFunc.WriteDWORD(data, self.LeaderFacePic)
        return data
    def OutputString(self):
        DumpString = '''
                                FamilyID:%d,
                                Name:%s,
                                LV:%d,
                                ServerID:%d,
                                EmblemID:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                LeaderID:%d,
                                LeaderName:%s,
                                LeaderFace:%d,
                                LeaderFacePic:%d
                                '''\
                                %(
                                self.FamilyID,
                                self.Name,
                                self.LV,
                                self.ServerID,
                                self.EmblemID,
                                self.FightPower,
                                self.FightPowerEx,
                                self.LeaderID,
                                self.LeaderName,
                                self.LeaderFace,
                                self.LeaderFacePic
                                )
        return DumpString
class  tagGCFamilyGCZActInfo(Structure):
    Head = tagHead()
    ServerInfoLen = 0    #(BYTE ServerInfoLen)
    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
    ZoneID = 0    #(BYTE ZoneID)// 活动分区ID,公示期为0
    ActID = 0    #(DWORD ActID)// 活动ID,代表某一次活动的唯一ID,前端如果有活动相关的本地记录可以通过验证此ID变更进行重置
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    JoinFamilyCnt = 0    #(BYTE JoinFamilyCnt)// 参与仙盟数
    ActFlowID = 0    #(WORD ActFlowID)// 活动流程ID,对应H.活动时间流程表中的编号,前端根据跨服时间自行计算当前所处流程状态
    GuessTemplateID = 0    #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示
    PersonalTemplateID = 0    #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
    FamilyTemplateID = 0    #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示
    StateError = 0    #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示
    FamilyCount = 0    #(BYTE FamilyCount)
    ActFamilyList = list()    #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x24
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.JoinFamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ActFlowID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FamilyCount):
            temActFamilyList = tagGCFamilyGCZActFamily()
            _pos = temActFamilyList.ReadData(_lpData, _pos)
            self.ActFamilyList.append(temActFamilyList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x24
        self.ServerInfoLen = 0
        self.ServerIDRangeInfo = ""
        self.ZoneID = 0
        self.ActID = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.JoinFamilyCnt = 0
        self.ActFlowID = 0
        self.GuessTemplateID = 0
        self.PersonalTemplateID = 0
        self.FamilyTemplateID = 0
        self.StateError = 0
        self.FamilyCount = 0
        self.ActFamilyList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += len(self.ServerIDRangeInfo)
        length += 1
        length += 4
        length += 10
        length += 10
        length += 1
        length += 2
        length += 2
        length += 2
        length += 2
        length += 4
        length += 1
        for i in range(self.FamilyCount):
            length += self.ActFamilyList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
        data = CommFunc.WriteBYTE(data, self.ZoneID)
        data = CommFunc.WriteDWORD(data, self.ActID)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteBYTE(data, self.JoinFamilyCnt)
        data = CommFunc.WriteWORD(data, self.ActFlowID)
        data = CommFunc.WriteWORD(data, self.GuessTemplateID)
        data = CommFunc.WriteWORD(data, self.PersonalTemplateID)
        data = CommFunc.WriteWORD(data, self.FamilyTemplateID)
        data = CommFunc.WriteDWORD(data, self.StateError)
        data = CommFunc.WriteBYTE(data, self.FamilyCount)
        for i in range(self.FamilyCount):
            data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ServerInfoLen:%d,
                                ServerIDRangeInfo:%s,
                                ZoneID:%d,
                                ActID:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                JoinFamilyCnt:%d,
                                ActFlowID:%d,
                                GuessTemplateID:%d,
                                PersonalTemplateID:%d,
                                FamilyTemplateID:%d,
                                StateError:%d,
                                FamilyCount:%d,
                                ActFamilyList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ServerInfoLen,
                                self.ServerIDRangeInfo,
                                self.ZoneID,
                                self.ActID,
                                self.StartDate,
                                self.EndtDate,
                                self.JoinFamilyCnt,
                                self.ActFlowID,
                                self.GuessTemplateID,
                                self.PersonalTemplateID,
                                self.FamilyTemplateID,
                                self.StateError,
                                self.FamilyCount,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZActInfo=tagGCFamilyGCZActInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZActInfo.Head.Cmd,m_NAtagGCFamilyGCZActInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZActInfo
#------------------------------------------------------
# C0 29 仙盟攻城战城池战斗信息 #tagGCFamilyGCZBatCityInfo
class  tagGCFamilyGCZBatCityInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("CityID", c_int),    #城池ID
                  ("CityLV", c_ubyte),    #城池等级
                  ("FamilyID", c_int),    #所属仙盟ID,可能为0
                  ("GuardID", c_int),    #当前防守成员ID,为0时表示没有防守成员了,城池已被击毁
                  ("HP", c_int),    #防守成员剩余生命,求余亿部分,剩余生命为0时代表该防守成员被击败
                  ("HPEx", c_int),    #防守成员剩余生命,整除亿部分
                  ("HPMax", c_int),    #防守成员最大生命,求余亿部分
                  ("HPMaxEx", c_int),    #防守成员最大生命,整除亿部分
                  ("AtkPlayerID", c_int),    #发起攻击的玩家ID,可能为0,判断是否自己的ID进行相应的攻击表现
                  ("AtkRet", c_ubyte),    #攻击结果,仅在攻击玩家ID不为0时有效,0--成功;1-目标已被击杀;2-城池已被摧毁;3-其他
                  ("KillCnt", c_ubyte),    #本次攻击击杀防守人员数
                  ("HurtValue", c_int),    #伤害飘血,求余亿部分
                  ("HurtValueEx", c_int),    #伤害飘血,整除亿部分
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC0
        self.SubCmd = 0x29
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xC0
        self.SubCmd = 0x29
        self.CityID = 0
        self.CityLV = 0
        self.FamilyID = 0
        self.GuardID = 0
        self.HP = 0
        self.HPEx = 0
        self.HPMax = 0
        self.HPMaxEx = 0
        self.AtkPlayerID = 0
        self.AtkRet = 0
        self.KillCnt = 0
        self.HurtValue = 0
        self.HurtValueEx = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZBatCityInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 29 仙盟攻城战城池战斗信息 //tagGCFamilyGCZBatCityInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                CityID:%d,
                                CityLV:%d,
                                FamilyID:%d,
                                GuardID:%d,
                                HP:%d,
                                HPEx:%d,
                                HPMax:%d,
                                HPMaxEx:%d,
                                AtkPlayerID:%d,
                                AtkRet:%d,
                                KillCnt:%d,
                                HurtValue:%d,
                                HurtValueEx:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.CityID,
                                self.CityLV,
                                self.FamilyID,
                                self.GuardID,
                                self.HP,
                                self.HPEx,
                                self.HPMax,
                                self.HPMaxEx,
                                self.AtkPlayerID,
                                self.AtkRet,
                                self.KillCnt,
                                self.HurtValue,
                                self.HurtValueEx
                                )
        return DumpString
m_NAtagGCFamilyGCZBatCityInfo=tagGCFamilyGCZBatCityInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatCityInfo.Cmd,m_NAtagGCFamilyGCZBatCityInfo.SubCmd))] = m_NAtagGCFamilyGCZBatCityInfo
#------------------------------------------------------
# C0 25 仙盟攻城战轮次分组信息 #tagGCFamilyGCZBatGroupInfo
class  tagGCFamilyGCZBatGroup(Structure):
    GroupNum = 0    #(BYTE GroupNum)// 分组编号,从1开始,对应A
    FamilyIDCnt = 0    #(BYTE FamilyIDCnt)
    FamilyIDList = list()    #(vector<DWORD> FamilyIDList)// 仙盟ID列表,前端可以通过判断参与的仙盟ID是否在某个分组里面验证有没有战场参赛资格
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.FamilyIDCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FamilyIDCnt):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.FamilyIDList.append(value)
        return _pos
    def Clear(self):
        self.GroupNum = 0
        self.FamilyIDCnt = 0
        self.FamilyIDList = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 1
        length += 4 * self.FamilyIDCnt
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.GroupNum)
        data = CommFunc.WriteBYTE(data, self.FamilyIDCnt)
        for i in range(self.FamilyIDCnt):
            data = CommFunc.WriteDWORD(data, self.FamilyIDList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                GroupNum:%d,
                                FamilyIDCnt:%d,
                                FamilyIDList:%s
                                '''\
                                %(
                                self.GroupNum,
                                self.FamilyIDCnt,
                                "..."
                                )
        return DumpString
class  tagGCFamilyGCZBat(Structure):
    BatType = 0    #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
    GroupCnt = 0    #(BYTE GroupCnt)// 分组数
    GroupList = list()    #(vector<tagGCFamilyGCZBatGroup> GroupList)// 分组列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.GroupCnt):
            temGroupList = tagGCFamilyGCZBatGroup()
            _pos = temGroupList.ReadData(_lpData, _pos)
            self.GroupList.append(temGroupList)
        return _pos
    def Clear(self):
        self.BatType = 0
        self.GroupCnt = 0
        self.GroupList = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 1
        for i in range(self.GroupCnt):
            length += self.GroupList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.BatType)
        data = CommFunc.WriteBYTE(data, self.GroupCnt)
        for i in range(self.GroupCnt):
            data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                BatType:%d,
                                GroupCnt:%d,
                                GroupList:%s
                                '''\
                                %(
                                self.BatType,
                                self.GroupCnt,
                                "..."
                                )
        return DumpString
class  tagGCFamilyGCZBatGroupInfo(Structure):
    Head = tagHead()
    RoundNum = 0    #(BYTE RoundNum)// 第x轮的分组,从1开始,没有在对应轮次战场分组里的视为没有该轮次的参赛资格
    BatTypeCnt = 0    #(BYTE BatTypeCnt)// 战场类型数
    BatList = list()    #(vector<tagGCFamilyGCZBat> BatList)//战场列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x25
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.BatTypeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BatTypeCnt):
            temBatList = tagGCFamilyGCZBat()
            _pos = temBatList.ReadData(_lpData, _pos)
            self.BatList.append(temBatList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x25
        self.RoundNum = 0
        self.BatTypeCnt = 0
        self.BatList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        for i in range(self.BatTypeCnt):
            length += self.BatList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.RoundNum)
        data = CommFunc.WriteBYTE(data, self.BatTypeCnt)
        for i in range(self.BatTypeCnt):
            data = CommFunc.WriteString(data, self.BatList[i].GetLength(), self.BatList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                RoundNum:%d,
                                BatTypeCnt:%d,
                                BatList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.RoundNum,
                                self.BatTypeCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZBatGroupInfo=tagGCFamilyGCZBatGroupInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatGroupInfo.Head.Cmd,m_NAtagGCFamilyGCZBatGroupInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatGroupInfo
#------------------------------------------------------
# C0 30 仙盟攻城战战斗战报 #tagGCFamilyGCZBatReport
class  tagGCFamilyGCZBatRepHurt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("TagFamilyID", c_int),    #目标仙盟ID
                  ("HurtValue", c_int),    #输出伤害,求余亿部分
                  ("HurtValueEx", c_int),    #输出伤害,整除亿部分
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.TagFamilyID = 0
        self.HurtValue = 0
        self.HurtValueEx = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZBatRepHurt)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 30 仙盟攻城战战斗战报 //tagGCFamilyGCZBatReport:
                                TagFamilyID:%d,
                                HurtValue:%d,
                                HurtValueEx:%d
                                '''\
                                %(
                                self.TagFamilyID,
                                self.HurtValue,
                                self.HurtValueEx
                                )
        return DumpString
class  tagGCFamilyGCZBatReport(Structure):
    Head = tagHead()
    FamilyID = 0    #(DWORD FamilyID)// 战报仙盟ID
    DefRepCnt = 0    #(BYTE DefRepCnt)
    DefRepList = list()    #(vector<tagGCFamilyGCZBatRepHurt> DefRepList)// 防守战报
    AtkRepCnt = 0    #(BYTE AtkRepCnt)
    AtkRepList = list()    #(vector<tagGCFamilyGCZBatRepHurt> AtkRepList)// 进攻战报
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x30
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.DefRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DefRepCnt):
            temDefRepList = tagGCFamilyGCZBatRepHurt()
            _pos = temDefRepList.ReadData(_lpData, _pos)
            self.DefRepList.append(temDefRepList)
        self.AtkRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AtkRepCnt):
            temAtkRepList = tagGCFamilyGCZBatRepHurt()
            _pos = temAtkRepList.ReadData(_lpData, _pos)
            self.AtkRepList.append(temAtkRepList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x30
        self.FamilyID = 0
        self.DefRepCnt = 0
        self.DefRepList = list()
        self.AtkRepCnt = 0
        self.AtkRepList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        for i in range(self.DefRepCnt):
            length += self.DefRepList[i].GetLength()
        length += 1
        for i in range(self.AtkRepCnt):
            length += self.AtkRepList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.FamilyID)
        data = CommFunc.WriteBYTE(data, self.DefRepCnt)
        for i in range(self.DefRepCnt):
            data = CommFunc.WriteString(data, self.DefRepList[i].GetLength(), self.DefRepList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.AtkRepCnt)
        for i in range(self.AtkRepCnt):
            data = CommFunc.WriteString(data, self.AtkRepList[i].GetLength(), self.AtkRepList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                FamilyID:%d,
                                DefRepCnt:%d,
                                DefRepList:%s,
                                AtkRepCnt:%d,
                                AtkRepList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.FamilyID,
                                self.DefRepCnt,
                                "...",
                                self.AtkRepCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZBatReport=tagGCFamilyGCZBatReport()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatReport.Head.Cmd,m_NAtagGCFamilyGCZBatReport.Head.SubCmd))] = m_NAtagGCFamilyGCZBatReport
#------------------------------------------------------
# C0 28 仙盟攻城战城池场景信息 #tagGCFamilyGCZBatSceneInfo
class  tagGCFamilyGCZBatScenePlayer(Structure):
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)
    FacePic = 0    #(DWORD FacePic)
    FamilyID = 0    #(DWORD FamilyID)//所属仙盟ID
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.PlayerID = 0
        self.Name = ""
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        self.FamilyID = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 33
        length += 1
        length += 4
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FamilyID)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerID:%d,
                                Name:%s,
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                FamilyID:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.Name,
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.FamilyID
                                )
        return DumpString
class  tagGCFamilyGCZBatSceneHurt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("CityID", c_int),    #被攻击的城池ID
                  ("HurtValue", c_int),    #伤害飘血,求余亿部分
                  ("HurtValueEx", c_int),    #伤害飘血,整除亿部分
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.CityID = 0
        self.HurtValue = 0
        self.HurtValueEx = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZBatSceneHurt)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
                                CityID:%d,
                                HurtValue:%d,
                                HurtValueEx:%d
                                '''\
                                %(
                                self.CityID,
                                self.HurtValue,
                                self.HurtValueEx
                                )
        return DumpString
class  tagGCFamilyGCZBatSceneCity(Structure):
    _pack_ = 1
    _fields_ = [
                  ("CityID", c_int),    #城池ID
                  ("CityLV", c_ubyte),    #城池等级
                  ("FamilyID", c_int),    #所属仙盟ID,可能为0
                  ("Rank", c_ubyte),    #当前名次,从1开始
                  ("HP", c_int),    #剩余生命,求余亿部分,剩余生命为0时代表被摧毁
                  ("HPEx", c_int),    #剩余生命,整除亿部分
                  ("HPMax", c_int),    #最大生命,求余亿部分
                  ("HPMaxEx", c_int),    #最大生命,整除亿部分
                  ("LastAtkedTime", c_int),    #最后一次被攻击时间戳,可能为0
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.CityID = 0
        self.CityLV = 0
        self.FamilyID = 0
        self.Rank = 0
        self.HP = 0
        self.HPEx = 0
        self.HPMax = 0
        self.HPMaxEx = 0
        self.LastAtkedTime = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZBatSceneCity)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo:
                                CityID:%d,
                                CityLV:%d,
                                FamilyID:%d,
                                Rank:%d,
                                HP:%d,
                                HPEx:%d,
                                HPMax:%d,
                                HPMaxEx:%d,
                                LastAtkedTime:%d
                                '''\
                                %(
                                self.CityID,
                                self.CityLV,
                                self.FamilyID,
                                self.Rank,
                                self.HP,
                                self.HPEx,
                                self.HPMax,
                                self.HPMaxEx,
                                self.LastAtkedTime
                                )
        return DumpString
class  tagGCFamilyGCZBatSceneInfo(Structure):
    Head = tagHead()
    BatType = 0    #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级;
    GroupNum = 0    #(BYTE GroupNum)// 分组编号,从1开始,对应A
    TopFamilyID = 0    #(DWORD TopFamilyID)// 伤害第一仙盟ID
    TopLeaderID = 0    #(DWORD TopLeaderID)// 伤害第一盟主ID
    TopPlayerID = 0    #(DWORD TopPlayerID)// 伤害第一玩家ID
    TopPlayerFamilyID = 0    #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID
    AtkPlayerID = 0    #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息
    AtkType = 0    #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效
    KillCnt = 0    #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效
    HurtCnt = 0    #(BYTE HurtCnt)
    HurtList = list()    #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效
    CityCnt = 0    #(BYTE CityCnt)
    CityList = list()    #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池
    PlayerCnt = 0    #(BYTE PlayerCnt)
    PlayerInfoList = list()    #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x28
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.HurtCnt):
            temHurtList = tagGCFamilyGCZBatSceneHurt()
            _pos = temHurtList.ReadData(_lpData, _pos)
            self.HurtList.append(temHurtList)
        self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CityCnt):
            temCityList = tagGCFamilyGCZBatSceneCity()
            _pos = temCityList.ReadData(_lpData, _pos)
            self.CityList.append(temCityList)
        self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PlayerCnt):
            temPlayerInfoList = tagGCFamilyGCZBatScenePlayer()
            _pos = temPlayerInfoList.ReadData(_lpData, _pos)
            self.PlayerInfoList.append(temPlayerInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x28
        self.BatType = 0
        self.GroupNum = 0
        self.TopFamilyID = 0
        self.TopLeaderID = 0
        self.TopPlayerID = 0
        self.TopPlayerFamilyID = 0
        self.AtkPlayerID = 0
        self.AtkType = 0
        self.KillCnt = 0
        self.HurtCnt = 0
        self.HurtList = list()
        self.CityCnt = 0
        self.CityList = list()
        self.PlayerCnt = 0
        self.PlayerInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        length += 1
        length += 1
        for i in range(self.HurtCnt):
            length += self.HurtList[i].GetLength()
        length += 1
        for i in range(self.CityCnt):
            length += self.CityList[i].GetLength()
        length += 1
        for i in range(self.PlayerCnt):
            length += self.PlayerInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.BatType)
        data = CommFunc.WriteBYTE(data, self.GroupNum)
        data = CommFunc.WriteDWORD(data, self.TopFamilyID)
        data = CommFunc.WriteDWORD(data, self.TopLeaderID)
        data = CommFunc.WriteDWORD(data, self.TopPlayerID)
        data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID)
        data = CommFunc.WriteDWORD(data, self.AtkPlayerID)
        data = CommFunc.WriteBYTE(data, self.AtkType)
        data = CommFunc.WriteBYTE(data, self.KillCnt)
        data = CommFunc.WriteBYTE(data, self.HurtCnt)
        for i in range(self.HurtCnt):
            data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CityCnt)
        for i in range(self.CityCnt):
            data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.PlayerCnt)
        for i in range(self.PlayerCnt):
            data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                BatType:%d,
                                GroupNum:%d,
                                TopFamilyID:%d,
                                TopLeaderID:%d,
                                TopPlayerID:%d,
                                TopPlayerFamilyID:%d,
                                AtkPlayerID:%d,
                                AtkType:%d,
                                KillCnt:%d,
                                HurtCnt:%d,
                                HurtList:%s,
                                CityCnt:%d,
                                CityList:%s,
                                PlayerCnt:%d,
                                PlayerInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.BatType,
                                self.GroupNum,
                                self.TopFamilyID,
                                self.TopLeaderID,
                                self.TopPlayerID,
                                self.TopPlayerFamilyID,
                                self.AtkPlayerID,
                                self.AtkType,
                                self.KillCnt,
                                self.HurtCnt,
                                "...",
                                self.CityCnt,
                                "...",
                                self.PlayerCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo
#------------------------------------------------------
# C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo
class  tagGCFamilyGCZCampMem(Structure):
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])//参与玩家名字
    FamilyLV = 0    #(BYTE FamilyLV)//参与时的家族职位
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力,整除亿部分
    HP = 0    #(DWORD HP)//剩余生命,求余亿部分
    HPEx = 0    #(DWORD HPEx)//剩余生命,整除亿部分
    HPMax = 0    #(DWORD HPMax)//最大生命,求余亿部分
    HPMaxEx = 0    #(DWORD HPMaxEx)//最大生命,整除亿部分
    TotalHurt = 0    #(DWORD TotalHurt)//活动总伤害,求余亿部分,如果不在榜上则读该值
    TotalHurtEx = 0    #(DWORD TotalHurtEx)//活动总伤害,整除亿部分
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TotalHurt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TotalHurtEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.PlayerID = 0
        self.Name = ""
        self.FamilyLV = 0
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.HP = 0
        self.HPEx = 0
        self.HPMax = 0
        self.HPMaxEx = 0
        self.TotalHurt = 0
        self.TotalHurtEx = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 33
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.FamilyLV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.HP)
        data = CommFunc.WriteDWORD(data, self.HPEx)
        data = CommFunc.WriteDWORD(data, self.HPMax)
        data = CommFunc.WriteDWORD(data, self.HPMaxEx)
        data = CommFunc.WriteDWORD(data, self.TotalHurt)
        data = CommFunc.WriteDWORD(data, self.TotalHurtEx)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerID:%d,
                                Name:%s,
                                FamilyLV:%d,
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                HP:%d,
                                HPEx:%d,
                                HPMax:%d,
                                HPMaxEx:%d,
                                TotalHurt:%d,
                                TotalHurtEx:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.Name,
                                self.FamilyLV,
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
                                self.FightPowerEx,
                                self.HP,
                                self.HPEx,
                                self.HPMax,
                                self.HPMaxEx,
                                self.TotalHurt,
                                self.TotalHurtEx
                                )
        return DumpString
class  tagGCFamilyGCZCampRound(Structure):
    _pack_ = 1
    _fields_ = [
                  ("RoundNum", c_ubyte),    #轮次编号,从1开始
                  ("BatType", c_ubyte),    #所在战场类型
                  ("GroupNum", c_ubyte),    #所在分组编号
                  ("Rank", c_ubyte),    #本轮排名
                  ("Score", c_ushort),    #本轮积分,总积分为所有轮次累加
                  ("UpdownState", c_ubyte),    #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.RoundNum = 0
        self.BatType = 0
        self.GroupNum = 0
        self.Rank = 0
        self.Score = 0
        self.UpdownState = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZCampRound)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo:
                                RoundNum:%d,
                                BatType:%d,
                                GroupNum:%d,
                                Rank:%d,
                                Score:%d,
                                UpdownState:%d
                                '''\
                                %(
                                self.RoundNum,
                                self.BatType,
                                self.GroupNum,
                                self.Rank,
                                self.Score,
                                self.UpdownState
                                )
        return DumpString
class  tagGCFamilyGCZCampInfo(Structure):
    Head = tagHead()
    FamilyID = 0    #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准
    CampLV = 0    #(WORD CampLV)//大本营当前等级
    CampExp = 0    #(DWORD CampExp)//大本营当前经验
    CityLV = 0    #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样
    HPBase = 0    #(DWORD HPBase)//基础生命,求余亿部分
    HPBaseEx = 0    #(DWORD HPBaseEx)//基础生命,整除亿部分
    HPMax = 0    #(DWORD HPMax)//总生命,求余亿部分
    HPMaxEx = 0    #(DWORD HPMaxEx)//总大生命,整除亿部分
    HP = 0    #(DWORD HP)//剩余生命,求余亿部分
    HPEx = 0    #(DWORD HPEx)//剩余生命,整除亿部分
    RoundCnt = 0    #(BYTE RoundCnt)
    RoundInfoList = list()    #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息
    DefMemCnt = 0    #(BYTE DefMemCnt)
    DefMemList = list()    #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x26
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.HPBase,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPBaseEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.RoundCnt):
            temRoundInfoList = tagGCFamilyGCZCampRound()
            _pos = temRoundInfoList.ReadData(_lpData, _pos)
            self.RoundInfoList.append(temRoundInfoList)
        self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DefMemCnt):
            temDefMemList = tagGCFamilyGCZCampMem()
            _pos = temDefMemList.ReadData(_lpData, _pos)
            self.DefMemList.append(temDefMemList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x26
        self.FamilyID = 0
        self.CampLV = 0
        self.CampExp = 0
        self.CityLV = 0
        self.HPBase = 0
        self.HPBaseEx = 0
        self.HPMax = 0
        self.HPMaxEx = 0
        self.HP = 0
        self.HPEx = 0
        self.RoundCnt = 0
        self.RoundInfoList = list()
        self.DefMemCnt = 0
        self.DefMemList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 2
        length += 4
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        for i in range(self.RoundCnt):
            length += self.RoundInfoList[i].GetLength()
        length += 1
        for i in range(self.DefMemCnt):
            length += self.DefMemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.FamilyID)
        data = CommFunc.WriteWORD(data, self.CampLV)
        data = CommFunc.WriteDWORD(data, self.CampExp)
        data = CommFunc.WriteWORD(data, self.CityLV)
        data = CommFunc.WriteDWORD(data, self.HPBase)
        data = CommFunc.WriteDWORD(data, self.HPBaseEx)
        data = CommFunc.WriteDWORD(data, self.HPMax)
        data = CommFunc.WriteDWORD(data, self.HPMaxEx)
        data = CommFunc.WriteDWORD(data, self.HP)
        data = CommFunc.WriteDWORD(data, self.HPEx)
        data = CommFunc.WriteBYTE(data, self.RoundCnt)
        for i in range(self.RoundCnt):
            data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.DefMemCnt)
        for i in range(self.DefMemCnt):
            data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                FamilyID:%d,
                                CampLV:%d,
                                CampExp:%d,
                                CityLV:%d,
                                HPBase:%d,
                                HPBaseEx:%d,
                                HPMax:%d,
                                HPMaxEx:%d,
                                HP:%d,
                                HPEx:%d,
                                RoundCnt:%d,
                                RoundInfoList:%s,
                                DefMemCnt:%d,
                                DefMemList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.FamilyID,
                                self.CampLV,
                                self.CampExp,
                                self.CityLV,
                                self.HPBase,
                                self.HPBaseEx,
                                self.HPMax,
                                self.HPMaxEx,
                                self.HP,
                                self.HPEx,
                                self.RoundCnt,
                                "...",
                                self.DefMemCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZCampInfo=tagGCFamilyGCZCampInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZCampInfo.Head.Cmd,m_NAtagGCFamilyGCZCampInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZCampInfo
#------------------------------------------------------
# C0 27 仙盟攻城战成员贡献值信息 #tagGCFamilyGCZContributionInfo
class  tagGCFamilyGCZContribution(Structure):
    _pack_ = 1
    _fields_ = [
                  ("PlayerID", c_int),
                  ("ContributionValue", c_int),    #贡献值
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.PlayerID = 0
        self.ContributionValue = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZContribution)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 27 仙盟攻城战成员贡献值信息 //tagGCFamilyGCZContributionInfo:
                                PlayerID:%d,
                                ContributionValue:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.ContributionValue
                                )
        return DumpString
class  tagGCFamilyGCZContributionInfo(Structure):
    Head = tagHead()
    ContriCnt = 0    #(BYTE ContriCnt)
    ContriList = list()    #(vector<tagGCFamilyGCZContribution> ContriList)//成员贡献值列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x27
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ContriCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ContriCnt):
            temContriList = tagGCFamilyGCZContribution()
            _pos = temContriList.ReadData(_lpData, _pos)
            self.ContriList.append(temContriList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x27
        self.ContriCnt = 0
        self.ContriList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.ContriCnt):
            length += self.ContriList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ContriCnt)
        for i in range(self.ContriCnt):
            data = CommFunc.WriteString(data, self.ContriList[i].GetLength(), self.ContriList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ContriCnt:%d,
                                ContriList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ContriCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZContributionInfo=tagGCFamilyGCZContributionInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZContributionInfo.Head.Cmd,m_NAtagGCFamilyGCZContributionInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZContributionInfo
#------------------------------------------------------
# C0 31 仙盟攻城战分组仙盟成员伤害明细 #tagGCFamilyGCZGroupFamilyMemHurtInfo
class  tagGCFamilyGCZGroupFamilyMemHurt(Structure):
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])//参与玩家名字
    HurtValue = 0    #(DWORD HurtValue)//伤害,求余亿部分
    HurtValueEx = 0    #(DWORD HurtValueEx)//伤害,整除亿部分
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.PlayerID = 0
        self.Name = ""
        self.HurtValue = 0
        self.HurtValueEx = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 33
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteDWORD(data, self.HurtValue)
        data = CommFunc.WriteDWORD(data, self.HurtValueEx)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerID:%d,
                                Name:%s,
                                HurtValue:%d,
                                HurtValueEx:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.Name,
                                self.HurtValue,
                                self.HurtValueEx
                                )
        return DumpString
class  tagGCFamilyGCZGroupFamilyMemHurtInfo(Structure):
    Head = tagHead()
    FamilyID = 0    #(DWORD FamilyID)//查看的目标仙盟ID
    HurtMemCnt = 0    #(BYTE HurtMemCnt)
    HurtMemList = list()    #(vector<tagGCFamilyGCZGroupFamilyMemHurt> HurtMemList)//成员伤害明细列表,只算城池被摧毁前的伤害,未排序,前端自己排序
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x31
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HurtMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.HurtMemCnt):
            temHurtMemList = tagGCFamilyGCZGroupFamilyMemHurt()
            _pos = temHurtMemList.ReadData(_lpData, _pos)
            self.HurtMemList.append(temHurtMemList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x31
        self.FamilyID = 0
        self.HurtMemCnt = 0
        self.HurtMemList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        for i in range(self.HurtMemCnt):
            length += self.HurtMemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.FamilyID)
        data = CommFunc.WriteBYTE(data, self.HurtMemCnt)
        for i in range(self.HurtMemCnt):
            data = CommFunc.WriteString(data, self.HurtMemList[i].GetLength(), self.HurtMemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                FamilyID:%d,
                                HurtMemCnt:%d,
                                HurtMemList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.FamilyID,
                                self.HurtMemCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo=tagGCFamilyGCZGroupFamilyMemHurtInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.Cmd,m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo
#------------------------------------------------------
# C0 32 仙盟攻城战竞猜名单信息 #tagGCFamilyGCZGuessInfo
class  tagGCFamilyGCZGuessFamily(Structure):
    _pack_ = 1
    _fields_ = [
                  ("FamilyID", c_int),    #备选仙盟ID
                  ("GuessValue", c_ushort),    #竞猜热度值,玩家每次选择则加1,重复选择也算
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.FamilyID = 0
        self.GuessValue = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZGuessFamily)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
                                FamilyID:%d,
                                GuessValue:%d
                                '''\
                                %(
                                self.FamilyID,
                                self.GuessValue
                                )
        return DumpString
class  tagGCFamilyGCZGuessRight(Structure):
    _pack_ = 1
    _fields_ = [
                  ("AwardID", c_ubyte),    #奖励ID
                  ("RightPlayerCnt", c_ushort),    #猜中玩家个数
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.AwardID = 0
        self.RightPlayerCnt = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyGCZGuessRight)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo:
                                AwardID:%d,
                                RightPlayerCnt:%d
                                '''\
                                %(
                                self.AwardID,
                                self.RightPlayerCnt
                                )
        return DumpString
class  tagGCFamilyGCZGuessInfo(Structure):
    Head = tagHead()
    PlayerID = 0    #(DWORD PlayerID)//竞猜玩家ID,有玩家修改竞猜时会附带该信息,如果是自己ID,则更新自己的竞猜选项,否则无视
    SelectCnt = 0    #(BYTE SelectCnt)
    SelectFamilyIDList = list()    #(vector<DWORD> SelectFamilyIDList)//竞猜玩家选择的仙盟ID顺序
    FinalCnt = 0    #(BYTE FinalCnt)
    FinalFamilyIDList = list()    #(vector<DWORD> FinalFamilyIDList)//最终排名顺序,仅活动排名出来后才有值
    RightCnt = 0    #(BYTE RightCnt)
    RightInfoList = list()    #(vector<tagGCFamilyGCZGuessRight> RightInfoList)//猜中个数明细列表
    FamilyCnt = 0    #(BYTE FamilyCnt)
    GuessFamilyList = list()    #(vector<tagGCFamilyGCZGuessFamily> GuessFamilyList)//备选仙盟名单列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x32
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SelectCnt):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.SelectFamilyIDList.append(value)
        self.FinalCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FinalCnt):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.FinalFamilyIDList.append(value)
        self.RightCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.RightCnt):
            temRightInfoList = tagGCFamilyGCZGuessRight()
            _pos = temRightInfoList.ReadData(_lpData, _pos)
            self.RightInfoList.append(temRightInfoList)
        self.FamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FamilyCnt):
            temGuessFamilyList = tagGCFamilyGCZGuessFamily()
            _pos = temGuessFamilyList.ReadData(_lpData, _pos)
            self.GuessFamilyList.append(temGuessFamilyList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x32
        self.PlayerID = 0
        self.SelectCnt = 0
        self.SelectFamilyIDList = list()
        self.FinalCnt = 0
        self.FinalFamilyIDList = list()
        self.RightCnt = 0
        self.RightInfoList = list()
        self.FamilyCnt = 0
        self.GuessFamilyList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += 4 * self.SelectCnt
        length += 1
        length += 4 * self.FinalCnt
        length += 1
        for i in range(self.RightCnt):
            length += self.RightInfoList[i].GetLength()
        length += 1
        for i in range(self.FamilyCnt):
            length += self.GuessFamilyList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.SelectCnt)
        for i in range(self.SelectCnt):
            data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i])
        data = CommFunc.WriteBYTE(data, self.FinalCnt)
        for i in range(self.FinalCnt):
            data = CommFunc.WriteDWORD(data, self.FinalFamilyIDList[i])
        data = CommFunc.WriteBYTE(data, self.RightCnt)
        for i in range(self.RightCnt):
            data = CommFunc.WriteString(data, self.RightInfoList[i].GetLength(), self.RightInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.FamilyCnt)
        for i in range(self.FamilyCnt):
            data = CommFunc.WriteString(data, self.GuessFamilyList[i].GetLength(), self.GuessFamilyList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerID:%d,
                                SelectCnt:%d,
                                SelectFamilyIDList:%s,
                                FinalCnt:%d,
                                FinalFamilyIDList:%s,
                                RightCnt:%d,
                                RightInfoList:%s,
                                FamilyCnt:%d,
                                GuessFamilyList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerID,
                                self.SelectCnt,
                                "...",
                                self.FinalCnt,
                                "...",
                                self.RightCnt,
                                "...",
                                self.FamilyCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCFamilyGCZGuessInfo=tagGCFamilyGCZGuessInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGuessInfo.Head.Cmd,m_NAtagGCFamilyGCZGuessInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGuessInfo
#------------------------------------------------------
@@ -20413,6 +22532,7 @@
                  ("SubCmd", c_ubyte),
                  ("MapID", c_ushort),    
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ("FuncMapID", c_ushort),    #功能地图ID
                  ]
    def __init__(self):
@@ -20431,6 +22551,7 @@
        self.SubCmd = 0x26
        self.MapID = 0
        self.FuncLineID = 0
        self.FuncMapID = 0
        return
    def GetLength(self):
@@ -20444,13 +22565,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                MapID:%d,
                                FuncLineID:%d
                                FuncLineID:%d,
                                FuncMapID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.MapID,
                                self.FuncLineID
                                self.FuncLineID,
                                self.FuncMapID
                                )
        return DumpString
@@ -20469,6 +22592,7 @@
                  ("SubCmd", c_ubyte),
                  ("MapID", c_int),    
                  ("FuncLineID", c_ushort),    #功能线路ID
                  ("FuncMapID", c_ushort),    #功能地图ID
                  ]
    def __init__(self):
@@ -20487,6 +22611,7 @@
        self.SubCmd = 0x27
        self.MapID = 0
        self.FuncLineID = 0
        self.FuncMapID = 0
        return
    def GetLength(self):
@@ -20500,13 +22625,15 @@
                                Cmd:%s,
                                SubCmd:%s,
                                MapID:%d,
                                FuncLineID:%d
                                FuncLineID:%d,
                                FuncMapID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.MapID,
                                self.FuncLineID
                                self.FuncLineID,
                                self.FuncMapID
                                )
        return DumpString
@@ -21411,7 +23538,7 @@
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),    #果实物品ID
                  ("EatCnt", c_ushort),    #已使用个数
                  ("EatCnt", c_int),    #已使用个数
                  ("ItemAddCnt", c_int),    #增幅丹增加上限
                  ("ItemBreakCnt", c_int),    #增幅丹突破次数
                  ]
@@ -25924,7 +28051,8 @@
    _pack_ = 1
    _fields_ = [
                  ("MfpType", c_ubyte),    #模块编号类型
                  ("FightPower", c_int),    #本模块战斗力
                  ("FightPower", c_int),    #本模块战斗力,求余亿部分
                  ("FightPowerEx", c_int),    #本模块战斗力,整除亿部分,1代表1亿
                  ]
    def __init__(self):
@@ -25939,6 +28067,7 @@
    def Clear(self):
        self.MfpType = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        return
    def GetLength(self):
@@ -25950,11 +28079,13 @@
    def OutputString(self):
        DumpString = '''//A3 A1 各功能模块战斗力信息 //tagMCModuleFightPowerInfo:
                                MfpType:%d,
                                FightPower:%d
                                FightPower:%d,
                                FightPowerEx:%d
                                '''\
                                %(
                                self.MfpType,
                                self.FightPower
                                self.FightPower,
                                self.FightPowerEx
                                )
        return DumpString
@@ -28323,19 +30454,15 @@
#------------------------------------------------------
# A3 11 通知玩家境界信息 #tagMCSyncRealmInfo
class  tagMCSyncRealmInfo(Structure):
class  tagMCSyncRealmTask(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("IsPass", c_ubyte),    #是否通关副本
                  ("XXZLAwardState", c_int),    #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
                  ("TaskID", c_ubyte),
                  ("TaskValue", c_int),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x11
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -28344,36 +30471,99 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xA3
        self.SubCmd = 0x11
        self.IsPass = 0
        self.XXZLAwardState = 0
        self.TaskID = 0
        self.TaskValue = 0
        return
    def GetLength(self):
        return sizeof(tagMCSyncRealmInfo)
        return sizeof(tagMCSyncRealmTask)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                IsPass:%d,
                                XXZLAwardState:%d
                                TaskID:%d,
                                TaskValue:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.IsPass,
                                self.XXZLAwardState
                                self.TaskID,
                                self.TaskValue
                                )
        return DumpString
class  tagMCSyncRealmInfo(Structure):
    Head = tagHead()
    TaskAwardState = 0    #(DWORD TaskAwardState)//进阶任务领奖状态;按任务ID二进制位存储是否已领取
    TaskValueCount = 0    #(BYTE TaskValueCount)
    TaskValueList = list()    #(vector<tagMCSyncRealmTask> TaskValueList)//进阶任务值列表,仅有需要记录的任务才会通知
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x11
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.TaskAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TaskValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TaskValueCount):
            temTaskValueList = tagMCSyncRealmTask()
            _pos = temTaskValueList.ReadData(_lpData, _pos)
            self.TaskValueList.append(temTaskValueList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x11
        self.TaskAwardState = 0
        self.TaskValueCount = 0
        self.TaskValueList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        for i in range(self.TaskValueCount):
            length += self.TaskValueList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.TaskAwardState)
        data = CommFunc.WriteBYTE(data, self.TaskValueCount)
        for i in range(self.TaskValueCount):
            data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                TaskAwardState:%d,
                                TaskValueCount:%d,
                                TaskValueList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.TaskAwardState,
                                self.TaskValueCount,
                                "..."
                                )
        return DumpString
m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo
#------------------------------------------------------
@@ -28929,6 +31119,7 @@
    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)
@@ -28944,6 +31135,7 @@
        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)
@@ -28957,6 +31149,7 @@
        self.TreasureType = 0
        self.LuckValue = 0
        self.TreasureCount = 0
        self.TreasureCountToday = 0
        self.FreeCountToday = 0
        self.TreasureCntAward = 0
        self.GridLimitCnt = 0
@@ -28967,6 +31160,7 @@
        length = 0
        length += 1
        length += 2
        length += 4
        length += 4
        length += 2
        length += 4
@@ -28981,6 +31175,7 @@
        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)
@@ -28993,6 +31188,7 @@
                                TreasureType:%d,
                                LuckValue:%d,
                                TreasureCount:%d,
                                TreasureCountToday:%d,
                                FreeCountToday:%d,
                                TreasureCntAward:%d,
                                GridLimitCnt:%d,
@@ -29002,6 +31198,7 @@
                                self.TreasureType,
                                self.LuckValue,
                                self.TreasureCount,
                                self.TreasureCountToday,
                                self.FreeCountToday,
                                self.TreasureCntAward,
                                self.GridLimitCnt,
@@ -34088,7 +36285,7 @@
    _pack_ = 1
    _fields_ = [
                  ("ItemIndex", c_int),    
                  ("BuyCnt", c_ushort),    # 今日已购买次数
                  ("BuyCnt", c_int),    # 今日已购买次数
                  ("IsReset", c_ubyte),    #是否重置
                  ]
@@ -35884,6 +38081,9 @@
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    AwardCount = 0    #(BYTE AwardCount)
    AwardInfoList = list()    #(vector<tagMCActFamilyCTGAssistAward> AwardInfoList)// 互助奖励列表
    CTGIDCount = 0    #(BYTE CTGIDCount)
    CTGIDList = list()    #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加
    ShopType = 0    #(WORD ShopType)// 开放商店类型
    data = None
    def __init__(self):
@@ -35905,6 +38105,11 @@
            temAwardInfoList = tagMCActFamilyCTGAssistAward()
            _pos = temAwardInfoList.ReadData(_lpData, _pos)
            self.AwardInfoList.append(temAwardInfoList)
        self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CTGIDCount):
            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
            self.CTGIDList.append(value)
        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -35919,6 +38124,9 @@
        self.LimitLV = 0
        self.AwardCount = 0
        self.AwardInfoList = list()
        self.CTGIDCount = 0
        self.CTGIDList = list()
        self.ShopType = 0
        return
    def GetLength(self):
@@ -35932,6 +38140,9 @@
        length += 1
        for i in range(self.AwardCount):
            length += self.AwardInfoList[i].GetLength()
        length += 1
        length += 2 * self.CTGIDCount
        length += 2
        return length
@@ -35946,6 +38157,10 @@
        data = CommFunc.WriteBYTE(data, self.AwardCount)
        for i in range(self.AwardCount):
            data = CommFunc.WriteString(data, self.AwardInfoList[i].GetLength(), self.AwardInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CTGIDCount)
        for i in range(self.CTGIDCount):
            data = CommFunc.WriteWORD(data, self.CTGIDList[i])
        data = CommFunc.WriteWORD(data, self.ShopType)
        return data
    def OutputString(self):
@@ -35957,7 +38172,10 @@
                                IsDayReset:%d,
                                LimitLV:%d,
                                AwardCount:%d,
                                AwardInfoList:%s
                                AwardInfoList:%s,
                                CTGIDCount:%d,
                                CTGIDList:%s,
                                ShopType:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -35967,7 +38185,10 @@
                                self.IsDayReset,
                                self.LimitLV,
                                self.AwardCount,
                                "..."
                                "...",
                                self.CTGIDCount,
                                "...",
                                self.ShopType
                                )
        return DumpString
@@ -44269,6 +46490,510 @@
#------------------------------------------------------
# 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
#------------------------------------------------------
# AA 80 仙匣秘境跨服活动信息 #tagMCCrossActXianXiaMJInfo
class  tagMCCrossActXianXiaMJItem(Structure):
@@ -49899,7 +52624,8 @@
                  ("CampaignType", c_ubyte),    #奖励类型
                  ("BillAwardRecord", c_ubyte),    #排行奖励是否已领取
                  ("TagAwardRecord", c_int),    #目标奖励索引位领取记录:0-未领;1-已领
                  ("RecordData", c_int),    #活动时的记录值
                  ("RecordData", c_int),    #活动时的记录值,求余亿部分,为了统一逻辑,其他非战力榜的也使用此规则
                  ("RecordDataEx", c_int),    #活动时的记录值,整除亿部分,1代表1亿
                  ]
    def __init__(self):
@@ -49916,6 +52642,7 @@
        self.BillAwardRecord = 0
        self.TagAwardRecord = 0
        self.RecordData = 0
        self.RecordDataEx = 0
        return
    def GetLength(self):
@@ -49929,13 +52656,15 @@
                                CampaignType:%d,
                                BillAwardRecord:%d,
                                TagAwardRecord:%d,
                                RecordData:%d
                                RecordData:%d,
                                RecordDataEx:%d
                                '''\
                                %(
                                self.CampaignType,
                                self.BillAwardRecord,
                                self.TagAwardRecord,
                                self.RecordData
                                self.RecordData,
                                self.RecordDataEx
                                )
        return DumpString
@@ -50835,11 +53564,13 @@
    EnergyUsed = 0    #(WORD EnergyUsed)// 今日已消耗体力
    RefreshCount = 0    #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新
    RefreshCountSuper = 0    #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新
    RefreshCountRob = 0    #(WORD RefreshCountRob)// 今日福地刷新周围玩家次数
    TreasureCount = 0    #(BYTE TreasureCount)// 聚宝盆类型个数,对应类型 0~n
    TreasureState = list()    #(vector<BYTE> TreasureState)// 聚宝盆是否已激活列表,[类型0是否已激活, ...]
    TreasureAward = list()    #(vector<BYTE> TreasureAward)// 聚宝盆奖励是否已领取列表,[类型0是否已领取, ...]
    TreasureProgress = list()    #(vector<BYTE> TreasureProgress)// 聚宝盆进度值列表,[类型0进度值, ...],满进度100
    HelpAwardCount = 0    #(BYTE HelpAwardCount)// 今日已帮助别人奖励次数
    HousekeeperEndTime = 0    #(DWORD HousekeeperEndTime)// 自动管家到期时间戳,有值同时也代表免费试用已使用
    data = None
    def __init__(self):
@@ -50855,6 +53586,7 @@
        self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RefreshCountRob,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TreasureCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
@@ -50866,6 +53598,7 @@
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.TreasureProgress.append(value)
        self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.HousekeeperEndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -50877,11 +53610,13 @@
        self.EnergyUsed = 0
        self.RefreshCount = 0
        self.RefreshCountSuper = 0
        self.RefreshCountRob = 0
        self.TreasureCount = 0
        self.TreasureState = list()
        self.TreasureAward = list()
        self.TreasureProgress = list()
        self.HelpAwardCount = 0
        self.HousekeeperEndTime = 0
        return
    def GetLength(self):
@@ -50891,11 +53626,13 @@
        length += 2
        length += 4
        length += 1
        length += 2
        length += 1
        length += 1 * self.TreasureCount
        length += 1 * self.TreasureCount
        length += 1 * self.TreasureCount
        length += 1
        length += 4
        return length
@@ -50906,6 +53643,7 @@
        data = CommFunc.WriteWORD(data, self.EnergyUsed)
        data = CommFunc.WriteDWORD(data, self.RefreshCount)
        data = CommFunc.WriteBYTE(data, self.RefreshCountSuper)
        data = CommFunc.WriteWORD(data, self.RefreshCountRob)
        data = CommFunc.WriteBYTE(data, self.TreasureCount)
        for i in range(self.TreasureCount):
            data = CommFunc.WriteBYTE(data, self.TreasureState[i])
@@ -50914,6 +53652,7 @@
        for i in range(self.TreasureCount):
            data = CommFunc.WriteBYTE(data, self.TreasureProgress[i])
        data = CommFunc.WriteBYTE(data, self.HelpAwardCount)
        data = CommFunc.WriteDWORD(data, self.HousekeeperEndTime)
        return data
    def OutputString(self):
@@ -50923,11 +53662,13 @@
                                EnergyUsed:%d,
                                RefreshCount:%d,
                                RefreshCountSuper:%d,
                                RefreshCountRob:%d,
                                TreasureCount:%d,
                                TreasureState:%s,
                                TreasureAward:%s,
                                TreasureProgress:%s,
                                HelpAwardCount:%d
                                HelpAwardCount:%d,
                                HousekeeperEndTime:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -50935,11 +53676,13 @@
                                self.EnergyUsed,
                                self.RefreshCount,
                                self.RefreshCountSuper,
                                self.RefreshCountRob,
                                self.TreasureCount,
                                "...",
                                "...",
                                "...",
                                self.HelpAwardCount
                                self.HelpAwardCount,
                                self.HousekeeperEndTime
                                )
        return DumpString
@@ -52662,6 +55405,7 @@
    ZhanlingType = 0    #(BYTE ZhanlingType)// 战令类型
    IsActivite = 0    #(BYTE IsActivite)// 普通战令是否已激活
    IsActiviteH = 0    #(BYTE IsActiviteH)// 高级战令是否已激活
    AllFinishTime = 0    #(DWORD AllFinishTime)// 全部奖励领取完毕的时间戳,未完毕时该值为0,后端会在0点过天时检查可否重置,前端自行做倒计时表现即可
    Value1 = 0    #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳
    RewardCount = 0    #(WORD RewardCount)
    RewardList = list()    #(vector<tagMCZhanling> RewardList)
@@ -52679,6 +55423,7 @@
        self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AllFinishTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.RewardCount):
@@ -52695,6 +55440,7 @@
        self.ZhanlingType = 0
        self.IsActivite = 0
        self.IsActiviteH = 0
        self.AllFinishTime = 0
        self.Value1 = 0
        self.RewardCount = 0
        self.RewardList = list()
@@ -52706,6 +55452,7 @@
        length += 1
        length += 1
        length += 1
        length += 4
        length += 4
        length += 2
        for i in range(self.RewardCount):
@@ -52719,6 +55466,7 @@
        data = CommFunc.WriteBYTE(data, self.ZhanlingType)
        data = CommFunc.WriteBYTE(data, self.IsActivite)
        data = CommFunc.WriteBYTE(data, self.IsActiviteH)
        data = CommFunc.WriteDWORD(data, self.AllFinishTime)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteWORD(data, self.RewardCount)
        for i in range(self.RewardCount):
@@ -52731,6 +55479,7 @@
                                ZhanlingType:%d,
                                IsActivite:%d,
                                IsActiviteH:%d,
                                AllFinishTime:%d,
                                Value1:%d,
                                RewardCount:%d,
                                RewardList:%s
@@ -52740,6 +55489,7 @@
                                self.ZhanlingType,
                                self.IsActivite,
                                self.IsActiviteH,
                                self.AllFinishTime,
                                self.Value1,
                                self.RewardCount,
                                "..."
@@ -56621,6 +59371,189 @@
#------------------------------------------------------
# C1 10 仙盟攻城战玩家信息 #tagMCFamilyGCZPlayerInfo
class  tagMCFamilyGCZPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ContributionCnt", c_ubyte),    # 轮次低级捐献已捐献次数,轮次变更时会重置
                  ("Energy", c_ubyte),    # 当前可用免费体力
                  ("EnergyTime", c_int),    # 上次恢复免费体力时间戳,为0时不再恢复
                  ("AwardState", c_int),    # 活动奖励领取状态,按二进制位判断是否已领取,0-竞猜奖励;1-个人排行奖励;2-仙盟排名奖励;
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC1
        self.SubCmd = 0x10
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xC1
        self.SubCmd = 0x10
        self.ContributionCnt = 0
        self.Energy = 0
        self.EnergyTime = 0
        self.AwardState = 0
        return
    def GetLength(self):
        return sizeof(tagMCFamilyGCZPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 10 仙盟攻城战玩家信息 //tagMCFamilyGCZPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ContributionCnt:%d,
                                Energy:%d,
                                EnergyTime:%d,
                                AwardState:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ContributionCnt,
                                self.Energy,
                                self.EnergyTime,
                                self.AwardState
                                )
        return DumpString
m_NAtagMCFamilyGCZPlayerInfo=tagMCFamilyGCZPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZPlayerInfo.Cmd,m_NAtagMCFamilyGCZPlayerInfo.SubCmd))] = m_NAtagMCFamilyGCZPlayerInfo
#------------------------------------------------------
# C1 11 仙盟攻城战圣泉信息 #tagMCFamilyGCZSQInfo
class  tagMCFamilyGCZSQGrid(Structure):
    _pack_ = 1
    _fields_ = [
                  ("GridNum", c_ubyte),    # 格子编号,1~n
                  ("ItemID", c_int),    # 抽中的物品ID,20亿时为过关标记
                  ("ItemCount", c_ushort),    # 物品数量
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.GridNum = 0
        self.ItemID = 0
        self.ItemCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCFamilyGCZSQGrid)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 11 仙盟攻城战圣泉信息 //tagMCFamilyGCZSQInfo:
                                GridNum:%d,
                                ItemID:%d,
                                ItemCount:%d
                                '''\
                                %(
                                self.GridNum,
                                self.ItemID,
                                self.ItemCount
                                )
        return DumpString
class  tagMCFamilyGCZSQInfo(Structure):
    Head = tagHead()
    SQLayer = 0    #(BYTE SQLayer)// 当前所在圣泉层,从1开始
    SQGirdCnt = 0    #(BYTE SQGirdCnt)
    SQGridList = list()    #(vector<tagMCFamilyGCZSQGrid> SQGridList)//圣泉当前层已抽格子信息,仅同步全部或变更的格子,前端进行差异更新,层数变更时重置本地记录
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC1
        self.Head.SubCmd = 0x11
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.SQLayer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SQGirdCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SQGirdCnt):
            temSQGridList = tagMCFamilyGCZSQGrid()
            _pos = temSQGridList.ReadData(_lpData, _pos)
            self.SQGridList.append(temSQGridList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC1
        self.Head.SubCmd = 0x11
        self.SQLayer = 0
        self.SQGirdCnt = 0
        self.SQGridList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        for i in range(self.SQGirdCnt):
            length += self.SQGridList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.SQLayer)
        data = CommFunc.WriteBYTE(data, self.SQGirdCnt)
        for i in range(self.SQGirdCnt):
            data = CommFunc.WriteString(data, self.SQGridList[i].GetLength(), self.SQGridList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                SQLayer:%d,
                                SQGirdCnt:%d,
                                SQGridList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.SQLayer,
                                self.SQGirdCnt,
                                "..."
                                )
        return DumpString
m_NAtagMCFamilyGCZSQInfo=tagMCFamilyGCZSQInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZSQInfo.Head.Cmd,m_NAtagMCFamilyGCZSQInfo.Head.SubCmd))] = m_NAtagMCFamilyGCZSQInfo
#------------------------------------------------------
# C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo
class  tagMCLuckyCloudBuyPlayerInfo(Structure):