ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -424,6 +424,190 @@
#------------------------------------------------------
# A0 08 玩家记录信息 #tagGCPlayerRecInfo
class  tagGCPlayerRec(Structure):
    Time = 0    #(DWORD Time)//时间
    Value1 = 0    #(DWORD Value1)//ֵ1
    Value2 = 0    #(DWORD Value2)//ֵ2
    Value3 = 0    #(DWORD Value3)//ֵ3
    Value4 = 0    #(DWORD Value4)//ֵ4
    Value5 = 0    #(DWORD Value5)//ֵ5
    Value6 = 0    #(DWORD Value6)//ֵ6
    Value7 = 0    #(DWORD Value7)//ֵ7
    Value8 = 0    #(DWORD Value8)//ֵ8
    UserDataLen = 0    #(WORD UserDataLen)//扩展数据长度
    UserData = ""    #(String UserData)//扩展数据
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
        return _pos
    def Clear(self):
        self.Time = 0
        self.Value1 = 0
        self.Value2 = 0
        self.Value3 = 0
        self.Value4 = 0
        self.Value5 = 0
        self.Value6 = 0
        self.Value7 = 0
        self.Value8 = 0
        self.UserDataLen = 0
        self.UserData = ""
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 2
        length += len(self.UserData)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.Time)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteDWORD(data, self.Value2)
        data = CommFunc.WriteDWORD(data, self.Value3)
        data = CommFunc.WriteDWORD(data, self.Value4)
        data = CommFunc.WriteDWORD(data, self.Value5)
        data = CommFunc.WriteDWORD(data, self.Value6)
        data = CommFunc.WriteDWORD(data, self.Value7)
        data = CommFunc.WriteDWORD(data, self.Value8)
        data = CommFunc.WriteWORD(data, self.UserDataLen)
        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
        return data
    def OutputString(self):
        DumpString = '''
                                Time:%d,
                                Value1:%d,
                                Value2:%d,
                                Value3:%d,
                                Value4:%d,
                                Value5:%d,
                                Value6:%d,
                                Value7:%d,
                                Value8:%d,
                                UserDataLen:%d,
                                UserData:%s
                                '''\
                                %(
                                self.Time,
                                self.Value1,
                                self.Value2,
                                self.Value3,
                                self.Value4,
                                self.Value5,
                                self.Value6,
                                self.Value7,
                                self.Value8,
                                self.UserDataLen,
                                self.UserData
                                )
        return DumpString
class  tagGCPlayerRecInfo(Structure):
    Head = tagHead()
    Type = 0    #(BYTE Type)//类型
    Count = 0    #(WORD Count)//数量
    PlayerRecList = list()    #(vector<tagGCPlayerRec> PlayerRecList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x08
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temPlayerRecList = tagGCPlayerRec()
            _pos = temPlayerRecList.ReadData(_lpData, _pos)
            self.PlayerRecList.append(temPlayerRecList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x08
        self.Type = 0
        self.Count = 0
        self.PlayerRecList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 2
        for i in range(self.Count):
            length += self.PlayerRecList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Type)
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.PlayerRecList[i].GetLength(), self.PlayerRecList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Type:%d,
                                Count:%d,
                                PlayerRecList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Type,
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCPlayerRecInfo=tagGCPlayerRecInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerRecInfo.Head.Cmd,m_NAtagGCPlayerRecInfo.Head.SubCmd))] = m_NAtagGCPlayerRecInfo
#------------------------------------------------------
# A0 06 服务器地图线路人数状态 #tagGCPyServerMapState
class  tagGCPyServerMapLineState(Structure):
@@ -4451,9 +4635,17 @@
    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
    Value1 = 0    #(DWORD Value1)//排序依赖的值,比如,等级
    Value2 = 0    #(DWORD Value2)//排序依赖的值,比如,战斗力
    Value3 = 0    #(DWORD Value3)//附加值
    Value4 = 0    #(DWORD Value4)//附加值
    Value5 = 0    #(DWORD Value5)//附加值
    Value6 = 0    #(DWORD Value6)//附加值
    Value7 = 0    #(DWORD Value7)//附加值
    Value8 = 0    #(DWORD Value8)//附加值
    CmpValue = 0    #(DWORD CmpValue)// 比较权值
    CmpValue2 = 0    #(DWORD CmpValue2)// 比较权值
    CmpValue3 = 0    #(DWORD CmpValue3)// 比较权值
    DataLen = 0    #(WORD DataLen)
    UserData = ""    #(String UserData)//附加
    data = None
    def __init__(self):
@@ -4470,9 +4662,17 @@
        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
        return _pos
    def Clear(self):
@@ -4484,9 +4684,17 @@
        self.Type2 = 0
        self.Value1 = 0
        self.Value2 = 0
        self.Value3 = 0
        self.Value4 = 0
        self.Value5 = 0
        self.Value6 = 0
        self.Value7 = 0
        self.Value8 = 0
        self.CmpValue = 0
        self.CmpValue2 = 0
        self.CmpValue3 = 0
        self.DataLen = 0
        self.UserData = ""
        return
    def GetLength(self):
@@ -4502,6 +4710,14 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 2
        length += len(self.UserData)
        return length
@@ -4515,9 +4731,17 @@
        data = CommFunc.WriteBYTE(data, self.Type2)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteDWORD(data, self.Value2)
        data = CommFunc.WriteDWORD(data, self.Value3)
        data = CommFunc.WriteDWORD(data, self.Value4)
        data = CommFunc.WriteDWORD(data, self.Value5)
        data = CommFunc.WriteDWORD(data, self.Value6)
        data = CommFunc.WriteDWORD(data, self.Value7)
        data = CommFunc.WriteDWORD(data, self.Value8)
        data = CommFunc.WriteDWORD(data, self.CmpValue)
        data = CommFunc.WriteDWORD(data, self.CmpValue2)
        data = CommFunc.WriteDWORD(data, self.CmpValue3)
        data = CommFunc.WriteWORD(data, self.DataLen)
        data = CommFunc.WriteString(data, self.DataLen, self.UserData)
        return data
    def OutputString(self):
