From 2fca4ba3abab2ea232d64ef084be1991506d57a2 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 27 六月 2024 16:32:51 +0800 Subject: [PATCH] 10178 【越南】【香港】【主干】挂机奖励(屏蔽跨服上线通知:古宝、神通、战令、福地、挂机) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 4593 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 4,536 insertions(+), 57 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 7ca9139..be51fff 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 #------------------------------------------------------ @@ -4207,9 +4451,17 @@ Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 Value1 = 0 #(DWORD Value1)//排序依赖的值,比如,等级 Value2 = 0 #(DWORD Value2)//排序依赖的值,比如,战斗力 + Value3 = 0 #(DWORD Value3)//附加值 + Value4 = 0 #(DWORD Value4)//附加值 + Value5 = 0 #(DWORD Value5)//附加值 + Value6 = 0 #(DWORD Value6)//附加值 + Value7 = 0 #(DWORD Value7)//附加值 + Value8 = 0 #(DWORD Value8)//附加值 CmpValue = 0 #(DWORD CmpValue)// 比较权值 CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 + DataLen = 0 #(WORD DataLen) + UserData = "" #(String UserData)//附加 data = None def __init__(self): @@ -4226,9 +4478,17 @@ self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) return _pos def Clear(self): @@ -4240,9 +4500,17 @@ self.Type2 = 0 self.Value1 = 0 self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.Value7 = 0 + self.Value8 = 0 self.CmpValue = 0 self.CmpValue2 = 0 self.CmpValue3 = 0 + self.DataLen = 0 + self.UserData = "" return def GetLength(self): @@ -4258,6 +4526,14 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UserData) return length @@ -4271,9 +4547,17 @@ data = CommFunc.WriteBYTE(data, self.Type2) data = CommFunc.WriteDWORD(data, self.Value1) data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteDWORD(data, self.Value7) + data = CommFunc.WriteDWORD(data, self.Value8) data = CommFunc.WriteDWORD(data, self.CmpValue) data = CommFunc.WriteDWORD(data, self.CmpValue2) data = CommFunc.WriteDWORD(data, self.CmpValue3) + data = CommFunc.WriteWORD(data, self.DataLen) + data = CommFunc.WriteString(data, self.DataLen, self.UserData) return data def OutputString(self): @@ -4286,9 +4570,17 @@ Type2:%d, Value1:%d, Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + Value7:%d, + Value8:%d, CmpValue:%d, CmpValue2:%d, - CmpValue3:%d + CmpValue3:%d, + DataLen:%d, + UserData:%s '''\ %( self.OrderIndex, @@ -4299,16 +4591,24 @@ self.Type2, self.Value1, self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.Value7, + self.Value8, self.CmpValue, self.CmpValue2, - self.CmpValue3 + self.CmpValue3, + self.DataLen, + self.UserData ) return DumpString class tagPYBillboardData(Structure): Head = tagHead() - IsWatchSelf = 0 #(BYTE IsWatchSelf) + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) Type = 0 #(BYTE Type)//排行榜类型 Billboard = list() #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount @@ -4323,7 +4623,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.IsWatchSelf,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): @@ -4337,7 +4637,7 @@ self.Head.Clear() self.Head.Cmd = 0xA9 self.Head.SubCmd = 0xA2 - self.IsWatchSelf = 0 + self.WatchID = 0 self.BillboardCount = 0 self.Type = 0 self.Billboard = list() @@ -4346,7 +4646,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 + length += 4 length += 1 length += 1 for i in range(self.BillboardCount): @@ -4357,7 +4657,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.IsWatchSelf) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) data = CommFunc.WriteBYTE(data, self.Type) for i in range(self.BillboardCount): @@ -4367,14 +4667,14 @@ def OutputString(self): DumpString = ''' Head:%s, - IsWatchSelf:%d, + WatchID:%d, BillboardCount:%d, Type:%d, Billboard:%s '''\ %( self.Head.OutputString(), - self.IsWatchSelf, + self.WatchID, self.BillboardCount, self.Type, "..." @@ -7475,6 +7775,566 @@ m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview + + +#------------------------------------------------------ +# B0 34 福地结算奖励信息 #tagGCMineAreaAwardInfo + +class tagGCMineAreaAwardInfo(Structure): + Head = tagHead() + AwardType = 0 #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知 + AwardLen = 0 #(BYTE AwardLen) + AwardInfo = "" #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x34 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x34 + self.AwardType = 0 + self.AwardLen = 0 + self.AwardInfo = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += len(self.AwardInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AwardType) + data = CommFunc.WriteBYTE(data, self.AwardLen) + data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AwardType:%d, + AwardLen:%d, + AwardInfo:%s + '''\ + %( + self.Head.OutputString(), + self.AwardType, + self.AwardLen, + self.AwardInfo + ) + return DumpString + + +m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo + + +#------------------------------------------------------ +# B0 33 福地详细信息 #tagGCMineAreaInfo + +class tagGCMineItem(Structure): + Index = 0 #(BYTE Index)// 矿物所在福地位置索引,0~n + MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物 + MineType = 0 #(BYTE MineType)// 矿物类型:0-常规;1-超级 + UpdTime = 0 #(DWORD UpdTime)// 最后一次更新时间戳 + PosLen = 0 #(BYTE PosLen) + Position = "" #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒 + SpeedLen = 0 #(BYTE SpeedLen) + MoveSpeed = "" #(String MoveSpeed)// 移动速度,x格/秒,支持小数 + EndTime = 0 #(DWORD EndTime)// 拉取结束时间戳 + WorkerCount = 0 #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回 + RobPlayerID = 0 #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺 + RobWorkerCount = 0 #(BYTE RobWorkerCount)// 抢夺工人个数 + RobPlayerName = "" #(char RobPlayerName[33]) + RobFace = 0 #(DWORD RobFace) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen) + self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen) + self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Index = 0 + self.MineID = 0 + self.MineType = 0 + self.UpdTime = 0 + self.PosLen = 0 + self.Position = "" + self.SpeedLen = 0 + self.MoveSpeed = "" + self.EndTime = 0 + self.WorkerCount = 0 + self.RobPlayerID = 0 + self.RobWorkerCount = 0 + self.RobPlayerName = "" + self.RobFace = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + length += 4 + length += 1 + length += len(self.Position) + length += 1 + length += len(self.MoveSpeed) + length += 4 + length += 1 + length += 4 + length += 1 + length += 33 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Index) + data = CommFunc.WriteWORD(data, self.MineID) + data = CommFunc.WriteBYTE(data, self.MineType) + data = CommFunc.WriteDWORD(data, self.UpdTime) + data = CommFunc.WriteBYTE(data, self.PosLen) + data = CommFunc.WriteString(data, self.PosLen, self.Position) + data = CommFunc.WriteBYTE(data, self.SpeedLen) + data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed) + data = CommFunc.WriteDWORD(data, self.EndTime) + data = CommFunc.WriteBYTE(data, self.WorkerCount) + data = CommFunc.WriteDWORD(data, self.RobPlayerID) + data = CommFunc.WriteBYTE(data, self.RobWorkerCount) + data = CommFunc.WriteString(data, 33, self.RobPlayerName) + data = CommFunc.WriteDWORD(data, self.RobFace) + return data + + def OutputString(self): + DumpString = ''' + Index:%d, + MineID:%d, + MineType:%d, + UpdTime:%d, + PosLen:%d, + Position:%s, + SpeedLen:%d, + MoveSpeed:%s, + EndTime:%d, + WorkerCount:%d, + RobPlayerID:%d, + RobWorkerCount:%d, + RobPlayerName:%s, + RobFace:%d + '''\ + %( + self.Index, + self.MineID, + self.MineType, + self.UpdTime, + self.PosLen, + self.Position, + self.SpeedLen, + self.MoveSpeed, + self.EndTime, + self.WorkerCount, + self.RobPlayerID, + self.RobWorkerCount, + self.RobPlayerName, + self.RobFace + ) + return DumpString + + +class tagGCMineArea(Structure): + PlayerID = 0 #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人 + PlayerName = "" #(char PlayerName[33])// 可能为空,如自己或假人 + Face = 0 #(DWORD Face) + MineCount = 0 #(BYTE MineCount) + MineItemList = list() #(vector<tagGCMineItem> MineItemList)// 矿物列表 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MineCount): + temMineItemList = tagGCMineItem() + _pos = temMineItemList.ReadData(_lpData, _pos) + self.MineItemList.append(temMineItemList) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Face = 0 + self.MineCount = 0 + self.MineItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 4 + length += 1 + for i in range(self.MineCount): + length += self.MineItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteBYTE(data, self.MineCount) + for i in range(self.MineCount): + data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Face:%d, + MineCount:%d, + MineItemList:%s + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Face, + self.MineCount, + "..." + ) + return DumpString + + +class tagGCMineAreaInfo(Structure): + Head = tagHead() + QueryType = 0 #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表 + QueryValue = 0 #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机 + AreaCount = 0 #(BYTE AreaCount) + AreaList = list() #(vector<tagGCMineArea> AreaList)// 福地列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x33 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AreaCount): + temAreaList = tagGCMineArea() + _pos = temAreaList.ReadData(_lpData, _pos) + self.AreaList.append(temAreaList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x33 + self.QueryType = 0 + self.QueryValue = 0 + self.AreaCount = 0 + self.AreaList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 1 + for i in range(self.AreaCount): + length += self.AreaList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.QueryType) + data = CommFunc.WriteDWORD(data, self.QueryValue) + data = CommFunc.WriteBYTE(data, self.AreaCount) + for i in range(self.AreaCount): + data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + QueryType:%d, + QueryValue:%d, + AreaCount:%d, + AreaList:%s + '''\ + %( + self.Head.OutputString(), + self.QueryType, + self.QueryValue, + self.AreaCount, + "..." + ) + return DumpString + + +m_NAtagGCMineAreaInfo=tagGCMineAreaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo + + +#------------------------------------------------------ +# B0 35 福地记录信息 #tagGCMineAreaRecordInfo + +class tagGCMineAreaRecord(Structure): + RecordType = 0 #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢 + TagPlayerID = 0 #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的 + RecordTime = 0 #(DWORD RecordTime)// 记录时间戳 + MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID + TagPlayerName = "" #(char TagPlayerName[33]) + TagFace = 0 #(DWORD TagFace) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.RecordType = 0 + self.TagPlayerID = 0 + self.RecordTime = 0 + self.MineID = 0 + self.TagPlayerName = "" + self.TagFace = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 4 + length += 2 + length += 33 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordType) + data = CommFunc.WriteDWORD(data, self.TagPlayerID) + data = CommFunc.WriteDWORD(data, self.RecordTime) + data = CommFunc.WriteWORD(data, self.MineID) + data = CommFunc.WriteString(data, 33, self.TagPlayerName) + data = CommFunc.WriteDWORD(data, self.TagFace) + return data + + def OutputString(self): + DumpString = ''' + RecordType:%d, + TagPlayerID:%d, + RecordTime:%d, + MineID:%d, + TagPlayerName:%s, + TagFace:%d + '''\ + %( + self.RecordType, + self.TagPlayerID, + self.RecordTime, + self.MineID, + self.TagPlayerName, + self.TagFace + ) + return DumpString + + +class tagGCMineAreaRecordInfo(Structure): + Head = tagHead() + RecordCount = 0 #(BYTE RecordCount) + AreaRecordList = list() #(vector<tagGCMineAreaRecord> AreaRecordList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x35 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temAreaRecordList = tagGCMineAreaRecord() + _pos = temAreaRecordList.ReadData(_lpData, _pos) + self.AreaRecordList.append(temAreaRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x35 + self.RecordCount = 0 + self.AreaRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RecordCount): + length += self.AreaRecordList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordCount:%d, + AreaRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo + + +#------------------------------------------------------ +# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet + +class tagGCMineItemPullPreviewRet(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 福地所属玩家ID,0默认自己 + ("ItemIndex", c_ubyte), # 物品所在位置索引0~n + ("WorkerCount", c_ubyte), # 上工人人数 + ("NeedSeconds", c_int), # 预计需要时间,秒 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x32 + 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 = 0xB0 + self.SubCmd = 0x32 + self.PlayerID = 0 + self.ItemIndex = 0 + self.WorkerCount = 0 + self.NeedSeconds = 0 + return + + def GetLength(self): + return sizeof(tagGCMineItemPullPreviewRet) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + ItemIndex:%d, + WorkerCount:%d, + NeedSeconds:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.ItemIndex, + self.WorkerCount, + self.NeedSeconds + ) + return DumpString + + +m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet #------------------------------------------------------ @@ -13918,15 +14778,25 @@ # C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo class tagGCCrossBillboardData(Structure): + OrderIndex = 0 #(WORD OrderIndex)//名次索引,0代表第一名 ID = 0 #(DWORD ID) + ID2 = 0 #(DWORD ID2) Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 Name2 = "" #(char Name2[33])//名字2 Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 Value1 = 0 #(DWORD Value1)//自定义值1 Value2 = 0 #(DWORD Value2)//自定义值2 + Value3 = 0 #(DWORD Value3)//附加值 + Value4 = 0 #(DWORD Value4)//附加值 + Value5 = 0 #(DWORD Value5)//附加值 + Value6 = 0 #(DWORD Value6)//附加值 + Value7 = 0 #(DWORD Value7)//附加值 + Value8 = 0 #(DWORD Value8)//附加值 CmpValue = 0 #(DWORD CmpValue)// 比较权值 CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 + DataLen = 0 #(WORD DataLen) + UserData = "" #(String UserData)//附加 data = None def __init__(self): @@ -13935,31 +14805,53 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() + self.OrderIndex,_pos = CommFunc.ReadWORD(_lpData, _pos) self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33) self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) return _pos def Clear(self): + self.OrderIndex = 0 self.ID = 0 + self.ID2 = 0 self.Name1 = "" self.Name2 = "" self.Type2 = 0 self.Value1 = 0 self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.Value7 = 0 + self.Value8 = 0 self.CmpValue = 0 self.CmpValue2 = 0 self.CmpValue3 = 0 + self.DataLen = 0 + self.UserData = "" return def GetLength(self): length = 0 + length += 2 + length += 4 length += 4 length += 33 length += 33 @@ -13969,44 +14861,82 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UserData) return length def GetBuffer(self): data = '' + data = CommFunc.WriteWORD(data, self.OrderIndex) data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteDWORD(data, self.ID2) data = CommFunc.WriteString(data, 33, self.Name1) data = CommFunc.WriteString(data, 33, self.Name2) data = CommFunc.WriteBYTE(data, self.Type2) data = CommFunc.WriteDWORD(data, self.Value1) data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteDWORD(data, self.Value7) + data = CommFunc.WriteDWORD(data, self.Value8) data = CommFunc.WriteDWORD(data, self.CmpValue) data = CommFunc.WriteDWORD(data, self.CmpValue2) data = CommFunc.WriteDWORD(data, self.CmpValue3) + data = CommFunc.WriteWORD(data, self.DataLen) + data = CommFunc.WriteString(data, self.DataLen, self.UserData) return data def OutputString(self): DumpString = ''' + OrderIndex:%d, ID:%d, + ID2:%d, Name1:%s, Name2:%s, Type2:%d, Value1:%d, Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + Value7:%d, + Value8:%d, CmpValue:%d, CmpValue2:%d, - CmpValue3:%d + CmpValue3:%d, + DataLen:%d, + UserData:%s '''\ %( + self.OrderIndex, self.ID, + self.ID2, self.Name1, self.Name2, self.Type2, self.Value1, self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.Value7, + self.Value8, self.CmpValue, self.CmpValue2, - self.CmpValue3 + self.CmpValue3, + self.DataLen, + self.UserData ) return DumpString @@ -14016,6 +14946,7 @@ Type = 0 #(BYTE Type)//榜单类型 GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1 GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) data = None @@ -14032,6 +14963,7 @@ self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): temCrossBillboardDataList = tagGCCrossBillboardData() @@ -14047,6 +14979,7 @@ self.Type = 0 self.GroupValue1 = 0 self.GroupValue2 = 0 + self.WatchID = 0 self.BillboardCount = 0 self.CrossBillboardDataList = list() return @@ -14057,6 +14990,7 @@ length += 1 length += 1 length += 1 + length += 4 length += 1 for i in range(self.BillboardCount): length += self.CrossBillboardDataList[i].GetLength() @@ -14069,6 +15003,7 @@ data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteBYTE(data, self.GroupValue1) data = CommFunc.WriteBYTE(data, self.GroupValue2) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) for i in range(self.BillboardCount): data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) @@ -14080,6 +15015,7 @@ Type:%d, GroupValue1:%d, GroupValue2:%d, + WatchID:%d, BillboardCount:%d, CrossBillboardDataList:%s '''\ @@ -14088,6 +15024,7 @@ self.Type, self.GroupValue1, self.GroupValue2, + self.WatchID, self.BillboardCount, "..." ) @@ -16080,9 +17017,11 @@ class tagMCCoinToGoldCount(Structure): _pack_ = 1 _fields_ = [ - ("RecordID", c_ubyte), + ("RecordID", c_ushort), ("TodayPayCount", c_ushort), # 今日已购买次数 ("TotalPayCount", c_int), # 累计总购买次数 + ("WeekPayCount", c_ushort), # 周总购买次数 + ("MonthPayCount", c_ushort), # 月总购买次数 ] def __init__(self): @@ -16098,6 +17037,8 @@ self.RecordID = 0 self.TodayPayCount = 0 self.TotalPayCount = 0 + self.WeekPayCount = 0 + self.MonthPayCount = 0 return def GetLength(self): @@ -16110,19 +17051,23 @@ 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 class tagMCCoinToGoldCountInfo(Structure): Head = tagHead() - RecordCount = 0 #(BYTE RecordCount) + RecordCount = 0 #(WORD RecordCount) CTGCountInfoList = list() #(vector<tagMCCoinToGoldCount> CTGCountInfoList) data = None @@ -16135,7 +17080,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.RecordCount): temCTGCountInfoList = tagMCCoinToGoldCount() _pos = temCTGCountInfoList.ReadData(_lpData, _pos) @@ -16154,7 +17099,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 + length += 2 for i in range(self.RecordCount): length += self.CTGCountInfoList[i].GetLength() @@ -16163,7 +17108,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RecordCount) + data = CommFunc.WriteWORD(data, self.RecordCount) for i in range(self.RecordCount): data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer()) return data @@ -16194,6 +17139,9 @@ OrderLen = 0 #(BYTE OrderLen) OrderID = "" #(String OrderID)// 订单id Coin = 0 #(DWORD Coin)// 充值的点卷 + RecordID = 0 #(WORD RecordID)// ctgID + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo) data = None def __init__(self): @@ -16208,6 +17156,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.ReadWORD(_lpData, _pos) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) return _pos def Clear(self): @@ -16218,6 +17169,9 @@ self.OrderLen = 0 self.OrderID = "" self.Coin = 0 + self.RecordID = 0 + self.OrderInfoLen = 0 + self.OrderInfo = "" return def GetLength(self): @@ -16226,6 +17180,9 @@ length += 1 length += len(self.OrderID) length += 4 + length += 2 + length += 1 + length += len(self.OrderInfo) return length @@ -16235,6 +17192,9 @@ data = CommFunc.WriteBYTE(data, self.OrderLen) data = CommFunc.WriteString(data, self.OrderLen, self.OrderID) data = CommFunc.WriteDWORD(data, self.Coin) + data = CommFunc.WriteWORD(data, self.RecordID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) return data def OutputString(self): @@ -16242,13 +17202,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 @@ -21753,6 +22719,114 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # A3 38 投资理财信息 #tagMCInvestInfo class tagMCInvestInfo(Structure): @@ -22906,6 +23980,7 @@ PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表 EnterCntTotal = 0 #(DWORD EnterCntTotal)//累计进入次数 + PassLineID = 0 #(DWORD PassLineID)//已过关到的lineID data = None def __init__(self): @@ -22923,6 +23998,7 @@ value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.PassGrade.append(value) self.EnterCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PassLineID,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -22933,6 +24009,7 @@ self.PassGradeCnt = 0 self.PassGrade = list() self.EnterCntTotal = 0 + self.PassLineID = 0 return def GetLength(self): @@ -22943,6 +24020,7 @@ length += 2 length += 1 length += 4 * self.PassGradeCnt + length += 4 length += 4 return length @@ -22957,6 +24035,7 @@ for i in range(self.PassGradeCnt): data = CommFunc.WriteDWORD(data, self.PassGrade[i]) data = CommFunc.WriteDWORD(data, self.EnterCntTotal) + data = CommFunc.WriteDWORD(data, self.PassLineID) return data def OutputString(self): @@ -22967,7 +24046,8 @@ ItemAddCnt:%d, PassGradeCnt:%d, PassGrade:%s, - EnterCntTotal:%d + EnterCntTotal:%d, + PassLineID:%d '''\ %( self.FBID, @@ -22976,7 +24056,8 @@ self.ItemAddCnt, self.PassGradeCnt, "...", - self.EnterCntTotal + self.EnterCntTotal, + self.PassLineID ) return DumpString @@ -24884,6 +25965,114 @@ #------------------------------------------------------ +# 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): @@ -25910,6 +27099,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): @@ -25962,6 +27287,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): @@ -25970,6 +27486,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("GetState", c_ubyte), #是否已领取 + ("MoneyDonateCount", c_ubyte), #今日货币捐献次数 ] def __init__(self): @@ -25987,6 +27504,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x06 self.GetState = 0 + self.MoneyDonateCount = 0 return def GetLength(self): @@ -25999,12 +27517,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 @@ -26119,6 +27639,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 #------------------------------------------------------ @@ -28522,7 +30221,7 @@ class tagRefreshType(Structure): _pack_ = 1 _fields_ = [ - ("RefreshType", c_ubyte), + ("RefreshType", c_ushort), ("Value", c_int), ("ValueEx", c_int), ] @@ -29655,6 +31354,755 @@ #------------------------------------------------------ +# 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)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励 + MemCount = 0 #(BYTE MemCount)// 成员奖励物品数 + MemAwardItemList = list() #(vector<tagMCActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效 + 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) + self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MemCount): + temMemAwardItemList = tagMCActBossTrialItem() + _pos = temMemAwardItemList.ReadData(_lpData, _pos) + self.MemAwardItemList.append(temMemAwardItemList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.MemCount = 0 + self.MemAwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 1 + for i in range(self.MemCount): + length += self.MemAwardItemList[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()) + data = CommFunc.WriteBYTE(data, self.MemCount) + for i in range(self.MemCount): + data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + MemCount:%d, + MemAwardItemList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.MemCount, + "..." + ) + 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 + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ShopType = 0 #(WORD ShopType)// 开放商店类型,可能为0不开放 + SubResetType = 0 #(BYTE SubResetType)// 提交凭证奖励重置类型,0-跟随活动; 1-0点重置;2-5点重置 + SubmitCount = 0 #(BYTE SubmitCount) + SubmitInfoList = list() #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表 + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + FamilyBillCount = 0 #(BYTE FamilyBillCount) + FamilyBillboardInfoList = list() #(vector<tagMCActBossTrialBillard> FamilyBillboardInfoList)// 仙盟榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + 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.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SubResetType,_pos = CommFunc.ReadBYTE(_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.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCActBossTrialBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + self.FamilyBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyBillCount): + temFamilyBillboardInfoList = tagMCActBossTrialBillard() + _pos = temFamilyBillboardInfoList.ReadData(_lpData, _pos) + self.FamilyBillboardInfoList.append(temFamilyBillboardInfoList) + 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.JoinStartTime = "" + self.JoinEndTime = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.ShopType = 0 + self.SubResetType = 0 + self.SubmitCount = 0 + self.SubmitInfoList = list() + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + self.FamilyBillCount = 0 + self.FamilyBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 1 + length += 1 + length += 2 + length += 2 + length += 1 + length += 1 + for i in range(self.SubmitCount): + length += self.SubmitInfoList[i].GetLength() + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + length += 1 + for i in range(self.FamilyBillCount): + length += self.FamilyBillboardInfoList[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.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteWORD(data, self.ShopType) + data = CommFunc.WriteBYTE(data, self.SubResetType) + 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.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.FamilyBillCount) + for i in range(self.FamilyBillCount): + data = CommFunc.WriteString(data, self.FamilyBillboardInfoList[i].GetLength(), self.FamilyBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + ShopType:%d, + SubResetType:%d, + SubmitCount:%d, + SubmitInfoList:%s, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s, + FamilyBillCount:%d, + FamilyBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.ShopType, + self.SubResetType, + self.SubmitCount, + "...", + self.PersonalBillCount, + "...", + self.FamilyBillCount, + "..." + ) + 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_int), # 已提交凭证个数,总个数 + ("SubmitAwardCount", c_int), # 已提交凭证个数,关联提交奖励的个数,领奖使用该个数判断 + ("SubmitAwardState", 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.SubmitAwardCount = 0 + self.SubmitAwardState = 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, + SubmitAwardCount:%d, + SubmitAwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount, + self.SubmitAwardCount, + self.SubmitAwardState + ) + return DumpString + + +m_NAtagMCActBossTrialPlayerInfo=tagMCActBossTrialPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialPlayerInfo.Cmd,m_NAtagMCActBossTrialPlayerInfo.SubCmd))] = m_NAtagMCActBossTrialPlayerInfo + + +#------------------------------------------------------ +# AA 74 购买次数礼包活动信息 #tagMCActBuyCountGiftInfo + +class tagMCActBuyCountGiftItem(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(tagMCActBuyCountGiftItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 74 购买次数礼包活动信息 //tagMCActBuyCountGiftInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActBuyCountGift(Structure): + NeedBuyCount = 0 #(BYTE NeedBuyCount)// 所需总购买次数,0为免费领取的档次 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBuyCountGiftItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBuyCountGiftItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedBuyCount = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NeedBuyCount) + 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 = ''' + NeedBuyCount:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedBuyCount, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBuyCountCTGID(Structure): + _pack_ = 1 + _fields_ = [ + ("CTGID", c_ushort), # 充值表ID + ("Discount", 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.CTGID = 0 + self.Discount = 0 + return + + def GetLength(self): + return sizeof(tagMCActBuyCountCTGID) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 74 购买次数礼包活动信息 //tagMCActBuyCountGiftInfo: + CTGID:%d, + Discount:%d + '''\ + %( + self.CTGID, + self.Discount + ) + return DumpString + + +class tagMCActBuyCountGiftInfo(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)// 限制等级 + CTGIDCount = 0 #(BYTE CTGIDCount) + CTGIDInfoList = list() #(vector<tagMCActBuyCountCTGID> CTGIDInfoList)// CTGID信息列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 + GiftCount = 0 #(BYTE GiftCount) + BuyCountGiftList = list() #(vector<tagMCActBuyCountGift> BuyCountGiftList)// 购买次数礼包列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x74 + 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.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CTGIDCount): + temCTGIDInfoList = tagMCActBuyCountCTGID() + _pos = temCTGIDInfoList.ReadData(_lpData, _pos) + self.CTGIDInfoList.append(temCTGIDInfoList) + self.GiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftCount): + temBuyCountGiftList = tagMCActBuyCountGift() + _pos = temBuyCountGiftList.ReadData(_lpData, _pos) + self.BuyCountGiftList.append(temBuyCountGiftList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x74 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.CTGIDCount = 0 + self.CTGIDInfoList = list() + self.GiftCount = 0 + self.BuyCountGiftList = 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.CTGIDCount): + length += self.CTGIDInfoList[i].GetLength() + length += 1 + for i in range(self.GiftCount): + length += self.BuyCountGiftList[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.CTGIDCount) + for i in range(self.CTGIDCount): + data = CommFunc.WriteString(data, self.CTGIDInfoList[i].GetLength(), self.CTGIDInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.GiftCount) + for i in range(self.GiftCount): + data = CommFunc.WriteString(data, self.BuyCountGiftList[i].GetLength(), self.BuyCountGiftList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + CTGIDCount:%d, + CTGIDInfoList:%s, + GiftCount:%d, + BuyCountGiftList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.CTGIDCount, + "...", + self.GiftCount, + "..." + ) + return DumpString + + +m_NAtagMCActBuyCountGiftInfo=tagMCActBuyCountGiftInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyCountGiftInfo.Head.Cmd,m_NAtagMCActBuyCountGiftInfo.Head.SubCmd))] = m_NAtagMCActBuyCountGiftInfo + + +#------------------------------------------------------ +# AA 75 购买次数礼包活动玩家信息 #tagMCActBuyCountGiftPlayerInfo + +class tagMCActBuyCountGiftPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("GiftAwardRecord", c_int), # 购买次数礼包领奖记录,直接用购买次数做位运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x75 + 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 = 0x75 + self.ActNum = 0 + self.GiftAwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCActBuyCountGiftPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 75 购买次数礼包活动玩家信息 //tagMCActBuyCountGiftPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + GiftAwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.GiftAwardRecord + ) + return DumpString + + +m_NAtagMCActBuyCountGiftPlayerInfo=tagMCActBuyCountGiftPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyCountGiftPlayerInfo.Cmd,m_NAtagMCActBuyCountGiftPlayerInfo.SubCmd))] = m_NAtagMCActBuyCountGiftPlayerInfo + + +#------------------------------------------------------ # AA 65 买一送多活动信息 #tagMCActBuyOneInfo class tagMCActBuyOneInfoFreeItem(Structure): @@ -30341,6 +32789,273 @@ m_NAtagMCActCollectWordsPlayerInfo=tagMCActCollectWordsPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsPlayerInfo.Head.Cmd,m_NAtagMCActCollectWordsPlayerInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsPlayerInfo + + +#------------------------------------------------------ +# AA 77 仙盟充值互助活动信息 #tagMCActFamilyCTGAssistInfo + +class tagMCActFamilyCTGAssistItem(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(tagMCActFamilyCTGAssistItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 77 仙盟充值互助活动信息 //tagMCActFamilyCTGAssistInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActFamilyCTGAssistAward(Structure): + NeedCTGPlayers = 0 #(BYTE NeedCTGPlayers)//所需充值人数 + RecordIndex = 0 #(BYTE RecordIndex)//对应领奖记录索引 + Count = 0 #(BYTE Count) + AwardItemList = list() #(vector<tagMCActFamilyCTGAssistItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedCTGPlayers,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActFamilyCTGAssistItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedCTGPlayers = 0 + self.RecordIndex = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NeedCTGPlayers) + data = CommFunc.WriteBYTE(data, self.RecordIndex) + 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 = ''' + NeedCTGPlayers:%d, + RecordIndex:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedCTGPlayers, + self.RecordIndex, + self.Count, + "..." + ) + return DumpString + + +class tagMCActFamilyCTGAssistInfo(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)// 限制等级 + AwardCount = 0 #(BYTE AwardCount) + AwardInfoList = list() #(vector<tagMCActFamilyCTGAssistAward> AwardInfoList)// 互助奖励列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x77 + 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.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardInfoList = tagMCActFamilyCTGAssistAward() + _pos = temAwardInfoList.ReadData(_lpData, _pos) + self.AwardInfoList.append(temAwardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x77 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.AwardCount = 0 + self.AwardInfoList = 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.AwardCount): + length += self.AwardInfoList[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.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardInfoList[i].GetLength(), self.AwardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + AwardCount:%d, + AwardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCActFamilyCTGAssistInfo=tagMCActFamilyCTGAssistInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActFamilyCTGAssistInfo.Head.Cmd,m_NAtagMCActFamilyCTGAssistInfo.Head.SubCmd))] = m_NAtagMCActFamilyCTGAssistInfo + + +#------------------------------------------------------ +# AA 78 仙盟充值互助活动玩家信息 #tagMCActFamilyCTGAssistPlayerInfo + +class tagMCActFamilyCTGAssistPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("AwardRecord", c_int), # 奖励记录,按奖励记录索引位运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x78 + 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 = 0x78 + self.ActNum = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCActFamilyCTGAssistPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 78 仙盟充值互助活动玩家信息 //tagMCActFamilyCTGAssistPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCActFamilyCTGAssistPlayerInfo=tagMCActFamilyCTGAssistPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActFamilyCTGAssistPlayerInfo.Cmd,m_NAtagMCActFamilyCTGAssistPlayerInfo.SubCmd))] = m_NAtagMCActFamilyCTGAssistPlayerInfo #------------------------------------------------------ @@ -31087,7 +33802,7 @@ class tagMCActGrowupBuyCTGInfo(Structure): - CTGID = 0 #(BYTE CTGID)// 充值表ID + CTGID = 0 #(WORD CTGID)// 充值表ID GainItemCount = 0 #(BYTE GainItemCount)// 获得物品数 GainItemList = list() #(vector<tagMCActGrowupBuyCTGItem> GainItemList)// 获得物品列表,替换充值表中的 GainItemList 字段信息 data = None @@ -31098,7 +33813,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - self.CTGID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CTGID,_pos = CommFunc.ReadWORD(_lpData, _pos) self.GainItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.GainItemCount): temGainItemList = tagMCActGrowupBuyCTGItem() @@ -31114,7 +33829,7 @@ def GetLength(self): length = 0 - length += 1 + length += 2 length += 1 for i in range(self.GainItemCount): length += self.GainItemList[i].GetLength() @@ -31123,7 +33838,7 @@ def GetBuffer(self): data = '' - data = CommFunc.WriteBYTE(data, self.CTGID) + data = CommFunc.WriteWORD(data, self.CTGID) data = CommFunc.WriteBYTE(data, self.GainItemCount) for i in range(self.GainItemCount): data = CommFunc.WriteString(data, self.GainItemList[i].GetLength(), self.GainItemList[i].GetBuffer()) @@ -31854,6 +34569,273 @@ m_NAtagMCActLoginAwardPlayerInfo=tagMCActLoginAwardPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginAwardPlayerInfo.Head.Cmd,m_NAtagMCActLoginAwardPlayerInfo.Head.SubCmd))] = m_NAtagMCActLoginAwardPlayerInfo + + +#------------------------------------------------------ +# AA 69 登录活动信息新 #tagMCActLoginNew + +class tagMCActLoginNewItem(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(tagMCActLoginNewItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 69 登录活动信息新 //tagMCActLoginNew: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActLoginNewDay(Structure): + DayNum = 0 #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActLoginNewItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.DayNum = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.DayNum) + 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 = ''' + DayNum:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.DayNum, + self.Count, + "..." + ) + return DumpString + + +class tagMCActLoginNew(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + RepSignMoneyType = 0 #(BYTE RepSignMoneyType)// 补签消耗货币类型 + RepSignMoneyValue = 0 #(DWORD RepSignMoneyValue)// 补签消耗货币值 + DayCount = 0 #(BYTE DayCount) + AwardDayList = list() #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x69 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DayCount): + temAwardDayList = tagMCActLoginNewDay() + _pos = temAwardDayList.ReadData(_lpData, _pos) + self.AwardDayList.append(temAwardDayList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x69 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.RepSignMoneyType = 0 + self.RepSignMoneyValue = 0 + self.DayCount = 0 + self.AwardDayList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + length += 4 + length += 1 + for i in range(self.DayCount): + length += self.AwardDayList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.RepSignMoneyType) + data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue) + data = CommFunc.WriteBYTE(data, self.DayCount) + for i in range(self.DayCount): + data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + RepSignMoneyType:%d, + RepSignMoneyValue:%d, + DayCount:%d, + AwardDayList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.RepSignMoneyType, + self.RepSignMoneyValue, + self.DayCount, + "..." + ) + return DumpString + + +m_NAtagMCActLoginNew=tagMCActLoginNew() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginNew.Head.Cmd,m_NAtagMCActLoginNew.Head.SubCmd))] = m_NAtagMCActLoginNew + + +#------------------------------------------------------ +# AA 70 登录活动玩家信息新 #tagMCActLoginPlayerInfoNew + +class tagMCActLoginPlayerInfoNew(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("LoginAward", c_int), # 是否已领取,按天索引0代表第1天记录当天是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x70 + 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 = 0x70 + self.ActNum = 0 + self.LoginAward = 0 + return + + def GetLength(self): + return sizeof(tagMCActLoginPlayerInfoNew) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 70 登录活动玩家信息新 //tagMCActLoginPlayerInfoNew: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + LoginAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.LoginAward + ) + return DumpString + + +m_NAtagMCActLoginPlayerInfoNew=tagMCActLoginPlayerInfoNew() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginPlayerInfoNew.Cmd,m_NAtagMCActLoginPlayerInfoNew.SubCmd))] = m_NAtagMCActLoginPlayerInfoNew #------------------------------------------------------ @@ -32884,7 +35866,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)// 奖励物品信息 @@ -32897,6 +35880,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): @@ -32907,6 +35891,7 @@ def Clear(self): self.AwardIndex = 0 + self.AwardCountMax = 0 self.SingleRechargeValue = 0 self.AwardItemCount = 0 self.AwardItem = list() @@ -32915,6 +35900,7 @@ def GetLength(self): length = 0 length += 1 + length += 2 length += 4 length += 1 for i in range(self.AwardItemCount): @@ -32925,6 +35911,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): @@ -32934,12 +35921,14 @@ def OutputString(self): DumpString = ''' AwardIndex:%d, + AwardCountMax:%d, SingleRechargeValue:%d, AwardItemCount:%d, AwardItem:%s '''\ %( self.AwardIndex, + self.AwardCountMax, self.SingleRechargeValue, self.AwardItemCount, "..." @@ -33058,20 +36047,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): @@ -33080,39 +36065,516 @@ 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 + + +#------------------------------------------------------ +# AA 71 任务活动信息 #tagMCActTaskInfo + +class tagMCActTaskItem(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(tagMCActTaskItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 71 任务活动信息 //tagMCActTaskInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActTask(Structure): + TaskID = 0 #(DWORD TaskID)// 任务ID,1~n + TaskType = 0 #(BYTE TaskType)// 任务类型 + NeedValue = 0 #(DWORD NeedValue)// 完成任务所需值 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActTaskItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.TaskID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TaskType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActTaskItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.TaskID = 0 + self.TaskType = 0 + self.NeedValue = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + 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.TaskID) + data = CommFunc.WriteBYTE(data, self.TaskType) + data = CommFunc.WriteDWORD(data, self.NeedValue) + 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 = ''' + TaskID:%d, + TaskType:%d, + NeedValue:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.TaskID, + self.TaskType, + self.NeedValue, + self.Count, + "..." + ) + return DumpString + + +class tagMCActTaskInfo(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)// 限制等级 + TaskCount = 0 #(BYTE TaskCount) + TaskList = list() #(vector<tagMCActTask> TaskList)// 任务列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x71 + 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.TaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TaskCount): + temTaskList = tagMCActTask() + _pos = temTaskList.ReadData(_lpData, _pos) + self.TaskList.append(temTaskList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x71 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.TaskCount = 0 + self.TaskList = 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.TaskCount): + length += self.TaskList[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.TaskCount) + for i in range(self.TaskCount): + data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + TaskCount:%d, + TaskList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.TaskCount, + "..." + ) + return DumpString + + +m_NAtagMCActTaskInfo=tagMCActTaskInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTaskInfo.Head.Cmd,m_NAtagMCActTaskInfo.Head.SubCmd))] = m_NAtagMCActTaskInfo + + +#------------------------------------------------------ +# AA 73 任务活动玩家信息 #tagMCActTaskPlayerInfo + +class tagMCActTaskPlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + AwardCount = 0 #(BYTE AwardCount) + AwardRecordList = list() #(vector<DWORD> AwardRecordList)// 任务ID领奖记录值列表,根据任务ID位判断是否已领取,一个记录值存31位 [记录值0, 记录值1, ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x73 + 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.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.AwardRecordList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x73 + self.ActNum = 0 + self.AwardCount = 0 + self.AwardRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.AwardCount + + 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.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteDWORD(data, self.AwardRecordList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + AwardCount:%d, + AwardRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCActTaskPlayerInfo=tagMCActTaskPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTaskPlayerInfo.Head.Cmd,m_NAtagMCActTaskPlayerInfo.Head.SubCmd))] = m_NAtagMCActTaskPlayerInfo + + +#------------------------------------------------------ +# AA 72 任务活动玩家任务值 #tagMCActTaskPlayerValueInfo + +class tagMCActTaskPlayerValue(Structure): + _pack_ = 1 + _fields_ = [ + ("TaskType", 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.TaskValue = 0 + return + + def GetLength(self): + return sizeof(tagMCActTaskPlayerValue) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 72 任务活动玩家任务值 //tagMCActTaskPlayerValueInfo: + TaskType:%d, + TaskValue:%d + '''\ + %( + self.TaskType, + self.TaskValue + ) + return DumpString + + +class tagMCActTaskPlayerValueInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + TaskCount = 0 #(BYTE TaskCount) + TaskValueList = list() #(vector<tagMCActTaskPlayerValue> TaskValueList)// 有同步的任务类型直接覆盖即可 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x72 + 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.TaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TaskCount): + temTaskValueList = tagMCActTaskPlayerValue() + _pos = temTaskValueList.ReadData(_lpData, _pos) + self.TaskValueList.append(temTaskValueList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x72 + self.ActNum = 0 + self.TaskCount = 0 + self.TaskValueList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.TaskCount): + 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.ActNum) + data = CommFunc.WriteBYTE(data, self.TaskCount) + for i in range(self.TaskCount): + data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + TaskCount:%d, + TaskValueList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.TaskCount, + "..." + ) + return DumpString + + +m_NAtagMCActTaskPlayerValueInfo=tagMCActTaskPlayerValueInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTaskPlayerValueInfo.Head.Cmd,m_NAtagMCActTaskPlayerValueInfo.Head.SubCmd))] = m_NAtagMCActTaskPlayerValueInfo #------------------------------------------------------ @@ -35342,6 +38804,290 @@ #------------------------------------------------------ +# AA 76 Boss历练跨服活动信息 #tagMCCrossActBossTrialInfo + +class tagMCCrossActBossTrialItem(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(tagMCCrossActBossTrialItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 76 Boss历练跨服活动信息 //tagMCCrossActBossTrialInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCrossActBossTrialBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励 + MemCount = 0 #(BYTE MemCount)// 成员奖励物品数 + MemAwardItemList = list() #(vector<tagMCCrossActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效 + 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 = tagMCCrossActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.MemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MemCount): + temMemAwardItemList = tagMCCrossActBossTrialItem() + _pos = temMemAwardItemList.ReadData(_lpData, _pos) + self.MemAwardItemList.append(temMemAwardItemList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.MemCount = 0 + self.MemAwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 1 + for i in range(self.MemCount): + length += self.MemAwardItemList[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()) + data = CommFunc.WriteBYTE(data, self.MemCount) + for i in range(self.MemCount): + data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + MemCount:%d, + MemAwardItemList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.MemCount, + "..." + ) + return DumpString + + +class tagMCCrossActBossTrialInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + GroupValue1 = 0 #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + RankLimitPersonal = 0 #(WORD RankLimitPersonal)// 个人榜上榜个数保底限制; + RankLimitFamily = 0 #(WORD RankLimitFamily)// 仙盟榜上榜个数保底限制; + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCCrossActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + FamilyBillCount = 0 #(BYTE FamilyBillCount) + FamilyBillboardInfoList = list() #(vector<tagMCCrossActBossTrialBillard> FamilyBillboardInfoList)// 仙盟榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x76 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) + self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RankLimitFamily,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCCrossActBossTrialBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + self.FamilyBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyBillCount): + temFamilyBillboardInfoList = tagMCCrossActBossTrialBillard() + _pos = temFamilyBillboardInfoList.ReadData(_lpData, _pos) + self.FamilyBillboardInfoList.append(temFamilyBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x76 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.GroupValue1 = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.RankLimitPersonal = 0 + self.RankLimitFamily = 0 + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + self.FamilyBillCount = 0 + self.FamilyBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 1 + length += 1 + length += 2 + length += 2 + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + length += 1 + for i in range(self.FamilyBillCount): + length += self.FamilyBillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteBYTE(data, self.GroupValue1) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.RankLimitPersonal) + data = CommFunc.WriteWORD(data, self.RankLimitFamily) + data = CommFunc.WriteBYTE(data, self.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.FamilyBillCount) + for i in range(self.FamilyBillCount): + data = CommFunc.WriteString(data, self.FamilyBillboardInfoList[i].GetLength(), self.FamilyBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + GroupValue1:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + IsDayReset:%d, + ResetType:%d, + RankLimitPersonal:%d, + RankLimitFamily:%d, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s, + FamilyBillCount:%d, + FamilyBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.GroupValue1, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.IsDayReset, + self.ResetType, + self.RankLimitPersonal, + self.RankLimitFamily, + self.PersonalBillCount, + "...", + self.FamilyBillCount, + "..." + ) + return DumpString + + +m_NAtagMCCrossActBossTrialInfo=tagMCCrossActBossTrialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActBossTrialInfo.Head.Cmd,m_NAtagMCCrossActBossTrialInfo.Head.SubCmd))] = m_NAtagMCCrossActBossTrialInfo + + +#------------------------------------------------------ # AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo class tagMCDailyGiftbagItem(Structure): @@ -35391,6 +39137,7 @@ RMB = 0 #(DWORD RMB)//所需RMB,元 GiftItemCount = 0 #(BYTE GiftItemCount)// 礼包物品数 ItemInfo = list() #(vector<tagMCDailyGiftbagItem> ItemInfo)// 物品信息 + Discount = 0 #(WORD Discount)// 折扣力度百分比 data = None def __init__(self): @@ -35409,6 +39156,7 @@ temItemInfo = tagMCDailyGiftbagItem() _pos = temItemInfo.ReadData(_lpData, _pos) self.ItemInfo.append(temItemInfo) + self.Discount,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): @@ -35419,6 +39167,7 @@ self.RMB = 0 self.GiftItemCount = 0 self.ItemInfo = list() + self.Discount = 0 return def GetLength(self): @@ -35431,6 +39180,7 @@ length += 1 for i in range(self.GiftItemCount): length += self.ItemInfo[i].GetLength() + length += 2 return length @@ -35444,6 +39194,7 @@ data = CommFunc.WriteBYTE(data, self.GiftItemCount) for i in range(self.GiftItemCount): data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.Discount) return data def OutputString(self): @@ -35454,7 +39205,8 @@ BuyCountLimit:%d, RMB:%d, GiftItemCount:%d, - ItemInfo:%s + ItemInfo:%s, + Discount:%d '''\ %( self.GiftID, @@ -35463,7 +39215,8 @@ self.BuyCountLimit, self.RMB, self.GiftItemCount, - "..." + "...", + self.Discount ) return DumpString @@ -35647,6 +39400,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 #------------------------------------------------------ @@ -36231,7 +40044,7 @@ _pack_ = 1 _fields_ = [ ("AwardIndex", c_ubyte), #游历奖励索引 - ("GetAwardCount", c_ubyte), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值 + ("GetAwardCount", c_int), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值 ] def __init__(self): @@ -41525,6 +45338,128 @@ #------------------------------------------------------ +# B0 30 玩家福地相关信息 #tagMCPlayerMineAreaInfo + +class tagMCPlayerMineAreaInfo(Structure): + Head = tagHead() + WorkerCount = 0 #(BYTE WorkerCount)// 已雇佣工人数 + EnergyUsed = 0 #(WORD EnergyUsed)// 今日已消耗体力 + RefreshCount = 0 #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新 + RefreshCountSuper = 0 #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新 + TreasureCount = 0 #(BYTE TreasureCount)// 聚宝盆类型个数,对应类型 0~n + TreasureState = list() #(vector<BYTE> TreasureState)// 聚宝盆是否已激活列表,[类型0是否已激活, ...] + TreasureAward = list() #(vector<BYTE> TreasureAward)// 聚宝盆奖励是否已领取列表,[类型0是否已领取, ...] + TreasureProgress = list() #(vector<BYTE> TreasureProgress)// 聚宝盆进度值列表,[类型0进度值, ...],满进度100 + HelpAwardCount = 0 #(BYTE HelpAwardCount)// 今日已帮助别人奖励次数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x30 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TreasureCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.TreasureState.append(value) + for i in range(self.TreasureCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.TreasureAward.append(value) + for i in range(self.TreasureCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.TreasureProgress.append(value) + self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x30 + self.WorkerCount = 0 + self.EnergyUsed = 0 + self.RefreshCount = 0 + self.RefreshCountSuper = 0 + self.TreasureCount = 0 + self.TreasureState = list() + self.TreasureAward = list() + self.TreasureProgress = list() + self.HelpAwardCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 4 + length += 1 + length += 1 + length += 1 * self.TreasureCount + length += 1 * self.TreasureCount + length += 1 * self.TreasureCount + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.WorkerCount) + data = CommFunc.WriteWORD(data, self.EnergyUsed) + data = CommFunc.WriteDWORD(data, self.RefreshCount) + data = CommFunc.WriteBYTE(data, self.RefreshCountSuper) + data = CommFunc.WriteBYTE(data, self.TreasureCount) + for i in range(self.TreasureCount): + data = CommFunc.WriteBYTE(data, self.TreasureState[i]) + for i in range(self.TreasureCount): + data = CommFunc.WriteBYTE(data, self.TreasureAward[i]) + for i in range(self.TreasureCount): + data = CommFunc.WriteBYTE(data, self.TreasureProgress[i]) + data = CommFunc.WriteBYTE(data, self.HelpAwardCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + WorkerCount:%d, + EnergyUsed:%d, + RefreshCount:%d, + RefreshCountSuper:%d, + TreasureCount:%d, + TreasureState:%s, + TreasureAward:%s, + TreasureProgress:%s, + HelpAwardCount:%d + '''\ + %( + self.Head.OutputString(), + self.WorkerCount, + self.EnergyUsed, + self.RefreshCount, + self.RefreshCountSuper, + self.TreasureCount, + "...", + "...", + "...", + self.HelpAwardCount + ) + return DumpString + + +m_NAtagMCPlayerMineAreaInfo=tagMCPlayerMineAreaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerMineAreaInfo.Head.Cmd,m_NAtagMCPlayerMineAreaInfo.Head.SubCmd))] = m_NAtagMCPlayerMineAreaInfo + + +#------------------------------------------------------ # B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo class tagMCTodayAssistMoneyInfo(Structure): @@ -41812,6 +45747,207 @@ m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList + + +#------------------------------------------------------ +# B1 09 玩家挂机系统信息 #tagMCGuajiInfo + +class tagMCGuajiMoney(Structure): + _pack_ = 1 + _fields_ = [ + ("MoneyType", c_ubyte), + ("MoneyValue", 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.MoneyType = 0 + self.MoneyValue = 0 + return + + def GetLength(self): + return sizeof(tagMCGuajiMoney) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 09 玩家挂机系统信息 //tagMCGuajiInfo: + MoneyType:%d, + MoneyValue:%d + '''\ + %( + self.MoneyType, + self.MoneyValue + ) + return DumpString + + +class tagMCGuajiItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("Count", 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.Count = 0 + return + + def GetLength(self): + return sizeof(tagMCGuajiItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 09 玩家挂机系统信息 //tagMCGuajiInfo: + ItemID:%d, + Count:%d + '''\ + %( + self.ItemID, + self.Count + ) + return DumpString + + +class tagMCGuajiInfo(Structure): + Head = tagHead() + QuickAwardCount = 0 #(BYTE QuickAwardCount)// 今日已快速挂机收益次数 + AwardType = 0 #(BYTE AwardType)// 收益类型: 0-已累计预览;1-领取结算结果(包含常规领取跟快速领取) + AwardSeconds = 0 #(DWORD AwardSeconds)// 已累计收益时长,秒 + Exp = 0 #(DWORD Exp)// 已累计经验,求余亿部分 + ExpPoint = 0 #(DWORD ExpPoint)// 已累计经验,整除亿部分 + MoneyLen = 0 #(BYTE MoneyLen) + MoneyList = list() #(vector<tagMCGuajiMoney> MoneyList)// 已累计货币 + ItemLen = 0 #(BYTE ItemLen) + ItemList = list() #(vector<tagMCGuajiItem> ItemList)// 已累计物品 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.QuickAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardSeconds,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MoneyLen): + temMoneyList = tagMCGuajiMoney() + _pos = temMoneyList.ReadData(_lpData, _pos) + self.MoneyList.append(temMoneyList) + self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemLen): + temItemList = tagMCGuajiItem() + _pos = temItemList.ReadData(_lpData, _pos) + self.ItemList.append(temItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x09 + self.QuickAwardCount = 0 + self.AwardType = 0 + self.AwardSeconds = 0 + self.Exp = 0 + self.ExpPoint = 0 + self.MoneyLen = 0 + self.MoneyList = list() + self.ItemLen = 0 + self.ItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + for i in range(self.MoneyLen): + length += self.MoneyList[i].GetLength() + length += 1 + for i in range(self.ItemLen): + length += self.ItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.QuickAwardCount) + data = CommFunc.WriteBYTE(data, self.AwardType) + data = CommFunc.WriteDWORD(data, self.AwardSeconds) + data = CommFunc.WriteDWORD(data, self.Exp) + data = CommFunc.WriteDWORD(data, self.ExpPoint) + data = CommFunc.WriteBYTE(data, self.MoneyLen) + for i in range(self.MoneyLen): + data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ItemLen) + for i in range(self.ItemLen): + data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + QuickAwardCount:%d, + AwardType:%d, + AwardSeconds:%d, + Exp:%d, + ExpPoint:%d, + MoneyLen:%d, + MoneyList:%s, + ItemLen:%d, + ItemList:%s + '''\ + %( + self.Head.OutputString(), + self.QuickAwardCount, + self.AwardType, + self.AwardSeconds, + self.Exp, + self.ExpPoint, + self.MoneyLen, + "...", + self.ItemLen, + "..." + ) + return DumpString + + +m_NAtagMCGuajiInfo=tagMCGuajiInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuajiInfo.Head.Cmd,m_NAtagMCGuajiInfo.Head.SubCmd))] = m_NAtagMCGuajiInfo #------------------------------------------------------ @@ -42343,6 +46479,132 @@ m_NAtagMCYinjiStartTime=tagMCYinjiStartTime() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -43604,6 +47866,58 @@ #------------------------------------------------------ +# B2 17 境界塔信息 #tagMCRealmTowerInfo + +class tagMCRealmTowerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Floor", c_int), # 已通关层 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x17 + 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 = 0xB2 + 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): @@ -43899,6 +48213,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 #------------------------------------------------------ @@ -45540,6 +49906,119 @@ #------------------------------------------------------ +# B4 20 回合制战斗状态 #tagMCTurnFightState + +class tagMCTurnFightState(Structure): + Head = tagHead() + MapID = 0 #(DWORD MapID)// 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) + FuncLineID = 0 #(WORD FuncLineID) + TagType = 0 #(BYTE TagType)// 战斗目标类型,0-NPC,1-玩家,2-队伍 + TagID = 0 #(DWORD TagID)// 战斗目标类型对应的ID + State = 0 #(BYTE State)// 0-起始状态标记;1-准备完毕;2-战斗中;3-战斗结束;4-结算奖励;5-结束状态标记 + TurnNum = 0 #(BYTE TurnNum)// 当前轮次 + TurnMax = 0 #(BYTE TurnMax)// 最大轮次 + Len = 0 #(WORD Len) + Msg = "" #(String Msg)//size = Len + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TurnNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TurnMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x20 + self.MapID = 0 + self.FuncLineID = 0 + self.TagType = 0 + self.TagID = 0 + self.State = 0 + self.TurnNum = 0 + self.TurnMax = 0 + self.Len = 0 + self.Msg = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 1 + length += 4 + length += 1 + length += 1 + length += 1 + length += 2 + length += len(self.Msg) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteWORD(data, self.FuncLineID) + data = CommFunc.WriteBYTE(data, self.TagType) + data = CommFunc.WriteDWORD(data, self.TagID) + data = CommFunc.WriteBYTE(data, self.State) + data = CommFunc.WriteBYTE(data, self.TurnNum) + data = CommFunc.WriteBYTE(data, self.TurnMax) + data = CommFunc.WriteWORD(data, self.Len) + data = CommFunc.WriteString(data, self.Len, self.Msg) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + MapID:%d, + FuncLineID:%d, + TagType:%d, + TagID:%d, + State:%d, + TurnNum:%d, + TurnMax:%d, + Len:%d, + Msg:%s + '''\ + %( + self.Head.OutputString(), + self.MapID, + self.FuncLineID, + self.TagType, + self.TagID, + self.State, + self.TurnNum, + self.TurnMax, + self.Len, + self.Msg + ) + return DumpString + + +m_NAtagMCTurnFightState=tagMCTurnFightState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightState.Head.Cmd,m_NAtagMCTurnFightState.Head.SubCmd))] = m_NAtagMCTurnFightState + + +#------------------------------------------------------ # C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo class tagMCChampionshipPlayerInfo(Structure): -- Gitblit v1.8.0