From 01d734e87f81367d8cdcca7d69b0c8e75de17905 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 01 九月 2021 17:03:48 +0800 Subject: [PATCH] 8585 【主干】【gt_1.101.1】【BT3】【bt3_1.100.1】【后端】竞技场(排行榜、匹配列表,对战记录战斗力支持超20亿;对战记录挑战支持查询最新数据;守护者支持积分加减并同步名次对应等级; 增加对战流向记录) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 1554 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 1,527 insertions(+), 27 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 2a5ea16..72b4c21 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -2368,6 +2368,112 @@ #------------------------------------------------------ +# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo + +class tagGCArenaBattlePlayerInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)//目标玩家ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x26 + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.Score = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Score:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Score + ) + return DumpString + + +m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo + + +#------------------------------------------------------ # A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList class tagGCArenaBattleRecord(Structure): @@ -2376,7 +2482,9 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 - FightPower = 0 #(DWORD FightPower)//战力,机器人读等级表取等级对应战力 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 AddScoreLen = 0 #(BYTE AddScoreLen) AddScore = "" #(String AddScore)//本次对战增加的积分,有正负 IsWin = 0 #(BYTE IsWin)//是否获胜 @@ -2395,6 +2503,8 @@ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen) self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -2408,6 +2518,8 @@ self.LV = 0 self.RealmLV = 0 self.FightPower = 0 + self.FightPowerEx = 0 + self.Score = 0 self.AddScoreLen = 0 self.AddScore = "" self.IsWin = 0 @@ -2421,6 +2533,8 @@ length += 1 length += 2 length += 2 + length += 4 + length += 4 length += 4 length += 1 length += len(self.AddScore) @@ -2437,6 +2551,8 @@ data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) data = CommFunc.WriteBYTE(data, self.AddScoreLen) data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore) data = CommFunc.WriteBYTE(data, self.IsWin) @@ -2451,6 +2567,8 @@ LV:%d, RealmLV:%d, FightPower:%d, + FightPowerEx:%d, + Score:%d, AddScoreLen:%d, AddScore:%s, IsWin:%d, @@ -2463,6 +2581,8 @@ self.LV, self.RealmLV, self.FightPower, + self.FightPowerEx, + self.Score, self.AddScoreLen, self.AddScore, self.IsWin, @@ -2546,7 +2666,8 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 - FightPower = 0 #(DWORD FightPower)//战力,机器人读等级表取等级对应战力 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 Score = 0 #(DWORD Score)//积分 data = None @@ -2562,6 +2683,7 @@ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos @@ -2572,6 +2694,7 @@ self.LV = 0 self.RealmLV = 0 self.FightPower = 0 + self.FightPowerEx = 0 self.Score = 0 return @@ -2582,6 +2705,7 @@ length += 1 length += 2 length += 2 + length += 4 length += 4 length += 4 @@ -2595,6 +2719,7 @@ data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.Score) return data @@ -2606,6 +2731,7 @@ LV:%d, RealmLV:%d, FightPower:%d, + FightPowerEx:%d, Score:%d '''\ %( @@ -2615,6 +2741,7 @@ self.LV, self.RealmLV, self.FightPower, + self.FightPowerEx, self.Score ) return DumpString @@ -15427,6 +15554,87 @@ #------------------------------------------------------ +# A3 C4 装备神装拆解结果 #tagMCEquipDecomposeRet + +class tagMCEquipDecomposeRet(Structure): + Head = tagHead() + DecomposeEquipIDCount = 0 #(BYTE DecomposeEquipIDCount)// 已分解的装备个数 + DecomposeEquipIDList = list() #(vector<DWORD> DecomposeEquipIDList)// 已分解的神装装备ID列表 + GetItemLen = 0 #(WORD GetItemLen) + GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC4 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.DecomposeEquipIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DecomposeEquipIDCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.DecomposeEquipIDList.append(value) + self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC4 + self.DecomposeEquipIDCount = 0 + self.DecomposeEquipIDList = list() + self.GetItemLen = 0 + self.GetItemData = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.DecomposeEquipIDCount + length += 2 + length += len(self.GetItemData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.DecomposeEquipIDCount) + for i in range(self.DecomposeEquipIDCount): + data = CommFunc.WriteDWORD(data, self.DecomposeEquipIDList[i]) + data = CommFunc.WriteWORD(data, self.GetItemLen) + data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + DecomposeEquipIDCount:%d, + DecomposeEquipIDList:%s, + GetItemLen:%d, + GetItemData:%s + '''\ + %( + self.Head.OutputString(), + self.DecomposeEquipIDCount, + "...", + self.GetItemLen, + self.GetItemData + ) + return DumpString + + +m_NAtagMCEquipDecomposeRet=tagMCEquipDecomposeRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeRet.Head.Cmd,m_NAtagMCEquipDecomposeRet.Head.SubCmd))] = m_NAtagMCEquipDecomposeRet + + +#------------------------------------------------------ # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo class tagMCEquipPartStar(Structure): @@ -20023,60 +20231,98 @@ #A3 01 坐骑培养信息 #tagTrainHorseData class tagTrainHorseData(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("LV", c_ubyte), #等阶 - ("EatItemCount", c_int), #当前阶已吃丹个数 - ("SkinPlusState", c_int), #幻化激活状态,按位存储是否激活,幻化编号ID对应位 - ] + Head = tagHead() + LV = 0 #(BYTE LV)//等阶 + EatItemCount = 0 #(DWORD EatItemCount)//当前阶已吃丹个数 + SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位 + TrainTypes = 0 #(BYTE TrainTypes)//培养类型数 + TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1 + TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1 + data = None def __init__(self): self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x01 + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x01 return - def ReadData(self, stringData, _pos=0, _len=0): + def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() + _pos = self.Head.ReadData(_lpData, _pos) + self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.EatItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SkinPlusState,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainLVList.append(value) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainItemCountList.append(value) + return _pos def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x01 + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x01 self.LV = 0 self.EatItemCount = 0 self.SkinPlusState = 0 + self.TrainTypes = 0 + self.TrainLVList = list() + self.TrainItemCountList = list() return def GetLength(self): - return sizeof(tagTrainHorseData) + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 4 + length += 1 + length += 4 * self.TrainTypes + length += 4 * self.TrainTypes + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.LV) + data = CommFunc.WriteDWORD(data, self.EatItemCount) + data = CommFunc.WriteDWORD(data, self.SkinPlusState) + data = CommFunc.WriteBYTE(data, self.TrainTypes) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainLVList[i]) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i]) + return data def OutputString(self): - DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData: - Cmd:%s, - SubCmd:%s, + DumpString = ''' + Head:%s, LV:%d, EatItemCount:%d, - SkinPlusState:%d + SkinPlusState:%d, + TrainTypes:%d, + TrainLVList:%s, + TrainItemCountList:%s '''\ %( - self.Cmd, - self.SubCmd, + self.Head.OutputString(), self.LV, self.EatItemCount, - self.SkinPlusState + self.SkinPlusState, + self.TrainTypes, + "...", + "..." ) return DumpString m_NAtagTrainHorseData=tagTrainHorseData() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Cmd,m_NAtagTrainHorseData.SubCmd))] = m_NAtagTrainHorseData +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagTrainHorseData.Head.Cmd,m_NAtagTrainHorseData.Head.SubCmd))] = m_NAtagTrainHorseData #------------------------------------------------------ @@ -23667,6 +23913,90 @@ #------------------------------------------------------ +# A8 18 灵器培养信息 #tagMCLingQiTrainInfo + +class tagMCLingQiTrainInfo(Structure): + Head = tagHead() + EquipPlace = 0 #(BYTE EquipPlace)//灵器装备位 + TrainTypes = 0 #(BYTE TrainTypes)//培养类型数 + TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1 + TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.EquipPlace,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainLVList.append(value) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainItemCountList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x18 + self.EquipPlace = 0 + self.TrainTypes = 0 + self.TrainLVList = list() + self.TrainItemCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.TrainTypes + length += 4 * self.TrainTypes + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.EquipPlace) + data = CommFunc.WriteBYTE(data, self.TrainTypes) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainLVList[i]) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + EquipPlace:%d, + TrainTypes:%d, + TrainLVList:%s, + TrainItemCountList:%s + '''\ + %( + self.Head.OutputString(), + self.EquipPlace, + self.TrainTypes, + "...", + "..." + ) + return DumpString + + +m_NAtagMCLingQiTrainInfo=tagMCLingQiTrainInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiTrainInfo.Head.Cmd,m_NAtagMCLingQiTrainInfo.Head.SubCmd))] = m_NAtagMCLingQiTrainInfo + + +#------------------------------------------------------ # A8 14 合成结果通知 #tagMCMakeItemAnswer class tagMCMakeItemAnswer(Structure): @@ -24091,6 +24421,83 @@ m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem + + +#------------------------------------------------------ +# A8 17 宠物培养信息 #tagMCPetTrainInfo + +class tagMCPetTrainInfo(Structure): + Head = tagHead() + TrainTypes = 0 #(BYTE TrainTypes)//培养类型数 + TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1 + TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x17 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainLVList.append(value) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainItemCountList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x17 + self.TrainTypes = 0 + self.TrainLVList = list() + self.TrainItemCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.TrainTypes + length += 4 * self.TrainTypes + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TrainTypes) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainLVList[i]) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TrainTypes:%d, + TrainLVList:%s, + TrainItemCountList:%s + '''\ + %( + self.Head.OutputString(), + self.TrainTypes, + "...", + "..." + ) + return DumpString + + +m_NAtagMCPetTrainInfo=tagMCPetTrainInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetTrainInfo.Head.Cmd,m_NAtagMCPetTrainInfo.Head.SubCmd))] = m_NAtagMCPetTrainInfo #------------------------------------------------------ @@ -24638,6 +25045,285 @@ #------------------------------------------------------ +# AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo + +class tagMCActGarbageSortingInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x55 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x55 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType + ) + return DumpString + + +m_NAtagMCActGarbageSortingInfo=tagMCActGarbageSortingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingInfo.Head.Cmd,m_NAtagMCActGarbageSortingInfo.Head.SubCmd))] = m_NAtagMCActGarbageSortingInfo + + +#------------------------------------------------------ +# AA 57 垃圾收集活动分类结果 #tagMCActGarbageSortingResult + +class tagMCActGarbageSortingResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("GarbageSortingType", c_ubyte), #垃圾分类类型 + ("IsRight", c_ubyte), #是否正确 + ("AddEnvValue", c_int), #增加环保值 + ("HisEnvValueTotal", c_int), # 当前活动累计获得环保值 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x57 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x57 + self.ActNum = 0 + self.GarbageSortingType = 0 + self.IsRight = 0 + self.AddEnvValue = 0 + self.HisEnvValueTotal = 0 + return + + def GetLength(self): + return sizeof(tagMCActGarbageSortingResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 57 垃圾收集活动分类结果 //tagMCActGarbageSortingResult: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + GarbageSortingType:%d, + IsRight:%d, + AddEnvValue:%d, + HisEnvValueTotal:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.GarbageSortingType, + self.IsRight, + self.AddEnvValue, + self.HisEnvValueTotal + ) + return DumpString + + +m_NAtagMCActGarbageSortingResult=tagMCActGarbageSortingResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingResult.Cmd,m_NAtagMCActGarbageSortingResult.SubCmd))] = m_NAtagMCActGarbageSortingResult + + +#------------------------------------------------------ +# AA 56 垃圾收集活动任务进度信息 #tagMCActGarbageTaskInfo + +class tagMCActGarbageTask(Structure): + _pack_ = 1 + _fields_ = [ + ("GarbageTaskID", c_ubyte), #垃圾任务ID + ("GarbageTaskValue", c_int), #当前进度值,一直累加 + ("GarbageTaskFinishCount", c_int), #当前已完成次数; 前端计算未完成次数的进度值=max(0, 当前进度值 - (完成次数 * 单次所需进度)) + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.GarbageTaskID = 0 + self.GarbageTaskValue = 0 + self.GarbageTaskFinishCount = 0 + return + + def GetLength(self): + return sizeof(tagMCActGarbageTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 56 垃圾收集活动任务进度信息 //tagMCActGarbageTaskInfo: + GarbageTaskID:%d, + GarbageTaskValue:%d, + GarbageTaskFinishCount:%d + '''\ + %( + self.GarbageTaskID, + self.GarbageTaskValue, + self.GarbageTaskFinishCount + ) + return DumpString + + +class tagMCActGarbageTaskInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + HisEnvValueTotal = 0 #(DWORD HisEnvValueTotal)// 当前活动累计获得环保值 + GarbageTaskCount = 0 #(BYTE GarbageTaskCount)//任务数 + GarbageTaskList = list() #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x56 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HisEnvValueTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GarbageTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GarbageTaskCount): + temGarbageTaskList = tagMCActGarbageTask() + _pos = temGarbageTaskList.ReadData(_lpData, _pos) + self.GarbageTaskList.append(temGarbageTaskList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x56 + self.ActNum = 0 + self.HisEnvValueTotal = 0 + self.GarbageTaskCount = 0 + self.GarbageTaskList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 1 + for i in range(self.GarbageTaskCount): + length += self.GarbageTaskList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteDWORD(data, self.HisEnvValueTotal) + data = CommFunc.WriteBYTE(data, self.GarbageTaskCount) + for i in range(self.GarbageTaskCount): + data = CommFunc.WriteString(data, self.GarbageTaskList[i].GetLength(), self.GarbageTaskList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + HisEnvValueTotal:%d, + GarbageTaskCount:%d, + GarbageTaskList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.HisEnvValueTotal, + self.GarbageTaskCount, + "..." + ) + return DumpString + + +m_NAtagMCActGarbageTaskInfo=tagMCActGarbageTaskInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageTaskInfo.Head.Cmd,m_NAtagMCActGarbageTaskInfo.Head.SubCmd))] = m_NAtagMCActGarbageTaskInfo + + +#------------------------------------------------------ # AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo class tagMCActGrowupBuyCTGItem(Structure): @@ -24882,6 +25568,148 @@ m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo + + +#------------------------------------------------------ +# AA 54 骑宠盛宴活动信息 #tagMCActHorsePetFeastInfo + +class tagMCActHorsePetFeastTime(Structure): + StartTime = "" #(char StartTime[5])// 开始时间 H:M + EndtTime = "" #(char EndtTime[5])// 结束时间 H:M + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + return _pos + + def Clear(self): + self.StartTime = "" + self.EndtTime = "" + return + + def GetLength(self): + length = 0 + length += 5 + length += 5 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 5, self.StartTime) + data = CommFunc.WriteString(data, 5, self.EndtTime) + return data + + def OutputString(self): + DumpString = ''' + StartTime:%s, + EndtTime:%s + '''\ + %( + self.StartTime, + self.EndtTime + ) + return DumpString + + +class tagMCActHorsePetFeastInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + TimeCount = 0 #(BYTE TimeCount) + ActTimeList = list() #(vector<tagMCActHorsePetFeastTime> ActTimeList)// 活动时间 H:M 列表 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x54 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.TimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TimeCount): + temActTimeList = tagMCActHorsePetFeastTime() + _pos = temActTimeList.ReadData(_lpData, _pos) + self.ActTimeList.append(temActTimeList) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x54 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.TimeCount = 0 + self.ActTimeList = list() + self.LimitLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + for i in range(self.TimeCount): + length += self.ActTimeList[i].GetLength() + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.TimeCount) + for i in range(self.TimeCount): + data = CommFunc.WriteString(data, self.ActTimeList[i].GetLength(), self.ActTimeList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.LimitLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + TimeCount:%d, + ActTimeList:%s, + LimitLV:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.TimeCount, + "...", + self.LimitLV + ) + return DumpString + + +m_NAtagMCActHorsePetFeastInfo=tagMCActHorsePetFeastInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetFeastInfo.Head.Cmd,m_NAtagMCActHorsePetFeastInfo.Head.SubCmd))] = m_NAtagMCActHorsePetFeastInfo #------------------------------------------------------ @@ -26533,6 +27361,322 @@ #------------------------------------------------------ +# AA 52 转盘活动信息 #tagMCActTurntableInfo + +class tagMCActTurntableItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemNum", c_ubyte), #物品编号 1~n;注意转盘已确定物品编号 与 极品终极物品待选择库编号可能相同,但并不代表同一物品 + ("ItemLibType", c_ubyte), #物品库类型;1-常规,2-极品,3-终极 + ("ItemID", c_int), + ("ItemCount", c_ushort), + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemNum = 0 + self.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCActTurntableItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 52 转盘活动信息 //tagMCActTurntableInfo: + ItemNum:%d, + ItemLibType:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemNum, + self.ItemLibType, + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCActTurntableInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + CTGPrizeCount = 0 #(BYTE CTGPrizeCount) + CTGPrizeList = list() #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...] + UseMoneyType = 0 #(BYTE UseMoneyType)// 累计消费货币类型 + UseMoneyPrizeCount = 0 #(BYTE UseMoneyPrizeCount) + UseMoneyPrizeList = list() #(vector<DWORD> UseMoneyPrizeList)// 累计消费货币奖励次数列表 [奖励第1次所需累计消费货币, 第2次, ...] + TurnItemCount = 0 #(BYTE TurnItemCount) + TurnItemList = list() #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘; + GoodItemCount = 0 #(BYTE GoodItemCount) + GoodItemList = list() #(vector<tagMCActTurntableItem> GoodItemList)// 极品物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品; + GoodItemCanChooseCount = 0 #(BYTE GoodItemCanChooseCount)// 极品物品可选择个数 + SuperItemCount = 0 #(BYTE SuperItemCount) + SuperItemList = list() #(vector<tagMCActTurntableItem> SuperItemList)// 终极物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品; + SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 终极物品可选择个数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x52 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.CTGPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CTGPrizeCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.CTGPrizeList.append(value) + self.UseMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UseMoneyPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.UseMoneyPrizeCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.UseMoneyPrizeList.append(value) + self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TurnItemCount): + temTurnItemList = tagMCActTurntableItem() + _pos = temTurnItemList.ReadData(_lpData, _pos) + self.TurnItemList.append(temTurnItemList) + self.GoodItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GoodItemCount): + temGoodItemList = tagMCActTurntableItem() + _pos = temGoodItemList.ReadData(_lpData, _pos) + self.GoodItemList.append(temGoodItemList) + self.GoodItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + temSuperItemList = tagMCActTurntableItem() + _pos = temSuperItemList.ReadData(_lpData, _pos) + self.SuperItemList.append(temSuperItemList) + self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x52 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.CTGPrizeCount = 0 + self.CTGPrizeList = list() + self.UseMoneyType = 0 + self.UseMoneyPrizeCount = 0 + self.UseMoneyPrizeList = list() + self.TurnItemCount = 0 + self.TurnItemList = list() + self.GoodItemCount = 0 + self.GoodItemList = list() + self.GoodItemCanChooseCount = 0 + self.SuperItemCount = 0 + self.SuperItemList = list() + self.SuperItemCanChooseCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + length += 4 * self.CTGPrizeCount + length += 1 + length += 1 + length += 4 * self.UseMoneyPrizeCount + length += 1 + for i in range(self.TurnItemCount): + length += self.TurnItemList[i].GetLength() + length += 1 + for i in range(self.GoodItemCount): + length += self.GoodItemList[i].GetLength() + length += 1 + length += 1 + for i in range(self.SuperItemCount): + length += self.SuperItemList[i].GetLength() + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.CTGPrizeCount) + for i in range(self.CTGPrizeCount): + data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i]) + data = CommFunc.WriteBYTE(data, self.UseMoneyType) + data = CommFunc.WriteBYTE(data, self.UseMoneyPrizeCount) + for i in range(self.UseMoneyPrizeCount): + data = CommFunc.WriteDWORD(data, self.UseMoneyPrizeList[i]) + data = CommFunc.WriteBYTE(data, self.TurnItemCount) + for i in range(self.TurnItemCount): + data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.GoodItemCount) + for i in range(self.GoodItemCount): + data = CommFunc.WriteString(data, self.GoodItemList[i].GetLength(), self.GoodItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.GoodItemCanChooseCount) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + CTGPrizeCount:%d, + CTGPrizeList:%s, + UseMoneyType:%d, + UseMoneyPrizeCount:%d, + UseMoneyPrizeList:%s, + TurnItemCount:%d, + TurnItemList:%s, + GoodItemCount:%d, + GoodItemList:%s, + GoodItemCanChooseCount:%d, + SuperItemCount:%d, + SuperItemList:%s, + SuperItemCanChooseCount:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.CTGPrizeCount, + "...", + self.UseMoneyType, + self.UseMoneyPrizeCount, + "...", + self.TurnItemCount, + "...", + self.GoodItemCount, + "...", + self.GoodItemCanChooseCount, + self.SuperItemCount, + "...", + self.SuperItemCanChooseCount + ) + return DumpString + + +m_NAtagMCActTurntableInfo=tagMCActTurntableInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntableInfo.Head.Cmd,m_NAtagMCActTurntableInfo.Head.SubCmd))] = m_NAtagMCActTurntableInfo + + +#------------------------------------------------------ +# AA 53 转盘活动玩家信息 #tagMCActTurntablePlayerInfo + +class tagMCActTurntablePlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("CanUseCount", c_ubyte), #可转盘次数 + ("CTGTotal", c_int), #累计充值额度 + ("UseMoneyTotal", c_int), #累计消费货币额度 + ("TurnItemState", c_int), #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中 + ("GetItemNum", c_ubyte), #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x53 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x53 + self.ActNum = 0 + self.CanUseCount = 0 + self.CTGTotal = 0 + self.UseMoneyTotal = 0 + self.TurnItemState = 0 + self.GetItemNum = 0 + return + + def GetLength(self): + return sizeof(tagMCActTurntablePlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 53 转盘活动玩家信息 //tagMCActTurntablePlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + CanUseCount:%d, + CTGTotal:%d, + UseMoneyTotal:%d, + TurnItemState:%d, + GetItemNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.CanUseCount, + self.CTGTotal, + self.UseMoneyTotal, + self.TurnItemState, + self.GetItemNum + ) + return DumpString + + +m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo + + +#------------------------------------------------------ # AA 1B 许愿池拖动结果 #tagMCActWishingDragResult class tagMCPlayerWishingDragInfo(Structure): @@ -26977,6 +28121,288 @@ m_NAtagMCActWishingWellPlayerInfo=tagMCActWishingWellPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellPlayerInfo.Head.Cmd,m_NAtagMCActWishingWellPlayerInfo.Head.SubCmd))] = m_NAtagMCActWishingWellPlayerInfo + + +#------------------------------------------------------ +# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult + +class tagMCActXianXiaMJAwardItemResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x59 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x59 + self.ActNum = 0 + self.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItemResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow + ) + return DumpString + + +m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult + + +#------------------------------------------------------ +# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo + +class tagMCActXianXiaMJAwardItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ("TotalTimesMax", c_ubyte), #最大可产出次数,0不限 + ("LayerLimit", c_ubyte), #大于等于X层后可产出,0不限 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + self.TotalTimesMax = 0 + self.LayerLimit = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo: + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d, + TotalTimesMax:%d, + LayerLimit:%d + '''\ + %( + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow, + self.TotalTimesMax, + self.LayerLimit + ) + return DumpString + + +class tagMCActXianXiaMJInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyValue = 0 #(WORD MoneyValue)//消耗货币值 + LayerNum = 0 #(BYTE LayerNum)//当前奖池第几层 + AwardItemCount = 0 #(BYTE AwardItemCount) + AwardItemList = list() #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 + SuperItemCount = 0 #(BYTE SuperItemCount) + SuperItemList = list() #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; + SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActXianXiaMJAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + temSuperItemList = tagMCActXianXiaMJAwardItem() + _pos = temSuperItemList.ReadData(_lpData, _pos) + self.SuperItemList.append(temSuperItemList) + self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + self.LayerNum = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + self.SuperItemCount = 0 + self.SuperItemList = list() + self.SuperItemCanChooseCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + length += 1 + for i in range(self.SuperItemCount): + length += self.SuperItemList[i].GetLength() + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteWORD(data, self.MoneyValue) + data = CommFunc.WriteBYTE(data, self.LayerNum) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + MoneyType:%d, + MoneyValue:%d, + LayerNum:%d, + AwardItemCount:%d, + AwardItemList:%s, + SuperItemCount:%d, + SuperItemList:%s, + SuperItemCanChooseCount:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.MoneyType, + self.MoneyValue, + self.LayerNum, + self.AwardItemCount, + "...", + self.SuperItemCount, + "...", + self.SuperItemCanChooseCount + ) + return DumpString + + +m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo #------------------------------------------------------ @@ -34370,6 +35796,80 @@ #------------------------------------------------------ +# B1 13 在线奖励信息新 #tagMCOnlinePrizeNew + +class tagMCOnlinePrizeNew(Structure): + Head = tagHead() + OnlineTime = 0 #(DWORD OnlineTime)//在线时间毫秒 + Len = 0 #(BYTE Len) + PrizeInfo = list() #(vector<DWORD> PrizeInfo)//领奖记录 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Len): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.PrizeInfo.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x13 + self.OnlineTime = 0 + self.Len = 0 + self.PrizeInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 4 * self.Len + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.OnlineTime) + data = CommFunc.WriteBYTE(data, self.Len) + for i in range(self.Len): + data = CommFunc.WriteDWORD(data, self.PrizeInfo[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + OnlineTime:%d, + Len:%d, + PrizeInfo:%s + '''\ + %( + self.Head.OutputString(), + self.OnlineTime, + self.Len, + "..." + ) + return DumpString + + +m_NAtagMCOnlinePrizeNew=tagMCOnlinePrizeNew() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrizeNew.Head.Cmd,m_NAtagMCOnlinePrizeNew.Head.SubCmd))] = m_NAtagMCOnlinePrizeNew + + +#------------------------------------------------------ # B1 03 通知玩家死亡时间 #tagMCPlayerDeadTime class tagMCPlayerDeadTime(Structure): -- Gitblit v1.8.0