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
#------------------------------------------------------
@@ -1272,7 +1302,8 @@
# A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo
class  tagFGrabRedPacketInfo(Structure):
    Name = ""    #(char Name[33])//名字
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)//名字
    PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
    MoneyNum = 0    #(DWORD MoneyNum)//金钱数量
    data = None
@@ -1283,12 +1314,14 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.NameLen = 0
        self.Name = ""
        self.PlayeJob = 0
        self.MoneyNum = 0
@@ -1296,7 +1329,8 @@
    def GetLength(self):
        length = 0
        length += 33
        length += 1
        length += len(self.Name)
        length += 1
        length += 4
@@ -1304,18 +1338,21 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteBYTE(data, self.PlayeJob)
        data = CommFunc.WriteDWORD(data, self.MoneyNum)
        return data
    def OutputString(self):
        DumpString = '''
                                NameLen:%d,
                                Name:%s,
                                PlayeJob:%d,
                                MoneyNum:%d
                                '''\
                                %(
                                self.NameLen,
                                self.Name,
                                self.PlayeJob,
                                self.MoneyNum
@@ -1402,7 +1439,8 @@
class  tagFRedPacketInfo(Structure):
    RedPacketID = 0    #(DWORD RedPacketID)//红包唯一ID
    PlayerID = 0    #(DWORD PlayerID)//玩家ID
    Name = ""    #(char Name[33])//玩家名字
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)//玩家名字
    Time = 0    #(DWORD Time)//时间
    PlayeJob = 0    #(BYTE PlayeJob)//玩家职业
    MoneyType = 0    #(BYTE MoneyType)//金钱类型
@@ -1410,7 +1448,9 @@
    GetWay = 0    #(BYTE GetWay)//获得途径
    PacketCnt = 0    #(BYTE PacketCnt)//可抢个数
    State = 0    #(BYTE State)//0未发,1未领取,2已领取,3全部领完
    Wish = ""    #(char Wish[33])//祝福语
    WishLen = 0    #(BYTE WishLen)
    Wish = ""    #(String Wish)//祝福语
    IsAnonymous = 0    #(BYTE IsAnonymous)//是否匿名
    data = None
    def __init__(self):
@@ -1421,7 +1461,8 @@
        self.Clear()
        self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -1429,12 +1470,15 @@
        self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen)
        self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.RedPacketID = 0
        self.PlayerID = 0
        self.NameLen = 0
        self.Name = ""
        self.Time = 0
        self.PlayeJob = 0
@@ -1443,14 +1487,17 @@
        self.GetWay = 0
        self.PacketCnt = 0
        self.State = 0
        self.WishLen = 0
        self.Wish = ""
        self.IsAnonymous = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 4
        length += 33
        length += 1
        length += len(self.Name)
        length += 4
        length += 1
        length += 1
@@ -1458,7 +1505,9 @@
        length += 1
        length += 1
        length += 1
        length += 33
        length += 1
        length += len(self.Wish)
        length += 1
        return length
@@ -1466,7 +1515,8 @@
        data = ''
        data = CommFunc.WriteDWORD(data, self.RedPacketID)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteDWORD(data, self.Time)
        data = CommFunc.WriteBYTE(data, self.PlayeJob)
        data = CommFunc.WriteBYTE(data, self.MoneyType)
@@ -1474,13 +1524,16 @@
        data = CommFunc.WriteBYTE(data, self.GetWay)
        data = CommFunc.WriteBYTE(data, self.PacketCnt)
        data = CommFunc.WriteBYTE(data, self.State)
        data = CommFunc.WriteString(data, 33, self.Wish)
        data = CommFunc.WriteBYTE(data, self.WishLen)
        data = CommFunc.WriteString(data, self.WishLen, self.Wish)
        data = CommFunc.WriteBYTE(data, self.IsAnonymous)
        return data
    def OutputString(self):
        DumpString = '''
                                RedPacketID:%d,
                                PlayerID:%d,
                                NameLen:%d,
                                Name:%s,
                                Time:%d,
                                PlayeJob:%d,
@@ -1489,11 +1542,14 @@
                                GetWay:%d,
                                PacketCnt:%d,
                                State:%d,
                                Wish:%s
                                WishLen:%d,
                                Wish:%s,
                                IsAnonymous:%d
                                '''\
                                %(
                                self.RedPacketID,
                                self.PlayerID,
                                self.NameLen,
                                self.Name,
                                self.Time,
                                self.PlayeJob,
@@ -1502,7 +1558,9 @@
                                self.GetWay,
                                self.PacketCnt,
                                self.State,
                                self.Wish
                                self.WishLen,
                                self.Wish,
                                self.IsAnonymous
                                )
        return DumpString