@@ -4530,9 +4754,17 @@
                                Type2:%d,
                                Value1:%d,
                                Value2:%d,
                                Value3:%d,
                                Value4:%d,
                                Value5:%d,
                                Value6:%d,
                                Value7:%d,
                                Value8:%d,
                                CmpValue:%d,
                                CmpValue2:%d,
                                CmpValue3:%d
                                CmpValue3:%d,
                                DataLen:%d,
                                UserData:%s
                                '''\
                                %(
                                self.OrderIndex,
@@ -4543,16 +4775,24 @@
                                self.Type2,
                                self.Value1,
                                self.Value2,
                                self.Value3,
                                self.Value4,
                                self.Value5,
                                self.Value6,
                                self.Value7,
                                self.Value8,
                                self.CmpValue,
                                self.CmpValue2,
                                self.CmpValue3
                                self.CmpValue3,
                                self.DataLen,
                                self.UserData
                                )
        return DumpString
class  tagPYBillboardData(Structure):
    Head = tagHead()
    IsWatchSelf = 0    #(BYTE IsWatchSelf)
    WatchID = 0    #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
    BillboardCount = 0    #(BYTE BillboardCount)
    Type = 0    #(BYTE Type)//排行榜类型
    Billboard = list()    #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount
@@ -4567,7 +4807,7 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.IsWatchSelf,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BillboardCount):
@@ -4581,7 +4821,7 @@
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA2
        self.IsWatchSelf = 0
        self.WatchID = 0
        self.BillboardCount = 0
        self.Type = 0
        self.Billboard = list()
@@ -4590,7 +4830,7 @@
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4
        length += 1
        length += 1
        for i in range(self.BillboardCount):
@@ -4601,7 +4841,7 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.IsWatchSelf)
        data = CommFunc.WriteDWORD(data, self.WatchID)
        data = CommFunc.WriteBYTE(data, self.BillboardCount)
        data = CommFunc.WriteBYTE(data, self.Type)
        for i in range(self.BillboardCount):
@@ -4611,14 +4851,14 @@
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                IsWatchSelf:%d,
                                WatchID:%d,
                                BillboardCount:%d,
                                Type:%d,
                                Billboard:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.IsWatchSelf,
                                self.WatchID,
                                self.BillboardCount,
                                self.Type,
                                "..."
@@ -7722,6 +7962,566 @@
#------------------------------------------------------
# B0 34 福地结算奖励信息 #tagGCMineAreaAwardInfo
class  tagGCMineAreaAwardInfo(Structure):
    Head = tagHead()
    AwardType = 0    #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知
    AwardLen = 0    #(BYTE AwardLen)
    AwardInfo = ""    #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...]
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x34
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x34
        self.AwardType = 0
        self.AwardLen = 0
        self.AwardInfo = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += len(self.AwardInfo)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.AwardType)
        data = CommFunc.WriteBYTE(data, self.AwardLen)
        data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                AwardType:%d,
                                AwardLen:%d,
                                AwardInfo:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.AwardType,
                                self.AwardLen,
                                self.AwardInfo
                                )
        return DumpString
m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo
#------------------------------------------------------
# B0 33 福地详细信息 #tagGCMineAreaInfo
class  tagGCMineItem(Structure):
    Index = 0    #(BYTE Index)// 矿物所在福地位置索引,0~n
    MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物
    MineType = 0    #(BYTE MineType)// 矿物类型:0-常规;1-超级
    UpdTime = 0    #(DWORD UpdTime)// 最后一次更新时间戳
    PosLen = 0    #(BYTE PosLen)
    Position = ""    #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒
    SpeedLen = 0    #(BYTE SpeedLen)
    MoveSpeed = ""    #(String MoveSpeed)// 移动速度,x格/秒,支持小数
    EndTime = 0    #(DWORD EndTime)// 拉取结束时间戳
    WorkerCount = 0    #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回
    RobPlayerID = 0    #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺
    RobWorkerCount = 0    #(BYTE RobWorkerCount)// 抢夺工人个数
    RobPlayerName = ""    #(char RobPlayerName[33])
    RobFace = 0    #(DWORD RobFace)
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen)
        self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen)
        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Index = 0
        self.MineID = 0
        self.MineType = 0
        self.UpdTime = 0
        self.PosLen = 0
        self.Position = ""
        self.SpeedLen = 0
        self.MoveSpeed = ""
        self.EndTime = 0
        self.WorkerCount = 0
        self.RobPlayerID = 0
        self.RobWorkerCount = 0
        self.RobPlayerName = ""
        self.RobFace = 0
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 2
        length += 1
        length += 4
        length += 1
        length += len(self.Position)
        length += 1
        length += len(self.MoveSpeed)
        length += 4
        length += 1
        length += 4
        length += 1
        length += 33
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.Index)
        data = CommFunc.WriteWORD(data, self.MineID)
        data = CommFunc.WriteBYTE(data, self.MineType)
        data = CommFunc.WriteDWORD(data, self.UpdTime)
        data = CommFunc.WriteBYTE(data, self.PosLen)
        data = CommFunc.WriteString(data, self.PosLen, self.Position)
        data = CommFunc.WriteBYTE(data, self.SpeedLen)
        data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed)
        data = CommFunc.WriteDWORD(data, self.EndTime)
        data = CommFunc.WriteBYTE(data, self.WorkerCount)
        data = CommFunc.WriteDWORD(data, self.RobPlayerID)
        data = CommFunc.WriteBYTE(data, self.RobWorkerCount)
        data = CommFunc.WriteString(data, 33, self.RobPlayerName)
        data = CommFunc.WriteDWORD(data, self.RobFace)
        return data
    def OutputString(self):
        DumpString = '''
                                Index:%d,
                                MineID:%d,
                                MineType:%d,
                                UpdTime:%d,
                                PosLen:%d,
                                Position:%s,
                                SpeedLen:%d,
                                MoveSpeed:%s,
                                EndTime:%d,
                                WorkerCount:%d,
                                RobPlayerID:%d,
                                RobWorkerCount:%d,
                                RobPlayerName:%s,
                                RobFace:%d
                                '''\
                                %(
                                self.Index,
                                self.MineID,
                                self.MineType,
                                self.UpdTime,
                                self.PosLen,
                                self.Position,
                                self.SpeedLen,
                                self.MoveSpeed,
                                self.EndTime,
                                self.WorkerCount,
                                self.RobPlayerID,
                                self.RobWorkerCount,
                                self.RobPlayerName,
                                self.RobFace
                                )
        return DumpString
class  tagGCMineArea(Structure):
    PlayerID = 0    #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人
    PlayerName = ""    #(char PlayerName[33])// 可能为空,如自己或假人
    Face = 0    #(DWORD Face)
    MineCount = 0    #(BYTE MineCount)
    MineItemList = list()    #(vector<tagGCMineItem> MineItemList)// 矿物列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MineCount):
            temMineItemList = tagGCMineItem()
            _pos = temMineItemList.ReadData(_lpData, _pos)
            self.MineItemList.append(temMineItemList)
        return _pos
    def Clear(self):
        self.PlayerID = 0
        self.PlayerName = ""
        self.Face = 0
        self.MineCount = 0
        self.MineItemList = list()
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 33
        length += 4
        length += 1
        for i in range(self.MineCount):
            length += self.MineItemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.PlayerName)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteBYTE(data, self.MineCount)
        for i in range(self.MineCount):
            data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerID:%d,
                                PlayerName:%s,
                                Face:%d,
                                MineCount:%d,
                                MineItemList:%s
                                '''\
                                %(
                                self.PlayerID,
                                self.PlayerName,
                                self.Face,
                                self.MineCount,
                                "..."
                                )
        return DumpString
class  tagGCMineAreaInfo(Structure):
    Head = tagHead()
    QueryType = 0    #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表
    QueryValue = 0    #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机
    AreaCount = 0    #(BYTE AreaCount)
    AreaList = list()    #(vector<tagGCMineArea> AreaList)// 福地列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x33
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AreaCount):
            temAreaList = tagGCMineArea()
            _pos = temAreaList.ReadData(_lpData, _pos)
            self.AreaList.append(temAreaList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x33
        self.QueryType = 0
        self.QueryValue = 0
        self.AreaCount = 0
        self.AreaList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4
        length += 1
        for i in range(self.AreaCount):
            length += self.AreaList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.QueryType)
        data = CommFunc.WriteDWORD(data, self.QueryValue)
        data = CommFunc.WriteBYTE(data, self.AreaCount)
        for i in range(self.AreaCount):
            data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                QueryType:%d,
                                QueryValue:%d,
                                AreaCount:%d,
                                AreaList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.QueryType,
                                self.QueryValue,
                                self.AreaCount,
                                "..."
                                )
        return DumpString
