From f9bd7ebdd8ac7016e8cc2e0ffcb20df22d75c2a0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 27 二月 2023 15:57:07 +0800 Subject: [PATCH] 9415 【BT7】【BT8】【BT9】【主干】【后端】古神战场(跨服服务器及本服服务器时间均超过5点后可购买) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 3277 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 3,273 insertions(+), 4 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 6a91da3..f4e1af6 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -5263,6 +5263,224 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # AC 12 跨服运营活动结束 # tagGCCrossActEnd class tagGCCrossActEnd(Structure): @@ -12288,6 +12506,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): @@ -12373,6 +13507,7 @@ class tagGCCrossBattlefieldBuyPlayer(Structure): BuyPlayerID = 0 #(DWORD BuyPlayerID)//购买的玩家ID,即召集人 Faction = 0 #(BYTE Faction)//阵营 1-红;2-蓝 + ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 FactionPlayerCount = 0 #(BYTE FactionPlayerCount) FactionPlayerList = list() #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人 data = None @@ -12385,6 +13520,7 @@ self.Clear() self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.FactionPlayerCount): temFactionPlayerList = tagGCCrossBattlefieldPlayer() @@ -12395,6 +13531,7 @@ def Clear(self): self.BuyPlayerID = 0 self.Faction = 0 + self.ServerOnly = 0 self.FactionPlayerCount = 0 self.FactionPlayerList = list() return @@ -12402,6 +13539,7 @@ def GetLength(self): length = 0 length += 4 + length += 1 length += 1 length += 1 for i in range(self.FactionPlayerCount): @@ -12413,6 +13551,7 @@ data = '' data = CommFunc.WriteDWORD(data, self.BuyPlayerID) data = CommFunc.WriteBYTE(data, self.Faction) + data = CommFunc.WriteBYTE(data, self.ServerOnly) data = CommFunc.WriteBYTE(data, self.FactionPlayerCount) for i in range(self.FactionPlayerCount): data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer()) @@ -12422,12 +13561,14 @@ DumpString = ''' BuyPlayerID:%d, Faction:%d, + ServerOnly:%d, FactionPlayerCount:%d, FactionPlayerList:%s '''\ %( self.BuyPlayerID, self.Faction, + self.ServerOnly, self.FactionPlayerCount, "..." ) @@ -12746,6 +13887,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 #------------------------------------------------------ @@ -13573,6 +15137,118 @@ m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -19069,6 +20745,118 @@ #------------------------------------------------------ +# 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 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord class tagMCHistoryReChargeAwardRecord(Structure): @@ -19241,6 +21029,114 @@ #------------------------------------------------------ +# 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 38 投资理财信息 #tagMCInvestInfo class tagMCInvestInfo(Structure): @@ -19329,6 +21225,62 @@ m_NAtagMCInvestInfo=tagMCInvestInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCInvestInfo.Head.Cmd,m_NAtagMCInvestInfo.Head.SubCmd))] = m_NAtagMCInvestInfo + + +#------------------------------------------------------ +# A3 55 炼体信息 #tagMCLianTiInfo + +class tagMCLianTiInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("LianTiLV", c_ubyte), #炼体等级 + ("EatItemCount", c_int), #当前等级已吃丹个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x55 + 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 = 0x55 + self.LianTiLV = 0 + self.EatItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCLianTiInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 55 炼体信息 //tagMCLianTiInfo: + Cmd:%s, + SubCmd:%s, + LianTiLV:%d, + EatItemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.LianTiLV, + self.EatItemCount + ) + return DumpString + + +m_NAtagMCLianTiInfo=tagMCLianTiInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLianTiInfo.Cmd,m_NAtagMCLianTiInfo.SubCmd))] = m_NAtagMCLianTiInfo #------------------------------------------------------ @@ -21186,6 +23138,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): @@ -22074,16 +24205,302 @@ #------------------------------------------------------ +# 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): @@ -22105,6 +24522,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): @@ -22118,6 +24539,8 @@ self.TrainTypes = 0 self.TrainLVList = list() self.TrainItemCountList = list() + self.SkinPlusStateCount = 0 + self.SkinPlusStateList = list() return def GetLength(self): @@ -22129,6 +24552,8 @@ length += 1 length += 4 * self.TrainTypes length += 4 * self.TrainTypes + length += 1 + length += 4 * self.SkinPlusStateCount return length @@ -22143,6 +24568,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): @@ -22153,7 +24581,9 @@ SkinPlusState:%d, TrainTypes:%d, TrainLVList:%s, - TrainItemCountList:%s + TrainItemCountList:%s, + SkinPlusStateCount:%d, + SkinPlusStateList:%s '''\ %( self.Head.OutputString(), @@ -22162,6 +24592,8 @@ self.SkinPlusState, self.TrainTypes, "...", + "...", + self.SkinPlusStateCount, "..." ) return DumpString @@ -27170,6 +29602,424 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo class tagMCActGrowupBuyCTGItem(Structure): @@ -28285,6 +31135,305 @@ m_NAtagMCActManyDayRechargePlayerInfo=tagMCActManyDayRechargePlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargePlayerInfo.Head.Cmd,m_NAtagMCActManyDayRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargePlayerInfo + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -31113,6 +34262,62 @@ m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -41248,6 +44453,58 @@ #------------------------------------------------------ +# 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): @@ -41257,6 +44514,9 @@ ("SubCmd", c_ubyte), ("BuyOpenCountToday", c_ubyte), # 今日已购买开启战场次数 ("HighScoreToday", c_int), # 今日最高积分 + ("EnterCountWeek", c_int), # 本周总参与次数 + ("BuyOpenCountWeek", c_int), # 本周总购买召集次数 + ("HighScoreTotalWeek", c_int), # 本周每日最高分累加总分 ] def __init__(self): @@ -41275,6 +44535,9 @@ self.SubCmd = 0x07 self.BuyOpenCountToday = 0 self.HighScoreToday = 0 + self.EnterCountWeek = 0 + self.BuyOpenCountWeek = 0 + self.HighScoreTotalWeek = 0 return def GetLength(self): @@ -41288,13 +44551,19 @@ Cmd:%s, SubCmd:%s, BuyOpenCountToday:%d, - HighScoreToday:%d + HighScoreToday:%d, + EnterCountWeek:%d, + BuyOpenCountWeek:%d, + HighScoreTotalWeek:%d '''\ %( self.Cmd, self.SubCmd, self.BuyOpenCountToday, - self.HighScoreToday + self.HighScoreToday, + self.EnterCountWeek, + self.BuyOpenCountWeek, + self.HighScoreTotalWeek ) return DumpString -- Gitblit v1.8.0