@@ -2340,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):
@@ -2348,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)//是否获胜
@@ -2367,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)
@@ -2380,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
@@ -2393,6 +2563,8 @@
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += len(self.AddScore)
@@ -2409,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)
@@ -2423,6 +2597,8 @@
                                LV:%d,
                                RealmLV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d,
                                AddScoreLen:%d,
                                AddScore:%s,
                                IsWin:%d,
@@ -2435,6 +2611,8 @@
                                self.LV,
                                self.RealmLV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score,
                                self.AddScoreLen,
                                self.AddScore,
                                self.IsWin,
@@ -2518,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
@@ -2534,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
@@ -2544,6 +2724,7 @@
        self.LV = 0
        self.RealmLV = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Score = 0
        return
@@ -2554,6 +2735,7 @@
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
@@ -2567,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
@@ -2578,6 +2761,7 @@
                                LV:%d,
                                RealmLV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Score:%d
                                '''\
                                %(
@@ -2587,6 +2771,7 @@
                                self.LV,
                                self.RealmLV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Score
                                )
        return DumpString
@@ -7121,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):
@@ -7491,7 +8664,7 @@
    _pack_ = 1
    _fields_ = [
                  ("PlayerID", c_int),    
                  ("SortValue", c_int),
                  ("SortValue", c_int),    # 亲密组时为亲密度
                  ]
    def __init__(self):
@@ -7528,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
@@ -12126,6 +13299,501 @@
#------------------------------------------------------
# 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)// 大奖价值
    LVLimit = 0    #(WORD LVLimit)//开启等级
    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.LVLimit,_pos = CommFunc.ReadWORD(_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.LVLimit = 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 += 2
        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.WriteWORD(data, self.LVLimit)
        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,
                                LVLimit:%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.LVLimit,
                                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):
@@ -15399,6 +17067,87 @@
#------------------------------------------------------
# A3 C4 装备神装拆解结果 #tagMCEquipDecomposeRet
class  tagMCEquipDecomposeRet(Structure):
    Head = tagHead()
    DecomposeEquipIDCount = 0    #(BYTE DecomposeEquipIDCount)// 已分解的装备个数
    DecomposeEquipIDList = list()    #(vector<DWORD> DecomposeEquipIDList)// 已分解的神装装备ID列表
    GetItemLen = 0    #(WORD GetItemLen)
    GetItemData = ""    #(String GetItemData)//  获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...]
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0xC4
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.DecomposeEquipIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DecomposeEquipIDCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.DecomposeEquipIDList.append(value)
        self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0xC4
        self.DecomposeEquipIDCount = 0
        self.DecomposeEquipIDList = list()
        self.GetItemLen = 0
        self.GetItemData = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4 * self.DecomposeEquipIDCount
        length += 2
        length += len(self.GetItemData)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.DecomposeEquipIDCount)
        for i in range(self.DecomposeEquipIDCount):
            data = CommFunc.WriteDWORD(data, self.DecomposeEquipIDList[i])
        data = CommFunc.WriteWORD(data, self.GetItemLen)
        data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                DecomposeEquipIDCount:%d,
                                DecomposeEquipIDList:%s,
                                GetItemLen:%d,
                                GetItemData:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.DecomposeEquipIDCount,
                                "...",
                                self.GetItemLen,
                                self.GetItemData
                                )
        return DumpString
m_NAtagMCEquipDecomposeRet=tagMCEquipDecomposeRet()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeRet.Head.Cmd,m_NAtagMCEquipDecomposeRet.Head.SubCmd))] = m_NAtagMCEquipDecomposeRet
#------------------------------------------------------
# A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
class  tagMCEquipPartStar(Structure):
@@ -16106,6 +17855,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
#------------------------------------------------------
@@ -19995,60 +21800,98 @@
#A3 01 坐骑培养信息 #tagTrainHorseData
class  tagTrainHorseData(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("LV", c_ubyte),    #等阶
                  ("EatItemCount", c_int),    #当前阶已吃丹个数
                  ("SkinPlusState", c_int),    #幻化激活状态,按位存储是否激活,幻化编号ID对应位
                  ]
    Head = tagHead()
    LV = 0    #(BYTE LV)//等阶
    EatItemCount = 0    #(DWORD EatItemCount)//当前阶已吃丹个数
    SkinPlusState = 0    #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位
    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
    data = None
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x01
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x01
        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.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.EatItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SkinPlusState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TrainTypes):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.TrainLVList.append(value)
        for i in range(self.TrainTypes):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.TrainItemCountList.append(value)
        return _pos
    def Clear(self):
        self.Cmd = 0xA3
        self.SubCmd = 0x01
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x01
        self.LV = 0
        self.EatItemCount = 0
        self.SkinPlusState = 0
        self.TrainTypes = 0
        self.TrainLVList = list()
        self.TrainItemCountList = list()
        return
    def GetLength(self):
        return sizeof(tagTrainHorseData)
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4
        length += 4
        length += 1
        length += 4 * self.TrainTypes
        length += 4 * self.TrainTypes
        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.WriteBYTE(data, self.LV)
        data = CommFunc.WriteDWORD(data, self.EatItemCount)
        data = CommFunc.WriteDWORD(data, self.SkinPlusState)
        data = CommFunc.WriteBYTE(data, self.TrainTypes)
        for i in range(self.TrainTypes):
            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
        for i in range(self.TrainTypes):
            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
        return data
    def OutputString(self):
        DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData:
                                Cmd:%s,
                                SubCmd:%s,
        DumpString = '''
                                Head:%s,
                                LV:%d,
                                EatItemCount:%d,
                                SkinPlusState:%d
                                SkinPlusState:%d,
                                TrainTypes:%d,
                                TrainLVList:%s,
                                TrainItemCountList:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Head.OutputString(),
                                self.LV,
                                self.EatItemCount,
                                self.SkinPlusState
                                self.SkinPlusState,
                                self.TrainTypes,
                                "...",
                                "..."
                                )
        return DumpString
