From c45b0968234ee291ef43cee2150148b3f4f4fe9b Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 06 五月 2021 18:34:27 +0800 Subject: [PATCH] 5061 【bt_1.100.1】【BT2】【主干】登录通知功能开启可能存在异常问题 --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 5251 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 5,081 insertions(+), 170 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 842d082..8f6fbc3 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -346,6 +346,7 @@ ("NowMinute", c_ubyte), ("NowSecond", c_ubyte), ("NowMicSecond", c_int), + ("WeekOfYear", c_ubyte), #一年中的第几周 ] def __init__(self): @@ -373,6 +374,7 @@ self.NowMinute = 0 self.NowSecond = 0 self.NowMicSecond = 0 + self.WeekOfYear = 0 return def GetLength(self): @@ -395,7 +397,8 @@ NowHour:%d, NowMinute:%d, NowSecond:%d, - NowMicSecond:%d + NowMicSecond:%d, + WeekOfYear:%d '''\ %( self.Cmd, @@ -410,7 +413,8 @@ self.NowHour, self.NowMinute, self.NowSecond, - self.NowMicSecond + self.NowMicSecond, + self.WeekOfYear ) return DumpString @@ -829,7 +833,7 @@ Head = tagHead() Type = 0 #(BYTE Type)//类型 Count = 0 #(WORD Count)//数量 - UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count + UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count data = None def __init__(self): @@ -1133,7 +1137,7 @@ FamilyID = 0 #(DWORD FamilyID)//家族ID ActionType = 0 #(BYTE ActionType)//类型 Count = 0 #(WORD Count)//数量 - FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count + FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count data = None def __init__(self): @@ -1268,7 +1272,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 @@ -1279,12 +1284,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 @@ -1292,7 +1299,8 @@ def GetLength(self): length = 0 - length += 33 + length += 1 + length += len(self.Name) length += 1 length += 4 @@ -1300,18 +1308,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 @@ -1398,15 +1409,18 @@ 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)//金钱类型 - MoneyNum = 0 #(WORD MoneyNum)//金钱数量 + MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 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): @@ -1417,20 +1431,24 @@ 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) - self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) 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 @@ -1439,22 +1457,27 @@ 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 - length += 2 + length += 4 length += 1 length += 1 length += 1 - length += 33 + length += 1 + length += len(self.Wish) + length += 1 return length @@ -1462,21 +1485,25 @@ 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) - data = CommFunc.WriteWORD(data, self.MoneyNum) + data = CommFunc.WriteDWORD(data, self.MoneyNum) 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, @@ -1485,11 +1512,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, @@ -1498,7 +1528,9 @@ self.GetWay, self.PacketCnt, self.State, - self.Wish + self.WishLen, + self.Wish, + self.IsAnonymous ) return DumpString @@ -2181,7 +2213,8 @@ Name = "" #(String Name)//size=NameLen PlayerLV = 0 #(WORD PlayerLV)//玩家等级 PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 - PlayeFightPower = 0 #(DWORD PlayeFightPower)//玩家战斗力 + PlayeFightPower = 0 #(DWORD PlayeFightPower)//玩家战斗力,求余亿部分 + PlayeFightPowerEx = 0 #(DWORD PlayeFightPowerEx)//玩家战斗力,整除亿部分,1代表1亿 RequestTime = 0 #(DWORD RequestTime)//申请时间 IsOnLine = 0 #(BYTE IsOnLine)//是否在线 data = None @@ -2198,6 +2231,7 @@ self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.PlayeFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayeFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.IsOnLine,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos @@ -2209,6 +2243,7 @@ self.PlayerLV = 0 self.PlayeJob = 0 self.PlayeFightPower = 0 + self.PlayeFightPowerEx = 0 self.RequestTime = 0 self.IsOnLine = 0 return @@ -2220,6 +2255,7 @@ length += len(self.Name) length += 2 length += 1 + length += 4 length += 4 length += 4 length += 1 @@ -2234,6 +2270,7 @@ data = CommFunc.WriteWORD(data, self.PlayerLV) data = CommFunc.WriteBYTE(data, self.PlayeJob) data = CommFunc.WriteDWORD(data, self.PlayeFightPower) + data = CommFunc.WriteDWORD(data, self.PlayeFightPowerEx) data = CommFunc.WriteDWORD(data, self.RequestTime) data = CommFunc.WriteBYTE(data, self.IsOnLine) return data @@ -2246,6 +2283,7 @@ PlayerLV:%d, PlayeJob:%d, PlayeFightPower:%d, + PlayeFightPowerEx:%d, RequestTime:%d, IsOnLine:%d '''\ @@ -2256,6 +2294,7 @@ self.PlayerLV, self.PlayeJob, self.PlayeFightPower, + self.PlayeFightPowerEx, self.RequestTime, self.IsOnLine ) @@ -2326,6 +2365,325 @@ m_NAtagGCViewFamilyRequestInfo=tagGCViewFamilyRequestInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCViewFamilyRequestInfo.Head.Cmd,m_NAtagGCViewFamilyRequestInfo.Head.SubCmd))] = m_NAtagGCViewFamilyRequestInfo + + +#------------------------------------------------------ +# A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList + +class tagGCArenaBattleRecord(Structure): + PlayerID = 0 #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + FightPower = 0 #(DWORD FightPower)//战力,机器人读等级表取等级对应战力 + AddScoreLen = 0 #(BYTE AddScoreLen) + AddScore = "" #(String AddScore)//本次对战增加的积分,有正负 + IsWin = 0 #(BYTE IsWin)//是否获胜 + Time = 0 #(DWORD Time)//时间戳 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.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.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen) + self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.AddScoreLen = 0 + self.AddScore = "" + self.IsWin = 0 + self.Time = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 1 + length += len(self.AddScore) + length += 1 + length += 4 + + return length + + def GetBuffer(self): + data = '' + 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.WriteBYTE(data, self.AddScoreLen) + data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore) + data = CommFunc.WriteBYTE(data, self.IsWin) + data = CommFunc.WriteDWORD(data, self.Time) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + AddScoreLen:%d, + AddScore:%s, + IsWin:%d, + Time:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.AddScoreLen, + self.AddScore, + self.IsWin, + self.Time + ) + return DumpString + + +class tagGCArenaBattleRecordList(Structure): + Head = tagHead() + RecordCount = 0 #(BYTE RecordCount) + BattleRecordList = list() #(vector<tagGCArenaBattleRecord> BattleRecordList)// 对战列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temBattleRecordList = tagGCArenaBattleRecord() + _pos = temBattleRecordList.ReadData(_lpData, _pos) + self.BattleRecordList.append(temBattleRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x23 + self.RecordCount = 0 + self.BattleRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RecordCount): + length += self.BattleRecordList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.BattleRecordList[i].GetLength(), self.BattleRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordCount:%d, + BattleRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCArenaBattleRecordList=tagGCArenaBattleRecordList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattleRecordList.Head.Cmd,m_NAtagGCArenaBattleRecordList.Head.SubCmd))] = m_NAtagGCArenaBattleRecordList + + +#------------------------------------------------------ +# A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList + +class tagGCArenaMatchInfo(Structure): + PlayerID = 0 #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + FightPower = 0 #(DWORD FightPower)//战力,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.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.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.Score = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + 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.Score) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + Score:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.Score + ) + return DumpString + + +class tagGCArenaMatchList(Structure): + Head = tagHead() + MatchCount = 0 #(BYTE MatchCount) + MatchList = list() #(vector<tagGCArenaMatchInfo> MatchList)// 匹配列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MatchCount): + temMatchList = tagGCArenaMatchInfo() + _pos = temMatchList.ReadData(_lpData, _pos) + self.MatchList.append(temMatchList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x22 + self.MatchCount = 0 + self.MatchList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.MatchCount): + length += self.MatchList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.MatchCount) + for i in range(self.MatchCount): + data = CommFunc.WriteString(data, self.MatchList[i].GetLength(), self.MatchList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + MatchCount:%d, + MatchList:%s + '''\ + %( + self.Head.OutputString(), + self.MatchCount, + "..." + ) + return DumpString + + +m_NAtagGCArenaMatchList=tagGCArenaMatchList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaMatchList.Head.Cmd,m_NAtagGCArenaMatchList.Head.SubCmd))] = m_NAtagGCArenaMatchList #------------------------------------------------------ @@ -3033,8 +3391,8 @@ IsAlive = 0 #(BYTE IsAlive)// 是否存活 RecordLen = 0 #(WORD RecordLen)// 长度 KillRecord = "" #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen - RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 - RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 + RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 + RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 data = None def __init__(self): @@ -3473,7 +3831,7 @@ EvolveLV = 0 #(BYTE EvolveLV)//进化等级 WashLV = 0 #(BYTE WashLV)//洗练等级 WashValueCount = 0 #(BYTE WashValueCount) - WashValueList = list() #(vector<WORD> WashValueList)//洗练值 + WashValueList = list() #(vector<DWORD> WashValueList)//洗练值 StoneIDCount = 0 #(BYTE StoneIDCount) StoneIDList = list() #(vector<DWORD> StoneIDList)//宝石 ClassEquipCount = 0 #(BYTE ClassEquipCount) @@ -3497,7 +3855,7 @@ self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.WashValueCount): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.WashValueList.append(value) self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.StoneIDCount): @@ -3539,7 +3897,7 @@ length += 1 length += 1 length += 1 - length += 2 * self.WashValueCount + length += 4 * self.WashValueCount length += 1 length += 4 * self.StoneIDCount length += 1 @@ -3559,7 +3917,7 @@ data = CommFunc.WriteBYTE(data, self.WashLV) data = CommFunc.WriteBYTE(data, self.WashValueCount) for i in range(self.WashValueCount): - data = CommFunc.WriteWORD(data, self.WashValueList[i]) + data = CommFunc.WriteDWORD(data, self.WashValueList[i]) data = CommFunc.WriteBYTE(data, self.StoneIDCount) for i in range(self.StoneIDCount): data = CommFunc.WriteDWORD(data, self.StoneIDList[i]) @@ -3999,7 +4357,7 @@ Count = 0 #(DWORD Count)//数量 IsBind = 0 #(BYTE IsBind)//是否绑定 UserDataLen = 0 #(DWORD UserDataLen) - UserData = "" #(String UserData)//自定义数据 + UserData = "" #(String UserData)//自定义数据 data = None def __init__(self): @@ -4240,7 +4598,7 @@ Name = "" #(char Name[33]) LV = 0 #(DWORD LV)//等级 Job = 0 #(BYTE Job) - RealmLV = 0 #(WORD RealmLV)//境界 + RealmLV = 0 #(WORD RealmLV)//境界 data = None def __init__(self): @@ -4693,7 +5051,8 @@ ("SubCmd", c_ubyte), ("Point", c_int), # 复活点数 ("TotalPoint", c_int), # 复活总点数 - ("RebornCnt", c_ushort), # 复活次数 + ("RebornCnt", c_ushort), # 今日已复活次数 + ("TotalRebornCnt", c_ushort), # 每日可复活总次数,0为不限制 ] def __init__(self): @@ -4713,6 +5072,7 @@ self.Point = 0 self.TotalPoint = 0 self.RebornCnt = 0 + self.TotalRebornCnt = 0 return def GetLength(self): @@ -4727,20 +5087,86 @@ SubCmd:%s, Point:%d, TotalPoint:%d, - RebornCnt:%d + RebornCnt:%d, + TotalRebornCnt:%d '''\ %( self.Cmd, self.SubCmd, self.Point, self.TotalPoint, - self.RebornCnt + self.RebornCnt, + self.TotalRebornCnt ) return DumpString m_NAtagGCBossRebornPoint=tagGCBossRebornPoint() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint + + +#------------------------------------------------------ +# AC 12 跨服运营活动结束 # tagGCCrossActEnd + +class tagGCCrossActEnd(Structure): + Head = tagHead() + ActNameLen = 0 #(BYTE ActNameLen) + ActName = "" #(String ActName) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ActName,_pos = CommFunc.ReadString(_lpData, _pos,self.ActNameLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x12 + self.ActNameLen = 0 + self.ActName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ActName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNameLen) + data = CommFunc.WriteString(data, self.ActNameLen, self.ActName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNameLen:%d, + ActName:%s + '''\ + %( + self.Head.OutputString(), + self.ActNameLen, + self.ActName + ) + return DumpString + + +m_NAtagGCCrossActEnd=tagGCCrossActEnd() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActEnd.Head.Cmd,m_NAtagGCCrossActEnd.Head.SubCmd))] = m_NAtagGCCrossActEnd #------------------------------------------------------ @@ -5782,6 +6208,7 @@ class tagGCAssistInfo(Structure): AssistGUID = "" #(char AssistGUID[40])//协助GUID + PlayerID = 0 #(DWORD PlayerID) PlayerName = "" #(char PlayerName[33]) Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 @@ -5800,6 +6227,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + 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) @@ -5813,6 +6241,7 @@ def Clear(self): self.AssistGUID = "" + self.PlayerID = 0 self.PlayerName = "" self.Job = 0 self.LV = 0 @@ -5827,6 +6256,7 @@ def GetLength(self): length = 0 length += 40 + length += 4 length += 33 length += 1 length += 2 @@ -5842,6 +6272,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, 40, self.AssistGUID) + 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) @@ -5856,6 +6287,7 @@ def OutputString(self): DumpString = ''' AssistGUID:%s, + PlayerID:%d, PlayerName:%s, Job:%d, LV:%d, @@ -5868,6 +6300,7 @@ '''\ %( self.AssistGUID, + self.PlayerID, self.PlayerName, self.Job, self.LV, @@ -6256,7 +6689,7 @@ class tagFamilyArrestOverStateInfo(Structure): Head = tagHead() Count = 0 #(WORD Count) - ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count + ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count data = None def __init__(self): @@ -7323,7 +7756,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("PlayerID", c_int), - ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ + ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ ("Value", c_int), ] @@ -7379,7 +7812,7 @@ class tagGCVoiceChat(Structure): Head = tagHead() - ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域 + ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域 SrcNameLen = 0 #(BYTE SrcNameLen) SrcName = "" #(String SrcName)//size = SrcNameLen PlayerID = 0 #(DWORD PlayerID) @@ -7850,7 +8283,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -7867,7 +8300,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -7892,7 +8325,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -7906,7 +8339,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -8013,7 +8446,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -8030,7 +8463,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -8055,7 +8488,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -8069,7 +8502,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -8253,7 +8686,7 @@ ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss BidderID = 0 #(DWORD BidderID)//竞拍玩家ID,也就是当前最高竞价玩家ID - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -8271,7 +8704,7 @@ self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -8298,7 +8731,7 @@ length += 2 length += 19 length += 4 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -8313,7 +8746,7 @@ data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) data = CommFunc.WriteDWORD(data, self.BidderID) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -8532,7 +8965,7 @@ ("EquipPlace", c_ubyte), #当前要升星的装备位 ("CurStar", c_ubyte), #当前星级 ("CurRate", c_ubyte), #当前自动购买后的总概率,不满100则代表拍品库存不足 - ("AutoBuyCostMoney", c_ushort), #自动购买所需总消耗 + ("AutoBuyCostMoney", c_int), #自动购买所需总消耗 ] def __init__(self): @@ -8597,7 +9030,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -8617,7 +9050,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -8648,7 +9081,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -8665,7 +9098,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -8781,7 +9214,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -8798,7 +9231,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -8823,7 +9256,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -8837,7 +9270,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -9119,7 +9552,7 @@ ItemGUID = "" #(char ItemGUID[40]) AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品 AddTime = "" #(char AddTime[19])//上架时间 - BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID + BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID BidderPrice = 0 #(DWORD BidderPrice)//最高竞拍价格 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss data = None @@ -10710,6 +11143,190 @@ #------------------------------------------------------ +# C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo + +class tagGCCrossBillboardData(Structure): + ID = 0 #(DWORD ID) + Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 + Name2 = "" #(char Name2[33])//名字2 + Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 + Value1 = 0 #(DWORD Value1)//自定义值1 + Value2 = 0 #(DWORD Value2)//自定义值2 + CmpValue = 0 #(DWORD CmpValue)// 比较权值 + CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 + CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ID = 0 + self.Name1 = "" + self.Name2 = "" + self.Type2 = 0 + self.Value1 = 0 + self.Value2 = 0 + self.CmpValue = 0 + self.CmpValue2 = 0 + self.CmpValue3 = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 33 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteString(data, 33, self.Name1) + data = CommFunc.WriteString(data, 33, self.Name2) + data = CommFunc.WriteBYTE(data, self.Type2) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.CmpValue) + data = CommFunc.WriteDWORD(data, self.CmpValue2) + data = CommFunc.WriteDWORD(data, self.CmpValue3) + return data + + def OutputString(self): + DumpString = ''' + ID:%d, + Name1:%s, + Name2:%s, + Type2:%d, + Value1:%d, + Value2:%d, + CmpValue:%d, + CmpValue2:%d, + CmpValue3:%d + '''\ + %( + self.ID, + self.Name1, + self.Name2, + self.Type2, + self.Value1, + self.Value2, + self.CmpValue, + self.CmpValue2, + self.CmpValue3 + ) + return DumpString + + +class tagGCCrossBillboardInfo(Structure): + Head = tagHead() + Type = 0 #(BYTE Type)//榜单类型 + GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1 + GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 + BillboardCount = 0 #(BYTE BillboardCount) + CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x07 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillboardCount): + temCrossBillboardDataList = tagGCCrossBillboardData() + _pos = temCrossBillboardDataList.ReadData(_lpData, _pos) + self.CrossBillboardDataList.append(temCrossBillboardDataList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x07 + self.Type = 0 + self.GroupValue1 = 0 + self.GroupValue2 = 0 + self.BillboardCount = 0 + self.CrossBillboardDataList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 + length += 1 + for i in range(self.BillboardCount): + length += self.CrossBillboardDataList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Type) + data = CommFunc.WriteBYTE(data, self.GroupValue1) + data = CommFunc.WriteBYTE(data, self.GroupValue2) + data = CommFunc.WriteBYTE(data, self.BillboardCount) + for i in range(self.BillboardCount): + data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Type:%d, + GroupValue1:%d, + GroupValue2:%d, + BillboardCount:%d, + CrossBillboardDataList:%s + '''\ + %( + self.Head.OutputString(), + self.Type, + self.GroupValue1, + self.GroupValue2, + self.BillboardCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo + + +#------------------------------------------------------ # C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo class tagGCCrossRealmPKBillboardData(Structure): @@ -10801,8 +11418,8 @@ class tagGCCrossRealmPKBillboardInfo(Structure): Head = tagHead() - ZoneID = 0 #(BYTE ZoneID)// 赛区ID - SeasonID = 0 #(BYTE SeasonID)// 赛季ID + ZoneID = 0 #(BYTE ZoneID)// 赛区ID + SeasonID = 0 #(BYTE SeasonID)// 赛季ID Count = 0 #(WORD Count) PKBillboardList = list() #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList) data = None @@ -10888,7 +11505,8 @@ PlayerName = "" #(String PlayerName)// 跨服名字 Job = 0 #(BYTE Job) LV = 0 #(WORD LV) - MaxHP = 0 #(DWORD MaxHP)// 默认满血 + MaxHP = 0 #(DWORD MaxHP)// 默认满血,求余亿部分 + MaxHPEx = 0 #(DWORD MaxHPEx)// 默认满血,整除亿部分 MaxProDef = 0 #(DWORD MaxProDef)// 最大护盾 data = None @@ -10904,6 +11522,7 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos @@ -10914,6 +11533,7 @@ self.Job = 0 self.LV = 0 self.MaxHP = 0 + self.MaxHPEx = 0 self.MaxProDef = 0 return @@ -10924,6 +11544,7 @@ length += len(self.PlayerName) length += 1 length += 2 + length += 4 length += 4 length += 4 @@ -10937,6 +11558,7 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteDWORD(data, self.MaxHP) + data = CommFunc.WriteDWORD(data, self.MaxHPEx) data = CommFunc.WriteDWORD(data, self.MaxProDef) return data @@ -10948,6 +11570,7 @@ Job:%d, LV:%d, MaxHP:%d, + MaxHPEx:%d, MaxProDef:%d '''\ %( @@ -10957,6 +11580,7 @@ self.Job, self.LV, self.MaxHP, + self.MaxHPEx, self.MaxProDef ) return DumpString @@ -11819,7 +12443,7 @@ BackpackLV = 0 #(BYTE BackpackLV)//背包等级 WarehouseLV = 0 #(BYTE WarehouseLV)//仓库等级 TeamID = 0 #(DWORD TeamID)//队伍ID - UseGoldType = 0 #(BYTE UseGoldType)//默认用金子/金票 类型为MoneyType + UseGoldType = 0 #(BYTE UseGoldType)//默认用金子/金票 类型为MoneyType UseSilverType = 0 #(BYTE UseSilverType)//默认用的银子/银票 AttackMode = 0 #(BYTE AttackMode)//攻击模式 LastWeekOnlineTime = 0 #(DWORD LastWeekOnlineTime)//上周在线时间 @@ -11859,6 +12483,7 @@ ExAttr18 = 0 #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr19 = 0 #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 + HPEx = 0 #(DWORD HPEx)//当前血量 超过E的记录 data = None def __init__(self): @@ -11964,6 +12589,7 @@ self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -12065,6 +12691,7 @@ self.ExAttr18 = 0 self.ExAttr19 = 0 self.ExAttr20 = 0 + self.HPEx = 0 return def GetLength(self): @@ -12157,6 +12784,7 @@ length += 4 length += 4 length += 15 + length += 4 length += 4 length += 4 length += 4 @@ -12264,6 +12892,7 @@ data = CommFunc.WriteDWORD(data, self.ExAttr18) data = CommFunc.WriteDWORD(data, self.ExAttr19) data = CommFunc.WriteDWORD(data, self.ExAttr20) + data = CommFunc.WriteDWORD(data, self.HPEx) return data def OutputString(self): @@ -12362,7 +12991,8 @@ ExAttr17:%d, ExAttr18:%d, ExAttr19:%d, - ExAttr20:%d + ExAttr20:%d, + HPEx:%d '''\ %( self.Head.OutputString(), @@ -12459,7 +13089,8 @@ self.ExAttr17, self.ExAttr18, self.ExAttr19, - self.ExAttr20 + self.ExAttr20, + self.HPEx ) return DumpString @@ -13539,6 +14170,74 @@ m_NAtagMCAllEquipAttrActiveInfo=tagMCAllEquipAttrActiveInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAllEquipAttrActiveInfo.Head.Cmd,m_NAtagMCAllEquipAttrActiveInfo.Head.SubCmd))] = m_NAtagMCAllEquipAttrActiveInfo + + +#------------------------------------------------------ +# A3 C3 竞技场玩家信息 #tagMCArenaPlayerInfo + +class tagMCArenaPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsReset", c_ubyte), #是否是重置的 + ("Score", c_int), #当前积分 + ("BattleCountToday", c_ubyte), #今日已挑战次数 + ("MatchRefreshCount", c_ubyte), #当前已刷新匹配列表次数,每次挑战后会重置 + ("ItemAddBattleCountToday", c_ubyte), #今日已使用物品增加的挑战次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0xC3 + 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 = 0xC3 + self.IsReset = 0 + self.Score = 0 + self.BattleCountToday = 0 + self.MatchRefreshCount = 0 + self.ItemAddBattleCountToday = 0 + return + + def GetLength(self): + return sizeof(tagMCArenaPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C3 竞技场玩家信息 //tagMCArenaPlayerInfo: + Cmd:%s, + SubCmd:%s, + IsReset:%d, + Score:%d, + BattleCountToday:%d, + MatchRefreshCount:%d, + ItemAddBattleCountToday:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsReset, + self.Score, + self.BattleCountToday, + self.MatchRefreshCount, + self.ItemAddBattleCountToday + ) + return DumpString + + +m_NAtagMCArenaPlayerInfo=tagMCArenaPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCArenaPlayerInfo.Cmd,m_NAtagMCArenaPlayerInfo.SubCmd))] = m_NAtagMCArenaPlayerInfo #------------------------------------------------------ @@ -14945,7 +15644,7 @@ class tagMCEquipPartXLAttr(Structure): - EquipPlace = 0 #(BYTE EquipPlace)// 装备位 + EquipPlace = 0 #(BYTE EquipPlace)// 装备位 XLAttrLV = 0 #(BYTE XLAttrLV)// 洗练等级 XLAttrCnt = 0 #(BYTE XLAttrCnt)// 属性条数 XLAttrList = list() #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增 @@ -16488,6 +17187,97 @@ #------------------------------------------------------ +# A3 38 投资理财信息 #tagMCInvestInfo + +class tagMCInvestInfo(Structure): + Head = tagHead() + InvestType = 0 #(BYTE InvestType)// 投资类型 + CurDay = 0 #(WORD CurDay)// 当前天数,投资第一天为1 + ValueCount = 0 #(BYTE ValueCount) + RewardValue = list() #(vector<DWORD> RewardValue)//领奖记录值,按投资回报索引位记录是否已领取 + ProgressValue = list() #(vector<DWORD> ProgressValue)//投资相关可领取进度记录值: 9登录投资-记录已登录天数;11Boss投资-按回报索引位记录是否已击杀该boss + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x38 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.InvestType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CurDay,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.RewardValue.append(value) + for i in range(self.ValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ProgressValue.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x38 + self.InvestType = 0 + self.CurDay = 0 + self.ValueCount = 0 + self.RewardValue = list() + self.ProgressValue = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 1 + length += 4 * self.ValueCount + length += 4 * self.ValueCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.InvestType) + data = CommFunc.WriteWORD(data, self.CurDay) + data = CommFunc.WriteBYTE(data, self.ValueCount) + for i in range(self.ValueCount): + data = CommFunc.WriteDWORD(data, self.RewardValue[i]) + for i in range(self.ValueCount): + data = CommFunc.WriteDWORD(data, self.ProgressValue[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + InvestType:%d, + CurDay:%d, + ValueCount:%d, + RewardValue:%s, + ProgressValue:%s + '''\ + %( + self.Head.OutputString(), + self.InvestType, + self.CurDay, + self.ValueCount, + "...", + "..." + ) + return DumpString + + +m_NAtagMCInvestInfo=tagMCInvestInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCInvestInfo.Head.Cmd,m_NAtagMCInvestInfo.Head.SubCmd))] = m_NAtagMCInvestInfo + + +#------------------------------------------------------ # A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo class tagMCMagicWeaponInfo(Structure): @@ -17063,7 +17853,8 @@ class tagMCModuleFightPowerInfo(Structure): Head = tagHead() - TotalFightPower = 0 #(DWORD TotalFightPower)//总战斗力 + TotalFightPower = 0 #(DWORD TotalFightPower)//总战斗力,求余亿部分 + TotalFightPoweEx = 0 #(DWORD TotalFightPoweEx)//总战斗力,整除亿部分,1代表1亿 MFPCnt = 0 #(BYTE MFPCnt)//模块战斗力总数 MFPList = list() #(vector<tagMCModuleFightPower> MFPList) data = None @@ -17078,6 +17869,7 @@ self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalFightPoweEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MFPCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.MFPCnt): temMFPList = tagMCModuleFightPower() @@ -17091,6 +17883,7 @@ self.Head.Cmd = 0xA3 self.Head.SubCmd = 0xA1 self.TotalFightPower = 0 + self.TotalFightPoweEx = 0 self.MFPCnt = 0 self.MFPList = list() return @@ -17098,6 +17891,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 4 length += 4 length += 1 for i in range(self.MFPCnt): @@ -17109,6 +17903,7 @@ data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteDWORD(data, self.TotalFightPower) + data = CommFunc.WriteDWORD(data, self.TotalFightPoweEx) data = CommFunc.WriteBYTE(data, self.MFPCnt) for i in range(self.MFPCnt): data = CommFunc.WriteString(data, self.MFPList[i].GetLength(), self.MFPList[i].GetBuffer()) @@ -17118,12 +17913,14 @@ DumpString = ''' Head:%s, TotalFightPower:%d, + TotalFightPoweEx:%d, MFPCnt:%d, MFPList:%s '''\ %( self.Head.OutputString(), self.TotalFightPower, + self.TotalFightPoweEx, self.MFPCnt, "..." ) @@ -17432,7 +18229,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("Record", c_ubyte), #0-未领取 1-已领取 + ("Record", c_ubyte), #0-未领取 1-已领取 ] def __init__(self): @@ -17923,7 +18720,7 @@ StoveLV = 0 #(BYTE StoveLV)// 炼丹炉等级 StoveExp = 0 #(DWORD StoveExp)// 炼丹炉经验 ItemID = 0 #(DWORD ItemID)// 合成物品id - ItemCnt = 0 #(BYTE ItemCnt)// 丹药数量 + ItemCnt = 0 #(WORD ItemCnt)// 丹药数量 StoveCnt = 0 #(WORD StoveCnt)// 丹药数量 InfoList = list() #(vector<tagMCPlayerStoveInfo> InfoList) data = None @@ -17940,7 +18737,7 @@ self.StoveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.StoveExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) self.StoveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.StoveCnt): temInfoList = tagMCPlayerStoveInfo() @@ -17967,7 +18764,7 @@ length += 1 length += 4 length += 4 - length += 1 + length += 2 length += 2 for i in range(self.StoveCnt): length += self.InfoList[i].GetLength() @@ -17980,7 +18777,7 @@ data = CommFunc.WriteBYTE(data, self.StoveLV) data = CommFunc.WriteDWORD(data, self.StoveExp) data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteBYTE(data, self.ItemCnt) + data = CommFunc.WriteWORD(data, self.ItemCnt) data = CommFunc.WriteWORD(data, self.StoveCnt) for i in range(self.StoveCnt): data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) @@ -18756,6 +19553,7 @@ _fields_ = [ ("RecordIndex", c_ushort), #第几个记录值 每个key存31个succid 0-30为0, 31-61为1.. ("Record", c_int), #对应是否领取值 + ("PassportRecord", c_int), #通行证奖励是否领取值 ] def __init__(self): @@ -18770,6 +19568,7 @@ def Clear(self): self.RecordIndex = 0 self.Record = 0 + self.PassportRecord = 0 return def GetLength(self): @@ -18781,11 +19580,13 @@ def OutputString(self): DumpString = '''//A3 42 成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList: RecordIndex:%d, - Record:%d + Record:%d, + PassportRecord:%d '''\ %( self.RecordIndex, - self.Record + self.Record, + self.PassportRecord ) return DumpString @@ -19227,7 +20028,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("LV", c_ubyte), #等阶 - ("EatItemCount", c_ushort), #当前阶已吃丹个数 + ("EatItemCount", c_int), #当前阶已吃丹个数 ("SkinPlusState", c_int), #幻化激活状态,按位存储是否激活,幻化编号ID对应位 ] @@ -20070,6 +20871,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("HasSendGold", c_int), # 已用额度 + ("ServerGrabCnt", c_int), # 全服红包已抢次数 ] def __init__(self): @@ -20087,6 +20889,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x05 self.HasSendGold = 0 + self.ServerGrabCnt = 0 return def GetLength(self): @@ -20099,12 +20902,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 @@ -20967,6 +21772,58 @@ m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo + + +#------------------------------------------------------ +# A7 20 创角奖励领奖状态 #tagMCCreateRoleAwardState + +class tagMCCreateRoleAwardState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GetState", c_ubyte), # 是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA7 + self.SubCmd = 0x20 + 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 = 0xA7 + self.SubCmd = 0x20 + self.GetState = 0 + return + + def GetLength(self): + return sizeof(tagMCCreateRoleAwardState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 20 创角奖励领奖状态 //tagMCCreateRoleAwardState: + Cmd:%s, + SubCmd:%s, + GetState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GetState + ) + return DumpString + + +m_NAtagMCCreateRoleAwardState=tagMCCreateRoleAwardState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCreateRoleAwardState.Cmd,m_NAtagMCCreateRoleAwardState.SubCmd))] = m_NAtagMCCreateRoleAwardState #------------------------------------------------------ @@ -22010,87 +22867,6 @@ #------------------------------------------------------ -# A7 20 缥缈任务信息 #tagMCPiaomiaoTaskInfo - -class tagMCPiaomiaoTaskInfo(Structure): - Head = tagHead() - FinishCount = 0 #(BYTE FinishCount)//今日已完成次数 - RefreshCount = 0 #(BYTE RefreshCount)//今日已刷新次数 - TaskCount = 0 #(BYTE TaskCount) - TaskIDList = list() #(vector<DWORD> TaskIDList)//刷新任务ID列表[taskID,...] - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA7 - self.Head.SubCmd = 0x20 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.FinishCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RefreshCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.TaskCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.TaskIDList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA7 - self.Head.SubCmd = 0x20 - self.FinishCount = 0 - self.RefreshCount = 0 - self.TaskCount = 0 - self.TaskIDList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 1 - length += 4 * self.TaskCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.FinishCount) - data = CommFunc.WriteBYTE(data, self.RefreshCount) - data = CommFunc.WriteBYTE(data, self.TaskCount) - for i in range(self.TaskCount): - data = CommFunc.WriteDWORD(data, self.TaskIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - FinishCount:%d, - RefreshCount:%d, - TaskCount:%d, - TaskIDList:%s - '''\ - %( - self.Head.OutputString(), - self.FinishCount, - self.RefreshCount, - self.TaskCount, - "..." - ) - return DumpString - - -m_NAtagMCPiaomiaoTaskInfo=tagMCPiaomiaoTaskInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPiaomiaoTaskInfo.Head.Cmd,m_NAtagMCPiaomiaoTaskInfo.Head.SubCmd))] = m_NAtagMCPiaomiaoTaskInfo - - -#------------------------------------------------------ # A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult class tagSCPlayerEquipCacheResult(Structure): @@ -22098,7 +22874,7 @@ PlayerID = 0 #(DWORD PlayerID)//玩家ID EquipClassLV = 0 #(BYTE EquipClassLV) ItemDataSize = 0 #(WORD ItemDataSize) - ItemData = "" #(String ItemData)//物品记录 + ItemData = "" #(String ItemData)//物品记录 data = None def __init__(self): @@ -22397,7 +23173,7 @@ ItemDataSize = 0 #(DWORD ItemDataSize) ItemData = "" #(String ItemData)//物品记录 PlusDataSize = 0 #(DWORD PlusDataSize) - PlusData = "" #(String PlusData)//扩展记录 + PlusData = "" #(String PlusData)//扩展记录 data = None def __init__(self): @@ -22545,6 +23321,7 @@ _fields_ = [ ("RefreshType", c_ubyte), ("Value", c_int), + ("ValueEx", c_int), ] def __init__(self): @@ -22559,6 +23336,7 @@ def Clear(self): self.RefreshType = 0 self.Value = 0 + self.ValueEx = 0 return def GetLength(self): @@ -22570,11 +23348,13 @@ def OutputString(self): DumpString = '''//A7 09 周围对象刷新合并包 //tagObjInfoListRefresh: RefreshType:%d, - Value:%d + Value:%d, + ValueEx:%d '''\ %( self.RefreshType, - self.Value + self.Value, + self.ValueEx ) return DumpString @@ -22894,7 +23674,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("MakeType", c_ubyte), #类型 TMakeItemType + ("MakeType", c_ubyte), #类型 TMakeItemType ("Result", c_ubyte), #是否成功 ("MakeItemID", c_int), #合成的物品ID ] @@ -23511,6 +24291,600 @@ #------------------------------------------------------ +# AA 40 集字活动信息 #tagMCActCollectWordsInfo + +class tagMCActCollectWordsNeedItem(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(tagMCActCollectWordsNeedItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 40 集字活动信息 //tagMCActCollectWordsInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActCollectWordsExchangeItem(Structure): + ExchangeNum = 0 #(BYTE ExchangeNum)//兑换编号 + ExchangeCountMax = 0 #(WORD ExchangeCountMax)//最大兑换次数,0不限制 + ItemID = 0 #(DWORD ItemID)//目标物品 + ItemCount = 0 #(WORD ItemCount) + IsBind = 0 #(BYTE IsBind) + NeedItemCount = 0 #(BYTE NeedItemCount) + NeedItemList = list() #(vector<tagMCActCollectWordsNeedItem> NeedItemList)// 所需物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ExchangeNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExchangeCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.NeedItemCount): + temNeedItemList = tagMCActCollectWordsNeedItem() + _pos = temNeedItemList.ReadData(_lpData, _pos) + self.NeedItemList.append(temNeedItemList) + return _pos + + def Clear(self): + self.ExchangeNum = 0 + self.ExchangeCountMax = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + self.NeedItemCount = 0 + self.NeedItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 4 + length += 2 + length += 1 + length += 1 + for i in range(self.NeedItemCount): + length += self.NeedItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ExchangeNum) + data = CommFunc.WriteWORD(data, self.ExchangeCountMax) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteBYTE(data, self.IsBind) + data = CommFunc.WriteBYTE(data, self.NeedItemCount) + for i in range(self.NeedItemCount): + data = CommFunc.WriteString(data, self.NeedItemList[i].GetLength(), self.NeedItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + ExchangeNum:%d, + ExchangeCountMax:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d, + NeedItemCount:%d, + NeedItemList:%s + '''\ + %( + self.ExchangeNum, + self.ExchangeCountMax, + self.ItemID, + self.ItemCount, + self.IsBind, + self.NeedItemCount, + "..." + ) + return DumpString + + +class tagMCActCollectWordsInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + LastDayOnlyExchange = 0 #(BYTE LastDayOnlyExchange)//最后一天是否仅兑换 + ExchangeCount = 0 #(BYTE ExchangeCount) + ExchangeItemList = list() #(vector<tagMCActCollectWordsExchangeItem> ExchangeItemList)//兑换组合列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x40 + 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.LastDayOnlyExchange,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ExchangeCount): + temExchangeItemList = tagMCActCollectWordsExchangeItem() + _pos = temExchangeItemList.ReadData(_lpData, _pos) + self.ExchangeItemList.append(temExchangeItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x40 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.LastDayOnlyExchange = 0 + self.ExchangeCount = 0 + self.ExchangeItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.ExchangeCount): + length += self.ExchangeItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.LastDayOnlyExchange) + data = CommFunc.WriteBYTE(data, self.ExchangeCount) + for i in range(self.ExchangeCount): + data = CommFunc.WriteString(data, self.ExchangeItemList[i].GetLength(), self.ExchangeItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + LastDayOnlyExchange:%d, + ExchangeCount:%d, + ExchangeItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.LastDayOnlyExchange, + self.ExchangeCount, + "..." + ) + return DumpString + + +m_NAtagMCActCollectWordsInfo=tagMCActCollectWordsInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsInfo.Head.Cmd,m_NAtagMCActCollectWordsInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsInfo + + +#------------------------------------------------------ +# AA 41 集字活动玩家信息 #tagMCActCollectWordsPlayerInfo + +class tagMCActCollectWordsExchangeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("ExchangeNum", c_ubyte), #兑换编号 + ("ExchangeCount", 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.ExchangeNum = 0 + self.ExchangeCount = 0 + return + + def GetLength(self): + return sizeof(tagMCActCollectWordsExchangeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 41 集字活动玩家信息 //tagMCActCollectWordsPlayerInfo: + ExchangeNum:%d, + ExchangeCount:%d + '''\ + %( + self.ExchangeNum, + self.ExchangeCount + ) + return DumpString + + +class tagMCActCollectWordsPlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启 + ExchangeCount = 0 #(BYTE ExchangeCount) + ExchangeInfoList = list() #(vector<tagMCActCollectWordsExchangeInfo> ExchangeInfoList)//兑换数据列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x41 + 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.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ExchangeCount): + temExchangeInfoList = tagMCActCollectWordsExchangeInfo() + _pos = temExchangeInfoList.ReadData(_lpData, _pos) + self.ExchangeInfoList.append(temExchangeInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x41 + self.ActNum = 0 + self.ExchangeCount = 0 + self.ExchangeInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.ExchangeCount): + length += self.ExchangeInfoList[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.WriteBYTE(data, self.ExchangeCount) + for i in range(self.ExchangeCount): + data = CommFunc.WriteString(data, self.ExchangeInfoList[i].GetLength(), self.ExchangeInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + ExchangeCount:%d, + ExchangeInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.ExchangeCount, + "..." + ) + return DumpString + + +m_NAtagMCActCollectWordsPlayerInfo=tagMCActCollectWordsPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsPlayerInfo.Head.Cmd,m_NAtagMCActCollectWordsPlayerInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsPlayerInfo + + +#------------------------------------------------------ +# AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo + +class tagMCActGrowupBuyCTGItem(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(tagMCActGrowupBuyCTGItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 31 成长必买活动信息 //tagMCActGrowupBuyInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActGrowupBuyCTGInfo(Structure): + CTGID = 0 #(BYTE CTGID)// 充值表ID + GainItemCount = 0 #(BYTE GainItemCount)// 获得物品数 + GainItemList = list() #(vector<tagMCActGrowupBuyCTGItem> GainItemList)// 获得物品列表,替换充值表中的 GainItemList 字段信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.CTGID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GainItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GainItemCount): + temGainItemList = tagMCActGrowupBuyCTGItem() + _pos = temGainItemList.ReadData(_lpData, _pos) + self.GainItemList.append(temGainItemList) + return _pos + + def Clear(self): + self.CTGID = 0 + self.GainItemCount = 0 + self.GainItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.GainItemCount): + length += self.GainItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.CTGID) + data = CommFunc.WriteBYTE(data, self.GainItemCount) + for i in range(self.GainItemCount): + data = CommFunc.WriteString(data, self.GainItemList[i].GetLength(), self.GainItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + CTGID:%d, + GainItemCount:%d, + GainItemList:%s + '''\ + %( + self.CTGID, + self.GainItemCount, + "..." + ) + return DumpString + + +class tagMCActGrowupBuyGroup(Structure): + BuyCount = 0 #(BYTE BuyCount)// 循环购买礼包数 + BuyCTGIDList = list() #(vector<tagMCActGrowupBuyCTGInfo> BuyCTGIDList)// 循环购买礼包充值ID信息列表 + PlayerBuyIndex = 0 #(BYTE PlayerBuyIndex)// 玩家当前可购买的礼包充值ID在列表中索引 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BuyCount): + temBuyCTGIDList = tagMCActGrowupBuyCTGInfo() + _pos = temBuyCTGIDList.ReadData(_lpData, _pos) + self.BuyCTGIDList.append(temBuyCTGIDList) + self.PlayerBuyIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.BuyCount = 0 + self.BuyCTGIDList = list() + self.PlayerBuyIndex = 0 + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.BuyCount): + length += self.BuyCTGIDList[i].GetLength() + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.BuyCount) + for i in range(self.BuyCount): + data = CommFunc.WriteString(data, self.BuyCTGIDList[i].GetLength(), self.BuyCTGIDList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.PlayerBuyIndex) + return data + + def OutputString(self): + DumpString = ''' + BuyCount:%d, + BuyCTGIDList:%s, + PlayerBuyIndex:%d + '''\ + %( + self.BuyCount, + "...", + self.PlayerBuyIndex + ) + return DumpString + + +class tagMCActGrowupBuyInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + GroupCount = 0 #(BYTE GroupCount)// 循环购买礼包组数 + GroupList = list() #(vector<tagMCActGrowupBuyGroup> GroupList)//循环购买礼包组列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x31 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.GroupCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GroupCount): + temGroupList = tagMCActGrowupBuyGroup() + _pos = temGroupList.ReadData(_lpData, _pos) + self.GroupList.append(temGroupList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x31 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.GroupCount = 0 + self.GroupList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.GroupCount): + length += self.GroupList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + 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.GroupCount) + for i in range(self.GroupCount): + data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + GroupCount:%d, + GroupList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.GroupCount, + "..." + ) + return DumpString + + +m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo + + +#------------------------------------------------------ # AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo class tagMCActLoginAwardAction(Structure): @@ -23938,6 +25312,966 @@ #------------------------------------------------------ +# AA 48 多日连充活动信息 #tagMCActManyDayRechargeInfo + +class tagMCActManyDayRechargeItem(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(tagMCActManyDayRechargeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 48 多日连充活动信息 //tagMCActManyDayRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActManyDayRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedRecharge = 0 #(DWORD NeedRecharge)// 单天所需充值额度 + NeedDays = 0 #(BYTE NeedDays)// 所需充值天数 + AwardItemCount = 0 #(BYTE AwardItemCount) + AwardItemList = list() #(vector<tagMCActManyDayRechargeItem> AwardItemList)// 奖励物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedRecharge,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NeedDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActManyDayRechargeItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedRecharge = 0 + self.NeedDays = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.NeedRecharge) + data = CommFunc.WriteBYTE(data, self.NeedDays) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedRecharge:%d, + NeedDays:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedRecharge, + self.NeedDays, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCActManyDayRechargeInfo(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)// 限制等级 + AwardCount = 0 #(BYTE AwardCount) + AwardList = list() #(vector<tagMCActManyDayRechargeAward> AwardList)// 奖励信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x48 + 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.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardList = tagMCActManyDayRechargeAward() + _pos = temAwardList.ReadData(_lpData, _pos) + self.AwardList.append(temAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x48 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.AwardCount = 0 + self.AwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.AwardCount): + length += self.AwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + AwardCount:%d, + AwardList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCActManyDayRechargeInfo=tagMCActManyDayRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargeInfo.Head.Cmd,m_NAtagMCActManyDayRechargeInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargeInfo + + +#------------------------------------------------------ +# AA 49 多日连充活动玩家信息 #tagMCActManyDayRechargePlayerInfo + +class tagMCActManyDayRechargePlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + Days = 0 #(BYTE Days) + DayRechargeValues = list() #(vector<DWORD> DayRechargeValues)//活动每天充值列表 + RecordCount = 0 #(BYTE RecordCount) + AwardRecord = list() #(vector<DWORD> AwardRecord)//奖励领奖记录,按奖励索引二进制位存储是否已领取 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x49 + 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.Days,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Days): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.DayRechargeValues.append(value) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.AwardRecord.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x49 + self.ActNum = 0 + self.Days = 0 + self.DayRechargeValues = list() + self.RecordCount = 0 + self.AwardRecord = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.Days + length += 1 + length += 4 * self.RecordCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.Days) + for i in range(self.Days): + data = CommFunc.WriteDWORD(data, self.DayRechargeValues[i]) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteDWORD(data, self.AwardRecord[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + Days:%d, + DayRechargeValues:%s, + RecordCount:%d, + AwardRecord:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.Days, + "...", + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagMCActManyDayRechargePlayerInfo=tagMCActManyDayRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargePlayerInfo.Head.Cmd,m_NAtagMCActManyDayRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargePlayerInfo + + +#------------------------------------------------------ +# AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo + +class tagMCActRechargePrize(Structure): + _pack_ = 1 + _fields_ = [ + ("CTGID", c_ushort), # 对应充值表充值ID + ("GoldPrize", c_int), #返利仙玉数 + ("PrizeCountLimit", 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.CTGID = 0 + self.GoldPrize = 0 + self.PrizeCountLimit = 0 + return + + def GetLength(self): + return sizeof(tagMCActRechargePrize) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 27 充值返利活动信息 //tagMCActRechargePrizeInfo: + CTGID:%d, + GoldPrize:%d, + PrizeCountLimit:%d + '''\ + %( + self.CTGID, + self.GoldPrize, + self.PrizeCountLimit + ) + return DumpString + + +class tagMCActRechargePrizeDay(Structure): + Prizes = 0 #(BYTE Prizes)// 返利档数 + PrizeInfo = list() #(vector<tagMCActRechargePrize> PrizeInfo)// 返利档信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Prizes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Prizes): + temPrizeInfo = tagMCActRechargePrize() + _pos = temPrizeInfo.ReadData(_lpData, _pos) + self.PrizeInfo.append(temPrizeInfo) + return _pos + + def Clear(self): + self.Prizes = 0 + self.PrizeInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.Prizes): + length += self.PrizeInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Prizes) + for i in range(self.Prizes): + data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Prizes:%d, + PrizeInfo:%s + '''\ + %( + self.Prizes, + "..." + ) + return DumpString + + +class tagMCActRechargePrizeInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + PrizeDays = 0 #(BYTE PrizeDays) + PrizeDayInfo = list() #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x27 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PrizeDays): + temPrizeDayInfo = tagMCActRechargePrizeDay() + _pos = temPrizeDayInfo.ReadData(_lpData, _pos) + self.PrizeDayInfo.append(temPrizeDayInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x27 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.IsDayReset = 0 + self.PrizeDays = 0 + self.PrizeDayInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.PrizeDays): + length += self.PrizeDayInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + 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.IsDayReset) + data = CommFunc.WriteBYTE(data, self.PrizeDays) + for i in range(self.PrizeDays): + data = CommFunc.WriteString(data, self.PrizeDayInfo[i].GetLength(), self.PrizeDayInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + IsDayReset:%d, + PrizeDays:%d, + PrizeDayInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.IsDayReset, + self.PrizeDays, + "..." + ) + return DumpString + + +m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo + + +#------------------------------------------------------ +# AA 29 累计充值返利仙玉活动信息 #tagMCActRechargeRebateGoldInfo + +class tagMCActRechargeRebate(Structure): + _pack_ = 1 + _fields_ = [ + ("RMBMin", c_int), # 充值RMB最小值 + ("RMBMax", c_int), # 充值RMB最大值,0代表无上限 + ("RebateRate", 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.RMBMin = 0 + self.RMBMax = 0 + self.RebateRate = 0 + return + + def GetLength(self): + return sizeof(tagMCActRechargeRebate) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 29 累计充值返利仙玉活动信息 //tagMCActRechargeRebateGoldInfo: + RMBMin:%d, + RMBMax:%d, + RebateRate:%d + '''\ + %( + self.RMBMin, + self.RMBMax, + self.RebateRate + ) + return DumpString + + +class tagMCActRechargeRebateDay(Structure): + Rebates = 0 #(BYTE Rebates)// 返利档数 + RebateInfo = list() #(vector<tagMCActRechargeRebate> RebateInfo)// 返利档信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Rebates,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Rebates): + temRebateInfo = tagMCActRechargeRebate() + _pos = temRebateInfo.ReadData(_lpData, _pos) + self.RebateInfo.append(temRebateInfo) + return _pos + + def Clear(self): + self.Rebates = 0 + self.RebateInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.Rebates): + length += self.RebateInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Rebates) + for i in range(self.Rebates): + data = CommFunc.WriteString(data, self.RebateInfo[i].GetLength(), self.RebateInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rebates:%d, + RebateInfo:%s + '''\ + %( + self.Rebates, + "..." + ) + return DumpString + + +class tagMCActRechargeRebateGoldInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + RebateDays = 0 #(BYTE RebateDays) + RebateDayInfo = list() #(vector<tagMCActRechargeRebateDay> RebateDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x29 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RebateDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RebateDays): + temRebateDayInfo = tagMCActRechargeRebateDay() + _pos = temRebateDayInfo.ReadData(_lpData, _pos) + self.RebateDayInfo.append(temRebateDayInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x29 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.IsDayReset = 0 + self.RebateDays = 0 + self.RebateDayInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.RebateDays): + length += self.RebateDayInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + 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.IsDayReset) + data = CommFunc.WriteBYTE(data, self.RebateDays) + for i in range(self.RebateDays): + data = CommFunc.WriteString(data, self.RebateDayInfo[i].GetLength(), self.RebateDayInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + IsDayReset:%d, + RebateDays:%d, + RebateDayInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.IsDayReset, + self.RebateDays, + "..." + ) + return DumpString + + +m_NAtagMCActRechargeRebateGoldInfo=tagMCActRechargeRebateGoldInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargeRebateGoldInfo.Head.Cmd,m_NAtagMCActRechargeRebateGoldInfo.Head.SubCmd))] = m_NAtagMCActRechargeRebateGoldInfo + + +#------------------------------------------------------ +# AA 50 单笔累充活动信息 #tagMCActSingleRechargeInfo + +class tagMCActSingleRechargeAwardItem(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(tagMCActSingleRechargeAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 50 单笔累充活动信息 //tagMCActSingleRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActSingleRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + SingleRechargeValue = 0 #(DWORD SingleRechargeValue)// 单笔所需充值额度 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItem = list() #(vector<tagMCActSingleRechargeAwardItem> AwardItem)// 奖励物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SingleRechargeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItem = tagMCActSingleRechargeAwardItem() + _pos = temAwardItem.ReadData(_lpData, _pos) + self.AwardItem.append(temAwardItem) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.SingleRechargeValue = 0 + self.AwardItemCount = 0 + self.AwardItem = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItem[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.SingleRechargeValue) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + SingleRechargeValue:%d, + AwardItemCount:%d, + AwardItem:%s + '''\ + %( + self.AwardIndex, + self.SingleRechargeValue, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCActSingleRechargeInfo(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)// 限制等级 + AwardRuleType = 0 #(BYTE AwardRuleType)// 领奖规则类型 0-向下兼容;1-匹配最高档;2-精确匹配对应档次 + AwardCount = 0 #(BYTE AwardCount)// 奖励档数 + AwardInfo = list() #(vector<tagMCActSingleRechargeAward> AwardInfo)// 奖励档信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x50 + 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.AwardRuleType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardInfo = tagMCActSingleRechargeAward() + _pos = temAwardInfo.ReadData(_lpData, _pos) + self.AwardInfo.append(temAwardInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x50 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.AwardRuleType = 0 + self.AwardCount = 0 + self.AwardInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.AwardCount): + length += self.AwardInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.AwardRuleType) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + AwardRuleType:%d, + AwardCount:%d, + AwardInfo:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.AwardRuleType, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCActSingleRechargeInfo=tagMCActSingleRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargeInfo.Head.Cmd,m_NAtagMCActSingleRechargeInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargeInfo + + +#------------------------------------------------------ +# AA 51 单笔累充活动玩家信息 #tagMCActSingleRechargePlayerInfo + +class tagMCActSingleRechargePlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 + ("CanAwardValue", c_int), #可否领奖记录,按奖励索引二进制位存储是否可领取 + ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x51 + 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 = 0x51 + self.ActNum = 0 + self.CanAwardValue = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCActSingleRechargePlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 51 单笔累充活动玩家信息 //tagMCActSingleRechargePlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + CanAwardValue:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.CanAwardValue, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCActSingleRechargePlayerInfo=tagMCActSingleRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Cmd,m_NAtagMCActSingleRechargePlayerInfo.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo + + +#------------------------------------------------------ # AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo class tagMCTotalRechargeAwardItem(Structure): @@ -24099,6 +26433,7 @@ class tagMCActTotalRechargeInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 @@ -24116,6 +26451,7 @@ 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) @@ -24132,6 +26468,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x1D + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.IsDayReset = 0 @@ -24143,6 +26480,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 1 @@ -24156,6 +26494,7 @@ 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) @@ -24168,6 +26507,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, IsDayReset:%d, @@ -24177,6 +26517,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.IsDayReset, @@ -24189,6 +26530,315 @@ m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo + + +#------------------------------------------------------ +# 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次, ...] + UseGoldPrizeCount = 0 #(BYTE UseGoldPrizeCount) + UseGoldPrizeList = list() #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第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.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.UseGoldPrizeCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.UseGoldPrizeList.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.UseGoldPrizeCount = 0 + self.UseGoldPrizeList = 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 += 4 * self.UseGoldPrizeCount + 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.UseGoldPrizeCount) + for i in range(self.UseGoldPrizeCount): + data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[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, + UseGoldPrizeCount:%d, + UseGoldPrizeList:%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.UseGoldPrizeCount, + "...", + 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), #累计充值额度 + ("UseGoldTotal", 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.UseGoldTotal = 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, + UseGoldTotal:%d, + TurnItemState:%d, + GetItemNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.CanUseCount, + self.CTGTotal, + self.UseGoldTotal, + self.TurnItemState, + self.GetItemNum + ) + return DumpString + + +m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo #------------------------------------------------------ @@ -24761,13 +27411,434 @@ #------------------------------------------------------ +# AA 32 跨服充值排行活动信息 #tagMCCACTGBillboardInfo + +class tagMCCACTGBillboardAwardItem(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(tagMCCACTGBillboardAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 32 跨服充值排行活动信息 //tagMCCACTGBillboardInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCACTGBillboardDabiao(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedRMB = 0 #(DWORD NeedRMB)// 所需充值RMB + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCACTGBillboardAwardItem> AwardItemList)// 奖励物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCCACTGBillboardAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedRMB = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.NeedRMB) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedRMB:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedRMB, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCCACTGBillboardOrder(Structure): + OrderA = 0 #(BYTE OrderA)// 名次A + OrderB = 0 #(BYTE OrderB)// 至名次B + NeedRMB = 0 #(DWORD NeedRMB)// 所需充值RMB,未达标的该名次空,排名后面的玩家向下顺延 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCACTGBillboardAwardItem> AwardItemList)// 奖励物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OrderA,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderB,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCCACTGBillboardAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.OrderA = 0 + self.OrderB = 0 + self.NeedRMB = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 4 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.OrderA) + data = CommFunc.WriteBYTE(data, self.OrderB) + data = CommFunc.WriteDWORD(data, self.NeedRMB) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + OrderA:%d, + OrderB:%d, + NeedRMB:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.OrderA, + self.OrderB, + self.NeedRMB, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCCACTGBillboardTempInfo(Structure): + TemplateID = 0 #(BYTE TemplateID)// 活动模板ID + DabiaoAwardCount = 0 #(BYTE DabiaoAwardCount)// 达标奖励档数 + DabiaoAwardInfo = list() #(vector<tagMCCACTGBillboardDabiao> DabiaoAwardInfo)// 达标奖励信息 + OrderAwardCount = 0 #(BYTE OrderAwardCount)// 排行奖励档数 + OrderAwardInfo = list() #(vector<tagMCCACTGBillboardOrder> OrderAwardInfo)// 排行奖励信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.TemplateID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.DabiaoAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DabiaoAwardCount): + temDabiaoAwardInfo = tagMCCACTGBillboardDabiao() + _pos = temDabiaoAwardInfo.ReadData(_lpData, _pos) + self.DabiaoAwardInfo.append(temDabiaoAwardInfo) + self.OrderAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.OrderAwardCount): + temOrderAwardInfo = tagMCCACTGBillboardOrder() + _pos = temOrderAwardInfo.ReadData(_lpData, _pos) + self.OrderAwardInfo.append(temOrderAwardInfo) + return _pos + + def Clear(self): + self.TemplateID = 0 + self.DabiaoAwardCount = 0 + self.DabiaoAwardInfo = list() + self.OrderAwardCount = 0 + self.OrderAwardInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.DabiaoAwardCount): + length += self.DabiaoAwardInfo[i].GetLength() + length += 1 + for i in range(self.OrderAwardCount): + length += self.OrderAwardInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.TemplateID) + data = CommFunc.WriteBYTE(data, self.DabiaoAwardCount) + for i in range(self.DabiaoAwardCount): + data = CommFunc.WriteString(data, self.DabiaoAwardInfo[i].GetLength(), self.DabiaoAwardInfo[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.OrderAwardCount) + for i in range(self.OrderAwardCount): + data = CommFunc.WriteString(data, self.OrderAwardInfo[i].GetLength(), self.OrderAwardInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + TemplateID:%d, + DabiaoAwardCount:%d, + DabiaoAwardInfo:%s, + OrderAwardCount:%d, + OrderAwardInfo:%s + '''\ + %( + self.TemplateID, + self.DabiaoAwardCount, + "...", + self.OrderAwardCount, + "..." + ) + return DumpString + + +class tagMCCACTGBillboardInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + GroupValue1 = 0 #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + TemplateID = 0 #(BYTE TemplateID)// 当前活动模板ID + TemplateCount = 0 #(BYTE TemplateCount) + TempInfo = list() #(vector<tagMCCACTGBillboardTempInfo> TempInfo)// 模板信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x32 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) + self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.TemplateID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TemplateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TemplateCount): + temTempInfo = tagMCCACTGBillboardTempInfo() + _pos = temTempInfo.ReadData(_lpData, _pos) + self.TempInfo.append(temTempInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x32 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.GroupValue1 = 0 + self.StartDate = "" + self.EndtDate = "" + self.TemplateID = 0 + self.TemplateCount = 0 + self.TempInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 10 + length += 10 + length += 1 + length += 1 + for i in range(self.TemplateCount): + length += self.TempInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteBYTE(data, self.GroupValue1) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.TemplateID) + data = CommFunc.WriteBYTE(data, self.TemplateCount) + for i in range(self.TemplateCount): + data = CommFunc.WriteString(data, self.TempInfo[i].GetLength(), self.TempInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + GroupValue1:%d, + StartDate:%s, + EndtDate:%s, + TemplateID:%d, + TemplateCount:%d, + TempInfo:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.GroupValue1, + self.StartDate, + self.EndtDate, + self.TemplateID, + self.TemplateCount, + "..." + ) + return DumpString + + +m_NAtagMCCACTGBillboardInfo=tagMCCACTGBillboardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCACTGBillboardInfo.Head.Cmd,m_NAtagMCCACTGBillboardInfo.Head.SubCmd))] = m_NAtagMCCACTGBillboardInfo + + +#------------------------------------------------------ +# AA 33 跨服充值排行活动玩家信息 #tagMCCACTGBillboardPlayerInfo + +class tagMCCACTGBillboardPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CTGRMBTotal", c_int), # 活动已累计充值RMB + ("DabiaoAwardRecord", c_int), # 达标奖励记录,与达标奖励索引位或运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x33 + 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 = 0x33 + self.CTGRMBTotal = 0 + self.DabiaoAwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCCACTGBillboardPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 33 跨服充值排行活动玩家信息 //tagMCCACTGBillboardPlayerInfo: + Cmd:%s, + SubCmd:%s, + CTGRMBTotal:%d, + DabiaoAwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CTGRMBTotal, + self.DabiaoAwardRecord + ) + return DumpString + + +m_NAtagMCCACTGBillboardPlayerInfo=tagMCCACTGBillboardPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCACTGBillboardPlayerInfo.Cmd,m_NAtagMCCACTGBillboardPlayerInfo.SubCmd))] = m_NAtagMCCACTGBillboardPlayerInfo + + +#------------------------------------------------------ # AA 09 消费返利活动信息 #tagMCCostRebateInfo class tagMCCostRebateAwardItem(Structure): _pack_ = 1 _fields_ = [ ("ItemID", c_int), - ("ItemCount", c_ushort), + ("ItemCount", c_int), ("IsBind", c_ubyte), ] @@ -24922,6 +27993,7 @@ class tagMCCostRebateInfo(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)//是否每天重置 @@ -24939,6 +28011,7 @@ 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) @@ -24955,6 +28028,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x09 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.IsDayReset = 0 @@ -24966,6 +28040,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 1 @@ -24979,6 +28054,7 @@ 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) @@ -24991,6 +28067,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, IsDayReset:%d, @@ -25000,6 +28077,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.IsDayReset, @@ -25022,6 +28100,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 ("CostGoldTotal", c_int), #本次活动已累计消费仙玉数 ("AwardRecord", c_int), #返利奖励领奖记录,按奖励索引二进制位存储是否已领取 ] @@ -25040,6 +28119,7 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x10 + self.ActNum = 0 self.CostGoldTotal = 0 self.AwardRecord = 0 return @@ -25054,12 +28134,14 @@ DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo: Cmd:%s, SubCmd:%s, + ActNum:%d, CostGoldTotal:%d, AwardRecord:%d '''\ %( self.Cmd, self.SubCmd, + self.ActNum, self.CostGoldTotal, self.AwardRecord ) @@ -25068,6 +28150,314 @@ m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo + + +#------------------------------------------------------ +# AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo + +class tagMCDailyGiftbagItem(Structure): + _pack_ = 1 + _fields_ = [ + ("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.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCDailyGiftbagItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 25 每日礼包活动信息 //tagMCDailyGiftbagInfo: + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCDailyGiftbag(Structure): + GiftID = 0 #(DWORD GiftID)//礼包ID,0为免费 + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo)//商品编号 + BuyCountLimit = 0 #(BYTE BuyCountLimit)//限购数 + RMB = 0 #(DWORD RMB)//所需RMB,元 + GiftItemCount = 0 #(BYTE GiftItemCount)// 礼包物品数 + ItemInfo = list() #(vector<tagMCDailyGiftbagItem> ItemInfo)// 物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) + self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftItemCount): + temItemInfo = tagMCDailyGiftbagItem() + _pos = temItemInfo.ReadData(_lpData, _pos) + self.ItemInfo.append(temItemInfo) + return _pos + + def Clear(self): + self.GiftID = 0 + self.OrderInfoLen = 0 + self.OrderInfo = "" + self.BuyCountLimit = 0 + self.RMB = 0 + self.GiftItemCount = 0 + self.ItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.OrderInfo) + length += 1 + length += 4 + length += 1 + for i in range(self.GiftItemCount): + length += self.ItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GiftID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) + data = CommFunc.WriteBYTE(data, self.BuyCountLimit) + data = CommFunc.WriteDWORD(data, self.RMB) + data = CommFunc.WriteBYTE(data, self.GiftItemCount) + for i in range(self.GiftItemCount): + data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GiftID:%d, + OrderInfoLen:%d, + OrderInfo:%s, + BuyCountLimit:%d, + RMB:%d, + GiftItemCount:%d, + ItemInfo:%s + '''\ + %( + self.GiftID, + self.OrderInfoLen, + self.OrderInfo, + self.BuyCountLimit, + self.RMB, + self.GiftItemCount, + "..." + ) + return DumpString + + +class tagMCDailyGiftbagInfo(Structure): + Head = tagHead() + LimitLV = 0 #(WORD LimitLV)// 限制等级 + GiftbagCount = 0 #(BYTE GiftbagCount)// 礼包数 + GiftbagInfo = list() #(vector<tagMCDailyGiftbag> GiftbagInfo)// 礼包信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x25 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagInfo = tagMCDailyGiftbag() + _pos = temGiftbagInfo.ReadData(_lpData, _pos) + self.GiftbagInfo.append(temGiftbagInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x25 + self.LimitLV = 0 + self.GiftbagCount = 0 + self.GiftbagInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.GiftbagCount) + for i in range(self.GiftbagCount): + data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + LimitLV:%d, + GiftbagCount:%d, + GiftbagInfo:%s + '''\ + %( + self.Head.OutputString(), + self.LimitLV, + self.GiftbagCount, + "..." + ) + return DumpString + + +m_NAtagMCDailyGiftbagInfo=tagMCDailyGiftbagInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagInfo.Head.Cmd,m_NAtagMCDailyGiftbagInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagInfo + + +#------------------------------------------------------ +# AA 26 每日礼包玩家活动信息 #tagMCDailyGiftbagPlayerInfo + +class tagMCDailyGiftbagBuyCount(Structure): + _pack_ = 1 + _fields_ = [ + ("GiftbagID", c_int), #礼包ID + ("BuyCount", 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.GiftbagID = 0 + self.BuyCount = 0 + return + + def GetLength(self): + return sizeof(tagMCDailyGiftbagBuyCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 26 每日礼包玩家活动信息 //tagMCDailyGiftbagPlayerInfo: + GiftbagID:%d, + BuyCount:%d + '''\ + %( + self.GiftbagID, + self.BuyCount + ) + return DumpString + + +class tagMCDailyGiftbagPlayerInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + BuyCountList = list() #(vector<tagMCDailyGiftbagBuyCount> BuyCountList)//礼包购买次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temBuyCountList = tagMCDailyGiftbagBuyCount() + _pos = temBuyCountList.ReadData(_lpData, _pos) + self.BuyCountList.append(temBuyCountList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x26 + self.Count = 0 + self.BuyCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.BuyCountList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + BuyCountList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCDailyGiftbagPlayerInfo=tagMCDailyGiftbagPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagPlayerInfo.Head.Cmd,m_NAtagMCDailyGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagPlayerInfo #------------------------------------------------------ @@ -25120,6 +28510,706 @@ m_NAtagMCDayFreeGoldGiftState=tagMCDayFreeGoldGiftState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDayFreeGoldGiftState.Cmd,m_NAtagMCDayFreeGoldGiftState.SubCmd))] = m_NAtagMCDayFreeGoldGiftState + + +#------------------------------------------------------ +# AA 42 节日登录奖励活动信息 #tagMCFeastLoginInfo + +class tagMCFeastLoginDayAwardItem(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(tagMCFeastLoginDayAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 42 节日登录奖励活动信息 //tagMCFeastLoginInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFeastLoginDayAward(Structure): + DayNum = 0 #(BYTE DayNum)//天编号,从1开始,活动第X天只能领对应第X天的奖励 + AwardCount = 0 #(BYTE AwardCount) + AwardItemList = list() #(vector<tagMCFeastLoginDayAwardItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardItemList = tagMCFeastLoginDayAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.DayNum = 0 + self.AwardCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.AwardCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.DayNum) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + DayNum:%d, + AwardCount:%d, + AwardItemList:%s + '''\ + %( + self.DayNum, + self.AwardCount, + "..." + ) + return DumpString + + +class tagMCFeastLoginInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + DayCount = 0 #(BYTE DayCount)// 总共几天 + DayAwardList = list() #(vector<tagMCFeastLoginDayAward> DayAwardList)//登录天奖励列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x42 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DayCount): + temDayAwardList = tagMCFeastLoginDayAward() + _pos = temDayAwardList.ReadData(_lpData, _pos) + self.DayAwardList.append(temDayAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x42 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.DayCount = 0 + self.DayAwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.DayCount): + length += self.DayAwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + 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.DayCount) + for i in range(self.DayCount): + data = CommFunc.WriteString(data, self.DayAwardList[i].GetLength(), self.DayAwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + DayCount:%d, + DayAwardList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.DayCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastLoginInfo=tagMCFeastLoginInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginInfo.Head.Cmd,m_NAtagMCFeastLoginInfo.Head.SubCmd))] = m_NAtagMCFeastLoginInfo + + +#------------------------------------------------------ +# AA 39 节日登录奖励活动玩家信息 #tagMCFeastLoginPlayerInfo + +class tagMCFeastLoginPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("LoginState", c_int), # 是否已登录,按天索引0代表第1天记录当天是否已登录 + ("LoginAward", c_int), # 是否已领取,按天索引0代表第1天记录当天是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x39 + 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 = 0x39 + self.LoginState = 0 + self.LoginAward = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastLoginPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 39 节日登录奖励活动玩家信息 //tagMCFeastLoginPlayerInfo: + Cmd:%s, + SubCmd:%s, + LoginState:%d, + LoginAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.LoginState, + self.LoginAward + ) + return DumpString + + +m_NAtagMCFeastLoginPlayerInfo=tagMCFeastLoginPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginPlayerInfo.Cmd,m_NAtagMCFeastLoginPlayerInfo.SubCmd))] = m_NAtagMCFeastLoginPlayerInfo + + +#------------------------------------------------------ +# AA 46 节日游历活动信息 #tagMCFeastTravelInfo + +class tagMCFeastTravelAwardItem(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(tagMCFeastTravelAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 46 节日游历活动信息 //tagMCFeastTravelInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFeastTravelAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)//游历奖励索引 + NeedTravelPoint = 0 #(WORD NeedTravelPoint)//单次领奖所需游历值 + AwardCountMax = 0 #(WORD AwardCountMax)//最大可领取次数,0代表不限 + AwardItemCount = 0 #(BYTE AwardItemCount)//奖励物品数 + AwardItemList = list() #(vector<tagMCFeastTravelAwardItem> AwardItemList)//奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedTravelPoint,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCFeastTravelAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedTravelPoint = 0 + self.AwardCountMax = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 2 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteWORD(data, self.NeedTravelPoint) + data = CommFunc.WriteWORD(data, self.AwardCountMax) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedTravelPoint:%d, + AwardCountMax:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedTravelPoint, + self.AwardCountMax, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCFeastTravelTask(Structure): + _pack_ = 1 + _fields_ = [ + ("TravelTaskID", c_ubyte), #游历任务ID + ("FinishNeedValue", c_ushort), #单次完成所需进度 + ("FinishTimeMax", c_ushort), #最大可完成次数,0代表不限 + ("AddTravelPoint", 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.TravelTaskID = 0 + self.FinishNeedValue = 0 + self.FinishTimeMax = 0 + self.AddTravelPoint = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastTravelTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 46 节日游历活动信息 //tagMCFeastTravelInfo: + TravelTaskID:%d, + FinishNeedValue:%d, + FinishTimeMax:%d, + AddTravelPoint:%d + '''\ + %( + self.TravelTaskID, + self.FinishNeedValue, + self.FinishTimeMax, + self.AddTravelPoint + ) + return DumpString + + +class tagMCFeastTravelInfo(Structure): + Head = tagHead() + 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点重置 + TravelTaskCount = 0 #(BYTE TravelTaskCount)// 游历任务数 + TravelTaskList = list() #(vector<tagMCFeastTravelTask> TravelTaskList)//游历任务信息列表 + TravelAwardCount = 0 #(BYTE TravelAwardCount)// 游历奖励数 + TravelAwardList = list() #(vector<tagMCFeastTravelAward> TravelAwardList)//游历奖励信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x46 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.TravelTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelTaskCount): + temTravelTaskList = tagMCFeastTravelTask() + _pos = temTravelTaskList.ReadData(_lpData, _pos) + self.TravelTaskList.append(temTravelTaskList) + self.TravelAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelAwardCount): + temTravelAwardList = tagMCFeastTravelAward() + _pos = temTravelAwardList.ReadData(_lpData, _pos) + self.TravelAwardList.append(temTravelAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x46 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.TravelTaskCount = 0 + self.TravelTaskList = list() + self.TravelAwardCount = 0 + self.TravelAwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.TravelTaskCount): + length += self.TravelTaskList[i].GetLength() + length += 1 + for i in range(self.TravelAwardCount): + length += self.TravelAwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + 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.TravelTaskCount) + for i in range(self.TravelTaskCount): + data = CommFunc.WriteString(data, self.TravelTaskList[i].GetLength(), self.TravelTaskList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TravelAwardCount) + for i in range(self.TravelAwardCount): + data = CommFunc.WriteString(data, self.TravelAwardList[i].GetLength(), self.TravelAwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + TravelTaskCount:%d, + TravelTaskList:%s, + TravelAwardCount:%d, + TravelAwardList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.TravelTaskCount, + "...", + self.TravelAwardCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastTravelInfo=tagMCFeastTravelInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastTravelInfo.Head.Cmd,m_NAtagMCFeastTravelInfo.Head.SubCmd))] = m_NAtagMCFeastTravelInfo + + +#------------------------------------------------------ +# AA 47 节日游历活动玩家信息 #tagMCFeastTravelPlayerInfo + +class tagMCFeastTravelPlayerAward(Structure): + _pack_ = 1 + _fields_ = [ + ("AwardIndex", c_ubyte), #游历奖励索引 + ("GetAwardCount", c_ubyte), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.AwardIndex = 0 + self.GetAwardCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastTravelPlayerAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 47 节日游历活动玩家信息 //tagMCFeastTravelPlayerInfo: + AwardIndex:%d, + GetAwardCount:%d + '''\ + %( + self.AwardIndex, + self.GetAwardCount + ) + return DumpString + + +class tagMCFeastTravelPlayerTask(Structure): + _pack_ = 1 + _fields_ = [ + ("TravelTaskID", c_ubyte), #游历任务ID + ("TravelValue", c_int), #当前进度值,一直累加 + ("FinishCount", c_ubyte), #当前已完成次数; 前端计算未完成次数的进度值=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.TravelTaskID = 0 + self.TravelValue = 0 + self.FinishCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastTravelPlayerTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 47 节日游历活动玩家信息 //tagMCFeastTravelPlayerInfo: + TravelTaskID:%d, + TravelValue:%d, + FinishCount:%d + '''\ + %( + self.TravelTaskID, + self.TravelValue, + self.FinishCount + ) + return DumpString + + +class tagMCFeastTravelPlayerInfo(Structure): + Head = tagHead() + TravelPoint = 0 #(DWORD TravelPoint)//当前总游历值,一直累加,不会扣的 + TravelPlayerTaskCount = 0 #(BYTE TravelPlayerTaskCount)// 游历任务数,不一定有同步,有同步数据则替换即可 + TravelPlayerTaskList = list() #(vector<tagMCFeastTravelPlayerTask> TravelPlayerTaskList)//游历任务信息列表 + TravelPlayerAwardCount = 0 #(BYTE TravelPlayerAwardCount)// 游历奖励数,不一定有同步,有同步数据则替换即可 + TravelPlayerAwardList = list() #(vector<tagMCFeastTravelPlayerAward> TravelPlayerAwardList)//游历奖励信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x47 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TravelPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TravelPlayerTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelPlayerTaskCount): + temTravelPlayerTaskList = tagMCFeastTravelPlayerTask() + _pos = temTravelPlayerTaskList.ReadData(_lpData, _pos) + self.TravelPlayerTaskList.append(temTravelPlayerTaskList) + self.TravelPlayerAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelPlayerAwardCount): + temTravelPlayerAwardList = tagMCFeastTravelPlayerAward() + _pos = temTravelPlayerAwardList.ReadData(_lpData, _pos) + self.TravelPlayerAwardList.append(temTravelPlayerAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x47 + self.TravelPoint = 0 + self.TravelPlayerTaskCount = 0 + self.TravelPlayerTaskList = list() + self.TravelPlayerAwardCount = 0 + self.TravelPlayerAwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.TravelPlayerTaskCount): + length += self.TravelPlayerTaskList[i].GetLength() + length += 1 + for i in range(self.TravelPlayerAwardCount): + length += self.TravelPlayerAwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TravelPoint) + data = CommFunc.WriteBYTE(data, self.TravelPlayerTaskCount) + for i in range(self.TravelPlayerTaskCount): + data = CommFunc.WriteString(data, self.TravelPlayerTaskList[i].GetLength(), self.TravelPlayerTaskList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TravelPlayerAwardCount) + for i in range(self.TravelPlayerAwardCount): + data = CommFunc.WriteString(data, self.TravelPlayerAwardList[i].GetLength(), self.TravelPlayerAwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TravelPoint:%d, + TravelPlayerTaskCount:%d, + TravelPlayerTaskList:%s, + TravelPlayerAwardCount:%d, + TravelPlayerAwardList:%s + '''\ + %( + self.Head.OutputString(), + self.TravelPoint, + self.TravelPlayerTaskCount, + "...", + self.TravelPlayerAwardCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastTravelPlayerInfo=tagMCFeastTravelPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastTravelPlayerInfo.Head.Cmd,m_NAtagMCFeastTravelPlayerInfo.Head.SubCmd))] = m_NAtagMCFeastTravelPlayerInfo #------------------------------------------------------ @@ -25635,6 +29725,421 @@ #------------------------------------------------------ +# AA 43 节日祝福活动信息 #tagMCFeastWishInfo + +class tagMCFeastWishBottleItem(Structure): + _pack_ = 1 + _fields_ = [ + ("RecordIndex", c_ubyte), #物品索引,用于选择及记录是否已选择 + ("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.RecordIndex = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastWishBottleItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 43 节日祝福活动信息 //tagMCFeastWishInfo: + RecordIndex:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.RecordIndex, + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFeastWishBottleInfo(Structure): + BottleNum = 0 #(BYTE BottleNum)//瓶子编号 + NeedWishValue = 0 #(WORD NeedWishValue)//单次领奖所需祝福值 + ChooseTimeMax = 0 #(BYTE ChooseTimeMax)//最大可领奖次数 + ChoosePrizeCount = 0 #(BYTE ChoosePrizeCount)//可选择奖励个数 + ChoosePrizeList = list() #(vector<tagMCFeastWishBottleItem> ChoosePrizeList)// 选择奖励物品列表,已选过的无法再选 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BottleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedWishValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ChooseTimeMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ChoosePrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ChoosePrizeCount): + temChoosePrizeList = tagMCFeastWishBottleItem() + _pos = temChoosePrizeList.ReadData(_lpData, _pos) + self.ChoosePrizeList.append(temChoosePrizeList) + return _pos + + def Clear(self): + self.BottleNum = 0 + self.NeedWishValue = 0 + self.ChooseTimeMax = 0 + self.ChoosePrizeCount = 0 + self.ChoosePrizeList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.ChoosePrizeCount): + length += self.ChoosePrizeList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.BottleNum) + data = CommFunc.WriteWORD(data, self.NeedWishValue) + data = CommFunc.WriteBYTE(data, self.ChooseTimeMax) + data = CommFunc.WriteBYTE(data, self.ChoosePrizeCount) + for i in range(self.ChoosePrizeCount): + data = CommFunc.WriteString(data, self.ChoosePrizeList[i].GetLength(), self.ChoosePrizeList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + BottleNum:%d, + NeedWishValue:%d, + ChooseTimeMax:%d, + ChoosePrizeCount:%d, + ChoosePrizeList:%s + '''\ + %( + self.BottleNum, + self.NeedWishValue, + self.ChooseTimeMax, + self.ChoosePrizeCount, + "..." + ) + return DumpString + + +class tagMCFeastWishInfo(Structure): + Head = tagHead() + 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点重置 + WishPoolShowCount = 0 #(BYTE WishPoolShowCount)//祝福池展示物品数 + WishPoolShowItemList = list() #(vector<DWORD> WishPoolShowItemList)//祝福池展示物品ID列表 + BottleCount = 0 #(BYTE BottleCount)// 祝福瓶个数 + BottleInfoList = list() #(vector<tagMCFeastWishBottleInfo> BottleInfoList)// 祝福瓶信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x43 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.WishPoolShowCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WishPoolShowCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.WishPoolShowItemList.append(value) + self.BottleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BottleCount): + temBottleInfoList = tagMCFeastWishBottleInfo() + _pos = temBottleInfoList.ReadData(_lpData, _pos) + self.BottleInfoList.append(temBottleInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x43 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.WishPoolShowCount = 0 + self.WishPoolShowItemList = list() + self.BottleCount = 0 + self.BottleInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + length += 4 * self.WishPoolShowCount + length += 1 + for i in range(self.BottleCount): + length += self.BottleInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + 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.WishPoolShowCount) + for i in range(self.WishPoolShowCount): + data = CommFunc.WriteDWORD(data, self.WishPoolShowItemList[i]) + data = CommFunc.WriteBYTE(data, self.BottleCount) + for i in range(self.BottleCount): + data = CommFunc.WriteString(data, self.BottleInfoList[i].GetLength(), self.BottleInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + WishPoolShowCount:%d, + WishPoolShowItemList:%s, + BottleCount:%d, + BottleInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.WishPoolShowCount, + "...", + self.BottleCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastWishInfo=tagMCFeastWishInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWishInfo.Head.Cmd,m_NAtagMCFeastWishInfo.Head.SubCmd))] = m_NAtagMCFeastWishInfo + + +#------------------------------------------------------ +# AA 44 节日祝福活动玩家信息 #tagMCFeastWishPlayerInfo + +class tagMCFeastWishPlayerBottle(Structure): + _pack_ = 1 + _fields_ = [ + ("BottleNum", c_ubyte), #瓶子编号 + ("WishValue", c_ushort), #当前可用祝福值 + ("ChooseRecord", c_int), #已选物品索引记录,与记录索引位运算判断是否已选择;累计已选择次数前端自己计算,通过该值可算出 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.BottleNum = 0 + self.WishValue = 0 + self.ChooseRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastWishPlayerBottle) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 44 节日祝福活动玩家信息 //tagMCFeastWishPlayerInfo: + BottleNum:%d, + WishValue:%d, + ChooseRecord:%d + '''\ + %( + self.BottleNum, + self.WishValue, + self.ChooseRecord + ) + return DumpString + + +class tagMCFeastWishPlayerInfo(Structure): + Head = tagHead() + BottleCount = 0 #(BYTE BottleCount)// 祝福瓶个数 + PlayerBottleInfo = list() #(vector<tagMCFeastWishPlayerBottle> PlayerBottleInfo)// 祝福瓶信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x44 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.BottleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BottleCount): + temPlayerBottleInfo = tagMCFeastWishPlayerBottle() + _pos = temPlayerBottleInfo.ReadData(_lpData, _pos) + self.PlayerBottleInfo.append(temPlayerBottleInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x44 + self.BottleCount = 0 + self.PlayerBottleInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.BottleCount): + length += self.PlayerBottleInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BottleCount) + for i in range(self.BottleCount): + data = CommFunc.WriteString(data, self.PlayerBottleInfo[i].GetLength(), self.PlayerBottleInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + BottleCount:%d, + PlayerBottleInfo:%s + '''\ + %( + self.Head.OutputString(), + self.BottleCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastWishPlayerInfo=tagMCFeastWishPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWishPlayerInfo.Head.Cmd,m_NAtagMCFeastWishPlayerInfo.Head.SubCmd))] = m_NAtagMCFeastWishPlayerInfo + + +#------------------------------------------------------ +# AA 45 节日祝福祝福结果 #tagMCFeastWishResult + +class tagMCFeastWishResult(Structure): + Head = tagHead() + AddWishValue = 0 #(WORD AddWishValue)// 本次增加的祝福值 + WishResultLen = 0 #(WORD WishResultLen) + WishResult = "" #(String WishResult)// 获得物品结果[[物品ID,个数,是否绑定], ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x45 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AddWishValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.WishResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.WishResult,_pos = CommFunc.ReadString(_lpData, _pos,self.WishResultLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x45 + self.AddWishValue = 0 + self.WishResultLen = 0 + self.WishResult = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 2 + length += len(self.WishResult) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.AddWishValue) + data = CommFunc.WriteWORD(data, self.WishResultLen) + data = CommFunc.WriteString(data, self.WishResultLen, self.WishResult) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AddWishValue:%d, + WishResultLen:%d, + WishResult:%s + '''\ + %( + self.Head.OutputString(), + self.AddWishValue, + self.WishResultLen, + self.WishResult + ) + return DumpString + + +m_NAtagMCFeastWishResult=tagMCFeastWishResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWishResult.Head.Cmd,m_NAtagMCFeastWishResult.Head.SubCmd))] = m_NAtagMCFeastWishResult + + +#------------------------------------------------------ # AA 02 首充信息 #tagMCFirstGoldInfo class tagMCFirstGoldInfo(Structure): @@ -25985,6 +30490,7 @@ class tagMCFlashGiftbagInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 @@ -26005,6 +30511,7 @@ 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -26027,6 +30534,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x12 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.AdvanceMinutes = 0 @@ -26041,6 +30549,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 2 @@ -26058,6 +30567,7 @@ 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.AdvanceMinutes) @@ -26074,6 +30584,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, AdvanceMinutes:%d, @@ -26086,6 +30597,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.AdvanceMinutes, @@ -26147,6 +30659,7 @@ class tagMCFlashGiftbagPlayerInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 Count = 0 #(BYTE Count) BuyCountList = list() #(vector<tagMCFlashGiftbagBuyCount> BuyCountList)//礼包购买次数信息 data = None @@ -26160,6 +30673,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.Count): temBuyCountList = tagMCFlashGiftbagBuyCount() @@ -26172,6 +30686,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x13 + self.ActNum = 0 self.Count = 0 self.BuyCountList = list() return @@ -26179,6 +30694,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 1 for i in range(self.Count): length += self.BuyCountList[i].GetLength() @@ -26188,6 +30704,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteBYTE(data, self.Count) for i in range(self.Count): data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer()) @@ -26196,11 +30713,13 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, Count:%d, BuyCountList:%s '''\ %( self.Head.OutputString(), + self.ActNum, self.Count, "..." ) @@ -26255,6 +30774,7 @@ class tagMCFlashSaleAppointmentInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 IsAll = 0 #(BYTE IsAll)// 是否全部 GoodsCount = 0 #(WORD GoodsCount)// 商品数 GoodsList = list() #(vector<tagMCFlashSaleAppointmentState> GoodsList)// 预约的商品 @@ -26269,6 +30789,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GoodsCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.GoodsCount): @@ -26282,6 +30803,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x18 + self.ActNum = 0 self.IsAll = 0 self.GoodsCount = 0 self.GoodsList = list() @@ -26290,6 +30812,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 1 length += 2 for i in range(self.GoodsCount): @@ -26300,6 +30823,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteBYTE(data, self.IsAll) data = CommFunc.WriteWORD(data, self.GoodsCount) for i in range(self.GoodsCount): @@ -26309,12 +30833,14 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, IsAll:%d, GoodsCount:%d, GoodsList:%s '''\ %( self.Head.OutputString(), + self.ActNum, self.IsAll, self.GoodsCount, "..." @@ -26507,6 +31033,7 @@ class tagMCFlashSaleInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 @@ -26527,6 +31054,7 @@ 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -26549,6 +31077,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x17 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.AdvanceMinutes = 0 @@ -26563,6 +31092,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 2 @@ -26580,6 +31110,7 @@ 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.AdvanceMinutes) @@ -26596,6 +31127,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, AdvanceMinutes:%d, @@ -26608,6 +31140,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.AdvanceMinutes, @@ -27015,6 +31548,218 @@ #------------------------------------------------------ +# AA 04 创角在线充值特惠信息 #tagMCOnlineRechargeTH + +class tagMCOnlineRechargeTH(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("AwardState", c_ubyte), #是否已领取奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x04 + 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 = 0x04 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCOnlineRechargeTH) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 04 创角在线充值特惠信息 //tagMCOnlineRechargeTH: + Cmd:%s, + SubCmd:%s, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.AwardState + ) + return DumpString + + +m_NAtagMCOnlineRechargeTH=tagMCOnlineRechargeTH() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlineRechargeTH.Cmd,m_NAtagMCOnlineRechargeTH.SubCmd))] = m_NAtagMCOnlineRechargeTH + + +#------------------------------------------------------ +# AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo + +class tagMCRechargePrizeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("CTGID", c_ushort), # 对应充值表充值ID + ("PrizeCount", 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.CTGID = 0 + self.PrizeCount = 0 + return + + def GetLength(self): + return sizeof(tagMCRechargePrizeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 28 充值返利玩家活动信息 //tagMCRechargePrizePlayerInfo: + CTGID:%d, + PrizeCount:%d + '''\ + %( + self.CTGID, + self.PrizeCount + ) + return DumpString + + +class tagMCRechargePrizePlayerInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + PlayerInfoList = list() #(vector<tagMCRechargePrizeInfo> PlayerInfoList)//玩家返利信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x28 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temPlayerInfoList = tagMCRechargePrizeInfo() + _pos = temPlayerInfoList.ReadData(_lpData, _pos) + self.PlayerInfoList.append(temPlayerInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x28 + self.Count = 0 + self.PlayerInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.PlayerInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + PlayerInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo + + +#------------------------------------------------------ +# AA 30 累计充值返利仙玉玩家活动信息 #tagMCRechargeRebateGoldPlayerInfo + +class tagMCRechargeRebateGoldPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RechargeRMBTotal", c_int), # 活动已累计充值RMB + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x30 + 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 = 0x30 + self.RechargeRMBTotal = 0 + return + + def GetLength(self): + return sizeof(tagMCRechargeRebateGoldPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 30 累计充值返利仙玉玩家活动信息 //tagMCRechargeRebateGoldPlayerInfo: + Cmd:%s, + SubCmd:%s, + RechargeRMBTotal:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RechargeRMBTotal + ) + return DumpString + + +m_NAtagMCRechargeRebateGoldPlayerInfo=tagMCRechargeRebateGoldPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargeRebateGoldPlayerInfo.Cmd,m_NAtagMCRechargeRebateGoldPlayerInfo.SubCmd))] = m_NAtagMCRechargeRebateGoldPlayerInfo + + +#------------------------------------------------------ # AA 11 限时特惠活动信息 #tagMCSpringSaleInfo class tagMCSpringSaleItem(Structure): @@ -27246,6 +31991,7 @@ class tagMCSpringSaleInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 @@ -27266,6 +32012,7 @@ 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -27288,6 +32035,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x11 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.AdvanceMinutes = 0 @@ -27302,6 +32050,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 2 @@ -27319,6 +32068,7 @@ 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.AdvanceMinutes) @@ -27335,6 +32085,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, AdvanceMinutes:%d, @@ -27347,6 +32098,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.AdvanceMinutes, @@ -27480,6 +32232,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 ("GoldTotal", c_int), #本次活动已累计充值仙玉数 ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取 ] @@ -27498,6 +32251,7 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x1C + self.ActNum = 0 self.GoldTotal = 0 self.AwardRecord = 0 return @@ -27512,12 +32266,14 @@ DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo: Cmd:%s, SubCmd:%s, + ActNum:%d, GoldTotal:%d, AwardRecord:%d '''\ %( self.Cmd, self.SubCmd, + self.ActNum, self.GoldTotal, self.AwardRecord ) @@ -29369,6 +34125,10 @@ RewardCount = 0 #(BYTE RewardCount)// 累计未领取探索奖励次数 RewardLen = 0 #(BYTE RewardLen) RewardInfo = "" #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...] + TodayExp = 0 #(DWORD TodayExp) + TodayExpPoint = 0 #(DWORD TodayExpPoint) + YestordayExp = 0 #(DWORD YestordayExp) + YestordayExpPoint = 0 #(DWORD YestordayExpPoint) data = None def __init__(self): @@ -29385,6 +34145,10 @@ self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen) + self.TodayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TodayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.YestordayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.YestordayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -29397,6 +34161,10 @@ self.RewardCount = 0 self.RewardLen = 0 self.RewardInfo = "" + self.TodayExp = 0 + self.TodayExpPoint = 0 + self.YestordayExp = 0 + self.YestordayExpPoint = 0 return def GetLength(self): @@ -29407,6 +34175,10 @@ length += 1 length += 1 length += len(self.RewardInfo) + length += 4 + length += 4 + length += 4 + length += 4 return length @@ -29418,6 +34190,10 @@ data = CommFunc.WriteBYTE(data, self.RewardCount) data = CommFunc.WriteBYTE(data, self.RewardLen) data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo) + data = CommFunc.WriteDWORD(data, self.TodayExp) + data = CommFunc.WriteDWORD(data, self.TodayExpPoint) + data = CommFunc.WriteDWORD(data, self.YestordayExp) + data = CommFunc.WriteDWORD(data, self.YestordayExpPoint) return data def OutputString(self): @@ -29427,7 +34203,11 @@ PlaceCount:%d, RewardCount:%d, RewardLen:%d, - RewardInfo:%s + RewardInfo:%s, + TodayExp:%d, + TodayExpPoint:%d, + YestordayExp:%d, + YestordayExpPoint:%d '''\ %( self.Head.OutputString(), @@ -29435,7 +34215,11 @@ self.PlaceCount, self.RewardCount, self.RewardLen, - self.RewardInfo + self.RewardInfo, + self.TodayExp, + self.TodayExpPoint, + self.YestordayExp, + self.YestordayExpPoint ) return DumpString @@ -29720,6 +34504,118 @@ m_NAtagMCClothesCoatSkinState=tagMCClothesCoatSkinState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCClothesCoatSkinState.Head.Cmd,m_NAtagMCClothesCoatSkinState.Head.SubCmd))] = m_NAtagMCClothesCoatSkinState + + +#------------------------------------------------------ +# B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList + +class tagMCFuncSysPrivilegeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("FuncSysID", c_ubyte), # 功能系统ID + ("ActivateTime", c_int), # 激活时间戳 + ("AwardState", c_int), # 领奖状态,按天对应二进制位计算是否领奖 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.FuncSysID = 0 + self.ActivateTime = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCFuncSysPrivilegeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 11 功能系统特权信息 //tagMCFuncSysPrivilegeInfoList: + FuncSysID:%d, + ActivateTime:%d, + AwardState:%d + '''\ + %( + self.FuncSysID, + self.ActivateTime, + self.AwardState + ) + return DumpString + + +class tagMCFuncSysPrivilegeInfoList(Structure): + Head = tagHead() + PrivilegeCount = 0 #(BYTE PrivilegeCount)// 特权个数 + PrivilegeInfoList = list() #(vector<tagMCFuncSysPrivilegeInfo> PrivilegeInfoList)// 特权信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PrivilegeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PrivilegeCount): + temPrivilegeInfoList = tagMCFuncSysPrivilegeInfo() + _pos = temPrivilegeInfoList.ReadData(_lpData, _pos) + self.PrivilegeInfoList.append(temPrivilegeInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x11 + self.PrivilegeCount = 0 + self.PrivilegeInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.PrivilegeCount): + length += self.PrivilegeInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.PrivilegeCount) + for i in range(self.PrivilegeCount): + data = CommFunc.WriteString(data, self.PrivilegeInfoList[i].GetLength(), self.PrivilegeInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PrivilegeCount:%d, + PrivilegeInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.PrivilegeCount, + "..." + ) + return DumpString + + +m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList #------------------------------------------------------ @@ -31446,6 +36342,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("Floor", c_int), # 已通关层 + ("ServerRewardRecord", c_int), #全服挑战层领奖记录,按奖励记录二进制位存储是否已领取 ] def __init__(self): @@ -31463,6 +36360,7 @@ self.Cmd = 0xB2 self.SubCmd = 0x13 self.Floor = 0 + self.ServerRewardRecord = 0 return def GetLength(self): @@ -31475,12 +36373,14 @@ DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo: Cmd:%s, SubCmd:%s, - Floor:%d + Floor:%d, + ServerRewardRecord:%d '''\ %( self.Cmd, self.SubCmd, - self.Floor + self.Floor, + self.ServerRewardRecord ) return DumpString @@ -32814,6 +37714,7 @@ ("ObjID", c_int), ("AttackType", c_ubyte), #爆击, miss ("HurtHP", c_int), + ("HurtHPEx", c_int), ("CurHP", c_int), ("CurHPEx", c_int), ] @@ -32832,6 +37733,7 @@ self.ObjID = 0 self.AttackType = 0 self.HurtHP = 0 + self.HurtHPEx = 0 self.CurHP = 0 self.CurHPEx = 0 return @@ -32848,6 +37750,7 @@ ObjID:%d, AttackType:%d, HurtHP:%d, + HurtHPEx:%d, CurHP:%d, CurHPEx:%d '''\ @@ -32856,6 +37759,7 @@ self.ObjID, self.AttackType, self.HurtHP, + self.HurtHPEx, self.CurHP, self.CurHPEx ) @@ -32871,6 +37775,7 @@ PosY = 0 #(WORD PosY) HurtCount = 0 #(WORD HurtCount)//伤害数目 HurtList = list() #(vector<tagSkillPosHurtObj> HurtList)//size = HurtCount + SkillElementID = 0 #(WORD SkillElementID)//专精技能ID data = None def __init__(self): @@ -32892,6 +37797,7 @@ temHurtList = tagSkillPosHurtObj() _pos = temHurtList.ReadData(_lpData, _pos) self.HurtList.append(temHurtList) + self.SkillElementID,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): @@ -32906,6 +37812,7 @@ self.PosY = 0 self.HurtCount = 0 self.HurtList = list() + self.SkillElementID = 0 return def GetLength(self): @@ -32919,6 +37826,7 @@ length += 2 for i in range(self.HurtCount): length += self.HurtList[i].GetLength() + length += 2 return length @@ -32933,6 +37841,7 @@ data = CommFunc.WriteWORD(data, self.HurtCount) for i in range(self.HurtCount): data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.SkillElementID) return data def OutputString(self): @@ -32944,7 +37853,8 @@ PosX:%d, PosY:%d, HurtCount:%d, - HurtList:%s + HurtList:%s, + SkillElementID:%d '''\ %( self.Head.OutputString(), @@ -32954,7 +37864,8 @@ self.PosX, self.PosY, self.HurtCount, - "..." + "...", + self.SkillElementID ) return DumpString -- Gitblit v1.8.0