ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -561,33 +561,41 @@
#A0 04 同步客户端时间 #tagServerDateTime
class  tagServerDateTime(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Year", c_ushort),
                  ("Month", c_ubyte),
                  ("Day", c_ubyte),
                  ("Hour", c_ubyte),
                  ("Minute", c_ubyte),
                  ("Second", c_ubyte),
                  ("MicSecond", c_int),
                  ]
    Head = tagHead()
    Year = 0    #(WORD Year)
    Month = 0    #(BYTE Month)
    Day = 0    #(BYTE Day)
    Hour = 0    #(BYTE Hour)
    Minute = 0    #(BYTE Minute)
    Second = 0    #(BYTE Second)
    MicSecond = 0    #(DWORD MicSecond)
    CrossServerTime = ""    #(char CrossServerTime[19])
    data = None
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA0
        self.SubCmd = 0x04
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x04
        return
    def ReadData(self, stringData, _pos=0, _len=0):
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Year,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Month,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Day,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Second,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MicSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CrossServerTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
        return _pos
    def Clear(self):
        self.Cmd = 0xA0
        self.SubCmd = 0x04
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x04
        self.Year = 0
        self.Month = 0
        self.Day = 0
@@ -595,42 +603,64 @@
        self.Minute = 0
        self.Second = 0
        self.MicSecond = 0
        self.CrossServerTime = ""
        return
    def GetLength(self):
        return sizeof(tagServerDateTime)
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 1
        length += 1
        length += 1
        length += 1
        length += 1
        length += 4
        length += 19
        return length
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Year)
        data = CommFunc.WriteBYTE(data, self.Month)
        data = CommFunc.WriteBYTE(data, self.Day)
        data = CommFunc.WriteBYTE(data, self.Hour)
        data = CommFunc.WriteBYTE(data, self.Minute)
        data = CommFunc.WriteBYTE(data, self.Second)
        data = CommFunc.WriteDWORD(data, self.MicSecond)
        data = CommFunc.WriteString(data, 19, self.CrossServerTime)
        return data
    def OutputString(self):
        DumpString = '''//A0 04 同步客户端时间 //tagServerDateTime:
                                Cmd:%s,
                                SubCmd:%s,
        DumpString = '''
                                Head:%s,
                                Year:%d,
                                Month:%d,
                                Day:%d,
                                Hour:%d,
                                Minute:%d,
                                Second:%d,
                                MicSecond:%d
                                MicSecond:%d,
                                CrossServerTime:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Head.OutputString(),
                                self.Year,
                                self.Month,
                                self.Day,
                                self.Hour,
                                self.Minute,
                                self.Second,
                                self.MicSecond
                                self.MicSecond,
                                self.CrossServerTime
                                )
        return DumpString
m_NAtagServerDateTime=tagServerDateTime()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagServerDateTime.Cmd,m_NAtagServerDateTime.SubCmd))] = m_NAtagServerDateTime
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagServerDateTime.Head.Cmd,m_NAtagServerDateTime.Head.SubCmd))] = m_NAtagServerDateTime
#------------------------------------------------------
@@ -2368,6 +2398,112 @@
#------------------------------------------------------
# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo
class  tagGCArenaBattlePlayerInfo(Structure):
    Head = tagHead()
    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID
    PlayerName = ""    #(char PlayerName[33])
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)//等级
    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
    Score = 0    #(DWORD Score)//积分
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x26
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x26
        self.PlayerID = 0
        self.PlayerName = ""
        self.Job = 0
        self.LV = 0
        self.RealmLV = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Score = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 33
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.Score)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerID:%d,
                                PlayerName:%s,
                                Job:%d,
                                LV:%d,
                                RealmLV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerID,
                                self.PlayerName,
                                self.Job,
                                self.LV,
                                self.RealmLV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score
                                )
        return DumpString
m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo
#------------------------------------------------------
# A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList
class  tagGCArenaBattleRecord(Structure):
@@ -2376,7 +2512,9 @@
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)//等级
    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
    Score = 0    #(DWORD Score)//积分
    AddScoreLen = 0    #(BYTE AddScoreLen)
    AddScore = ""    #(String AddScore)//本次对战增加的积分,有正负
    IsWin = 0    #(BYTE IsWin)//是否获胜
@@ -2395,6 +2533,8 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen)
        self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -2408,6 +2548,8 @@
        self.LV = 0
        self.RealmLV = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Score = 0
        self.AddScoreLen = 0
        self.AddScore = ""
        self.IsWin = 0
@@ -2421,6 +2563,8 @@
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += len(self.AddScore)
@@ -2437,6 +2581,8 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.Score)
        data = CommFunc.WriteBYTE(data, self.AddScoreLen)
        data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore)
        data = CommFunc.WriteBYTE(data, self.IsWin)
@@ -2451,6 +2597,8 @@
                                LV:%d,
                                RealmLV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d,
                                AddScoreLen:%d,
                                AddScore:%s,
                                IsWin:%d,
@@ -2463,6 +2611,8 @@
                                self.LV,
                                self.RealmLV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score,
                                self.AddScoreLen,
                                self.AddScore,
                                self.IsWin,