m_NAtagGCMineAreaInfo=tagGCMineAreaInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo
#------------------------------------------------------
# B0 35 福地记录信息 #tagGCMineAreaRecordInfo
class  tagGCMineAreaRecord(Structure):
    RecordType = 0    #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢
    TagPlayerID = 0    #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的
    RecordTime = 0    #(DWORD RecordTime)// 记录时间戳
    MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID
    TagPlayerName = ""    #(char TagPlayerName[33])
    TagFace = 0    #(DWORD TagFace)
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.RecordType = 0
        self.TagPlayerID = 0
        self.RecordTime = 0
        self.MineID = 0
        self.TagPlayerName = ""
        self.TagFace = 0
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 4
        length += 4
        length += 2
        length += 33
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.RecordType)
        data = CommFunc.WriteDWORD(data, self.TagPlayerID)
        data = CommFunc.WriteDWORD(data, self.RecordTime)
        data = CommFunc.WriteWORD(data, self.MineID)
        data = CommFunc.WriteString(data, 33, self.TagPlayerName)
        data = CommFunc.WriteDWORD(data, self.TagFace)
        return data
    def OutputString(self):
        DumpString = '''
                                RecordType:%d,
                                TagPlayerID:%d,
                                RecordTime:%d,
                                MineID:%d,
                                TagPlayerName:%s,
                                TagFace:%d
                                '''\
                                %(
                                self.RecordType,
                                self.TagPlayerID,
                                self.RecordTime,
                                self.MineID,
                                self.TagPlayerName,
                                self.TagFace
                                )
        return DumpString
class  tagGCMineAreaRecordInfo(Structure):
    Head = tagHead()
    RecordCount = 0    #(BYTE RecordCount)
    AreaRecordList = list()    #(vector<tagGCMineAreaRecord> AreaRecordList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x35
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.RecordCount):
            temAreaRecordList = tagGCMineAreaRecord()
            _pos = temAreaRecordList.ReadData(_lpData, _pos)
            self.AreaRecordList.append(temAreaRecordList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x35
        self.RecordCount = 0
        self.AreaRecordList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.RecordCount):
            length += self.AreaRecordList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.RecordCount)
        for i in range(self.RecordCount):
            data = CommFunc.WriteString(data, self.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                RecordCount:%d,
                                AreaRecordList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.RecordCount,
                                "..."
                                )
        return DumpString
m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo
#------------------------------------------------------
# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet
class  tagGCMineItemPullPreviewRet(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    # 福地所属玩家ID,0默认自己
                  ("ItemIndex", c_ubyte),    # 物品所在位置索引0~n
                  ("WorkerCount", c_ubyte),    # 上工人人数
                  ("NeedSeconds", c_int),    # 预计需要时间,秒
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        self.SubCmd = 0x32
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB0
        self.SubCmd = 0x32
        self.PlayerID = 0
        self.ItemIndex = 0
        self.WorkerCount = 0
        self.NeedSeconds = 0
        return
    def GetLength(self):
        return sizeof(tagGCMineItemPullPreviewRet)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet:
                                Cmd:%s,
                                SubCmd:%s,
                                PlayerID:%d,
                                ItemIndex:%d,
                                WorkerCount:%d,
                                NeedSeconds:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PlayerID,
                                self.ItemIndex,
                                self.WorkerCount,
                                self.NeedSeconds
                                )
        return DumpString