m_NAtagTrainHorseData=tagTrainHorseData()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Cmd,m_NAtagTrainHorseData.SubCmd))] = m_NAtagTrainHorseData
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Head.Cmd,m_NAtagTrainHorseData.Head.SubCmd))] = m_NAtagTrainHorseData
#------------------------------------------------------
@@ -20843,6 +22686,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("HasSendGold", c_int),    # 已用额度
                  ("ServerGrabCnt", c_int),    # 全服红包已抢次数
                  ]
    def __init__(self):
@@ -20860,6 +22704,7 @@
        self.Cmd = 0xA5
        self.SubCmd = 0x05
        self.HasSendGold = 0
        self.ServerGrabCnt = 0
        return
    def GetLength(self):
@@ -20872,12 +22717,14 @@
        DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit:
                                Cmd:%s,
                                SubCmd:%s,
                                HasSendGold:%d
                                HasSendGold:%d,
                                ServerGrabCnt:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.HasSendGold
                                self.HasSendGold,
                                self.ServerGrabCnt
                                )
        return DumpString
@@ -23635,6 +25482,90 @@
#------------------------------------------------------
# A8 18 灵器培养信息 #tagMCLingQiTrainInfo
class  tagMCLingQiTrainInfo(Structure):
    Head = tagHead()
    EquipPlace = 0    #(BYTE EquipPlace)//灵器装备位
    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA8
        self.Head.SubCmd = 0x18
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.EquipPlace,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TrainTypes):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.TrainLVList.append(value)
        for i in range(self.TrainTypes):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.TrainItemCountList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA8
        self.Head.SubCmd = 0x18
        self.EquipPlace = 0
        self.TrainTypes = 0
        self.TrainLVList = list()
        self.TrainItemCountList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 4 * self.TrainTypes
        length += 4 * self.TrainTypes
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.EquipPlace)
        data = CommFunc.WriteBYTE(data, self.TrainTypes)
        for i in range(self.TrainTypes):
            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
        for i in range(self.TrainTypes):
            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                EquipPlace:%d,
                                TrainTypes:%d,
                                TrainLVList:%s,
                                TrainItemCountList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.EquipPlace,
                                self.TrainTypes,
                                "...",
                                "..."
                                )
        return DumpString