@@ -2546,7 +2696,8 @@
    Job = 0    #(BYTE Job)
    LV = 0    #(WORD LV)//等级
    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
    FightPower = 0    #(DWORD FightPower)//战力,机器人读等级表取等级对应战力
    FightPower = 0    #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力
    Score = 0    #(DWORD Score)//积分
    data = None
@@ -2562,6 +2713,7 @@
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
@@ -2572,6 +2724,7 @@
        self.LV = 0
        self.RealmLV = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Score = 0
        return
@@ -2582,6 +2735,7 @@
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
@@ -2595,6 +2749,7 @@
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.Score)
        return data
@@ -2606,6 +2761,7 @@
                                LV:%d,
                                RealmLV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d
                                '''\
                                %(
@@ -2615,6 +2771,7 @@
                                self.LV,
                                self.RealmLV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score
                                )
        return DumpString
@@ -7149,6 +7306,994 @@
#------------------------------------------------------
# B3 24 喜糖列表 #tagGCCandyList
class  tagGCCandyInfo(Structure):
    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
    NameALen = 0    #(BYTE NameALen)
    PlayerNameA = ""    #(String PlayerNameA)
    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
    NameBLen = 0    #(BYTE NameBLen)
    PlayerNameB = ""    #(String PlayerNameB)
    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
    MarryTime = 0    #(DWORD MarryTime)// 成亲时间戳,秒
    EndTime = 0    #(DWORD EndTime)// 结束时间戳,秒
    Prosperity = 0    #(DWORD Prosperity)// 当前繁荣度
    FireworksTotalBuyCount = 0    #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数
    FireworksPlayerBuyCount = 0    #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数
    PlayerFreeEatCandyCount = 0    #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.PlayerIDA = 0
        self.NameALen = 0
        self.PlayerNameA = ""
        self.PlayerIDB = 0
        self.NameBLen = 0
        self.PlayerNameB = ""
        self.BridePriceID = 0
        self.MarryTime = 0
        self.EndTime = 0
        self.Prosperity = 0
        self.FireworksTotalBuyCount = 0
        self.FireworksPlayerBuyCount = 0
        self.PlayerFreeEatCandyCount = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += len(self.PlayerNameA)
        length += 4
        length += 1
        length += len(self.PlayerNameB)
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        length += 1
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
        data = CommFunc.WriteBYTE(data, self.NameALen)
        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
        data = CommFunc.WriteBYTE(data, self.NameBLen)
        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
        data = CommFunc.WriteBYTE(data, self.BridePriceID)
        data = CommFunc.WriteDWORD(data, self.MarryTime)
        data = CommFunc.WriteDWORD(data, self.EndTime)
        data = CommFunc.WriteDWORD(data, self.Prosperity)
        data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount)
        data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount)
        data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerIDA:%d,
                                NameALen:%d,
                                PlayerNameA:%s,
                                PlayerIDB:%d,
                                NameBLen:%d,
                                PlayerNameB:%s,
                                BridePriceID:%d,
                                MarryTime:%d,
                                EndTime:%d,
                                Prosperity:%d,
                                FireworksTotalBuyCount:%d,
                                FireworksPlayerBuyCount:%d,
                                PlayerFreeEatCandyCount:%d
                                '''\
                                %(
                                self.PlayerIDA,
                                self.NameALen,
                                self.PlayerNameA,
                                self.PlayerIDB,
                                self.NameBLen,
                                self.PlayerNameB,
                                self.BridePriceID,
                                self.MarryTime,
                                self.EndTime,
                                self.Prosperity,
                                self.FireworksTotalBuyCount,
                                self.FireworksPlayerBuyCount,
                                self.PlayerFreeEatCandyCount
                                )
        return DumpString
class  tagGCCandyList(Structure):
    Head = tagHead()
    CandyCount = 0    #(WORD CandyCount)
    CandyInfoList = list()    #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x24
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.CandyCount):
            temCandyInfoList = tagGCCandyInfo()
            _pos = temCandyInfoList.ReadData(_lpData, _pos)
            self.CandyInfoList.append(temCandyInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x24
        self.CandyCount = 0
        self.CandyInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.CandyCount):
            length += self.CandyInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.CandyCount)
        for i in range(self.CandyCount):
            data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                CandyCount:%d,
                                CandyInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.CandyCount,
                                "..."
                                )
        return DumpString
m_NAtagGCCandyList=tagGCCandyList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList
#------------------------------------------------------
# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList
class  tagGCCharmOfferBillboardData(Structure):
    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
    PlayerID = 0    #(DWORD PlayerID)// 玩家ID - 贡献者
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)
    CharmValue = 0    #(DWORD CharmValue)//贡献魅力值
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.OrderIndex = 0
        self.PlayerID = 0
        self.NameLen = 0
        self.PlayerName = ""
        self.CharmValue = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 4
        length += 1
        length += len(self.PlayerName)
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.OrderIndex)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteDWORD(data, self.CharmValue)
        return data
    def OutputString(self):
        DumpString = '''
                                OrderIndex:%d,
                                PlayerID:%d,
                                NameLen:%d,
                                PlayerName:%s,
                                CharmValue:%d
                                '''\
                                %(
                                self.OrderIndex,
                                self.PlayerID,
                                self.NameLen,
                                self.PlayerName,
                                self.CharmValue
                                )
        return DumpString