m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet
#------------------------------------------------------
# B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
class  tagGCAssistPlayerInfo(Structure):
@@ -7896,6 +8696,213 @@
m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
#------------------------------------------------------
# B0 20 膜拜信息列表 #tagGCWorshipInfoList
class  tagGCWorshipInfo(Structure):
    PlayerID = 0    #(DWORD PlayerID)// 目标玩家ID
    WorshipType = 0    #(BYTE WorshipType)// 膜拜类型
    WorshipValue = 0    #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
    InfoLen = 0    #(WORD InfoLen)
    PlayerInfo = ""    #(String PlayerInfo)// 玩家信息{k:v, ...}
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen)
        return _pos
    def Clear(self):
        self.PlayerID = 0
        self.WorshipType = 0
        self.WorshipValue = 0
        self.InfoLen = 0
        self.PlayerInfo = ""
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += 4
        length += 2
        length += len(self.PlayerInfo)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.WorshipType)
        data = CommFunc.WriteDWORD(data, self.WorshipValue)
        data = CommFunc.WriteWORD(data, self.InfoLen)
        data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerID:%d,
                                WorshipType:%d,
                                WorshipValue:%d,
                                InfoLen:%d,
                                PlayerInfo:%s
                                '''\
                                %(
                                self.PlayerID,
                                self.WorshipType,
                                self.WorshipValue,
                                self.InfoLen,
                                self.PlayerInfo
                                )
        return DumpString
class  tagGCWorshipInfoList(Structure):
    Head = tagHead()
    WorshipCount = 0    #(BYTE WorshipCount)
    WorshipInfoList = list()    #(vector<tagGCWorshipInfo> WorshipInfoList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x20
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.WorshipCount):
            temWorshipInfoList = tagGCWorshipInfo()
            _pos = temWorshipInfoList.ReadData(_lpData, _pos)
            self.WorshipInfoList.append(temWorshipInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x20
        self.WorshipCount = 0
        self.WorshipInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.WorshipCount):
            length += self.WorshipInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.WorshipCount)
        for i in range(self.WorshipCount):
            data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                WorshipCount:%d,
                                WorshipInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.WorshipCount,
                                "..."
                                )
        return DumpString
m_NAtagGCWorshipInfoList=tagGCWorshipInfoList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList
#------------------------------------------------------
# B0 21 膜拜结果 #tagGCWorshipResult
class  tagGCWorshipResult(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    # 目标玩家ID
                  ("WorshipType", c_ubyte),    # 膜拜类型
                  ("WorshipValue", c_int),    # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
                  ("Result", c_ubyte),    # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标;
                  ("MoneyType", c_ubyte),    # 货币类型
                  ("MoneyValue", c_int),    # 货币奖励
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB0
        self.SubCmd = 0x21
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB0
        self.SubCmd = 0x21
        self.PlayerID = 0
        self.WorshipType = 0
        self.WorshipValue = 0
        self.Result = 0
        self.MoneyType = 0
        self.MoneyValue = 0
        return
    def GetLength(self):
        return sizeof(tagGCWorshipResult)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult:
                                Cmd:%s,
                                SubCmd:%s,
                                PlayerID:%d,
                                WorshipType:%d,
                                WorshipValue:%d,
                                Result:%d,
                                MoneyType:%d,
                                MoneyValue:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.PlayerID,
                                self.WorshipType,
                                self.WorshipValue,
                                self.Result,
                                self.MoneyType,
                                self.MoneyValue
                                )
        return DumpString
m_NAtagGCWorshipResult=tagGCWorshipResult()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult
#------------------------------------------------------
@@ -14162,15 +15169,25 @@
# C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo
class  tagGCCrossBillboardData(Structure):
    OrderIndex = 0    #(WORD OrderIndex)//名次索引,0代表第一名
    ID = 0    #(DWORD ID)
    ID2 = 0    #(DWORD ID2)
    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
    Name2 = ""    #(char Name2[33])//名字2
    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
    Value1 = 0    #(DWORD Value1)//自定义值1
    Value2 = 0    #(DWORD Value2)//自定义值2
    Value3 = 0    #(DWORD Value3)//附加值
    Value4 = 0    #(DWORD Value4)//附加值
    Value5 = 0    #(DWORD Value5)//附加值
    Value6 = 0    #(DWORD Value6)//附加值
    Value7 = 0    #(DWORD Value7)//附加值
    Value8 = 0    #(DWORD Value8)//附加值
    CmpValue = 0    #(DWORD CmpValue)// 比较权值
    CmpValue2 = 0    #(DWORD CmpValue2)// 比较权值
    CmpValue3 = 0    #(DWORD CmpValue3)// 比较权值
    DataLen = 0    #(WORD DataLen)
    UserData = ""    #(String UserData)//附加
    data = None
    def __init__(self):
@@ -14179,31 +15196,53 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.OrderIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
        return _pos
    def Clear(self):
        self.OrderIndex = 0
        self.ID = 0
        self.ID2 = 0
        self.Name1 = ""
        self.Name2 = ""
        self.Type2 = 0
        self.Value1 = 0
        self.Value2 = 0
        self.Value3 = 0
        self.Value4 = 0
        self.Value5 = 0
        self.Value6 = 0
        self.Value7 = 0
        self.Value8 = 0
        self.CmpValue = 0
        self.CmpValue2 = 0
        self.CmpValue3 = 0
        self.DataLen = 0
        self.UserData = ""
        return
    def GetLength(self):
        length = 0
        length += 2
        length += 4
        length += 4
        length += 33
        length += 33
@@ -14213,44 +15252,82 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 2
        length += len(self.UserData)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteWORD(data, self.OrderIndex)
        data = CommFunc.WriteDWORD(data, self.ID)
        data = CommFunc.WriteDWORD(data, self.ID2)
        data = CommFunc.WriteString(data, 33, self.Name1)
        data = CommFunc.WriteString(data, 33, self.Name2)
        data = CommFunc.WriteBYTE(data, self.Type2)
        data = CommFunc.WriteDWORD(data, self.Value1)
        data = CommFunc.WriteDWORD(data, self.Value2)
        data = CommFunc.WriteDWORD(data, self.Value3)
        data = CommFunc.WriteDWORD(data, self.Value4)
        data = CommFunc.WriteDWORD(data, self.Value5)
        data = CommFunc.WriteDWORD(data, self.Value6)
        data = CommFunc.WriteDWORD(data, self.Value7)
        data = CommFunc.WriteDWORD(data, self.Value8)
        data = CommFunc.WriteDWORD(data, self.CmpValue)
        data = CommFunc.WriteDWORD(data, self.CmpValue2)
        data = CommFunc.WriteDWORD(data, self.CmpValue3)
        data = CommFunc.WriteWORD(data, self.DataLen)
        data = CommFunc.WriteString(data, self.DataLen, self.UserData)
        return data
    def OutputString(self):
        DumpString = '''
                                OrderIndex:%d,
                                ID:%d,
                                ID2:%d,
                                Name1:%s,
                                Name2:%s,
                                Type2:%d,
                                Value1:%d,
                                Value2:%d,
                                Value3:%d,
                                Value4:%d,
                                Value5:%d,
                                Value6:%d,
                                Value7:%d,
                                Value8:%d,
                                CmpValue:%d,
                                CmpValue2:%d,
                                CmpValue3:%d
                                CmpValue3:%d,
                                DataLen:%d,
                                UserData:%s
                                '''\
                                %(
                                self.OrderIndex,
                                self.ID,
                                self.ID2,
                                self.Name1,
                                self.Name2,
                                self.Type2,
                                self.Value1,
                                self.Value2,
                                self.Value3,
                                self.Value4,
                                self.Value5,
                                self.Value6,
                                self.Value7,
                                self.Value8,
                                self.CmpValue,
                                self.CmpValue2,
                                self.CmpValue3
                                self.CmpValue3,
                                self.DataLen,
                                self.UserData
                                )
        return DumpString
@@ -14260,6 +15337,7 @@
    Type = 0    #(BYTE Type)//榜单类型
    GroupValue1 = 0    #(BYTE GroupValue1)// 分组值1
    GroupValue2 = 0    #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据
    WatchID = 0    #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等
    BillboardCount = 0    #(BYTE BillboardCount)
    CrossBillboardDataList = list()    #(vector<tagGCCrossBillboardData> CrossBillboardDataList)
    data = None
@@ -14276,6 +15354,7 @@
        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BillboardCount):
            temCrossBillboardDataList = tagGCCrossBillboardData()
@@ -14291,6 +15370,7 @@
        self.Type = 0
        self.GroupValue1 = 0
        self.GroupValue2 = 0
        self.WatchID = 0
        self.BillboardCount = 0
        self.CrossBillboardDataList = list()
        return
@@ -14301,6 +15381,7 @@
        length += 1
        length += 1
        length += 1
        length += 4
        length += 1
        for i in range(self.BillboardCount):
            length += self.CrossBillboardDataList[i].GetLength()
@@ -14313,6 +15394,7 @@
        data = CommFunc.WriteBYTE(data, self.Type)
        data = CommFunc.WriteBYTE(data, self.GroupValue1)
        data = CommFunc.WriteBYTE(data, self.GroupValue2)
        data = CommFunc.WriteDWORD(data, self.WatchID)
        data = CommFunc.WriteBYTE(data, self.BillboardCount)
        for i in range(self.BillboardCount):
            data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer())
@@ -14324,6 +15406,7 @@
                                Type:%d,
                                GroupValue1:%d,
                                GroupValue2:%d,
                                WatchID:%d,
                                BillboardCount:%d,
                                CrossBillboardDataList:%s
                                '''\
@@ -14332,6 +15415,7 @@
                                self.Type,
                                self.GroupValue1,
                                self.GroupValue2,
                                self.WatchID,
                                self.BillboardCount,
                                "..."
                                )
@@ -23287,6 +24371,7 @@
    PassGradeCnt = 0    #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID
    PassGrade = list()    #(vector<DWORD> PassGrade)//副本线路对应星级值列表
    EnterCntTotal = 0    #(DWORD EnterCntTotal)//累计进入次数
    PassLineID = 0    #(DWORD PassLineID)//已过关到的lineID
    data = None
    def __init__(self):
@@ -23304,6 +24389,7 @@
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.PassGrade.append(value)
        self.EnterCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PassLineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -23314,6 +24400,7 @@
        self.PassGradeCnt = 0
        self.PassGrade = list()
        self.EnterCntTotal = 0
        self.PassLineID = 0
        return
    def GetLength(self):
@@ -23324,6 +24411,7 @@
        length += 2
        length += 1
        length += 4 * self.PassGradeCnt
        length += 4
        length += 4
        return length
@@ -23338,6 +24426,7 @@
        for i in range(self.PassGradeCnt):
            data = CommFunc.WriteDWORD(data, self.PassGrade[i])
        data = CommFunc.WriteDWORD(data, self.EnterCntTotal)
        data = CommFunc.WriteDWORD(data, self.PassLineID)
        return data
    def OutputString(self):
