From 41ca7d7328e8790697390e111c0426224cf077d1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 24 十月 2024 15:24:13 +0800 Subject: [PATCH] 10162 后台优化(开放入口增加检查开服天及版本号;非手动开新服默认为推荐服,其他服设置为不推荐;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 5049 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 4,882 insertions(+), 167 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index bde1c54..d511bef 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -1180,6 +1180,7 @@ Job = 0 #(BYTE Job)// 玩家职业 RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -1198,6 +1199,7 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -1212,6 +1214,7 @@ self.Job = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -1223,6 +1226,7 @@ length += 2 length += 1 length += 2 + length += 4 length += 4 return length @@ -1237,6 +1241,7 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -1248,7 +1253,8 @@ LV:%d, Job:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -1258,7 +1264,8 @@ self.LV, self.Job, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -1740,6 +1747,8 @@ NameLen = 0 #(BYTE NameLen) Name = "" #(String Name)//名字 PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 data = None @@ -1752,6 +1761,8 @@ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos @@ -1759,6 +1770,8 @@ self.NameLen = 0 self.Name = "" self.PlayeJob = 0 + self.Face = 0 + self.FacePic = 0 self.MoneyNum = 0 return @@ -1768,6 +1781,8 @@ length += len(self.Name) length += 1 length += 4 + length += 4 + length += 4 return length @@ -1776,6 +1791,8 @@ data = CommFunc.WriteBYTE(data, self.NameLen) data = CommFunc.WriteString(data, self.NameLen, self.Name) data = CommFunc.WriteBYTE(data, self.PlayeJob) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteDWORD(data, self.MoneyNum) return data @@ -1784,12 +1801,16 @@ NameLen:%d, Name:%s, PlayeJob:%d, + Face:%d, + FacePic:%d, MoneyNum:%d '''\ %( self.NameLen, self.Name, self.PlayeJob, + self.Face, + self.FacePic, self.MoneyNum ) return DumpString @@ -1878,6 +1899,8 @@ Name = "" #(String Name)//玩家名字 Time = 0 #(DWORD Time)//时间 PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 MoneyType = 0 #(BYTE MoneyType)//金钱类型 MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 GetWay = 0 #(BYTE GetWay)//获得途径 @@ -1900,6 +1923,8 @@ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -1917,6 +1942,8 @@ self.Name = "" self.Time = 0 self.PlayeJob = 0 + self.Face = 0 + self.FacePic = 0 self.MoneyType = 0 self.MoneyNum = 0 self.GetWay = 0 @@ -1935,6 +1962,8 @@ length += len(self.Name) length += 4 length += 1 + length += 4 + length += 4 length += 1 length += 4 length += 1 @@ -1954,6 +1983,8 @@ data = CommFunc.WriteString(data, self.NameLen, self.Name) data = CommFunc.WriteDWORD(data, self.Time) data = CommFunc.WriteBYTE(data, self.PlayeJob) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteBYTE(data, self.MoneyType) data = CommFunc.WriteDWORD(data, self.MoneyNum) data = CommFunc.WriteBYTE(data, self.GetWay) @@ -1972,6 +2003,8 @@ Name:%s, Time:%d, PlayeJob:%d, + Face:%d, + FacePic:%d, MoneyType:%d, MoneyNum:%d, GetWay:%d, @@ -1988,6 +2021,8 @@ self.Name, self.Time, self.PlayeJob, + self.Face, + self.FacePic, self.MoneyType, self.MoneyNum, self.GetWay, @@ -2416,6 +2451,7 @@ WarRank = 0 #(BYTE WarRank)//联赛排名 TotalFightPower = 0 #(DWORD TotalFightPower)//总战力,不足1个亿的部分 TotalFightPowerEx = 0 #(DWORD TotalFightPowerEx)//总战力点,1点=1亿 + EmblemID = 0 #(BYTE EmblemID)//徽章ID data = None def __init__(self): @@ -2438,6 +2474,7 @@ self.WarRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.TotalFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -2455,6 +2492,7 @@ self.WarRank = 0 self.TotalFightPower = 0 self.TotalFightPowerEx = 0 + self.EmblemID = 0 return def GetLength(self): @@ -2473,6 +2511,7 @@ length += 1 length += 4 length += 4 + length += 1 return length @@ -2492,6 +2531,7 @@ data = CommFunc.WriteBYTE(data, self.WarRank) data = CommFunc.WriteDWORD(data, self.TotalFightPower) data = CommFunc.WriteDWORD(data, self.TotalFightPowerEx) + data = CommFunc.WriteBYTE(data, self.EmblemID) return data def OutputString(self): @@ -2509,7 +2549,8 @@ JoinAccept:%d, WarRank:%d, TotalFightPower:%d, - TotalFightPowerEx:%d + TotalFightPowerEx:%d, + EmblemID:%d '''\ %( self.FamilyIndex, @@ -2525,7 +2566,8 @@ self.JoinAccept, self.WarRank, self.TotalFightPower, - self.TotalFightPowerEx + self.TotalFightPowerEx, + self.EmblemID ) return DumpString @@ -5269,6 +5311,7 @@ Job = 0 #(BYTE Job) RealmLV = 0 #(WORD RealmLV)//境界 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -5283,6 +5326,7 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -5292,6 +5336,7 @@ self.Job = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -5301,6 +5346,7 @@ length += 4 length += 1 length += 2 + length += 4 length += 4 return length @@ -5313,6 +5359,7 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -5322,7 +5369,8 @@ LV:%d, Job:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.ID, @@ -5330,7 +5378,8 @@ self.LV, self.Job, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -5411,6 +5460,7 @@ LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -5425,6 +5475,7 @@ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -5434,6 +5485,7 @@ self.LV = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -5443,6 +5495,7 @@ length += 1 length += 2 length += 2 + length += 4 length += 4 return length @@ -5455,6 +5508,7 @@ data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -5464,7 +5518,8 @@ Job:%d, LV:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -5472,7 +5527,8 @@ self.Job, self.LV, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -5775,6 +5831,356 @@ m_NAtagUpdatePlayerNameResult=tagUpdatePlayerNameResult() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUpdatePlayerNameResult.Cmd,m_NAtagUpdatePlayerNameResult.SubCmd))] = m_NAtagUpdatePlayerNameResult + + +#------------------------------------------------------ +# A9 27 仙宫新晋玩家信息 #tagGCXiangongNewPlayerInfo + +class tagGCXiangongNewPlayer(Structure): + AddTime = 0 #(DWORD AddTime)// 新晋时间戳 + ServerID = 0 #(DWORD ServerID) + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界 + EquipShowSwitch = 0 #(DWORD EquipShowSwitch) + EquipShowIDCount = 0 #(BYTE EquipShowIDCount) + EquipShowID = list() #(vector<DWORD> EquipShowID) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_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.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.EquipShowIDCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.EquipShowID.append(value) + return _pos + + def Clear(self): + self.AddTime = 0 + self.ServerID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.EquipShowSwitch = 0 + self.EquipShowIDCount = 0 + self.EquipShowID = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + length += 4 + length += 1 + length += 4 * self.EquipShowIDCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.AddTime) + data = CommFunc.WriteDWORD(data, self.ServerID) + 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.EquipShowSwitch) + data = CommFunc.WriteBYTE(data, self.EquipShowIDCount) + for i in range(self.EquipShowIDCount): + data = CommFunc.WriteDWORD(data, self.EquipShowID[i]) + return data + + def OutputString(self): + DumpString = ''' + AddTime:%d, + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + EquipShowSwitch:%d, + EquipShowIDCount:%d, + EquipShowID:%s + '''\ + %( + self.AddTime, + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.EquipShowSwitch, + self.EquipShowIDCount, + "..." + ) + return DumpString + + +class tagGCXiangongNewPlayerInfo(Structure): + Head = tagHead() + XiangongID = 0 #(WORD XiangongID)// 仙宫ID + NewPlayerCount = 0 #(BYTE NewPlayerCount) + NewPlayerList = list() #(vector<tagGCXiangongNewPlayer> NewPlayerList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x27 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.NewPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.NewPlayerCount): + temNewPlayerList = tagGCXiangongNewPlayer() + _pos = temNewPlayerList.ReadData(_lpData, _pos) + self.NewPlayerList.append(temNewPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x27 + self.XiangongID = 0 + self.NewPlayerCount = 0 + self.NewPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + for i in range(self.NewPlayerCount): + length += self.NewPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.XiangongID) + data = CommFunc.WriteBYTE(data, self.NewPlayerCount) + for i in range(self.NewPlayerCount): + data = CommFunc.WriteString(data, self.NewPlayerList[i].GetLength(), self.NewPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + XiangongID:%d, + NewPlayerCount:%d, + NewPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.XiangongID, + self.NewPlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCXiangongNewPlayerInfo=tagGCXiangongNewPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongNewPlayerInfo.Head.Cmd,m_NAtagGCXiangongNewPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongNewPlayerInfo + + +#------------------------------------------------------ +# A9 28 仙宫仙名录玩家信息 #tagGCXiangongRecPlayerInfo + +class tagGCXiangongRecPlayer(Structure): + AddTime = 0 #(DWORD AddTime)// 新晋时间戳 + ServerID = 0 #(DWORD ServerID) + PlayerID = 0 #(DWORD PlayerID) + 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() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_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.AddTime = 0 + self.ServerID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.AddTime) + data = CommFunc.WriteDWORD(data, self.ServerID) + 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 = ''' + AddTime:%d, + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d + '''\ + %( + self.AddTime, + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV + ) + return DumpString + + +class tagGCXiangongRecPlayerInfo(Structure): + Head = tagHead() + XiangongID = 0 #(WORD XiangongID)// 仙宫ID + RecPlayerCount = 0 #(BYTE RecPlayerCount) + RecPlayerList = list() #(vector<tagGCXiangongRecPlayer> RecPlayerList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x28 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RecPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecPlayerCount): + temRecPlayerList = tagGCXiangongRecPlayer() + _pos = temRecPlayerList.ReadData(_lpData, _pos) + self.RecPlayerList.append(temRecPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x28 + self.XiangongID = 0 + self.RecPlayerCount = 0 + self.RecPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + for i in range(self.RecPlayerCount): + length += self.RecPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.XiangongID) + data = CommFunc.WriteBYTE(data, self.RecPlayerCount) + for i in range(self.RecPlayerCount): + data = CommFunc.WriteString(data, self.RecPlayerList[i].GetLength(), self.RecPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + XiangongID:%d, + RecPlayerCount:%d, + RecPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.XiangongID, + self.RecPlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCXiangongRecPlayerInfo=tagGCXiangongRecPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongRecPlayerInfo.Head.Cmd,m_NAtagGCXiangongRecPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongRecPlayerInfo #------------------------------------------------------ @@ -7323,6 +7729,8 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(BYTE RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 MapID = 0 #(DWORD MapID) LineID = 0 #(DWORD LineID) NPCID = 0 #(DWORD NPCID) @@ -7342,6 +7750,8 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -7356,6 +7766,8 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.MapID = 0 self.LineID = 0 self.NPCID = 0 @@ -7374,6 +7786,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 2 length += len(self.ExData) @@ -7387,6 +7801,8 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteBYTE(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteDWORD(data, self.MapID) data = CommFunc.WriteDWORD(data, self.LineID) data = CommFunc.WriteDWORD(data, self.NPCID) @@ -7402,6 +7818,8 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, + FacePic:%d, MapID:%d, LineID:%d, NPCID:%d, @@ -7415,6 +7833,8 @@ self.Job, self.LV, self.RealmLV, + self.Face, + self.FacePic, self.MapID, self.LineID, self.NPCID, @@ -7873,6 +8293,8 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV) RealmLV = 0 #(BYTE RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 MapID = 0 #(DWORD MapID) LineID = 0 #(DWORD LineID) NPCID = 0 #(DWORD NPCID) @@ -7897,6 +8319,8 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -7917,6 +8341,8 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.MapID = 0 self.LineID = 0 self.NPCID = 0 @@ -7938,6 +8364,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 2 length += len(self.ExData) length += 19 @@ -7954,6 +8382,8 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteBYTE(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteDWORD(data, self.MapID) data = CommFunc.WriteDWORD(data, self.LineID) data = CommFunc.WriteDWORD(data, self.NPCID) @@ -7972,6 +8402,8 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, + FacePic:%d, MapID:%d, LineID:%d, NPCID:%d, @@ -7988,6 +8420,8 @@ self.Job, self.LV, self.RealmLV, + self.Face, + self.FacePic, self.MapID, self.LineID, self.NPCID, @@ -8572,6 +9006,8 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV) RealmLV = 0 #(BYTE RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -8585,6 +9021,8 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -8593,6 +9031,8 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -8602,6 +9042,8 @@ length += 1 length += 2 length += 1 + length += 4 + length += 4 return length @@ -8612,6 +9054,8 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteBYTE(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -8620,14 +9064,18 @@ PlayerName:%s, Job:%d, LV:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, self.PlayerName, self.Job, self.LV, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -8957,6 +9405,7 @@ LV = 0 #(WORD LV) RealmLV = 0 #(WORD RealmLV)//境界等级 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -8973,6 +9422,7 @@ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -8985,6 +9435,7 @@ self.LV = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -8994,6 +9445,7 @@ length += 33 length += 2 length += 2 + length += 4 length += 4 return length @@ -9006,6 +9458,7 @@ data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -9015,7 +9468,8 @@ Name:%s, LV:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -9023,7 +9477,8 @@ self.Name, self.LV, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -9771,6 +10226,66 @@ #------------------------------------------------------ +# B3 15 相关玩家在线状态变更同步 #tagGCRelatedPlayerOnlineState + +class tagGCRelatedPlayerOnlineState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 相关玩家ID + ("OfflineValue", c_int), # 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线; + ("IsCross", c_ubyte), # 是否跨服同步的,如果是跨服则离线时间计算时要取跨服服务器时间 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x15 + 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 = 0x15 + self.PlayerID = 0 + self.OfflineValue = 0 + self.IsCross = 0 + return + + def GetLength(self): + return sizeof(tagGCRelatedPlayerOnlineState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 15 相关玩家在线状态变更同步 //tagGCRelatedPlayerOnlineState: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + OfflineValue:%d, + IsCross:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.OfflineValue, + self.IsCross + ) + return DumpString + + +m_NAtagGCRelatedPlayerOnlineState=tagGCRelatedPlayerOnlineState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRelatedPlayerOnlineState.Cmd,m_NAtagGCRelatedPlayerOnlineState.SubCmd))] = m_NAtagGCRelatedPlayerOnlineState + + +#------------------------------------------------------ # B3 20 送礼物成功通知 #tagGCSendGiftsOKList class tagGCSendGiftsOK(Structure): @@ -10094,6 +10609,7 @@ IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍 ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -10114,6 +10630,7 @@ self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -10130,6 +10647,7 @@ self.IsInTeam = 0 self.ServerGroupID = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -10142,6 +10660,7 @@ length += 2 length += 1 length += 1 + length += 4 length += 4 length += 4 @@ -10159,6 +10678,7 @@ data = CommFunc.WriteBYTE(data, self.IsInTeam) data = CommFunc.WriteDWORD(data, self.ServerGroupID) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -10172,7 +10692,8 @@ OnlineType:%d, IsInTeam:%d, ServerGroupID:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -10184,7 +10705,8 @@ self.OnlineType, self.IsInTeam, self.ServerGroupID, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -10260,6 +10782,7 @@ RealmLV = 0 #(WORD RealmLV)//境界 OnlineType = 0 #(BYTE OnlineType)//0不在线 1在线 2脱机在线 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -10275,6 +10798,7 @@ self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -10285,6 +10809,7 @@ self.RealmLV = 0 self.OnlineType = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -10295,6 +10820,7 @@ length += 2 length += 2 length += 1 + length += 4 length += 4 return length @@ -10308,6 +10834,7 @@ data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteBYTE(data, self.OnlineType) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -10318,7 +10845,8 @@ LV:%d, RealmLV:%d, OnlineType:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -10327,7 +10855,8 @@ self.LV, self.RealmLV, self.OnlineType, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -12634,6 +13163,861 @@ #------------------------------------------------------ +# B9 23 功能队伍解散 #tagGCFuncTeamDissolve + +class tagGCFuncTeamDissolve(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TeamID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + 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 = 0xB9 + self.SubCmd = 0x23 + self.TeamID = 0 + return + + def GetLength(self): + return sizeof(tagGCFuncTeamDissolve) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 23 功能队伍解散 //tagGCFuncTeamDissolve: + Cmd:%s, + SubCmd:%s, + TeamID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TeamID + ) + return DumpString + + +m_NAtagGCFuncTeamDissolve=tagGCFuncTeamDissolve() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamDissolve.Cmd,m_NAtagGCFuncTeamDissolve.SubCmd))] = m_NAtagGCFuncTeamDissolve + + +#------------------------------------------------------ +# B9 22 功能队伍列表 #tagGCFuncTeamList + +class tagGCFuncTeamMem(Structure): + ServerID = 0 #(DWORD ServerID) + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界 + FightPower = 0 #(DWORD FightPower)// 战力,求余亿 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 + Value1 = 0 #(DWORD Value1)//值1 + Value2 = 0 #(DWORD Value2)//值2 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ServerID,_pos = CommFunc.ReadDWORD(_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.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ServerID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.Value1 = 0 + self.Value2 = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ServerID) + 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.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + return data + + def OutputString(self): + DumpString = ''' + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Value1:%d, + Value2:%d + '''\ + %( + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Value1, + self.Value2 + ) + return DumpString + + +class tagGCFuncTeam(Structure): + TeamID = 0 #(DWORD TeamID) + CreateTime = 0 #(DWORD CreateTime)//创建队伍时间戳 + FuncMapEx = 0 #(DWORD FuncMapEx)//功能地图扩展,如不同的层级 + NameLen = 0 #(BYTE NameLen) + TeamName = "" #(String TeamName)//队伍名称 + CaptainID = 0 #(DWORD CaptainID)//队长ID,队伍ServerID直接取队长的ServerID + MinLV = 0 #(WORD MinLV)//最低等级限制 + MinFightPower = 0 #(DWORD MinFightPower)//最低战力限制,求余亿 + MinFightPowerEx = 0 #(DWORD MinFightPowerEx)//最低战力限制,整除亿 + ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 + NeedCheck = 0 #(BYTE NeedCheck)//是否需要审核 + Value1 = 0 #(DWORD Value1)//值1 + Value2 = 0 #(DWORD Value2)//值2 + MemberCount = 0 #(BYTE MemberCount) + MemberList = list() #(vector<tagGCFuncTeamMem> MemberList)// 成员列表 + ApplyCount = 0 #(WORD ApplyCount) + ApplyIDList = list() #(vector<DWORD> ApplyIDList)// 申请玩家ID列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CreateTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TeamName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.CaptainID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MinFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MinFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCheck,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MemberCount): + temMemberList = tagGCFuncTeamMem() + _pos = temMemberList.ReadData(_lpData, _pos) + self.MemberList.append(temMemberList) + self.ApplyCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.ApplyCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ApplyIDList.append(value) + return _pos + + def Clear(self): + self.TeamID = 0 + self.CreateTime = 0 + self.FuncMapEx = 0 + self.NameLen = 0 + self.TeamName = "" + self.CaptainID = 0 + self.MinLV = 0 + self.MinFightPower = 0 + self.MinFightPowerEx = 0 + self.ServerOnly = 0 + self.NeedCheck = 0 + self.Value1 = 0 + self.Value2 = 0 + self.MemberCount = 0 + self.MemberList = list() + self.ApplyCount = 0 + self.ApplyIDList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.TeamName) + length += 4 + length += 2 + length += 4 + length += 4 + length += 1 + length += 1 + length += 4 + length += 4 + length += 1 + for i in range(self.MemberCount): + length += self.MemberList[i].GetLength() + length += 2 + length += 4 * self.ApplyCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.TeamID) + data = CommFunc.WriteDWORD(data, self.CreateTime) + data = CommFunc.WriteDWORD(data, self.FuncMapEx) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.TeamName) + data = CommFunc.WriteDWORD(data, self.CaptainID) + data = CommFunc.WriteWORD(data, self.MinLV) + data = CommFunc.WriteDWORD(data, self.MinFightPower) + data = CommFunc.WriteDWORD(data, self.MinFightPowerEx) + data = CommFunc.WriteBYTE(data, self.ServerOnly) + data = CommFunc.WriteBYTE(data, self.NeedCheck) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteBYTE(data, self.MemberCount) + for i in range(self.MemberCount): + data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.ApplyCount) + for i in range(self.ApplyCount): + data = CommFunc.WriteDWORD(data, self.ApplyIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + TeamID:%d, + CreateTime:%d, + FuncMapEx:%d, + NameLen:%d, + TeamName:%s, + CaptainID:%d, + MinLV:%d, + MinFightPower:%d, + MinFightPowerEx:%d, + ServerOnly:%d, + NeedCheck:%d, + Value1:%d, + Value2:%d, + MemberCount:%d, + MemberList:%s, + ApplyCount:%d, + ApplyIDList:%s + '''\ + %( + self.TeamID, + self.CreateTime, + self.FuncMapEx, + self.NameLen, + self.TeamName, + self.CaptainID, + self.MinLV, + self.MinFightPower, + self.MinFightPowerEx, + self.ServerOnly, + self.NeedCheck, + self.Value1, + self.Value2, + self.MemberCount, + "...", + self.ApplyCount, + "..." + ) + return DumpString + + +class tagGCFuncTeamList(Structure): + Head = tagHead() + FuncMapID = 0 #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID + FuncMapEx = 0 #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级,0代表所有 + StartIndex = 0 #(DWORD StartIndex)// 查看的起始索引, 默认0 + QueryCnt = 0 #(BYTE QueryCnt)// 查看条数,默认20,最大不超过100 + HaveSpace = 0 #(BYTE HaveSpace)// 是否只查看有空位置的队伍 + IDLimitType = 0 #(BYTE IDLimitType)// ID限制类型:1-同仙盟队长;2-同ServerGroupID队长;3-同ServerID队长 + SearchLen = 0 #(BYTE SearchLen) + SearchMsg = "" #(String SearchMsg)// 指定搜索时有用,可搜索指定队伍ID或模糊搜索队伍名称,搜索时返回最多QueryCnt个数的队伍 + LoopIndex = 0 #(DWORD LoopIndex)// 服务器检索到的索引,列表下拉时下一个查询包的StartIndex从这个LoopIndex开始 + TeamCount = 0 #(BYTE TeamCount)// 如果返回的队伍数小于QueryCnt,代表服务器已经没有满足条件的队伍了,列表再下拉时不再发查询包 + TeamList = list() #(vector<tagGCFuncTeam> TeamList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StartIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.QueryCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HaveSpace,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IDLimitType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SearchLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SearchMsg,_pos = CommFunc.ReadString(_lpData, _pos,self.SearchLen) + self.LoopIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TeamCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TeamCount): + temTeamList = tagGCFuncTeam() + _pos = temTeamList.ReadData(_lpData, _pos) + self.TeamList.append(temTeamList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x22 + self.FuncMapID = 0 + self.FuncMapEx = 0 + self.StartIndex = 0 + self.QueryCnt = 0 + self.HaveSpace = 0 + self.IDLimitType = 0 + self.SearchLen = 0 + self.SearchMsg = "" + self.LoopIndex = 0 + self.TeamCount = 0 + self.TeamList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 4 + length += 1 + length += 1 + length += 1 + length += 1 + length += len(self.SearchMsg) + length += 4 + length += 1 + for i in range(self.TeamCount): + length += self.TeamList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FuncMapID) + data = CommFunc.WriteDWORD(data, self.FuncMapEx) + data = CommFunc.WriteDWORD(data, self.StartIndex) + data = CommFunc.WriteBYTE(data, self.QueryCnt) + data = CommFunc.WriteBYTE(data, self.HaveSpace) + data = CommFunc.WriteBYTE(data, self.IDLimitType) + data = CommFunc.WriteBYTE(data, self.SearchLen) + data = CommFunc.WriteString(data, self.SearchLen, self.SearchMsg) + data = CommFunc.WriteDWORD(data, self.LoopIndex) + data = CommFunc.WriteBYTE(data, self.TeamCount) + for i in range(self.TeamCount): + data = CommFunc.WriteString(data, self.TeamList[i].GetLength(), self.TeamList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FuncMapID:%d, + FuncMapEx:%d, + StartIndex:%d, + QueryCnt:%d, + HaveSpace:%d, + IDLimitType:%d, + SearchLen:%d, + SearchMsg:%s, + LoopIndex:%d, + TeamCount:%d, + TeamList:%s + '''\ + %( + self.Head.OutputString(), + self.FuncMapID, + self.FuncMapEx, + self.StartIndex, + self.QueryCnt, + self.HaveSpace, + self.IDLimitType, + self.SearchLen, + self.SearchMsg, + self.LoopIndex, + self.TeamCount, + "..." + ) + return DumpString + + +m_NAtagGCFuncTeamList=tagGCFuncTeamList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamList.Head.Cmd,m_NAtagGCFuncTeamList.Head.SubCmd))] = m_NAtagGCFuncTeamList + + +#------------------------------------------------------ +# B9 20 功能队伍刷新 #tagGCFuncTeamRefresh + +class tagGCFuncTeamRefreshApply(Structure): + ServerID = 0 #(DWORD ServerID) + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界 + FightPower = 0 #(DWORD FightPower)// 战力,求余亿 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ServerID,_pos = CommFunc.ReadDWORD(_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.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ServerID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ServerID) + 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.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + return data + + def OutputString(self): + DumpString = ''' + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d + '''\ + %( + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.FightPower, + self.FightPowerEx + ) + return DumpString + + +class tagGCFuncTeamRefreshMem(Structure): + ServerID = 0 #(DWORD ServerID) + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界 + FightPower = 0 #(DWORD FightPower)// 战力,求余亿 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 + OfflineValue = 0 #(DWORD OfflineValue)// 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线; + Value1 = 0 #(DWORD Value1)//值1 + Value2 = 0 #(DWORD Value2)//值2 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ServerID,_pos = CommFunc.ReadDWORD(_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.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OfflineValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ServerID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.OfflineValue = 0 + self.Value1 = 0 + self.Value2 = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ServerID) + 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.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.OfflineValue) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + return data + + def OutputString(self): + DumpString = ''' + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + OfflineValue:%d, + Value1:%d, + Value2:%d + '''\ + %( + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.OfflineValue, + self.Value1, + self.Value2 + ) + return DumpString + + +class tagGCFuncTeamRefresh(Structure): + Head = tagHead() + TeamID = 0 #(DWORD TeamID) + CreateTime = 0 #(DWORD CreateTime)//创建队伍时间戳 + FuncMapID = 0 #(DWORD FuncMapID)// 功能地图ID或自定义的活动功能ID + FuncMapEx = 0 #(DWORD FuncMapEx)// 功能地图扩展,如不同的层级 + NameLen = 0 #(BYTE NameLen) + TeamName = "" #(String TeamName)// 队伍名称 + CaptainID = 0 #(DWORD CaptainID)//队长ID,队伍ServerID直接取队长的ServerID + MinLV = 0 #(WORD MinLV)//最低等级限制 + MinFightPower = 0 #(DWORD MinFightPower)//最低战力限制,求余亿 + MinFightPowerEx = 0 #(DWORD MinFightPowerEx)//最低战力限制,整除亿 + ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 + NeedCheck = 0 #(BYTE NeedCheck)//是否需要审核 + Value1 = 0 #(DWORD Value1)//值1 + Value2 = 0 #(DWORD Value2)//值2 + MemberCount = 0 #(BYTE MemberCount) + MemberList = list() #(vector<tagGCFuncTeamRefreshMem> MemberList)// 成员列表 + ApplyCount = 0 #(WORD ApplyCount) + ApplyIDList = list() #(vector<DWORD> ApplyIDList)// 申请玩家ID列表 + ApplyInfoList = list() #(vector<tagGCFuncTeamRefreshApply> ApplyInfoList)// 申请玩家明细列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CreateTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncMapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncMapEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TeamName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.CaptainID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MinLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MinFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MinFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCheck,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MemberCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MemberCount): + temMemberList = tagGCFuncTeamRefreshMem() + _pos = temMemberList.ReadData(_lpData, _pos) + self.MemberList.append(temMemberList) + self.ApplyCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.ApplyCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ApplyIDList.append(value) + for i in range(self.ApplyCount): + temApplyInfoList = tagGCFuncTeamRefreshApply() + _pos = temApplyInfoList.ReadData(_lpData, _pos) + self.ApplyInfoList.append(temApplyInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB9 + self.Head.SubCmd = 0x20 + self.TeamID = 0 + self.CreateTime = 0 + self.FuncMapID = 0 + self.FuncMapEx = 0 + self.NameLen = 0 + self.TeamName = "" + self.CaptainID = 0 + self.MinLV = 0 + self.MinFightPower = 0 + self.MinFightPowerEx = 0 + self.ServerOnly = 0 + self.NeedCheck = 0 + self.Value1 = 0 + self.Value2 = 0 + self.MemberCount = 0 + self.MemberList = list() + self.ApplyCount = 0 + self.ApplyIDList = list() + self.ApplyInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.TeamName) + length += 4 + length += 2 + length += 4 + length += 4 + length += 1 + length += 1 + length += 4 + length += 4 + length += 1 + for i in range(self.MemberCount): + length += self.MemberList[i].GetLength() + length += 2 + length += 4 * self.ApplyCount + for i in range(self.ApplyCount): + length += self.ApplyInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TeamID) + data = CommFunc.WriteDWORD(data, self.CreateTime) + data = CommFunc.WriteDWORD(data, self.FuncMapID) + data = CommFunc.WriteDWORD(data, self.FuncMapEx) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.TeamName) + data = CommFunc.WriteDWORD(data, self.CaptainID) + data = CommFunc.WriteWORD(data, self.MinLV) + data = CommFunc.WriteDWORD(data, self.MinFightPower) + data = CommFunc.WriteDWORD(data, self.MinFightPowerEx) + data = CommFunc.WriteBYTE(data, self.ServerOnly) + data = CommFunc.WriteBYTE(data, self.NeedCheck) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteBYTE(data, self.MemberCount) + for i in range(self.MemberCount): + data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.ApplyCount) + for i in range(self.ApplyCount): + data = CommFunc.WriteDWORD(data, self.ApplyIDList[i]) + for i in range(self.ApplyCount): + data = CommFunc.WriteString(data, self.ApplyInfoList[i].GetLength(), self.ApplyInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TeamID:%d, + CreateTime:%d, + FuncMapID:%d, + FuncMapEx:%d, + NameLen:%d, + TeamName:%s, + CaptainID:%d, + MinLV:%d, + MinFightPower:%d, + MinFightPowerEx:%d, + ServerOnly:%d, + NeedCheck:%d, + Value1:%d, + Value2:%d, + MemberCount:%d, + MemberList:%s, + ApplyCount:%d, + ApplyIDList:%s, + ApplyInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.TeamID, + self.CreateTime, + self.FuncMapID, + self.FuncMapEx, + self.NameLen, + self.TeamName, + self.CaptainID, + self.MinLV, + self.MinFightPower, + self.MinFightPowerEx, + self.ServerOnly, + self.NeedCheck, + self.Value1, + self.Value2, + self.MemberCount, + "...", + self.ApplyCount, + "...", + "..." + ) + return DumpString + + +m_NAtagGCFuncTeamRefresh=tagGCFuncTeamRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFuncTeamRefresh.Head.Cmd,m_NAtagGCFuncTeamRefresh.Head.SubCmd))] = m_NAtagGCFuncTeamRefresh + + +#------------------------------------------------------ # B9 01 收到邀请加入队伍信息 #tagGCInviteJoinTeamInfo class tagGCInviteJoinTeamInfo(Structure): @@ -12945,6 +14329,62 @@ #------------------------------------------------------ +# B9 21 查找玩家功能队伍结果 #tagGCQueryPlayerFuncTeamRet + +class tagGCQueryPlayerFuncTeamRet(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FuncMapID", c_int), # 功能地图ID或自定义的活动功能ID + ("TeamID", c_int), # 玩家所属队伍ID,目前只同步0的情况,如果玩家有队伍统一B920封包同步处理 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + 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 = 0xB9 + self.SubCmd = 0x21 + self.FuncMapID = 0 + self.TeamID = 0 + return + + def GetLength(self): + return sizeof(tagGCQueryPlayerFuncTeamRet) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 21 查找玩家功能队伍结果 //tagGCQueryPlayerFuncTeamRet: + Cmd:%s, + SubCmd:%s, + FuncMapID:%d, + TeamID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FuncMapID, + self.TeamID + ) + return DumpString + + +m_NAtagGCQueryPlayerFuncTeamRet=tagGCQueryPlayerFuncTeamRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryPlayerFuncTeamRet.Cmd,m_NAtagGCQueryPlayerFuncTeamRet.SubCmd))] = m_NAtagGCQueryPlayerFuncTeamRet + + +#------------------------------------------------------ # B9 08 推荐组队的附近玩家信息 #tagGCRecommendNearbyPlayerList class tagGCRecommendNearbyPlayer(Structure): @@ -12955,6 +14395,8 @@ Job = 0 #(BYTE Job)// 玩家职业 JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -12970,6 +14412,8 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -12980,6 +14424,8 @@ self.Job = 0 self.JobLevel = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -12991,6 +14437,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 return length @@ -13003,6 +14451,8 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteBYTE(data, self.JobLevel) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -13013,7 +14463,9 @@ LV:%d, Job:%d, JobLevel:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -13022,7 +14474,9 @@ self.LV, self.Job, self.JobLevel, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -13634,6 +15088,8 @@ Job = 0 #(BYTE Job)// 玩家职业 JobLevel = 0 #(BYTE JobLevel)// 玩家职业阶级 RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 PlayerState = 0 #(BYTE PlayerState)// 0: 离线 1:在线 MapID = 0 #(DWORD MapID)// 地图ID LineID = 0 #(BYTE LineID)// 线路ID @@ -13654,6 +15110,8 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.JobLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayerState,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -13669,6 +15127,8 @@ self.Job = 0 self.JobLevel = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.PlayerState = 0 self.MapID = 0 self.LineID = 0 @@ -13685,6 +15145,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 length += 1 length += 4 length += 1 @@ -13702,6 +15164,8 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteBYTE(data, self.JobLevel) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteBYTE(data, self.PlayerState) data = CommFunc.WriteDWORD(data, self.MapID) data = CommFunc.WriteBYTE(data, self.LineID) @@ -13718,6 +15182,8 @@ Job:%d, JobLevel:%d, RealmLV:%d, + Face:%d, + FacePic:%d, PlayerState:%d, MapID:%d, LineID:%d @@ -13732,6 +15198,8 @@ self.Job, self.JobLevel, self.RealmLV, + self.Face, + self.FacePic, self.PlayerState, self.MapID, self.LineID @@ -14707,6 +16175,8 @@ FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 RealmLV = 0 #(WORD RealmLV) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -14723,6 +16193,8 @@ self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -14734,6 +16206,8 @@ self.FightPower = 0 self.FightPowerEx = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -14746,6 +16220,8 @@ length += 4 length += 4 length += 2 + length += 4 + length += 4 return length @@ -14759,6 +16235,8 @@ data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -14770,7 +16248,9 @@ LV:%d, FightPower:%d, FightPowerEx:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -14780,7 +16260,9 @@ self.LV, self.FightPower, self.FightPowerEx, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -15728,6 +17210,8 @@ FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 RealmLV = 0 #(WORD RealmLV) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -15744,6 +17228,8 @@ self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -15755,6 +17241,8 @@ self.FightPower = 0 self.FightPowerEx = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -15767,6 +17255,8 @@ length += 4 length += 4 length += 2 + length += 4 + length += 4 return length @@ -15780,6 +17270,8 @@ data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -15791,7 +17283,9 @@ LV:%d, FightPower:%d, FightPowerEx:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -15801,7 +17295,9 @@ self.LV, self.FightPower, self.FightPowerEx, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -17782,6 +19278,7 @@ ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 HPEx = 0 #(DWORD HPEx)//当前血量 超过E的记录 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 RoleType = 0 #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分) data = None @@ -17890,6 +19387,7 @@ self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos @@ -17994,6 +19492,7 @@ self.ExAttr20 = 0 self.HPEx = 0 self.Face = 0 + self.FacePic = 0 self.RoleType = 0 return @@ -18087,6 +19586,7 @@ length += 4 length += 4 length += 15 + length += 4 length += 4 length += 4 length += 4 @@ -18199,6 +19699,7 @@ data = CommFunc.WriteDWORD(data, self.ExAttr20) data = CommFunc.WriteDWORD(data, self.HPEx) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteDWORD(data, self.RoleType) return data @@ -18301,6 +19802,7 @@ ExAttr20:%d, HPEx:%d, Face:%d, + FacePic:%d, RoleType:%d '''\ %( @@ -18401,6 +19903,7 @@ self.ExAttr20, self.HPEx, self.Face, + self.FacePic, self.RoleType ) return DumpString @@ -18960,6 +20463,114 @@ m_NAtagMCAttackMode=tagMCAttackMode() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAttackMode.Cmd,m_NAtagMCAttackMode.SubCmd))] = m_NAtagMCAttackMode + + +#------------------------------------------------------ +# A2 06 自动转化为对应物品ID个数刷新 #tagMCAutoItemCountRefresh + +class tagMCAutoItemCount(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", 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.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCAutoItemCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A2 06 自动转化为对应物品ID个数刷新 //tagMCAutoItemCountRefresh: + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCAutoItemCountRefresh(Structure): + Head = tagHead() + Count = 0 #(WORD Count)// 刷新个数 + ItemCountList = list() #(vector<tagMCAutoItemCount> ItemCountList)// 物品信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA2 + self.Head.SubCmd = 0x06 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temItemCountList = tagMCAutoItemCount() + _pos = temItemCountList.ReadData(_lpData, _pos) + self.ItemCountList.append(temItemCountList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA2 + self.Head.SubCmd = 0x06 + self.Count = 0 + self.ItemCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.ItemCountList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ItemCountList[i].GetLength(), self.ItemCountList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ItemCountList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCAutoItemCountRefresh=tagMCAutoItemCountRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAutoItemCountRefresh.Head.Cmd,m_NAtagMCAutoItemCountRefresh.Head.SubCmd))] = m_NAtagMCAutoItemCountRefresh #------------------------------------------------------ @@ -22279,6 +23890,181 @@ m_NAtagMCGatherSoulHoleInfo=tagMCGatherSoulHoleInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGatherSoulHoleInfo.Head.Cmd,m_NAtagMCGatherSoulHoleInfo.Head.SubCmd))] = m_NAtagMCGatherSoulHoleInfo + + +#------------------------------------------------------ +# A3 61 新聚魂孔信息 #tagMCGatherTheSoulHoleInfo + +class tagMCGatherTheSoulHoleInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)// 孔数 + HoleSoulList = list() #(vector<DWORD> HoleSoulList)// 孔聚魂ID列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x61 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.HoleSoulList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x61 + self.Count = 0 + self.HoleSoulList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteDWORD(data, self.HoleSoulList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + HoleSoulList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGatherTheSoulHoleInfo=tagMCGatherTheSoulHoleInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGatherTheSoulHoleInfo.Head.Cmd,m_NAtagMCGatherTheSoulHoleInfo.Head.SubCmd))] = m_NAtagMCGatherTheSoulHoleInfo + + +#------------------------------------------------------ +# A3 60 新聚魂信息 #tagMCGatherTheSoulInfo + +class tagMCGatherTheSoul(Structure): + _pack_ = 1 + _fields_ = [ + ("SoulID", c_int), + ("LV", 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.SoulID = 0 + self.LV = 0 + return + + def GetLength(self): + return sizeof(tagMCGatherTheSoul) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 60 新聚魂信息 //tagMCGatherTheSoulInfo: + SoulID:%d, + LV:%d + '''\ + %( + self.SoulID, + self.LV + ) + return DumpString + + +class tagMCGatherTheSoulInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)// 信息个数 + SoulList = list() #(vector<tagMCGatherTheSoul> SoulList)// 信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x60 + 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): + temSoulList = tagMCGatherTheSoul() + _pos = temSoulList.ReadData(_lpData, _pos) + self.SoulList.append(temSoulList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x60 + self.Count = 0 + self.SoulList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.SoulList[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.SoulList[i].GetLength(), self.SoulList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SoulList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGatherTheSoulInfo=tagMCGatherTheSoulInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGatherTheSoulInfo.Head.Cmd,m_NAtagMCGatherTheSoulInfo.Head.SubCmd))] = m_NAtagMCGatherTheSoulInfo #------------------------------------------------------ @@ -26951,63 +28737,48 @@ # A3 51 寻宝功能信息 #tagMCTreasureInfo class tagMCTreasureTypeInfo(Structure): - TreasureType = 0 #(BYTE TreasureType)//寻宝类型 - LuckValue = 0 #(WORD LuckValue)//当前幸运值 - IndexCount = 0 #(BYTE IndexCount)//索引个数 - FreeCountTime = list() #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值 - data = None + _pack_ = 1 + _fields_ = [ + ("TreasureType", c_ubyte), #寻宝类型 + ("LuckValue", c_ushort), #当前幸运值 + ("TreasureCount", c_int), #已寻宝总次数 + ("FreeCountToday", c_ushort), #今日已免费寻宝次数 + ] def __init__(self): self.Clear() return - def ReadData(self, _lpData, _pos=0, _Len=0): + def ReadData(self, stringData, _pos=0, _len=0): self.Clear() - self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.IndexCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.FreeCountTime.append(value) - return _pos + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() def Clear(self): self.TreasureType = 0 self.LuckValue = 0 - self.IndexCount = 0 - self.FreeCountTime = list() + self.TreasureCount = 0 + self.FreeCountToday = 0 return def GetLength(self): - length = 0 - length += 1 - length += 2 - length += 1 - length += 4 * self.IndexCount - - return length + return sizeof(tagMCTreasureTypeInfo) def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.TreasureType) - data = CommFunc.WriteWORD(data, self.LuckValue) - data = CommFunc.WriteBYTE(data, self.IndexCount) - for i in range(self.IndexCount): - data = CommFunc.WriteDWORD(data, self.FreeCountTime[i]) - return data + return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = ''' + DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo: TreasureType:%d, LuckValue:%d, - IndexCount:%d, - FreeCountTime:%s + TreasureCount:%d, + FreeCountToday:%d '''\ %( self.TreasureType, self.LuckValue, - self.IndexCount, - "..." + self.TreasureCount, + self.FreeCountToday ) return DumpString @@ -27083,7 +28854,8 @@ class tagMCTreasureResult(Structure): Head = tagHead() - AddTreasureScore = 0 #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分 + AddMoneyType = 0 #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0 + AddMoneyValue = 0 #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0 AddTreasureLuck = 0 #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值 TreasureResultLen = 0 #(WORD TreasureResultLen) TreasureResult = "" #(String TreasureResult)// 获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...] @@ -27098,7 +28870,8 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos) self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen) @@ -27109,7 +28882,8 @@ self.Head.Clear() self.Head.Cmd = 0xA3 self.Head.SubCmd = 0x50 - self.AddTreasureScore = 0 + self.AddMoneyType = 0 + self.AddMoneyValue = 0 self.AddTreasureLuck = 0 self.TreasureResultLen = 0 self.TreasureResult = "" @@ -27118,6 +28892,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 2 length += 2 length += 2 @@ -27128,7 +28903,8 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.AddTreasureScore) + data = CommFunc.WriteBYTE(data, self.AddMoneyType) + data = CommFunc.WriteWORD(data, self.AddMoneyValue) data = CommFunc.WriteWORD(data, self.AddTreasureLuck) data = CommFunc.WriteWORD(data, self.TreasureResultLen) data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult) @@ -27137,14 +28913,16 @@ def OutputString(self): DumpString = ''' Head:%s, - AddTreasureScore:%d, + AddMoneyType:%d, + AddMoneyValue:%d, AddTreasureLuck:%d, TreasureResultLen:%d, TreasureResult:%s '''\ %( self.Head.OutputString(), - self.AddTreasureScore, + self.AddMoneyType, + self.AddMoneyValue, self.AddTreasureLuck, self.TreasureResultLen, self.TreasureResult @@ -28984,18 +30762,17 @@ #------------------------------------------------------ # A7 17 聊天气泡框状态 #tagMCChatBubbleBoxState -class tagMCChatBubbleBoxState(Structure): +class tagMCChatBubbleBox(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("BoxState", c_int), # 按二进制位存储代表是否已开启,暂支持31位,以后有需要再加 + ("BoxID", c_ubyte), #气泡ID + ("State", c_ubyte), #是否已激活 + ("EndTime", c_int), #到期时间戳,0为永久 + ("Star", c_ubyte), #星级 ] def __init__(self): self.Clear() - self.Cmd = 0xA7 - self.SubCmd = 0x17 return def ReadData(self, stringData, _pos=0, _len=0): @@ -29004,33 +30781,98 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA7 - self.SubCmd = 0x17 - self.BoxState = 0 + self.BoxID = 0 + self.State = 0 + self.EndTime = 0 + self.Star = 0 return def GetLength(self): - return sizeof(tagMCChatBubbleBoxState) + return sizeof(tagMCChatBubbleBox) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''// A7 17 聊天气泡框状态 //tagMCChatBubbleBoxState: - Cmd:%s, - SubCmd:%s, - BoxState:%d + BoxID:%d, + State:%d, + EndTime:%d, + Star:%d '''\ %( - self.Cmd, - self.SubCmd, - self.BoxState + self.BoxID, + self.State, + self.EndTime, + self.Star + ) + return DumpString + + +class tagMCChatBubbleBoxState(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + BoxList = list() #(vector<tagMCChatBubbleBox> BoxList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x17 + 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): + temBoxList = tagMCChatBubbleBox() + _pos = temBoxList.ReadData(_lpData, _pos) + self.BoxList.append(temBoxList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x17 + self.Count = 0 + self.BoxList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.BoxList[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.BoxList[i].GetLength(), self.BoxList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + BoxList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." ) return DumpString m_NAtagMCChatBubbleBoxState=tagMCChatBubbleBoxState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChatBubbleBoxState.Cmd,m_NAtagMCChatBubbleBoxState.SubCmd))] = m_NAtagMCChatBubbleBoxState +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChatBubbleBoxState.Head.Cmd,m_NAtagMCChatBubbleBoxState.Head.SubCmd))] = m_NAtagMCChatBubbleBoxState #------------------------------------------------------ @@ -29329,6 +31171,118 @@ m_NAtagMCDynamicBarrierState=tagMCDynamicBarrierState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDynamicBarrierState.Head.Cmd,m_NAtagMCDynamicBarrierState.Head.SubCmd))] = m_NAtagMCDynamicBarrierState + + +#------------------------------------------------------ +# A7 21 表情包信息 #tagMCEmojiPackInfo + +class tagMCEmojiPack(Structure): + _pack_ = 1 + _fields_ = [ + ("PackID", c_ubyte), #表情包ID + ("State", c_ubyte), #是否已激活 + ("EndTime", c_int), #到期时间戳,0为永久 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.PackID = 0 + self.State = 0 + self.EndTime = 0 + return + + def GetLength(self): + return sizeof(tagMCEmojiPack) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 21 表情包信息 //tagMCEmojiPackInfo: + PackID:%d, + State:%d, + EndTime:%d + '''\ + %( + self.PackID, + self.State, + self.EndTime + ) + return DumpString + + +class tagMCEmojiPackInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + EmojiPackList = list() #(vector<tagMCEmojiPack> EmojiPackList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x21 + 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): + temEmojiPackList = tagMCEmojiPack() + _pos = temEmojiPackList.ReadData(_lpData, _pos) + self.EmojiPackList.append(temEmojiPackList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x21 + self.Count = 0 + self.EmojiPackList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.EmojiPackList[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.EmojiPackList[i].GetLength(), self.EmojiPackList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + EmojiPackList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCEmojiPackInfo=tagMCEmojiPackInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEmojiPackInfo.Head.Cmd,m_NAtagMCEmojiPackInfo.Head.SubCmd))] = m_NAtagMCEmojiPackInfo #------------------------------------------------------ @@ -31875,12 +33829,72 @@ return DumpString +class tagMCActBossTrialAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + 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.NeedScore,_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.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + class tagMCActBossTrialBillard(Structure): Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 Count = 0 #(BYTE Count)// 奖励物品数 AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励 MemCount = 0 #(BYTE MemCount)// 成员奖励物品数 MemAwardItemList = list() #(vector<tagMCActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCActBossTrialAwardEx> AwardItemExList)// 额外奖励列表 data = None def __init__(self): @@ -31900,6 +33914,12 @@ temMemAwardItemList = tagMCActBossTrialItem() _pos = temMemAwardItemList.ReadData(_lpData, _pos) self.MemAwardItemList.append(temMemAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCActBossTrialAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) return _pos def Clear(self): @@ -31908,6 +33928,9 @@ self.AwardItemList = list() self.MemCount = 0 self.MemAwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() return def GetLength(self): @@ -31919,6 +33942,10 @@ length += 1 for i in range(self.MemCount): length += self.MemAwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() return length @@ -31931,6 +33958,10 @@ data = CommFunc.WriteBYTE(data, self.MemCount) for i in range(self.MemCount): data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) return data def OutputString(self): @@ -31939,13 +33970,19 @@ Count:%d, AwardItemList:%s, MemCount:%d, - MemAwardItemList:%s + MemAwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s '''\ %( self.Rank, self.Count, "...", self.MemCount, + "...", + self.NeedScore, + self.CountEx, "..." ) return DumpString @@ -32368,6 +34405,7 @@ CTGIDList = list() #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 GiftCount = 0 #(BYTE GiftCount) BuyCountGiftList = list() #(vector<tagMCActBuyCountGift> BuyCountGiftList)// 购买次数礼包列表 + ShopType = 0 #(WORD ShopType)// 开放商店类型,可能为0不开放 data = None def __init__(self): @@ -32394,6 +34432,7 @@ temBuyCountGiftList = tagMCActBuyCountGift() _pos = temBuyCountGiftList.ReadData(_lpData, _pos) self.BuyCountGiftList.append(temBuyCountGiftList) + self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): @@ -32411,6 +34450,7 @@ self.CTGIDList = list() self.GiftCount = 0 self.BuyCountGiftList = list() + self.ShopType = 0 return def GetLength(self): @@ -32427,6 +34467,7 @@ length += 1 for i in range(self.GiftCount): length += self.BuyCountGiftList[i].GetLength() + length += 2 return length @@ -32445,6 +34486,7 @@ data = CommFunc.WriteBYTE(data, self.GiftCount) for i in range(self.GiftCount): data = CommFunc.WriteString(data, self.BuyCountGiftList[i].GetLength(), self.BuyCountGiftList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.ShopType) return data def OutputString(self): @@ -32459,7 +34501,8 @@ CTGIDCount:%d, CTGIDList:%s, GiftCount:%d, - BuyCountGiftList:%s + BuyCountGiftList:%s, + ShopType:%d '''\ %( self.Head.OutputString(), @@ -32472,7 +34515,8 @@ self.CTGIDCount, "...", self.GiftCount, - "..." + "...", + self.ShopType ) return DumpString @@ -34438,6 +36482,363 @@ #------------------------------------------------------ +# AA 81 古宝养成活动信息 #tagMCActGubaoInfo + +class tagMCActGubaoItem(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(tagMCActGubaoItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 81 古宝养成活动信息 //tagMCActGubaoInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActGubaoAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCActGubaoItem> AwardItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActGubaoItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + +class tagMCActGubaoBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActGubaoItem> AwardItemList)// 奖励物品列表 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCActGubaoAwardEx> AwardItemExList)// 额外奖励列表 + 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 = tagMCActGubaoItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCActGubaoAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.NeedScore, + self.CountEx, + "..." + ) + return DumpString + + +class tagMCActGubaoInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ShopType = 0 #(WORD ShopType)// 开放商店类型,可能为0不开放 + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCActGubaoBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x81 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCActGubaoBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x81 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.LimitLV = 0 + self.ShopType = 0 + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 2 + length += 2 + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteWORD(data, self.ShopType) + data = CommFunc.WriteBYTE(data, self.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + LimitLV:%d, + ShopType:%d, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.LimitLV, + self.ShopType, + self.PersonalBillCount, + "..." + ) + return DumpString + + +m_NAtagMCActGubaoInfo=tagMCActGubaoInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGubaoInfo.Head.Cmd,m_NAtagMCActGubaoInfo.Head.SubCmd))] = m_NAtagMCActGubaoInfo + + +#------------------------------------------------------ +# AA 82 古宝养成活动玩家信息 #tagMCActGubaoPlayerInfo + +class tagMCActGubaoPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("Score", c_int), # 当前积分 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x82 + 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 = 0x82 + self.ActNum = 0 + self.Score = 0 + return + + def GetLength(self): + return sizeof(tagMCActGubaoPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 82 古宝养成活动玩家信息 //tagMCActGubaoPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + Score:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.Score + ) + return DumpString + + +m_NAtagMCActGubaoPlayerInfo=tagMCActGubaoPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGubaoPlayerInfo.Cmd,m_NAtagMCActGubaoPlayerInfo.SubCmd))] = m_NAtagMCActGubaoPlayerInfo + + +#------------------------------------------------------ # AA 54 骑宠盛宴活动信息 #tagMCActHorsePetFeastInfo class tagMCActHorsePetFeastTime(Structure): @@ -34577,6 +36978,363 @@ m_NAtagMCActHorsePetFeastInfo=tagMCActHorsePetFeastInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetFeastInfo.Head.Cmd,m_NAtagMCActHorsePetFeastInfo.Head.SubCmd))] = m_NAtagMCActHorsePetFeastInfo + + +#------------------------------------------------------ +# AA 84 骑宠养成活动信息 #tagMCActHorsePetTrainInfo + +class tagMCActHorsePetTrainItem(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(tagMCActHorsePetTrainItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 84 骑宠养成活动信息 //tagMCActHorsePetTrainInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActHorsePetTrainAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActHorsePetTrainItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + +class tagMCActHorsePetTrainBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 奖励物品列表 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表 + 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 = tagMCActHorsePetTrainItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCActHorsePetTrainAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.NeedScore, + self.CountEx, + "..." + ) + return DumpString + + +class tagMCActHorsePetTrainInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ShopType = 0 #(WORD ShopType)// 开放商店类型,可能为0不开放 + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCActHorsePetTrainBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x84 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCActHorsePetTrainBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x84 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.LimitLV = 0 + self.ShopType = 0 + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 2 + length += 2 + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteWORD(data, self.ShopType) + data = CommFunc.WriteBYTE(data, self.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + LimitLV:%d, + ShopType:%d, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.LimitLV, + self.ShopType, + self.PersonalBillCount, + "..." + ) + return DumpString + + +m_NAtagMCActHorsePetTrainInfo=tagMCActHorsePetTrainInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetTrainInfo.Head.Cmd,m_NAtagMCActHorsePetTrainInfo.Head.SubCmd))] = m_NAtagMCActHorsePetTrainInfo + + +#------------------------------------------------------ +# AA 85 骑宠养成活动玩家信息 #tagMCActHorsePetTrainPlayerInfo + +class tagMCActHorsePetTrainPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("Score", c_int), # 当前活动积分 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x85 + 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 = 0x85 + self.ActNum = 0 + self.Score = 0 + return + + def GetLength(self): + return sizeof(tagMCActHorsePetTrainPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 85 骑宠养成活动玩家信息 //tagMCActHorsePetTrainPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + Score:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.Score + ) + return DumpString + + +m_NAtagMCActHorsePetTrainPlayerInfo=tagMCActHorsePetTrainPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetTrainPlayerInfo.Cmd,m_NAtagMCActHorsePetTrainPlayerInfo.SubCmd))] = m_NAtagMCActHorsePetTrainPlayerInfo #------------------------------------------------------ @@ -36725,6 +39483,7 @@ LimitLV = 0 #(WORD LimitLV)// 限制等级 TaskCount = 0 #(BYTE TaskCount) TaskList = list() #(vector<tagMCActTask> TaskList)// 任务列表 + RoundMax = 0 #(BYTE RoundMax)// 最大可循环轮次,当小于等于1时代表不循环 data = None def __init__(self): @@ -36747,6 +39506,7 @@ temTaskList = tagMCActTask() _pos = temTaskList.ReadData(_lpData, _pos) self.TaskList.append(temTaskList) + self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -36762,6 +39522,7 @@ self.LimitLV = 0 self.TaskCount = 0 self.TaskList = list() + self.RoundMax = 0 return def GetLength(self): @@ -36776,6 +39537,7 @@ length += 1 for i in range(self.TaskCount): length += self.TaskList[i].GetLength() + length += 1 return length @@ -36791,6 +39553,7 @@ data = CommFunc.WriteBYTE(data, self.TaskCount) for i in range(self.TaskCount): data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RoundMax) return data def OutputString(self): @@ -36803,7 +39566,8 @@ ResetType:%d, LimitLV:%d, TaskCount:%d, - TaskList:%s + TaskList:%s, + RoundMax:%d '''\ %( self.Head.OutputString(), @@ -36814,7 +39578,8 @@ self.ResetType, self.LimitLV, self.TaskCount, - "..." + "...", + self.RoundMax ) return DumpString @@ -36831,6 +39596,7 @@ ActNum = 0 #(BYTE ActNum)// 活动编号 AwardCount = 0 #(BYTE AwardCount) AwardRecordList = list() #(vector<DWORD> AwardRecordList)// 任务ID领奖记录值列表,根据任务ID位判断是否已领取,一个记录值存31位 [记录值0, 记录值1, ...] + RoundNum = 0 #(BYTE RoundNum)// 当前轮次,从1开始 data = None def __init__(self): @@ -36847,6 +39613,7 @@ for i in range(self.AwardCount): value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.AwardRecordList.append(value) + self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -36857,6 +39624,7 @@ self.ActNum = 0 self.AwardCount = 0 self.AwardRecordList = list() + self.RoundNum = 0 return def GetLength(self): @@ -36865,6 +39633,7 @@ length += 1 length += 1 length += 4 * self.AwardCount + length += 1 return length @@ -36875,6 +39644,7 @@ data = CommFunc.WriteBYTE(data, self.AwardCount) for i in range(self.AwardCount): data = CommFunc.WriteDWORD(data, self.AwardRecordList[i]) + data = CommFunc.WriteBYTE(data, self.RoundNum) return data def OutputString(self): @@ -36882,13 +39652,15 @@ Head:%s, ActNum:%d, AwardCount:%d, - AwardRecordList:%s + AwardRecordList:%s, + RoundNum:%d '''\ %( self.Head.OutputString(), self.ActNum, self.AwardCount, - "..." + "...", + self.RoundNum ) return DumpString @@ -38050,6 +40822,7 @@ ("ItemCount", c_ushort), ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ("LotteryScore", c_int), #当前抽奖积分 ] def __init__(self): @@ -38072,6 +40845,7 @@ self.ItemCount = 0 self.PosNum = 0 self.TotalTimesNow = 0 + self.LotteryScore = 0 return def GetLength(self): @@ -38089,7 +40863,8 @@ ItemID:%d, ItemCount:%d, PosNum:%d, - TotalTimesNow:%d + TotalTimesNow:%d, + LotteryScore:%d '''\ %( self.Cmd, @@ -38099,7 +40874,8 @@ self.ItemID, self.ItemCount, self.PosNum, - self.TotalTimesNow + self.TotalTimesNow, + self.LotteryScore ) return DumpString @@ -38111,7 +40887,343 @@ #------------------------------------------------------ # AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo -class tagMCActXianXiaMJAwardItem(Structure): +class tagMCActXianXiaMJItem(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(tagMCActXianXiaMJItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActXianXiaMJAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCActXianXiaMJItem> AwardItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActXianXiaMJItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + +class tagMCActXianXiaMJBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActXianXiaMJItem> AwardItemList)// 奖励物品列表 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCActXianXiaMJAwardEx> AwardItemExList)// 额外奖励列表 + 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 = tagMCActXianXiaMJItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCActXianXiaMJAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.NeedScore, + self.CountEx, + "..." + ) + return DumpString + + +class tagMCActXianXiaMJInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + UseItemID = 0 #(DWORD UseItemID)//消耗物品ID,默认1个;消耗物品或货币二选一即可,或都配则先消耗道具,不足则消耗货币 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyValue = 0 #(WORD MoneyValue)//消耗货币值 + LotteryAddScore = 0 #(WORD LotteryAddScore)//每次抽奖加积分 + LayerAddScore = 0 #(WORD LayerAddScore)//每次跨层加积分 + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCActXianXiaMJBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LotteryAddScore,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LayerAddScore,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCActXianXiaMJBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.UseItemID = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + self.LotteryAddScore = 0 + self.LayerAddScore = 0 + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 1 + length += 2 + length += 4 + length += 1 + length += 2 + length += 2 + length += 2 + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteDWORD(data, self.UseItemID) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteWORD(data, self.MoneyValue) + data = CommFunc.WriteWORD(data, self.LotteryAddScore) + data = CommFunc.WriteWORD(data, self.LayerAddScore) + data = CommFunc.WriteBYTE(data, self.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + IsDayReset:%d, + LimitLV:%d, + UseItemID:%d, + MoneyType:%d, + MoneyValue:%d, + LotteryAddScore:%d, + LayerAddScore:%d, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.IsDayReset, + self.LimitLV, + self.UseItemID, + self.MoneyType, + self.MoneyValue, + self.LotteryAddScore, + self.LayerAddScore, + self.PersonalBillCount, + "..." + ) + return DumpString + + +m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo + + +#------------------------------------------------------ +# AA 79 仙匣秘境层信息 #tagMCActXianXiaMJLayerInfo + +class tagMCActXianXiaMJLayerItem(Structure): _pack_ = 1 _fields_ = [ ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 @@ -38143,13 +41255,13 @@ return def GetLength(self): - return sizeof(tagMCActXianXiaMJAwardItem) + return sizeof(tagMCActXianXiaMJLayerItem) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo: + DumpString = '''// AA 79 仙匣秘境层信息 //tagMCActXianXiaMJLayerInfo: ItemLibType:%d, ItemID:%d, ItemCount:%d, @@ -38170,48 +41282,38 @@ return DumpString -class tagMCActXianXiaMJInfo(Structure): +class tagMCActXianXiaMJLayerInfo(Structure): Head = tagHead() ActNum = 0 #(BYTE ActNum)// 活动编号 - StartDate = "" #(char StartDate[10])// 开始日期 y-m-d - EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d - LimitLV = 0 #(WORD LimitLV)// 限制等级 - ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 - MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 - MoneyValue = 0 #(WORD MoneyValue)//消耗货币值 - LayerNum = 0 #(BYTE LayerNum)//当前奖池第几层 + LayerNum = 0 #(WORD LayerNum)//当前奖池第几层 + LotteryScore = 0 #(DWORD LotteryScore)//当前抽奖积分 AwardItemCount = 0 #(BYTE AwardItemCount) - AwardItemList = list() #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 + AwardItemList = list() #(vector<tagMCActXianXiaMJLayerItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 SuperItemCount = 0 #(BYTE SuperItemCount) - SuperItemList = list() #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; + SuperItemList = list() #(vector<tagMCActXianXiaMJLayerItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数 data = None def __init__(self): self.Clear() self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x58 + self.Head.SubCmd = 0x79 return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) - self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LayerNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LotteryScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.AwardItemCount): - temAwardItemList = tagMCActXianXiaMJAwardItem() + temAwardItemList = tagMCActXianXiaMJLayerItem() _pos = temAwardItemList.ReadData(_lpData, _pos) self.AwardItemList.append(temAwardItemList) self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.SuperItemCount): - temSuperItemList = tagMCActXianXiaMJAwardItem() + temSuperItemList = tagMCActXianXiaMJLayerItem() _pos = temSuperItemList.ReadData(_lpData, _pos) self.SuperItemList.append(temSuperItemList) self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -38221,15 +41323,10 @@ self.Head = tagHead() self.Head.Clear() self.Head.Cmd = 0xAA - self.Head.SubCmd = 0x58 + self.Head.SubCmd = 0x79 self.ActNum = 0 - self.StartDate = "" - self.EndtDate = "" - self.LimitLV = 0 - self.ResetType = 0 - self.MoneyType = 0 - self.MoneyValue = 0 self.LayerNum = 0 + self.LotteryScore = 0 self.AwardItemCount = 0 self.AwardItemList = list() self.SuperItemCount = 0 @@ -38241,13 +41338,8 @@ length = 0 length += self.Head.GetLength() length += 1 - length += 10 - length += 10 length += 2 - length += 1 - length += 1 - length += 2 - length += 1 + length += 4 length += 1 for i in range(self.AwardItemCount): length += self.AwardItemList[i].GetLength() @@ -38262,13 +41354,8 @@ data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteBYTE(data, self.ActNum) - data = CommFunc.WriteString(data, 10, self.StartDate) - data = CommFunc.WriteString(data, 10, self.EndtDate) - data = CommFunc.WriteWORD(data, self.LimitLV) - data = CommFunc.WriteBYTE(data, self.ResetType) - data = CommFunc.WriteBYTE(data, self.MoneyType) - data = CommFunc.WriteWORD(data, self.MoneyValue) - data = CommFunc.WriteBYTE(data, self.LayerNum) + data = CommFunc.WriteWORD(data, self.LayerNum) + data = CommFunc.WriteDWORD(data, self.LotteryScore) data = CommFunc.WriteBYTE(data, self.AwardItemCount) for i in range(self.AwardItemCount): data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) @@ -38282,13 +41369,8 @@ DumpString = ''' Head:%s, ActNum:%d, - StartDate:%s, - EndtDate:%s, - LimitLV:%d, - ResetType:%d, - MoneyType:%d, - MoneyValue:%d, LayerNum:%d, + LotteryScore:%d, AwardItemCount:%d, AwardItemList:%s, SuperItemCount:%d, @@ -38298,13 +41380,8 @@ %( self.Head.OutputString(), self.ActNum, - self.StartDate, - self.EndtDate, - self.LimitLV, - self.ResetType, - self.MoneyType, - self.MoneyValue, self.LayerNum, + self.LotteryScore, self.AwardItemCount, "...", self.SuperItemCount, @@ -38314,8 +41391,8 @@ return DumpString -m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo +m_NAtagMCActXianXiaMJLayerInfo=tagMCActXianXiaMJLayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJLayerInfo.Head.Cmd,m_NAtagMCActXianXiaMJLayerInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJLayerInfo #------------------------------------------------------ @@ -39284,12 +42361,72 @@ return DumpString +class tagMCCrossActBossTrialAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCCrossActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + class tagMCCrossActBossTrialBillard(Structure): Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 Count = 0 #(BYTE Count)// 奖励物品数 AwardItemList = list() #(vector<tagMCCrossActBossTrialItem> AwardItemList)// 奖励物品列表,当仙盟榜时,如果有该奖励则代表盟主奖励,否则默认均为成员奖励 MemCount = 0 #(BYTE MemCount)// 成员奖励物品数 MemAwardItemList = list() #(vector<tagMCCrossActBossTrialItem> MemAwardItemList)// 成员奖励物品列表,仅仙盟榜时有效 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCCrossActBossTrialAwardEx> AwardItemExList)// 额外奖励列表 data = None def __init__(self): @@ -39309,6 +42446,12 @@ temMemAwardItemList = tagMCCrossActBossTrialItem() _pos = temMemAwardItemList.ReadData(_lpData, _pos) self.MemAwardItemList.append(temMemAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCCrossActBossTrialAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) return _pos def Clear(self): @@ -39317,6 +42460,9 @@ self.AwardItemList = list() self.MemCount = 0 self.MemAwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() return def GetLength(self): @@ -39328,6 +42474,10 @@ length += 1 for i in range(self.MemCount): length += self.MemAwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() return length @@ -39340,6 +42490,10 @@ data = CommFunc.WriteBYTE(data, self.MemCount) for i in range(self.MemCount): data = CommFunc.WriteString(data, self.MemAwardItemList[i].GetLength(), self.MemAwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) return data def OutputString(self): @@ -39348,13 +42502,19 @@ Count:%d, AwardItemList:%s, MemCount:%d, - MemAwardItemList:%s + MemAwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s '''\ %( self.Rank, self.Count, "...", self.MemCount, + "...", + self.NeedScore, + self.CountEx, "..." ) return DumpString @@ -39371,8 +42531,6 @@ JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 - RankLimitPersonal = 0 #(WORD RankLimitPersonal)// 个人榜上榜个数保底限制; - RankLimitFamily = 0 #(WORD RankLimitFamily)// 仙盟榜上榜个数保底限制; PersonalBillCount = 0 #(BYTE PersonalBillCount) PersonalBillboardInfoList = list() #(vector<tagMCCrossActBossTrialBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 FamilyBillCount = 0 #(BYTE FamilyBillCount) @@ -39397,8 +42555,6 @@ self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.RankLimitFamily,_pos = CommFunc.ReadWORD(_lpData, _pos) self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.PersonalBillCount): temPersonalBillboardInfoList = tagMCCrossActBossTrialBillard() @@ -39425,8 +42581,6 @@ self.JoinEndTime = "" self.IsDayReset = 0 self.ResetType = 0 - self.RankLimitPersonal = 0 - self.RankLimitFamily = 0 self.PersonalBillCount = 0 self.PersonalBillboardInfoList = list() self.FamilyBillCount = 0 @@ -39445,8 +42599,6 @@ length += 5 length += 1 length += 1 - length += 2 - length += 2 length += 1 for i in range(self.PersonalBillCount): length += self.PersonalBillboardInfoList[i].GetLength() @@ -39468,8 +42620,6 @@ data = CommFunc.WriteString(data, 5, self.JoinEndTime) data = CommFunc.WriteBYTE(data, self.IsDayReset) data = CommFunc.WriteBYTE(data, self.ResetType) - data = CommFunc.WriteWORD(data, self.RankLimitPersonal) - data = CommFunc.WriteWORD(data, self.RankLimitFamily) data = CommFunc.WriteBYTE(data, self.PersonalBillCount) for i in range(self.PersonalBillCount): data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) @@ -39490,8 +42640,6 @@ JoinEndTime:%s, IsDayReset:%d, ResetType:%d, - RankLimitPersonal:%d, - RankLimitFamily:%d, PersonalBillCount:%d, PersonalBillboardInfoList:%s, FamilyBillCount:%d, @@ -39508,8 +42656,6 @@ self.JoinEndTime, self.IsDayReset, self.ResetType, - self.RankLimitPersonal, - self.RankLimitFamily, self.PersonalBillCount, "...", self.FamilyBillCount, @@ -39520,6 +42666,916 @@ m_NAtagMCCrossActBossTrialInfo=tagMCCrossActBossTrialInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActBossTrialInfo.Head.Cmd,m_NAtagMCCrossActBossTrialInfo.Head.SubCmd))] = m_NAtagMCCrossActBossTrialInfo + + +#------------------------------------------------------ +# AA 83 古宝养成跨服活动信息 #tagMCCrossActGubaoInfo + +class tagMCCrossActGubaoItem(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(tagMCCrossActGubaoItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 83 古宝养成跨服活动信息 //tagMCCrossActGubaoInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCrossActGubaoAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActGubaoItem> AwardItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCCrossActGubaoItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + +class tagMCCrossActGubaoBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActGubaoItem> AwardItemList)// 奖励物品列表 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCCrossActGubaoAwardEx> AwardItemExList)// 额外奖励列表 + 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 = tagMCCrossActGubaoItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCCrossActGubaoAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.NeedScore, + self.CountEx, + "..." + ) + return DumpString + + +class tagMCCrossActGubaoInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + GroupValue1 = 0 #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCCrossActGubaoBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x83 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) + self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCCrossActGubaoBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x83 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.GroupValue1 = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteBYTE(data, self.GroupValue1) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteBYTE(data, self.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + GroupValue1:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.GroupValue1, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.PersonalBillCount, + "..." + ) + return DumpString + + +m_NAtagMCCrossActGubaoInfo=tagMCCrossActGubaoInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActGubaoInfo.Head.Cmd,m_NAtagMCCrossActGubaoInfo.Head.SubCmd))] = m_NAtagMCCrossActGubaoInfo + + +#------------------------------------------------------ +# AA 86 骑宠养成跨服活动信息 #tagMCCrossActHorsePetTrainInfo + +class tagMCCrossActHorsePetTrainItem(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(tagMCCrossActHorsePetTrainItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 86 骑宠养成跨服活动信息 //tagMCCrossActHorsePetTrainInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCrossActHorsePetTrainAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCCrossActHorsePetTrainItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + +class tagMCCrossActHorsePetTrainBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 奖励物品列表 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCCrossActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表 + 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 = tagMCCrossActHorsePetTrainItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCCrossActHorsePetTrainAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.NeedScore, + self.CountEx, + "..." + ) + return DumpString + + +class tagMCCrossActHorsePetTrainInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + GroupValue1 = 0 #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCCrossActHorsePetTrainBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x86 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) + self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCCrossActHorsePetTrainBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x86 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.GroupValue1 = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteBYTE(data, self.GroupValue1) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteBYTE(data, self.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + GroupValue1:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.GroupValue1, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.PersonalBillCount, + "..." + ) + return DumpString + + +m_NAtagMCCrossActHorsePetTrainInfo=tagMCCrossActHorsePetTrainInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActHorsePetTrainInfo.Head.Cmd,m_NAtagMCCrossActHorsePetTrainInfo.Head.SubCmd))] = m_NAtagMCCrossActHorsePetTrainInfo + + +#------------------------------------------------------ +# AA 80 仙匣秘境跨服活动信息 #tagMCCrossActXianXiaMJInfo + +class tagMCCrossActXianXiaMJItem(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(tagMCCrossActXianXiaMJItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 80 仙匣秘境跨服活动信息 //tagMCCrossActXianXiaMJInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCrossActXianXiaMJAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActXianXiaMJItem> AwardItemList)// 额外奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCCrossActXianXiaMJItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.NeedScore = 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.NeedScore) + 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 = ''' + NeedScore:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.NeedScore, + self.Count, + "..." + ) + return DumpString + + +class tagMCCrossActXianXiaMJBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActXianXiaMJItem> AwardItemList)// 奖励物品列表 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCCrossActXianXiaMJAwardEx> AwardItemExList)// 额外奖励列表 + 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 = tagMCCrossActXianXiaMJItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemExList = tagMCCrossActXianXiaMJAwardEx() + _pos = temAwardItemExList.ReadData(_lpData, _pos) + self.AwardItemExList.append(temAwardItemExList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + length += 4 + length += 1 + for i in range(self.CountEx): + length += self.AwardItemExList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.NeedScore) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s, + NeedScore:%d, + CountEx:%d, + AwardItemExList:%s + '''\ + %( + self.Rank, + self.Count, + "...", + self.NeedScore, + self.CountEx, + "..." + ) + return DumpString + + +class tagMCCrossActXianXiaMJInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + GroupValue1 = 0 #(BYTE GroupValue1)// 活动榜单分组值1,用于查询对应榜单 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss + JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCCrossActXianXiaMJBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x80 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen) + self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCCrossActXianXiaMJBillard() + _pos = temPersonalBillboardInfoList.ReadData(_lpData, _pos) + self.PersonalBillboardInfoList.append(temPersonalBillboardInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x80 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.GroupValue1 = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.IsDayReset = 0 + self.PersonalBillCount = 0 + self.PersonalBillboardInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 10 + length += 10 + length += 5 + length += 5 + length += 1 + length += 1 + for i in range(self.PersonalBillCount): + length += self.PersonalBillboardInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ServerInfoLen) + data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo) + data = CommFunc.WriteBYTE(data, self.GroupValue1) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteString(data, 5, self.JoinStartTime) + data = CommFunc.WriteString(data, 5, self.JoinEndTime) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.PersonalBillCount) + for i in range(self.PersonalBillCount): + data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + GroupValue1:%d, + StartDate:%s, + EndtDate:%s, + JoinStartTime:%s, + JoinEndTime:%s, + IsDayReset:%d, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.GroupValue1, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.IsDayReset, + self.PersonalBillCount, + "..." + ) + return DumpString + + +m_NAtagMCCrossActXianXiaMJInfo=tagMCCrossActXianXiaMJInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActXianXiaMJInfo.Head.Cmd,m_NAtagMCCrossActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCCrossActXianXiaMJInfo #------------------------------------------------------ @@ -46188,6 +50244,238 @@ #------------------------------------------------------ +# B1 17 头像信息 #tagMCFaceInfo + +class tagMCFace(Structure): + _pack_ = 1 + _fields_ = [ + ("FaceID", c_int), #头像ID + ("State", c_ubyte), #是否已激活 + ("EndTime", c_int), #到期时间戳,0为永久 + ("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.FaceID = 0 + self.State = 0 + self.EndTime = 0 + self.Star = 0 + return + + def GetLength(self): + return sizeof(tagMCFace) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 17 头像信息 //tagMCFaceInfo: + FaceID:%d, + State:%d, + EndTime:%d, + Star:%d + '''\ + %( + self.FaceID, + self.State, + self.EndTime, + self.Star + ) + return DumpString + + +class tagMCFaceInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + FaceList = list() #(vector<tagMCFace> FaceList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x17 + 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): + temFaceList = tagMCFace() + _pos = temFaceList.ReadData(_lpData, _pos) + self.FaceList.append(temFaceList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x17 + self.Count = 0 + self.FaceList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.FaceList[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.FaceList[i].GetLength(), self.FaceList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + FaceList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFaceInfo=tagMCFaceInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaceInfo.Head.Cmd,m_NAtagMCFaceInfo.Head.SubCmd))] = m_NAtagMCFaceInfo + + +#------------------------------------------------------ +# B1 18 头像框信息 #tagMCFacePicInfo + +class tagMCFacePic(Structure): + _pack_ = 1 + _fields_ = [ + ("FacePicID", c_int), #头像框ID + ("State", c_ubyte), #是否已激活 + ("EndTime", c_int), #到期时间戳,0为永久 + ("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.FacePicID = 0 + self.State = 0 + self.EndTime = 0 + self.Star = 0 + return + + def GetLength(self): + return sizeof(tagMCFacePic) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 18 头像框信息 //tagMCFacePicInfo: + FacePicID:%d, + State:%d, + EndTime:%d, + Star:%d + '''\ + %( + self.FacePicID, + self.State, + self.EndTime, + self.Star + ) + return DumpString + + +class tagMCFacePicInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + FacePicList = list() #(vector<tagMCFacePic> FacePicList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x18 + 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): + temFacePicList = tagMCFacePic() + _pos = temFacePicList.ReadData(_lpData, _pos) + self.FacePicList.append(temFacePicList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x18 + self.Count = 0 + self.FacePicList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.FacePicList[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.FacePicList[i].GetLength(), self.FacePicList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + FacePicList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFacePicInfo=tagMCFacePicInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFacePicInfo.Head.Cmd,m_NAtagMCFacePicInfo.Head.SubCmd))] = m_NAtagMCFacePicInfo + + +#------------------------------------------------------ # B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList class tagMCFuncSysPrivilegeInfo(Structure): @@ -47148,6 +51436,188 @@ #------------------------------------------------------ +# B1 15 天道树信息 #tagMCTiandaoTreeInfo + +class tagMCTiandaoTreeInfo(Structure): + Head = tagHead() + Qiyun = 0 #(DWORD Qiyun)// 当前气运值 + AwardCount = 0 #(BYTE AwardCount)// 天道果领取记录值个数 + AwardStateList = list() #(vector<DWORD> AwardStateList)// 天道果领取记录值列表,按奖励索引位二进制记录是否已领取,一个值可存31位,如值1存0~30,值2存31~61,... + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Qiyun,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.AwardStateList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x15 + self.Qiyun = 0 + self.AwardCount = 0 + self.AwardStateList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 4 * self.AwardCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.Qiyun) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteDWORD(data, self.AwardStateList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Qiyun:%d, + AwardCount:%d, + AwardStateList:%s + '''\ + %( + self.Head.OutputString(), + self.Qiyun, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCTiandaoTreeInfo=tagMCTiandaoTreeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTiandaoTreeInfo.Head.Cmd,m_NAtagMCTiandaoTreeInfo.Head.SubCmd))] = m_NAtagMCTiandaoTreeInfo + + +#------------------------------------------------------ +# B1 12 培养功能境界信息 #tagMCTrainRealmLVInfo + +class tagMCTrainRealmLV(Structure): + _pack_ = 1 + _fields_ = [ + ("FuncType", c_ubyte), # 功能类型:1-坐骑;2-灵宠;3-灵器 + ("TrainRealmLV", 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.FuncType = 0 + self.TrainRealmLV = 0 + return + + def GetLength(self): + return sizeof(tagMCTrainRealmLV) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 12 培养功能境界信息 //tagMCTrainRealmLVInfo: + FuncType:%d, + TrainRealmLV:%d + '''\ + %( + self.FuncType, + self.TrainRealmLV + ) + return DumpString + + +class tagMCTrainRealmLVInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + InfoList = list() #(vector<tagMCTrainRealmLV> InfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x12 + 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): + temInfoList = tagMCTrainRealmLV() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x12 + self.Count = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.InfoList[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.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCTrainRealmLVInfo=tagMCTrainRealmLVInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTrainRealmLVInfo.Head.Cmd,m_NAtagMCTrainRealmLVInfo.Head.SubCmd))] = m_NAtagMCTrainRealmLVInfo + + +#------------------------------------------------------ # B1 21 仙树信息 #tagMCTreeInfo class tagMCTreeInfo(Structure): @@ -47208,14 +51678,238 @@ #------------------------------------------------------ +# B1 16 累计消耗货币信息 #tagMCUseMoneyTotalInfo + +class tagMCUseMoneyTotal(Structure): + _pack_ = 1 + _fields_ = [ + ("MoneyType", c_ubyte), # 货币类型,仅同步需要记录的货币类型 + ("UseTotal", c_int), # 累计消耗货币值 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.MoneyType = 0 + self.UseTotal = 0 + return + + def GetLength(self): + return sizeof(tagMCUseMoneyTotal) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 16 累计消耗货币信息 //tagMCUseMoneyTotalInfo: + MoneyType:%d, + UseTotal:%d + '''\ + %( + self.MoneyType, + self.UseTotal + ) + return DumpString + + +class tagMCUseMoneyTotalInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + InfoList = list() #(vector<tagMCUseMoneyTotal> InfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x16 + 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): + temInfoList = tagMCUseMoneyTotal() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x16 + self.Count = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.InfoList[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.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCUseMoneyTotalInfo=tagMCUseMoneyTotalInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseMoneyTotalInfo.Head.Cmd,m_NAtagMCUseMoneyTotalInfo.Head.SubCmd))] = m_NAtagMCUseMoneyTotalInfo + + +#------------------------------------------------------ +# B1 14 仙宫信息 #tagMCXiangongInfo + +class tagMCXiangong(Structure): + _pack_ = 1 + _fields_ = [ + ("XiangongID", c_ushort), # 仙宫ID + ("LikeStateToday", 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.XiangongID = 0 + self.LikeStateToday = 0 + return + + def GetLength(self): + return sizeof(tagMCXiangong) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 14 仙宫信息 //tagMCXiangongInfo: + XiangongID:%d, + LikeStateToday:%d + '''\ + %( + self.XiangongID, + self.LikeStateToday + ) + return DumpString + + +class tagMCXiangongInfo(Structure): + Head = tagHead() + LikeStateToday = 0 #(BYTE LikeStateToday)// 今日是否已点赞,指仙宫的外层点赞,非某个指定仙宫 + XiangongCount = 0 #(BYTE XiangongCount) + XiangongList = list() #(vector<tagMCXiangong> XiangongList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x14 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.LikeStateToday,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.XiangongCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.XiangongCount): + temXiangongList = tagMCXiangong() + _pos = temXiangongList.ReadData(_lpData, _pos) + self.XiangongList.append(temXiangongList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x14 + self.LikeStateToday = 0 + self.XiangongCount = 0 + self.XiangongList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.XiangongCount): + length += self.XiangongList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.LikeStateToday) + data = CommFunc.WriteBYTE(data, self.XiangongCount) + for i in range(self.XiangongCount): + data = CommFunc.WriteString(data, self.XiangongList[i].GetLength(), self.XiangongList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + LikeStateToday:%d, + XiangongCount:%d, + XiangongList:%s + '''\ + %( + self.Head.OutputString(), + self.LikeStateToday, + self.XiangongCount, + "..." + ) + return DumpString + + +m_NAtagMCXiangongInfo=tagMCXiangongInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXiangongInfo.Head.Cmd,m_NAtagMCXiangongInfo.Head.SubCmd))] = m_NAtagMCXiangongInfo + + +#------------------------------------------------------ # B1 20 战令信息 #tagMCZhanlingInfo class tagMCZhanling(Structure): _pack_ = 1 _fields_ = [ ("NeedValue", c_int), # 奖励所需值 - ("FreeRewardState", c_ubyte), # 免费奖励是否已领取 - ("ZLRewardState", c_ubyte), # 战令奖励是否已领取 + ("FreeRewardState", c_ubyte), # 免费战令奖励是否已领取 + ("ZLRewardState", c_ubyte), # 普通战令奖励是否已领取 + ("ZLRewardStateH", c_ubyte), # 高级战令奖励是否已领取 ] def __init__(self): @@ -47231,6 +51925,7 @@ self.NeedValue = 0 self.FreeRewardState = 0 self.ZLRewardState = 0 + self.ZLRewardStateH = 0 return def GetLength(self): @@ -47243,12 +51938,14 @@ DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo: NeedValue:%d, FreeRewardState:%d, - ZLRewardState:%d + ZLRewardState:%d, + ZLRewardStateH:%d '''\ %( self.NeedValue, self.FreeRewardState, - self.ZLRewardState + self.ZLRewardState, + self.ZLRewardStateH ) return DumpString @@ -47256,7 +51953,9 @@ class tagMCZhanlingInfo(Structure): Head = tagHead() ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型 - IsActivite = 0 #(BYTE IsActivite)// 是否已激活 + IsActivite = 0 #(BYTE IsActivite)// 普通战令是否已激活 + IsActiviteH = 0 #(BYTE IsActiviteH)// 高级战令是否已激活 + Value1 = 0 #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳 RewardCount = 0 #(WORD RewardCount) RewardList = list() #(vector<tagMCZhanling> RewardList) data = None @@ -47272,6 +51971,8 @@ _pos = self.Head.ReadData(_lpData, _pos) self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.RewardCount): temRewardList = tagMCZhanling() @@ -47286,6 +51987,8 @@ self.Head.SubCmd = 0x20 self.ZhanlingType = 0 self.IsActivite = 0 + self.IsActiviteH = 0 + self.Value1 = 0 self.RewardCount = 0 self.RewardList = list() return @@ -47295,6 +51998,8 @@ length += self.Head.GetLength() length += 1 length += 1 + length += 1 + length += 4 length += 2 for i in range(self.RewardCount): length += self.RewardList[i].GetLength() @@ -47306,6 +52011,8 @@ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteBYTE(data, self.ZhanlingType) data = CommFunc.WriteBYTE(data, self.IsActivite) + data = CommFunc.WriteBYTE(data, self.IsActiviteH) + data = CommFunc.WriteDWORD(data, self.Value1) data = CommFunc.WriteWORD(data, self.RewardCount) for i in range(self.RewardCount): data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer()) @@ -47316,6 +52023,8 @@ Head:%s, ZhanlingType:%d, IsActivite:%d, + IsActiviteH:%d, + Value1:%d, RewardCount:%d, RewardList:%s '''\ @@ -47323,6 +52032,8 @@ self.Head.OutputString(), self.ZhanlingType, self.IsActivite, + self.IsActiviteH, + self.Value1, self.RewardCount, "..." ) @@ -51001,6 +55712,7 @@ ("EnterCountWeek", c_int), # 本周总参与次数 ("BuyOpenCountWeek", c_int), # 本周总购买召集次数 ("HighScoreTotalWeek", c_int), # 本周每日最高分累加总分 + ("ZoneID", c_ubyte), # 所属分区ID ] def __init__(self): @@ -51022,6 +55734,7 @@ self.EnterCountWeek = 0 self.BuyOpenCountWeek = 0 self.HighScoreTotalWeek = 0 + self.ZoneID = 0 return def GetLength(self): @@ -51038,7 +55751,8 @@ HighScoreToday:%d, EnterCountWeek:%d, BuyOpenCountWeek:%d, - HighScoreTotalWeek:%d + HighScoreTotalWeek:%d, + ZoneID:%d '''\ %( self.Cmd, @@ -51047,7 +55761,8 @@ self.HighScoreToday, self.EnterCountWeek, self.BuyOpenCountWeek, - self.HighScoreTotalWeek + self.HighScoreTotalWeek, + self.ZoneID ) return DumpString -- Gitblit v1.8.0