m_NAtagMCLingQiTrainInfo=tagMCLingQiTrainInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiTrainInfo.Head.Cmd,m_NAtagMCLingQiTrainInfo.Head.SubCmd))] = m_NAtagMCLingQiTrainInfo
#------------------------------------------------------
# A8 14 合成结果通知 #tagMCMakeItemAnswer
class  tagMCMakeItemAnswer(Structure):
@@ -24059,6 +25990,83 @@
m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem
#------------------------------------------------------
# A8 17 宠物培养信息 #tagMCPetTrainInfo
class  tagMCPetTrainInfo(Structure):
    Head = tagHead()
    TrainTypes = 0    #(BYTE TrainTypes)//培养类型数
    TrainLVList = list()    #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1
    TrainItemCountList = list()    #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA8
        self.Head.SubCmd = 0x17
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TrainTypes):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.TrainLVList.append(value)
        for i in range(self.TrainTypes):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.TrainItemCountList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA8
        self.Head.SubCmd = 0x17
        self.TrainTypes = 0
        self.TrainLVList = list()
        self.TrainItemCountList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4 * self.TrainTypes
        length += 4 * self.TrainTypes
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.TrainTypes)
        for i in range(self.TrainTypes):
            data = CommFunc.WriteDWORD(data, self.TrainLVList[i])
        for i in range(self.TrainTypes):
            data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                TrainTypes:%d,
                                TrainLVList:%s,
                                TrainItemCountList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.TrainTypes,
                                "...",
                                "..."
                                )
        return DumpString
m_NAtagMCPetTrainInfo=tagMCPetTrainInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetTrainInfo.Head.Cmd,m_NAtagMCPetTrainInfo.Head.SubCmd))] = m_NAtagMCPetTrainInfo
#------------------------------------------------------
@@ -24606,6 +26614,285 @@
#------------------------------------------------------
# AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo
class  tagMCActGarbageSortingInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)// 活动编号
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x55
        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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x55
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.LimitLV = 0
        self.ResetType = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 2
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.ResetType)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                LimitLV:%d,
                                ResetType:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.LimitLV,
                                self.ResetType
                                )
        return DumpString
m_NAtagMCActGarbageSortingInfo=tagMCActGarbageSortingInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingInfo.Head.Cmd,m_NAtagMCActGarbageSortingInfo.Head.SubCmd))] = m_NAtagMCActGarbageSortingInfo
#------------------------------------------------------
# AA 57 垃圾收集活动分类结果 #tagMCActGarbageSortingResult
class  tagMCActGarbageSortingResult(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    #活动编号
                  ("GarbageSortingType", c_ubyte),    #垃圾分类类型
                  ("IsRight", c_ubyte),    #是否正确
                  ("AddEnvValue", c_int),    #增加环保值
                  ("HisEnvValueTotal", c_int),    # 当前活动累计获得环保值
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        self.SubCmd = 0x57
        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 = 0x57
        self.ActNum = 0
        self.GarbageSortingType = 0
        self.IsRight = 0
        self.AddEnvValue = 0
        self.HisEnvValueTotal = 0
        return
    def GetLength(self):
        return sizeof(tagMCActGarbageSortingResult)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 57 垃圾收集活动分类结果 //tagMCActGarbageSortingResult:
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                GarbageSortingType:%d,
                                IsRight:%d,
                                AddEnvValue:%d,
                                HisEnvValueTotal:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.GarbageSortingType,
                                self.IsRight,
                                self.AddEnvValue,
                                self.HisEnvValueTotal
                                )
        return DumpString