class  tagGCCharmOfferBillboardDataList(Structure):
    Head = tagHead()
    PlayerID = 0    #(DWORD PlayerID)// 魅力玩家ID
    QueryType = 0    #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜
    DataCount = 0    #(BYTE DataCount)
    OfferBillboardDataList = list()    #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x19
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DataCount):
            temOfferBillboardDataList = tagGCCharmOfferBillboardData()
            _pos = temOfferBillboardDataList.ReadData(_lpData, _pos)
            self.OfferBillboardDataList.append(temOfferBillboardDataList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x19
        self.PlayerID = 0
        self.QueryType = 0
        self.DataCount = 0
        self.OfferBillboardDataList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += 1
        for i in range(self.DataCount):
            length += self.OfferBillboardDataList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.QueryType)
        data = CommFunc.WriteBYTE(data, self.DataCount)
        for i in range(self.DataCount):
            data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerID:%d,
                                QueryType:%d,
                                DataCount:%d,
                                OfferBillboardDataList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerID,
                                self.QueryType,
                                self.DataCount,
                                "..."
                                )
        return DumpString
m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList
#------------------------------------------------------
# B3 26 伴侣信息 #tagGCCoupleInfo
class  tagGCCoupleInfo(Structure):
    Head = tagHead()
    CoupleID = 0    #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取
    NameLen = 0    #(BYTE NameLen)
    CoupleName = ""    #(String CoupleName)
    NewMarryTime = 0    #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算
    MarryTime = 0    #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算
    BridePriceState = 0    #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次
    BreakRequestID = 0    #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求
    BreakRequestTime = 0    #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期
    PlayerBreakRequestTime = 0    #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x26
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x26
        self.CoupleID = 0
        self.NameLen = 0
        self.CoupleName = ""
        self.NewMarryTime = 0
        self.MarryTime = 0
        self.BridePriceState = 0
        self.BreakRequestID = 0
        self.BreakRequestTime = 0
        self.PlayerBreakRequestTime = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.CoupleName)
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.CoupleID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.CoupleName)
        data = CommFunc.WriteDWORD(data, self.NewMarryTime)
        data = CommFunc.WriteDWORD(data, self.MarryTime)
        data = CommFunc.WriteDWORD(data, self.BridePriceState)
        data = CommFunc.WriteDWORD(data, self.BreakRequestID)
        data = CommFunc.WriteDWORD(data, self.BreakRequestTime)
        data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                CoupleID:%d,
                                NameLen:%d,
                                CoupleName:%s,
                                NewMarryTime:%d,
                                MarryTime:%d,
                                BridePriceState:%d,
                                BreakRequestID:%d,
                                BreakRequestTime:%d,
                                PlayerBreakRequestTime:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.CoupleID,
                                self.NameLen,
                                self.CoupleName,
                                self.NewMarryTime,
                                self.MarryTime,
                                self.BridePriceState,
                                self.BreakRequestID,
                                self.BreakRequestTime,
                                self.PlayerBreakRequestTime
                                )
        return DumpString
m_NAtagGCCoupleInfo=tagGCCoupleInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo
#------------------------------------------------------
# B3 22 收到提亲信息 #tagGCMarryReqInfo
class  tagGCMarryReqInfo(Structure):
    Head = tagHead()
    PlayerID = 0    #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)
    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x22
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x22
        self.PlayerID = 0
        self.NameLen = 0
        self.PlayerName = ""
        self.BridePriceID = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.PlayerName)
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.BridePriceID)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerID:%d,
                                NameLen:%d,
                                PlayerName:%s,
                                BridePriceID:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerID,
                                self.NameLen,
                                self.PlayerName,
                                self.BridePriceID
                                )
        return DumpString
m_NAtagGCMarryReqInfo=tagGCMarryReqInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo
#------------------------------------------------------
# B3 21 提亲发送成功 #tagGCMarryReqOK
class  tagGCMarryReqOK(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        self.SubCmd = 0x21
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB3
        self.SubCmd = 0x21
        return
    def GetLength(self):
        return sizeof(tagGCMarryReqOK)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagGCMarryReqOK=tagGCMarryReqOK()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK
#------------------------------------------------------
# B3 23 提亲回应结果 #tagGCMarryResponseRet
class  tagGCMarryResponseRet(Structure):
    Head = tagHead()
    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
    NameALen = 0    #(BYTE NameALen)
    PlayerNameA = ""    #(String PlayerNameA)
    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
    NameBLen = 0    #(BYTE NameBLen)
    PlayerNameB = ""    #(String PlayerNameB)
    IsOK = 0    #(BYTE IsOK)// 是否同意,0-否,1-是;  如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x23
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x23
        self.PlayerIDA = 0
        self.NameALen = 0
        self.PlayerNameA = ""
        self.PlayerIDB = 0
        self.NameBLen = 0
        self.PlayerNameB = ""
        self.IsOK = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.PlayerNameA)
        length += 4
        length += 1
        length += len(self.PlayerNameB)
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
        data = CommFunc.WriteBYTE(data, self.NameALen)
        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
        data = CommFunc.WriteBYTE(data, self.NameBLen)
        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
        data = CommFunc.WriteBYTE(data, self.IsOK)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerIDA:%d,
                                NameALen:%d,
                                PlayerNameA:%s,
                                PlayerIDB:%d,
                                NameBLen:%d,
                                PlayerNameB:%s,
                                IsOK:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerIDA,
                                self.NameALen,
                                self.PlayerNameA,
                                self.PlayerIDB,
                                self.NameBLen,
                                self.PlayerNameB,
                                self.IsOK
                                )
        return DumpString