@@ -23348,7 +24437,8 @@
                                ItemAddCnt:%d,
                                PassGradeCnt:%d,
                                PassGrade:%s,
                                EnterCntTotal:%d
                                EnterCntTotal:%d,
                                PassLineID:%d
                                '''\
                                %(
                                self.FBID,
@@ -23357,7 +24447,8 @@
                                self.ItemAddCnt,
                                self.PassGradeCnt,
                                "...",
                                self.EnterCntTotal
                                self.EnterCntTotal,
                                self.PassLineID
                                )
        return DumpString
@@ -29521,7 +30612,7 @@
class  tagRefreshType(Structure):
    _pack_ = 1
    _fields_ = [
                  ("RefreshType", c_ubyte),
                  ("RefreshType", c_ushort),
                  ("Value", c_int),    
                  ("ValueEx", c_int),    
                  ]
@@ -30702,7 +31793,9 @@
class  tagMCActBossTrialBillard(Structure):
    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表
    AwardItemList = list()    #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励
    MemCount = 0    #(BYTE MemCount)// 成员奖励物品数
    MemAwardItemList = list()    #(vector<tagMCActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效
    data = None
    def __init__(self):
@@ -30717,12 +31810,19 @@
            temAwardItemList = tagMCActBossTrialItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MemCount):
            temMemAwardItemList = tagMCActBossTrialItem()
            _pos = temMemAwardItemList.ReadData(_lpData, _pos)
            self.MemAwardItemList.append(temMemAwardItemList)
        return _pos
    def Clear(self):
        self.Rank = 0
        self.Count = 0
        self.AwardItemList = list()
        self.MemCount = 0
        self.MemAwardItemList = list()
        return
    def GetLength(self):
@@ -30731,6 +31831,9 @@
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        length += 1
        for i in range(self.MemCount):
            length += self.MemAwardItemList[i].GetLength()
        return length
@@ -30740,17 +31843,24 @@
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.MemCount)
        for i in range(self.MemCount):
            data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Rank:%d,
                                Count:%d,
                                AwardItemList:%s
                                AwardItemList:%s,
                                MemCount:%d,
                                MemAwardItemList:%s
                                '''\
                                %(
                                self.Rank,
                                self.Count,
                                "...",
                                self.MemCount,
                                "..."
                                )
        return DumpString
@@ -30825,13 +31935,19 @@
    ActNum = 0    #(BYTE ActNum)// 活动编号
    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
    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    ShopType = 0    #(WORD ShopType)// 开放商店类型,可能为0不开放
    SubResetType = 0    #(BYTE SubResetType)// 提交凭证奖励重置类型,0-跟随活动; 1-0点重置;2-5点重置
    SubmitCount = 0    #(BYTE SubmitCount)
    SubmitInfoList = list()    #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表
    BillardCount = 0    #(BYTE BillardCount)
    BillboardInfoList = list()    #(vector<tagMCActBossTrialBillard> BillboardInfoList)// 榜单信息列表
    PersonalBillCount = 0    #(BYTE PersonalBillCount)
    PersonalBillboardInfoList = list()    #(vector<tagMCActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
    FamilyBillCount = 0    #(BYTE FamilyBillCount)
    FamilyBillboardInfoList = list()    #(vector<tagMCActBossTrialBillard> FamilyBillboardInfoList)// 仙盟榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
    data = None
    def __init__(self):
@@ -30846,19 +31962,28 @@
        self.ActNum,_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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.SubResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SubmitCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SubmitCount):
            temSubmitInfoList = tagMCActBossTrialSubmitInfo()
            _pos = temSubmitInfoList.ReadData(_lpData, _pos)
            self.SubmitInfoList.append(temSubmitInfoList)
        self.BillardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BillardCount):
            temBillboardInfoList = tagMCActBossTrialBillard()
            _pos = temBillboardInfoList.ReadData(_lpData, _pos)
            self.BillboardInfoList.append(temBillboardInfoList)
        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PersonalBillCount):
            temPersonalBillboardInfoList = tagMCActBossTrialBillard()
            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
        self.FamilyBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FamilyBillCount):
            temFamilyBillboardInfoList = tagMCActBossTrialBillard()
            _pos = temFamilyBillboardInfoList.ReadData(_lpData, _pos)
            self.FamilyBillboardInfoList.append(temFamilyBillboardInfoList)
        return _pos
    def Clear(self):
@@ -30869,13 +31994,19 @@
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.JoinStartTime = ""
        self.JoinEndTime = ""
        self.IsDayReset = 0
        self.ResetType = 0
        self.LimitLV = 0
        self.ShopType = 0
        self.SubResetType = 0
        self.SubmitCount = 0
        self.SubmitInfoList = list()
        self.BillardCount = 0
        self.BillboardInfoList = list()
        self.PersonalBillCount = 0
        self.PersonalBillboardInfoList = list()
        self.FamilyBillCount = 0
        self.FamilyBillboardInfoList = list()
        return
    def GetLength(self):
@@ -30884,15 +32015,22 @@
        length += 1
        length += 10
        length += 10
        length += 5
        length += 5
        length += 1
        length += 1
        length += 2
        length += 2
        length += 1
        length += 1
        for i in range(self.SubmitCount):
            length += self.SubmitInfoList[i].GetLength()
        length += 1
        for i in range(self.BillardCount):
            length += self.BillboardInfoList[i].GetLength()
        for i in range(self.PersonalBillCount):
            length += self.PersonalBillboardInfoList[i].GetLength()
        length += 1
        for i in range(self.FamilyBillCount):
            length += self.FamilyBillboardInfoList[i].GetLength()
        return length
@@ -30902,15 +32040,22 @@
        data = CommFunc.WriteBYTE(data, self.ActNum)
        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.WriteBYTE(data, self.IsDayReset)
        data = CommFunc.WriteBYTE(data, self.ResetType)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteWORD(data, self.ShopType)
        data = CommFunc.WriteBYTE(data, self.SubResetType)
        data = CommFunc.WriteBYTE(data, self.SubmitCount)
        for i in range(self.SubmitCount):
            data = CommFunc.WriteString(data, self.SubmitInfoList[i].GetLength(), self.SubmitInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.BillardCount)
        for i in range(self.BillardCount):
            data = CommFunc.WriteString(data, self.BillboardInfoList[i].GetLength(), self.BillboardInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
        for i in range(self.PersonalBillCount):
            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.FamilyBillCount)
        for i in range(self.FamilyBillCount):
            data = CommFunc.WriteString(data, self.FamilyBillboardInfoList[i].GetLength(), self.FamilyBillboardInfoList[i].GetBuffer())
        return data
    def OutputString(self):
@@ -30919,25 +32064,37 @@
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                JoinStartTime:%s,
                                JoinEndTime:%s,
                                IsDayReset:%d,
                                ResetType:%d,
                                LimitLV:%d,
                                ShopType:%d,
                                SubResetType:%d,
                                SubmitCount:%d,
                                SubmitInfoList:%s,
                                BillardCount:%d,
                                BillboardInfoList:%s
                                PersonalBillCount:%d,
                                PersonalBillboardInfoList:%s,
                                FamilyBillCount:%d,
                                FamilyBillboardInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.JoinStartTime,
                                self.JoinEndTime,
                                self.IsDayReset,
                                self.ResetType,
                                self.LimitLV,
                                self.ShopType,
                                self.SubResetType,
                                self.SubmitCount,
                                "...",
                                self.BillardCount,
                                self.PersonalBillCount,
                                "...",
                                self.FamilyBillCount,
                                "..."
                                )
        return DumpString