m_NAtagMCActGarbageSortingResult=tagMCActGarbageSortingResult()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingResult.Cmd,m_NAtagMCActGarbageSortingResult.SubCmd))] = m_NAtagMCActGarbageSortingResult
#------------------------------------------------------
# AA 56 垃圾收集活动任务进度信息 #tagMCActGarbageTaskInfo
class  tagMCActGarbageTask(Structure):
    _pack_ = 1
    _fields_ = [
                  ("GarbageTaskID", c_ubyte),    #垃圾任务ID
                  ("GarbageTaskValue", c_int),    #当前进度值,一直累加
                  ("GarbageTaskFinishCount", c_int),    #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度))
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.GarbageTaskID = 0
        self.GarbageTaskValue = 0
        self.GarbageTaskFinishCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCActGarbageTask)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 56 垃圾收集活动任务进度信息 //tagMCActGarbageTaskInfo:
                                GarbageTaskID:%d,
                                GarbageTaskValue:%d,
                                GarbageTaskFinishCount:%d
                                '''\
                                %(
                                self.GarbageTaskID,
                                self.GarbageTaskValue,
                                self.GarbageTaskFinishCount
                                )
        return DumpString
class  tagMCActGarbageTaskInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)// 活动编号
    HisEnvValueTotal = 0    #(DWORD HisEnvValueTotal)// 当前活动累计获得环保值
    GarbageTaskCount = 0    #(BYTE GarbageTaskCount)//任务数
    GarbageTaskList = list()    #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x56
        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.HisEnvValueTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GarbageTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.GarbageTaskCount):
            temGarbageTaskList = tagMCActGarbageTask()
            _pos = temGarbageTaskList.ReadData(_lpData, _pos)
            self.GarbageTaskList.append(temGarbageTaskList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x56
        self.ActNum = 0
        self.HisEnvValueTotal = 0
        self.GarbageTaskCount = 0
        self.GarbageTaskList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4
        length += 1
        for i in range(self.GarbageTaskCount):
            length += self.GarbageTaskList[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.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())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                HisEnvValueTotal:%d,
                                GarbageTaskCount:%d,
                                GarbageTaskList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.HisEnvValueTotal,
                                self.GarbageTaskCount,
                                "..."
                                )
        return DumpString
m_NAtagMCActGarbageTaskInfo=tagMCActGarbageTaskInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageTaskInfo.Head.Cmd,m_NAtagMCActGarbageTaskInfo.Head.SubCmd))] = m_NAtagMCActGarbageTaskInfo
#------------------------------------------------------
# AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo
class  tagMCActGrowupBuyCTGItem(Structure):
@@ -24850,6 +27137,148 @@
m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo
#------------------------------------------------------
# AA 54 骑宠盛宴活动信息 #tagMCActHorsePetFeastInfo
class  tagMCActHorsePetFeastTime(Structure):
    StartTime = ""    #(char StartTime[5])// 开始时间 H:M
    EndtTime = ""    #(char EndtTime[5])// 结束时间 H:M
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
        self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
        return _pos
    def Clear(self):
        self.StartTime = ""
        self.EndtTime = ""
        return
    def GetLength(self):
        length = 0
        length += 5
        length += 5
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, 5, self.StartTime)
        data = CommFunc.WriteString(data, 5, self.EndtTime)
        return data
    def OutputString(self):
        DumpString = '''
                                StartTime:%s,
                                EndtTime:%s
                                '''\
                                %(
                                self.StartTime,
                                self.EndtTime
                                )
        return DumpString
class  tagMCActHorsePetFeastInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)//活动编号
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    TimeCount = 0    #(BYTE TimeCount)
    ActTimeList = list()    #(vector<tagMCActHorsePetFeastTime> ActTimeList)// 活动时间 H:M 列表
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x54
        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.TimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TimeCount):
            temActTimeList = tagMCActHorsePetFeastTime()
            _pos = temActTimeList.ReadData(_lpData, _pos)
            self.ActTimeList.append(temActTimeList)
        self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x54
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.TimeCount = 0
        self.ActTimeList = list()
        self.LimitLV = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 1
        for i in range(self.TimeCount):
            length += self.ActTimeList[i].GetLength()
        length += 2
        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.TimeCount)
        for i in range(self.TimeCount):
            data = CommFunc.WriteString(data, self.ActTimeList[i].GetLength(), self.ActTimeList[i].GetBuffer())
        data = CommFunc.WriteWORD(data, self.LimitLV)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                TimeCount:%d,
                                ActTimeList:%s,
                                LimitLV:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.TimeCount,
                                "...",
                                self.LimitLV
                                )
        return DumpString
m_NAtagMCActHorsePetFeastInfo=tagMCActHorsePetFeastInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetFeastInfo.Head.Cmd,m_NAtagMCActHorsePetFeastInfo.Head.SubCmd))] = m_NAtagMCActHorsePetFeastInfo
#------------------------------------------------------
@@ -26501,6 +28930,322 @@
#------------------------------------------------------
# AA 52 转盘活动信息 #tagMCActTurntableInfo
class  tagMCActTurntableItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemNum", c_ubyte),    #物品编号 1~n;注意转盘已确定物品编号 与 极品终极物品待选择库编号可能相同,但并不代表同一物品
                  ("ItemLibType", c_ubyte),    #物品库类型;1-常规,2-极品,3-终极
                  ("ItemID", c_int),
                  ("ItemCount", c_ushort),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemNum = 0
        self.ItemLibType = 0
        self.ItemID = 0
        self.ItemCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCActTurntableItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 52 转盘活动信息 //tagMCActTurntableInfo:
                                ItemNum:%d,
                                ItemLibType:%d,
                                ItemID:%d,
                                ItemCount:%d
                                '''\
                                %(
                                self.ItemNum,
                                self.ItemLibType,
                                self.ItemID,
                                self.ItemCount
                                )
        return DumpString