m_NAtagGCMarryResponseRet=tagGCMarryResponseRet()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet
#------------------------------------------------------
# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo
class  tagGCPlayerCharmValueInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("CharmValueTotal", c_int),    #当前魅力值 - 总
                  ("CharmValueWeek", c_int),    #当前魅力值 - 周
                  ("CharmValueDay", c_int),    #当前魅力值 - 日
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        self.SubCmd = 0x25
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB3
        self.SubCmd = 0x25
        self.CharmValueTotal = 0
        self.CharmValueWeek = 0
        self.CharmValueDay = 0
        return
    def GetLength(self):
        return sizeof(tagGCPlayerCharmValueInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                CharmValueTotal:%d,
                                CharmValueWeek:%d,
                                CharmValueDay:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.CharmValueTotal,
                                self.CharmValueWeek,
                                self.CharmValueDay
                                )
        return DumpString
m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo
#------------------------------------------------------
# B3 20 送礼物成功通知 #tagGCSendGiftsOKList
class  tagGCSendGiftsOK(Structure):
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)// 赠送方玩家名
    PlayerID = 0    #(DWORD PlayerID)// 赠送方玩家ID
    GiftNum = 0    #(WORD GiftNum)// 赠送礼物编号
    GiftCount = 0    #(DWORD GiftCount)// 赠送礼物数量
    SendTime = 0    #(DWORD SendTime)// 赠送时间戳
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.NameLen = 0
        self.Name = ""
        self.PlayerID = 0
        self.GiftNum = 0
        self.GiftCount = 0
        self.SendTime = 0
        return
    def GetLength(self):
        length = 0
        length += 1
        length += len(self.Name)
        length += 4
        length += 2
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteWORD(data, self.GiftNum)
        data = CommFunc.WriteDWORD(data, self.GiftCount)
        data = CommFunc.WriteDWORD(data, self.SendTime)
        return data
    def OutputString(self):
        DumpString = '''
                                NameLen:%d,
                                Name:%s,
                                PlayerID:%d,
                                GiftNum:%d,
                                GiftCount:%d,
                                SendTime:%d
                                '''\
                                %(
                                self.NameLen,
                                self.Name,
                                self.PlayerID,
                                self.GiftNum,
                                self.GiftCount,
                                self.SendTime
                                )
        return DumpString
class  tagGCSendGiftsOKList(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)
    SendGiftsOKList = list()    #(vector<tagGCSendGiftsOK> SendGiftsOKList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x20
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temSendGiftsOKList = tagGCSendGiftsOK()
            _pos = temSendGiftsOKList.ReadData(_lpData, _pos)
            self.SendGiftsOKList.append(temSendGiftsOKList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x20
        self.Count = 0
        self.SendGiftsOKList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.Count):
            length += self.SendGiftsOKList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                SendGiftsOKList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList
#------------------------------------------------------
# B3 14 社交人群伴侣信息 #tagGCSocialCouples
class  tagGCSocialCouple(Structure):
    _pack_ = 1
    _fields_ = [
                  ("PlayerID", c_int),
                  ("CoupleID", c_int),    #伴侣ID
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.PlayerID = 0
        self.CoupleID = 0
        return
    def GetLength(self):
        return sizeof(tagGCSocialCouple)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 14 社交人群伴侣信息 //tagGCSocialCouples:
                                PlayerID:%d,
                                CoupleID:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.CoupleID
                                )
        return DumpString
class  tagGCSocialCouples(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)
    Player = list()    #(vector<tagGCSocialCouple> Player)//size = Count
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x14
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temPlayer = tagGCSocialCouple()
            _pos = temPlayer.ReadData(_lpData, _pos)
            self.Player.append(temPlayer)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x14
        self.Count = 0
        self.Player = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.Count):
            length += self.Player[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                Player:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCSocialCouples=tagGCSocialCouples()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialCouples.Head.Cmd,m_NAtagGCSocialCouples.Head.SubCmd))] = m_NAtagGCSocialCouples
#------------------------------------------------------
#B3 01 添加社交对象 #tagGCAddSocialPlayer
class  tagGCAddSocialPlayer(Structure):
@@ -7519,7 +8664,7 @@
    _pack_ = 1
    _fields_ = [
                  ("PlayerID", c_int),    
                  ("SortValue", c_int),
                  ("SortValue", c_int),    # 亲密组时为亲密度
                  ]
    def __init__(self):
@@ -7556,7 +8701,7 @@
class  tagGCGroupPlayers(Structure):
    Head = tagHead()
    GroupType = 0    #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
    GroupType = 0    #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 5亲密组
    Count = 0    #(WORD Count)
    Players = list()    #(vector<tagGCGroupPlayer> Players)//size = Count
    data = None