@@ -30956,8 +32113,9 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("SubmitCount", c_ushort),    # 已提交凭证个数
                  ("SubmitCountAward", c_int),    # 提交凭证奖励领奖状态
                  ("SubmitCount", c_int),    # 已提交凭证个数,总个数
                  ("SubmitAwardCount", c_int),    # 已提交凭证个数,关联提交奖励的个数,领奖使用该个数判断
                  ("SubmitAwardState", c_int),    # 提交凭证奖励领奖状态
                  ]
    def __init__(self):
@@ -30976,7 +32134,8 @@
        self.SubCmd = 0x68
        self.ActNum = 0
        self.SubmitCount = 0
        self.SubmitCountAward = 0
        self.SubmitAwardCount = 0
        self.SubmitAwardState = 0
        return
    def GetLength(self):
@@ -30991,14 +32150,16 @@
                                SubCmd:%s,
                                ActNum:%d,
                                SubmitCount:%d,
                                SubmitCountAward:%d
                                SubmitAwardCount:%d,
                                SubmitAwardState:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.SubmitCount,
                                self.SubmitCountAward
                                self.SubmitAwardCount,
                                self.SubmitAwardState
                                )
        return DumpString
@@ -32019,6 +33180,273 @@
m_NAtagMCActCollectWordsPlayerInfo=tagMCActCollectWordsPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsPlayerInfo.Head.Cmd,m_NAtagMCActCollectWordsPlayerInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsPlayerInfo
#------------------------------------------------------
# AA 77 仙盟充值互助活动信息 #tagMCActFamilyCTGAssistInfo
class  tagMCActFamilyCTGAssistItem(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(tagMCActFamilyCTGAssistItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 77 仙盟充值互助活动信息 //tagMCActFamilyCTGAssistInfo:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagMCActFamilyCTGAssistAward(Structure):
    NeedCTGPlayers = 0    #(BYTE NeedCTGPlayers)//所需充值人数
    RecordIndex = 0    #(BYTE RecordIndex)//对应领奖记录索引
    Count = 0    #(BYTE Count)
    AwardItemList = list()    #(vector<tagMCActFamilyCTGAssistItem> AwardItemList)// 奖励物品列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.NeedCTGPlayers,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temAwardItemList = tagMCActFamilyCTGAssistItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        return _pos
    def Clear(self):
        self.NeedCTGPlayers = 0
        self.RecordIndex = 0
        self.Count = 0
        self.AwardItemList = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 1
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.NeedCTGPlayers)
        data = CommFunc.WriteBYTE(data, self.RecordIndex)
        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 = '''
                                NeedCTGPlayers:%d,
                                RecordIndex:%d,
                                Count:%d,
                                AwardItemList:%s
                                '''\
                                %(
                                self.NeedCTGPlayers,
                                self.RecordIndex,
                                self.Count,
                                "..."
                                )
        return DumpString
class  tagMCActFamilyCTGAssistInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)//活动编号
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    IsDayReset = 0    #(BYTE IsDayReset)//是否每天重置
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    AwardCount = 0    #(BYTE AwardCount)
    AwardInfoList = list()    #(vector<tagMCActFamilyCTGAssistAward> AwardInfoList)// 互助奖励列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x77
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardCount):
            temAwardInfoList = tagMCActFamilyCTGAssistAward()
            _pos = temAwardInfoList.ReadData(_lpData, _pos)
            self.AwardInfoList.append(temAwardInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x77
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.IsDayReset = 0
        self.LimitLV = 0
        self.AwardCount = 0
        self.AwardInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 1
        length += 2
        length += 1
        for i in range(self.AwardCount):
            length += self.AwardInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteBYTE(data, self.IsDayReset)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.AwardCount)
        for i in range(self.AwardCount):
            data = CommFunc.WriteString(data, self.AwardInfoList[i].GetLength(), self.AwardInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                IsDayReset:%d,
                                LimitLV:%d,
                                AwardCount:%d,
                                AwardInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.IsDayReset,
                                self.LimitLV,
                                self.AwardCount,
                                "..."
                                )
        return DumpString
m_NAtagMCActFamilyCTGAssistInfo=tagMCActFamilyCTGAssistInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActFamilyCTGAssistInfo.Head.Cmd,m_NAtagMCActFamilyCTGAssistInfo.Head.SubCmd))] = m_NAtagMCActFamilyCTGAssistInfo
#------------------------------------------------------
# AA 78 仙盟充值互助活动玩家信息 #tagMCActFamilyCTGAssistPlayerInfo
class  tagMCActFamilyCTGAssistPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("AwardRecord", c_int),    # 奖励记录,按奖励记录索引位运算判断是否已领取
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        self.SubCmd = 0x78
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xAA
        self.SubCmd = 0x78
        self.ActNum = 0
        self.AwardRecord = 0
        return
    def GetLength(self):
        return sizeof(tagMCActFamilyCTGAssistPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 78 仙盟充值互助活动玩家信息 //tagMCActFamilyCTGAssistPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                AwardRecord:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.AwardRecord
                                )
        return DumpString