class  tagMCActTurntableInfo(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)// 限制等级
    CTGPrizeCount = 0    #(BYTE CTGPrizeCount)
    CTGPrizeList = list()    #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第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)
    GoodItemList = list()    #(vector<tagMCActTurntableItem> GoodItemList)// 极品物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
    GoodItemCanChooseCount = 0    #(BYTE GoodItemCanChooseCount)// 极品物品可选择个数
    SuperItemCount = 0    #(BYTE SuperItemCount)
    SuperItemList = list()    #(vector<tagMCActTurntableItem> SuperItemList)// 终极物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 终极物品可选择个数
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x52
        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.CTGPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CTGPrizeCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.CTGPrizeList.append(value)
        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.UseMoneyPrizeList.append(value)
        self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.TurnItemCount):
            temTurnItemList = tagMCActTurntableItem()
            _pos = temTurnItemList.ReadData(_lpData, _pos)
            self.TurnItemList.append(temTurnItemList)
        self.GoodItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.GoodItemCount):
            temGoodItemList = tagMCActTurntableItem()
            _pos = temGoodItemList.ReadData(_lpData, _pos)
            self.GoodItemList.append(temGoodItemList)
        self.GoodItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SuperItemCount):
            temSuperItemList = tagMCActTurntableItem()
            _pos = temSuperItemList.ReadData(_lpData, _pos)
            self.SuperItemList.append(temSuperItemList)
        self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x52
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.IsDayReset = 0
        self.LimitLV = 0
        self.CTGPrizeCount = 0
        self.CTGPrizeList = list()
        self.UseMoneyType = 0
        self.UseMoneyPrizeCount = 0
        self.UseMoneyPrizeList = list()
        self.TurnItemCount = 0
        self.TurnItemList = list()
        self.GoodItemCount = 0
        self.GoodItemList = list()
        self.GoodItemCanChooseCount = 0
        self.SuperItemCount = 0
        self.SuperItemList = list()
        self.SuperItemCanChooseCount = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 1
        length += 2
        length += 1
        length += 4 * self.CTGPrizeCount
        length += 1
        length += 1
        length += 4 * self.UseMoneyPrizeCount
        length += 1
        for i in range(self.TurnItemCount):
            length += self.TurnItemList[i].GetLength()
        length += 1
        for i in range(self.GoodItemCount):
            length += self.GoodItemList[i].GetLength()
        length += 1
        length += 1
        for i in range(self.SuperItemCount):
            length += self.SuperItemList[i].GetLength()
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteBYTE(data, self.IsDayReset)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.CTGPrizeCount)
        for i in range(self.CTGPrizeCount):
            data = CommFunc.WriteDWORD(data, self.CTGPrizeList[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())
        data = CommFunc.WriteBYTE(data, self.GoodItemCount)
        for i in range(self.GoodItemCount):
            data = CommFunc.WriteString(data, self.GoodItemList[i].GetLength(), self.GoodItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.GoodItemCanChooseCount)
        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
        for i in range(self.SuperItemCount):
            data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                IsDayReset:%d,
                                LimitLV:%d,
                                CTGPrizeCount:%d,
                                CTGPrizeList:%s,
                                UseMoneyType:%d,
                                UseMoneyPrizeCount:%d,
                                UseMoneyPrizeList:%s,
                                TurnItemCount:%d,
                                TurnItemList:%s,
                                GoodItemCount:%d,
                                GoodItemList:%s,
                                GoodItemCanChooseCount:%d,
                                SuperItemCount:%d,
                                SuperItemList:%s,
                                SuperItemCanChooseCount:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.IsDayReset,
                                self.LimitLV,
                                self.CTGPrizeCount,
                                "...",
                                self.UseMoneyType,
                                self.UseMoneyPrizeCount,
                                "...",
                                self.TurnItemCount,
                                "...",
                                self.GoodItemCount,
                                "...",
                                self.GoodItemCanChooseCount,
                                self.SuperItemCount,
                                "...",
                                self.SuperItemCanChooseCount
                                )
        return DumpString