@@ -12154,6 +13299,494 @@
#------------------------------------------------------
# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo
class  tagGCLuckyCloudBuyLotteryRec(Structure):
    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)// 中奖玩家名
    LotteryNum = 0    #(WORD LotteryNum)// 开奖号码
    LotteryTime = 0    #(DWORD LotteryTime)// 开奖时间戳,秒
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.SuperItemID = 0
        self.SuperItemCount = 0
        self.NameLen = 0
        self.PlayerName = ""
        self.LotteryNum = 0
        self.LotteryTime = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += 1
        length += len(self.PlayerName)
        length += 2
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.SuperItemID)
        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteWORD(data, self.LotteryNum)
        data = CommFunc.WriteDWORD(data, self.LotteryTime)
        return data
    def OutputString(self):
        DumpString = '''
                                SuperItemID:%d,
                                SuperItemCount:%d,
                                NameLen:%d,
                                PlayerName:%s,
                                LotteryNum:%d,
                                LotteryTime:%d
                                '''\
                                %(
                                self.SuperItemID,
                                self.SuperItemCount,
                                self.NameLen,
                                self.PlayerName,
                                self.LotteryNum,
                                self.LotteryTime
                                )
        return DumpString
class  tagGCLuckyCloudBuyLotteryRecInfo(Structure):
    Head = tagHead()
    ZoneCount = 0    #(BYTE ZoneCount)// 分区数
    ZoneIDList = list()    #(vector<BYTE> ZoneIDList)// 所有分区ID列表
    ZoneID = 0    #(BYTE ZoneID)// 返回记录分区ID
    Count = 0    #(WORD Count)
    LotteryRecList = list()    #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x14
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ZoneCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.ZoneIDList.append(value)
        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temLotteryRecList = tagGCLuckyCloudBuyLotteryRec()
            _pos = temLotteryRecList.ReadData(_lpData, _pos)
            self.LotteryRecList.append(temLotteryRecList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x14
        self.ZoneCount = 0
        self.ZoneIDList = list()
        self.ZoneID = 0
        self.Count = 0
        self.LotteryRecList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1 * self.ZoneCount
        length += 1
        length += 2
        for i in range(self.Count):
            length += self.LotteryRecList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ZoneCount)
        for i in range(self.ZoneCount):
            data = CommFunc.WriteBYTE(data, self.ZoneIDList[i])
        data = CommFunc.WriteBYTE(data, self.ZoneID)
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ZoneCount:%d,
                                ZoneIDList:%s,
                                ZoneID:%d,
                                Count:%d,
                                LotteryRecList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ZoneCount,
                                "...",
                                self.ZoneID,
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo
#------------------------------------------------------
# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo
class  tagGCLuckyCloudBuyNumRec(Structure):
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)
    BuyNum = 0    #(WORD BuyNum)
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.NameLen = 0
        self.PlayerName = ""
        self.BuyNum = 0
        return
    def GetLength(self):
        length = 0
        length += 1
        length += len(self.PlayerName)
        length += 2
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteWORD(data, self.BuyNum)
        return data
    def OutputString(self):
        DumpString = '''
                                NameLen:%d,
                                PlayerName:%s,
                                BuyNum:%d
                                '''\
                                %(
                                self.NameLen,
                                self.PlayerName,
                                self.BuyNum
                                )
        return DumpString
