From 35c01486259f07144bd96539e45c1a7f36c84ffc Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 11 六月 2024 11:41:00 +0800 Subject: [PATCH] 9912 [BT0.1]BOSS凭证(提交boss凭证改为实时刷新榜单;活动表增加字段配置发奖邮件模版;增加活动结束结算后备份榜单35;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 4215 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 4,148 insertions(+), 67 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 7ca9139..d61488a 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -985,6 +985,197 @@ #------------------------------------------------------ +# 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)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + 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) + self.Face,_pos = CommFunc.ReadDWORD(_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 + self.Face = 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 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.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) + data = CommFunc.WriteDWORD(data, self.Face) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + Face:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face + ) + 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 +1431,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 #------------------------------------------------------ @@ -2407,6 +2658,7 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + Face = 0 #(DWORD Face)//基本脸型 FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 Score = 0 #(DWORD Score)//积分 @@ -2426,6 +2678,7 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -2441,6 +2694,7 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 self.FightPower = 0 self.FightPowerEx = 0 self.Score = 0 @@ -2457,6 +2711,7 @@ length += 4 length += 4 length += 4 + length += 4 return length @@ -2468,6 +2723,7 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.Score) @@ -2481,6 +2737,7 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, FightPower:%d, FightPowerEx:%d, Score:%d @@ -2492,6 +2749,7 @@ self.Job, self.LV, self.RealmLV, + self.Face, self.FightPower, self.FightPowerEx, self.Score @@ -2512,6 +2770,7 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + Face = 0 #(DWORD Face)//基本脸型 FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 Score = 0 #(DWORD Score)//积分 @@ -2532,6 +2791,7 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -2547,6 +2807,7 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 self.FightPower = 0 self.FightPowerEx = 0 self.Score = 0 @@ -2566,6 +2827,7 @@ length += 4 length += 4 length += 4 + length += 4 length += 1 length += len(self.AddScore) length += 1 @@ -2580,6 +2842,7 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.Score) @@ -2596,6 +2859,7 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, FightPower:%d, FightPowerEx:%d, Score:%d, @@ -2610,6 +2874,7 @@ self.Job, self.LV, self.RealmLV, + self.Face, self.FightPower, self.FightPowerEx, self.Score, @@ -2696,6 +2961,7 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + Face = 0 #(DWORD Face)//基本脸型 FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 Score = 0 #(DWORD Score)//积分 @@ -2712,6 +2978,7 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -2723,6 +2990,7 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 self.FightPower = 0 self.FightPowerEx = 0 self.Score = 0 @@ -2738,6 +3006,7 @@ length += 4 length += 4 length += 4 + length += 4 return length @@ -2748,6 +3017,7 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.Score) @@ -2760,6 +3030,7 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, FightPower:%d, FightPowerEx:%d, Score:%d @@ -2770,6 +3041,7 @@ self.Job, self.LV, self.RealmLV, + self.Face, self.FightPower, self.FightPowerEx, self.Score @@ -4756,6 +5028,7 @@ LV = 0 #(DWORD LV)//等级 Job = 0 #(BYTE Job) RealmLV = 0 #(WORD RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 data = None def __init__(self): @@ -4769,6 +5042,7 @@ self.LV,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -4777,6 +5051,7 @@ self.LV = 0 self.Job = 0 self.RealmLV = 0 + self.Face = 0 return def GetLength(self): @@ -4786,6 +5061,7 @@ length += 4 length += 1 length += 2 + length += 4 return length @@ -4796,6 +5072,7 @@ data = CommFunc.WriteDWORD(data, self.LV) data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) return data def OutputString(self): @@ -4804,14 +5081,16 @@ Name:%s, LV:%d, Job:%d, - RealmLV:%d + RealmLV:%d, + Face:%d '''\ %( self.ID, self.Name, self.LV, self.Job, - self.RealmLV + self.RealmLV, + self.Face ) return DumpString @@ -4891,6 +5170,7 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 data = None def __init__(self): @@ -4904,6 +5184,7 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -4912,6 +5193,7 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 return def GetLength(self): @@ -4921,6 +5203,7 @@ length += 1 length += 2 length += 2 + length += 4 return length @@ -4931,6 +5214,7 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) return data def OutputString(self): @@ -4939,14 +5223,16 @@ PlayerName:%s, Job:%d, LV:%d, - RealmLV:%d + RealmLV:%d, + Face:%d '''\ %( self.PlayerID, self.PlayerName, self.Job, self.LV, - self.RealmLV + self.RealmLV, + self.Face ) return DumpString @@ -7478,6 +7764,566 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview class tagGCAssistPlayerInfo(Structure): @@ -7663,6 +8509,7 @@ Name = "" #(char Name[33]) LV = 0 #(WORD LV) RealmLV = 0 #(WORD RealmLV)//境界等级 + Face = 0 #(DWORD Face)//基本脸型 data = None def __init__(self): @@ -7678,6 +8525,7 @@ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -7689,6 +8537,7 @@ self.Name = "" self.LV = 0 self.RealmLV = 0 + self.Face = 0 return def GetLength(self): @@ -7698,6 +8547,7 @@ length += 33 length += 2 length += 2 + length += 4 return length @@ -7708,6 +8558,7 @@ data = CommFunc.WriteString(data, 33, self.Name) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) return data def OutputString(self): @@ -7716,14 +8567,16 @@ AskID:%d, Name:%s, LV:%d, - RealmLV:%d + RealmLV:%d, + Face:%d '''\ %( self.Head.OutputString(), self.AskID, self.Name, self.LV, - self.RealmLV + self.RealmLV, + self.Face ) return DumpString @@ -8793,6 +9646,7 @@ OnlineType = 0 #(BYTE OnlineType)//在线状态, 0 不在线 1在线 IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍 ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID + Face = 0 #(DWORD Face)//基本脸型 data = None def __init__(self): @@ -8812,6 +9666,7 @@ self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -8827,6 +9682,7 @@ self.OnlineType = 0 self.IsInTeam = 0 self.ServerGroupID = 0 + self.Face = 0 return def GetLength(self): @@ -8839,6 +9695,7 @@ length += 2 length += 1 length += 1 + length += 4 length += 4 return length @@ -8854,6 +9711,7 @@ data = CommFunc.WriteBYTE(data, self.OnlineType) data = CommFunc.WriteBYTE(data, self.IsInTeam) data = CommFunc.WriteDWORD(data, self.ServerGroupID) + data = CommFunc.WriteDWORD(data, self.Face) return data def OutputString(self): @@ -8866,7 +9724,8 @@ RealmLV:%d, OnlineType:%d, IsInTeam:%d, - ServerGroupID:%d + ServerGroupID:%d, + Face:%d '''\ %( self.Head.OutputString(), @@ -8877,7 +9736,8 @@ self.RealmLV, self.OnlineType, self.IsInTeam, - self.ServerGroupID + self.ServerGroupID, + self.Face ) return DumpString @@ -8952,6 +9812,7 @@ LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界 OnlineType = 0 #(BYTE OnlineType)//0不在线 1在线 2脱机在线 + Face = 0 #(DWORD Face)//基本脸型 data = None def __init__(self): @@ -8966,6 +9827,7 @@ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -8975,6 +9837,7 @@ self.LV = 0 self.RealmLV = 0 self.OnlineType = 0 + self.Face = 0 return def GetLength(self): @@ -8985,6 +9848,7 @@ length += 2 length += 2 length += 1 + length += 4 return length @@ -8996,6 +9860,7 @@ data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteBYTE(data, self.OnlineType) + data = CommFunc.WriteDWORD(data, self.Face) return data def OutputString(self): @@ -9005,7 +9870,8 @@ Job:%d, LV:%d, RealmLV:%d, - OnlineType:%d + OnlineType:%d, + Face:%d '''\ %( self.PlayerID, @@ -9013,7 +9879,8 @@ self.Job, self.LV, self.RealmLV, - self.OnlineType + self.OnlineType, + self.Face ) return DumpString @@ -16080,9 +16947,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 +16967,8 @@ self.RecordID = 0 self.TodayPayCount = 0 self.TotalPayCount = 0 + self.WeekPayCount = 0 + self.MonthPayCount = 0 return def GetLength(self): @@ -16110,19 +16981,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 +17010,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 +17029,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 +17038,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 +17069,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 +17086,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 +17099,9 @@ self.OrderLen = 0 self.OrderID = "" self.Coin = 0 + self.RecordID = 0 + self.OrderInfoLen = 0 + self.OrderInfo = "" return def GetLength(self): @@ -16226,6 +17110,9 @@ length += 1 length += len(self.OrderID) length += 4 + length += 2 + length += 1 + length += len(self.OrderInfo) return length @@ -16235,6 +17122,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 +17132,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 @@ -16357,6 +17253,8 @@ ExAttr19 = 0 #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 HPEx = 0 #(DWORD HPEx)//当前血量 超过E的记录 + Face = 0 #(DWORD Face)//基本脸型 + RoleType = 0 #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分) data = None def __init__(self): @@ -16463,6 +17361,8 @@ self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -16565,6 +17465,8 @@ self.ExAttr19 = 0 self.ExAttr20 = 0 self.HPEx = 0 + self.Face = 0 + self.RoleType = 0 return def GetLength(self): @@ -16657,6 +17559,8 @@ length += 4 length += 4 length += 15 + length += 4 + length += 4 length += 4 length += 4 length += 4 @@ -16766,6 +17670,8 @@ data = CommFunc.WriteDWORD(data, self.ExAttr19) data = CommFunc.WriteDWORD(data, self.ExAttr20) data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.RoleType) return data def OutputString(self): @@ -16865,7 +17771,9 @@ ExAttr18:%d, ExAttr19:%d, ExAttr20:%d, - HPEx:%d + HPEx:%d, + Face:%d, + RoleType:%d '''\ %( self.Head.OutputString(), @@ -16963,7 +17871,9 @@ self.ExAttr18, self.ExAttr19, self.ExAttr20, - self.HPEx + self.HPEx, + self.Face, + self.RoleType ) return DumpString @@ -18055,9 +18965,8 @@ ("SubCmd", c_ubyte), ("IsReset", c_ubyte), #是否是重置的 ("Score", c_int), #当前积分 - ("BattleCountToday", c_ubyte), #今日已挑战次数 ("MatchRefreshCount", c_ubyte), #当前已刷新匹配列表次数,每次挑战后会重置 - ("ItemAddBattleCountToday", c_ubyte), #今日已使用物品增加的挑战次数 + ("BattleCount", c_ubyte), #当前可挑战次数 ] def __init__(self): @@ -18076,9 +18985,8 @@ self.SubCmd = 0xC3 self.IsReset = 0 self.Score = 0 - self.BattleCountToday = 0 self.MatchRefreshCount = 0 - self.ItemAddBattleCountToday = 0 + self.BattleCount = 0 return def GetLength(self): @@ -18093,18 +19001,16 @@ SubCmd:%s, IsReset:%d, Score:%d, - BattleCountToday:%d, MatchRefreshCount:%d, - ItemAddBattleCountToday:%d + BattleCount:%d '''\ %( self.Cmd, self.SubCmd, self.IsReset, self.Score, - self.BattleCountToday, self.MatchRefreshCount, - self.ItemAddBattleCountToday + self.BattleCount ) return DumpString @@ -21753,6 +22659,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): @@ -22904,8 +23918,9 @@ RecoverCnt = 0 #(WORD RecoverCnt)//找回次数 ItemAddCnt = 0 #(WORD ItemAddCnt)//物品增加次数 PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID - PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表 + PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表,一般仅线路有星级设定的才有 EnterCntTotal = 0 #(DWORD EnterCntTotal)//累计进入次数 + PassLineID = 0 #(DWORD PassLineID)//已过关到的lineID data = None def __init__(self): @@ -22923,6 +23938,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 +23949,7 @@ self.PassGradeCnt = 0 self.PassGrade = list() self.EnterCntTotal = 0 + self.PassLineID = 0 return def GetLength(self): @@ -22943,6 +23960,7 @@ length += 2 length += 1 length += 4 * self.PassGradeCnt + length += 4 length += 4 return length @@ -22957,6 +23975,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 +23986,8 @@ ItemAddCnt:%d, PassGradeCnt:%d, PassGrade:%s, - EnterCntTotal:%d + EnterCntTotal:%d, + PassLineID:%d '''\ %( self.FBID, @@ -22976,7 +23996,8 @@ self.ItemAddCnt, self.PassGradeCnt, "...", - self.EnterCntTotal + self.EnterCntTotal, + self.PassLineID ) return DumpString @@ -24837,6 +25858,8 @@ ("SubCmd", c_ubyte), ("IsPass", c_ubyte), #是否通关副本 ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取 + ("RealmLVUpAwardState", c_int), #渡劫条件领奖状态;按二进制位存储是否已领取,0-等级;1-副本关卡;2-仙树等级;3-砍树次数 + ("RealmLVUpCutTreeCnt", c_int), #渡劫条件已砍树次数 ] def __init__(self): @@ -24855,6 +25878,8 @@ self.SubCmd = 0x11 self.IsPass = 0 self.XXZLAwardState = 0 + self.RealmLVUpAwardState = 0 + self.RealmLVUpCutTreeCnt = 0 return def GetLength(self): @@ -24868,19 +25893,131 @@ Cmd:%s, SubCmd:%s, IsPass:%d, - XXZLAwardState:%d + XXZLAwardState:%d, + RealmLVUpAwardState:%d, + RealmLVUpCutTreeCnt:%d '''\ %( self.Cmd, self.SubCmd, self.IsPass, - self.XXZLAwardState + self.XXZLAwardState, + self.RealmLVUpAwardState, + self.RealmLVUpCutTreeCnt ) return DumpString m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo + + +#------------------------------------------------------ +# 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 #------------------------------------------------------ @@ -25910,6 +27047,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 +27235,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 +27434,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("GetState", c_ubyte), #是否已领取 + ("MoneyDonateCount", c_ubyte), #今日货币捐献次数 ] def __init__(self): @@ -25987,6 +27452,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x06 self.GetState = 0 + self.MoneyDonateCount = 0 return def GetLength(self): @@ -25999,12 +27465,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 +27587,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 +30169,7 @@ class tagRefreshType(Structure): _pack_ = 1 _fields_ = [ - ("RefreshType", c_ubyte), + ("RefreshType", c_ushort), ("Value", c_int), ("ValueEx", c_int), ] @@ -29652,6 +31299,685 @@ m_NAtagMCVirtualItemDrop=tagMCVirtualItemDrop() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVirtualItemDrop.Head.Cmd,m_NAtagMCVirtualItemDrop.Head.SubCmd))] = m_NAtagMCVirtualItemDrop + + +#------------------------------------------------------ +# AA 67 Boss历练活动信息 #tagMCActBossTrialInfo + +class tagMCActBossTrialItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + return + + def GetLength(self): + return sizeof(tagMCActBossTrialItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 67 Boss历练活动信息 //tagMCActBossTrialInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActBossTrialBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.Rank, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialSubmitInfo(Structure): + RecordIndex = 0 #(BYTE RecordIndex)// 记录索引 + NeedCount = 0 #(WORD NeedCount)// 所需提交个数 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.RecordIndex = 0 + self.NeedCount = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordIndex) + data = CommFunc.WriteWORD(data, self.NeedCount) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + RecordIndex:%d, + NeedCount:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.RecordIndex, + self.NeedCount, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + SubmitCount = 0 #(BYTE SubmitCount) + SubmitInfoList = list() #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表 + BillardCount = 0 #(BYTE BillardCount) + BillboardInfoList = list() #(vector<tagMCActBossTrialBillard> BillboardInfoList)// 榜单信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SubmitCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SubmitCount): + temSubmitInfoList = tagMCActBossTrialSubmitInfo() + _pos = temSubmitInfoList.ReadData(_lpData, _pos) + self.SubmitInfoList.append(temSubmitInfoList) + self.BillardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillardCount): + temBillboardInfoList = tagMCActBossTrialBillard() + _pos = temBillboardInfoList.ReadData(_lpData, _pos) + self.BillboardInfoList.append(temBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.SubmitCount = 0 + self.SubmitInfoList = list() + self.BillardCount = 0 + self.BillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 1 + length += 2 + length += 1 + for i in range(self.SubmitCount): + length += self.SubmitInfoList[i].GetLength() + length += 1 + for i in range(self.BillardCount): + length += self.BillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.SubmitCount) + for i in range(self.SubmitCount): + data = CommFunc.WriteString(data, self.SubmitInfoList[i].GetLength(), self.SubmitInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BillardCount) + for i in range(self.BillardCount): + data = CommFunc.WriteString(data, self.BillboardInfoList[i].GetLength(), self.BillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + SubmitCount:%d, + SubmitInfoList:%s, + BillardCount:%d, + BillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.SubmitCount, + "...", + self.BillardCount, + "..." + ) + return DumpString + + +m_NAtagMCActBossTrialInfo=tagMCActBossTrialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialInfo.Head.Cmd,m_NAtagMCActBossTrialInfo.Head.SubCmd))] = m_NAtagMCActBossTrialInfo + + +#------------------------------------------------------ +# AA 68 Boss历练活动玩家信息 #tagMCActBossTrialPlayerInfo + +class tagMCActBossTrialPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("SubmitCount", c_ushort), # 已提交凭证个数 + ("SubmitCountAward", c_int), # 提交凭证奖励领奖状态 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x68 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x68 + self.ActNum = 0 + self.SubmitCount = 0 + self.SubmitCountAward = 0 + return + + def GetLength(self): + return sizeof(tagMCActBossTrialPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 68 Boss历练活动玩家信息 //tagMCActBossTrialPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d, + SubmitCountAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount, + self.SubmitCountAward + ) + return DumpString + + +m_NAtagMCActBossTrialPlayerInfo=tagMCActBossTrialPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialPlayerInfo.Cmd,m_NAtagMCActBossTrialPlayerInfo.SubCmd))] = m_NAtagMCActBossTrialPlayerInfo + + +#------------------------------------------------------ +# AA 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 #------------------------------------------------------ @@ -31087,7 +33413,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 +33424,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 +33440,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 +33449,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 +34180,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 +35477,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 +35491,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 +35502,7 @@ def Clear(self): self.AwardIndex = 0 + self.AwardCountMax = 0 self.SingleRechargeValue = 0 self.AwardItemCount = 0 self.AwardItem = list() @@ -32915,6 +35511,7 @@ def GetLength(self): length = 0 length += 1 + length += 2 length += 4 length += 1 for i in range(self.AwardItemCount): @@ -32925,6 +35522,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 +35532,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 +35658,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 +35676,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 #------------------------------------------------------ @@ -35650,6 +38723,66 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # AA 24 每日免费直购礼包信息 #tagMCDayFreeGoldGiftState class tagMCDayFreeGoldGiftState(Structure): @@ -36231,7 +39364,7 @@ _pack_ = 1 _fields_ = [ ("AwardIndex", c_ubyte), #游历奖励索引 - ("GetAwardCount", c_ubyte), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值 + ("GetAwardCount", c_int), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 1) * 单次所需游历值 ] def __init__(self): @@ -41525,6 +44658,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): @@ -41700,6 +44955,121 @@ m_NAtagMCClothesCoatSkinState=tagMCClothesCoatSkinState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCClothesCoatSkinState.Head.Cmd,m_NAtagMCClothesCoatSkinState.Head.SubCmd))] = m_NAtagMCClothesCoatSkinState + + +#------------------------------------------------------ +# B1 22 砍树结果 #tagMCCutTreeResult + +class tagMCCutTreeExItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), # 额外奖励物品ID + ("ItemCount", c_ushort), # 额外奖励物品ID对应个数 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCCutTreeExItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 22 砍树结果 //tagMCCutTreeResult: + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCCutTreeResult(Structure): + Head = tagHead() + EquipCount = 0 #(BYTE EquipCount)// 获得装备数量,默认展示在砍树背包中的装备即可,收到该封包前会先收到0704物品刷新 + ExItemCount = 0 #(BYTE ExItemCount)// 额外奖励物品数 + ExItemList = list() #(vector<tagMCCutTreeExItem> ExItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.EquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ExItemCount): + temExItemList = tagMCCutTreeExItem() + _pos = temExItemList.ReadData(_lpData, _pos) + self.ExItemList.append(temExItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x22 + self.EquipCount = 0 + self.ExItemCount = 0 + self.ExItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.ExItemCount): + length += self.ExItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.EquipCount) + data = CommFunc.WriteBYTE(data, self.ExItemCount) + for i in range(self.ExItemCount): + data = CommFunc.WriteString(data, self.ExItemList[i].GetLength(), self.ExItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + EquipCount:%d, + ExItemCount:%d, + ExItemList:%s + '''\ + %( + self.Head.OutputString(), + self.EquipCount, + self.ExItemCount, + "..." + ) + return DumpString + + +m_NAtagMCCutTreeResult=tagMCCutTreeResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCutTreeResult.Head.Cmd,m_NAtagMCCutTreeResult.Head.SubCmd))] = m_NAtagMCCutTreeResult #------------------------------------------------------ @@ -42343,6 +45713,308 @@ m_NAtagMCYinjiStartTime=tagMCYinjiStartTime() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime + + +#------------------------------------------------------ +# B1 10 当前任务信息 #tagMCTaskInfo + +class tagMCTask(Structure): + _pack_ = 1 + _fields_ = [ + ("TaskGroup", c_ubyte), # 任务组,0-主线 + ("TaskID", c_int), # 当前任务ID,可能为0,表示该分组暂时没有任务 + ("CurValue", c_int), # 当前进度值 + ("State", c_ubyte), # 任务状态 1-进行中 2-可领取 + ] + + 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.TaskGroup = 0 + self.TaskID = 0 + self.CurValue = 0 + self.State = 0 + return + + def GetLength(self): + return sizeof(tagMCTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 10 当前任务信息 //tagMCTaskInfo: + TaskGroup:%d, + TaskID:%d, + CurValue:%d, + State:%d + '''\ + %( + self.TaskGroup, + self.TaskID, + self.CurValue, + self.State + ) + return DumpString + + +class tagMCTaskInfo(Structure): + Head = tagHead() + TaskCount = 0 #(BYTE TaskCount) + TaskList = list() #(vector<tagMCTask> TaskList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TaskCount): + temTaskList = tagMCTask() + _pos = temTaskList.ReadData(_lpData, _pos) + self.TaskList.append(temTaskList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x10 + self.TaskCount = 0 + self.TaskList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + 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.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, + TaskCount:%d, + TaskList:%s + '''\ + %( + self.Head.OutputString(), + self.TaskCount, + "..." + ) + return DumpString + + +m_NAtagMCTaskInfo=tagMCTaskInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Head.Cmd,m_NAtagMCTaskInfo.Head.SubCmd))] = m_NAtagMCTaskInfo + + +#------------------------------------------------------ +# B1 21 仙树信息 #tagMCTreeInfo + +class tagMCTreeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TreeLV", c_ubyte), # 当前仙树等级 + ("LVUPState", c_ubyte), # 0-非升级中;1-升级中 + ("LVUPRemainTime", c_int), # 升级剩余时间,秒;当升级中且倒计时为0时可发送B223执行升级包进行升级 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB1 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB1 + self.SubCmd = 0x21 + self.TreeLV = 0 + self.LVUPState = 0 + self.LVUPRemainTime = 0 + return + + def GetLength(self): + return sizeof(tagMCTreeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 21 仙树信息 //tagMCTreeInfo: + Cmd:%s, + SubCmd:%s, + TreeLV:%d, + LVUPState:%d, + LVUPRemainTime:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TreeLV, + self.LVUPState, + self.LVUPRemainTime + ) + return DumpString + + +m_NAtagMCTreeInfo=tagMCTreeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTreeInfo.Cmd,m_NAtagMCTreeInfo.SubCmd))] = m_NAtagMCTreeInfo + + +#------------------------------------------------------ +# B1 20 战令信息 #tagMCZhanlingInfo + +class tagMCZhanling(Structure): + _pack_ = 1 + _fields_ = [ + ("NeedValue", c_int), # 奖励所需值 + ("FreeRewardState", c_ubyte), # 免费奖励是否已领取 + ("ZLRewardState", c_ubyte), # 战令奖励是否已领取 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.NeedValue = 0 + self.FreeRewardState = 0 + self.ZLRewardState = 0 + return + + def GetLength(self): + return sizeof(tagMCZhanling) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo: + NeedValue:%d, + FreeRewardState:%d, + ZLRewardState:%d + '''\ + %( + self.NeedValue, + self.FreeRewardState, + self.ZLRewardState + ) + return DumpString + + +class tagMCZhanlingInfo(Structure): + Head = tagHead() + ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型 + IsActivite = 0 #(BYTE IsActivite)// 是否已激活 + RewardCount = 0 #(WORD RewardCount) + RewardList = list() #(vector<tagMCZhanling> RewardList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.RewardCount): + temRewardList = tagMCZhanling() + _pos = temRewardList.ReadData(_lpData, _pos) + self.RewardList.append(temRewardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x20 + self.ZhanlingType = 0 + self.IsActivite = 0 + self.RewardCount = 0 + self.RewardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 2 + for i in range(self.RewardCount): + length += self.RewardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZhanlingType) + data = CommFunc.WriteBYTE(data, self.IsActivite) + data = CommFunc.WriteWORD(data, self.RewardCount) + for i in range(self.RewardCount): + data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZhanlingType:%d, + IsActivite:%d, + RewardCount:%d, + RewardList:%s + '''\ + %( + self.Head.OutputString(), + self.ZhanlingType, + self.IsActivite, + self.RewardCount, + "..." + ) + return DumpString + + +m_NAtagMCZhanlingInfo=tagMCZhanlingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhanlingInfo.Head.Cmd,m_NAtagMCZhanlingInfo.Head.SubCmd))] = m_NAtagMCZhanlingInfo #------------------------------------------------------ @@ -43604,6 +47276,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 +47623,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 +49316,311 @@ #------------------------------------------------------ +# B4 21 回合战斗对象开始行动 #tagMCTurnFightObjAction + +class tagMCTurnFightObjAction(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TurnNum", c_ubyte), # 当前轮次 + ("ObjID", c_int), + ("ObjType", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB4 + self.SubCmd = 0x21 + self.TurnNum = 0 + self.ObjID = 0 + self.ObjType = 0 + return + + def GetLength(self): + return sizeof(tagMCTurnFightObjAction) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 21 回合战斗对象开始行动 //tagMCTurnFightObjAction: + Cmd:%s, + SubCmd:%s, + TurnNum:%d, + ObjID:%d, + ObjType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TurnNum, + self.ObjID, + self.ObjType + ) + return DumpString + + +m_NAtagMCTurnFightObjAction=tagMCTurnFightObjAction() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightObjAction.Cmd,m_NAtagMCTurnFightObjAction.SubCmd))] = m_NAtagMCTurnFightObjAction + + +#------------------------------------------------------ +# B4 22 回合战斗角色死亡 #tagMCTurnFightObjDead + +class tagMCTurnFightObjDead(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ObjID", c_int), + ("ObjType", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + self.SubCmd = 0x22 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB4 + self.SubCmd = 0x22 + self.ObjID = 0 + self.ObjType = 0 + return + + def GetLength(self): + return sizeof(tagMCTurnFightObjDead) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 22 回合战斗角色死亡 //tagMCTurnFightObjDead: + Cmd:%s, + SubCmd:%s, + ObjID:%d, + ObjType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ObjID, + self.ObjType + ) + return DumpString + + +m_NAtagMCTurnFightObjDead=tagMCTurnFightObjDead() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightObjDead.Cmd,m_NAtagMCTurnFightObjDead.SubCmd))] = m_NAtagMCTurnFightObjDead + + +#------------------------------------------------------ +# B4 23 回合战斗角色复活 #tagMCTurnFightObjReborn + +class tagMCTurnFightObjReborn(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ObjID", c_int), + ("ObjType", c_ubyte), + ("HP", c_int), # 复活后血量,求余亿部分 + ("HPEx", c_int), # 复活后血量,整除亿部分 + ("RebornType", c_ubyte), # 复活方式:1-灵宠技能复活;2-待扩展 + ("RebornValue1", c_int), # 复活方式对应值1,由复活方式决定其值意义 + ("RebornValue2", c_int), # 复活方式对应值2 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB4 + self.SubCmd = 0x23 + self.ObjID = 0 + self.ObjType = 0 + self.HP = 0 + self.HPEx = 0 + self.RebornType = 0 + self.RebornValue1 = 0 + self.RebornValue2 = 0 + return + + def GetLength(self): + return sizeof(tagMCTurnFightObjReborn) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 23 回合战斗角色复活 //tagMCTurnFightObjReborn: + Cmd:%s, + SubCmd:%s, + ObjID:%d, + ObjType:%d, + HP:%d, + HPEx:%d, + RebornType:%d, + RebornValue1:%d, + RebornValue2:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ObjID, + self.ObjType, + self.HP, + self.HPEx, + self.RebornType, + self.RebornValue1, + self.RebornValue2 + ) + return DumpString + + +m_NAtagMCTurnFightObjReborn=tagMCTurnFightObjReborn() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightObjReborn.Cmd,m_NAtagMCTurnFightObjReborn.SubCmd))] = m_NAtagMCTurnFightObjReborn + + +#------------------------------------------------------ +# 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