From 7a3a8b699f5a0f4f76f9410fcec51cd926ded5d1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 28 四月 2025 11:09:08 +0800 Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(C0 28增加同步玩家仙盟ID) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 4648 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 4,462 insertions(+), 186 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 52fd278..c755a1f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -1747,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 @@ -1759,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 @@ -1766,6 +1770,8 @@ self.NameLen = 0 self.Name = "" self.PlayeJob = 0 + self.Face = 0 + self.FacePic = 0 self.MoneyNum = 0 return @@ -1775,6 +1781,8 @@ length += len(self.Name) length += 1 length += 4 + length += 4 + length += 4 return length @@ -1783,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 @@ -1791,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 @@ -1885,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)//获得途径 @@ -1907,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) @@ -1924,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 @@ -1942,6 +1962,8 @@ length += len(self.Name) length += 4 length += 1 + length += 4 + length += 4 length += 1 length += 4 length += 1 @@ -1961,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) @@ -1979,6 +2003,8 @@ Name:%s, Time:%d, PlayeJob:%d, + Face:%d, + FacePic:%d, MoneyType:%d, MoneyNum:%d, GetWay:%d, @@ -1995,6 +2021,8 @@ self.Name, self.Time, self.PlayeJob, + self.Face, + self.FacePic, self.MoneyType, self.MoneyNum, self.GetWay, @@ -2684,6 +2712,246 @@ #------------------------------------------------------ +# A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo + +class tagGCTagFamilyMember(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//size = NameLen + FamilyLV = 0 #(BYTE FamilyLV)//家族成员等级 + LV = 0 #(WORD LV) + Job = 0 #(BYTE Job)//职业 + Face = 0 #(DWORD Face)//头像 + FacePic = 0 #(DWORD FacePic)//头像外框 + OfficialRank = 0 #(BYTE OfficialRank)//境界 + 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.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.FamilyLV = 0 + self.LV = 0 + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + self.OfficialRank = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.Name) + length += 1 + length += 2 + length += 1 + length += 4 + length += 4 + length += 1 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteBYTE(data, self.FamilyLV) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteBYTE(data, self.OfficialRank) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + Name:%s, + FamilyLV:%d, + LV:%d, + Job:%d, + Face:%d, + FacePic:%d, + OfficialRank:%d, + FightPower:%d, + FightPowerEx:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.Name, + self.FamilyLV, + self.LV, + self.Job, + self.Face, + self.FacePic, + self.OfficialRank, + self.FightPower, + self.FightPowerEx + ) + return DumpString + + +class tagGCTagFamilyInfo(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID) + FamilyName = "" #(char FamilyName[33])//家族名称 + FamilyLV = 0 #(WORD FamilyLV)//家族等级 + BroadcastLen = 0 #(WORD BroadcastLen)//公告 + Broadcast = "" #(String Broadcast)//size = BroadcastLen + MemberCount = 0 #(WORD MemberCount)//人数 + Member = list() #(vector<tagGCTagFamilyMember> Member)//size = MemberCount + FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分 + EmblemID = 0 #(DWORD EmblemID)//徽章ID + ServerID = 0 #(DWORD ServerID)//仙盟区服ID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen) + self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.MemberCount): + temMember = tagGCTagFamilyMember() + _pos = temMember.ReadData(_lpData, _pos) + self.Member.append(temMember) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x13 + self.FamilyID = 0 + self.FamilyName = "" + self.FamilyLV = 0 + self.BroadcastLen = 0 + self.Broadcast = "" + self.MemberCount = 0 + self.Member = list() + self.FightPower = 0 + self.FightPowerEx = 0 + self.EmblemID = 0 + self.ServerID = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + length += 2 + length += 2 + length += len(self.Broadcast) + length += 2 + for i in range(self.MemberCount): + length += self.Member[i].GetLength() + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteString(data, 33, self.FamilyName) + data = CommFunc.WriteWORD(data, self.FamilyLV) + data = CommFunc.WriteWORD(data, self.BroadcastLen) + data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast) + data = CommFunc.WriteWORD(data, self.MemberCount) + for i in range(self.MemberCount): + data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.EmblemID) + data = CommFunc.WriteDWORD(data, self.ServerID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + FamilyName:%s, + FamilyLV:%d, + BroadcastLen:%d, + Broadcast:%s, + MemberCount:%d, + Member:%s, + FightPower:%d, + FightPowerEx:%d, + EmblemID:%d, + ServerID:%d + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.FamilyName, + self.FamilyLV, + self.BroadcastLen, + self.Broadcast, + self.MemberCount, + "...", + self.FightPower, + self.FightPowerEx, + self.EmblemID, + self.ServerID + ) + return DumpString + + +m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo + + +#------------------------------------------------------ #A4 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo class tagtMemberInfo(Structure): @@ -2968,6 +3236,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): @@ -2988,6 +3258,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): @@ -3003,6 +3275,8 @@ self.AddScore = "" self.IsWin = 0 self.Time = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -3018,6 +3292,8 @@ length += 1 length += len(self.AddScore) length += 1 + length += 4 + length += 4 length += 4 return length @@ -3036,6 +3312,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): @@ -3051,7 +3329,9 @@ AddScoreLen:%d, AddScore:%s, IsWin:%d, - Time:%d + Time:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -3065,7 +3345,9 @@ self.AddScoreLen, self.AddScore, self.IsWin, - self.Time + self.Time, + self.Face, + self.FacePic ) return DumpString @@ -3148,6 +3430,8 @@ 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): @@ -3164,6 +3448,8 @@ 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): @@ -3175,6 +3461,8 @@ self.FightPower = 0 self.FightPowerEx = 0 self.Score = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -3184,6 +3472,8 @@ length += 1 length += 2 length += 2 + length += 4 + length += 4 length += 4 length += 4 length += 4 @@ -3200,6 +3490,8 @@ 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): @@ -3211,7 +3503,9 @@ RealmLV:%d, FightPower:%d, FightPowerEx:%d, - Score:%d + Score:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -3221,7 +3515,9 @@ self.RealmLV, self.FightPower, self.FightPowerEx, - self.Score + self.Score, + self.Face, + self.FacePic ) return DumpString @@ -4652,7 +4948,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)//排序依赖的值,比如,战斗力 @@ -4679,7 +4975,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) @@ -4724,7 +5020,7 @@ length += 4 length += 4 length += 33 - length += 33 + length += 65 length += 1 length += 4 length += 4 @@ -4748,7 +5044,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) @@ -5796,6 +6092,8 @@ 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) @@ -5815,6 +6113,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.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.EquipShowIDCount): @@ -5831,6 +6131,8 @@ self.LV = 0 self.Job = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.EquipShowSwitch = 0 self.EquipShowIDCount = 0 self.EquipShowID = list() @@ -5847,6 +6149,8 @@ length += 1 length += 2 length += 4 + length += 4 + length += 4 length += 1 length += 4 * self.EquipShowIDCount @@ -5862,6 +6166,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.EquipShowSwitch) data = CommFunc.WriteBYTE(data, self.EquipShowIDCount) for i in range(self.EquipShowIDCount): @@ -5878,6 +6184,8 @@ LV:%d, Job:%d, RealmLV:%d, + Face:%d, + FacePic:%d, EquipShowSwitch:%d, EquipShowIDCount:%d, EquipShowID:%s @@ -5891,6 +6199,8 @@ self.LV, self.Job, self.RealmLV, + self.Face, + self.FacePic, self.EquipShowSwitch, self.EquipShowIDCount, "..." @@ -5983,6 +6293,8 @@ 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): @@ -5999,6 +6311,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) return _pos def Clear(self): @@ -6010,6 +6324,8 @@ self.LV = 0 self.Job = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -6022,6 +6338,8 @@ length += 2 length += 1 length += 2 + length += 4 + length += 4 return length @@ -6035,6 +6353,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) return data def OutputString(self): @@ -6046,7 +6366,9 @@ Name:%s, LV:%d, Job:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.AddTime, @@ -6056,7 +6378,9 @@ self.Name, self.LV, self.Job, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -7680,6 +8004,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) @@ -7699,6 +8025,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) @@ -7713,6 +8041,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 @@ -7731,6 +8061,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 2 length += len(self.ExData) @@ -7744,6 +8076,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) @@ -7759,6 +8093,8 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, + FacePic:%d, MapID:%d, LineID:%d, NPCID:%d, @@ -7772,6 +8108,8 @@ self.Job, self.LV, self.RealmLV, + self.Face, + self.FacePic, self.MapID, self.LineID, self.NPCID, @@ -8230,6 +8568,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) @@ -8254,6 +8594,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) @@ -8274,6 +8616,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 @@ -8295,6 +8639,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 2 length += len(self.ExData) length += 19 @@ -8311,6 +8657,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) @@ -8329,6 +8677,8 @@ Job:%d, LV:%d, RealmLV:%d, + Face:%d, + FacePic:%d, MapID:%d, LineID:%d, NPCID:%d, @@ -8345,6 +8695,8 @@ self.Job, self.LV, self.RealmLV, + self.Face, + self.FacePic, self.MapID, self.LineID, self.NPCID, @@ -8448,7 +8800,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): @@ -8470,7 +8824,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): @@ -8487,7 +8843,9 @@ self.RobPlayerID = 0 self.RobWorkerCount = 0 self.RobPlayerName = "" + self.RobJob = 0 self.RobFace = 0 + self.RobFacePic = 0 return def GetLength(self): @@ -8505,6 +8863,8 @@ length += 4 length += 1 length += 33 + length += 1 + length += 4 length += 4 return length @@ -8524,7 +8884,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): @@ -8542,7 +8904,9 @@ RobPlayerID:%d, RobWorkerCount:%d, RobPlayerName:%s, - RobFace:%d + RobJob:%d, + RobFace:%d, + RobFacePic:%d '''\ %( self.Index, @@ -8558,7 +8922,9 @@ self.RobPlayerID, self.RobWorkerCount, self.RobPlayerName, - self.RobFace + self.RobJob, + self.RobFace, + self.RobFacePic ) return DumpString @@ -8566,7 +8932,10 @@ 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) + RobValue = 0 #(DWORD RobValue)// 抢劫敌对值 MineCount = 0 #(BYTE MineCount) MineItemList = list() #(vector<tagGCMineItem> MineItemList)// 矿物列表 data = None @@ -8579,7 +8948,10 @@ 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.RobValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.MineCount): temMineItemList = tagGCMineItem() @@ -8590,7 +8962,10 @@ def Clear(self): self.PlayerID = 0 self.PlayerName = "" + self.Job = 0 self.Face = 0 + self.FacePic = 0 + self.RobValue = 0 self.MineCount = 0 self.MineItemList = list() return @@ -8599,6 +8974,9 @@ length = 0 length += 4 length += 33 + length += 1 + length += 4 + length += 4 length += 4 length += 1 for i in range(self.MineCount): @@ -8610,7 +8988,10 @@ 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.WriteDWORD(data, self.RobValue) data = CommFunc.WriteBYTE(data, self.MineCount) for i in range(self.MineCount): data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer()) @@ -8620,14 +9001,20 @@ DumpString = ''' PlayerID:%d, PlayerName:%s, + Job:%d, Face:%d, + FacePic:%d, + RobValue:%d, MineCount:%d, MineItemList:%s '''\ %( self.PlayerID, self.PlayerName, + self.Job, self.Face, + self.FacePic, + self.RobValue, self.MineCount, "..." ) @@ -8723,7 +9110,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): @@ -8737,7 +9126,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): @@ -8746,7 +9137,9 @@ self.RecordTime = 0 self.MineID = 0 self.TagPlayerName = "" + self.TagJob = 0 self.TagFace = 0 + self.TagFacePic = 0 return def GetLength(self): @@ -8756,6 +9149,8 @@ length += 4 length += 2 length += 33 + length += 1 + length += 4 length += 4 return length @@ -8767,7 +9162,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): @@ -8777,7 +9174,9 @@ RecordTime:%d, MineID:%d, TagPlayerName:%s, - TagFace:%d + TagJob:%d, + TagFace:%d, + TagFacePic:%d '''\ %( self.RecordType, @@ -8785,7 +9184,9 @@ self.RecordTime, self.MineID, self.TagPlayerName, - self.TagFace + self.TagJob, + self.TagFace, + self.TagFacePic ) return DumpString @@ -8929,6 +9330,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): @@ -8942,6 +9345,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): @@ -8950,6 +9355,8 @@ self.Job = 0 self.LV = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -8959,6 +9366,8 @@ length += 1 length += 2 length += 1 + length += 4 + length += 4 return length @@ -8969,6 +9378,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): @@ -8977,14 +9388,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 @@ -13134,6 +13549,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)// 战力,求余亿 FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 Value1 = 0 #(DWORD Value1)//值1 @@ -13153,6 +13570,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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -13167,6 +13586,8 @@ self.LV = 0 self.Job = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.FightPower = 0 self.FightPowerEx = 0 self.Value1 = 0 @@ -13186,6 +13607,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 return length @@ -13198,6 +13621,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.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.Value1) @@ -13213,6 +13638,8 @@ LV:%d, Job:%d, RealmLV:%d, + Face:%d, + FacePic:%d, FightPower:%d, FightPowerEx:%d, Value1:%d, @@ -13226,6 +13653,8 @@ self.LV, self.Job, self.RealmLV, + self.Face, + self.FacePic, self.FightPower, self.FightPowerEx, self.Value1, @@ -13532,6 +13961,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)// 战力,求余亿 FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 data = None @@ -13549,6 +13980,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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos @@ -13561,6 +13994,8 @@ self.LV = 0 self.Job = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.FightPower = 0 self.FightPowerEx = 0 return @@ -13576,6 +14011,8 @@ length += 2 length += 4 length += 4 + length += 4 + length += 4 return length @@ -13588,6 +14025,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.WriteDWORD(data, self.FightPowerEx) return data @@ -13601,6 +14040,8 @@ LV:%d, Job:%d, RealmLV:%d, + Face:%d, + FacePic:%d, FightPower:%d, FightPowerEx:%d '''\ @@ -13612,6 +14053,8 @@ self.LV, self.Job, self.RealmLV, + self.Face, + self.FacePic, self.FightPower, self.FightPowerEx ) @@ -13626,6 +14069,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)// 战力,求余亿 FightPowerEx = 0 #(DWORD FightPowerEx)// 战力,整除亿 OfflineValue = 0 #(DWORD OfflineValue)// 离线值:0-在线;1-离线;>1-上次离线时间戳,可用于计算离线多久了;当取不到玩家信息时用1代表已离线; @@ -13646,6 +14091,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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.OfflineValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -13661,6 +14108,8 @@ self.LV = 0 self.Job = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 self.FightPower = 0 self.FightPowerEx = 0 self.OfflineValue = 0 @@ -13682,6 +14131,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 return length @@ -13694,6 +14145,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.WriteDWORD(data, self.FightPowerEx) data = CommFunc.WriteDWORD(data, self.OfflineValue) @@ -13710,6 +14163,8 @@ LV:%d, Job:%d, RealmLV:%d, + Face:%d, + FacePic:%d, FightPower:%d, FightPowerEx:%d, OfflineValue:%d, @@ -13724,6 +14179,8 @@ self.LV, self.Job, self.RealmLV, + self.Face, + self.FacePic, self.FightPower, self.FightPowerEx, self.OfflineValue, @@ -14304,6 +14761,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): @@ -14319,6 +14778,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): @@ -14329,6 +14790,8 @@ self.Job = 0 self.JobLevel = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -14340,6 +14803,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 return length @@ -14352,6 +14817,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): @@ -14362,7 +14829,9 @@ LV:%d, Job:%d, JobLevel:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -14371,7 +14840,9 @@ self.LV, self.Job, self.JobLevel, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -14454,6 +14925,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): @@ -14472,6 +14945,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): @@ -14486,6 +14961,8 @@ self.Job = 0 self.JobLevel = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -14498,6 +14975,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 return length @@ -14511,6 +14990,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): @@ -14522,7 +15003,9 @@ LV:%d, Job:%d, JobLevel:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.Head.OutputString(), @@ -14532,7 +15015,9 @@ self.LV, self.Job, self.JobLevel, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -14983,6 +15468,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 @@ -15003,6 +15490,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) @@ -15018,6 +15507,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 @@ -15034,6 +15525,8 @@ length += 1 length += 1 length += 2 + length += 4 + length += 4 length += 1 length += 4 length += 1 @@ -15051,6 +15544,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) @@ -15067,6 +15562,8 @@ Job:%d, JobLevel:%d, RealmLV:%d, + Face:%d, + FacePic:%d, PlayerState:%d, MapID:%d, LineID:%d @@ -15081,6 +15578,8 @@ self.Job, self.JobLevel, self.RealmLV, + self.Face, + self.FacePic, self.PlayerState, self.MapID, self.LineID @@ -16056,6 +16555,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): @@ -16072,6 +16573,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): @@ -16083,6 +16586,8 @@ self.FightPower = 0 self.FightPowerEx = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 return def GetLength(self): @@ -16095,6 +16600,8 @@ length += 4 length += 4 length += 2 + length += 4 + length += 4 return length @@ -16108,6 +16615,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): @@ -16119,7 +16628,9 @@ LV:%d, FightPower:%d, FightPowerEx:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d '''\ %( self.PlayerID, @@ -16129,7 +16640,9 @@ self.LV, self.FightPower, self.FightPowerEx, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic ) return DumpString @@ -16585,7 +17098,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 @@ -16612,7 +17125,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) @@ -16657,7 +17170,7 @@ length += 4 length += 4 length += 33 - length += 33 + length += 65 length += 1 length += 4 length += 4 @@ -16681,7 +17194,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) @@ -16747,8 +17260,8 @@ class tagGCCrossBillboardInfo(Structure): Head = tagHead() Type = 0 #(BYTE Type)//榜单类型 - GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1 - GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 + GroupValue1 = 0 #(DWORD GroupValue1)// 分组值1 + GroupValue2 = 0 #(DWORD GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) @@ -16764,8 +17277,8 @@ self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupValue1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GroupValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): @@ -16791,8 +17304,8 @@ length = 0 length += self.Head.GetLength() length += 1 - length += 1 - length += 1 + length += 4 + length += 4 length += 4 length += 1 for i in range(self.BillboardCount): @@ -16804,8 +17317,8 @@ data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteBYTE(data, self.Type) - data = CommFunc.WriteBYTE(data, self.GroupValue1) - data = CommFunc.WriteBYTE(data, self.GroupValue2) + data = CommFunc.WriteDWORD(data, self.GroupValue1) + data = CommFunc.WriteDWORD(data, self.GroupValue2) data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) for i in range(self.BillboardCount): @@ -16965,48 +17478,74 @@ # C0 15 跨服排位分区分组信息 #tagGCCrossChampionshipPKZoneGroupInfo class tagGCCrossChampionshipPKBattle(Structure): - _pack_ = 1 - _fields_ = [ - ("BattleNum", c_ubyte), # 对战组编号 1~n - ("WinPlayerID", c_int), # 获胜玩家ID - ("PlayerIDA", c_int), # 玩家IDA - ("PlayerIDB", c_int), # 玩家IDB - ] + BattleNum = 0 #(BYTE BattleNum)// 对战组编号 1~n + WinPlayerID = 0 #(DWORD WinPlayerID)// 获胜玩家ID + PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家IDA + PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家IDB + BattleRetLen = 0 #(BYTE BattleRetLen) + BattleRet = "" #(String BattleRet)// 战斗结果明细 {"playerID":[[第1局胜负,第1局总积分,胜负基础分,hp分,时间分], ...], ...} + data = None def __init__(self): self.Clear() return - def ReadData(self, stringData, _pos=0, _len=0): + def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() + self.BattleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WinPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BattleRetLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BattleRet,_pos = CommFunc.ReadString(_lpData, _pos,self.BattleRetLen) + return _pos def Clear(self): self.BattleNum = 0 self.WinPlayerID = 0 self.PlayerIDA = 0 self.PlayerIDB = 0 + self.BattleRetLen = 0 + self.BattleRet = "" return def GetLength(self): - return sizeof(tagGCCrossChampionshipPKBattle) + length = 0 + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.BattleRet) + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteBYTE(data, self.BattleNum) + data = CommFunc.WriteDWORD(data, self.WinPlayerID) + data = CommFunc.WriteDWORD(data, self.PlayerIDA) + data = CommFunc.WriteDWORD(data, self.PlayerIDB) + data = CommFunc.WriteBYTE(data, self.BattleRetLen) + data = CommFunc.WriteString(data, self.BattleRetLen, self.BattleRet) + return data def OutputString(self): - DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo: + DumpString = ''' BattleNum:%d, WinPlayerID:%d, PlayerIDA:%d, - PlayerIDB:%d + PlayerIDB:%d, + BattleRetLen:%d, + BattleRet:%s '''\ %( self.BattleNum, self.WinPlayerID, self.PlayerIDA, - self.PlayerIDB + self.PlayerIDB, + self.BattleRetLen, + self.BattleRet ) return DumpString @@ -17077,6 +17616,9 @@ FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 RealmLV = 0 #(WORD RealmLV) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + ServerID = 0 #(DWORD ServerID) data = None def __init__(self): @@ -17093,6 +17635,9 @@ 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) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -17104,6 +17649,9 @@ self.FightPower = 0 self.FightPowerEx = 0 self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + self.ServerID = 0 return def GetLength(self): @@ -17116,6 +17664,9 @@ length += 4 length += 4 length += 2 + length += 4 + length += 4 + length += 4 return length @@ -17129,6 +17680,9 @@ 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) + data = CommFunc.WriteDWORD(data, self.ServerID) return data def OutputString(self): @@ -17140,7 +17694,10 @@ LV:%d, FightPower:%d, FightPowerEx:%d, - RealmLV:%d + RealmLV:%d, + Face:%d, + FacePic:%d, + ServerID:%d '''\ %( self.PlayerID, @@ -17150,7 +17707,10 @@ self.LV, self.FightPower, self.FightPowerEx, - self.RealmLV + self.RealmLV, + self.Face, + self.FacePic, + self.ServerID ) return DumpString @@ -17269,6 +17829,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) @@ -17285,6 +17847,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) @@ -17296,6 +17860,8 @@ self.NameLen = 0 self.PlayerName = "" self.Job = 0 + self.Face = 0 + self.FacePic = 0 self.FightPower = 0 self.RealmLV = 0 self.PKScore = 0 @@ -17309,6 +17875,8 @@ length += len(self.PlayerName) length += 1 length += 4 + length += 4 + length += 4 length += 2 length += 4 length += 1 @@ -17321,6 +17889,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) @@ -17333,6 +17903,8 @@ NameLen:%d, PlayerName:%s, Job:%d, + Face:%d, + FacePic:%d, FightPower:%d, RealmLV:%d, PKScore:%d, @@ -17343,6 +17915,8 @@ self.NameLen, self.PlayerName, self.Job, + self.Face, + self.FacePic, self.FightPower, self.RealmLV, self.PKScore, @@ -17440,9 +18014,12 @@ PlayerName = "" #(String PlayerName)// 跨服名字 Job = 0 #(BYTE Job) LV = 0 #(WORD LV) - MaxHP = 0 #(DWORD MaxHP)// 默认满血,求余亿部分 - MaxHPEx = 0 #(DWORD MaxHPEx)// 默认满血,整除亿部分 - MaxProDef = 0 #(DWORD MaxProDef)// 最大护盾 + RealmLV = 0 #(WORD RealmLV)//境界 + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + FightPower = 0 #(DWORD FightPower)//战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分 + ServerID = 0 #(DWORD ServerID) data = None def __init__(self): @@ -17456,9 +18033,12 @@ self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MaxProDef,_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) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -17467,9 +18047,12 @@ self.PlayerName = "" self.Job = 0 self.LV = 0 - self.MaxHP = 0 - self.MaxHPEx = 0 - self.MaxProDef = 0 + self.RealmLV = 0 + self.Face = 0 + self.FacePic = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.ServerID = 0 return def GetLength(self): @@ -17479,6 +18062,9 @@ length += len(self.PlayerName) length += 1 length += 2 + length += 2 + length += 4 + length += 4 length += 4 length += 4 length += 4 @@ -17492,9 +18078,12 @@ 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.MaxHP) - data = CommFunc.WriteDWORD(data, self.MaxHPEx) - data = CommFunc.WriteDWORD(data, self.MaxProDef) + 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.ServerID) return data def OutputString(self): @@ -17504,9 +18093,12 @@ PlayerName:%s, Job:%d, LV:%d, - MaxHP:%d, - MaxHPEx:%d, - MaxProDef:%d + RealmLV:%d, + Face:%d, + FacePic:%d, + FightPower:%d, + FightPowerEx:%d, + ServerID:%d '''\ %( self.PlayerID, @@ -17514,19 +18106,18 @@ self.PlayerName, self.Job, self.LV, - self.MaxHP, - self.MaxHPEx, - self.MaxProDef + self.RealmLV, + self.Face, + self.FacePic, + self.FightPower, + self.FightPowerEx, + self.ServerID ) return DumpString class tagGCCrossRealmPKMatchOK(Structure): Head = tagHead() - RoomID = 0 #(WORD RoomID)// 房间ID - NameLen = 0 #(BYTE NameLen) - PlayerName = "" #(String PlayerName)// 跨服名字 - Number = 0 #(BYTE Number)// 位置编号;1-左,2-右 MatchPlayerCount = 0 #(BYTE MatchPlayerCount) MatchPlayer = list() #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家 data = None @@ -17540,10 +18131,6 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.RoomID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) - self.Number,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.MatchPlayerCount): temMatchPlayer = tagGCCrossRealmPKMatchPlayer() @@ -17556,10 +18143,6 @@ self.Head.Clear() self.Head.Cmd = 0xC0 self.Head.SubCmd = 0x01 - self.RoomID = 0 - self.NameLen = 0 - self.PlayerName = "" - self.Number = 0 self.MatchPlayerCount = 0 self.MatchPlayer = list() return @@ -17567,10 +18150,6 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 2 - length += 1 - length += len(self.PlayerName) - length += 1 length += 1 for i in range(self.MatchPlayerCount): length += self.MatchPlayer[i].GetLength() @@ -17580,10 +18159,6 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.RoomID) - data = CommFunc.WriteBYTE(data, self.NameLen) - data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) - data = CommFunc.WriteBYTE(data, self.Number) data = CommFunc.WriteBYTE(data, self.MatchPlayerCount) for i in range(self.MatchPlayerCount): data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer()) @@ -17592,19 +18167,11 @@ def OutputString(self): DumpString = ''' Head:%s, - RoomID:%d, - NameLen:%d, - PlayerName:%s, - Number:%d, MatchPlayerCount:%d, MatchPlayer:%s '''\ %( self.Head.OutputString(), - self.RoomID, - self.NameLen, - self.PlayerName, - self.Number, self.MatchPlayerCount, "..." ) @@ -18198,6 +18765,1838 @@ m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo + + +#------------------------------------------------------ +# C0 24 仙盟攻城战活动信息 #tagGCFamilyGCZActInfo + +class tagGCFamilyGCZActFamily(Structure): + FamilyID = 0 #(DWORD FamilyID) + Name = "" #(char Name[33])//参与仙盟名字 + LV = 0 #(BYTE LV)//仙盟等级 + ServerID = 0 #(DWORD ServerID)//仙盟所属区服ID + EmblemID = 0 #(DWORD EmblemID)//徽章ID + FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分 + LeaderID = 0 #(DWORD LeaderID)//盟主ID + LeaderName = "" #(char LeaderName[33])//盟主名 + LeaderFace = 0 #(DWORD LeaderFace) + LeaderFacePic = 0 #(DWORD LeaderFacePic) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LeaderName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.LeaderFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LeaderFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.FamilyID = 0 + self.Name = "" + self.LV = 0 + self.ServerID = 0 + self.EmblemID = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.LeaderID = 0 + self.LeaderName = "" + self.LeaderFace = 0 + self.LeaderFacePic = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 33 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteBYTE(data, self.LV) + data = CommFunc.WriteDWORD(data, self.ServerID) + data = CommFunc.WriteDWORD(data, self.EmblemID) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.LeaderID) + data = CommFunc.WriteString(data, 33, self.LeaderName) + data = CommFunc.WriteDWORD(data, self.LeaderFace) + data = CommFunc.WriteDWORD(data, self.LeaderFacePic) + return data + + def OutputString(self): + DumpString = ''' + FamilyID:%d, + Name:%s, + LV:%d, + ServerID:%d, + EmblemID:%d, + FightPower:%d, + FightPowerEx:%d, + LeaderID:%d, + LeaderName:%s, + LeaderFace:%d, + LeaderFacePic:%d + '''\ + %( + self.FamilyID, + self.Name, + self.LV, + self.ServerID, + self.EmblemID, + self.FightPower, + self.FightPowerEx, + self.LeaderID, + self.LeaderName, + self.LeaderFace, + self.LeaderFacePic + ) + return DumpString + + +class tagGCFamilyGCZActInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + ZoneID = 0 #(BYTE ZoneID)// 活动分区ID,公示期为0 + ActID = 0 #(DWORD ActID)// 活动ID,代表某一次活动的唯一ID,前端如果有活动相关的本地记录可以通过验证此ID变更进行重置 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + JoinFamilyCnt = 0 #(BYTE JoinFamilyCnt)// 参与仙盟数 + ActFlowID = 0 #(WORD ActFlowID)// 活动流程ID,对应H.活动时间流程表中的编号,前端根据跨服时间自行计算当前所处流程状态 + GuessTemplateID = 0 #(WORD GuessTemplateID)// 竞猜奖励模版,对应H.活动竞猜表,前端自行读表展示 + PersonalTemplateID = 0 #(WORD PersonalTemplateID)// 个人伤害排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 + FamilyTemplateID = 0 #(WORD FamilyTemplateID)// 仙盟积分排行奖励模版,对应H.活动榜单奖励模版表,前端自行读表展示 + StateError = 0 #(DWORD StateError)// 活动流程状态是否异常,如果不为0代表活动已异常,前端自行决定是不显示活动还是活动页面做提示 + FamilyCount = 0 #(BYTE FamilyCount) + ActFamilyList = list() #(vector<tagGCFamilyGCZActFamily> ActFamilyList)//本分区参与的仙盟名单 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x24 + 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.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.JoinFamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ActFlowID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GuessTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PersonalTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FamilyTemplateID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.StateError,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyCount): + temActFamilyList = tagGCFamilyGCZActFamily() + _pos = temActFamilyList.ReadData(_lpData, _pos) + self.ActFamilyList.append(temActFamilyList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x24 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.ZoneID = 0 + self.ActID = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinFamilyCnt = 0 + self.ActFlowID = 0 + self.GuessTemplateID = 0 + self.PersonalTemplateID = 0 + self.FamilyTemplateID = 0 + self.StateError = 0 + self.FamilyCount = 0 + self.ActFamilyList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 4 + length += 10 + length += 10 + length += 1 + length += 2 + length += 2 + length += 2 + length += 2 + length += 4 + length += 1 + for i in range(self.FamilyCount): + length += self.ActFamilyList[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.ZoneID) + data = CommFunc.WriteDWORD(data, self.ActID) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.JoinFamilyCnt) + data = CommFunc.WriteWORD(data, self.ActFlowID) + data = CommFunc.WriteWORD(data, self.GuessTemplateID) + data = CommFunc.WriteWORD(data, self.PersonalTemplateID) + data = CommFunc.WriteWORD(data, self.FamilyTemplateID) + data = CommFunc.WriteDWORD(data, self.StateError) + data = CommFunc.WriteBYTE(data, self.FamilyCount) + for i in range(self.FamilyCount): + data = CommFunc.WriteString(data, self.ActFamilyList[i].GetLength(), self.ActFamilyList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + ZoneID:%d, + ActID:%d, + StartDate:%s, + EndtDate:%s, + JoinFamilyCnt:%d, + ActFlowID:%d, + GuessTemplateID:%d, + PersonalTemplateID:%d, + FamilyTemplateID:%d, + StateError:%d, + FamilyCount:%d, + ActFamilyList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.ZoneID, + self.ActID, + self.StartDate, + self.EndtDate, + self.JoinFamilyCnt, + self.ActFlowID, + self.GuessTemplateID, + self.PersonalTemplateID, + self.FamilyTemplateID, + self.StateError, + self.FamilyCount, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZActInfo=tagGCFamilyGCZActInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZActInfo.Head.Cmd,m_NAtagGCFamilyGCZActInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZActInfo + + +#------------------------------------------------------ +# C0 29 仙盟攻城战城池战斗信息 #tagGCFamilyGCZBatCityInfo + +class tagGCFamilyGCZBatCityInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CityID", c_int), #城池ID + ("CityLV", c_ubyte), #城池等级 + ("FamilyID", c_int), #所属仙盟ID,可能为0 + ("GuardID", c_int), #当前防守成员ID,为0时表示没有防守成员了,城池已被击毁 + ("HP", c_int), #防守成员剩余生命,求余亿部分,剩余生命为0时代表该防守成员被击败 + ("HPEx", c_int), #防守成员剩余生命,整除亿部分 + ("HPMax", c_int), #防守成员最大生命,求余亿部分 + ("HPMaxEx", c_int), #防守成员最大生命,整除亿部分 + ("AtkPlayerID", c_int), #发起攻击的玩家ID,可能为0,判断是否自己的ID进行相应的攻击表现 + ("AtkRet", c_ubyte), #攻击结果,仅在攻击玩家ID不为0时有效,0--成功;1-目标已被击杀;2-城池已被摧毁;3-其他 + ("KillCnt", c_ubyte), #本次攻击击杀防守人员数 + ("HurtValue", c_int), #伤害飘血,求余亿部分 + ("HurtValueEx", c_int), #伤害飘血,整除亿部分 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x29 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x29 + self.CityID = 0 + self.CityLV = 0 + self.FamilyID = 0 + self.GuardID = 0 + self.HP = 0 + self.HPEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.AtkPlayerID = 0 + self.AtkRet = 0 + self.KillCnt = 0 + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatCityInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 29 仙盟攻城战城池战斗信息 //tagGCFamilyGCZBatCityInfo: + Cmd:%s, + SubCmd:%s, + CityID:%d, + CityLV:%d, + FamilyID:%d, + GuardID:%d, + HP:%d, + HPEx:%d, + HPMax:%d, + HPMaxEx:%d, + AtkPlayerID:%d, + AtkRet:%d, + KillCnt:%d, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CityID, + self.CityLV, + self.FamilyID, + self.GuardID, + self.HP, + self.HPEx, + self.HPMax, + self.HPMaxEx, + self.AtkPlayerID, + self.AtkRet, + self.KillCnt, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +m_NAtagGCFamilyGCZBatCityInfo=tagGCFamilyGCZBatCityInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatCityInfo.Cmd,m_NAtagGCFamilyGCZBatCityInfo.SubCmd))] = m_NAtagGCFamilyGCZBatCityInfo + + +#------------------------------------------------------ +# C0 25 仙盟攻城战轮次分组信息 #tagGCFamilyGCZBatGroupInfo + +class tagGCFamilyGCZBatGroup(Structure): + GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A + FamilyIDCnt = 0 #(BYTE FamilyIDCnt) + FamilyIDList = list() #(vector<DWORD> FamilyIDList)// 仙盟ID列表,前端可以通过判断参与的仙盟ID是否在某个分组里面验证有没有战场参赛资格 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FamilyIDCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyIDCnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.FamilyIDList.append(value) + return _pos + + def Clear(self): + self.GroupNum = 0 + self.FamilyIDCnt = 0 + self.FamilyIDList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 4 * self.FamilyIDCnt + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GroupNum) + data = CommFunc.WriteBYTE(data, self.FamilyIDCnt) + for i in range(self.FamilyIDCnt): + data = CommFunc.WriteDWORD(data, self.FamilyIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + GroupNum:%d, + FamilyIDCnt:%d, + FamilyIDList:%s + '''\ + %( + self.GroupNum, + self.FamilyIDCnt, + "..." + ) + return DumpString + + +class tagGCFamilyGCZBat(Structure): + BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级; + GroupCnt = 0 #(BYTE GroupCnt)// 分组数 + GroupList = list() #(vector<tagGCFamilyGCZBatGroup> GroupList)// 分组列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GroupCnt): + temGroupList = tagGCFamilyGCZBatGroup() + _pos = temGroupList.ReadData(_lpData, _pos) + self.GroupList.append(temGroupList) + return _pos + + def Clear(self): + self.BatType = 0 + self.GroupCnt = 0 + self.GroupList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.GroupCnt): + length += self.GroupList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.BatType) + data = CommFunc.WriteBYTE(data, self.GroupCnt) + for i in range(self.GroupCnt): + data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + BatType:%d, + GroupCnt:%d, + GroupList:%s + '''\ + %( + self.BatType, + self.GroupCnt, + "..." + ) + return DumpString + + +class tagGCFamilyGCZBatGroupInfo(Structure): + Head = tagHead() + RoundNum = 0 #(BYTE RoundNum)// 第x轮的分组,从1开始,没有在对应轮次战场分组里的视为没有该轮次的参赛资格 + BatTypeCnt = 0 #(BYTE BatTypeCnt)// 战场类型数 + BatList = list() #(vector<tagGCFamilyGCZBat> BatList)//战场列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x25 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BatTypeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BatTypeCnt): + temBatList = tagGCFamilyGCZBat() + _pos = temBatList.ReadData(_lpData, _pos) + self.BatList.append(temBatList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x25 + self.RoundNum = 0 + self.BatTypeCnt = 0 + self.BatList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.BatTypeCnt): + length += self.BatList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RoundNum) + data = CommFunc.WriteBYTE(data, self.BatTypeCnt) + for i in range(self.BatTypeCnt): + data = CommFunc.WriteString(data, self.BatList[i].GetLength(), self.BatList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RoundNum:%d, + BatTypeCnt:%d, + BatList:%s + '''\ + %( + self.Head.OutputString(), + self.RoundNum, + self.BatTypeCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZBatGroupInfo=tagGCFamilyGCZBatGroupInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatGroupInfo.Head.Cmd,m_NAtagGCFamilyGCZBatGroupInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatGroupInfo + + +#------------------------------------------------------ +# C0 30 仙盟攻城战战斗战报 #tagGCFamilyGCZBatReport + +class tagGCFamilyGCZBatRepHurt(Structure): + _pack_ = 1 + _fields_ = [ + ("TagFamilyID", c_int), #目标仙盟ID + ("HurtValue", c_int), #输出伤害,求余亿部分 + ("HurtValueEx", 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.TagFamilyID = 0 + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatRepHurt) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 30 仙盟攻城战战斗战报 //tagGCFamilyGCZBatReport: + TagFamilyID:%d, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.TagFamilyID, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagGCFamilyGCZBatReport(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID)// 战报仙盟ID + DefRepCnt = 0 #(BYTE DefRepCnt) + DefRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> DefRepList)// 防守战报 + AtkRepCnt = 0 #(BYTE AtkRepCnt) + AtkRepList = list() #(vector<tagGCFamilyGCZBatRepHurt> AtkRepList)// 进攻战报 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x30 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DefRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DefRepCnt): + temDefRepList = tagGCFamilyGCZBatRepHurt() + _pos = temDefRepList.ReadData(_lpData, _pos) + self.DefRepList.append(temDefRepList) + self.AtkRepCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AtkRepCnt): + temAtkRepList = tagGCFamilyGCZBatRepHurt() + _pos = temAtkRepList.ReadData(_lpData, _pos) + self.AtkRepList.append(temAtkRepList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x30 + self.FamilyID = 0 + self.DefRepCnt = 0 + self.DefRepList = list() + self.AtkRepCnt = 0 + self.AtkRepList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.DefRepCnt): + length += self.DefRepList[i].GetLength() + length += 1 + for i in range(self.AtkRepCnt): + length += self.AtkRepList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.DefRepCnt) + for i in range(self.DefRepCnt): + data = CommFunc.WriteString(data, self.DefRepList[i].GetLength(), self.DefRepList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AtkRepCnt) + for i in range(self.AtkRepCnt): + data = CommFunc.WriteString(data, self.AtkRepList[i].GetLength(), self.AtkRepList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + DefRepCnt:%d, + DefRepList:%s, + AtkRepCnt:%d, + AtkRepList:%s + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.DefRepCnt, + "...", + self.AtkRepCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZBatReport=tagGCFamilyGCZBatReport() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatReport.Head.Cmd,m_NAtagGCFamilyGCZBatReport.Head.SubCmd))] = m_NAtagGCFamilyGCZBatReport + + +#------------------------------------------------------ +# C0 28 仙盟攻城战城池场景信息 #tagGCFamilyGCZBatSceneInfo + +class tagGCFamilyGCZBatScenePlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + Name = "" #(char Name[33]) + Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face) + FacePic = 0 #(DWORD FacePic) + FamilyID = 0 #(DWORD FamilyID)//所属仙盟ID + 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.Name,_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.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.Name = "" + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + self.FamilyID = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.FacePic) + data = CommFunc.WriteDWORD(data, self.FamilyID) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + Name:%s, + Job:%d, + Face:%d, + FacePic:%d, + FamilyID:%d + '''\ + %( + self.PlayerID, + self.Name, + self.Job, + self.Face, + self.FacePic, + self.FamilyID + ) + return DumpString + + +class tagGCFamilyGCZBatSceneHurt(Structure): + _pack_ = 1 + _fields_ = [ + ("CityID", c_int), #被攻击的城池ID + ("HurtValue", c_int), #伤害飘血,求余亿部分 + ("HurtValueEx", 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.CityID = 0 + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatSceneHurt) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo: + CityID:%d, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.CityID, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagGCFamilyGCZBatSceneCity(Structure): + _pack_ = 1 + _fields_ = [ + ("CityID", c_int), #城池ID + ("CityLV", c_ubyte), #城池等级 + ("FamilyID", c_int), #所属仙盟ID,可能为0 + ("Rank", c_ubyte), #当前名次,从1开始 + ("HP", c_int), #剩余生命,求余亿部分,剩余生命为0时代表被摧毁 + ("HPEx", c_int), #剩余生命,整除亿部分 + ("HPMax", c_int), #最大生命,求余亿部分 + ("HPMaxEx", c_int), #最大生命,整除亿部分 + ("LastAtkedTime", 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.CityID = 0 + self.CityLV = 0 + self.FamilyID = 0 + self.Rank = 0 + self.HP = 0 + self.HPEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.LastAtkedTime = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZBatSceneCity) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 28 仙盟攻城战城池场景信息 //tagGCFamilyGCZBatSceneInfo: + CityID:%d, + CityLV:%d, + FamilyID:%d, + Rank:%d, + HP:%d, + HPEx:%d, + HPMax:%d, + HPMaxEx:%d, + LastAtkedTime:%d + '''\ + %( + self.CityID, + self.CityLV, + self.FamilyID, + self.Rank, + self.HP, + self.HPEx, + self.HPMax, + self.HPMaxEx, + self.LastAtkedTime + ) + return DumpString + + +class tagGCFamilyGCZBatSceneInfo(Structure): + Head = tagHead() + BatType = 0 #(BYTE BatType)// 战场类型 1-初级;2-中级;3-高级; + GroupNum = 0 #(BYTE GroupNum)// 分组编号,从1开始,对应A + TopFamilyID = 0 #(DWORD TopFamilyID)// 伤害第一仙盟ID + TopLeaderID = 0 #(DWORD TopLeaderID)// 伤害第一盟主ID + TopPlayerID = 0 #(DWORD TopPlayerID)// 伤害第一玩家ID + TopPlayerFamilyID = 0 #(DWORD TopPlayerFamilyID)// 伤害第一玩家仙盟ID + AtkPlayerID = 0 #(DWORD AtkPlayerID)// 发起攻击的玩家,可能为0,仅技能攻击时通知,普攻时仅通知血量等信息 + AtkType = 0 #(BYTE AtkType)// 攻击类型,有发起攻击的玩家时有效 + KillCnt = 0 #(BYTE KillCnt)// 本次攻击累计击杀数,有发起攻击的玩家时有效 + HurtCnt = 0 #(BYTE HurtCnt) + HurtList = list() #(vector<tagGCFamilyGCZBatSceneHurt> HurtList)//本次攻击伤血信息,有发起攻击的玩家时有效 + CityCnt = 0 #(BYTE CityCnt) + CityList = list() #(vector<tagGCFamilyGCZBatSceneCity> CityList)// 城池信息,仅通知变化的城池 + PlayerCnt = 0 #(BYTE PlayerCnt) + PlayerInfoList = list() #(vector<tagGCFamilyGCZBatScenePlayer> PlayerInfoList)// 场景展示所需要用到的玩家信息,如第一玩家、使用技能玩家 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x28 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.BatType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TopFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopLeaderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TopPlayerFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AtkPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AtkType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.KillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HurtCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HurtCnt): + temHurtList = tagGCFamilyGCZBatSceneHurt() + _pos = temHurtList.ReadData(_lpData, _pos) + self.HurtList.append(temHurtList) + self.CityCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CityCnt): + temCityList = tagGCFamilyGCZBatSceneCity() + _pos = temCityList.ReadData(_lpData, _pos) + self.CityList.append(temCityList) + self.PlayerCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCnt): + temPlayerInfoList = tagGCFamilyGCZBatScenePlayer() + _pos = temPlayerInfoList.ReadData(_lpData, _pos) + self.PlayerInfoList.append(temPlayerInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x28 + self.BatType = 0 + self.GroupNum = 0 + self.TopFamilyID = 0 + self.TopLeaderID = 0 + self.TopPlayerID = 0 + self.TopPlayerFamilyID = 0 + self.AtkPlayerID = 0 + self.AtkType = 0 + self.KillCnt = 0 + self.HurtCnt = 0 + self.HurtList = list() + self.CityCnt = 0 + self.CityList = list() + self.PlayerCnt = 0 + self.PlayerInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + length += 1 + length += 1 + for i in range(self.HurtCnt): + length += self.HurtList[i].GetLength() + length += 1 + for i in range(self.CityCnt): + length += self.CityList[i].GetLength() + length += 1 + for i in range(self.PlayerCnt): + length += self.PlayerInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BatType) + data = CommFunc.WriteBYTE(data, self.GroupNum) + data = CommFunc.WriteDWORD(data, self.TopFamilyID) + data = CommFunc.WriteDWORD(data, self.TopLeaderID) + data = CommFunc.WriteDWORD(data, self.TopPlayerID) + data = CommFunc.WriteDWORD(data, self.TopPlayerFamilyID) + data = CommFunc.WriteDWORD(data, self.AtkPlayerID) + data = CommFunc.WriteBYTE(data, self.AtkType) + data = CommFunc.WriteBYTE(data, self.KillCnt) + data = CommFunc.WriteBYTE(data, self.HurtCnt) + for i in range(self.HurtCnt): + data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.CityCnt) + for i in range(self.CityCnt): + data = CommFunc.WriteString(data, self.CityList[i].GetLength(), self.CityList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.PlayerCnt) + for i in range(self.PlayerCnt): + data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + BatType:%d, + GroupNum:%d, + TopFamilyID:%d, + TopLeaderID:%d, + TopPlayerID:%d, + TopPlayerFamilyID:%d, + AtkPlayerID:%d, + AtkType:%d, + KillCnt:%d, + HurtCnt:%d, + HurtList:%s, + CityCnt:%d, + CityList:%s, + PlayerCnt:%d, + PlayerInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.BatType, + self.GroupNum, + self.TopFamilyID, + self.TopLeaderID, + self.TopPlayerID, + self.TopPlayerFamilyID, + self.AtkPlayerID, + self.AtkType, + self.KillCnt, + self.HurtCnt, + "...", + self.CityCnt, + "...", + self.PlayerCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZBatSceneInfo=tagGCFamilyGCZBatSceneInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZBatSceneInfo.Head.Cmd,m_NAtagGCFamilyGCZBatSceneInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZBatSceneInfo + + +#------------------------------------------------------ +# C0 26 仙盟攻城战大本营信息 #tagGCFamilyGCZCampInfo + +class tagGCFamilyGCZCampMem(Structure): + PlayerID = 0 #(DWORD PlayerID) + Name = "" #(char Name[33])//参与玩家名字 + FamilyLV = 0 #(BYTE FamilyLV)//参与时的家族职位 + Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face)//基本脸型 + FacePic = 0 #(DWORD FacePic)//头像框 + FightPower = 0 #(DWORD FightPower)//战力,求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力,整除亿部分 + HP = 0 #(DWORD HP)//剩余生命,求余亿部分 + HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分 + HPMax = 0 #(DWORD HPMax)//最大生命,求余亿部分 + HPMaxEx = 0 #(DWORD HPMaxEx)//最大生命,整除亿部分 + TotalHurt = 0 #(DWORD TotalHurt)//活动总伤害,求余亿部分,如果不在榜上则读该值 + TotalHurtEx = 0 #(DWORD TotalHurtEx)//活动总伤害,整除亿部分 + 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.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + 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.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalHurt,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalHurtEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.Name = "" + self.FamilyLV = 0 + self.Job = 0 + self.Face = 0 + self.FacePic = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.HP = 0 + self.HPEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.TotalHurt = 0 + self.TotalHurtEx = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + 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.PlayerID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteBYTE(data, self.FamilyLV) + 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.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteDWORD(data, self.HPMax) + data = CommFunc.WriteDWORD(data, self.HPMaxEx) + data = CommFunc.WriteDWORD(data, self.TotalHurt) + data = CommFunc.WriteDWORD(data, self.TotalHurtEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + Name:%s, + FamilyLV:%d, + Job:%d, + Face:%d, + FacePic:%d, + FightPower:%d, + FightPowerEx:%d, + HP:%d, + HPEx:%d, + HPMax:%d, + HPMaxEx:%d, + TotalHurt:%d, + TotalHurtEx:%d + '''\ + %( + self.PlayerID, + self.Name, + self.FamilyLV, + self.Job, + self.Face, + self.FacePic, + self.FightPower, + self.FightPowerEx, + self.HP, + self.HPEx, + self.HPMax, + self.HPMaxEx, + self.TotalHurt, + self.TotalHurtEx + ) + return DumpString + + +class tagGCFamilyGCZCampRound(Structure): + _pack_ = 1 + _fields_ = [ + ("RoundNum", c_ubyte), #轮次编号,从1开始 + ("BatType", c_ubyte), #所在战场类型 + ("GroupNum", c_ubyte), #所在分组编号 + ("Rank", c_ubyte), #本轮排名 + ("Score", c_ushort), #本轮积分,总积分为所有轮次累加 + ("UpdownState", c_ubyte), #本轮结算晋级降级状态:0-未处理,1-降级;2-保级;3-晋级,即本轮的晋降级状态决定下一轮的战场类型 + ] + + 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.RoundNum = 0 + self.BatType = 0 + self.GroupNum = 0 + self.Rank = 0 + self.Score = 0 + self.UpdownState = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZCampRound) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 26 仙盟攻城战大本营信息 //tagGCFamilyGCZCampInfo: + RoundNum:%d, + BatType:%d, + GroupNum:%d, + Rank:%d, + Score:%d, + UpdownState:%d + '''\ + %( + self.RoundNum, + self.BatType, + self.GroupNum, + self.Rank, + self.Score, + self.UpdownState + ) + return DumpString + + +class tagGCFamilyGCZCampInfo(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID)//所在活动仙盟ID,可能不是玩家当前的仙盟ID,活动以该ID为准 + CampLV = 0 #(WORD CampLV)//大本营当前等级 + CampExp = 0 #(DWORD CampExp)//大本营当前经验 + CityLV = 0 #(WORD CityLV)//城池属性等级,开战后可能与当前大本营等级不一样 + HPBase = 0 #(DWORD HPBase)//基础生命,求余亿部分 + HPBaseEx = 0 #(DWORD HPBaseEx)//基础生命,整除亿部分 + HPMax = 0 #(DWORD HPMax)//总生命,求余亿部分 + HPMaxEx = 0 #(DWORD HPMaxEx)//总大生命,整除亿部分 + HP = 0 #(DWORD HP)//剩余生命,求余亿部分 + HPEx = 0 #(DWORD HPEx)//剩余生命,整除亿部分 + RoundCnt = 0 #(BYTE RoundCnt) + RoundInfoList = list() #(vector<tagGCFamilyGCZCampRound> RoundInfoList)//仙盟轮次汇总信息 + DefMemCnt = 0 #(BYTE DefMemCnt) + DefMemList = list() #(vector<tagGCFamilyGCZCampMem> DefMemList)//防守成员列表,有同步则差异更新,没有在防守成员里的视为没有参与资格 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CampLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.CampExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CityLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.HPBase,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPBaseEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMax,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPMaxEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundCnt): + temRoundInfoList = tagGCFamilyGCZCampRound() + _pos = temRoundInfoList.ReadData(_lpData, _pos) + self.RoundInfoList.append(temRoundInfoList) + self.DefMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DefMemCnt): + temDefMemList = tagGCFamilyGCZCampMem() + _pos = temDefMemList.ReadData(_lpData, _pos) + self.DefMemList.append(temDefMemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x26 + self.FamilyID = 0 + self.CampLV = 0 + self.CampExp = 0 + self.CityLV = 0 + self.HPBase = 0 + self.HPBaseEx = 0 + self.HPMax = 0 + self.HPMaxEx = 0 + self.HP = 0 + self.HPEx = 0 + self.RoundCnt = 0 + self.RoundInfoList = list() + self.DefMemCnt = 0 + self.DefMemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 4 + length += 2 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + for i in range(self.RoundCnt): + length += self.RoundInfoList[i].GetLength() + length += 1 + for i in range(self.DefMemCnt): + length += self.DefMemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteWORD(data, self.CampLV) + data = CommFunc.WriteDWORD(data, self.CampExp) + data = CommFunc.WriteWORD(data, self.CityLV) + data = CommFunc.WriteDWORD(data, self.HPBase) + data = CommFunc.WriteDWORD(data, self.HPBaseEx) + data = CommFunc.WriteDWORD(data, self.HPMax) + data = CommFunc.WriteDWORD(data, self.HPMaxEx) + data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteBYTE(data, self.RoundCnt) + for i in range(self.RoundCnt): + data = CommFunc.WriteString(data, self.RoundInfoList[i].GetLength(), self.RoundInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.DefMemCnt) + for i in range(self.DefMemCnt): + data = CommFunc.WriteString(data, self.DefMemList[i].GetLength(), self.DefMemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + CampLV:%d, + CampExp:%d, + CityLV:%d, + HPBase:%d, + HPBaseEx:%d, + HPMax:%d, + HPMaxEx:%d, + HP:%d, + HPEx:%d, + RoundCnt:%d, + RoundInfoList:%s, + DefMemCnt:%d, + DefMemList:%s + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.CampLV, + self.CampExp, + self.CityLV, + self.HPBase, + self.HPBaseEx, + self.HPMax, + self.HPMaxEx, + self.HP, + self.HPEx, + self.RoundCnt, + "...", + self.DefMemCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZCampInfo=tagGCFamilyGCZCampInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZCampInfo.Head.Cmd,m_NAtagGCFamilyGCZCampInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZCampInfo + + +#------------------------------------------------------ +# C0 27 仙盟攻城战成员贡献值信息 #tagGCFamilyGCZContributionInfo + +class tagGCFamilyGCZContribution(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), + ("ContributionValue", c_int), #贡献值 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.PlayerID = 0 + self.ContributionValue = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZContribution) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 27 仙盟攻城战成员贡献值信息 //tagGCFamilyGCZContributionInfo: + PlayerID:%d, + ContributionValue:%d + '''\ + %( + self.PlayerID, + self.ContributionValue + ) + return DumpString + + +class tagGCFamilyGCZContributionInfo(Structure): + Head = tagHead() + ContriCnt = 0 #(BYTE ContriCnt) + ContriList = list() #(vector<tagGCFamilyGCZContribution> ContriList)//成员贡献值列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x27 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ContriCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ContriCnt): + temContriList = tagGCFamilyGCZContribution() + _pos = temContriList.ReadData(_lpData, _pos) + self.ContriList.append(temContriList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x27 + self.ContriCnt = 0 + self.ContriList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.ContriCnt): + length += self.ContriList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ContriCnt) + for i in range(self.ContriCnt): + data = CommFunc.WriteString(data, self.ContriList[i].GetLength(), self.ContriList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ContriCnt:%d, + ContriList:%s + '''\ + %( + self.Head.OutputString(), + self.ContriCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZContributionInfo=tagGCFamilyGCZContributionInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZContributionInfo.Head.Cmd,m_NAtagGCFamilyGCZContributionInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZContributionInfo + + +#------------------------------------------------------ +# C0 31 仙盟攻城战分组仙盟成员伤害明细 #tagGCFamilyGCZGroupFamilyMemHurtInfo + +class tagGCFamilyGCZGroupFamilyMemHurt(Structure): + PlayerID = 0 #(DWORD PlayerID) + Name = "" #(char Name[33])//参与玩家名字 + HurtValue = 0 #(DWORD HurtValue)//伤害,求余亿部分 + HurtValueEx = 0 #(DWORD HurtValueEx)//伤害,整除亿部分 + 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.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.Name = "" + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteDWORD(data, self.HurtValue) + data = CommFunc.WriteDWORD(data, self.HurtValueEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + Name:%s, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.PlayerID, + self.Name, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagGCFamilyGCZGroupFamilyMemHurtInfo(Structure): + Head = tagHead() + FamilyID = 0 #(DWORD FamilyID)//查看的目标仙盟ID + HurtMemCnt = 0 #(BYTE HurtMemCnt) + HurtMemList = list() #(vector<tagGCFamilyGCZGroupFamilyMemHurt> HurtMemList)//成员伤害明细列表,只算城池被摧毁前的伤害,未排序,前端自己排序 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x31 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtMemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HurtMemCnt): + temHurtMemList = tagGCFamilyGCZGroupFamilyMemHurt() + _pos = temHurtMemList.ReadData(_lpData, _pos) + self.HurtMemList.append(temHurtMemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x31 + self.FamilyID = 0 + self.HurtMemCnt = 0 + self.HurtMemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.HurtMemCnt): + length += self.HurtMemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.HurtMemCnt) + for i in range(self.HurtMemCnt): + data = CommFunc.WriteString(data, self.HurtMemList[i].GetLength(), self.HurtMemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FamilyID:%d, + HurtMemCnt:%d, + HurtMemList:%s + '''\ + %( + self.Head.OutputString(), + self.FamilyID, + self.HurtMemCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo=tagGCFamilyGCZGroupFamilyMemHurtInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.Cmd,m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGroupFamilyMemHurtInfo + + +#------------------------------------------------------ +# C0 32 仙盟攻城战竞猜名单信息 #tagGCFamilyGCZGuessInfo + +class tagGCFamilyGCZGuessFamily(Structure): + _pack_ = 1 + _fields_ = [ + ("FamilyID", c_int), #备选仙盟ID + ("GuessValue", c_ushort), #竞猜热度值,玩家每次选择则加1,重复选择也算 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.FamilyID = 0 + self.GuessValue = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZGuessFamily) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo: + FamilyID:%d, + GuessValue:%d + '''\ + %( + self.FamilyID, + self.GuessValue + ) + return DumpString + + +class tagGCFamilyGCZGuessRight(Structure): + _pack_ = 1 + _fields_ = [ + ("AwardID", c_ubyte), #奖励ID + ("RightPlayerCnt", 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.AwardID = 0 + self.RightPlayerCnt = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyGCZGuessRight) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 32 仙盟攻城战竞猜名单信息 //tagGCFamilyGCZGuessInfo: + AwardID:%d, + RightPlayerCnt:%d + '''\ + %( + self.AwardID, + self.RightPlayerCnt + ) + return DumpString + + +class tagGCFamilyGCZGuessInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)//竞猜玩家ID,有玩家修改竞猜时会附带该信息,如果是自己ID,则更新自己的竞猜选项,否则无视 + SelectCnt = 0 #(BYTE SelectCnt) + SelectFamilyIDList = list() #(vector<DWORD> SelectFamilyIDList)//竞猜玩家选择的仙盟ID顺序 + FinalCnt = 0 #(BYTE FinalCnt) + FinalFamilyIDList = list() #(vector<DWORD> FinalFamilyIDList)//最终排名顺序,仅活动排名出来后才有值 + RightCnt = 0 #(BYTE RightCnt) + RightInfoList = list() #(vector<tagGCFamilyGCZGuessRight> RightInfoList)//猜中个数明细列表 + FamilyCnt = 0 #(BYTE FamilyCnt) + GuessFamilyList = list() #(vector<tagGCFamilyGCZGuessFamily> GuessFamilyList)//备选仙盟名单列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x32 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SelectCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SelectCnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SelectFamilyIDList.append(value) + self.FinalCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FinalCnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.FinalFamilyIDList.append(value) + self.RightCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RightCnt): + temRightInfoList = tagGCFamilyGCZGuessRight() + _pos = temRightInfoList.ReadData(_lpData, _pos) + self.RightInfoList.append(temRightInfoList) + self.FamilyCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FamilyCnt): + temGuessFamilyList = tagGCFamilyGCZGuessFamily() + _pos = temGuessFamilyList.ReadData(_lpData, _pos) + self.GuessFamilyList.append(temGuessFamilyList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x32 + self.PlayerID = 0 + self.SelectCnt = 0 + self.SelectFamilyIDList = list() + self.FinalCnt = 0 + self.FinalFamilyIDList = list() + self.RightCnt = 0 + self.RightInfoList = list() + self.FamilyCnt = 0 + self.GuessFamilyList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 4 * self.SelectCnt + length += 1 + length += 4 * self.FinalCnt + length += 1 + for i in range(self.RightCnt): + length += self.RightInfoList[i].GetLength() + length += 1 + for i in range(self.FamilyCnt): + length += self.GuessFamilyList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.SelectCnt) + for i in range(self.SelectCnt): + data = CommFunc.WriteDWORD(data, self.SelectFamilyIDList[i]) + data = CommFunc.WriteBYTE(data, self.FinalCnt) + for i in range(self.FinalCnt): + data = CommFunc.WriteDWORD(data, self.FinalFamilyIDList[i]) + data = CommFunc.WriteBYTE(data, self.RightCnt) + for i in range(self.RightCnt): + data = CommFunc.WriteString(data, self.RightInfoList[i].GetLength(), self.RightInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.FamilyCnt) + for i in range(self.FamilyCnt): + data = CommFunc.WriteString(data, self.GuessFamilyList[i].GetLength(), self.GuessFamilyList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + SelectCnt:%d, + SelectFamilyIDList:%s, + FinalCnt:%d, + FinalFamilyIDList:%s, + RightCnt:%d, + RightInfoList:%s, + FamilyCnt:%d, + GuessFamilyList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.SelectCnt, + "...", + self.FinalCnt, + "...", + self.RightCnt, + "...", + self.FamilyCnt, + "..." + ) + return DumpString + + +m_NAtagGCFamilyGCZGuessInfo=tagGCFamilyGCZGuessInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyGCZGuessInfo.Head.Cmd,m_NAtagGCFamilyGCZGuessInfo.Head.SubCmd))] = m_NAtagGCFamilyGCZGuessInfo #------------------------------------------------------ @@ -18874,6 +21273,9 @@ class tagMCCoinToGoldCountInfo(Structure): Head = tagHead() + RealFirstTime = 0 #(DWORD RealFirstTime)// 首次真实充值时间戳 + RealToday = 0 #(DWORD RealToday)// 今日真实充值coin + RealTotal = 0 #(DWORD RealTotal)// 累计真实充值coin RecordCount = 0 #(WORD RecordCount) CTGCountInfoList = list() #(vector<tagMCCoinToGoldCount> CTGCountInfoList) data = None @@ -18887,6 +21289,9 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) + self.RealFirstTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealToday,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RecordCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.RecordCount): temCTGCountInfoList = tagMCCoinToGoldCount() @@ -18899,6 +21304,9 @@ self.Head.Clear() self.Head.Cmd = 0xA1 self.Head.SubCmd = 0x10 + self.RealFirstTime = 0 + self.RealToday = 0 + self.RealTotal = 0 self.RecordCount = 0 self.CTGCountInfoList = list() return @@ -18906,6 +21314,9 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 4 + length += 4 + length += 4 length += 2 for i in range(self.RecordCount): length += self.CTGCountInfoList[i].GetLength() @@ -18915,6 +21326,9 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.RealFirstTime) + data = CommFunc.WriteDWORD(data, self.RealToday) + data = CommFunc.WriteDWORD(data, self.RealTotal) data = CommFunc.WriteWORD(data, self.RecordCount) for i in range(self.RecordCount): data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer()) @@ -18923,11 +21337,17 @@ def OutputString(self): DumpString = ''' Head:%s, + RealFirstTime:%d, + RealToday:%d, + RealTotal:%d, RecordCount:%d, CTGCountInfoList:%s '''\ %( self.Head.OutputString(), + self.RealFirstTime, + self.RealToday, + self.RealTotal, self.RecordCount, "..." ) @@ -20112,6 +22532,7 @@ ("SubCmd", c_ubyte), ("MapID", c_ushort), ("FuncLineID", c_ushort), #功能线路ID + ("FuncMapID", c_ushort), #功能地图ID ] def __init__(self): @@ -20130,6 +22551,7 @@ self.SubCmd = 0x26 self.MapID = 0 self.FuncLineID = 0 + self.FuncMapID = 0 return def GetLength(self): @@ -20143,13 +22565,15 @@ Cmd:%s, SubCmd:%s, MapID:%d, - FuncLineID:%d + FuncLineID:%d, + FuncMapID:%d '''\ %( self.Cmd, self.SubCmd, self.MapID, - self.FuncLineID + self.FuncLineID, + self.FuncMapID ) return DumpString @@ -20168,6 +22592,7 @@ ("SubCmd", c_ubyte), ("MapID", c_int), ("FuncLineID", c_ushort), #功能线路ID + ("FuncMapID", c_ushort), #功能地图ID ] def __init__(self): @@ -20186,6 +22611,7 @@ self.SubCmd = 0x27 self.MapID = 0 self.FuncLineID = 0 + self.FuncMapID = 0 return def GetLength(self): @@ -20199,13 +22625,15 @@ Cmd:%s, SubCmd:%s, MapID:%d, - FuncLineID:%d + FuncLineID:%d, + FuncMapID:%d '''\ %( self.Cmd, self.SubCmd, self.MapID, - self.FuncLineID + self.FuncLineID, + self.FuncMapID ) return DumpString @@ -21110,7 +23538,7 @@ _pack_ = 1 _fields_ = [ ("ItemID", c_int), #果实物品ID - ("EatCnt", c_ushort), #已使用个数 + ("EatCnt", c_int), #已使用个数 ("ItemAddCnt", c_int), #增幅丹增加上限 ("ItemBreakCnt", c_int), #增幅丹突破次数 ] @@ -25623,7 +28051,8 @@ _pack_ = 1 _fields_ = [ ("MfpType", c_ubyte), #模块编号类型 - ("FightPower", c_int), #本模块战斗力 + ("FightPower", c_int), #本模块战斗力,求余亿部分 + ("FightPowerEx", c_int), #本模块战斗力,整除亿部分,1代表1亿 ] def __init__(self): @@ -25638,6 +28067,7 @@ def Clear(self): self.MfpType = 0 self.FightPower = 0 + self.FightPowerEx = 0 return def GetLength(self): @@ -25649,11 +28079,13 @@ def OutputString(self): DumpString = '''//A3 A1 各功能模块战斗力信息 //tagMCModuleFightPowerInfo: MfpType:%d, - FightPower:%d + FightPower:%d, + FightPowerEx:%d '''\ %( self.MfpType, - self.FightPower + self.FightPower, + self.FightPowerEx ) return DumpString @@ -28022,19 +30454,15 @@ #------------------------------------------------------ # A3 11 通知玩家境界信息 #tagMCSyncRealmInfo -class tagMCSyncRealmInfo(Structure): +class tagMCSyncRealmTask(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("IsPass", c_ubyte), #是否通关副本 - ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取 + ("TaskID", c_ubyte), + ("TaskValue", c_int), ] def __init__(self): self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x11 return def ReadData(self, stringData, _pos=0, _len=0): @@ -28043,36 +30471,99 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x11 - self.IsPass = 0 - self.XXZLAwardState = 0 + self.TaskID = 0 + self.TaskValue = 0 return def GetLength(self): - return sizeof(tagMCSyncRealmInfo) + return sizeof(tagMCSyncRealmTask) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo: - Cmd:%s, - SubCmd:%s, - IsPass:%d, - XXZLAwardState:%d + TaskID:%d, + TaskValue:%d '''\ %( - self.Cmd, - self.SubCmd, - self.IsPass, - self.XXZLAwardState + self.TaskID, + self.TaskValue + ) + return DumpString + + +class tagMCSyncRealmInfo(Structure): + Head = tagHead() + TaskAwardState = 0 #(DWORD TaskAwardState)//进阶任务领奖状态;按任务ID二进制位存储是否已领取 + TaskValueCount = 0 #(BYTE TaskValueCount) + TaskValueList = list() #(vector<tagMCSyncRealmTask> TaskValueList)//进阶任务值列表,仅有需要记录的任务才会通知 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TaskAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TaskValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TaskValueCount): + temTaskValueList = tagMCSyncRealmTask() + _pos = temTaskValueList.ReadData(_lpData, _pos) + self.TaskValueList.append(temTaskValueList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x11 + self.TaskAwardState = 0 + self.TaskValueCount = 0 + self.TaskValueList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.TaskValueCount): + length += self.TaskValueList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TaskAwardState) + data = CommFunc.WriteBYTE(data, self.TaskValueCount) + for i in range(self.TaskValueCount): + data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TaskAwardState:%d, + TaskValueCount:%d, + TaskValueList:%s + '''\ + %( + self.Head.OutputString(), + self.TaskAwardState, + self.TaskValueCount, + "..." ) return DumpString m_NAtagMCSyncRealmInfo=tagMCSyncRealmInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Cmd,m_NAtagMCSyncRealmInfo.SubCmd))] = m_NAtagMCSyncRealmInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSyncRealmInfo.Head.Cmd,m_NAtagMCSyncRealmInfo.Head.SubCmd))] = m_NAtagMCSyncRealmInfo #------------------------------------------------------ @@ -28585,13 +31076,11 @@ #------------------------------------------------------ # A3 51 寻宝功能信息 #tagMCTreasureInfo -class tagMCTreasureTypeInfo(Structure): +class tagMCTreasureGridLimit(Structure): _pack_ = 1 _fields_ = [ - ("TreasureType", c_ubyte), #寻宝类型 - ("LuckValue", c_ushort), #当前幸运值 - ("TreasureCount", c_int), #已寻宝总次数 - ("FreeCountToday", c_ushort), #今日已免费寻宝次数 + ("GridNum", c_ubyte), # 有限制抽取次数的格子编号 + ("GridCnt", c_ushort), # 已抽到次数 ] def __init__(self): @@ -28604,30 +31093,116 @@ return _pos + self.GetLength() def Clear(self): - self.TreasureType = 0 - self.LuckValue = 0 - self.TreasureCount = 0 - self.FreeCountToday = 0 + self.GridNum = 0 + self.GridCnt = 0 return def GetLength(self): - return sizeof(tagMCTreasureTypeInfo) + 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)//当前幸运值 + TreasureCount = 0 #(DWORD TreasureCount)//已寻宝总次数 + TreasureCountToday = 0 #(DWORD TreasureCountToday)//今日已寻宝总次数 + FreeCountToday = 0 #(WORD FreeCountToday)//今日已免费寻宝次数 + TreasureCntAward = 0 #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取 + GridLimitCnt = 0 #(BYTE GridLimitCnt) + GridLimitCntList = list() #(vector<tagMCTreasureGridLimit> GridLimitCntList)//有限制抽取次数的格子次数信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TreasureCountToday,_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.TreasureCount = 0 + self.TreasureCountToday = 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 += 4 + length += 2 + length += 4 + length += 1 + for i in range(self.GridLimitCnt): + length += self.GridLimitCntList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.TreasureType) + data = CommFunc.WriteWORD(data, self.LuckValue) + data = CommFunc.WriteDWORD(data, self.TreasureCount) + data = CommFunc.WriteDWORD(data, self.TreasureCountToday) + 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, TreasureCount:%d, - FreeCountToday:%d + TreasureCountToday:%d, + FreeCountToday:%d, + TreasureCntAward:%d, + GridLimitCnt:%d, + GridLimitCntList:%s '''\ %( self.TreasureType, self.LuckValue, self.TreasureCount, - self.FreeCountToday + self.TreasureCountToday, + self.FreeCountToday, + self.TreasureCntAward, + self.GridLimitCnt, + "..." ) return DumpString @@ -29805,6 +32380,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): @@ -30611,18 +33242,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): @@ -30631,33 +33261,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 #------------------------------------------------------ @@ -30956,6 +33651,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 #------------------------------------------------------ @@ -32445,6 +35252,218 @@ #------------------------------------------------------ +# A8 01 获得奖励信息 #tagMCGiveAwardInfo + +class tagMCGiveAwardMoney(Structure): + _pack_ = 1 + _fields_ = [ + ("MoneyType", c_ubyte), + ("MoneyValue", c_int), + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.MoneyType = 0 + self.MoneyValue = 0 + return + + def GetLength(self): + return sizeof(tagMCGiveAwardMoney) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo: + MoneyType:%d, + MoneyValue:%d + '''\ + %( + self.MoneyType, + self.MoneyValue + ) + return DumpString + + +class tagMCGiveAwardItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("Count", c_int), + ("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.Count = 0 + self.IsBind = 0 + return + + def GetLength(self): + return sizeof(tagMCGiveAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo: + ItemID:%d, + Count:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.Count, + self.IsBind + ) + return DumpString + + +class tagMCGiveAwardInfo(Structure): + Head = tagHead() + EventLen = 0 #(BYTE EventLen) + EventName = "" #(String EventName) + Exp = 0 #(DWORD Exp)// 奖励经验,求余亿部分 + ExpPoint = 0 #(DWORD ExpPoint)// 奖励经验,整除亿部分 + MoneyLen = 0 #(BYTE MoneyLen) + MoneyList = list() #(vector<tagMCGiveAwardMoney> MoneyList)// 奖励货币 + ItemLen = 0 #(BYTE ItemLen) + ItemList = list() #(vector<tagMCGiveAwardItem> ItemList)// 奖励物品 + DataLen = 0 #(WORD DataLen) + DataEx = "" #(String DataEx)// 扩展信息,可由不同的Event自定义信息内容 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x01 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.EventLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.EventName,_pos = CommFunc.ReadString(_lpData, _pos,self.EventLen) + self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MoneyLen): + temMoneyList = tagMCGiveAwardMoney() + _pos = temMoneyList.ReadData(_lpData, _pos) + self.MoneyList.append(temMoneyList) + self.ItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemLen): + temItemList = tagMCGiveAwardItem() + _pos = temItemList.ReadData(_lpData, _pos) + self.ItemList.append(temItemList) + self.DataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.DataEx,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x01 + self.EventLen = 0 + self.EventName = "" + self.Exp = 0 + self.ExpPoint = 0 + self.MoneyLen = 0 + self.MoneyList = list() + self.ItemLen = 0 + self.ItemList = list() + self.DataLen = 0 + self.DataEx = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.EventName) + length += 4 + length += 4 + length += 1 + for i in range(self.MoneyLen): + length += self.MoneyList[i].GetLength() + length += 1 + for i in range(self.ItemLen): + length += self.ItemList[i].GetLength() + length += 2 + length += len(self.DataEx) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.EventLen) + data = CommFunc.WriteString(data, self.EventLen, self.EventName) + data = CommFunc.WriteDWORD(data, self.Exp) + data = CommFunc.WriteDWORD(data, self.ExpPoint) + data = CommFunc.WriteBYTE(data, self.MoneyLen) + for i in range(self.MoneyLen): + data = CommFunc.WriteString(data, self.MoneyList[i].GetLength(), self.MoneyList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ItemLen) + for i in range(self.ItemLen): + data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.DataLen) + data = CommFunc.WriteString(data, self.DataLen, self.DataEx) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + EventLen:%d, + EventName:%s, + Exp:%d, + ExpPoint:%d, + MoneyLen:%d, + MoneyList:%s, + ItemLen:%d, + ItemList:%s, + DataLen:%d, + DataEx:%s + '''\ + %( + self.Head.OutputString(), + self.EventLen, + self.EventName, + self.Exp, + self.ExpPoint, + self.MoneyLen, + "...", + self.ItemLen, + "...", + self.DataLen, + self.DataEx + ) + return DumpString + + +m_NAtagMCGiveAwardInfo=tagMCGiveAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGiveAwardInfo.Head.Cmd,m_NAtagMCGiveAwardInfo.Head.SubCmd))] = m_NAtagMCGiveAwardInfo + + +#------------------------------------------------------ # A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc class tagMCGuradPickupItemSucc(Structure): @@ -33266,7 +36285,7 @@ _pack_ = 1 _fields_ = [ ("ItemIndex", c_int), - ("BuyCnt", c_ushort), # 今日已购买次数 + ("BuyCnt", c_int), # 今日已购买次数 ("IsReset", c_ubyte), #是否重置 ] @@ -35062,6 +38081,9 @@ LimitLV = 0 #(WORD LimitLV)// 限制等级 AwardCount = 0 #(BYTE AwardCount) AwardInfoList = list() #(vector<tagMCActFamilyCTGAssistAward> AwardInfoList)// 互助奖励列表 + CTGIDCount = 0 #(BYTE CTGIDCount) + CTGIDList = list() #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 + ShopType = 0 #(WORD ShopType)// 开放商店类型 data = None def __init__(self): @@ -35083,6 +38105,11 @@ temAwardInfoList = tagMCActFamilyCTGAssistAward() _pos = temAwardInfoList.ReadData(_lpData, _pos) self.AwardInfoList.append(temAwardInfoList) + self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CTGIDCount): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.CTGIDList.append(value) + self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): @@ -35097,6 +38124,9 @@ self.LimitLV = 0 self.AwardCount = 0 self.AwardInfoList = list() + self.CTGIDCount = 0 + self.CTGIDList = list() + self.ShopType = 0 return def GetLength(self): @@ -35110,6 +38140,9 @@ length += 1 for i in range(self.AwardCount): length += self.AwardInfoList[i].GetLength() + length += 1 + length += 2 * self.CTGIDCount + length += 2 return length @@ -35124,6 +38157,10 @@ data = CommFunc.WriteBYTE(data, self.AwardCount) for i in range(self.AwardCount): data = CommFunc.WriteString(data, self.AwardInfoList[i].GetLength(), self.AwardInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.CTGIDCount) + for i in range(self.CTGIDCount): + data = CommFunc.WriteWORD(data, self.CTGIDList[i]) + data = CommFunc.WriteWORD(data, self.ShopType) return data def OutputString(self): @@ -35135,7 +38172,10 @@ IsDayReset:%d, LimitLV:%d, AwardCount:%d, - AwardInfoList:%s + AwardInfoList:%s, + CTGIDCount:%d, + CTGIDList:%s, + ShopType:%d '''\ %( self.Head.OutputString(), @@ -35145,7 +38185,10 @@ self.IsDayReset, self.LimitLV, self.AwardCount, - "..." + "...", + self.CTGIDCount, + "...", + self.ShopType ) return DumpString @@ -37487,6 +40530,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): @@ -37501,12 +40546,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): @@ -37515,6 +40567,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 @@ -37524,17 +40579,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 @@ -37548,6 +40610,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 @@ -37567,6 +40630,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() @@ -37585,6 +40649,7 @@ self.LimitLV = 0 self.RepSignMoneyType = 0 self.RepSignMoneyValue = 0 + self.AwardExCTGID = 0 self.DayCount = 0 self.AwardDayList = list() return @@ -37598,6 +40663,7 @@ length += 2 length += 1 length += 4 + length += 2 length += 1 for i in range(self.DayCount): length += self.AwardDayList[i].GetLength() @@ -37613,6 +40679,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()) @@ -37627,6 +40694,7 @@ LimitLV:%d, RepSignMoneyType:%d, RepSignMoneyValue:%d, + AwardExCTGID:%d, DayCount:%d, AwardDayList:%s '''\ @@ -37638,6 +40706,7 @@ self.LimitLV, self.RepSignMoneyType, self.RepSignMoneyValue, + self.AwardExCTGID, self.DayCount, "..." ) @@ -37657,7 +40726,8 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("ActNum", c_ubyte), # 活动编号 - ("LoginAward", c_int), # 是否已领取,按天索引0代表第1天记录当天是否已领取 + ("LoginAward", c_int), # 普通奖励领取记录,按天对应二进制位记录是否已领取 + ("LoginAwardEx", c_int), # 额外奖励领取记录,按天对应二进制位记录是否已领取 ] def __init__(self): @@ -37676,6 +40746,7 @@ self.SubCmd = 0x70 self.ActNum = 0 self.LoginAward = 0 + self.LoginAwardEx = 0 return def GetLength(self): @@ -37689,19 +40760,402 @@ 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)// 每轮奖励列表 + CTGIDCount = 0 #(BYTE CTGIDCount) + CTGIDList = list() #(vector<WORD> CTGIDList)// CTGID列表 + ShopType = 0 #(WORD ShopType)// 开放商店类型,可能为0不开放 + 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) + self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CTGIDCount): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.CTGIDList.append(value) + self.ShopType,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.RoundType = 0 + self.AwardType = 0 + self.AwardTypeValue = 0 + self.RoundMax = 0 + self.AwardCount = 0 + self.AwardList = list() + self.CTGIDCount = 0 + self.CTGIDList = list() + self.ShopType = 0 + 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() + length += 1 + length += 2 * self.CTGIDCount + length += 2 + + 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()) + data = CommFunc.WriteBYTE(data, self.CTGIDCount) + for i in range(self.CTGIDCount): + data = CommFunc.WriteWORD(data, self.CTGIDList[i]) + data = CommFunc.WriteWORD(data, self.ShopType) + return data + + def OutputString(self): + DumpString = ''' + RoundType:%d, + AwardType:%d, + AwardTypeValue:%d, + RoundMax:%d, + AwardCount:%d, + AwardList:%s, + CTGIDCount:%d, + CTGIDList:%s, + ShopType:%d + '''\ + %( + self.RoundType, + self.AwardType, + self.AwardTypeValue, + self.RoundMax, + self.AwardCount, + "...", + self.CTGIDCount, + "...", + self.ShopType + ) + 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 #------------------------------------------------------ @@ -41069,6 +44523,98 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo class tagMCAllPeoplePartyCount(Structure): @@ -42941,6 +46487,510 @@ m_NAtagMCCrossActHorsePetTrainInfo=tagMCCrossActHorsePetTrainInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActHorsePetTrainInfo.Head.Cmd,m_NAtagMCCrossActHorsePetTrainInfo.Head.SubCmd))] = m_NAtagMCCrossActHorsePetTrainInfo + + +#------------------------------------------------------ +# AA 90 炼器跨服活动信息 #tagMCCrossActLianqiInfo + +class tagMCCrossActLianqiItem(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(tagMCCrossActLianqiItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 90 炼器跨服活动信息 //tagMCCrossActLianqiInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCrossActLianqiAwardEx(Structure): + NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分 + Count = 0 #(BYTE Count)// 额外奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActLianqiItem> 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 = tagMCCrossActLianqiItem() + _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 tagMCCrossActLianqiBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCrossActLianqiItem> AwardItemList)// 奖励物品列表 + NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分 + CountEx = 0 #(BYTE CountEx)// 额外奖励数 + AwardItemExList = list() #(vector<tagMCCrossActLianqiAwardEx> 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 = tagMCCrossActLianqiItem() + _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 = tagMCCrossActLianqiAwardEx() + _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 tagMCCrossActLianqiInfo(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 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + PersonalBillCount = 0 #(BYTE PersonalBillCount) + PersonalBillboardInfoList = list() #(vector<tagMCCrossActLianqiBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x90 + 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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PersonalBillCount): + temPersonalBillboardInfoList = tagMCCrossActLianqiBillard() + _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 = 0x90 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.GroupValue1 = 0 + self.StartDate = "" + self.EndtDate = "" + self.JoinStartTime = "" + self.JoinEndTime = "" + self.LimitLV = 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 += 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.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.WriteWORD(data, self.LimitLV) + 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, + LimitLV:%d, + PersonalBillCount:%d, + PersonalBillboardInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.GroupValue1, + self.StartDate, + self.EndtDate, + self.JoinStartTime, + self.JoinEndTime, + self.LimitLV, + self.PersonalBillCount, + "..." + ) + return DumpString + + +m_NAtagMCCrossActLianqiInfo=tagMCCrossActLianqiInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActLianqiInfo.Head.Cmd,m_NAtagMCCrossActLianqiInfo.Head.SubCmd))] = m_NAtagMCCrossActLianqiInfo + + +#------------------------------------------------------ +# AA 91 炼器活动玩家信息 #tagMCActLianqiPlayerInfo + +class tagMCActLianqiTileMove(Structure): + _pack_ = 1 + _fields_ = [ + ("Row", c_ubyte), # 行,0为第1行 + ("Col", c_ubyte), # 列,0为第1列 + ("ToRow", c_ubyte), # 移动到目标行 + ("ToCol", 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.Row = 0 + self.Col = 0 + self.ToRow = 0 + self.ToCol = 0 + return + + def GetLength(self): + return sizeof(tagMCActLianqiTileMove) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 91 炼器活动玩家信息 //tagMCActLianqiPlayerInfo: + Row:%d, + Col:%d, + ToRow:%d, + ToCol:%d + '''\ + %( + self.Row, + self.Col, + self.ToRow, + self.ToCol + ) + return DumpString + + +class tagMCActLianqiPlayerInfo(Structure): + Head = tagHead() + Score = 0 #(DWORD Score)// 当前活动积分 + ScoreHighest = 0 #(DWORD ScoreHighest)// 当前活动最高积分,即上榜积分 + Energy = 0 #(WORD Energy)// 当前体力 + EnergyTime = 0 #(DWORD EnergyTime)// 上次恢复体力时间戳,为0时不用处理倒计时 + LVAwardMax = 0 #(DWORD LVAwardMax)// 已激活的最大合成奖励等级 + LVAwardState = 0 #(DWORD LVAwardState)// 最大合成等级奖励领取记录,按等级二进制位存储是否已领取 + UseItemLen = 0 #(BYTE UseItemLen) + UseItemCntList = list() #(vector<WORD> UseItemCntList)// 本局已使用辅助道具次数 [辅助道具1使用次数, ...] + GridDataLen = 0 #(BYTE GridDataLen)// 格子数据长度 + GridData = "" #(String GridData)// 格子二维行列数据,一定会同步,直接替换,行从上往下排 [[第1行格子1,格子2, ...], ...] + OPType = 0 #(BYTE OPType)// 0-无(如初始化,GM等后端直接设置);1-移动;2-使用道具;3-重新开始;如果是因为操作引起的格子数据变化,则在相关操作表现完毕后再展示最新行列数据,否则直接变更 + MoveCount = 0 #(BYTE MoveCount) + MoveList = list() #(vector<tagMCActLianqiTileMove> MoveList)// 图块移动列表,可能没有数据,有的话先表现移动 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x91 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ScoreHighest,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Energy,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.EnergyTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LVAwardMax,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LVAwardState,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.UseItemLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.UseItemLen): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.UseItemCntList.append(value) + self.GridDataLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GridData,_pos = CommFunc.ReadString(_lpData, _pos,self.GridDataLen) + self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoveCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MoveCount): + temMoveList = tagMCActLianqiTileMove() + _pos = temMoveList.ReadData(_lpData, _pos) + self.MoveList.append(temMoveList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x91 + self.Score = 0 + self.ScoreHighest = 0 + self.Energy = 0 + self.EnergyTime = 0 + self.LVAwardMax = 0 + self.LVAwardState = 0 + self.UseItemLen = 0 + self.UseItemCntList = list() + self.GridDataLen = 0 + self.GridData = "" + self.OPType = 0 + self.MoveCount = 0 + self.MoveList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 2 + length += 4 + length += 4 + length += 4 + length += 1 + length += 2 * self.UseItemLen + length += 1 + length += len(self.GridData) + length += 1 + length += 1 + for i in range(self.MoveCount): + length += self.MoveList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.Score) + data = CommFunc.WriteDWORD(data, self.ScoreHighest) + data = CommFunc.WriteWORD(data, self.Energy) + data = CommFunc.WriteDWORD(data, self.EnergyTime) + data = CommFunc.WriteDWORD(data, self.LVAwardMax) + data = CommFunc.WriteDWORD(data, self.LVAwardState) + data = CommFunc.WriteBYTE(data, self.UseItemLen) + for i in range(self.UseItemLen): + data = CommFunc.WriteWORD(data, self.UseItemCntList[i]) + data = CommFunc.WriteBYTE(data, self.GridDataLen) + data = CommFunc.WriteString(data, self.GridDataLen, self.GridData) + data = CommFunc.WriteBYTE(data, self.OPType) + data = CommFunc.WriteBYTE(data, self.MoveCount) + for i in range(self.MoveCount): + data = CommFunc.WriteString(data, self.MoveList[i].GetLength(), self.MoveList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Score:%d, + ScoreHighest:%d, + Energy:%d, + EnergyTime:%d, + LVAwardMax:%d, + LVAwardState:%d, + UseItemLen:%d, + UseItemCntList:%s, + GridDataLen:%d, + GridData:%s, + OPType:%d, + MoveCount:%d, + MoveList:%s + '''\ + %( + self.Head.OutputString(), + self.Score, + self.ScoreHighest, + self.Energy, + self.EnergyTime, + self.LVAwardMax, + self.LVAwardState, + self.UseItemLen, + "...", + self.GridDataLen, + self.GridData, + self.OPType, + self.MoveCount, + "..." + ) + return DumpString + + +m_NAtagMCActLianqiPlayerInfo=tagMCActLianqiPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLianqiPlayerInfo.Head.Cmd,m_NAtagMCActLianqiPlayerInfo.Head.SubCmd))] = m_NAtagMCActLianqiPlayerInfo #------------------------------------------------------ @@ -48574,7 +52624,8 @@ ("CampaignType", c_ubyte), #奖励类型 ("BillAwardRecord", c_ubyte), #排行奖励是否已领取 ("TagAwardRecord", c_int), #目标奖励索引位领取记录:0-未领;1-已领 - ("RecordData", c_int), #活动时的记录值 + ("RecordData", c_int), #活动时的记录值,求余亿部分,为了统一逻辑,其他非战力榜的也使用此规则 + ("RecordDataEx", c_int), #活动时的记录值,整除亿部分,1代表1亿 ] def __init__(self): @@ -48591,6 +52642,7 @@ self.BillAwardRecord = 0 self.TagAwardRecord = 0 self.RecordData = 0 + self.RecordDataEx = 0 return def GetLength(self): @@ -48604,13 +52656,15 @@ CampaignType:%d, BillAwardRecord:%d, TagAwardRecord:%d, - RecordData:%d + RecordData:%d, + RecordDataEx:%d '''\ %( self.CampaignType, self.BillAwardRecord, self.TagAwardRecord, - self.RecordData + self.RecordData, + self.RecordDataEx ) return DumpString @@ -49510,11 +53564,13 @@ EnergyUsed = 0 #(WORD EnergyUsed)// 今日已消耗体力 RefreshCount = 0 #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新 RefreshCountSuper = 0 #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新 + RefreshCountRob = 0 #(WORD RefreshCountRob)// 今日福地刷新周围玩家次数 TreasureCount = 0 #(BYTE TreasureCount)// 聚宝盆类型个数,对应类型 0~n TreasureState = list() #(vector<BYTE> TreasureState)// 聚宝盆是否已激活列表,[类型0是否已激活, ...] TreasureAward = list() #(vector<BYTE> TreasureAward)// 聚宝盆奖励是否已领取列表,[类型0是否已领取, ...] TreasureProgress = list() #(vector<BYTE> TreasureProgress)// 聚宝盆进度值列表,[类型0进度值, ...],满进度100 HelpAwardCount = 0 #(BYTE HelpAwardCount)// 今日已帮助别人奖励次数 + HousekeeperEndTime = 0 #(DWORD HousekeeperEndTime)// 自动管家到期时间戳,有值同时也代表免费试用已使用 data = None def __init__(self): @@ -49530,6 +53586,7 @@ self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RefreshCountRob,_pos = CommFunc.ReadWORD(_lpData, _pos) self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.TreasureCount): value,_pos=CommFunc.ReadBYTE(_lpData,_pos) @@ -49541,6 +53598,7 @@ value,_pos=CommFunc.ReadBYTE(_lpData,_pos) self.TreasureProgress.append(value) self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HousekeeperEndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -49552,11 +53610,13 @@ self.EnergyUsed = 0 self.RefreshCount = 0 self.RefreshCountSuper = 0 + self.RefreshCountRob = 0 self.TreasureCount = 0 self.TreasureState = list() self.TreasureAward = list() self.TreasureProgress = list() self.HelpAwardCount = 0 + self.HousekeeperEndTime = 0 return def GetLength(self): @@ -49566,11 +53626,13 @@ length += 2 length += 4 length += 1 + length += 2 length += 1 length += 1 * self.TreasureCount length += 1 * self.TreasureCount length += 1 * self.TreasureCount length += 1 + length += 4 return length @@ -49581,6 +53643,7 @@ data = CommFunc.WriteWORD(data, self.EnergyUsed) data = CommFunc.WriteDWORD(data, self.RefreshCount) data = CommFunc.WriteBYTE(data, self.RefreshCountSuper) + data = CommFunc.WriteWORD(data, self.RefreshCountRob) data = CommFunc.WriteBYTE(data, self.TreasureCount) for i in range(self.TreasureCount): data = CommFunc.WriteBYTE(data, self.TreasureState[i]) @@ -49589,6 +53652,7 @@ for i in range(self.TreasureCount): data = CommFunc.WriteBYTE(data, self.TreasureProgress[i]) data = CommFunc.WriteBYTE(data, self.HelpAwardCount) + data = CommFunc.WriteDWORD(data, self.HousekeeperEndTime) return data def OutputString(self): @@ -49598,11 +53662,13 @@ EnergyUsed:%d, RefreshCount:%d, RefreshCountSuper:%d, + RefreshCountRob:%d, TreasureCount:%d, TreasureState:%s, TreasureAward:%s, TreasureProgress:%s, - HelpAwardCount:%d + HelpAwardCount:%d, + HousekeeperEndTime:%d '''\ %( self.Head.OutputString(), @@ -49610,11 +53676,13 @@ self.EnergyUsed, self.RefreshCount, self.RefreshCountSuper, + self.RefreshCountRob, self.TreasureCount, "...", "...", "...", - self.HelpAwardCount + self.HelpAwardCount, + self.HousekeeperEndTime ) return DumpString @@ -49808,9 +53876,9 @@ _pack_ = 1 _fields_ = [ ("FaceID", c_int), #头像ID - ("LightTime", c_int), #点亮时间戳 - ("ExpireTime", c_int), #有效时间秒,0为配表固定时间,如果配表时间也为0即代表永久;到期时间=点亮时间+有效时间 - ("Star", c_ubyte), # 星级 + ("State", c_ubyte), #是否已激活 + ("EndTime", c_int), #到期时间戳,0为永久 + ("Star", c_ubyte), #星级 ] def __init__(self): @@ -49824,8 +53892,8 @@ def Clear(self): self.FaceID = 0 - self.LightTime = 0 - self.ExpireTime = 0 + self.State = 0 + self.EndTime = 0 self.Star = 0 return @@ -49838,14 +53906,14 @@ def OutputString(self): DumpString = '''// B1 17 头像信息 //tagMCFaceInfo: FaceID:%d, - LightTime:%d, - ExpireTime:%d, + State:%d, + EndTime:%d, Star:%d '''\ %( self.FaceID, - self.LightTime, - self.ExpireTime, + self.State, + self.EndTime, self.Star ) return DumpString @@ -49924,8 +53992,8 @@ _pack_ = 1 _fields_ = [ ("FacePicID", c_int), #头像框ID - ("LightTime", c_int), #点亮时间戳 - ("ExpireTime", c_int), #有效时间秒,0为配表固定时间,如果配表时间也为0即代表永久;到期时间=点亮时间+有效时间 + ("State", c_ubyte), #是否已激活 + ("EndTime", c_int), #到期时间戳,0为永久 ("Star", c_ubyte), #星级 ] @@ -49940,8 +54008,8 @@ def Clear(self): self.FacePicID = 0 - self.LightTime = 0 - self.ExpireTime = 0 + self.State = 0 + self.EndTime = 0 self.Star = 0 return @@ -49954,14 +54022,14 @@ def OutputString(self): DumpString = '''// B1 18 头像框信息 //tagMCFacePicInfo: FacePicID:%d, - LightTime:%d, - ExpireTime:%d, + State:%d, + EndTime:%d, Star:%d '''\ %( self.FacePicID, - self.LightTime, - self.ExpireTime, + self.State, + self.EndTime, self.Star ) return DumpString @@ -51337,6 +55405,7 @@ ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型 IsActivite = 0 #(BYTE IsActivite)// 普通战令是否已激活 IsActiviteH = 0 #(BYTE IsActiviteH)// 高级战令是否已激活 + AllFinishTime = 0 #(DWORD AllFinishTime)// 全部奖励领取完毕的时间戳,未完毕时该值为0,后端会在0点过天时检查可否重置,前端自行做倒计时表现即可 Value1 = 0 #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳 RewardCount = 0 #(WORD RewardCount) RewardList = list() #(vector<tagMCZhanling> RewardList) @@ -51354,6 +55423,7 @@ self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AllFinishTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.RewardCount): @@ -51370,6 +55440,7 @@ self.ZhanlingType = 0 self.IsActivite = 0 self.IsActiviteH = 0 + self.AllFinishTime = 0 self.Value1 = 0 self.RewardCount = 0 self.RewardList = list() @@ -51381,6 +55452,7 @@ length += 1 length += 1 length += 1 + length += 4 length += 4 length += 2 for i in range(self.RewardCount): @@ -51394,6 +55466,7 @@ data = CommFunc.WriteBYTE(data, self.ZhanlingType) data = CommFunc.WriteBYTE(data, self.IsActivite) data = CommFunc.WriteBYTE(data, self.IsActiviteH) + data = CommFunc.WriteDWORD(data, self.AllFinishTime) data = CommFunc.WriteDWORD(data, self.Value1) data = CommFunc.WriteWORD(data, self.RewardCount) for i in range(self.RewardCount): @@ -51406,6 +55479,7 @@ ZhanlingType:%d, IsActivite:%d, IsActiviteH:%d, + AllFinishTime:%d, Value1:%d, RewardCount:%d, RewardList:%s @@ -51415,6 +55489,7 @@ self.ZhanlingType, self.IsActivite, self.IsActiviteH, + self.AllFinishTime, self.Value1, self.RewardCount, "..." @@ -52137,6 +56212,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)// 是否需要仙玉召唤 @@ -52155,6 +56232,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) @@ -52168,6 +56247,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 @@ -52183,6 +56264,8 @@ length += 1 length += 2 length += 4 + length += 4 + length += 4 length += 1 length += 1 @@ -52197,6 +56280,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) @@ -52211,6 +56296,8 @@ LV:%d, Job:%d, RealmLV:%d, + Face:%d, + FacePic:%d, FightPower:%d, Relation:%d, IsNeedGold:%d @@ -52223,6 +56310,8 @@ self.LV, self.Job, self.RealmLV, + self.Face, + self.FacePic, self.FightPower, self.Relation, self.IsNeedGold @@ -55162,6 +59251,7 @@ ("DayWinCount", c_ubyte), # 当日已胜利次数 ("DayBuyCount", c_ubyte), # 当日已购买次数 ("DayItemAddCount", c_ubyte), # 当日物品增加次数 + ("DayRefreshCount", c_ushort), # 今日已刷新匹配次数 ] def __init__(self): @@ -55187,6 +59277,7 @@ self.DayWinCount = 0 self.DayBuyCount = 0 self.DayItemAddCount = 0 + self.DayRefreshCount = 0 return def GetLength(self): @@ -55207,7 +59298,8 @@ DayPKCount:%d, DayWinCount:%d, DayBuyCount:%d, - DayItemAddCount:%d + DayItemAddCount:%d, + DayRefreshCount:%d '''\ %( self.Cmd, @@ -55220,7 +59312,8 @@ self.DayPKCount, self.DayWinCount, self.DayBuyCount, - self.DayItemAddCount + self.DayItemAddCount, + self.DayRefreshCount ) return DumpString @@ -55278,6 +59371,189 @@ #------------------------------------------------------ +# C1 10 仙盟攻城战玩家信息 #tagMCFamilyGCZPlayerInfo + +class tagMCFamilyGCZPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ContributionCnt", c_ubyte), # 轮次低级捐献已捐献次数,轮次变更时会重置 + ("Energy", c_ubyte), # 当前可用免费体力 + ("EnergyTime", c_int), # 上次恢复免费体力时间戳,为0时不再恢复 + ("AwardState", c_int), # 活动奖励领取状态,按二进制位判断是否已领取,0-竞猜奖励;1-个人排行奖励;2-仙盟排名奖励; + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x10 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x10 + self.ContributionCnt = 0 + self.Energy = 0 + self.EnergyTime = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyGCZPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 10 仙盟攻城战玩家信息 //tagMCFamilyGCZPlayerInfo: + Cmd:%s, + SubCmd:%s, + ContributionCnt:%d, + Energy:%d, + EnergyTime:%d, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ContributionCnt, + self.Energy, + self.EnergyTime, + self.AwardState + ) + return DumpString + + +m_NAtagMCFamilyGCZPlayerInfo=tagMCFamilyGCZPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZPlayerInfo.Cmd,m_NAtagMCFamilyGCZPlayerInfo.SubCmd))] = m_NAtagMCFamilyGCZPlayerInfo + + +#------------------------------------------------------ +# C1 11 仙盟攻城战圣泉信息 #tagMCFamilyGCZSQInfo + +class tagMCFamilyGCZSQGrid(Structure): + _pack_ = 1 + _fields_ = [ + ("GridNum", c_ubyte), # 格子编号,1~n + ("ItemID", c_int), # 抽中的物品ID,20亿时为过关标记 + ("ItemCount", c_ushort), # 物品数量 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.GridNum = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyGCZSQGrid) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 11 仙盟攻城战圣泉信息 //tagMCFamilyGCZSQInfo: + GridNum:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.GridNum, + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCFamilyGCZSQInfo(Structure): + Head = tagHead() + SQLayer = 0 #(BYTE SQLayer)// 当前所在圣泉层,从1开始 + SQGirdCnt = 0 #(BYTE SQGirdCnt) + SQGridList = list() #(vector<tagMCFamilyGCZSQGrid> SQGridList)//圣泉当前层已抽格子信息,仅同步全部或变更的格子,前端进行差异更新,层数变更时重置本地记录 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.SQLayer,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SQGirdCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SQGirdCnt): + temSQGridList = tagMCFamilyGCZSQGrid() + _pos = temSQGridList.ReadData(_lpData, _pos) + self.SQGridList.append(temSQGridList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x11 + self.SQLayer = 0 + self.SQGirdCnt = 0 + self.SQGridList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.SQGirdCnt): + length += self.SQGridList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SQLayer) + data = CommFunc.WriteBYTE(data, self.SQGirdCnt) + for i in range(self.SQGirdCnt): + data = CommFunc.WriteString(data, self.SQGridList[i].GetLength(), self.SQGridList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + SQLayer:%d, + SQGirdCnt:%d, + SQGridList:%s + '''\ + %( + self.Head.OutputString(), + self.SQLayer, + self.SQGirdCnt, + "..." + ) + return DumpString + + +m_NAtagMCFamilyGCZSQInfo=tagMCFamilyGCZSQInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyGCZSQInfo.Head.Cmd,m_NAtagMCFamilyGCZSQInfo.Head.SubCmd))] = m_NAtagMCFamilyGCZSQInfo + + +#------------------------------------------------------ # C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo class tagMCLuckyCloudBuyPlayerInfo(Structure): -- Gitblit v1.8.0