class  tagGCLuckyCloudBuyNumRecInfo(Structure):
    Head = tagHead()
    RemainCount = 0    #(WORD RemainCount)// 开奖剩余份数
    Count = 0    #(WORD Count)
    BuyNumRecList = list()    #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x13
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temBuyNumRecList = tagGCLuckyCloudBuyNumRec()
            _pos = temBuyNumRecList.ReadData(_lpData, _pos)
            self.BuyNumRecList.append(temBuyNumRecList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x13
        self.RemainCount = 0
        self.Count = 0
        self.BuyNumRecList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 2
        for i in range(self.Count):
            length += self.BuyNumRecList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.RemainCount)
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                RemainCount:%d,
                                Count:%d,
                                BuyNumRecList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.RemainCount,
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo
#------------------------------------------------------
# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo
class  tagGCLuckyCloudBuyRoundItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("ItemCount", c_ushort),
                  ("IsBind", c_ubyte),    # 是否拍品
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.ItemCount = 0
        self.IsBind = 0
        return
    def GetLength(self):
        return sizeof(tagGCLuckyCloudBuyRoundItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagGCLuckyCloudBuyRoundInfo(Structure):
    Head = tagHead()
    ZoneID = 0    #(BYTE ZoneID)// 所属分区ID
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    RoundID = 0    #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存
    RoundNum = 0    #(BYTE RoundNum)// 今日第几轮
    SuperItemID = 0    #(DWORD SuperItemID)// 大奖物品ID
    SuperItemCount = 0    #(BYTE SuperItemCount)// 大奖物品个数
    SuperItemMoneyType = 0    #(BYTE SuperItemMoneyType)// 大奖价值货币类型
    SuperItemMoneyValue = 0    #(DWORD SuperItemMoneyValue)// 大奖价值
    BaseItemCount = 0    #(BYTE BaseItemCount)// 每次购买固定奖励物品数
    BaseItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息
    RandItemCount = 0    #(BYTE RandItemCount)// 每次购买随机奖励物品数
    RandItemList = list()    #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x12
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
        self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BaseItemCount):
            temBaseItemList = tagGCLuckyCloudBuyRoundItem()
            _pos = temBaseItemList.ReadData(_lpData, _pos)
            self.BaseItemList.append(temBaseItemList)
        self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.RandItemCount):
            temRandItemList = tagGCLuckyCloudBuyRoundItem()
            _pos = temRandItemList.ReadData(_lpData, _pos)
            self.RandItemList.append(temRandItemList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xC0
        self.Head.SubCmd = 0x12
        self.ZoneID = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.RoundID = 0
        self.RoundNum = 0
        self.SuperItemID = 0
        self.SuperItemCount = 0
        self.SuperItemMoneyType = 0
        self.SuperItemMoneyValue = 0
        self.BaseItemCount = 0
        self.BaseItemList = list()
        self.RandItemCount = 0
        self.RandItemList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 4
        length += 1
        length += 4
        length += 1
        length += 1
        length += 4
        length += 1
        for i in range(self.BaseItemCount):
            length += self.BaseItemList[i].GetLength()
        length += 1
        for i in range(self.RandItemCount):
            length += self.RandItemList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ZoneID)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteDWORD(data, self.RoundID)
        data = CommFunc.WriteBYTE(data, self.RoundNum)
        data = CommFunc.WriteDWORD(data, self.SuperItemID)
        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
        data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType)
        data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue)
        data = CommFunc.WriteBYTE(data, self.BaseItemCount)
        for i in range(self.BaseItemCount):
            data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.RandItemCount)
        for i in range(self.RandItemCount):
            data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ZoneID:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                RoundID:%d,
                                RoundNum:%d,
                                SuperItemID:%d,
                                SuperItemCount:%d,
                                SuperItemMoneyType:%d,
                                SuperItemMoneyValue:%d,
                                BaseItemCount:%d,
                                BaseItemList:%s,
                                RandItemCount:%d,
                                RandItemList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ZoneID,
                                self.StartDate,
                                self.EndtDate,
                                self.RoundID,
                                self.RoundNum,
                                self.SuperItemID,
                                self.SuperItemCount,
                                self.SuperItemMoneyType,
                                self.SuperItemMoneyValue,
                                self.BaseItemCount,
                                "...",
                                self.RandItemCount,
                                "..."
                                )
        return DumpString
m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo
#------------------------------------------------------
#A1 25 请求切换地图失败#tagMCChangeMapFail
class  tagMCChangeMapFail(Structure):
@@ -16215,6 +17848,62 @@
m_NAtagMCFamilyActivityInfo=tagMCFamilyActivityInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityInfo.Head.Cmd,m_NAtagMCFamilyActivityInfo.Head.SubCmd))] = m_NAtagMCFamilyActivityInfo
#------------------------------------------------------
# A3 54 法器信息 #tagMCFaQiInfo
class  tagMCFaQiInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("LV", c_ubyte),    #等阶
                  ("EatItemCount", c_int),    #当前阶已吃丹个数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x54
        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 = 0xA3
        self.SubCmd = 0x54
        self.LV = 0
        self.EatItemCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCFaQiInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 54 法器信息 //tagMCFaQiInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                LV:%d,
                                EatItemCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.LV,
                                self.EatItemCount
                                )
        return DumpString
m_NAtagMCFaQiInfo=tagMCFaQiInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
#------------------------------------------------------
@@ -25013,7 +26702,8 @@
                  ("ActNum", c_ubyte),    #活动编号
                  ("GarbageSortingType", c_ubyte),    #垃圾分类类型
                  ("IsRight", c_ubyte),    #是否正确
                  ("AddEnvValue", c_ushort),    #增加环保值
                  ("AddEnvValue", c_int),    #增加环保值
                  ("HisEnvValueTotal", c_int),    # 当前活动累计获得环保值
                  ]
    def __init__(self):
@@ -25034,6 +26724,7 @@
        self.GarbageSortingType = 0
        self.IsRight = 0
        self.AddEnvValue = 0
        self.HisEnvValueTotal = 0
        return
    def GetLength(self):
