From 1c39d19d2b49465cf8bd8bdea831f9adb012411c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 25 十一月 2024 14:55:01 +0800 Subject: [PATCH] 1111 【越南】【砍树】【英文】【tqxbqy】【btgotq】背包相关初始格子数改为读配置 --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 6357 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 6,110 insertions(+), 247 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 21dc35d..c0fdcb6 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -424,6 +424,190 @@ #------------------------------------------------------ +# A0 08 玩家记录信息 #tagGCPlayerRecInfo + +class tagGCPlayerRec(Structure): + Time = 0 #(DWORD Time)//时间 + Value1 = 0 #(DWORD Value1)//值1 + Value2 = 0 #(DWORD Value2)//值2 + Value3 = 0 #(DWORD Value3)//值3 + Value4 = 0 #(DWORD Value4)//值4 + Value5 = 0 #(DWORD Value5)//值5 + Value6 = 0 #(DWORD Value6)//值6 + Value7 = 0 #(DWORD Value7)//值7 + Value8 = 0 #(DWORD Value8)//值8 + UserDataLen = 0 #(WORD UserDataLen)//扩展数据长度 + UserData = "" #(String UserData)//扩展数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.Time = 0 + self.Value1 = 0 + self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.Value7 = 0 + self.Value8 = 0 + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Time) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteDWORD(data, self.Value7) + data = CommFunc.WriteDWORD(data, self.Value8) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + Time:%d, + Value1:%d, + Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + Value7:%d, + Value8:%d, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.Time, + self.Value1, + self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.Value7, + self.Value8, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCPlayerRecInfo(Structure): + Head = tagHead() + Type = 0 #(BYTE Type)//类型 + Count = 0 #(WORD Count)//数量 + PlayerRecList = list() #(vector<tagGCPlayerRec> PlayerRecList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPlayerRecList = tagGCPlayerRec() + _pos = temPlayerRecList.ReadData(_lpData, _pos) + self.PlayerRecList.append(temPlayerRecList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x08 + self.Type = 0 + self.Count = 0 + self.PlayerRecList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + for i in range(self.Count): + length += self.PlayerRecList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Type) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.PlayerRecList[i].GetLength(), self.PlayerRecList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Type:%d, + Count:%d, + PlayerRecList:%s + '''\ + %( + self.Head.OutputString(), + self.Type, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCPlayerRecInfo=tagGCPlayerRecInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerRecInfo.Head.Cmd,m_NAtagGCPlayerRecInfo.Head.SubCmd))] = m_NAtagGCPlayerRecInfo + + +#------------------------------------------------------ # A0 06 服务器地图线路人数状态 #tagGCPyServerMapState class tagGCPyServerMapLineState(Structure): @@ -996,6 +1180,7 @@ Job = 0 #(BYTE Job)// 玩家职业 RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -1014,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): @@ -1028,6 +1214,7 @@ self.Job = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -1039,6 +1226,7 @@ length += 2 length += 1 length += 2 + length += 4 length += 4 return length @@ -1053,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): @@ -1064,7 +1253,8 @@ LV:%d, Job:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -1074,7 +1264,8 @@ self.LV, self.Job, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -1556,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 @@ -1568,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 @@ -1575,6 +1770,8 @@ self.NameLen = 0 self.Name = "" self.PlayeJob = 0 + self.Face = 0 + self.FacePic = 0 self.MoneyNum = 0 return @@ -1584,6 +1781,8 @@ length += len(self.Name) length += 1 length += 4 + length += 4 + length += 4 return length @@ -1592,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 @@ -1600,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 @@ -1694,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)//获得途径 @@ -1716,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) @@ -1733,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 @@ -1751,6 +1962,8 @@ length += len(self.Name) length += 4 length += 1 + length += 4 + length += 4 length += 1 length += 4 length += 1 @@ -1770,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) @@ -1788,6 +2003,8 @@ Name:%s, Time:%d, PlayeJob:%d, + Face:%d, + FacePic:%d, MoneyType:%d, MoneyNum:%d, GetWay:%d, @@ -1804,6 +2021,8 @@ self.Name, self.Time, self.PlayeJob, + self.Face, + self.FacePic, self.MoneyType, self.MoneyNum, self.GetWay, @@ -2232,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): @@ -2254,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): @@ -2271,6 +2492,7 @@ self.WarRank = 0 self.TotalFightPower = 0 self.TotalFightPowerEx = 0 + self.EmblemID = 0 return def GetLength(self): @@ -2289,6 +2511,7 @@ length += 1 length += 4 length += 4 + length += 1 return length @@ -2308,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): @@ -2325,7 +2549,8 @@ JoinAccept:%d, WarRank:%d, TotalFightPower:%d, - TotalFightPowerEx:%d + TotalFightPowerEx:%d, + EmblemID:%d '''\ %( self.FamilyIndex, @@ -2341,7 +2566,8 @@ self.JoinAccept, self.WarRank, self.TotalFightPower, - self.TotalFightPowerEx + self.TotalFightPowerEx, + self.EmblemID ) return DumpString @@ -2770,7 +2996,6 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 - Face = 0 #(DWORD Face)//基本脸型 FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 Score = 0 #(DWORD Score)//积分 @@ -2778,6 +3003,8 @@ AddScore = "" #(String AddScore)//本次对战增加的积分,有正负 IsWin = 0 #(BYTE IsWin)//是否获胜 Time = 0 #(DWORD Time)//时间戳 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -2791,7 +3018,6 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -2799,6 +3025,8 @@ self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen) self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -2807,7 +3035,6 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 - self.Face = 0 self.FightPower = 0 self.FightPowerEx = 0 self.Score = 0 @@ -2815,6 +3042,8 @@ self.AddScore = "" self.IsWin = 0 self.Time = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -2827,10 +3056,11 @@ length += 4 length += 4 length += 4 - length += 4 length += 1 length += len(self.AddScore) length += 1 + length += 4 + length += 4 length += 4 return length @@ -2842,7 +3072,6 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.Score) @@ -2850,6 +3079,8 @@ data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore) data = CommFunc.WriteBYTE(data, self.IsWin) data = CommFunc.WriteDWORD(data, self.Time) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -2859,14 +3090,15 @@ Job:%d, LV:%d, RealmLV:%d, - Face:%d, FightPower:%d, FightPowerEx:%d, Score:%d, AddScoreLen:%d, AddScore:%s, IsWin:%d, - Time:%d + Time:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -2874,14 +3106,15 @@ self.Job, self.LV, self.RealmLV, - self.Face, self.FightPower, self.FightPowerEx, self.Score, self.AddScoreLen, self.AddScore, self.IsWin, - self.Time + self.Time, + self.Face, + self.FacePic ) return DumpString @@ -2961,10 +3194,11 @@ Job = 0 #(BYTE Job) LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 - Face = 0 #(DWORD Face)//基本脸型 FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 Score = 0 #(DWORD Score)//积分 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -2978,10 +3212,11 @@ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -2990,10 +3225,11 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 - self.Face = 0 self.FightPower = 0 self.FightPowerEx = 0 self.Score = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -3003,6 +3239,7 @@ length += 1 length += 2 length += 2 + length += 4 length += 4 length += 4 length += 4 @@ -3017,10 +3254,11 @@ data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteWORD(data, self.RealmLV) - data = CommFunc.WriteDWORD(data, self.Face) data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.Score) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) return data def OutputString(self): @@ -3030,10 +3268,11 @@ Job:%d, LV:%d, RealmLV:%d, - Face:%d, FightPower:%d, FightPowerEx:%d, - Score:%d + Score:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -3041,10 +3280,11 @@ self.Job, self.LV, self.RealmLV, - self.Face, self.FightPower, self.FightPowerEx, - self.Score + self.Score, + self.Face, + self.FacePic ) return DumpString @@ -4475,7 +4715,7 @@ ID = 0 #(DWORD ID) ID2 = 0 #(DWORD ID2) Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 - Name2 = "" #(char Name2[33])//名字2 + Name2 = "" #(char Name2[65])//名字2 Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 Value1 = 0 #(DWORD Value1)//排序依赖的值,比如,等级 Value2 = 0 #(DWORD Value2)//排序依赖的值,比如,战斗力 @@ -4502,7 +4742,7 @@ self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65) self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -4547,7 +4787,7 @@ length += 4 length += 4 length += 33 - length += 33 + length += 65 length += 1 length += 4 length += 4 @@ -4571,7 +4811,7 @@ data = CommFunc.WriteDWORD(data, self.ID) data = CommFunc.WriteDWORD(data, self.ID2) data = CommFunc.WriteString(data, 33, self.Name1) - data = CommFunc.WriteString(data, 33, self.Name2) + data = CommFunc.WriteString(data, 65, self.Name2) data = CommFunc.WriteBYTE(data, self.Type2) data = CommFunc.WriteDWORD(data, self.Value1) data = CommFunc.WriteDWORD(data, self.Value2) @@ -4636,7 +4876,7 @@ class tagPYBillboardData(Structure): Head = tagHead() - IsWatchSelf = 0 #(BYTE IsWatchSelf) + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) Type = 0 #(BYTE Type)//排行榜类型 Billboard = list() #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount @@ -4651,7 +4891,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.IsWatchSelf,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): @@ -4665,7 +4905,7 @@ self.Head.Clear() self.Head.Cmd = 0xA9 self.Head.SubCmd = 0xA2 - self.IsWatchSelf = 0 + self.WatchID = 0 self.BillboardCount = 0 self.Type = 0 self.Billboard = list() @@ -4674,7 +4914,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 + length += 4 length += 1 length += 1 for i in range(self.BillboardCount): @@ -4685,7 +4925,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.IsWatchSelf) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) data = CommFunc.WriteBYTE(data, self.Type) for i in range(self.BillboardCount): @@ -4695,14 +4935,14 @@ def OutputString(self): DumpString = ''' Head:%s, - IsWatchSelf:%d, + WatchID:%d, BillboardCount:%d, Type:%d, Billboard:%s '''\ %( self.Head.OutputString(), - self.IsWatchSelf, + self.WatchID, self.BillboardCount, self.Type, "..." @@ -5085,6 +5325,7 @@ Job = 0 #(BYTE Job) RealmLV = 0 #(WORD RealmLV)//境界 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -5099,6 +5340,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): @@ -5108,6 +5350,7 @@ self.Job = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -5117,6 +5360,7 @@ length += 4 length += 1 length += 2 + length += 4 length += 4 return length @@ -5129,6 +5373,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): @@ -5138,7 +5383,8 @@ LV:%d, Job:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.ID, @@ -5146,7 +5392,8 @@ self.LV, self.Job, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -5227,6 +5474,7 @@ LV = 0 #(WORD LV)//等级 RealmLV = 0 #(WORD RealmLV)//境界 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -5241,6 +5489,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): @@ -5250,6 +5499,7 @@ self.LV = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -5259,6 +5509,7 @@ length += 1 length += 2 length += 2 + length += 4 length += 4 return length @@ -5271,6 +5522,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): @@ -5280,7 +5532,8 @@ Job:%d, LV:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -5288,7 +5541,8 @@ self.Job, self.LV, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -5591,6 +5845,384 @@ 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)// 玩家境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_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.Face = 0 + self.FacePic = 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 += 4 + 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + 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, + Face:%d, + FacePic:%d, + EquipShowSwitch:%d, + EquipShowIDCount:%d, + EquipShowID:%s + '''\ + %( + self.AddTime, + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic, + 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)// 玩家境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_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 + self.Face = 0 + self.FacePic = 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 + length += 4 + length += 4 + + 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + return data + + def OutputString(self): + DumpString = ''' + AddTime:%d, + ServerID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + Face:%d, + FacePic:%d + '''\ + %( + self.AddTime, + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic + ) + 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 #------------------------------------------------------ @@ -7139,6 +7771,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) @@ -7158,6 +7792,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) @@ -7172,6 +7808,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 @@ -7190,6 +7828,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 2 length += len(self.ExData) @@ -7203,6 +7843,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) @@ -7218,6 +7860,8 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, + FacePic:%d, MapID:%d, LineID:%d, NPCID:%d, @@ -7231,6 +7875,8 @@ self.Job, self.LV, self.RealmLV, + self.Face, + self.FacePic, self.MapID, self.LineID, self.NPCID, @@ -7689,6 +8335,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) @@ -7713,6 +8361,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) @@ -7733,6 +8383,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 @@ -7754,6 +8406,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 2 length += len(self.ExData) length += 19 @@ -7770,6 +8424,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) @@ -7788,6 +8444,8 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, + FacePic:%d, MapID:%d, LineID:%d, NPCID:%d, @@ -7804,6 +8462,8 @@ self.Job, self.LV, self.RealmLV, + self.Face, + self.FacePic, self.MapID, self.LineID, self.NPCID, @@ -7907,7 +8567,9 @@ RobPlayerID = 0 #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺 RobWorkerCount = 0 #(BYTE RobWorkerCount)// 抢夺工人个数 RobPlayerName = "" #(char RobPlayerName[33]) + RobJob = 0 #(BYTE RobJob) RobFace = 0 #(DWORD RobFace) + RobFacePic = 0 #(DWORD RobFacePic) data = None def __init__(self): @@ -7929,7 +8591,9 @@ self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.RobJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RobFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -7946,7 +8610,9 @@ self.RobPlayerID = 0 self.RobWorkerCount = 0 self.RobPlayerName = "" + self.RobJob = 0 self.RobFace = 0 + self.RobFacePic = 0 return def GetLength(self): @@ -7964,6 +8630,8 @@ length += 4 length += 1 length += 33 + length += 1 + length += 4 length += 4 return length @@ -7983,7 +8651,9 @@ data = CommFunc.WriteDWORD(data, self.RobPlayerID) data = CommFunc.WriteBYTE(data, self.RobWorkerCount) data = CommFunc.WriteString(data, 33, self.RobPlayerName) + data = CommFunc.WriteBYTE(data, self.RobJob) data = CommFunc.WriteDWORD(data, self.RobFace) + data = CommFunc.WriteDWORD(data, self.RobFacePic) return data def OutputString(self): @@ -8001,7 +8671,9 @@ RobPlayerID:%d, RobWorkerCount:%d, RobPlayerName:%s, - RobFace:%d + RobJob:%d, + RobFace:%d, + RobFacePic:%d '''\ %( self.Index, @@ -8017,7 +8689,9 @@ self.RobPlayerID, self.RobWorkerCount, self.RobPlayerName, - self.RobFace + self.RobJob, + self.RobFace, + self.RobFacePic ) return DumpString @@ -8025,7 +8699,9 @@ class tagGCMineArea(Structure): PlayerID = 0 #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人 PlayerName = "" #(char PlayerName[33])// 可能为空,如自己或假人 + Job = 0 #(BYTE Job) Face = 0 #(DWORD Face) + FacePic = 0 #(DWORD FacePic) MineCount = 0 #(BYTE MineCount) MineItemList = list() #(vector<tagGCMineItem> MineItemList)// 矿物列表 data = None @@ -8038,7 +8714,9 @@ self.Clear() self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.MineCount): temMineItemList = tagGCMineItem() @@ -8049,7 +8727,9 @@ def Clear(self): self.PlayerID = 0 self.PlayerName = "" + self.Job = 0 self.Face = 0 + self.FacePic = 0 self.MineCount = 0 self.MineItemList = list() return @@ -8058,6 +8738,8 @@ length = 0 length += 4 length += 33 + length += 1 + length += 4 length += 4 length += 1 for i in range(self.MineCount): @@ -8069,7 +8751,9 @@ data = '' data = CommFunc.WriteDWORD(data, self.PlayerID) data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteBYTE(data, self.MineCount) for i in range(self.MineCount): data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer()) @@ -8079,14 +8763,18 @@ DumpString = ''' PlayerID:%d, PlayerName:%s, + Job:%d, Face:%d, + FacePic:%d, MineCount:%d, MineItemList:%s '''\ %( self.PlayerID, self.PlayerName, + self.Job, self.Face, + self.FacePic, self.MineCount, "..." ) @@ -8182,7 +8870,9 @@ RecordTime = 0 #(DWORD RecordTime)// 记录时间戳 MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID TagPlayerName = "" #(char TagPlayerName[33]) + TagJob = 0 #(BYTE TagJob) TagFace = 0 #(DWORD TagFace) + TagFacePic = 0 #(DWORD TagFacePic) data = None def __init__(self): @@ -8196,7 +8886,9 @@ self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TagFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -8205,7 +8897,9 @@ self.RecordTime = 0 self.MineID = 0 self.TagPlayerName = "" + self.TagJob = 0 self.TagFace = 0 + self.TagFacePic = 0 return def GetLength(self): @@ -8215,6 +8909,8 @@ length += 4 length += 2 length += 33 + length += 1 + length += 4 length += 4 return length @@ -8226,7 +8922,9 @@ data = CommFunc.WriteDWORD(data, self.RecordTime) data = CommFunc.WriteWORD(data, self.MineID) data = CommFunc.WriteString(data, 33, self.TagPlayerName) + data = CommFunc.WriteBYTE(data, self.TagJob) data = CommFunc.WriteDWORD(data, self.TagFace) + data = CommFunc.WriteDWORD(data, self.TagFacePic) return data def OutputString(self): @@ -8236,7 +8934,9 @@ RecordTime:%d, MineID:%d, TagPlayerName:%s, - TagFace:%d + TagJob:%d, + TagFace:%d, + TagFacePic:%d '''\ %( self.RecordType, @@ -8244,7 +8944,9 @@ self.RecordTime, self.MineID, self.TagPlayerName, - self.TagFace + self.TagJob, + self.TagFace, + self.TagFacePic ) return DumpString @@ -8388,6 +9090,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): @@ -8401,6 +9105,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): @@ -8409,6 +9115,8 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -8418,6 +9126,8 @@ length += 1 length += 2 length += 1 + length += 4 + length += 4 return length @@ -8428,6 +9138,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): @@ -8436,14 +9148,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 @@ -8557,6 +9273,213 @@ #------------------------------------------------------ +# B0 20 膜拜信息列表 #tagGCWorshipInfoList + +class tagGCWorshipInfo(Structure): + PlayerID = 0 #(DWORD PlayerID)// 目标玩家ID + WorshipType = 0 #(BYTE WorshipType)// 膜拜类型 + WorshipValue = 0 #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + InfoLen = 0 #(WORD InfoLen) + PlayerInfo = "" #(String PlayerInfo)// 玩家信息{k:v, ...} + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.InfoLen = 0 + self.PlayerInfo = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 4 + length += 2 + length += len(self.PlayerInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.WorshipType) + data = CommFunc.WriteDWORD(data, self.WorshipValue) + data = CommFunc.WriteWORD(data, self.InfoLen) + data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + InfoLen:%d, + PlayerInfo:%s + '''\ + %( + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.InfoLen, + self.PlayerInfo + ) + return DumpString + + +class tagGCWorshipInfoList(Structure): + Head = tagHead() + WorshipCount = 0 #(BYTE WorshipCount) + WorshipInfoList = list() #(vector<tagGCWorshipInfo> WorshipInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WorshipCount): + temWorshipInfoList = tagGCWorshipInfo() + _pos = temWorshipInfoList.ReadData(_lpData, _pos) + self.WorshipInfoList.append(temWorshipInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + self.WorshipCount = 0 + self.WorshipInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.WorshipCount): + length += self.WorshipInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.WorshipCount) + for i in range(self.WorshipCount): + data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + WorshipCount:%d, + WorshipInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.WorshipCount, + "..." + ) + return DumpString + + +m_NAtagGCWorshipInfoList=tagGCWorshipInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList + + +#------------------------------------------------------ +# B0 21 膜拜结果 #tagGCWorshipResult + +class tagGCWorshipResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 目标玩家ID + ("WorshipType", c_ubyte), # 膜拜类型 + ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + ("Result", c_ubyte), # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标; + ("MoneyType", c_ubyte), # 货币类型 + ("MoneyValue", c_int), # 货币奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + 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 = 0xB0 + self.SubCmd = 0x21 + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.Result = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + return + + def GetLength(self): + return sizeof(tagGCWorshipResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + Result:%d, + MoneyType:%d, + MoneyValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.Result, + self.MoneyType, + self.MoneyValue + ) + return DumpString + + +m_NAtagGCWorshipResult=tagGCWorshipResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult + + +#------------------------------------------------------ #B3 03 询问是否允许添加好友#tagGCFriendAskIfJoin class tagGCFriendAskIfJoin(Structure): @@ -8566,6 +9489,7 @@ LV = 0 #(WORD LV) RealmLV = 0 #(WORD RealmLV)//境界等级 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -8582,6 +9506,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): @@ -8594,6 +9519,7 @@ self.LV = 0 self.RealmLV = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -8603,6 +9529,7 @@ length += 33 length += 2 length += 2 + length += 4 length += 4 return length @@ -8615,6 +9542,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): @@ -8624,7 +9552,8 @@ Name:%s, LV:%d, RealmLV:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -8632,7 +9561,8 @@ self.Name, self.LV, self.RealmLV, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -9380,6 +10310,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): @@ -9703,6 +10693,7 @@ IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍 ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 data = None def __init__(self): @@ -9723,6 +10714,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): @@ -9739,6 +10731,7 @@ self.IsInTeam = 0 self.ServerGroupID = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -9751,6 +10744,7 @@ length += 2 length += 1 length += 1 + length += 4 length += 4 length += 4 @@ -9768,6 +10762,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): @@ -9781,7 +10776,8 @@ OnlineType:%d, IsInTeam:%d, ServerGroupID:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -9793,7 +10789,8 @@ self.OnlineType, self.IsInTeam, self.ServerGroupID, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -9869,6 +10866,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): @@ -9884,6 +10882,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): @@ -9894,6 +10893,7 @@ self.RealmLV = 0 self.OnlineType = 0 self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -9904,6 +10904,7 @@ length += 2 length += 2 length += 1 + length += 4 length += 4 return length @@ -9917,6 +10918,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): @@ -9927,7 +10929,8 @@ LV:%d, RealmLV:%d, OnlineType:%d, - Face:%d + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -9936,7 +10939,8 @@ self.LV, self.RealmLV, self.OnlineType, - self.Face + self.Face, + self.FacePic ) return DumpString @@ -12243,6 +13247,903 @@ #------------------------------------------------------ +# 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)// 玩家境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_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.Face = 0 + self.FacePic = 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 + 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + 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, + Face:%d, + FacePic:%d, + FightPower:%d, + FightPowerEx:%d, + Value1:%d, + Value2:%d + '''\ + %( + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic, + 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)// 玩家境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_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.Face = 0 + self.FacePic = 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 + 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + 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, + Face:%d, + FacePic:%d, + FightPower:%d, + FightPowerEx:%d + '''\ + %( + self.ServerID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.Face, + self.FacePic, + 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)// 玩家境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + 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.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_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.Face = 0 + self.FacePic = 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 + 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.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + 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, + Face:%d, + FacePic:%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.Face, + self.FacePic, + 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): @@ -12554,6 +14455,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): @@ -12564,6 +14521,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): @@ -12579,6 +14538,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): @@ -12589,6 +14550,8 @@ self.Job = 0 self.JobLevel = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -12600,6 +14563,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 return length @@ -12612,6 +14577,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): @@ -12622,7 +14589,9 @@ LV:%d, Job:%d, JobLevel:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -12631,7 +14600,9 @@ self.LV, self.Job, self.JobLevel, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -12714,6 +14685,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): @@ -12732,6 +14705,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): @@ -12746,6 +14721,8 @@ self.Job = 0 self.JobLevel = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -12758,6 +14735,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 return length @@ -12771,6 +14750,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): @@ -12782,7 +14763,9 @@ LV:%d, Job:%d, JobLevel:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -12792,7 +14775,9 @@ self.LV, self.Job, self.JobLevel, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -13243,6 +15228,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 @@ -13263,6 +15250,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) @@ -13278,6 +15267,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 @@ -13294,6 +15285,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 length += 1 length += 4 length += 1 @@ -13311,6 +15304,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) @@ -13327,6 +15322,8 @@ Job:%d, JobLevel:%d, RealmLV:%d, + Face:%d, + FacePic:%d, PlayerState:%d, MapID:%d, LineID:%d @@ -13341,6 +15338,8 @@ self.Job, self.JobLevel, self.RealmLV, + self.Face, + self.FacePic, self.PlayerState, self.MapID, self.LineID @@ -14316,6 +16315,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): @@ -14332,6 +16333,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): @@ -14343,6 +16346,8 @@ self.FightPower = 0 self.FightPowerEx = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -14355,6 +16360,8 @@ length += 4 length += 4 length += 2 + length += 4 + length += 4 return length @@ -14368,6 +16375,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): @@ -14379,7 +16388,9 @@ LV:%d, FightPower:%d, FightPowerEx:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -14389,7 +16400,9 @@ self.LV, self.FightPower, self.FightPowerEx, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -14845,7 +16858,7 @@ ID = 0 #(DWORD ID) ID2 = 0 #(DWORD ID2) Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 - Name2 = "" #(char Name2[33])//名字2 + Name2 = "" #(char Name2[65])//名字2 Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 Value1 = 0 #(DWORD Value1)//自定义值1 Value2 = 0 #(DWORD Value2)//自定义值2 @@ -14872,7 +16885,7 @@ self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ID2,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) - self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,65) self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -14917,7 +16930,7 @@ length += 4 length += 4 length += 33 - length += 33 + length += 65 length += 1 length += 4 length += 4 @@ -14941,7 +16954,7 @@ data = CommFunc.WriteDWORD(data, self.ID) data = CommFunc.WriteDWORD(data, self.ID2) data = CommFunc.WriteString(data, 33, self.Name1) - data = CommFunc.WriteString(data, 33, self.Name2) + data = CommFunc.WriteString(data, 65, self.Name2) data = CommFunc.WriteBYTE(data, self.Type2) data = CommFunc.WriteDWORD(data, self.Value1) data = CommFunc.WriteDWORD(data, self.Value2) @@ -15009,7 +17022,7 @@ Type = 0 #(BYTE Type)//榜单类型 GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1 GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 - IsWatchSelf = 0 #(BYTE IsWatchSelf) + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) data = None @@ -15026,7 +17039,7 @@ self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.IsWatchSelf,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): temCrossBillboardDataList = tagGCCrossBillboardData() @@ -15042,7 +17055,7 @@ self.Type = 0 self.GroupValue1 = 0 self.GroupValue2 = 0 - self.IsWatchSelf = 0 + self.WatchID = 0 self.BillboardCount = 0 self.CrossBillboardDataList = list() return @@ -15053,7 +17066,7 @@ length += 1 length += 1 length += 1 - length += 1 + length += 4 length += 1 for i in range(self.BillboardCount): length += self.CrossBillboardDataList[i].GetLength() @@ -15066,7 +17079,7 @@ data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteBYTE(data, self.GroupValue1) data = CommFunc.WriteBYTE(data, self.GroupValue2) - data = CommFunc.WriteBYTE(data, self.IsWatchSelf) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) for i in range(self.BillboardCount): data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) @@ -15078,7 +17091,7 @@ Type:%d, GroupValue1:%d, GroupValue2:%d, - IsWatchSelf:%d, + WatchID:%d, BillboardCount:%d, CrossBillboardDataList:%s '''\ @@ -15087,7 +17100,7 @@ self.Type, self.GroupValue1, self.GroupValue2, - self.IsWatchSelf, + self.WatchID, self.BillboardCount, "..." ) @@ -15337,6 +17350,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): @@ -15353,6 +17368,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): @@ -15364,6 +17381,8 @@ self.FightPower = 0 self.FightPowerEx = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -15376,6 +17395,8 @@ length += 4 length += 4 length += 2 + length += 4 + length += 4 return length @@ -15389,6 +17410,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): @@ -15400,7 +17423,9 @@ LV:%d, FightPower:%d, FightPowerEx:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -15410,7 +17435,9 @@ self.LV, self.FightPower, self.FightPowerEx, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -15529,6 +17556,8 @@ NameLen = 0 #(BYTE NameLen) PlayerName = "" #(String PlayerName) Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 FightPower = 0 #(DWORD FightPower) RealmLV = 0 #(WORD RealmLV) PKScore = 0 #(DWORD PKScore) @@ -15545,6 +17574,8 @@ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -15556,6 +17587,8 @@ self.NameLen = 0 self.PlayerName = "" self.Job = 0 + self.Face = 0 + self.FacePic = 0 self.FightPower = 0 self.RealmLV = 0 self.PKScore = 0 @@ -15569,6 +17602,8 @@ length += len(self.PlayerName) length += 1 length += 4 + length += 4 + length += 4 length += 2 length += 4 length += 1 @@ -15581,6 +17616,8 @@ data = CommFunc.WriteBYTE(data, self.NameLen) data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteWORD(data, self.RealmLV) data = CommFunc.WriteDWORD(data, self.PKScore) @@ -15593,6 +17630,8 @@ NameLen:%d, PlayerName:%s, Job:%d, + Face:%d, + FacePic:%d, FightPower:%d, RealmLV:%d, PKScore:%d, @@ -15603,6 +17642,8 @@ self.NameLen, self.PlayerName, self.Job, + self.Face, + self.FacePic, self.FightPower, self.RealmLV, self.PKScore, @@ -15700,6 +17741,8 @@ PlayerName = "" #(String PlayerName)// 跨服名字 Job = 0 #(BYTE Job) LV = 0 #(WORD LV) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 MaxHP = 0 #(DWORD MaxHP)// 默认满血,求余亿部分 MaxHPEx = 0 #(DWORD MaxHPEx)// 默认满血,整除亿部分 MaxProDef = 0 #(DWORD MaxProDef)// 最大护盾 @@ -15716,6 +17759,8 @@ self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -15727,6 +17772,8 @@ self.PlayerName = "" self.Job = 0 self.LV = 0 + self.Face = 0 + self.FacePic = 0 self.MaxHP = 0 self.MaxHPEx = 0 self.MaxProDef = 0 @@ -15742,6 +17789,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 return length @@ -15752,6 +17801,8 @@ data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteDWORD(data, self.MaxHP) data = CommFunc.WriteDWORD(data, self.MaxHPEx) data = CommFunc.WriteDWORD(data, self.MaxProDef) @@ -15764,6 +17815,8 @@ PlayerName:%s, Job:%d, LV:%d, + Face:%d, + FacePic:%d, MaxHP:%d, MaxHPEx:%d, MaxProDef:%d @@ -15774,6 +17827,8 @@ self.PlayerName, self.Job, self.LV, + self.Face, + self.FacePic, self.MaxHP, self.MaxHPEx, self.MaxProDef @@ -17085,6 +19140,7 @@ ("TotalPayCount", c_int), # 累计总购买次数 ("WeekPayCount", c_ushort), # 周总购买次数 ("MonthPayCount", c_ushort), # 月总购买次数 + ("SelectItemValue", c_int), # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 ] def __init__(self): @@ -17102,6 +19158,7 @@ self.TotalPayCount = 0 self.WeekPayCount = 0 self.MonthPayCount = 0 + self.SelectItemValue = 0 return def GetLength(self): @@ -17116,14 +19173,16 @@ TodayPayCount:%d, TotalPayCount:%d, WeekPayCount:%d, - MonthPayCount:%d + MonthPayCount:%d, + SelectItemValue:%d '''\ %( self.RecordID, self.TodayPayCount, self.TotalPayCount, self.WeekPayCount, - self.MonthPayCount + self.MonthPayCount, + self.SelectItemValue ) return DumpString @@ -17387,6 +19446,7 @@ ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 HPEx = 0 #(DWORD HPEx)//当前血量 超过E的记录 Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 RoleType = 0 #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分) data = None @@ -17495,6 +19555,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 @@ -17599,6 +19660,7 @@ self.ExAttr20 = 0 self.HPEx = 0 self.Face = 0 + self.FacePic = 0 self.RoleType = 0 return @@ -17692,6 +19754,7 @@ length += 4 length += 4 length += 15 + length += 4 length += 4 length += 4 length += 4 @@ -17804,6 +19867,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 @@ -17906,6 +19970,7 @@ ExAttr20:%d, HPEx:%d, Face:%d, + FacePic:%d, RoleType:%d '''\ %( @@ -18006,6 +20071,7 @@ self.ExAttr20, self.HPEx, self.Face, + self.FacePic, self.RoleType ) return DumpString @@ -18565,6 +20631,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 #------------------------------------------------------ @@ -21884,6 +24058,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 #------------------------------------------------------ @@ -26555,11 +28904,53 @@ #------------------------------------------------------ # A3 51 寻宝功能信息 #tagMCTreasureInfo +class tagMCTreasureGridLimit(Structure): + _pack_ = 1 + _fields_ = [ + ("GridNum", c_ubyte), # 有限制抽取次数的格子编号 + ("GridCnt", 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.GridNum = 0 + self.GridCnt = 0 + return + + def GetLength(self): + return sizeof(tagMCTreasureGridLimit) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo: + GridNum:%d, + GridCnt:%d + '''\ + %( + self.GridNum, + self.GridCnt + ) + return DumpString + + class tagMCTreasureTypeInfo(Structure): TreasureType = 0 #(BYTE TreasureType)//寻宝类型 LuckValue = 0 #(WORD LuckValue)//当前幸运值 - IndexCount = 0 #(BYTE IndexCount)//索引个数 - FreeCountTime = list() #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值 + TreasureCount = 0 #(DWORD TreasureCount)//已寻宝总次数 + FreeCountToday = 0 #(WORD FreeCountToday)//今日已免费寻宝次数 + TreasureCntAward = 0 #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取 + GridLimitCnt = 0 #(BYTE GridLimitCnt) + GridLimitCntList = list() #(vector<tagMCTreasureGridLimit> GridLimitCntList)//有限制抽取次数的格子次数信息 data = None def __init__(self): @@ -26570,25 +28961,36 @@ 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) + self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FreeCountToday,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TreasureCntAward,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GridLimitCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GridLimitCnt): + temGridLimitCntList = tagMCTreasureGridLimit() + _pos = temGridLimitCntList.ReadData(_lpData, _pos) + self.GridLimitCntList.append(temGridLimitCntList) return _pos def Clear(self): self.TreasureType = 0 self.LuckValue = 0 - self.IndexCount = 0 - self.FreeCountTime = list() + self.TreasureCount = 0 + self.FreeCountToday = 0 + self.TreasureCntAward = 0 + self.GridLimitCnt = 0 + self.GridLimitCntList = list() return def GetLength(self): length = 0 length += 1 length += 2 + length += 4 + length += 2 + length += 4 length += 1 - length += 4 * self.IndexCount + for i in range(self.GridLimitCnt): + length += self.GridLimitCntList[i].GetLength() return length @@ -26596,22 +28998,31 @@ 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]) + data = CommFunc.WriteDWORD(data, self.TreasureCount) + data = CommFunc.WriteWORD(data, self.FreeCountToday) + data = CommFunc.WriteDWORD(data, self.TreasureCntAward) + data = CommFunc.WriteBYTE(data, self.GridLimitCnt) + for i in range(self.GridLimitCnt): + data = CommFunc.WriteString(data, self.GridLimitCntList[i].GetLength(), self.GridLimitCntList[i].GetBuffer()) return data def OutputString(self): DumpString = ''' TreasureType:%d, LuckValue:%d, - IndexCount:%d, - FreeCountTime:%s + TreasureCount:%d, + FreeCountToday:%d, + TreasureCntAward:%d, + GridLimitCnt:%d, + GridLimitCntList:%s '''\ %( self.TreasureType, self.LuckValue, - self.IndexCount, + self.TreasureCount, + self.FreeCountToday, + self.TreasureCntAward, + self.GridLimitCnt, "..." ) return DumpString @@ -26688,7 +29099,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,个数,是否绑定], ...] @@ -26703,7 +29115,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) @@ -26714,7 +29127,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 = "" @@ -26723,6 +29137,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 2 length += 2 length += 2 @@ -26733,7 +29148,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) @@ -26742,14 +29158,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 @@ -27783,6 +30201,62 @@ #------------------------------------------------------ +# A5 12 珍宝阁信息 #tagMCFamilyZhenbaogeInfo + +class tagMCFamilyZhenbaogeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CutState", c_ubyte), # 今日是否已砍价,此状态为全局状态,与盟Action砍价状态不同 + ("BuyState", c_ubyte), # 今日是否已购买,此状态为全局状态,与盟Action购买状态不同 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x12 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x12 + self.CutState = 0 + self.BuyState = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyZhenbaogeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 12 珍宝阁信息 //tagMCFamilyZhenbaogeInfo: + Cmd:%s, + SubCmd:%s, + CutState:%d, + BuyState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CutState, + self.BuyState + ) + return DumpString + + +m_NAtagMCFamilyZhenbaogeInfo=tagMCFamilyZhenbaogeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyZhenbaogeInfo.Cmd,m_NAtagMCFamilyZhenbaogeInfo.SubCmd))] = m_NAtagMCFamilyZhenbaogeInfo + + +#------------------------------------------------------ # A5 09 仙盟阵法信息 #tagMCFamilyZhenfaInfo class tagMCFamilyZhenfa(Structure): @@ -28589,18 +31063,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): @@ -28609,33 +31082,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 #------------------------------------------------------ @@ -28934,6 +31472,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 #------------------------------------------------------ @@ -31480,12 +34130,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): @@ -31505,6 +34215,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): @@ -31513,6 +34229,9 @@ self.AwardItemList = list() self.MemCount = 0 self.MemAwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() return def GetLength(self): @@ -31524,6 +34243,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 @@ -31536,6 +34259,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): @@ -31544,13 +34271,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 @@ -31961,45 +34694,6 @@ return DumpString -class tagMCActBuyCountCTGID(Structure): - _pack_ = 1 - _fields_ = [ - ("CTGID", c_ushort), # 充值表ID - ("Discount", c_ushort), # 折扣力度百分比 - ] - - def __init__(self): - self.Clear() - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.CTGID = 0 - self.Discount = 0 - return - - def GetLength(self): - return sizeof(tagMCActBuyCountCTGID) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 74 购买次数礼包活动信息 //tagMCActBuyCountGiftInfo: - CTGID:%d, - Discount:%d - '''\ - %( - self.CTGID, - self.Discount - ) - return DumpString - - class tagMCActBuyCountGiftInfo(Structure): Head = tagHead() ActNum = 0 #(BYTE ActNum)// 活动编号 @@ -32009,9 +34703,10 @@ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 LimitLV = 0 #(WORD LimitLV)// 限制等级 CTGIDCount = 0 #(BYTE CTGIDCount) - CTGIDInfoList = list() #(vector<tagMCActBuyCountCTGID> CTGIDInfoList)// CTGID信息列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 + 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): @@ -32031,14 +34726,14 @@ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.CTGIDCount): - temCTGIDInfoList = tagMCActBuyCountCTGID() - _pos = temCTGIDInfoList.ReadData(_lpData, _pos) - self.CTGIDInfoList.append(temCTGIDInfoList) + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.CTGIDList.append(value) self.GiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.GiftCount): temBuyCountGiftList = tagMCActBuyCountGift() _pos = temBuyCountGiftList.ReadData(_lpData, _pos) self.BuyCountGiftList.append(temBuyCountGiftList) + self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): @@ -32053,9 +34748,10 @@ self.ResetType = 0 self.LimitLV = 0 self.CTGIDCount = 0 - self.CTGIDInfoList = list() + self.CTGIDList = list() self.GiftCount = 0 self.BuyCountGiftList = list() + self.ShopType = 0 return def GetLength(self): @@ -32068,11 +34764,11 @@ length += 1 length += 2 length += 1 - for i in range(self.CTGIDCount): - length += self.CTGIDInfoList[i].GetLength() + length += 2 * self.CTGIDCount length += 1 for i in range(self.GiftCount): length += self.BuyCountGiftList[i].GetLength() + length += 2 return length @@ -32087,10 +34783,11 @@ data = CommFunc.WriteWORD(data, self.LimitLV) data = CommFunc.WriteBYTE(data, self.CTGIDCount) for i in range(self.CTGIDCount): - data = CommFunc.WriteString(data, self.CTGIDInfoList[i].GetLength(), self.CTGIDInfoList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.CTGIDList[i]) 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): @@ -32103,9 +34800,10 @@ ResetType:%d, LimitLV:%d, CTGIDCount:%d, - CTGIDInfoList:%s, + CTGIDList:%s, GiftCount:%d, - BuyCountGiftList:%s + BuyCountGiftList:%s, + ShopType:%d '''\ %( self.Head.OutputString(), @@ -32118,7 +34816,8 @@ self.CTGIDCount, "...", self.GiftCount, - "..." + "...", + self.ShopType ) return DumpString @@ -34084,6 +36783,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): @@ -34223,6 +37279,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 #------------------------------------------------------ @@ -34702,6 +38115,8 @@ DayNum = 0 #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取 Count = 0 #(BYTE Count)// 奖励物品数 AwardItemList = list() #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表 + CountEx = 0 #(BYTE CountEx)// 额外奖励物品数 + AwardItemListEx = list() #(vector<tagMCActLoginNewItem> AwardItemListEx)// 额外奖励物品列表 data = None def __init__(self): @@ -34716,12 +38131,19 @@ temAwardItemList = tagMCActLoginNewItem() _pos = temAwardItemList.ReadData(_lpData, _pos) self.AwardItemList.append(temAwardItemList) + self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CountEx): + temAwardItemListEx = tagMCActLoginNewItem() + _pos = temAwardItemListEx.ReadData(_lpData, _pos) + self.AwardItemListEx.append(temAwardItemListEx) return _pos def Clear(self): self.DayNum = 0 self.Count = 0 self.AwardItemList = list() + self.CountEx = 0 + self.AwardItemListEx = list() return def GetLength(self): @@ -34730,6 +38152,9 @@ length += 1 for i in range(self.Count): length += self.AwardItemList[i].GetLength() + length += 1 + for i in range(self.CountEx): + length += self.AwardItemListEx[i].GetLength() return length @@ -34739,17 +38164,24 @@ data = CommFunc.WriteBYTE(data, self.Count) for i in range(self.Count): data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.CountEx) + for i in range(self.CountEx): + data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer()) return data def OutputString(self): DumpString = ''' DayNum:%d, Count:%d, - AwardItemList:%s + AwardItemList:%s, + CountEx:%d, + AwardItemListEx:%s '''\ %( self.DayNum, self.Count, + "...", + self.CountEx, "..." ) return DumpString @@ -34763,6 +38195,7 @@ LimitLV = 0 #(WORD LimitLV)// 限制等级 RepSignMoneyType = 0 #(BYTE RepSignMoneyType)// 补签消耗货币类型 RepSignMoneyValue = 0 #(DWORD RepSignMoneyValue)// 补签消耗货币值 + AwardExCTGID = 0 #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励 DayCount = 0 #(BYTE DayCount) AwardDayList = list() #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表 data = None @@ -34782,6 +38215,7 @@ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos) self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.DayCount): temAwardDayList = tagMCActLoginNewDay() @@ -34800,6 +38234,7 @@ self.LimitLV = 0 self.RepSignMoneyType = 0 self.RepSignMoneyValue = 0 + self.AwardExCTGID = 0 self.DayCount = 0 self.AwardDayList = list() return @@ -34813,6 +38248,7 @@ length += 2 length += 1 length += 4 + length += 2 length += 1 for i in range(self.DayCount): length += self.AwardDayList[i].GetLength() @@ -34828,6 +38264,7 @@ data = CommFunc.WriteWORD(data, self.LimitLV) data = CommFunc.WriteBYTE(data, self.RepSignMoneyType) data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue) + data = CommFunc.WriteWORD(data, self.AwardExCTGID) data = CommFunc.WriteBYTE(data, self.DayCount) for i in range(self.DayCount): data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer()) @@ -34842,6 +38279,7 @@ LimitLV:%d, RepSignMoneyType:%d, RepSignMoneyValue:%d, + AwardExCTGID:%d, DayCount:%d, AwardDayList:%s '''\ @@ -34853,6 +38291,7 @@ self.LimitLV, self.RepSignMoneyType, self.RepSignMoneyValue, + self.AwardExCTGID, self.DayCount, "..." ) @@ -34872,7 +38311,8 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("ActNum", c_ubyte), # 活动编号 - ("LoginAward", c_int), # 是否已领取,按天索引0代表第1天记录当天是否已领取 + ("LoginAward", c_int), # 普通奖励领取记录,按天对应二进制位记录是否已领取 + ("LoginAwardEx", c_int), # 额外奖励领取记录,按天对应二进制位记录是否已领取 ] def __init__(self): @@ -34891,6 +38331,7 @@ self.SubCmd = 0x70 self.ActNum = 0 self.LoginAward = 0 + self.LoginAwardEx = 0 return def GetLength(self): @@ -34904,19 +38345,378 @@ Cmd:%s, SubCmd:%s, ActNum:%d, - LoginAward:%d + LoginAward:%d, + LoginAwardEx:%d '''\ %( self.Cmd, self.SubCmd, self.ActNum, - self.LoginAward + self.LoginAward, + self.LoginAwardEx ) return DumpString m_NAtagMCActLoginPlayerInfoNew=tagMCActLoginPlayerInfoNew() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginPlayerInfoNew.Cmd,m_NAtagMCActLoginPlayerInfoNew.SubCmd))] = m_NAtagMCActLoginPlayerInfoNew + + +#------------------------------------------------------ +# AA 88 轮回殿活动信息 #tagMCActLunhuidianInfo + +class tagMCActLunhuidianItem(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(tagMCActLunhuidianItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 88 轮回殿活动信息 //tagMCActLunhuidianInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActLunhuidianAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励记录索引 0~30 + NeedValue = 0 #(DWORD NeedValue)// 奖励所需值 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActLunhuidianItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActLunhuidianItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedValue = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.NeedValue) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedValue:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedValue, + self.Count, + "..." + ) + return DumpString + + +class tagMCActLunhuidianRound(Structure): + RoundType = 0 #(BYTE RoundType)// 轮回类型 + AwardType = 0 #(BYTE AwardType)// 奖励类型 1-消耗货币;2-寻宝次数 + AwardTypeValue = 0 #(DWORD AwardTypeValue)// 奖励类型对应值,消耗货币时为对应的货币类型,寻宝时为对应的寻宝类型 + RoundMax = 0 #(BYTE RoundMax)// 最大可循环轮次 + AwardCount = 0 #(BYTE AwardCount) + AwardList = list() #(vector<tagMCActLunhuidianAward> AwardList)// 每轮奖励列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RoundType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardTypeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardList = tagMCActLunhuidianAward() + _pos = temAwardList.ReadData(_lpData, _pos) + self.AwardList.append(temAwardList) + return _pos + + def Clear(self): + self.RoundType = 0 + self.AwardType = 0 + self.AwardTypeValue = 0 + self.RoundMax = 0 + self.AwardCount = 0 + self.AwardList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 4 + length += 1 + length += 1 + for i in range(self.AwardCount): + length += self.AwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RoundType) + data = CommFunc.WriteBYTE(data, self.AwardType) + data = CommFunc.WriteDWORD(data, self.AwardTypeValue) + data = CommFunc.WriteBYTE(data, self.RoundMax) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + RoundType:%d, + AwardType:%d, + AwardTypeValue:%d, + RoundMax:%d, + AwardCount:%d, + AwardList:%s + '''\ + %( + self.RoundType, + self.AwardType, + self.AwardTypeValue, + self.RoundMax, + self.AwardCount, + "..." + ) + return DumpString + + +class tagMCActLunhuidianInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + RoundCount = 0 #(BYTE RoundCount) + RoundList = list() #(vector<tagMCActLunhuidianRound> RoundList)// 轮回列表,支持多个不同类型轮回同时开启 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x88 + 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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundCount): + temRoundList = tagMCActLunhuidianRound() + _pos = temRoundList.ReadData(_lpData, _pos) + self.RoundList.append(temRoundList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x88 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.ResetType = 0 + self.LimitLV = 0 + self.RoundCount = 0 + self.RoundList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + for i in range(self.RoundCount): + length += self.RoundList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.RoundCount) + for i in range(self.RoundCount): + data = CommFunc.WriteString(data, self.RoundList[i].GetLength(), self.RoundList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + ResetType:%d, + LimitLV:%d, + RoundCount:%d, + RoundList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.ResetType, + self.LimitLV, + self.RoundCount, + "..." + ) + return DumpString + + +m_NAtagMCActLunhuidianInfo=tagMCActLunhuidianInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianInfo.Head.Cmd,m_NAtagMCActLunhuidianInfo.Head.SubCmd))] = m_NAtagMCActLunhuidianInfo + + +#------------------------------------------------------ +# AA 89 轮回殿活动玩家信息 #tagMCActLunhuidianPlayerInfo + +class tagMCActLunhuidianPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("RoundType", c_ubyte), # 轮回类型 + ("CurRound", c_ubyte), # 当前轮次 + ("CurValue", c_int), # 累计值 + ("AwardRecord", c_int), # 当前轮次奖励领奖记录,按奖励索引二进制位存储是否已领取,所有奖励已领取后自动进入下一轮,且重置该奖励状态 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x89 + 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 = 0x89 + self.ActNum = 0 + self.RoundType = 0 + self.CurRound = 0 + self.CurValue = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCActLunhuidianPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 89 轮回殿活动玩家信息 //tagMCActLunhuidianPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + RoundType:%d, + CurRound:%d, + CurValue:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.RoundType, + self.CurRound, + self.CurValue, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCActLunhuidianPlayerInfo=tagMCActLunhuidianPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLunhuidianPlayerInfo.Cmd,m_NAtagMCActLunhuidianPlayerInfo.SubCmd))] = m_NAtagMCActLunhuidianPlayerInfo #------------------------------------------------------ @@ -36371,6 +40171,7 @@ LimitLV = 0 #(WORD LimitLV)// 限制等级 TaskCount = 0 #(BYTE TaskCount) TaskList = list() #(vector<tagMCActTask> TaskList)// 任务列表 + RoundMax = 0 #(BYTE RoundMax)// 最大可循环轮次,当小于等于1时代表不循环 data = None def __init__(self): @@ -36393,6 +40194,7 @@ temTaskList = tagMCActTask() _pos = temTaskList.ReadData(_lpData, _pos) self.TaskList.append(temTaskList) + self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -36408,6 +40210,7 @@ self.LimitLV = 0 self.TaskCount = 0 self.TaskList = list() + self.RoundMax = 0 return def GetLength(self): @@ -36422,6 +40225,7 @@ length += 1 for i in range(self.TaskCount): length += self.TaskList[i].GetLength() + length += 1 return length @@ -36437,6 +40241,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): @@ -36449,7 +40254,8 @@ ResetType:%d, LimitLV:%d, TaskCount:%d, - TaskList:%s + TaskList:%s, + RoundMax:%d '''\ %( self.Head.OutputString(), @@ -36460,7 +40266,8 @@ self.ResetType, self.LimitLV, self.TaskCount, - "..." + "...", + self.RoundMax ) return DumpString @@ -36477,6 +40284,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): @@ -36493,6 +40301,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): @@ -36503,6 +40312,7 @@ self.ActNum = 0 self.AwardCount = 0 self.AwardRecordList = list() + self.RoundNum = 0 return def GetLength(self): @@ -36511,6 +40321,7 @@ length += 1 length += 1 length += 4 * self.AwardCount + length += 1 return length @@ -36521,6 +40332,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): @@ -36528,13 +40340,15 @@ Head:%s, ActNum:%d, AwardCount:%d, - AwardRecordList:%s + AwardRecordList:%s, + RoundNum:%d '''\ %( self.Head.OutputString(), self.ActNum, self.AwardCount, - "..." + "...", + self.RoundNum ) return DumpString @@ -37696,6 +41510,7 @@ ("ItemCount", c_ushort), ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ("LotteryScore", c_int), #当前抽奖积分 ] def __init__(self): @@ -37718,6 +41533,7 @@ self.ItemCount = 0 self.PosNum = 0 self.TotalTimesNow = 0 + self.LotteryScore = 0 return def GetLength(self): @@ -37735,7 +41551,8 @@ ItemID:%d, ItemCount:%d, PosNum:%d, - TotalTimesNow:%d + TotalTimesNow:%d, + LotteryScore:%d '''\ %( self.Cmd, @@ -37745,7 +41562,8 @@ self.ItemID, self.ItemCount, self.PosNum, - self.TotalTimesNow + self.TotalTimesNow, + self.LotteryScore ) return DumpString @@ -37757,7 +41575,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-策划自定义库 @@ -37789,13 +41943,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, @@ -37816,48 +41970,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) @@ -37867,15 +42011,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 @@ -37887,13 +42026,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() @@ -37908,13 +42042,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()) @@ -37928,13 +42057,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, @@ -37944,13 +42068,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, @@ -37960,8 +42079,100 @@ 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 + + +#------------------------------------------------------ +# AA 87 运势活动信息 #tagMCActYunshiInfo + +class tagMCActYunshiInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + TreasureType = 0 #(BYTE TreasureType)// 活动寻宝类型 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x87 + 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.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x87 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.ResetType = 0 + self.LimitLV = 0 + self.TreasureType = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.TreasureType) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + ResetType:%d, + LimitLV:%d, + TreasureType:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.ResetType, + self.LimitLV, + self.TreasureType + ) + return DumpString + + +m_NAtagMCActYunshiInfo=tagMCActYunshiInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActYunshiInfo.Head.Cmd,m_NAtagMCActYunshiInfo.Head.SubCmd))] = m_NAtagMCActYunshiInfo #------------------------------------------------------ @@ -38930,12 +43141,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): @@ -38955,6 +43226,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): @@ -38963,6 +43240,9 @@ self.AwardItemList = list() self.MemCount = 0 self.MemAwardItemList = list() + self.NeedScore = 0 + self.CountEx = 0 + self.AwardItemExList = list() return def GetLength(self): @@ -38974,6 +43254,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 @@ -38986,6 +43270,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): @@ -38994,13 +43282,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 @@ -39017,8 +43311,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) @@ -39043,8 +43335,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() @@ -39071,8 +43361,6 @@ self.JoinEndTime = "" self.IsDayReset = 0 self.ResetType = 0 - self.RankLimitPersonal = 0 - self.RankLimitFamily = 0 self.PersonalBillCount = 0 self.PersonalBillboardInfoList = list() self.FamilyBillCount = 0 @@ -39091,8 +43379,6 @@ length += 5 length += 1 length += 1 - length += 2 - length += 2 length += 1 for i in range(self.PersonalBillCount): length += self.PersonalBillboardInfoList[i].GetLength() @@ -39114,8 +43400,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()) @@ -39136,8 +43420,6 @@ JoinEndTime:%s, IsDayReset:%d, ResetType:%d, - RankLimitPersonal:%d, - RankLimitFamily:%d, PersonalBillCount:%d, PersonalBillboardInfoList:%s, FamilyBillCount:%d, @@ -39154,8 +43436,6 @@ self.JoinEndTime, self.IsDayReset, self.ResetType, - self.RankLimitPersonal, - self.RankLimitFamily, self.PersonalBillCount, "...", self.FamilyBillCount, @@ -39166,6 +43446,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 #------------------------------------------------------ @@ -45834,6 +51024,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): @@ -46794,6 +52216,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): @@ -46854,14 +52458,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): @@ -46877,6 +52705,7 @@ self.NeedValue = 0 self.FreeRewardState = 0 self.ZLRewardState = 0 + self.ZLRewardStateH = 0 return def GetLength(self): @@ -46889,12 +52718,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 @@ -46902,7 +52733,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 @@ -46918,6 +52751,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() @@ -46932,6 +52767,8 @@ self.Head.SubCmd = 0x20 self.ZhanlingType = 0 self.IsActivite = 0 + self.IsActiviteH = 0 + self.Value1 = 0 self.RewardCount = 0 self.RewardList = list() return @@ -46941,6 +52778,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() @@ -46952,6 +52791,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()) @@ -46962,6 +52803,8 @@ Head:%s, ZhanlingType:%d, IsActivite:%d, + IsActiviteH:%d, + Value1:%d, RewardCount:%d, RewardList:%s '''\ @@ -46969,6 +52812,8 @@ self.Head.OutputString(), self.ZhanlingType, self.IsActivite, + self.IsActiviteH, + self.Value1, self.RewardCount, "..." ) @@ -47690,6 +53535,8 @@ LV = 0 #(WORD LV)// 玩家等级 Job = 0 #(BYTE Job)// 玩家职业, 如果是机器人,则职业有值,服务端控制 RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 FightPower = 0 #(DWORD FightPower)// 玩家战力 Relation = 0 #(BYTE Relation)// 关系:0-无,1-好友,2-盟友 IsNeedGold = 0 #(BYTE IsNeedGold)// 是否需要仙玉召唤 @@ -47708,6 +53555,8 @@ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsNeedGold,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -47721,6 +53570,8 @@ self.LV = 0 self.Job = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.FightPower = 0 self.Relation = 0 self.IsNeedGold = 0 @@ -47736,6 +53587,8 @@ length += 1 length += 2 length += 4 + length += 4 + length += 4 length += 1 length += 1 @@ -47750,6 +53603,8 @@ data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteBYTE(data, self.Job) data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) data = CommFunc.WriteDWORD(data, self.FightPower) data = CommFunc.WriteBYTE(data, self.Relation) data = CommFunc.WriteBYTE(data, self.IsNeedGold) @@ -47764,6 +53619,8 @@ LV:%d, Job:%d, RealmLV:%d, + Face:%d, + FacePic:%d, FightPower:%d, Relation:%d, IsNeedGold:%d @@ -47776,6 +53633,8 @@ self.LV, self.Job, self.RealmLV, + self.Face, + self.FacePic, self.FightPower, self.Relation, self.IsNeedGold @@ -50647,6 +56506,7 @@ ("EnterCountWeek", c_int), # 本周总参与次数 ("BuyOpenCountWeek", c_int), # 本周总购买召集次数 ("HighScoreTotalWeek", c_int), # 本周每日最高分累加总分 + ("ZoneID", c_ubyte), # 所属分区ID ] def __init__(self): @@ -50668,6 +56528,7 @@ self.EnterCountWeek = 0 self.BuyOpenCountWeek = 0 self.HighScoreTotalWeek = 0 + self.ZoneID = 0 return def GetLength(self): @@ -50684,7 +56545,8 @@ HighScoreToday:%d, EnterCountWeek:%d, BuyOpenCountWeek:%d, - HighScoreTotalWeek:%d + HighScoreTotalWeek:%d, + ZoneID:%d '''\ %( self.Cmd, @@ -50693,7 +56555,8 @@ self.HighScoreToday, self.EnterCountWeek, self.BuyOpenCountWeek, - self.HighScoreTotalWeek + self.HighScoreTotalWeek, + self.ZoneID ) return DumpString -- Gitblit v1.8.0