From 5f6d12a0c40e018be2516b4e81e7a43c16145b9d Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 28 十二月 2023 17:05:02 +0800 Subject: [PATCH] 10033 【后端】仙树升级系统及砍树产出规则(仙桃货币类型改为41) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 6425 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 6,366 insertions(+), 59 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 14ebe55..604bd86 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -985,6 +985,190 @@ #------------------------------------------------------ +# A4 11 传功邀请信息 #tagGCChuangongInviteInfo + +class tagGCChuangongInviteInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x11 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV + ) + return DumpString + + +m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo + + +#------------------------------------------------------ +# A4 12 传功开始 #tagGCChuangongStart + +class tagGCChuangongStart(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 一起传功的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x12 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV + ) + return DumpString + + +m_NAtagGCChuangongStart=tagGCChuangongStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart + + +#------------------------------------------------------ # A4 0A 假仙盟信息 #tagGCFakeFamilyInfo class tagGCFakeFamilyInfo(Structure): @@ -1240,6 +1424,66 @@ m_NAtagGCFamilyActionInfo=tagGCFamilyActionInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyActionInfo.Head.Cmd,m_NAtagGCFamilyActionInfo.Head.SubCmd))] = m_NAtagGCFamilyActionInfo + + +#------------------------------------------------------ +# A4 0E 家族boss副本信息 #tagGCFamilyBosFBInfo + +class tagGCFamilyBosFBInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 仙盟累计伤血,亿求余部分 + ("HurtTotalPoint", c_int), # 仙盟累计伤血,亿整除部分 + ("FightMemCount", c_ubyte), # 目前正在仙盟boss副本中的成员数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x0E + 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 = 0xA4 + self.SubCmd = 0x0E + self.HurtTotal = 0 + self.HurtTotalPoint = 0 + self.FightMemCount = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyBosFBInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 0E 家族boss副本信息 //tagGCFamilyBosFBInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalPoint:%d, + FightMemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalPoint, + self.FightMemCount + ) + return DumpString + + +m_NAtagGCFamilyBosFBInfo=tagGCFamilyBosFBInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBosFBInfo.Cmd,m_NAtagGCFamilyBosFBInfo.SubCmd))] = m_NAtagGCFamilyBosFBInfo #------------------------------------------------------ @@ -4883,6 +5127,215 @@ #------------------------------------------------------ +# A9 AD 通知天星塔全服奖励通关玩家信息 #tagGCSkyTowerPassPlayerInfo + +class tagGCSkyTowerPassPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界 + 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) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + + 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) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV + ) + return DumpString + + +class tagGCSkyTowerPassFloor(Structure): + FloorID = 0 #(DWORD FloorID)// 层ID + PassPlayerCount = 0 #(BYTE PassPlayerCount)// 通关记录玩家数 + PassPlayerIDList = list() #(vector<DWORD> PassPlayerIDList)// 通关记录玩家ID列表 [第1个通过玩家ID, 第2个, ...] + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FloorID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PassPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PassPlayerCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.PassPlayerIDList.append(value) + return _pos + + def Clear(self): + self.FloorID = 0 + self.PassPlayerCount = 0 + self.PassPlayerIDList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 4 * self.PassPlayerCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.FloorID) + data = CommFunc.WriteBYTE(data, self.PassPlayerCount) + for i in range(self.PassPlayerCount): + data = CommFunc.WriteDWORD(data, self.PassPlayerIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + FloorID:%d, + PassPlayerCount:%d, + PassPlayerIDList:%s + '''\ + %( + self.FloorID, + self.PassPlayerCount, + "..." + ) + return DumpString + + +class tagGCSkyTowerPassPlayerInfo(Structure): + Head = tagHead() + FloorCount = 0 #(WORD FloorCount) + PassFloorList = list() #(vector<tagGCSkyTowerPassFloor> PassFloorList)// 通关塔层信息列表 + PlayerCount = 0 #(WORD PlayerCount) + PassPlayerList = list() #(vector<tagGCSkyTowerPassPlayer> PassPlayerList)// 通关玩家信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAD + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FloorCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.FloorCount): + temPassFloorList = tagGCSkyTowerPassFloor() + _pos = temPassFloorList.ReadData(_lpData, _pos) + self.PassFloorList.append(temPassFloorList) + self.PlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.PlayerCount): + temPassPlayerList = tagGCSkyTowerPassPlayer() + _pos = temPassPlayerList.ReadData(_lpData, _pos) + self.PassPlayerList.append(temPassPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAD + self.FloorCount = 0 + self.PassFloorList = list() + self.PlayerCount = 0 + self.PassPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.FloorCount): + length += self.PassFloorList[i].GetLength() + length += 2 + for i in range(self.PlayerCount): + length += self.PassPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.FloorCount) + for i in range(self.FloorCount): + data = CommFunc.WriteString(data, self.PassFloorList[i].GetLength(), self.PassFloorList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.PassPlayerList[i].GetLength(), self.PassPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FloorCount:%d, + PassFloorList:%s, + PlayerCount:%d, + PassPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.FloorCount, + "...", + self.PlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCSkyTowerPassPlayerInfo=tagGCSkyTowerPassPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSkyTowerPassPlayerInfo.Head.Cmd,m_NAtagGCSkyTowerPassPlayerInfo.Head.SubCmd))] = m_NAtagGCSkyTowerPassPlayerInfo + + +#------------------------------------------------------ # A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo class tagGCStoreServerBuyCnt(Structure): @@ -5260,6 +5713,224 @@ m_NAtagGCBossRebornPoint=tagGCBossRebornPoint() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint + + +#------------------------------------------------------ +# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo + +class tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagGCCrossActAllRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedRMB = 0 #(DWORD NeedRMB)// 所需全民充值RMB + NeedPlayerCount = 0 #(WORD NeedPlayerCount)// 所需充值达到该档玩家数 + NowPlayerCount = 0 #(WORD NowPlayerCount)// 当前充值达到该档玩家数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItemList = list() #(vector<tagGCCrossActAllRechargeItem> 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.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagGCCrossActAllRechargeItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedRMB = 0 + self.NeedPlayerCount = 0 + self.NowPlayerCount = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + 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.WriteDWORD(data, self.NeedRMB) + data = CommFunc.WriteWORD(data, self.NeedPlayerCount) + data = CommFunc.WriteWORD(data, self.NowPlayerCount) + 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, + NeedPlayerCount:%d, + NowPlayerCount:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedRMB, + self.NeedPlayerCount, + self.NowPlayerCount, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagGCCrossActAllRechargeInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AwardCount = 0 #(BYTE AwardCount) + AwardList = list() #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x13 + 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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardList = tagGCCrossActAllRechargeAward() + _pos = temAwardList.ReadData(_lpData, _pos) + self.AwardList.append(temAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x13 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.StartDate = "" + self.EndtDate = "" + self.AwardCount = 0 + self.AwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 10 + length += 10 + 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.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + 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, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + StartDate:%s, + EndtDate:%s, + AwardCount:%d, + AwardList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.StartDate, + self.EndtDate, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo #------------------------------------------------------ @@ -8366,6 +9037,7 @@ OnlineType = 0 #(BYTE OnlineType)//在线状态, 0 不在线 1在线 IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍 ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID + Face = 0 #(DWORD Face)//基本脸型 data = None def __init__(self): @@ -8385,6 +9057,7 @@ self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -8400,6 +9073,7 @@ self.OnlineType = 0 self.IsInTeam = 0 self.ServerGroupID = 0 + self.Face = 0 return def GetLength(self): @@ -8412,6 +9086,7 @@ length += 2 length += 1 length += 1 + length += 4 length += 4 return length @@ -8427,6 +9102,7 @@ data = CommFunc.WriteBYTE(data, self.OnlineType) data = CommFunc.WriteBYTE(data, self.IsInTeam) data = CommFunc.WriteDWORD(data, self.ServerGroupID) + data = CommFunc.WriteDWORD(data, self.Face) return data def OutputString(self): @@ -8439,7 +9115,8 @@ RealmLV:%d, OnlineType:%d, IsInTeam:%d, - ServerGroupID:%d + ServerGroupID:%d, + Face:%d '''\ %( self.Head.OutputString(), @@ -8450,7 +9127,8 @@ self.RealmLV, self.OnlineType, self.IsInTeam, - self.ServerGroupID + self.ServerGroupID, + self.Face ) return DumpString @@ -8525,6 +9203,7 @@ LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界 OnlineType = 0 #(BYTE OnlineType)//0不在线 1在线 2脱机在线 + Face = 0 #(DWORD Face)//基本脸型 data = None def __init__(self): @@ -8539,6 +9218,7 @@ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -8548,6 +9228,7 @@ self.LV = 0 self.RealmLV = 0 self.OnlineType = 0 + self.Face = 0 return def GetLength(self): @@ -8558,6 +9239,7 @@ length += 2 length += 2 length += 1 + length += 4 return length @@ -8569,6 +9251,7 @@ data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteBYTE(data, self.OnlineType) + data = CommFunc.WriteDWORD(data, self.Face) return data def OutputString(self): @@ -8578,7 +9261,8 @@ Job:%d, LV:%d, RealmLV:%d, - OnlineType:%d + OnlineType:%d, + Face:%d '''\ %( self.PlayerID, @@ -8586,7 +9270,8 @@ self.Job, self.LV, self.RealmLV, - self.OnlineType + self.OnlineType, + self.Face ) return DumpString @@ -12288,6 +12973,922 @@ #------------------------------------------------------ +# C0 23 跨服排位竞猜个人信息 #tagGCChampionshipGuessPriInfo + +class tagGCChampionshipGuessPlayerPri(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), # 目标玩家ID + ("MoneyTotal", c_int), # 已投注该玩家货币总数 + ("GuessRank", c_ubyte), # 竞猜名次,没有名次的竞猜默认0;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.PlayerID = 0 + self.MoneyTotal = 0 + self.GuessRank = 0 + return + + def GetLength(self): + return sizeof(tagGCChampionshipGuessPlayerPri) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 23 跨服排位竞猜个人信息 //tagGCChampionshipGuessPriInfo: + PlayerID:%d, + MoneyTotal:%d, + GuessRank:%d + '''\ + %( + self.PlayerID, + self.MoneyTotal, + self.GuessRank + ) + return DumpString + + +class tagGCChampionshipGuessPriList(Structure): + GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 + PlayerCount = 0 #(BYTE PlayerCount) + GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPri> GuessPlayerList)// 被竞猜玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temGuessPlayerList = tagGCChampionshipGuessPlayerPri() + _pos = temGuessPlayerList.ReadData(_lpData, _pos) + self.GuessPlayerList.append(temGuessPlayerList) + return _pos + + def Clear(self): + self.GuessType = 0 + self.PlayerCount = 0 + self.GuessPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.GuessPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GuessType) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GuessType:%d, + PlayerCount:%d, + GuessPlayerList:%s + '''\ + %( + self.GuessType, + self.PlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipGuessPriInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID + Count = 0 #(BYTE Count) + GuessList = list() #(vector<tagGCChampionshipGuessPriList> GuessList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temGuessList = tagGCChampionshipGuessPriList() + _pos = temGuessList.ReadData(_lpData, _pos) + self.GuessList.append(temGuessList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x23 + self.ZoneID = 0 + self.Count = 0 + self.GuessList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.GuessList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + Count:%d, + GuessList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipGuessPriInfo=tagGCChampionshipGuessPriInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPriInfo.Head.Cmd,m_NAtagGCChampionshipGuessPriInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPriInfo + + +#------------------------------------------------------ +# C0 22 跨服排位竞猜公共信息 #tagGCChampionshipGuessPubInfo + +class tagGCChampionshipGuessPlayerPub(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), # 目标玩家ID + ("SupportCount", 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.PlayerID = 0 + self.SupportCount = 0 + return + + def GetLength(self): + return sizeof(tagGCChampionshipGuessPlayerPub) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 22 跨服排位竞猜公共信息 //tagGCChampionshipGuessPubInfo: + PlayerID:%d, + SupportCount:%d + '''\ + %( + self.PlayerID, + self.SupportCount + ) + return DumpString + + +class tagGCChampionshipGuessPubList(Structure): + GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 + PlayerCount = 0 #(BYTE PlayerCount) + GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPub> GuessPlayerList)// 被竞猜玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temGuessPlayerList = tagGCChampionshipGuessPlayerPub() + _pos = temGuessPlayerList.ReadData(_lpData, _pos) + self.GuessPlayerList.append(temGuessPlayerList) + return _pos + + def Clear(self): + self.GuessType = 0 + self.PlayerCount = 0 + self.GuessPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.GuessPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GuessType) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GuessType:%d, + PlayerCount:%d, + GuessPlayerList:%s + '''\ + %( + self.GuessType, + self.PlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipGuessPubInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID + Count = 0 #(BYTE Count) + GuessList = list() #(vector<tagGCChampionshipGuessPubList> GuessList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temGuessList = tagGCChampionshipGuessPubList() + _pos = temGuessList.ReadData(_lpData, _pos) + self.GuessList.append(temGuessList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x22 + self.ZoneID = 0 + self.Count = 0 + self.GuessList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.GuessList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + Count:%d, + GuessList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipGuessPubInfo=tagGCChampionshipGuessPubInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPubInfo.Head.Cmd,m_NAtagGCChampionshipGuessPubInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPubInfo + + +#------------------------------------------------------ +# C0 19 跨服排位仙官申请回应结果 #tagGCChampionshipOfficialApplyReplyRet + +class tagGCChampionshipOfficialApplyReplyRet(Structure): + Head = tagHead() + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 界主玩家名 + MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID + OfficialID = 0 #(WORD OfficialID)//申请官职ID + IsOK = 0 #(BYTE IsOK)//是否同意;1-是;0-否 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x19 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x19 + self.NameLen = 0 + self.PlayerName = "" + self.MainOfficialID = 0 + self.OfficialID = 0 + self.IsOK = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.PlayerName) + length += 2 + 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.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.IsOK) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + NameLen:%d, + PlayerName:%s, + MainOfficialID:%d, + OfficialID:%d, + IsOK:%d + '''\ + %( + self.Head.OutputString(), + self.NameLen, + self.PlayerName, + self.MainOfficialID, + self.OfficialID, + self.IsOK + ) + return DumpString + + +m_NAtagGCChampionshipOfficialApplyReplyRet=tagGCChampionshipOfficialApplyReplyRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialApplyReplyRet.Head.Cmd,m_NAtagGCChampionshipOfficialApplyReplyRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialApplyReplyRet + + +#------------------------------------------------------ +# C0 21 跨服排位仙官挑战记录 #tagGCChampionshipOfficialChallengeRecordInfo + +class tagGCChampionshipOfficialChallengeRecord(Structure): + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + ChallengeTime = 0 #(DWORD ChallengeTime)//挑战时间戳 + Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜; + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.ChallengeTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.PlayerName = "" + self.ChallengeTime = 0 + self.Ret = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.PlayerName) + length += 4 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.ChallengeTime) + data = CommFunc.WriteBYTE(data, self.Ret) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + PlayerName:%s, + ChallengeTime:%d, + Ret:%d + '''\ + %( + self.NameLen, + self.PlayerName, + self.ChallengeTime, + self.Ret + ) + return DumpString + + +class tagGCChampionshipOfficialChallengeRecordInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 分区ID + MainOfficialID = 0 #(WORD MainOfficialID)// 界主官职ID + OfficialID = 0 #(WORD OfficialID)// 记录的官职ID + RecordCount = 0 #(BYTE RecordCount)// 挑战记录数 + RecordList = list() #(vector<tagGCChampionshipOfficialChallengeRecord> RecordList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x21 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temRecordList = tagGCChampionshipOfficialChallengeRecord() + _pos = temRecordList.ReadData(_lpData, _pos) + self.RecordList.append(temRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x21 + self.ZoneID = 0 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.RecordCount = 0 + self.RecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 2 + length += 1 + for i in range(self.RecordCount): + length += self.RecordList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + MainOfficialID:%d, + OfficialID:%d, + RecordCount:%d, + RecordList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.MainOfficialID, + self.OfficialID, + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipOfficialChallengeRecordInfo=tagGCChampionshipOfficialChallengeRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRecordInfo + + +#------------------------------------------------------ +# C0 20 跨服排位仙官挑战结果 #tagGCChampionshipOfficialChallengeRet + +class tagGCChampionshipOfficialChallengeRet(Structure): + Head = tagHead() + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 原仙官玩家名,可能为空,代表本来无玩家 + MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID + OfficialID = 0 #(WORD OfficialID)//挑战的官职ID + Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜;2-目标仙官玩家ID已变更,可刷新后重试 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x20 + self.NameLen = 0 + self.PlayerName = "" + self.MainOfficialID = 0 + self.OfficialID = 0 + self.Ret = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.PlayerName) + length += 2 + 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.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.Ret) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + NameLen:%d, + PlayerName:%s, + MainOfficialID:%d, + OfficialID:%d, + Ret:%d + '''\ + %( + self.Head.OutputString(), + self.NameLen, + self.PlayerName, + self.MainOfficialID, + self.OfficialID, + self.Ret + ) + return DumpString + + +m_NAtagGCChampionshipOfficialChallengeRet=tagGCChampionshipOfficialChallengeRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRet.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRet + + +#------------------------------------------------------ +# C0 18 跨服排位官职信息 #tagGCChampionshipOfficialInfo + +class tagGCChampionshipOfficialPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID)// 玩家ID + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 + RealmLV = 0 #(WORD RealmLV) + 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.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 4 + length += 4 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + FightPower:%d, + FightPowerEx:%d, + RealmLV:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.FightPower, + self.FightPowerEx, + self.RealmLV + ) + return DumpString + + +class tagGCChampionshipOfficial(Structure): + OfficialID = 0 #(DWORD OfficialID)// 官职ID + LastDismissJuniorTime = 0 #(DWORD LastDismissJuniorTime)// 上次辞退下级仙官时间戳,跨服时间,如果自己是本界主时,用于计算辞退CD + WorshipCount = 0 #(DWORD WorshipCount)// 被膜拜次数 + WorshipDouble = 0 #(BYTE WorshipDouble)// 今日是否双倍膜拜,仅在规定时间点内有用 + OfficialPlayer=tagGCChampionshipOfficialPlayer() #(tagGCChampionshipOfficialPlayer OfficialPlayer)// 任职玩家信息,可能没有 + ApplyPlayerCount = 0 #(BYTE ApplyPlayerCount)// 申请该仙官玩家数 + ApplyPlayerList = list() #(vector<tagGCChampionshipOfficialPlayer> ApplyPlayerList)// 申请该仙官玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OfficialID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LastDismissJuniorTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos) + _pos = self.OfficialPlayer.ReadData(_lpData,_pos) + self.ApplyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ApplyPlayerCount): + temApplyPlayerList = tagGCChampionshipOfficialPlayer() + _pos = temApplyPlayerList.ReadData(_lpData, _pos) + self.ApplyPlayerList.append(temApplyPlayerList) + return _pos + + def Clear(self): + self.OfficialID = 0 + self.LastDismissJuniorTime = 0 + self.WorshipCount = 0 + self.WorshipDouble = 0 + self.OfficialPlayer=tagGCChampionshipOfficialPlayer() + self.OfficialPlayer.Clear() + self.ApplyPlayerCount = 0 + self.ApplyPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += self.OfficialPlayer.GetLength() + length += 1 + for i in range(self.ApplyPlayerCount): + length += self.ApplyPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.OfficialID) + data = CommFunc.WriteDWORD(data, self.LastDismissJuniorTime) + data = CommFunc.WriteDWORD(data, self.WorshipCount) + data = CommFunc.WriteBYTE(data, self.WorshipDouble) + data = CommFunc.WriteString(data,self.OfficialPlayer.GetLength(),self.OfficialPlayer.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ApplyPlayerCount) + for i in range(self.ApplyPlayerCount): + data = CommFunc.WriteString(data, self.ApplyPlayerList[i].GetLength(), self.ApplyPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + OfficialID:%d, + LastDismissJuniorTime:%d, + WorshipCount:%d, + WorshipDouble:%d, + OfficialPlayer:%s, + ApplyPlayerCount:%d, + ApplyPlayerList:%s + '''\ + %( + self.OfficialID, + self.LastDismissJuniorTime, + self.WorshipCount, + self.WorshipDouble, + self.OfficialPlayer.OutputString(), + self.ApplyPlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipOfficialInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 官职数据分区ID + OfficialCount = 0 #(BYTE OfficialCount)// 官职数,包含界主及所有仙官 + OfficialList = list() #(vector<tagGCChampionshipOfficial> OfficialList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OfficialCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.OfficialCount): + temOfficialList = tagGCChampionshipOfficial() + _pos = temOfficialList.ReadData(_lpData, _pos) + self.OfficialList.append(temOfficialList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x18 + self.ZoneID = 0 + self.OfficialCount = 0 + self.OfficialList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.OfficialCount): + length += self.OfficialList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.OfficialCount) + for i in range(self.OfficialCount): + data = CommFunc.WriteString(data, self.OfficialList[i].GetLength(), self.OfficialList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + OfficialCount:%d, + OfficialList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.OfficialCount, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipOfficialInfo=tagGCChampionshipOfficialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialInfo.Head.Cmd,m_NAtagGCChampionshipOfficialInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialInfo + + +#------------------------------------------------------ # C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo class tagGCCrossBattlefieldPlayer(Structure): @@ -12753,6 +14354,429 @@ m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo + + +#------------------------------------------------------ +# C0 16 跨服排位战斗结果 #tagGCCrossChampionshipPKOver + +class tagGCCrossChampionshipPKOver(Structure): + Head = tagHead() + GroupMark = 0 #(DWORD GroupMark)// 分组标识:64、32、16、8 - 64、32、16、8强赛;4 - 半决赛; 2 - 决赛 + TimeStr = "" #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss + OverType = 0 #(BYTE OverType)// 0-正常,1-有人离线 + WinnerID = 0 #(DWORD WinnerID)// 胜方ID + LoserID = 0 #(DWORD LoserID)// 败方ID + RoundCount = 0 #(BYTE RoundCount)// PK回合数 + RoundWinnerID = list() #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表 + TagNameLen = 0 #(BYTE TagNameLen) + TagName = "" #(String TagName) + Rank = 0 #(BYTE Rank)// 最终名次,决赛才有 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x16 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.RoundWinnerID.append(value) + self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen) + self.Rank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x16 + self.GroupMark = 0 + self.TimeStr = "" + self.OverType = 0 + self.WinnerID = 0 + self.LoserID = 0 + self.RoundCount = 0 + self.RoundWinnerID = list() + self.TagNameLen = 0 + self.TagName = "" + self.Rank = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 19 + length += 1 + length += 4 + length += 4 + length += 1 + length += 4 * self.RoundCount + length += 1 + length += len(self.TagName) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.GroupMark) + data = CommFunc.WriteString(data, 19, self.TimeStr) + data = CommFunc.WriteBYTE(data, self.OverType) + data = CommFunc.WriteDWORD(data, self.WinnerID) + data = CommFunc.WriteDWORD(data, self.LoserID) + data = CommFunc.WriteBYTE(data, self.RoundCount) + for i in range(self.RoundCount): + data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i]) + data = CommFunc.WriteBYTE(data, self.TagNameLen) + data = CommFunc.WriteString(data, self.TagNameLen, self.TagName) + data = CommFunc.WriteBYTE(data, self.Rank) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + GroupMark:%d, + TimeStr:%s, + OverType:%d, + WinnerID:%d, + LoserID:%d, + RoundCount:%d, + RoundWinnerID:%s, + TagNameLen:%d, + TagName:%s, + Rank:%d + '''\ + %( + self.Head.OutputString(), + self.GroupMark, + self.TimeStr, + self.OverType, + self.WinnerID, + self.LoserID, + self.RoundCount, + "...", + self.TagNameLen, + self.TagName, + self.Rank + ) + return DumpString + + +m_NAtagGCCrossChampionshipPKOver=tagGCCrossChampionshipPKOver() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKOver.Head.Cmd,m_NAtagGCCrossChampionshipPKOver.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKOver + + +#------------------------------------------------------ +# C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo + +class tagGCCrossChampionshipPKBattle(Structure): + _pack_ = 1 + _fields_ = [ + ("BattleNum", c_ubyte), # 对战组编号 1~n + ("WinPlayerID", c_int), # 获胜玩家ID + ("PlayerIDA", c_int), # 玩家IDA + ("PlayerIDB", c_int), # 玩家IDB + ] + + 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.BattleNum = 0 + self.WinPlayerID = 0 + self.PlayerIDA = 0 + self.PlayerIDB = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossChampionshipPKBattle) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo: + BattleNum:%d, + WinPlayerID:%d, + PlayerIDA:%d, + PlayerIDB:%d + '''\ + %( + self.BattleNum, + self.WinPlayerID, + self.PlayerIDA, + self.PlayerIDB + ) + return DumpString + + +class tagGCCrossChampionshipPKGroup(Structure): + GroupMark = 0 #(DWORD GroupMark)// 战斗分区mark, 如 64、32、16、8、4-半决赛、2-决赛; + BattleCount = 0 #(BYTE BattleCount)// 对战组数 + BattleList = list() #(vector<tagGCCrossChampionshipPKBattle> BattleList)// 对战组列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BattleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BattleCount): + temBattleList = tagGCCrossChampionshipPKBattle() + _pos = temBattleList.ReadData(_lpData, _pos) + self.BattleList.append(temBattleList) + return _pos + + def Clear(self): + self.GroupMark = 0 + self.BattleCount = 0 + self.BattleList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.BattleCount): + length += self.BattleList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GroupMark) + data = CommFunc.WriteBYTE(data, self.BattleCount) + for i in range(self.BattleCount): + data = CommFunc.WriteString(data, self.BattleList[i].GetLength(), self.BattleList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GroupMark:%d, + BattleCount:%d, + BattleList:%s + '''\ + %( + self.GroupMark, + self.BattleCount, + "..." + ) + return DumpString + + +class tagGCCrossChampionshipPKPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID)// 玩家ID + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 + RealmLV = 0 #(WORD RealmLV) + 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.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 4 + length += 4 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + FightPower:%d, + FightPowerEx:%d, + RealmLV:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.FightPower, + self.FightPowerEx, + self.RealmLV + ) + return DumpString + + +class tagGCCrossChampionshipPKZoneGroupInfo(Structure): + Head = tagHead() + ActID = 0 #(DWORD ActID)// 活动ID,活动ID不同则可重置前端排位赛相关缓存数据 + StateError = 0 #(BYTE StateError)// 本次活动是否已经出现流程状态异常;如服务器异常或维护服务器导致跳过步骤,则会废弃该次比赛,直到下次新活动; + ZoneID = 0 #(BYTE ZoneID)// 排位分区ID + PlayerCount = 0 #(BYTE PlayerCount)// 参赛玩家数 + PlayerList = list() #(vector<tagGCCrossChampionshipPKPlayer> PlayerList) + GroupCount = 0 #(WORD GroupCount) + GroupList = list() #(vector<tagGCCrossChampionshipPKGroup> GroupList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temPlayerList = tagGCCrossChampionshipPKPlayer() + _pos = temPlayerList.ReadData(_lpData, _pos) + self.PlayerList.append(temPlayerList) + self.GroupCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.GroupCount): + temGroupList = tagGCCrossChampionshipPKGroup() + _pos = temGroupList.ReadData(_lpData, _pos) + self.GroupList.append(temGroupList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x15 + self.ActID = 0 + self.StateError = 0 + self.ZoneID = 0 + self.PlayerCount = 0 + self.PlayerList = list() + self.GroupCount = 0 + self.GroupList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.PlayerList[i].GetLength() + length += 2 + 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.WriteDWORD(data, self.ActID) + data = CommFunc.WriteBYTE(data, self.StateError) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer()) + data = CommFunc.WriteWORD(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, + ActID:%d, + StateError:%d, + ZoneID:%d, + PlayerCount:%d, + PlayerList:%s, + GroupCount:%d, + GroupList:%s + '''\ + %( + self.Head.OutputString(), + self.ActID, + self.StateError, + self.ZoneID, + self.PlayerCount, + "...", + self.GroupCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossChampionshipPKZoneGroupInfo=tagGCCrossChampionshipPKZoneGroupInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.Cmd,m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKZoneGroupInfo #------------------------------------------------------ @@ -13583,6 +15607,118 @@ #------------------------------------------------------ +# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo + +class tagGCCrossYaomoBossPlayerHurtInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 总伤害值,小于亿部分 + ("HurtTotalEx", c_int), # 总伤害值,整除亿部分 + ("AwardState", c_int), # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x11 + 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 = 0xC0 + self.SubCmd = 0x11 + self.HurtTotal = 0 + self.HurtTotalEx = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossYaomoBossPlayerHurtInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalEx:%d, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalEx, + self.AwardState + ) + return DumpString + + +m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo + + +#------------------------------------------------------ +# C0 10 跨服所属分区信息 #tagGCCrossZoneInfo + +class tagGCCrossZoneInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CommZoneID", c_ubyte), # 所属常规分区ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x10 + 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 = 0xC0 + self.SubCmd = 0x10 + self.CommZoneID = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossZoneInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 10 跨服所属分区信息 //tagGCCrossZoneInfo: + Cmd:%s, + SubCmd:%s, + CommZoneID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CommZoneID + ) + return DumpString + + +m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo + + +#------------------------------------------------------ # C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo class tagGCLuckyCloudBuyLotteryRec(Structure): @@ -13922,13 +16058,67 @@ return DumpString +class tagGCLuckyCloudBuyRoundTime(Structure): + StartTime = "" #(char StartTime[5])// 开始时间 H:M + EndtTime = "" #(char EndtTime[5])// 结束时间 H:M + RoundMax = 0 #(BYTE RoundMax)// 本时段最大轮次 + 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) + self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.StartTime = "" + self.EndtTime = "" + self.RoundMax = 0 + return + + def GetLength(self): + length = 0 + length += 5 + length += 5 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 5, self.StartTime) + data = CommFunc.WriteString(data, 5, self.EndtTime) + data = CommFunc.WriteBYTE(data, self.RoundMax) + return data + + def OutputString(self): + DumpString = ''' + StartTime:%s, + EndtTime:%s, + RoundMax:%d + '''\ + %( + self.StartTime, + self.EndtTime, + self.RoundMax + ) + return DumpString + + class tagGCLuckyCloudBuyRoundInfo(Structure): Head = tagHead() ZoneID = 0 #(BYTE ZoneID)// 所属分区ID StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + RoundTimeCount = 0 #(BYTE RoundTimeCount) + RoundTimeList = list() #(vector<tagGCLuckyCloudBuyRoundTime> RoundTimeList)//轮次时间段 RoundID = 0 #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存 - RoundNum = 0 #(BYTE RoundNum)// 今日第几轮 + RoundNum = 0 #(BYTE RoundNum)// 当前时段第几轮 SuperItemID = 0 #(DWORD SuperItemID)// 大奖物品ID SuperItemCount = 0 #(BYTE SuperItemCount)// 大奖物品个数 SuperItemMoneyType = 0 #(BYTE SuperItemMoneyType)// 大奖价值货币类型 @@ -13952,6 +16142,11 @@ self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.RoundTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundTimeCount): + temRoundTimeList = tagGCLuckyCloudBuyRoundTime() + _pos = temRoundTimeList.ReadData(_lpData, _pos) + self.RoundTimeList.append(temRoundTimeList) self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -13979,6 +16174,8 @@ self.ZoneID = 0 self.StartDate = "" self.EndtDate = "" + self.RoundTimeCount = 0 + self.RoundTimeList = list() self.RoundID = 0 self.RoundNum = 0 self.SuperItemID = 0 @@ -13998,6 +16195,9 @@ length += 1 length += 10 length += 10 + length += 1 + for i in range(self.RoundTimeCount): + length += self.RoundTimeList[i].GetLength() length += 4 length += 1 length += 4 @@ -14020,6 +16220,9 @@ data = CommFunc.WriteBYTE(data, self.ZoneID) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.RoundTimeCount) + for i in range(self.RoundTimeCount): + data = CommFunc.WriteString(data, self.RoundTimeList[i].GetLength(), self.RoundTimeList[i].GetBuffer()) data = CommFunc.WriteDWORD(data, self.RoundID) data = CommFunc.WriteBYTE(data, self.RoundNum) data = CommFunc.WriteDWORD(data, self.SuperItemID) @@ -14041,6 +16244,8 @@ ZoneID:%d, StartDate:%s, EndtDate:%s, + RoundTimeCount:%d, + RoundTimeList:%s, RoundID:%d, RoundNum:%d, SuperItemID:%d, @@ -14058,6 +16263,8 @@ self.ZoneID, self.StartDate, self.EndtDate, + self.RoundTimeCount, + "...", self.RoundID, self.RoundNum, self.SuperItemID, @@ -14134,6 +16341,8 @@ ("RecordID", c_ubyte), ("TodayPayCount", c_ushort), # 今日已购买次数 ("TotalPayCount", c_int), # 累计总购买次数 + ("WeekPayCount", c_ushort), # 周总购买次数 + ("MonthPayCount", c_ushort), # 月总购买次数 ] def __init__(self): @@ -14149,6 +16358,8 @@ self.RecordID = 0 self.TodayPayCount = 0 self.TotalPayCount = 0 + self.WeekPayCount = 0 + self.MonthPayCount = 0 return def GetLength(self): @@ -14161,12 +16372,16 @@ DumpString = '''// A1 10 充值购买次数信息 //tagMCCoinToGoldCountInfo: RecordID:%d, TodayPayCount:%d, - TotalPayCount:%d + TotalPayCount:%d, + WeekPayCount:%d, + MonthPayCount:%d '''\ %( self.RecordID, self.TodayPayCount, - self.TotalPayCount + self.TotalPayCount, + self.WeekPayCount, + self.MonthPayCount ) return DumpString @@ -14245,6 +16460,9 @@ OrderLen = 0 #(BYTE OrderLen) OrderID = "" #(String OrderID)// 订单id Coin = 0 #(DWORD Coin)// 充值的点卷 + RecordID = 0 #(BYTE RecordID)// ctgID + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo) data = None def __init__(self): @@ -14259,6 +16477,9 @@ self.OrderLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.OrderID,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderLen) self.Coin,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) return _pos def Clear(self): @@ -14269,6 +16490,9 @@ self.OrderLen = 0 self.OrderID = "" self.Coin = 0 + self.RecordID = 0 + self.OrderInfoLen = 0 + self.OrderInfo = "" return def GetLength(self): @@ -14277,6 +16501,9 @@ length += 1 length += len(self.OrderID) length += 4 + length += 1 + length += 1 + length += len(self.OrderInfo) return length @@ -14286,6 +16513,9 @@ data = CommFunc.WriteBYTE(data, self.OrderLen) data = CommFunc.WriteString(data, self.OrderLen, self.OrderID) data = CommFunc.WriteDWORD(data, self.Coin) + data = CommFunc.WriteBYTE(data, self.RecordID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) return data def OutputString(self): @@ -14293,13 +16523,19 @@ Head:%s, OrderLen:%d, OrderID:%s, - Coin:%d + Coin:%d, + RecordID:%d, + OrderInfoLen:%d, + OrderInfo:%s '''\ %( self.Head.OutputString(), self.OrderLen, self.OrderID, - self.Coin + self.Coin, + self.RecordID, + self.OrderInfoLen, + self.OrderInfo ) return DumpString @@ -16434,6 +18670,7 @@ ("KillCnt", c_int), #击杀次数 ("ItemAddCnt", c_int), #物品增加次数 ("BuyCnt", c_ubyte), #购买次数 + ("KillCntTotal", c_int), #击杀次数 - 累计 ] def __init__(self): @@ -16450,6 +18687,7 @@ self.KillCnt = 0 self.ItemAddCnt = 0 self.BuyCnt = 0 + self.KillCntTotal = 0 return def GetLength(self): @@ -16463,13 +18701,15 @@ BossType:%d, KillCnt:%d, ItemAddCnt:%d, - BuyCnt:%d + BuyCnt:%d, + KillCntTotal:%d '''\ %( self.BossType, self.KillCnt, self.ItemAddCnt, - self.BuyCnt + self.BuyCnt, + self.KillCntTotal ) return DumpString @@ -16892,6 +19132,118 @@ m_NAtagMCCollectionItemInfo=tagMCCollectionItemInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectionItemInfo.Head.Cmd,m_NAtagMCCollectionItemInfo.Head.SubCmd))] = m_NAtagMCCollectionItemInfo + + +#------------------------------------------------------ +# A3 CC 自定义奖励信息 #tagMCCustomAwardInfo + +class tagMCCustomAwardState(Structure): + _pack_ = 1 + _fields_ = [ + ("KeyNum", c_ushort), # 奖励记录key编号,0~255,每个key存31个ID记录 0-30为编号0, 31-61为编号1.. + ("CanGetState", c_int), # 是否可领取;按位记录是否可领取 + ("GetState", 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.KeyNum = 0 + self.CanGetState = 0 + self.GetState = 0 + return + + def GetLength(self): + return sizeof(tagMCCustomAwardState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CC 自定义奖励信息 //tagMCCustomAwardInfo: + KeyNum:%d, + CanGetState:%d, + GetState:%d + '''\ + %( + self.KeyNum, + self.CanGetState, + self.GetState + ) + return DumpString + + +class tagMCCustomAwardInfo(Structure): + Head = tagHead() + RecordStateCnt = 0 #(WORD RecordStateCnt)// 记录个数 + RecordStateList = list() #(vector<tagMCCustomAwardState> RecordStateList)// 记录列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCC + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RecordStateCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.RecordStateCnt): + temRecordStateList = tagMCCustomAwardState() + _pos = temRecordStateList.ReadData(_lpData, _pos) + self.RecordStateList.append(temRecordStateList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCC + self.RecordStateCnt = 0 + self.RecordStateList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.RecordStateCnt): + length += self.RecordStateList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.RecordStateCnt) + for i in range(self.RecordStateCnt): + data = CommFunc.WriteString(data, self.RecordStateList[i].GetLength(), self.RecordStateList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordStateCnt:%d, + RecordStateList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordStateCnt, + "..." + ) + return DumpString + + +m_NAtagMCCustomAwardInfo=tagMCCustomAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCustomAwardInfo.Head.Cmd,m_NAtagMCCustomAwardInfo.Head.SubCmd))] = m_NAtagMCCustomAwardInfo #------------------------------------------------------ @@ -19076,6 +21428,338 @@ #------------------------------------------------------ +# A3 C7 古宝信息 #tagMCGubaoInfo + +class tagMCGubao(Structure): + _pack_ = 1 + _fields_ = [ + ("GubaoID", c_ushort), + ("GubaoStar", c_ubyte), + ("GubaoLV", 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.GubaoID = 0 + self.GubaoStar = 0 + self.GubaoLV = 0 + return + + def GetLength(self): + return sizeof(tagMCGubao) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C7 古宝信息 //tagMCGubaoInfo: + GubaoID:%d, + GubaoStar:%d, + GubaoLV:%d + '''\ + %( + self.GubaoID, + self.GubaoStar, + self.GubaoLV + ) + return DumpString + + +class tagMCGubaoInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + GubaoInfoList = list() #(vector<tagMCGubao> GubaoInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC7 + 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): + temGubaoInfoList = tagMCGubao() + _pos = temGubaoInfoList.ReadData(_lpData, _pos) + self.GubaoInfoList.append(temGubaoInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC7 + self.Count = 0 + self.GubaoInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.GubaoInfoList[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.GubaoInfoList[i].GetLength(), self.GubaoInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + GubaoInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGubaoInfo=tagMCGubaoInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoInfo.Head.Cmd,m_NAtagMCGubaoInfo.Head.SubCmd))] = m_NAtagMCGubaoInfo + + +#------------------------------------------------------ +# A3 CA 古宝物品特殊效果信息 #tagMCGubaoItemEffInfo + +class tagMCGubaoItemEff(Structure): + _pack_ = 1 + _fields_ = [ + ("GubaoID", c_ushort), + ("EffType", c_ubyte), # 不同古宝ID允许拥有相同效果类型,进度值每个古宝ID单独统计 + ("EffValue", 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.GubaoID = 0 + self.EffType = 0 + self.EffValue = 0 + return + + def GetLength(self): + return sizeof(tagMCGubaoItemEff) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CA 古宝物品特殊效果信息 //tagMCGubaoItemEffInfo: + GubaoID:%d, + EffType:%d, + EffValue:%d + '''\ + %( + self.GubaoID, + self.EffType, + self.EffValue + ) + return DumpString + + +class tagMCGubaoItemEffInfo(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + ItemEffInfoList = list() #(vector<tagMCGubaoItemEff> ItemEffInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCA + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temItemEffInfoList = tagMCGubaoItemEff() + _pos = temItemEffInfoList.ReadData(_lpData, _pos) + self.ItemEffInfoList.append(temItemEffInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCA + self.Count = 0 + self.ItemEffInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.ItemEffInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ItemEffInfoList[i].GetLength(), self.ItemEffInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ItemEffInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGubaoItemEffInfo=tagMCGubaoItemEffInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoItemEffInfo.Head.Cmd,m_NAtagMCGubaoItemEffInfo.Head.SubCmd))] = m_NAtagMCGubaoItemEffInfo + + +#------------------------------------------------------ +# A3 CB 古宝碎片信息 #tagMCGubaoPieceInfo + +class tagMCGubaoPiece(Structure): + _pack_ = 1 + _fields_ = [ + ("GubaoID", c_ushort), + ("PieceCount", 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.GubaoID = 0 + self.PieceCount = 0 + return + + def GetLength(self): + return sizeof(tagMCGubaoPiece) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CB 古宝碎片信息 //tagMCGubaoPieceInfo: + GubaoID:%d, + PieceCount:%d + '''\ + %( + self.GubaoID, + self.PieceCount + ) + return DumpString + + +class tagMCGubaoPieceInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + PieceInfoList = list() #(vector<tagMCGubaoPiece> PieceInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCB + 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): + temPieceInfoList = tagMCGubaoPiece() + _pos = temPieceInfoList.ReadData(_lpData, _pos) + self.PieceInfoList.append(temPieceInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCB + self.Count = 0 + self.PieceInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.PieceInfoList[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.PieceInfoList[i].GetLength(), self.PieceInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + PieceInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGubaoPieceInfo=tagMCGubaoPieceInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoPieceInfo.Head.Cmd,m_NAtagMCGubaoPieceInfo.Head.SubCmd))] = m_NAtagMCGubaoPieceInfo + + +#------------------------------------------------------ # A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord class tagMCHistoryReChargeAwardRecord(Structure): @@ -19245,6 +21929,222 @@ m_NAtagMCHorsePetSkinData=tagMCHorsePetSkinData() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorsePetSkinData.Head.Cmd,m_NAtagMCHorsePetSkinData.Head.SubCmd))] = m_NAtagMCHorsePetSkinData + + +#------------------------------------------------------ +# A3 10 通知坐骑幻化时效信息 #tagMCHorseSkinTimeInfoList + +class tagMCHorseSkinTimeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("ID", c_int), # 对应坐骑幻化表ID + ("InvalidTime", 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.ID = 0 + self.InvalidTime = 0 + return + + def GetLength(self): + return sizeof(tagMCHorseSkinTimeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 10 通知坐骑幻化时效信息 //tagMCHorseSkinTimeInfoList: + ID:%d, + InvalidTime:%d + '''\ + %( + self.ID, + self.InvalidTime + ) + return DumpString + + +class tagMCHorseSkinTimeInfoList(Structure): + Head = tagHead() + TimeCnt = 0 #(BYTE TimeCnt)//个数 + TimeInfoList = list() #(vector<tagMCHorseSkinTimeInfo> TimeInfoList)// 数据列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TimeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TimeCnt): + temTimeInfoList = tagMCHorseSkinTimeInfo() + _pos = temTimeInfoList.ReadData(_lpData, _pos) + self.TimeInfoList.append(temTimeInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x10 + self.TimeCnt = 0 + self.TimeInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.TimeCnt): + length += self.TimeInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TimeCnt) + for i in range(self.TimeCnt): + data = CommFunc.WriteString(data, self.TimeInfoList[i].GetLength(), self.TimeInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TimeCnt:%d, + TimeInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.TimeCnt, + "..." + ) + return DumpString + + +m_NAtagMCHorseSkinTimeInfoList=tagMCHorseSkinTimeInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorseSkinTimeInfoList.Head.Cmd,m_NAtagMCHorseSkinTimeInfoList.Head.SubCmd))] = m_NAtagMCHorseSkinTimeInfoList + + +#------------------------------------------------------ +# A3 CD 坐骑星级信息 #tagMCHorseStarInfo + +class tagMCHorseStar(Structure): + _pack_ = 1 + _fields_ = [ + ("HorseID", c_int), # 坐骑表ID + ("Star", 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.HorseID = 0 + self.Star = 0 + return + + def GetLength(self): + return sizeof(tagMCHorseStar) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CD 坐骑星级信息 //tagMCHorseStarInfo: + HorseID:%d, + Star:%d + '''\ + %( + self.HorseID, + self.Star + ) + return DumpString + + +class tagMCHorseStarInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + HorseStarList = list() #(vector<tagMCHorseStar> HorseStarList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCD + 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): + temHorseStarList = tagMCHorseStar() + _pos = temHorseStarList.ReadData(_lpData, _pos) + self.HorseStarList.append(temHorseStarList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCD + self.Count = 0 + self.HorseStarList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.HorseStarList[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.HorseStarList[i].GetLength(), self.HorseStarList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + HorseStarList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCHorseStarInfo=tagMCHorseStarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorseStarInfo.Head.Cmd,m_NAtagMCHorseStarInfo.Head.SubCmd))] = m_NAtagMCHorseStarInfo #------------------------------------------------------ @@ -20400,6 +23300,7 @@ ItemAddCnt = 0 #(WORD ItemAddCnt)//物品增加次数 PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表 + EnterCntTotal = 0 #(DWORD EnterCntTotal)//累计进入次数 data = None def __init__(self): @@ -20416,6 +23317,7 @@ for i in range(self.PassGradeCnt): value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.PassGrade.append(value) + self.EnterCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -20425,6 +23327,7 @@ self.ItemAddCnt = 0 self.PassGradeCnt = 0 self.PassGrade = list() + self.EnterCntTotal = 0 return def GetLength(self): @@ -20435,6 +23338,7 @@ length += 2 length += 1 length += 4 * self.PassGradeCnt + length += 4 return length @@ -20447,6 +23351,7 @@ data = CommFunc.WriteBYTE(data, self.PassGradeCnt) for i in range(self.PassGradeCnt): data = CommFunc.WriteDWORD(data, self.PassGrade[i]) + data = CommFunc.WriteDWORD(data, self.EnterCntTotal) return data def OutputString(self): @@ -20456,7 +23361,8 @@ RecoverCnt:%d, ItemAddCnt:%d, PassGradeCnt:%d, - PassGrade:%s + PassGrade:%s, + EnterCntTotal:%d '''\ %( self.FBID, @@ -20464,7 +23370,8 @@ self.RecoverCnt, self.ItemAddCnt, self.PassGradeCnt, - "..." + "...", + self.EnterCntTotal ) return DumpString @@ -21249,6 +24156,185 @@ #------------------------------------------------------ +# A3 C8 神通等级信息 #tagMCShentongLVInfo + +class tagMCShentongLV(Structure): + _pack_ = 1 + _fields_ = [ + ("ShentongID", c_ubyte), + ("ClassLV", c_ubyte), + ("LV", 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.ShentongID = 0 + self.ClassLV = 0 + self.LV = 0 + return + + def GetLength(self): + return sizeof(tagMCShentongLV) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C8 神通等级信息 //tagMCShentongLVInfo: + ShentongID:%d, + ClassLV:%d, + LV:%d + '''\ + %( + self.ShentongID, + self.ClassLV, + self.LV + ) + return DumpString + + +class tagMCShentongLVInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + ShentongLVList = list() #(vector<tagMCShentongLV> ShentongLVList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC8 + 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): + temShentongLVList = tagMCShentongLV() + _pos = temShentongLVList.ReadData(_lpData, _pos) + self.ShentongLVList.append(temShentongLVList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC8 + self.Count = 0 + self.ShentongLVList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.ShentongLVList[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.ShentongLVList[i].GetLength(), self.ShentongLVList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ShentongLVList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCShentongLVInfo=tagMCShentongLVInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongLVInfo.Head.Cmd,m_NAtagMCShentongLVInfo.Head.SubCmd))] = m_NAtagMCShentongLVInfo + + +#------------------------------------------------------ +# A3 C9 神通技能设置信息 #tagMCShentongSkillInfo + +class tagMCShentongSkillInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + SkillIDList = list() #(vector<DWORD> SkillIDList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC9 + 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): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SkillIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC9 + self.Count = 0 + self.SkillIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.Count + + 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.WriteDWORD(data, self.SkillIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SkillIDList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCShentongSkillInfo=tagMCShentongSkillInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongSkillInfo.Head.Cmd,m_NAtagMCShentongSkillInfo.Head.SubCmd))] = m_NAtagMCShentongSkillInfo + + +#------------------------------------------------------ # A3 44 当日累计充值多选一礼包信息 #tagMCSingleGoldGift class tagMCSingleGoldGift(Structure): @@ -21903,6 +24989,58 @@ #------------------------------------------------------ +# A3 43 成就积分信息 #tagMCSuccessScoreInfo + +class tagMCSuccessScoreInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ScoreAwardState", c_int), #成就积分领奖记录,按奖励索引位记录是否领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x43 + 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 = 0x43 + self.ScoreAwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCSuccessScoreInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 43 成就积分信息 //tagMCSuccessScoreInfo: + Cmd:%s, + SubCmd:%s, + ScoreAwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ScoreAwardState + ) + return DumpString + + +m_NAtagMCSuccessScoreInfo=tagMCSuccessScoreInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuccessScoreInfo.Cmd,m_NAtagMCSuccessScoreInfo.SubCmd))] = m_NAtagMCSuccessScoreInfo + + +#------------------------------------------------------ #A3 14 通知各功能的祝福值 #tagMCSyncBlessValue class tagMCSyncSingleBlessValue(Structure): @@ -22093,6 +25231,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("IsPass", c_ubyte), #是否通关副本 + ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取 ] def __init__(self): @@ -22110,6 +25249,7 @@ self.Cmd = 0xA3 self.SubCmd = 0x11 self.IsPass = 0 + self.XXZLAwardState = 0 return def GetLength(self): @@ -22122,12 +25262,14 @@ DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo: Cmd:%s, SubCmd:%s, - IsPass:%d + IsPass:%d, + XXZLAwardState:%d '''\ %( self.Cmd, self.SubCmd, - self.IsPass + self.IsPass, + self.XXZLAwardState ) return DumpString @@ -22137,16 +25279,410 @@ #------------------------------------------------------ +# A3 CE 称号星级信息 #tagMCTitleStarInfo + +class tagMCTitleStar(Structure): + _pack_ = 1 + _fields_ = [ + ("TitleID", c_int), # 称号ID + ("Star", 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.TitleID = 0 + self.Star = 0 + return + + def GetLength(self): + return sizeof(tagMCTitleStar) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CE 称号星级信息 //tagMCTitleStarInfo: + TitleID:%d, + Star:%d + '''\ + %( + self.TitleID, + self.Star + ) + return DumpString + + +class tagMCTitleStarInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + TitleStarList = list() #(vector<tagMCTitleStar> TitleStarList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCE + 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): + temTitleStarList = tagMCTitleStar() + _pos = temTitleStarList.ReadData(_lpData, _pos) + self.TitleStarList.append(temTitleStarList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCE + self.Count = 0 + self.TitleStarList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.TitleStarList[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.TitleStarList[i].GetLength(), self.TitleStarList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + TitleStarList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCTitleStarInfo=tagMCTitleStarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTitleStarInfo.Head.Cmd,m_NAtagMCTitleStarInfo.Head.SubCmd))] = m_NAtagMCTitleStarInfo + + +#------------------------------------------------------ +# A3 56 通天令信息 #tagMCTongTianLingInfo + +class tagMCTongTianLingInfo(Structure): + Head = tagHead() + TTLBuyState = 0 #(BYTE TTLBuyState)//通天令是否已购买 + TTLLV = 0 #(BYTE TTLLV)//通天令等级,从0开始 + CurPoint = 0 #(DWORD CurPoint)//通天令当前等级经验积分点 + AwardStateCount = 0 #(BYTE AwardStateCount)//等级领奖记录值数,每个值存31个记录 0-30, 31-61, ... + CommAwardStateList = list() #(vector<DWORD> CommAwardStateList)//常规奖励领奖记录,按等级二进制位存储是否领奖 + XianAwardStateList = list() #(vector<DWORD> XianAwardStateList)//仙品奖励领奖记录,按等级二进制位存储是否领奖 + StartTime = 0 #(DWORD StartTime)//通天令本轮开始时间戳,秒 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x56 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TTLBuyState,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TTLLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.CommAwardStateList.append(value) + for i in range(self.AwardStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.XianAwardStateList.append(value) + self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x56 + self.TTLBuyState = 0 + self.TTLLV = 0 + self.CurPoint = 0 + self.AwardStateCount = 0 + self.CommAwardStateList = list() + self.XianAwardStateList = list() + self.StartTime = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 + length += 1 + length += 4 * self.AwardStateCount + length += 4 * self.AwardStateCount + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TTLBuyState) + data = CommFunc.WriteBYTE(data, self.TTLLV) + data = CommFunc.WriteDWORD(data, self.CurPoint) + data = CommFunc.WriteBYTE(data, self.AwardStateCount) + for i in range(self.AwardStateCount): + data = CommFunc.WriteDWORD(data, self.CommAwardStateList[i]) + for i in range(self.AwardStateCount): + data = CommFunc.WriteDWORD(data, self.XianAwardStateList[i]) + data = CommFunc.WriteDWORD(data, self.StartTime) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TTLBuyState:%d, + TTLLV:%d, + CurPoint:%d, + AwardStateCount:%d, + CommAwardStateList:%s, + XianAwardStateList:%s, + StartTime:%d + '''\ + %( + self.Head.OutputString(), + self.TTLBuyState, + self.TTLLV, + self.CurPoint, + self.AwardStateCount, + "...", + "...", + self.StartTime + ) + return DumpString + + +m_NAtagMCTongTianLingInfo=tagMCTongTianLingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingInfo.Head.Cmd,m_NAtagMCTongTianLingInfo.Head.SubCmd))] = m_NAtagMCTongTianLingInfo + + +#------------------------------------------------------ +# A3 58 通天令任务奖励信息 #tagMCTongTianLingTaskAwardInfo + +class tagMCTongTianLingTaskAwardInfo(Structure): + Head = tagHead() + AwardStateCount = 0 #(BYTE AwardStateCount) + TaskAwardStateList = list() #(vector<DWORD> TaskAwardStateList)//任务领奖记录值个数,按任务ID二进制位存储是否已领取,每个值存31个记录 0-30, 31-61, ... + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x58 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TaskAwardStateList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x58 + self.AwardStateCount = 0 + self.TaskAwardStateList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.AwardStateCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AwardStateCount) + for i in range(self.AwardStateCount): + data = CommFunc.WriteDWORD(data, self.TaskAwardStateList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AwardStateCount:%d, + TaskAwardStateList:%s + '''\ + %( + self.Head.OutputString(), + self.AwardStateCount, + "..." + ) + return DumpString + + +m_NAtagMCTongTianLingTaskAwardInfo=tagMCTongTianLingTaskAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskAwardInfo.Head.Cmd,m_NAtagMCTongTianLingTaskAwardInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskAwardInfo + + +#------------------------------------------------------ +# A3 57 通天令任务进度信息 #tagMCTongTianLingTaskValueInfo + +class tagMCTongTianLingTaskValue(Structure): + _pack_ = 1 + _fields_ = [ + ("TaskType", c_ubyte), #成就类型 + ("IsDaily", c_ubyte), #是否每日任务 + ("TaskValue", 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.TaskType = 0 + self.IsDaily = 0 + self.TaskValue = 0 + return + + def GetLength(self): + return sizeof(tagMCTongTianLingTaskValue) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 57 通天令任务进度信息 //tagMCTongTianLingTaskValueInfo: + TaskType:%d, + IsDaily:%d, + TaskValue:%d + '''\ + %( + self.TaskType, + self.IsDaily, + self.TaskValue + ) + return DumpString + + +class tagMCTongTianLingTaskValueInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//信息个数 + TaskValueList = list() #(vector<tagMCTongTianLingTaskValue> TaskValueList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x57 + 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): + temTaskValueList = tagMCTongTianLingTaskValue() + _pos = temTaskValueList.ReadData(_lpData, _pos) + self.TaskValueList.append(temTaskValueList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x57 + self.Count = 0 + self.TaskValueList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.TaskValueList[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.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + TaskValueList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCTongTianLingTaskValueInfo=tagMCTongTianLingTaskValueInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskValueInfo.Head.Cmd,m_NAtagMCTongTianLingTaskValueInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskValueInfo + + +#------------------------------------------------------ #A3 01 坐骑培养信息 #tagTrainHorseData class tagTrainHorseData(Structure): Head = tagHead() LV = 0 #(BYTE LV)//等阶 EatItemCount = 0 #(DWORD EatItemCount)//当前阶已吃丹个数 - SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位 + SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位,废弃,使用 SkinPlusStateList TrainTypes = 0 #(BYTE TrainTypes)//培养类型数 TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1 TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1 + SkinPlusStateCount = 0 #(BYTE SkinPlusStateCount)//幻化激活状态值数 + SkinPlusStateList = list() #(vector<DWORD> SkinPlusStateList)//幻化激活状态值列表,按位存储是否激活,幻化编号ID对应位 data = None def __init__(self): @@ -22168,6 +25704,10 @@ for i in range(self.TrainTypes): value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.TrainItemCountList.append(value) + self.SkinPlusStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SkinPlusStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SkinPlusStateList.append(value) return _pos def Clear(self): @@ -22181,6 +25721,8 @@ self.TrainTypes = 0 self.TrainLVList = list() self.TrainItemCountList = list() + self.SkinPlusStateCount = 0 + self.SkinPlusStateList = list() return def GetLength(self): @@ -22192,6 +25734,8 @@ length += 1 length += 4 * self.TrainTypes length += 4 * self.TrainTypes + length += 1 + length += 4 * self.SkinPlusStateCount return length @@ -22206,6 +25750,9 @@ data = CommFunc.WriteDWORD(data, self.TrainLVList[i]) for i in range(self.TrainTypes): data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i]) + data = CommFunc.WriteBYTE(data, self.SkinPlusStateCount) + for i in range(self.SkinPlusStateCount): + data = CommFunc.WriteDWORD(data, self.SkinPlusStateList[i]) return data def OutputString(self): @@ -22216,7 +25763,9 @@ SkinPlusState:%d, TrainTypes:%d, TrainLVList:%s, - TrainItemCountList:%s + TrainItemCountList:%s, + SkinPlusStateCount:%d, + SkinPlusStateList:%s '''\ %( self.Head.OutputString(), @@ -22225,6 +25774,8 @@ self.SkinPlusState, self.TrainTypes, "...", + "...", + self.SkinPlusStateCount, "..." ) return DumpString @@ -22862,6 +26413,142 @@ #------------------------------------------------------ +# A5 10 传功奖励结果 #tagMCChuangongResult + +class tagMCChuangongItem(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(tagMCChuangongItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 10 传功奖励结果 //tagMCChuangongResult: + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCChuangongResult(Structure): + Head = tagHead() + FromLV = 0 #(WORD FromLV)// 传功前等级 + ToLV = 0 #(WORD ToLV)// 传功后等级 + Exp = 0 #(DWORD Exp)// 获得经验求余亿部分 + ExpPoint = 0 #(DWORD ExpPoint)// 获得经验整除亿部分 + ItemCount = 0 #(BYTE ItemCount) + AwardItemList = list() #(vector<tagMCChuangongItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FromLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ToLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemCount): + temAwardItemList = tagMCChuangongItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x10 + self.FromLV = 0 + self.ToLV = 0 + self.Exp = 0 + self.ExpPoint = 0 + self.ItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 2 + length += 4 + length += 4 + length += 1 + for i in range(self.ItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.FromLV) + data = CommFunc.WriteWORD(data, self.ToLV) + data = CommFunc.WriteDWORD(data, self.Exp) + data = CommFunc.WriteDWORD(data, self.ExpPoint) + data = CommFunc.WriteBYTE(data, self.ItemCount) + for i in range(self.ItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FromLV:%d, + ToLV:%d, + Exp:%d, + ExpPoint:%d, + ItemCount:%d, + AwardItemList:%s + '''\ + %( + self.Head.OutputString(), + self.FromLV, + self.ToLV, + self.Exp, + self.ExpPoint, + self.ItemCount, + "..." + ) + return DumpString + + +m_NAtagMCChuangongResult=tagMCChuangongResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChuangongResult.Head.Cmd,m_NAtagMCChuangongResult.Head.SubCmd))] = m_NAtagMCChuangongResult + + +#------------------------------------------------------ # A5 02 家族活跃令兑换结果 #tagMCFamilyActivityExchangeResult class tagMCFamilyActivityExchangeResult(Structure): @@ -22914,6 +26601,197 @@ #------------------------------------------------------ +# A5 08 家族事务信息 #tagMCFamilyAffairInfo + +class tagMCFamilyAffair(Structure): + _pack_ = 1 + _fields_ = [ + ("AffairID", c_ushort), # 事务ID + ("Star", c_ubyte), # 星级 + ("State", c_ubyte), # 状态:0-无;1-进行中;2-已完成 + ("RemainDuration", 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.AffairID = 0 + self.Star = 0 + self.State = 0 + self.RemainDuration = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyAffair) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 08 家族事务信息 //tagMCFamilyAffairInfo: + AffairID:%d, + Star:%d, + State:%d, + RemainDuration:%d + '''\ + %( + self.AffairID, + self.Star, + self.State, + self.RemainDuration + ) + return DumpString + + +class tagMCFamilyAffairInfo(Structure): + Head = tagHead() + RefreshFreeCount = 0 #(BYTE RefreshFreeCount)// 今日已免费刷新次数 + Count = 0 #(BYTE Count) + AffairInfoList = list() #(vector<tagMCFamilyAffair> AffairInfoList)// 事务列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RefreshFreeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAffairInfoList = tagMCFamilyAffair() + _pos = temAffairInfoList.ReadData(_lpData, _pos) + self.AffairInfoList.append(temAffairInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x08 + self.RefreshFreeCount = 0 + self.Count = 0 + self.AffairInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.AffairInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RefreshFreeCount) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AffairInfoList[i].GetLength(), self.AffairInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RefreshFreeCount:%d, + Count:%d, + AffairInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.RefreshFreeCount, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFamilyAffairInfo=tagMCFamilyAffairInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyAffairInfo.Head.Cmd,m_NAtagMCFamilyAffairInfo.Head.SubCmd))] = m_NAtagMCFamilyAffairInfo + + +#------------------------------------------------------ +# A5 07 家族boss副本玩家信息 #tagMCFamilyBosFBPlayerInfo + +class tagMCFamilyBosFBPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 累计伤血,亿求余部分 + ("HurtTotalPoint", c_int), # 累计伤血,亿整除部分 + ("FightSeconds", c_int), # 已累计战斗时长,秒 + ("HurtAwardState", c_int), # 个人总伤血领奖记录,按奖励位二进制位运算表示是否已领取 + ("HurtAwardStateFamily", c_int), # 仙盟总伤血领奖记录,按奖励位二进制位运算表示是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x07 + 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 = 0xA5 + self.SubCmd = 0x07 + self.HurtTotal = 0 + self.HurtTotalPoint = 0 + self.FightSeconds = 0 + self.HurtAwardState = 0 + self.HurtAwardStateFamily = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyBosFBPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 07 家族boss副本玩家信息 //tagMCFamilyBosFBPlayerInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalPoint:%d, + FightSeconds:%d, + HurtAwardState:%d, + HurtAwardStateFamily:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalPoint, + self.FightSeconds, + self.HurtAwardState, + self.HurtAwardStateFamily + ) + return DumpString + + +m_NAtagMCFamilyBosFBPlayerInfo=tagMCFamilyBosFBPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyBosFBPlayerInfo.Cmd,m_NAtagMCFamilyBosFBPlayerInfo.SubCmd))] = m_NAtagMCFamilyBosFBPlayerInfo + + +#------------------------------------------------------ # A5 06 仙盟每日福利领取状态 #tagMCFamilyDayAward class tagMCFamilyDayAward(Structure): @@ -22922,6 +26800,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("GetState", c_ubyte), #是否已领取 + ("MoneyDonateCount", c_ubyte), #今日货币捐献次数 ] def __init__(self): @@ -22939,6 +26818,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x06 self.GetState = 0 + self.MoneyDonateCount = 0 return def GetLength(self): @@ -22951,12 +26831,14 @@ DumpString = '''// A5 06 仙盟每日福利领取状态 //tagMCFamilyDayAward: Cmd:%s, SubCmd:%s, - GetState:%d + GetState:%d, + MoneyDonateCount:%d '''\ %( self.Cmd, self.SubCmd, - self.GetState + self.GetState, + self.MoneyDonateCount ) return DumpString @@ -23071,6 +26953,185 @@ m_NAtagMCFamilyRedPacketGoldLimit=tagMCFamilyRedPacketGoldLimit() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyRedPacketGoldLimit.Cmd,m_NAtagMCFamilyRedPacketGoldLimit.SubCmd))] = m_NAtagMCFamilyRedPacketGoldLimit + + +#------------------------------------------------------ +# A5 11 打坐信息 #tagMCFamilySitInfo + +class tagMCFamilySitInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ExpRound", c_ushort), # 已获得经验轮次 + ("Exp", c_int), # 获得经验求余亿部分 + ("ExpPoint", c_int), # 获得经验整除亿部分 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x11 + 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 = 0xA5 + self.SubCmd = 0x11 + self.ExpRound = 0 + self.Exp = 0 + self.ExpPoint = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilySitInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 11 打坐信息 //tagMCFamilySitInfo: + Cmd:%s, + SubCmd:%s, + ExpRound:%d, + Exp:%d, + ExpPoint:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ExpRound, + self.Exp, + self.ExpPoint + ) + return DumpString + + +m_NAtagMCFamilySitInfo=tagMCFamilySitInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilySitInfo.Cmd,m_NAtagMCFamilySitInfo.SubCmd))] = m_NAtagMCFamilySitInfo + + +#------------------------------------------------------ +# A5 09 仙盟阵法信息 #tagMCFamilyZhenfaInfo + +class tagMCFamilyZhenfa(Structure): + _pack_ = 1 + _fields_ = [ + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ZhenfaLV", c_ushort), # 阵法等级 + ("ZhenfaExp", 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.ZhenfaType = 0 + self.ZhenfaLV = 0 + self.ZhenfaExp = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyZhenfa) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 09 仙盟阵法信息 //tagMCFamilyZhenfaInfo: + ZhenfaType:%d, + ZhenfaLV:%d, + ZhenfaExp:%d + '''\ + %( + self.ZhenfaType, + self.ZhenfaLV, + self.ZhenfaExp + ) + return DumpString + + +class tagMCFamilyZhenfaInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 当前培养阵法的玩家ID,如果有做自动捐献,需等收到的玩家ID为自己的时候才发送下一个捐献包 + Count = 0 #(BYTE Count) + ZhenfaInfoList = list() #(vector<tagMCFamilyZhenfa> ZhenfaInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + 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.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temZhenfaInfoList = tagMCFamilyZhenfa() + _pos = temZhenfaInfoList.ReadData(_lpData, _pos) + self.ZhenfaInfoList.append(temZhenfaInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + self.PlayerID = 0 + self.Count = 0 + self.ZhenfaInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.Count): + length += self.ZhenfaInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ZhenfaInfoList[i].GetLength(), self.ZhenfaInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + Count:%d, + ZhenfaInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFamilyZhenfaInfo=tagMCFamilyZhenfaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyZhenfaInfo.Head.Cmd,m_NAtagMCFamilyZhenfaInfo.Head.SubCmd))] = m_NAtagMCFamilyZhenfaInfo #------------------------------------------------------ @@ -25474,7 +29535,7 @@ class tagRefreshType(Structure): _pack_ = 1 _fields_ = [ - ("RefreshType", c_ubyte), + ("RefreshType", c_ushort), ("Value", c_int), ("ValueEx", c_int), ] @@ -26607,6 +30668,702 @@ #------------------------------------------------------ +# AA 67 Boss历练活动信息 #tagMCActBossTrialInfo + +class tagMCActBossTrialItem(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(tagMCActBossTrialItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 67 Boss历练活动信息 //tagMCActBossTrialInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActBossTrialBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.Rank, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialSubmitInfo(Structure): + RecordIndex = 0 #(BYTE RecordIndex)// 记录索引 + NeedCount = 0 #(WORD NeedCount)// 所需提交个数 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.RecordIndex = 0 + self.NeedCount = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordIndex) + data = CommFunc.WriteWORD(data, self.NeedCount) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + RecordIndex:%d, + NeedCount:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.RecordIndex, + self.NeedCount, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialInfo(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)// 是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + SubmitCount = 0 #(BYTE SubmitCount) + SubmitInfoList = list() #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表 + BillardCount = 0 #(BYTE BillardCount) + BillboardInfoList = list() #(vector<tagMCActBossTrialBillard> BillboardInfoList)// 榜单信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + 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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SubmitCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SubmitCount): + temSubmitInfoList = tagMCActBossTrialSubmitInfo() + _pos = temSubmitInfoList.ReadData(_lpData, _pos) + self.SubmitInfoList.append(temSubmitInfoList) + self.BillardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillardCount): + temBillboardInfoList = tagMCActBossTrialBillard() + _pos = temBillboardInfoList.ReadData(_lpData, _pos) + self.BillboardInfoList.append(temBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.SubmitCount = 0 + self.SubmitInfoList = list() + self.BillardCount = 0 + self.BillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 1 + length += 2 + length += 1 + for i in range(self.SubmitCount): + length += self.SubmitInfoList[i].GetLength() + length += 1 + for i in range(self.BillardCount): + length += self.BillboardInfoList[i].GetLength() + + 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.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.SubmitCount) + for i in range(self.SubmitCount): + data = CommFunc.WriteString(data, self.SubmitInfoList[i].GetLength(), self.SubmitInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BillardCount) + for i in range(self.BillardCount): + data = CommFunc.WriteString(data, self.BillboardInfoList[i].GetLength(), self.BillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + SubmitCount:%d, + SubmitInfoList:%s, + BillardCount:%d, + BillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.SubmitCount, + "...", + self.BillardCount, + "..." + ) + return DumpString + + +m_NAtagMCActBossTrialInfo=tagMCActBossTrialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialInfo.Head.Cmd,m_NAtagMCActBossTrialInfo.Head.SubCmd))] = m_NAtagMCActBossTrialInfo + + +#------------------------------------------------------ +# AA 68 Boss历练活动玩家信息 #tagMCActBossTrialPlayerInfo + +class tagMCActBossTrialPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("SubmitCount", c_ushort), # 已提交凭证个数 + ("SubmitCountAward", c_int), # 提交凭证奖励领奖状态 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x68 + 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 = 0x68 + self.ActNum = 0 + self.SubmitCount = 0 + self.SubmitCountAward = 0 + return + + def GetLength(self): + return sizeof(tagMCActBossTrialPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 68 Boss历练活动玩家信息 //tagMCActBossTrialPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d, + SubmitCountAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount, + self.SubmitCountAward + ) + return DumpString + + +m_NAtagMCActBossTrialPlayerInfo=tagMCActBossTrialPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialPlayerInfo.Cmd,m_NAtagMCActBossTrialPlayerInfo.SubCmd))] = m_NAtagMCActBossTrialPlayerInfo + + +#------------------------------------------------------ +# AA 65 买一送多活动信息 #tagMCActBuyOneInfo + +class tagMCActBuyOneInfoFreeItem(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(tagMCActBuyOneInfoFreeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 65 买一送多活动信息 //tagMCActBuyOneInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActBuyOneInfoFreeGift(Structure): + FreeIndex = 0 #(BYTE FreeIndex)// 免费领取索引 + FreeItemCount = 0 #(BYTE FreeItemCount)// 免费礼包数 + FreeItemList = list() #(vector<tagMCActBuyOneInfoFreeItem> FreeItemList)// 免费礼包列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FreeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FreeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FreeItemCount): + temFreeItemList = tagMCActBuyOneInfoFreeItem() + _pos = temFreeItemList.ReadData(_lpData, _pos) + self.FreeItemList.append(temFreeItemList) + return _pos + + def Clear(self): + self.FreeIndex = 0 + self.FreeItemCount = 0 + self.FreeItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.FreeItemCount): + length += self.FreeItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.FreeIndex) + data = CommFunc.WriteBYTE(data, self.FreeItemCount) + for i in range(self.FreeItemCount): + data = CommFunc.WriteString(data, self.FreeItemList[i].GetLength(), self.FreeItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + FreeIndex:%d, + FreeItemCount:%d, + FreeItemList:%s + '''\ + %( + self.FreeIndex, + self.FreeItemCount, + "..." + ) + return DumpString + + +class tagMCActBuyOneInfoGiftbag(Structure): + CTGID = 0 #(DWORD CTGID)//所需充值ID + RecordIndex = 0 #(BYTE RecordIndex)// 记录索引 + FreeGiftCount = 0 #(BYTE FreeGiftCount)// 免费礼包数 + FreeGiftList = list() #(vector<tagMCActBuyOneInfoFreeGift> FreeGiftList)// 免费礼包列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.CTGID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FreeGiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FreeGiftCount): + temFreeGiftList = tagMCActBuyOneInfoFreeGift() + _pos = temFreeGiftList.ReadData(_lpData, _pos) + self.FreeGiftList.append(temFreeGiftList) + return _pos + + def Clear(self): + self.CTGID = 0 + self.RecordIndex = 0 + self.FreeGiftCount = 0 + self.FreeGiftList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + for i in range(self.FreeGiftCount): + length += self.FreeGiftList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.CTGID) + data = CommFunc.WriteBYTE(data, self.RecordIndex) + data = CommFunc.WriteBYTE(data, self.FreeGiftCount) + for i in range(self.FreeGiftCount): + data = CommFunc.WriteString(data, self.FreeGiftList[i].GetLength(), self.FreeGiftList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + CTGID:%d, + RecordIndex:%d, + FreeGiftCount:%d, + FreeGiftList:%s + '''\ + %( + self.CTGID, + self.RecordIndex, + self.FreeGiftCount, + "..." + ) + return DumpString + + +class tagMCActBuyOneInfo(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)// 限制等级 + GiftbagCount = 0 #(BYTE GiftbagCount)// 活动礼包个数 + GiftbagList = list() #(vector<tagMCActBuyOneInfoGiftbag> GiftbagList)// 礼包列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x65 + 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.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagList = tagMCActBuyOneInfoGiftbag() + _pos = temGiftbagList.ReadData(_lpData, _pos) + self.GiftbagList.append(temGiftbagList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x65 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.GiftbagCount = 0 + self.GiftbagList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagList[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.GiftbagCount) + for i in range(self.GiftbagCount): + data = CommFunc.WriteString(data, self.GiftbagList[i].GetLength(), self.GiftbagList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + GiftbagCount:%d, + GiftbagList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.GiftbagCount, + "..." + ) + return DumpString + + +m_NAtagMCActBuyOneInfo=tagMCActBuyOneInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOneInfo.Head.Cmd,m_NAtagMCActBuyOneInfo.Head.SubCmd))] = m_NAtagMCActBuyOneInfo + + +#------------------------------------------------------ +# AA 66 买一送多活动玩家信息 #tagMCActBuyOnePlayerInfo + +class tagMCActBuyOnePlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + FreeRecordCount = 0 #(BYTE FreeRecordCount)// 免费礼包领奖记录个数 + FreeRecordList = list() #(vector<DWORD> FreeRecordList)// 免费礼包领奖记录列表,按所需充值ID记录索引取记录,每个记录代表每个充值ID对应免费礼包的领取记录,按免费领取索引位运算记录是否已领取 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x66 + 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.FreeRecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FreeRecordCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.FreeRecordList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x66 + self.ActNum = 0 + self.FreeRecordCount = 0 + self.FreeRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.FreeRecordCount + + 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.FreeRecordCount) + for i in range(self.FreeRecordCount): + data = CommFunc.WriteDWORD(data, self.FreeRecordList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + FreeRecordCount:%d, + FreeRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.FreeRecordCount, + "..." + ) + return DumpString + + +m_NAtagMCActBuyOnePlayerInfo=tagMCActBuyOnePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOnePlayerInfo.Head.Cmd,m_NAtagMCActBuyOnePlayerInfo.Head.SubCmd))] = m_NAtagMCActBuyOnePlayerInfo + + +#------------------------------------------------------ # AA 40 集字活动信息 #tagMCActCollectWordsInfo class tagMCActCollectWordsNeedItem(Structure): @@ -27230,6 +31987,424 @@ m_NAtagMCActGarbageTaskInfo=tagMCActGarbageTaskInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageTaskInfo.Head.Cmd,m_NAtagMCActGarbageTaskInfo.Head.SubCmd))] = m_NAtagMCActGarbageTaskInfo + + +#------------------------------------------------------ +# AA 60 天帝礼包活动信息 #tagMCActGodGiftInfo + +class tagMCActGodGiftItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemNum", c_ubyte), # 物品在本库中的编号 + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ("CanChooseTimes", c_ubyte), #可选择次数,0代表不限次数 + ("ChooseTimes", c_ubyte), #已选次数 + ("IsChoose", 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.ItemNum = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + self.CanChooseTimes = 0 + self.ChooseTimes = 0 + self.IsChoose = 0 + return + + def GetLength(self): + return sizeof(tagMCActGodGiftItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 60 天帝礼包活动信息 //tagMCActGodGiftInfo: + ItemNum:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d, + CanChooseTimes:%d, + ChooseTimes:%d, + IsChoose:%d + '''\ + %( + self.ItemNum, + self.ItemID, + self.ItemCount, + self.IsBind, + self.CanChooseTimes, + self.ChooseTimes, + self.IsChoose + ) + return DumpString + + +class tagMCActGodGiftItemLib(Structure): + ItemLibType = 0 #(BYTE ItemLibType)//物品库类型 + NeedChooseCount = 0 #(BYTE NeedChooseCount)//需要选择个数 + GodGiftItemCount = 0 #(BYTE GodGiftItemCount)//可选择物品个数 + GodGiftItemList = list() #(vector<tagMCActGodGiftItem> GodGiftItemList)//可选物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GodGiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GodGiftItemCount): + temGodGiftItemList = tagMCActGodGiftItem() + _pos = temGodGiftItemList.ReadData(_lpData, _pos) + self.GodGiftItemList.append(temGodGiftItemList) + return _pos + + def Clear(self): + self.ItemLibType = 0 + self.NeedChooseCount = 0 + self.GodGiftItemCount = 0 + self.GodGiftItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.GodGiftItemCount): + length += self.GodGiftItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ItemLibType) + data = CommFunc.WriteBYTE(data, self.NeedChooseCount) + data = CommFunc.WriteBYTE(data, self.GodGiftItemCount) + for i in range(self.GodGiftItemCount): + data = CommFunc.WriteString(data, self.GodGiftItemList[i].GetLength(), self.GodGiftItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + ItemLibType:%d, + NeedChooseCount:%d, + GodGiftItemCount:%d, + GodGiftItemList:%s + '''\ + %( + self.ItemLibType, + self.NeedChooseCount, + self.GodGiftItemCount, + "..." + ) + return DumpString + + +class tagMCActGodGiftInfo(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)// 限制等级 + CostMoneyType = 0 #(BYTE CostMoneyType)//消耗货币类型 + CostMoneyValueCount = 0 #(BYTE CostMoneyValueCount) + CostMoneyValueList = list() #(vector<DWORD> CostMoneyValueList)//消耗货币值列表 + PrizeMoneyType = 0 #(BYTE PrizeMoneyType)//奖励货币类型 + PrizeMoneyValueCount = 0 #(BYTE PrizeMoneyValueCount) + PrizeMoneyValueList = list() #(vector<DWORD> PrizeMoneyValueList)//奖励货币值列表 + ResetLimitTimes = 0 #(BYTE ResetLimitTimes)//至少抽几次才可重置奖池 + ResetCountMax = 0 #(BYTE ResetCountMax)//最大可重置奖池次数 + IsAwardPoolOK = 0 #(BYTE IsAwardPoolOK)//奖池是否选择完毕,否的话需要先选择奖池才可抽奖 + ItemLibCount = 0 #(BYTE ItemLibCount)//奖池库个数 + ItemLibList = list() #(vector<tagMCActGodGiftItemLib> ItemLibList)//奖池库信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x60 + 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.CostMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CostMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CostMoneyValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.CostMoneyValueList.append(value) + self.PrizeMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PrizeMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PrizeMoneyValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.PrizeMoneyValueList.append(value) + self.ResetLimitTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsAwardPoolOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemLibCount): + temItemLibList = tagMCActGodGiftItemLib() + _pos = temItemLibList.ReadData(_lpData, _pos) + self.ItemLibList.append(temItemLibList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x60 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.CostMoneyType = 0 + self.CostMoneyValueCount = 0 + self.CostMoneyValueList = list() + self.PrizeMoneyType = 0 + self.PrizeMoneyValueCount = 0 + self.PrizeMoneyValueList = list() + self.ResetLimitTimes = 0 + self.ResetCountMax = 0 + self.IsAwardPoolOK = 0 + self.ItemLibCount = 0 + self.ItemLibList = 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 + length += 4 * self.CostMoneyValueCount + length += 1 + length += 1 + length += 4 * self.PrizeMoneyValueCount + length += 1 + length += 1 + length += 1 + length += 1 + for i in range(self.ItemLibCount): + length += self.ItemLibList[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.CostMoneyType) + data = CommFunc.WriteBYTE(data, self.CostMoneyValueCount) + for i in range(self.CostMoneyValueCount): + data = CommFunc.WriteDWORD(data, self.CostMoneyValueList[i]) + data = CommFunc.WriteBYTE(data, self.PrizeMoneyType) + data = CommFunc.WriteBYTE(data, self.PrizeMoneyValueCount) + for i in range(self.PrizeMoneyValueCount): + data = CommFunc.WriteDWORD(data, self.PrizeMoneyValueList[i]) + data = CommFunc.WriteBYTE(data, self.ResetLimitTimes) + data = CommFunc.WriteBYTE(data, self.ResetCountMax) + data = CommFunc.WriteBYTE(data, self.IsAwardPoolOK) + data = CommFunc.WriteBYTE(data, self.ItemLibCount) + for i in range(self.ItemLibCount): + data = CommFunc.WriteString(data, self.ItemLibList[i].GetLength(), self.ItemLibList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + CostMoneyType:%d, + CostMoneyValueCount:%d, + CostMoneyValueList:%s, + PrizeMoneyType:%d, + PrizeMoneyValueCount:%d, + PrizeMoneyValueList:%s, + ResetLimitTimes:%d, + ResetCountMax:%d, + IsAwardPoolOK:%d, + ItemLibCount:%d, + ItemLibList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.CostMoneyType, + self.CostMoneyValueCount, + "...", + self.PrizeMoneyType, + self.PrizeMoneyValueCount, + "...", + self.ResetLimitTimes, + self.ResetCountMax, + self.IsAwardPoolOK, + self.ItemLibCount, + "..." + ) + return DumpString + + +m_NAtagMCActGodGiftInfo=tagMCActGodGiftInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftInfo.Head.Cmd,m_NAtagMCActGodGiftInfo.Head.SubCmd))] = m_NAtagMCActGodGiftInfo + + +#------------------------------------------------------ +# AA 61 天帝礼包活动玩家信息 #tagMCActGodGiftPlayerInfo + +class tagMCActGodGiftAwardItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemLibType", c_ubyte), #物品库类型 + ("ItemNum", 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.ItemLibType = 0 + self.ItemNum = 0 + return + + def GetLength(self): + return sizeof(tagMCActGodGiftAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 61 天帝礼包活动玩家信息 //tagMCActGodGiftPlayerInfo: + ItemLibType:%d, + ItemNum:%d + '''\ + %( + self.ItemLibType, + self.ItemNum + ) + return DumpString + + +class tagMCActGodGiftPlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + ResetCount = 0 #(BYTE ResetCount)// 本次活动已重置次数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 本次奖池已抽中奖品个数,也代表本次奖池已抽奖次数 + AwardItemList = list() #(vector<tagMCActGodGiftAwardItem> AwardItemList)// 本次奖池已抽中物品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x61 + 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.ResetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActGodGiftAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x61 + self.ActNum = 0 + self.ResetCount = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[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.ResetCount) + 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 = ''' + Head:%s, + ActNum:%d, + ResetCount:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.ResetCount, + self.AwardItemCount, + "..." + ) + return DumpString + + +m_NAtagMCActGodGiftPlayerInfo=tagMCActGodGiftPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftPlayerInfo.Head.Cmd,m_NAtagMCActGodGiftPlayerInfo.Head.SubCmd))] = m_NAtagMCActGodGiftPlayerInfo #------------------------------------------------------ @@ -28351,6 +33526,305 @@ #------------------------------------------------------ +# AA 62 充值抵扣活动信息 #tagMCActRecharegeCouponInfo + +class tagMCActRecharegeCouponItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ("IsMainItem", 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 + self.IsMainItem = 0 + return + + def GetLength(self): + return sizeof(tagMCActRecharegeCouponItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 62 充值抵扣活动信息 //tagMCActRecharegeCouponInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d, + IsMainItem:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind, + self.IsMainItem + ) + return DumpString + + +class tagMCActRecharegeCouponGiftbag(Structure): + GiftID = 0 #(DWORD GiftID)//商城表的物品ID + BuyCountLimit = 0 #(BYTE BuyCountLimit)//限购数 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyNumber = 0 #(DWORD MoneyNumber)//消耗货币数量 + MoneyOriginal = 0 #(DWORD MoneyOriginal)//原价 + GiftItemCount = 0 #(BYTE GiftItemCount)// 礼包物品数 + ItemInfo = list() #(vector<tagMCActRecharegeCouponItem> 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.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyNumber,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftItemCount): + temItemInfo = tagMCActRecharegeCouponItem() + _pos = temItemInfo.ReadData(_lpData, _pos) + self.ItemInfo.append(temItemInfo) + return _pos + + def Clear(self): + self.GiftID = 0 + self.BuyCountLimit = 0 + self.MoneyType = 0 + self.MoneyNumber = 0 + self.MoneyOriginal = 0 + self.GiftItemCount = 0 + self.ItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + length += 4 + 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.BuyCountLimit) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteDWORD(data, self.MoneyNumber) + data = CommFunc.WriteDWORD(data, self.MoneyOriginal) + 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, + BuyCountLimit:%d, + MoneyType:%d, + MoneyNumber:%d, + MoneyOriginal:%d, + GiftItemCount:%d, + ItemInfo:%s + '''\ + %( + self.GiftID, + self.BuyCountLimit, + self.MoneyType, + self.MoneyNumber, + self.MoneyOriginal, + self.GiftItemCount, + "..." + ) + return DumpString + + +class tagMCActRecharegeCouponInfo(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)// 限制等级 + CouponMoneyType = 0 #(BYTE CouponMoneyType)//抵扣券对应货币类型 + GiftbagCount = 0 #(BYTE GiftbagCount)// 可购买礼包个数 + GiftbagList = list() #(vector<tagMCActRecharegeCouponGiftbag> GiftbagList)// 可购买礼包顺序列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x62 + 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.CouponMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagList = tagMCActRecharegeCouponGiftbag() + _pos = temGiftbagList.ReadData(_lpData, _pos) + self.GiftbagList.append(temGiftbagList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x62 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.CouponMoneyType = 0 + self.GiftbagCount = 0 + self.GiftbagList = 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.GiftbagCount): + length += self.GiftbagList[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.CouponMoneyType) + data = CommFunc.WriteBYTE(data, self.GiftbagCount) + for i in range(self.GiftbagCount): + data = CommFunc.WriteString(data, self.GiftbagList[i].GetLength(), self.GiftbagList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + CouponMoneyType:%d, + GiftbagCount:%d, + GiftbagList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.CouponMoneyType, + self.GiftbagCount, + "..." + ) + return DumpString + + +m_NAtagMCActRecharegeCouponInfo=tagMCActRecharegeCouponInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponInfo.Head.Cmd,m_NAtagMCActRecharegeCouponInfo.Head.SubCmd))] = m_NAtagMCActRecharegeCouponInfo + + +#------------------------------------------------------ +# AA 63 充值抵扣活动玩家信息 #tagMCActRecharegeCouponPlayerInfo + +class tagMCActRecharegeCouponPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("CouponMoney", c_int), # 当前可用抵扣点 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x63 + 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 = 0x63 + self.ActNum = 0 + self.CouponMoney = 0 + return + + def GetLength(self): + return sizeof(tagMCActRecharegeCouponPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 63 充值抵扣活动玩家信息 //tagMCActRecharegeCouponPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + CouponMoney:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.CouponMoney + ) + return DumpString + + +m_NAtagMCActRecharegeCouponPlayerInfo=tagMCActRecharegeCouponPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponPlayerInfo.Cmd,m_NAtagMCActRecharegeCouponPlayerInfo.SubCmd))] = m_NAtagMCActRecharegeCouponPlayerInfo + + +#------------------------------------------------------ # AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo class tagMCActRechargePrize(Structure): @@ -28777,7 +34251,8 @@ class tagMCActSingleRechargeAward(Structure): - AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 + AwardCountMax = 0 #(WORD AwardCountMax)// 最大领奖次数 SingleRechargeValue = 0 #(DWORD SingleRechargeValue)// 单笔所需充值额度 AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 AwardItem = list() #(vector<tagMCActSingleRechargeAwardItem> AwardItem)// 奖励物品信息 @@ -28790,6 +34265,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos) self.SingleRechargeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.AwardItemCount): @@ -28800,6 +34276,7 @@ def Clear(self): self.AwardIndex = 0 + self.AwardCountMax = 0 self.SingleRechargeValue = 0 self.AwardItemCount = 0 self.AwardItem = list() @@ -28808,6 +34285,7 @@ def GetLength(self): length = 0 length += 1 + length += 2 length += 4 length += 1 for i in range(self.AwardItemCount): @@ -28818,6 +34296,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteWORD(data, self.AwardCountMax) data = CommFunc.WriteDWORD(data, self.SingleRechargeValue) data = CommFunc.WriteBYTE(data, self.AwardItemCount) for i in range(self.AwardItemCount): @@ -28827,12 +34306,14 @@ def OutputString(self): DumpString = ''' AwardIndex:%d, + AwardCountMax:%d, SingleRechargeValue:%d, AwardItemCount:%d, AwardItem:%s '''\ %( self.AwardIndex, + self.AwardCountMax, self.SingleRechargeValue, self.AwardItemCount, "..." @@ -28951,20 +34432,16 @@ #------------------------------------------------------ # AA 51 单笔累充活动玩家信息 #tagMCActSingleRechargePlayerInfo -class tagMCActSingleRechargePlayerInfo(Structure): +class tagMCActSingleRechargePlayerAward(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ActNum", c_ubyte), #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 - ("CanAwardValue", c_int), #可否领奖记录,按奖励索引二进制位存储是否可领取 - ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取 + ("AwardIndex", c_ubyte), # 奖励索引 + ("CanGetCount", c_ushort), # 可领奖次数 + ("GetCount", c_ushort), # 已领奖次数 ] def __init__(self): self.Clear() - self.Cmd = 0xAA - self.SubCmd = 0x51 return def ReadData(self, stringData, _pos=0, _len=0): @@ -28973,39 +34450,102 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xAA - self.SubCmd = 0x51 - self.ActNum = 0 - self.CanAwardValue = 0 - self.AwardRecord = 0 + self.AwardIndex = 0 + self.CanGetCount = 0 + self.GetCount = 0 return def GetLength(self): - return sizeof(tagMCActSingleRechargePlayerInfo) + return sizeof(tagMCActSingleRechargePlayerAward) 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 + AwardIndex:%d, + CanGetCount:%d, + GetCount:%d '''\ %( - self.Cmd, - self.SubCmd, + self.AwardIndex, + self.CanGetCount, + self.GetCount + ) + return DumpString + + +class tagMCActSingleRechargePlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 + RecordCount = 0 #(BYTE RecordCount) + AwardRecordList = list() #(vector<tagMCActSingleRechargePlayerAward> AwardRecordList)// 领奖次数记录列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x51 + 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.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temAwardRecordList = tagMCActSingleRechargePlayerAward() + _pos = temAwardRecordList.ReadData(_lpData, _pos) + self.AwardRecordList.append(temAwardRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x51 + self.ActNum = 0 + self.RecordCount = 0 + self.AwardRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.RecordCount): + length += self.AwardRecordList[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.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.AwardRecordList[i].GetLength(), self.AwardRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + RecordCount:%d, + AwardRecordList:%s + '''\ + %( + self.Head.OutputString(), self.ActNum, - self.CanAwardValue, - self.AwardRecord + self.RecordCount, + "..." ) return DumpString m_NAtagMCActSingleRechargePlayerInfo=tagMCActSingleRechargePlayerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Cmd,m_NAtagMCActSingleRechargePlayerInfo.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Head.Cmd,m_NAtagMCActSingleRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo #------------------------------------------------------ @@ -31179,6 +36719,62 @@ #------------------------------------------------------ +# AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo + +class tagMCCrossActAllRechargePlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CTGRMBTotal", c_int), # 活动已累计充值RMB + ("AwardRecord", c_int), # 奖励记录,根据奖励索引位或运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x34 + 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 = 0x34 + self.CTGRMBTotal = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCCrossActAllRechargePlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo: + Cmd:%s, + SubCmd:%s, + CTGRMBTotal:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CTGRMBTotal, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo + + +#------------------------------------------------------ # AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo class tagMCDailyGiftbagItem(Structure): @@ -31484,6 +37080,66 @@ m_NAtagMCDailyGiftbagPlayerInfo=tagMCDailyGiftbagPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagPlayerInfo.Head.Cmd,m_NAtagMCDailyGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagPlayerInfo + + +#------------------------------------------------------ +# AA 03 每日打包直购礼包 #tagMCDailyPackBuyGiftInfo + +class tagMCDailyPackBuyGiftInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PackBuyTime", c_int), # 打包购买的时间戳,如果有该值,代表已经一次性打包购买了,可根据次时间戳算出当前是第几天 + ("BuyStateToday", c_int), # 今日礼包购买状态,按礼包索引二进制位计算代表是否已购买,仅非打包购买状态下有用 + ("AwardState", c_int), # 今日礼包领奖状态,按礼包索引二进制位计算代表是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x03 + 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 = 0x03 + self.PackBuyTime = 0 + self.BuyStateToday = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCDailyPackBuyGiftInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 03 每日打包直购礼包 //tagMCDailyPackBuyGiftInfo: + Cmd:%s, + SubCmd:%s, + PackBuyTime:%d, + BuyStateToday:%d, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PackBuyTime, + self.BuyStateToday, + self.AwardState + ) + return DumpString + + +m_NAtagMCDailyPackBuyGiftInfo=tagMCDailyPackBuyGiftInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyPackBuyGiftInfo.Cmd,m_NAtagMCDailyPackBuyGiftInfo.SubCmd))] = m_NAtagMCDailyPackBuyGiftInfo #------------------------------------------------------ @@ -32068,7 +37724,7 @@ _pack_ = 1 _fields_ = [ ("AwardIndex", c_ubyte), #游历奖励索引 - ("GetAwardCount", c_ubyte), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值 + ("GetAwardCount", c_int), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值 ] def __init__(self): @@ -37155,6 +42811,7 @@ TodayExpPoint = 0 #(DWORD TodayExpPoint) YestordayExp = 0 #(DWORD YestordayExp) YestordayExpPoint = 0 #(DWORD YestordayExpPoint) + TotalCount = 0 #(DWORD TotalCount)// 累计活跃放置次数 data = None def __init__(self): @@ -37175,6 +42832,7 @@ self.TodayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.YestordayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.YestordayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -37191,6 +42849,7 @@ self.TodayExpPoint = 0 self.YestordayExp = 0 self.YestordayExpPoint = 0 + self.TotalCount = 0 return def GetLength(self): @@ -37201,6 +42860,7 @@ length += 1 length += 1 length += len(self.RewardInfo) + length += 4 length += 4 length += 4 length += 4 @@ -37220,6 +42880,7 @@ data = CommFunc.WriteDWORD(data, self.TodayExpPoint) data = CommFunc.WriteDWORD(data, self.YestordayExp) data = CommFunc.WriteDWORD(data, self.YestordayExpPoint) + data = CommFunc.WriteDWORD(data, self.TotalCount) return data def OutputString(self): @@ -37233,7 +42894,8 @@ TodayExp:%d, TodayExpPoint:%d, YestordayExp:%d, - YestordayExpPoint:%d + YestordayExpPoint:%d, + TotalCount:%d '''\ %( self.Head.OutputString(), @@ -37245,7 +42907,8 @@ self.TodayExp, self.TodayExpPoint, self.YestordayExp, - self.YestordayExpPoint + self.YestordayExpPoint, + self.TotalCount ) return DumpString @@ -37530,6 +43193,121 @@ m_NAtagMCClothesCoatSkinState=tagMCClothesCoatSkinState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCClothesCoatSkinState.Head.Cmd,m_NAtagMCClothesCoatSkinState.Head.SubCmd))] = m_NAtagMCClothesCoatSkinState + + +#------------------------------------------------------ +# B1 22 砍树结果 #tagMCCutTreeResult + +class tagMCCutTreeExItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), # 额外奖励物品ID + ("ItemCount", c_ushort), # 额外奖励物品ID对应个数 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCCutTreeExItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 22 砍树结果 //tagMCCutTreeResult: + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCCutTreeResult(Structure): + Head = tagHead() + EquipCount = 0 #(BYTE EquipCount)// 获得装备数量,默认展示在砍树背包中的装备即可,收到该封包前会先收到0704物品刷新 + ExItemCount = 0 #(BYTE ExItemCount)// 额外奖励物品数 + ExItemList = list() #(vector<tagMCCutTreeExItem> ExItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.EquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ExItemCount): + temExItemList = tagMCCutTreeExItem() + _pos = temExItemList.ReadData(_lpData, _pos) + self.ExItemList.append(temExItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x22 + self.EquipCount = 0 + self.ExItemCount = 0 + self.ExItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.ExItemCount): + length += self.ExItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.EquipCount) + data = CommFunc.WriteBYTE(data, self.ExItemCount) + for i in range(self.ExItemCount): + data = CommFunc.WriteString(data, self.ExItemList[i].GetLength(), self.ExItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + EquipCount:%d, + ExItemCount:%d, + ExItemList:%s + '''\ + %( + self.Head.OutputString(), + self.EquipCount, + self.ExItemCount, + "..." + ) + return DumpString + + +m_NAtagMCCutTreeResult=tagMCCutTreeResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCutTreeResult.Head.Cmd,m_NAtagMCCutTreeResult.Head.SubCmd))] = m_NAtagMCCutTreeResult #------------------------------------------------------ @@ -38173,6 +43951,248 @@ m_NAtagMCYinjiStartTime=tagMCYinjiStartTime() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime + + +#------------------------------------------------------ +# B1 10 当前任务信息 #tagMCTaskInfo + +class tagMCTaskInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TaskID", c_int), # 任务ID + ("CurValue", c_int), # 当前进度值 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB1 + self.SubCmd = 0x10 + 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 = 0xB1 + self.SubCmd = 0x10 + self.TaskID = 0 + self.CurValue = 0 + return + + def GetLength(self): + return sizeof(tagMCTaskInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 10 当前任务信息 //tagMCTaskInfo: + Cmd:%s, + SubCmd:%s, + TaskID:%d, + CurValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TaskID, + self.CurValue + ) + return DumpString + + +m_NAtagMCTaskInfo=tagMCTaskInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Cmd,m_NAtagMCTaskInfo.SubCmd))] = m_NAtagMCTaskInfo + + +#------------------------------------------------------ +# B1 21 仙树信息 #tagMCTreeInfo + +class tagMCTreeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TreeLV", c_ubyte), # 当前仙树等级 + ("LVUPState", c_ubyte), # 0-非升级中;1-升级中 + ("LVUPRemainTime", c_int), # 升级剩余时间,秒;当升级中且倒计时为0时可发送B223执行升级包进行升级 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB1 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB1 + self.SubCmd = 0x21 + self.TreeLV = 0 + self.LVUPState = 0 + self.LVUPRemainTime = 0 + return + + def GetLength(self): + return sizeof(tagMCTreeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 21 仙树信息 //tagMCTreeInfo: + Cmd:%s, + SubCmd:%s, + TreeLV:%d, + LVUPState:%d, + LVUPRemainTime:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TreeLV, + self.LVUPState, + self.LVUPRemainTime + ) + return DumpString + + +m_NAtagMCTreeInfo=tagMCTreeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTreeInfo.Cmd,m_NAtagMCTreeInfo.SubCmd))] = m_NAtagMCTreeInfo + + +#------------------------------------------------------ +# B1 20 战令信息 #tagMCZhanlingInfo + +class tagMCZhanling(Structure): + _pack_ = 1 + _fields_ = [ + ("NeedValue", c_int), # 奖励所需值 + ("FreeRewardState", c_ubyte), # 免费奖励是否已领取 + ("ZLRewardState", 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.NeedValue = 0 + self.FreeRewardState = 0 + self.ZLRewardState = 0 + return + + def GetLength(self): + return sizeof(tagMCZhanling) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo: + NeedValue:%d, + FreeRewardState:%d, + ZLRewardState:%d + '''\ + %( + self.NeedValue, + self.FreeRewardState, + self.ZLRewardState + ) + return DumpString + + +class tagMCZhanlingInfo(Structure): + Head = tagHead() + ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型 + IsActivite = 0 #(BYTE IsActivite)// 是否已激活 + RewardCount = 0 #(WORD RewardCount) + RewardList = list() #(vector<tagMCZhanling> RewardList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.RewardCount): + temRewardList = tagMCZhanling() + _pos = temRewardList.ReadData(_lpData, _pos) + self.RewardList.append(temRewardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x20 + self.ZhanlingType = 0 + self.IsActivite = 0 + self.RewardCount = 0 + self.RewardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 2 + for i in range(self.RewardCount): + length += self.RewardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZhanlingType) + data = CommFunc.WriteBYTE(data, self.IsActivite) + data = CommFunc.WriteWORD(data, self.RewardCount) + for i in range(self.RewardCount): + data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZhanlingType:%d, + IsActivite:%d, + RewardCount:%d, + RewardList:%s + '''\ + %( + self.Head.OutputString(), + self.ZhanlingType, + self.IsActivite, + self.RewardCount, + "..." + ) + return DumpString + + +m_NAtagMCZhanlingInfo=tagMCZhanlingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhanlingInfo.Head.Cmd,m_NAtagMCZhanlingInfo.Head.SubCmd))] = m_NAtagMCZhanlingInfo #------------------------------------------------------ @@ -39434,21 +45454,20 @@ #------------------------------------------------------ -# B2 13 天星塔通关层数 #tagMCSkyTowerInfo +# B2 17 境界塔信息 #tagMCRealmTowerInfo -class tagMCSkyTowerInfo(Structure): +class tagMCRealmTowerInfo(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("Floor", c_int), # 已通关层 - ("ServerRewardRecord", c_int), #全服挑战层领奖记录,按奖励记录二进制位存储是否已领取 ] def __init__(self): self.Clear() self.Cmd = 0xB2 - self.SubCmd = 0x13 + self.SubCmd = 0x17 return def ReadData(self, stringData, _pos=0, _len=0): @@ -39458,35 +45477,147 @@ def Clear(self): self.Cmd = 0xB2 - self.SubCmd = 0x13 + self.SubCmd = 0x17 + self.Floor = 0 + return + + def GetLength(self): + return sizeof(tagMCRealmTowerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 17 境界塔信息 //tagMCRealmTowerInfo: + Cmd:%s, + SubCmd:%s, + Floor:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Floor + ) + return DumpString + + +m_NAtagMCRealmTowerInfo=tagMCRealmTowerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRealmTowerInfo.Cmd,m_NAtagMCRealmTowerInfo.SubCmd))] = m_NAtagMCRealmTowerInfo + + +#------------------------------------------------------ +# B2 13 天星塔通关层数 #tagMCSkyTowerInfo + +class tagMCSkyTowerServerReward(Structure): + _pack_ = 1 + _fields_ = [ + ("Floor", c_int), # 全服奖励层ID + ("ServerRewardRecord", 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.Floor = 0 self.ServerRewardRecord = 0 return def GetLength(self): - return sizeof(tagMCSkyTowerInfo) + return sizeof(tagMCSkyTowerServerReward) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo: - Cmd:%s, - SubCmd:%s, Floor:%d, ServerRewardRecord:%d '''\ %( - self.Cmd, - self.SubCmd, self.Floor, self.ServerRewardRecord ) return DumpString +class tagMCSkyTowerInfo(Structure): + Head = tagHead() + Floor = 0 #(DWORD Floor)// 已通关层 + ServerRewardCount = 0 #(WORD ServerRewardCount) + ServerRewardList = list() #(vector<tagMCSkyTowerServerReward> ServerRewardList)// 全服奖励领取记录列表,下发的层记录替换更新即可,领奖记录没有变化时服务端不会下发 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Floor,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerRewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.ServerRewardCount): + temServerRewardList = tagMCSkyTowerServerReward() + _pos = temServerRewardList.ReadData(_lpData, _pos) + self.ServerRewardList.append(temServerRewardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x13 + self.Floor = 0 + self.ServerRewardCount = 0 + self.ServerRewardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + for i in range(self.ServerRewardCount): + length += self.ServerRewardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.Floor) + data = CommFunc.WriteWORD(data, self.ServerRewardCount) + for i in range(self.ServerRewardCount): + data = CommFunc.WriteString(data, self.ServerRewardList[i].GetLength(), self.ServerRewardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Floor:%d, + ServerRewardCount:%d, + ServerRewardList:%s + '''\ + %( + self.Head.OutputString(), + self.Floor, + self.ServerRewardCount, + "..." + ) + return DumpString + + m_NAtagMCSkyTowerInfo=tagMCSkyTowerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Cmd,m_NAtagMCSkyTowerInfo.SubCmd))] = m_NAtagMCSkyTowerInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Head.Cmd,m_NAtagMCSkyTowerInfo.Head.SubCmd))] = m_NAtagMCSkyTowerInfo #------------------------------------------------------ @@ -39670,6 +45801,58 @@ m_NAtagMCZhuXianBossCnt=tagMCZhuXianBossCnt() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianBossCnt.Cmd,m_NAtagMCZhuXianBossCnt.SubCmd))] = m_NAtagMCZhuXianBossCnt + + +#------------------------------------------------------ +# B3 30 情缘相关信息 #tagMCLoveInfo + +class tagMCLoveInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("EatCandyToday", c_int), # 今日已吃喜糖次数,包含免费及付费的所有次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + 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 = 0xB3 + self.SubCmd = 0x30 + self.EatCandyToday = 0 + return + + def GetLength(self): + return sizeof(tagMCLoveInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 30 情缘相关信息 //tagMCLoveInfo: + Cmd:%s, + SubCmd:%s, + EatCandyToday:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.EatCandyToday + ) + return DumpString + + +m_NAtagMCLoveInfo=tagMCLoveInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveInfo.Cmd,m_NAtagMCLoveInfo.SubCmd))] = m_NAtagMCLoveInfo #------------------------------------------------------ @@ -41311,6 +47494,130 @@ #------------------------------------------------------ +# B4 20 回合制战斗状态 #tagMCTurnFightState + +class tagMCTurnFightState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MapID", c_int), # 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) + ("FuncLineID", c_ushort), + ("PlayerID", c_int), # 对应玩家ID,可为0,某些功能可能有用,如竞技场 + ("State", c_ubyte), # 0-开始;1-战斗中;2-胜利;3-失败;4-结束 + ("TurnNum", c_ubyte), # 当前轮次 + ("TurnMax", c_ubyte), # 最大轮次 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + 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 = 0xB4 + self.SubCmd = 0x20 + self.MapID = 0 + self.FuncLineID = 0 + self.PlayerID = 0 + self.State = 0 + self.TurnNum = 0 + self.TurnMax = 0 + return + + def GetLength(self): + return sizeof(tagMCTurnFightState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 20 回合制战斗状态 //tagMCTurnFightState: + Cmd:%s, + SubCmd:%s, + MapID:%d, + FuncLineID:%d, + PlayerID:%d, + State:%d, + TurnNum:%d, + TurnMax:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MapID, + self.FuncLineID, + self.PlayerID, + self.State, + self.TurnNum, + self.TurnMax + ) + return DumpString + + +m_NAtagMCTurnFightState=tagMCTurnFightState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightState.Cmd,m_NAtagMCTurnFightState.SubCmd))] = m_NAtagMCTurnFightState + + +#------------------------------------------------------ +# C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo + +class tagMCChampionshipPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("WorshipCount", c_ubyte), # 今日已膜拜次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x09 + self.WorshipCount = 0 + return + + def GetLength(self): + return sizeof(tagMCChampionshipPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 09 跨服排位玩家信息 //tagMCChampionshipPlayerInfo: + Cmd:%s, + SubCmd:%s, + WorshipCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.WorshipCount + ) + return DumpString + + +m_NAtagMCChampionshipPlayerInfo=tagMCChampionshipPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChampionshipPlayerInfo.Cmd,m_NAtagMCChampionshipPlayerInfo.SubCmd))] = m_NAtagMCChampionshipPlayerInfo + + +#------------------------------------------------------ # C1 07 跨服战场玩家信息 #tagMCCrossBattlefieldPlayerInfo class tagMCCrossBattlefieldPlayerInfo(Structure): -- Gitblit v1.8.0