m_NAtagMCActTurntableInfo=tagMCActTurntableInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntableInfo.Head.Cmd,m_NAtagMCActTurntableInfo.Head.SubCmd))] = m_NAtagMCActTurntableInfo
#------------------------------------------------------
# AA 53 转盘活动玩家信息 #tagMCActTurntablePlayerInfo
class  tagMCActTurntablePlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    #活动编号
                  ("CanUseCount", c_ubyte),    #可转盘次数
                  ("CTGTotal", c_int),    #累计充值额度
                  ("UseMoneyTotal", c_int),    #累计消费货币额度
                  ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
                  ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        self.SubCmd = 0x53
        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 = 0x53
        self.ActNum = 0
        self.CanUseCount = 0
        self.CTGTotal = 0
        self.UseMoneyTotal = 0
        self.TurnItemState = 0
        self.GetItemNum = 0
        return
    def GetLength(self):
        return sizeof(tagMCActTurntablePlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 53 转盘活动玩家信息 //tagMCActTurntablePlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                CanUseCount:%d,
                                CTGTotal:%d,
                                UseMoneyTotal:%d,
                                TurnItemState:%d,
                                GetItemNum:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.CanUseCount,
                                self.CTGTotal,
                                self.UseMoneyTotal,
                                self.TurnItemState,
                                self.GetItemNum
                                )
        return DumpString
m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo
#------------------------------------------------------
# AA 1B 许愿池拖动结果 #tagMCActWishingDragResult
class  tagMCPlayerWishingDragInfo(Structure):
@@ -26945,6 +29690,288 @@
m_NAtagMCActWishingWellPlayerInfo=tagMCActWishingWellPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellPlayerInfo.Head.Cmd,m_NAtagMCActWishingWellPlayerInfo.Head.SubCmd))] = m_NAtagMCActWishingWellPlayerInfo
#------------------------------------------------------
# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult
class  tagMCActXianXiaMJAwardItemResult(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
                  ("ItemCount", c_ushort),
                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        self.SubCmd = 0x59
        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 = 0x59
        self.ActNum = 0
        self.ItemLibType = 0
        self.ItemID = 0
        self.ItemCount = 0
        self.PosNum = 0
        self.TotalTimesNow = 0
        return
    def GetLength(self):
        return sizeof(tagMCActXianXiaMJAwardItemResult)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult:
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                ItemLibType:%d,
                                ItemID:%d,
                                ItemCount:%d,
                                PosNum:%d,
                                TotalTimesNow:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.ItemLibType,
                                self.ItemID,
                                self.ItemCount,
                                self.PosNum,
                                self.TotalTimesNow
                                )
        return DumpString