@@ -25049,7 +26740,8 @@
                                ActNum:%d,
                                GarbageSortingType:%d,
                                IsRight:%d,
                                AddEnvValue:%d
                                AddEnvValue:%d,
                                HisEnvValueTotal:%d
                                '''\
                                %(
                                self.Cmd,
@@ -25057,7 +26749,8 @@
                                self.ActNum,
                                self.GarbageSortingType,
                                self.IsRight,
                                self.AddEnvValue
                                self.AddEnvValue,
                                self.HisEnvValueTotal
                                )
        return DumpString
@@ -25074,7 +26767,7 @@
    _fields_ = [
                  ("GarbageTaskID", c_ubyte),    #垃圾任务ID
                  ("GarbageTaskValue", c_int),    #当前进度值,一直累加
                  ("GarbageTaskFinishCount", c_ubyte),    #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
                  ("GarbageTaskFinishCount", c_int),    #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
                  ]
    def __init__(self):
@@ -25115,6 +26808,7 @@
class  tagMCActGarbageTaskInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)// 活动编号
    HisEnvValueTotal = 0    #(DWORD HisEnvValueTotal)// 当前活动累计获得环保值
    GarbageTaskCount = 0    #(BYTE GarbageTaskCount)//任务数
    GarbageTaskList = list()    #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表
    data = None
@@ -25129,6 +26823,7 @@
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.HisEnvValueTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GarbageTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.GarbageTaskCount):
            temGarbageTaskList = tagMCActGarbageTask()
@@ -25142,6 +26837,7 @@
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x56
        self.ActNum = 0
        self.HisEnvValueTotal = 0
        self.GarbageTaskCount = 0
        self.GarbageTaskList = list()
        return
@@ -25150,6 +26846,7 @@
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4
        length += 1
        for i in range(self.GarbageTaskCount):
            length += self.GarbageTaskList[i].GetLength()
@@ -25160,6 +26857,7 @@
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteDWORD(data, self.HisEnvValueTotal)
        data = CommFunc.WriteBYTE(data, self.GarbageTaskCount)
        for i in range(self.GarbageTaskCount):
            data = CommFunc.WriteString(data, self.GarbageTaskList[i].GetLength(), self.GarbageTaskList[i].GetBuffer())
@@ -25169,12 +26867,14 @@
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                HisEnvValueTotal:%d,
                                GarbageTaskCount:%d,
                                GarbageTaskList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.HisEnvValueTotal,
                                self.GarbageTaskCount,
                                "..."
                                )
@@ -27281,8 +28981,9 @@
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    CTGPrizeCount = 0    #(BYTE CTGPrizeCount)
    CTGPrizeList = list()    #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...]
    UseGoldPrizeCount = 0    #(BYTE UseGoldPrizeCount)
    UseGoldPrizeList = list()    #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第1次所需累计消费仙玉, 第2次, ...]
    UseMoneyType = 0    #(BYTE UseMoneyType)// 累计消费货币类型
    UseMoneyPrizeCount = 0    #(BYTE UseMoneyPrizeCount)
    UseMoneyPrizeList = list()    #(vector<DWORD> UseMoneyPrizeList)// 累计消费货币奖励次数列表 [奖励第1次所需累计消费货币, 第2次, ...]
    TurnItemCount = 0    #(BYTE TurnItemCount)
    TurnItemList = list()    #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘;
    GoodItemCount = 0    #(BYTE GoodItemCount)
@@ -27311,10 +29012,11 @@
        for i in range(self.CTGPrizeCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.CTGPrizeList.append(value)
        self.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.UseGoldPrizeCount):
        self.UseMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.UseMoneyPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.UseMoneyPrizeCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.UseGoldPrizeList.append(value)
            self.UseMoneyPrizeList.append(value)
        self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TurnItemCount):
            temTurnItemList = tagMCActTurntableItem()
@@ -27346,8 +29048,9 @@
        self.LimitLV = 0
        self.CTGPrizeCount = 0
        self.CTGPrizeList = list()
        self.UseGoldPrizeCount = 0
        self.UseGoldPrizeList = list()
        self.UseMoneyType = 0
        self.UseMoneyPrizeCount = 0
        self.UseMoneyPrizeList = list()
        self.TurnItemCount = 0
        self.TurnItemList = list()
        self.GoodItemCount = 0
@@ -27369,7 +29072,8 @@
        length += 1
        length += 4 * self.CTGPrizeCount
        length += 1
        length += 4 * self.UseGoldPrizeCount
        length += 1
        length += 4 * self.UseMoneyPrizeCount
        length += 1
        for i in range(self.TurnItemCount):
            length += self.TurnItemList[i].GetLength()
@@ -27395,9 +29099,10 @@
        data = CommFunc.WriteBYTE(data, self.CTGPrizeCount)
        for i in range(self.CTGPrizeCount):
            data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i])
        data = CommFunc.WriteBYTE(data, self.UseGoldPrizeCount)
        for i in range(self.UseGoldPrizeCount):
            data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[i])
        data = CommFunc.WriteBYTE(data, self.UseMoneyType)
        data = CommFunc.WriteBYTE(data, self.UseMoneyPrizeCount)
        for i in range(self.UseMoneyPrizeCount):
            data = CommFunc.WriteDWORD(data, self.UseMoneyPrizeList[i])
        data = CommFunc.WriteBYTE(data, self.TurnItemCount)
        for i in range(self.TurnItemCount):
            data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer())
@@ -27421,8 +29126,9 @@
                                LimitLV:%d,
                                CTGPrizeCount:%d,
                                CTGPrizeList:%s,
                                UseGoldPrizeCount:%d,
                                UseGoldPrizeList:%s,
                                UseMoneyType:%d,
                                UseMoneyPrizeCount:%d,
                                UseMoneyPrizeList:%s,
                                TurnItemCount:%d,
                                TurnItemList:%s,
                                GoodItemCount:%d,
@@ -27441,7 +29147,8 @@
                                self.LimitLV,
                                self.CTGPrizeCount,
                                "...",
                                self.UseGoldPrizeCount,
                                self.UseMoneyType,
                                self.UseMoneyPrizeCount,
                                "...",
                                self.TurnItemCount,
                                "...",
@@ -27470,7 +29177,7 @@
                  ("ActNum", c_ubyte),    #活动编号
                  ("CanUseCount", c_ubyte),    #可转盘次数
                  ("CTGTotal", c_int),    #累计充值额度
                  ("UseGoldTotal", c_int),    #累计消费仙玉额度
                  ("UseMoneyTotal", c_int),    #累计消费货币额度
                  ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
                  ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
                  ]
@@ -27492,7 +29199,7 @@
        self.ActNum = 0
        self.CanUseCount = 0
        self.CTGTotal = 0
        self.UseGoldTotal = 0
        self.UseMoneyTotal = 0
        self.TurnItemState = 0
        self.GetItemNum = 0
        return
@@ -27510,7 +29217,7 @@
                                ActNum:%d,
                                CanUseCount:%d,
                                CTGTotal:%d,
                                UseGoldTotal:%d,
                                UseMoneyTotal:%d,
                                TurnItemState:%d,
                                GetItemNum:%d
                                '''\