m_NAtagMCActFamilyCTGAssistPlayerInfo=tagMCActFamilyCTGAssistPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActFamilyCTGAssistPlayerInfo.Cmd,m_NAtagMCActFamilyCTGAssistPlayerInfo.SubCmd))] = m_NAtagMCActFamilyCTGAssistPlayerInfo
#------------------------------------------------------
@@ -37767,6 +39195,290 @@
#------------------------------------------------------
# AA 76 Boss历练跨服活动信息 #tagMCCrossActBossTrialInfo
class  tagMCCrossActBossTrialItem(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(tagMCCrossActBossTrialItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 76 Boss历练跨服活动信息 //tagMCCrossActBossTrialInfo:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagMCCrossActBossTrialBillard(Structure):
    Rank = 0    #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励
    MemCount = 0    #(BYTE MemCount)// 成员奖励物品数
    MemAwardItemList = list()    #(vector<tagMCCrossActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效
    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 = tagMCCrossActBossTrialItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MemCount):
            temMemAwardItemList = tagMCCrossActBossTrialItem()
            _pos = temMemAwardItemList.ReadData(_lpData, _pos)
            self.MemAwardItemList.append(temMemAwardItemList)
        return _pos
    def Clear(self):
        self.Rank = 0
        self.Count = 0
        self.AwardItemList = list()
        self.MemCount = 0
        self.MemAwardItemList = list()
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        length += 1
        for i in range(self.MemCount):
            length += self.MemAwardItemList[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.WriteBYTE(data, self.MemCount)
        for i in range(self.MemCount):
            data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Rank:%d,
                                Count:%d,
                                AwardItemList:%s,
                                MemCount:%d,
                                MemAwardItemList:%s
                                '''\
                                %(
                                self.Rank,
                                self.Count,
                                "...",
                                self.MemCount,
                                "..."
                                )
        return DumpString
class  tagMCCrossActBossTrialInfo(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
    IsDayReset = 0    #(BYTE IsDayReset)// 是否每天重置
    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
    RankLimitPersonal = 0    #(WORD RankLimitPersonal)// 个人榜上榜个数保底限制;
    RankLimitFamily = 0    #(WORD RankLimitFamily)// 仙盟榜上榜个数保底限制;
    PersonalBillCount = 0    #(BYTE PersonalBillCount)
    PersonalBillboardInfoList = list()    #(vector<tagMCCrossActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
    FamilyBillCount = 0    #(BYTE FamilyBillCount)
    FamilyBillboardInfoList = list()    #(vector<tagMCCrossActBossTrialBillard> FamilyBillboardInfoList)// 仙盟榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x76
        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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RankLimitFamily,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PersonalBillCount):
            temPersonalBillboardInfoList = tagMCCrossActBossTrialBillard()
            _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos)
            self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList)
        self.FamilyBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FamilyBillCount):
            temFamilyBillboardInfoList = tagMCCrossActBossTrialBillard()
            _pos = temFamilyBillboardInfoList.ReadData(_lpData, _pos)
            self.FamilyBillboardInfoList.append(temFamilyBillboardInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x76
        self.ServerInfoLen = 0
        self.ServerIDRangeInfo = ""
        self.GroupValue1 = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.JoinStartTime = ""
        self.JoinEndTime = ""
        self.IsDayReset = 0
        self.ResetType = 0
        self.RankLimitPersonal = 0
        self.RankLimitFamily = 0
        self.PersonalBillCount = 0
        self.PersonalBillboardInfoList = list()
        self.FamilyBillCount = 0
        self.FamilyBillboardInfoList = 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 += 1
        length += 1
        length += 2
        length += 2
        length += 1
        for i in range(self.PersonalBillCount):
            length += self.PersonalBillboardInfoList[i].GetLength()
        length += 1
        for i in range(self.FamilyBillCount):
            length += self.FamilyBillboardInfoList[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.WriteBYTE(data, self.IsDayReset)
        data = CommFunc.WriteBYTE(data, self.ResetType)
        data = CommFunc.WriteWORD(data, self.RankLimitPersonal)
        data = CommFunc.WriteWORD(data, self.RankLimitFamily)
        data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
        for i in range(self.PersonalBillCount):
            data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.FamilyBillCount)
        for i in range(self.FamilyBillCount):
            data = CommFunc.WriteString(data, self.FamilyBillboardInfoList[i].GetLength(), self.FamilyBillboardInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ServerInfoLen:%d,
                                ServerIDRangeInfo:%s,
                                GroupValue1:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                JoinStartTime:%s,
                                JoinEndTime:%s,
                                IsDayReset:%d,
                                ResetType:%d,
                                RankLimitPersonal:%d,
                                RankLimitFamily:%d,
                                PersonalBillCount:%d,
                                PersonalBillboardInfoList:%s,
                                FamilyBillCount:%d,
                                FamilyBillboardInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ServerInfoLen,
                                self.ServerIDRangeInfo,
                                self.GroupValue1,
                                self.StartDate,
                                self.EndtDate,
                                self.JoinStartTime,
                                self.JoinEndTime,
                                self.IsDayReset,
                                self.ResetType,
                                self.RankLimitPersonal,
                                self.RankLimitFamily,
                                self.PersonalBillCount,
                                "...",
                                self.FamilyBillCount,
                                "..."
                                )
        return DumpString
m_NAtagMCCrossActBossTrialInfo=tagMCCrossActBossTrialInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActBossTrialInfo.Head.Cmd,m_NAtagMCCrossActBossTrialInfo.Head.SubCmd))] = m_NAtagMCCrossActBossTrialInfo
#------------------------------------------------------
# AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo
class  tagMCDailyGiftbagItem(Structure):
@@ -37816,6 +39528,7 @@
    RMB = 0    #(DWORD RMB)//所需RMB,元
    GiftItemCount = 0    #(BYTE GiftItemCount)// 礼包物品数
    ItemInfo = list()    #(vector<tagMCDailyGiftbagItem> ItemInfo)// 物品信息
    Discount = 0    #(WORD Discount)// 折扣力度百分比
    data = None
    def __init__(self):
@@ -37834,6 +39547,7 @@
            temItemInfo = tagMCDailyGiftbagItem()
            _pos = temItemInfo.ReadData(_lpData, _pos)
            self.ItemInfo.append(temItemInfo)
        self.Discount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -37844,6 +39558,7 @@
        self.RMB = 0
        self.GiftItemCount = 0
        self.ItemInfo = list()
        self.Discount = 0
        return
    def GetLength(self):
@@ -37856,6 +39571,7 @@
        length += 1
        for i in range(self.GiftItemCount):
            length += self.ItemInfo[i].GetLength()
        length += 2
        return length
@@ -37869,6 +39585,7 @@
        data = CommFunc.WriteBYTE(data, self.GiftItemCount)
        for i in range(self.GiftItemCount):
            data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
        data = CommFunc.WriteWORD(data, self.Discount)
        return data
    def OutputString(self):
@@ -37879,7 +39596,8 @@
                                BuyCountLimit:%d,
                                RMB:%d,
                                GiftItemCount:%d,
                                ItemInfo:%s
                                ItemInfo:%s,
                                Discount:%d
                                '''\
                                %(
                                self.GiftID,
@@ -37888,7 +39606,8 @@
                                self.BuyCountLimit,
                                self.RMB,
                                self.GiftItemCount,
                                "..."
                                "...",
                                self.Discount
                                )
        return DumpString
@@ -44010,6 +45729,128 @@
#------------------------------------------------------
# B0 30 玩家福地相关信息 #tagMCPlayerMineAreaInfo
class  tagMCPlayerMineAreaInfo(Structure):
    Head = tagHead()
    WorkerCount = 0    #(BYTE WorkerCount)// 已雇佣工人数
    EnergyUsed = 0    #(WORD EnergyUsed)// 今日已消耗体力
    RefreshCount = 0    #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新
    RefreshCountSuper = 0    #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新
    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)// 今日已帮助别人奖励次数
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x30
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TreasureCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.TreasureState.append(value)
        for i in range(self.TreasureCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.TreasureAward.append(value)
        for i in range(self.TreasureCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.TreasureProgress.append(value)
        self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB0
        self.Head.SubCmd = 0x30
        self.WorkerCount = 0
        self.EnergyUsed = 0
        self.RefreshCount = 0
        self.RefreshCountSuper = 0
        self.TreasureCount = 0
        self.TreasureState = list()
        self.TreasureAward = list()
        self.TreasureProgress = list()
        self.HelpAwardCount = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 2
        length += 4
        length += 1
        length += 1
        length += 1 * self.TreasureCount
        length += 1 * self.TreasureCount
        length += 1 * self.TreasureCount
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.WorkerCount)
        data = CommFunc.WriteWORD(data, self.EnergyUsed)
        data = CommFunc.WriteDWORD(data, self.RefreshCount)
        data = CommFunc.WriteBYTE(data, self.RefreshCountSuper)
        data = CommFunc.WriteBYTE(data, self.TreasureCount)
        for i in range(self.TreasureCount):
            data = CommFunc.WriteBYTE(data, self.TreasureState[i])
        for i in range(self.TreasureCount):
            data = CommFunc.WriteBYTE(data, self.TreasureAward[i])
        for i in range(self.TreasureCount):
            data = CommFunc.WriteBYTE(data, self.TreasureProgress[i])
        data = CommFunc.WriteBYTE(data, self.HelpAwardCount)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                WorkerCount:%d,
                                EnergyUsed:%d,
                                RefreshCount:%d,
                                RefreshCountSuper:%d,
                                TreasureCount:%d,
                                TreasureState:%s,
                                TreasureAward:%s,
                                TreasureProgress:%s,
                                HelpAwardCount:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.WorkerCount,
                                self.EnergyUsed,
                                self.RefreshCount,
                                self.RefreshCountSuper,
                                self.TreasureCount,
                                "...",
                                "...",
                                "...",
                                self.HelpAwardCount
                                )
        return DumpString
m_NAtagMCPlayerMineAreaInfo=tagMCPlayerMineAreaInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerMineAreaInfo.Head.Cmd,m_NAtagMCPlayerMineAreaInfo.Head.SubCmd))] = m_NAtagMCPlayerMineAreaInfo
#------------------------------------------------------
# B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo
class  tagMCTodayAssistMoneyInfo(Structure):
@@ -44297,6 +46138,207 @@
m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList
#------------------------------------------------------
# B1 09 玩家挂机系统信息 #tagMCGuajiInfo
class  tagMCGuajiMoney(Structure):
    _pack_ = 1
    _fields_ = [
                  ("MoneyType", c_ubyte),
                  ("MoneyValue", c_int),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.MoneyType = 0
        self.MoneyValue = 0
        return
    def GetLength(self):
        return sizeof(tagMCGuajiMoney)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B1 09 玩家挂机系统信息 //tagMCGuajiInfo:
                                MoneyType:%d,
                                MoneyValue:%d
                                '''\
                                %(
                                self.MoneyType,
                                self.MoneyValue
                                )
        return DumpString
class  tagMCGuajiItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Count", 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.ItemID = 0
        self.Count = 0
        return
    def GetLength(self):
        return sizeof(tagMCGuajiItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B1 09 玩家挂机系统信息 //tagMCGuajiInfo:
                                ItemID:%d,
                                Count:%d
                                '''\
                                %(
                                self.ItemID,
                                self.Count
                                )
        return DumpString
class  tagMCGuajiInfo(Structure):
    Head = tagHead()
    QuickAwardCount = 0    #(BYTE QuickAwardCount)// 今日已快速挂机收益次数
    AwardType = 0    #(BYTE AwardType)// 收益类型: 0-已累计预览;1-领取结算结果(包含常规领取跟快速领取)
    AwardSeconds = 0    #(DWORD AwardSeconds)// 已累计收益时长,秒
    Exp = 0    #(DWORD Exp)// 已累计经验,求余亿部分
    ExpPoint = 0    #(DWORD ExpPoint)// 已累计经验,整除亿部分
    MoneyLen = 0    #(BYTE MoneyLen)
    MoneyList = list()    #(vector<tagMCGuajiMoney> MoneyList)// 已累计货币
    ItemLen = 0    #(BYTE ItemLen)
    ItemList = list()    #(vector<tagMCGuajiItem> ItemList)// 已累计物品
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x09
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.QuickAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardSeconds,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MoneyLen):
            temMoneyList = tagMCGuajiMoney()
            _pos = temMoneyList.ReadData(_lpData, _pos)
            self.MoneyList.append(temMoneyList)
        self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ItemLen):
            temItemList = tagMCGuajiItem()
            _pos = temItemList.ReadData(_lpData, _pos)
            self.ItemList.append(temItemList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x09
        self.QuickAwardCount = 0
        self.AwardType = 0
        self.AwardSeconds = 0
        self.Exp = 0
        self.ExpPoint = 0
        self.MoneyLen = 0
        self.MoneyList = list()
        self.ItemLen = 0
        self.ItemList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        for i in range(self.MoneyLen):
            length += self.MoneyList[i].GetLength()
        length += 1
        for i in range(self.ItemLen):
            length += self.ItemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.QuickAwardCount)
        data = CommFunc.WriteBYTE(data, self.AwardType)
        data = CommFunc.WriteDWORD(data, self.AwardSeconds)
        data = CommFunc.WriteDWORD(data, self.Exp)
        data = CommFunc.WriteDWORD(data, self.ExpPoint)
        data = CommFunc.WriteBYTE(data, self.MoneyLen)
        for i in range(self.MoneyLen):
            data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ItemLen)
        for i in range(self.ItemLen):
            data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                QuickAwardCount:%d,
                                AwardType:%d,
                                AwardSeconds:%d,
                                Exp:%d,
                                ExpPoint:%d,
                                MoneyLen:%d,
                                MoneyList:%s,
                                ItemLen:%d,
                                ItemList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.QuickAwardCount,
                                self.AwardType,
                                self.AwardSeconds,
                                self.Exp,
                                self.ExpPoint,
                                self.MoneyLen,
                                "...",
                                self.ItemLen,
                                "..."
                                )
        return DumpString