m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult
#------------------------------------------------------
# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo
class  tagMCActXianXiaMJAwardItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemLibType", c_ubyte),    #物品库类型;9-固定为大奖库,非9-策划自定义库
                  ("ItemID", c_int),    # 注意: 不同库物品ID可能相同,但个数不同
                  ("ItemCount", c_ushort),
                  ("PosNum", c_ubyte),    # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中;
                  ("TotalTimesNow", c_ubyte),    #当前已产出次数,不限制次数时不记录,即同样为0
                  ("TotalTimesMax", c_ubyte),    #最大可产出次数,0不限
                  ("LayerLimit", c_ubyte),    #大于等于X层后可产出,0不限
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemLibType = 0
        self.ItemID = 0
        self.ItemCount = 0
        self.PosNum = 0
        self.TotalTimesNow = 0
        self.TotalTimesMax = 0
        self.LayerLimit = 0
        return
    def GetLength(self):
        return sizeof(tagMCActXianXiaMJAwardItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo:
                                ItemLibType:%d,
                                ItemID:%d,
                                ItemCount:%d,
                                PosNum:%d,
                                TotalTimesNow:%d,
                                TotalTimesMax:%d,
                                LayerLimit:%d
                                '''\
                                %(
                                self.ItemLibType,
                                self.ItemID,
                                self.ItemCount,
                                self.PosNum,
                                self.TotalTimesNow,
                                self.TotalTimesMax,
                                self.LayerLimit
                                )
        return DumpString
class  tagMCActXianXiaMJInfo(Structure):
    Head = tagHead()
    ActNum = 0    #(BYTE ActNum)// 活动编号
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    ResetType = 0    #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置
    MoneyType = 0    #(BYTE MoneyType)//消耗货币类型
    MoneyValue = 0    #(WORD MoneyValue)//消耗货币值
    LayerNum = 0    #(BYTE LayerNum)//当前奖池第几层
    AwardItemCount = 0    #(BYTE AwardItemCount)
    AwardItemList = list()    #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品
    SuperItemCount = 0    #(BYTE SuperItemCount)
    SuperItemList = list()    #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品;
    SuperItemCanChooseCount = 0    #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x58
        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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardItemCount):
            temAwardItemList = tagMCActXianXiaMJAwardItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SuperItemCount):
            temSuperItemList = tagMCActXianXiaMJAwardItem()
            _pos = temSuperItemList.ReadData(_lpData, _pos)
            self.SuperItemList.append(temSuperItemList)
        self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x58
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.LimitLV = 0
        self.ResetType = 0
        self.MoneyType = 0
        self.MoneyValue = 0
        self.LayerNum = 0
        self.AwardItemCount = 0
        self.AwardItemList = list()
        self.SuperItemCount = 0
        self.SuperItemList = list()
        self.SuperItemCanChooseCount = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 10
        length += 10
        length += 2
        length += 1
        length += 1
        length += 2
        length += 1
        length += 1
        for i in range(self.AwardItemCount):
            length += self.AwardItemList[i].GetLength()
        length += 1
        for i in range(self.SuperItemCount):
            length += self.SuperItemList[i].GetLength()
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.ResetType)
        data = CommFunc.WriteBYTE(data, self.MoneyType)
        data = CommFunc.WriteWORD(data, self.MoneyValue)
        data = CommFunc.WriteBYTE(data, self.LayerNum)
        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
        for i in range(self.AwardItemCount):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.SuperItemCount)
        for i in range(self.SuperItemCount):
            data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                LimitLV:%d,
                                ResetType:%d,
                                MoneyType:%d,
                                MoneyValue:%d,
                                LayerNum:%d,
                                AwardItemCount:%d,
                                AwardItemList:%s,
                                SuperItemCount:%d,
                                SuperItemList:%s,
                                SuperItemCanChooseCount:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.LimitLV,
                                self.ResetType,
                                self.MoneyType,
                                self.MoneyValue,
                                self.LayerNum,
                                self.AwardItemCount,
                                "...",
                                self.SuperItemCount,
                                "...",
                                self.SuperItemCanChooseCount
                                )
        return DumpString
m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo
#------------------------------------------------------
@@ -34338,6 +37365,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):
@@ -36232,6 +39333,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):
@@ -38078,6 +41287,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):