@@ -27520,7 +29227,7 @@
                                self.ActNum,
                                self.CanUseCount,
                                self.CTGTotal,
                                self.UseGoldTotal,
                                self.UseMoneyTotal,
                                self.TurnItemState,
                                self.GetItemNum
                                )
@@ -35651,6 +37358,80 @@
#------------------------------------------------------
# B1 13 在线奖励信息新 #tagMCOnlinePrizeNew
class  tagMCOnlinePrizeNew(Structure):
    Head = tagHead()
    OnlineTime = 0    #(DWORD OnlineTime)//在线时间毫秒
    Len = 0    #(BYTE Len)
    PrizeInfo = list()    #(vector<DWORD> PrizeInfo)//领奖记录
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x13
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Len):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.PrizeInfo.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x13
        self.OnlineTime = 0
        self.Len = 0
        self.PrizeInfo = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += 4 * self.Len
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.OnlineTime)
        data = CommFunc.WriteBYTE(data, self.Len)
        for i in range(self.Len):
            data = CommFunc.WriteDWORD(data, self.PrizeInfo[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                OnlineTime:%d,
                                Len:%d,
                                PrizeInfo:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.OnlineTime,
                                self.Len,
                                "..."
                                )
        return DumpString
m_NAtagMCOnlinePrizeNew=tagMCOnlinePrizeNew()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrizeNew.Head.Cmd,m_NAtagMCOnlinePrizeNew.Head.SubCmd))] = m_NAtagMCOnlinePrizeNew
#------------------------------------------------------
# B1 03 通知玩家死亡时间 #tagMCPlayerDeadTime
class  tagMCPlayerDeadTime(Structure):
@@ -37545,6 +39326,114 @@
#------------------------------------------------------
# B3 27 情戒信息 #tagMCLoveRingInfo
class  tagMCLoveRingInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ClassLV", c_ubyte),    # 阶
                  ("StarLV", c_ubyte),    # 星
                  ("EatCount", c_int),    # 本星已淬炼道具数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        self.SubCmd = 0x27
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB3
        self.SubCmd = 0x27
        self.ClassLV = 0
        self.StarLV = 0
        self.EatCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCLoveRingInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 27 情戒信息 //tagMCLoveRingInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ClassLV:%d,
                                StarLV:%d,
                                EatCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ClassLV,
                                self.StarLV,
                                self.EatCount
                                )
        return DumpString
m_NAtagMCLoveRingInfo=tagMCLoveRingInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingInfo.Cmd,m_NAtagMCLoveRingInfo.SubCmd))] = m_NAtagMCLoveRingInfo
#------------------------------------------------------
# B3 29 情戒解锁成功 #tagMCLoveRingUnlockOK
class  tagMCLoveRingUnlockOK(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        self.SubCmd = 0x29
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB3
        self.SubCmd = 0x29
        return
    def GetLength(self):
        return sizeof(tagMCLoveRingUnlockOK)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 29 情戒解锁成功 //tagMCLoveRingUnlockOK:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagMCLoveRingUnlockOK=tagMCLoveRingUnlockOK()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingUnlockOK.Cmd,m_NAtagMCLoveRingUnlockOK.SubCmd))] = m_NAtagMCLoveRingUnlockOK
#------------------------------------------------------
# B4 11 新增恶意攻击玩家 #tagMCAddMaliciousAtkPlayer
class  tagMCAddMaliciousAtkPlayer(Structure):
@@ -39391,6 +41280,58 @@
#------------------------------------------------------
# C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo
class  tagMCLuckyCloudBuyPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("BuyCount", c_ushort),    # 本轮已购买份数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC1
        self.SubCmd = 0x08
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xC1
        self.SubCmd = 0x08
        self.BuyCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCLuckyCloudBuyPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C1 08 幸运云购玩家信息 //tagMCLuckyCloudBuyPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                BuyCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.BuyCount
                                )
        return DumpString
m_NAtagMCLuckyCloudBuyPlayerInfo=tagMCLuckyCloudBuyPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyCloudBuyPlayerInfo.Cmd,m_NAtagMCLuckyCloudBuyPlayerInfo.SubCmd))] = m_NAtagMCLuckyCloudBuyPlayerInfo
#------------------------------------------------------
# C1 04 准备进入跨服服务器 #tagMCPrepareEnterCrossServer
class  tagMCPrepareEnterCrossServer(Structure):