m_NAtagMCGuajiInfo=tagMCGuajiInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuajiInfo.Head.Cmd,m_NAtagMCGuajiInfo.Head.SubCmd))] = m_NAtagMCGuajiInfo
#------------------------------------------------------
@@ -48255,6 +50297,119 @@
#------------------------------------------------------
# B4 20 回合制战斗状态 #tagMCTurnFightState
class  tagMCTurnFightState(Structure):
    Head = tagHead()
    MapID = 0    #(DWORD MapID)// 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等)
    FuncLineID = 0    #(WORD FuncLineID)
    TagType = 0    #(BYTE TagType)// 战斗目标类型,0-NPC,1-玩家,2-队伍
    TagID = 0    #(DWORD TagID)// 战斗目标类型对应的ID
    State = 0    #(BYTE State)// 0-起始状态标记;1-准备完毕;2-战斗中;3-战斗结束;4-结算奖励;5-结束状态标记
    TurnNum = 0    #(BYTE TurnNum)// 当前轮次
    TurnMax = 0    #(BYTE TurnMax)// 最大轮次
    Len = 0    #(WORD Len)
    Msg = ""    #(String Msg)//size = Len
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB4
        self.Head.SubCmd = 0x20
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TagType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TagID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TurnNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TurnMax,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB4
        self.Head.SubCmd = 0x20
        self.MapID = 0
        self.FuncLineID = 0
        self.TagType = 0
        self.TagID = 0
        self.State = 0
        self.TurnNum = 0
        self.TurnMax = 0
        self.Len = 0
        self.Msg = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 2
        length += 1
        length += 4
        length += 1
        length += 1
        length += 1
        length += 2
        length += len(self.Msg)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.MapID)
        data = CommFunc.WriteWORD(data, self.FuncLineID)
        data = CommFunc.WriteBYTE(data, self.TagType)
        data = CommFunc.WriteDWORD(data, self.TagID)
        data = CommFunc.WriteBYTE(data, self.State)
        data = CommFunc.WriteBYTE(data, self.TurnNum)
        data = CommFunc.WriteBYTE(data, self.TurnMax)
        data = CommFunc.WriteWORD(data, self.Len)
        data = CommFunc.WriteString(data, self.Len, self.Msg)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                MapID:%d,
                                FuncLineID:%d,
                                TagType:%d,
                                TagID:%d,
                                State:%d,
                                TurnNum:%d,
                                TurnMax:%d,
                                Len:%d,
                                Msg:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.MapID,
                                self.FuncLineID,
                                self.TagType,
                                self.TagID,
                                self.State,
                                self.TurnNum,
                                self.TurnMax,
                                self.Len,
                                self.Msg
                                )
        return DumpString
m_NAtagMCTurnFightState=tagMCTurnFightState()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightState.Head.Cmd,m_NAtagMCTurnFightState.Head.SubCmd))] = m_NAtagMCTurnFightState
#------------------------------------------------------
# C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo
class  tagMCChampionshipPlayerInfo(Structure):