From 07404bf456b40111afa9f46e67236b4ef1b76e5d Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期一, 20 五月 2024 15:54:50 +0800 Subject: [PATCH] 0312 封包同步 --- Tool/RobotTest/Protocol/PacketsReceived.py | 212 Tool/RobotTest/Protocol/PacketsReceivedPY.py | 16784 ++++++++++++++++++++++++++++++++++++++++++ Tool/RobotTest/Protocol/PacketsSend.py | 10 Tool/RobotTest/Protocol/PacketsSendPY.py | 6090 ++++++++++++++- 4 files changed, 22,310 insertions(+), 786 deletions(-) diff --git a/Tool/RobotTest/Protocol/PacketsReceived.py b/Tool/RobotTest/Protocol/PacketsReceived.py index 4a6de90..f67e2b9 100644 --- a/Tool/RobotTest/Protocol/PacketsReceived.py +++ b/Tool/RobotTest/Protocol/PacketsReceived.py @@ -1068,6 +1068,9 @@ ExAttr18 = 0 #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr19 = 0 #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 + HPEx = 0 #(DWORD HPEx)//当前血量 超过E的记录 + Face = 0 #(DWORD Face)//基本脸型 + RoleType = 0 #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分) data = None def __init__(self): @@ -1175,6 +1178,9 @@ self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -1278,6 +1284,9 @@ self.ExAttr18 = 0 self.ExAttr19 = 0 self.ExAttr20 = 0 + self.HPEx = 0 + self.Face = 0 + self.RoleType = 0 return def GetLength(self): @@ -1372,6 +1381,9 @@ length += 4 length += 4 length += 15 + length += 4 + length += 4 + length += 4 length += 4 length += 4 length += 4 @@ -1481,6 +1493,9 @@ data = CommFunc.WriteDWORD(data, self.ExAttr18) data = CommFunc.WriteDWORD(data, self.ExAttr19) data = CommFunc.WriteDWORD(data, self.ExAttr20) + data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.RoleType) return data def OutputString(self): @@ -1581,7 +1596,10 @@ ExAttr17:%d, ExAttr18:%d, ExAttr19:%d, - ExAttr20:%d + ExAttr20:%d, + HPEx:%d, + Face:%d, + RoleType:%d '''\ %( self.Head.OutputString(), @@ -1680,7 +1698,10 @@ self.ExAttr17, self.ExAttr18, self.ExAttr19, - self.ExAttr20 + self.ExAttr20, + self.HPEx, + self.Face, + self.RoleType ) return DumpString @@ -8658,10 +8679,13 @@ ReincarnationLv = 0 #(WORD ReincarnationLv) LV = 0 #(WORD LV)//等级 Job = 0 #(BYTE Job) + Face = 0 #(DWORD Face) TeamLV = 0 #(BYTE TeamLV)//组队等级 TeamID = 0 #(DWORD TeamID)//组队ID HP = 0 #(DWORD HP) + HPEx = 0 #(DWORD HPEx) MaxHP = 0 #(DWORD MaxHP) + MaxHPEx = 0 #(DWORD MaxHPEx) PlayerState = 0 #(BYTE PlayerState)//TClientPlayerState 玩家状态 打坐/马上/人镖合一 IsHideMask = 0 #(BYTE IsHideMask) Country = 0 #(BYTE Country)//玩家国家 @@ -8715,10 +8739,13 @@ self.ReincarnationLv,_pos = CommFunc.ReadWORD(_lpData, _pos) self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.TeamLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayerState,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsHideMask,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Country,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -8774,10 +8801,13 @@ self.ReincarnationLv = 0 self.LV = 0 self.Job = 0 + self.Face = 0 self.TeamLV = 0 self.TeamID = 0 self.HP = 0 + self.HPEx = 0 self.MaxHP = 0 + self.MaxHPEx = 0 self.PlayerState = 0 self.IsHideMask = 0 self.Country = 0 @@ -8825,7 +8855,10 @@ length += 2 length += 2 length += 1 + length += 4 length += 1 + length += 4 + length += 4 length += 4 length += 4 length += 4 @@ -8879,10 +8912,13 @@ data = CommFunc.WriteWORD(data, self.ReincarnationLv) data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteDWORD(data, self.Face) data = CommFunc.WriteBYTE(data, self.TeamLV) data = CommFunc.WriteDWORD(data, self.TeamID) data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.HPEx) data = CommFunc.WriteDWORD(data, self.MaxHP) + data = CommFunc.WriteDWORD(data, self.MaxHPEx) data = CommFunc.WriteBYTE(data, self.PlayerState) data = CommFunc.WriteBYTE(data, self.IsHideMask) data = CommFunc.WriteBYTE(data, self.Country) @@ -8932,10 +8968,13 @@ ReincarnationLv:%d, LV:%d, Job:%d, + Face:%d, TeamLV:%d, TeamID:%d, HP:%d, + HPEx:%d, MaxHP:%d, + MaxHPEx:%d, PlayerState:%d, IsHideMask:%d, Country:%d, @@ -8981,10 +9020,13 @@ self.ReincarnationLv, self.LV, self.Job, + self.Face, self.TeamLV, self.TeamID, self.HP, + self.HPEx, self.MaxHP, + self.MaxHPEx, self.PlayerState, self.IsHideMask, self.Country, @@ -9724,6 +9766,7 @@ ("PlayerID", c_int), # 主人ID ("PosX", c_int), # X坐标 ("PosY", c_int), # Y坐标 + ("Rank", c_ubyte), #阶段 ] def __init__(self): @@ -9745,6 +9788,7 @@ self.PlayerID = 0 self.PosX = 0 self.PosY = 0 + self.Rank = 0 return def GetLength(self): @@ -9761,7 +9805,8 @@ NPCID:%d, PlayerID:%d, PosX:%d, - PosY:%d + PosY:%d, + Rank:%d '''\ %( self.Cmd, @@ -9770,7 +9815,8 @@ self.NPCID, self.PlayerID, self.PosX, - self.PosY + self.PosY, + self.Rank ) return DumpString @@ -9789,8 +9835,9 @@ ("SubCmd", c_ubyte), ("ObjID", c_int), ("ObjType", c_ubyte), - ("RefreshType", c_ubyte), + ("RefreshType", c_ushort), ("Value", c_int), + ("ValueEx", c_int), ] def __init__(self): @@ -9811,6 +9858,7 @@ self.ObjType = 0 self.RefreshType = 0 self.Value = 0 + self.ValueEx = 0 return def GetLength(self): @@ -9826,7 +9874,8 @@ ObjID:%d, ObjType:%d, RefreshType:%d, - Value:%d + Value:%d, + ValueEx:%d '''\ %( self.Cmd, @@ -9834,7 +9883,8 @@ self.ObjID, self.ObjType, self.RefreshType, - self.Value + self.Value, + self.ValueEx ) return DumpString @@ -10626,6 +10676,7 @@ ("ObjType", c_ubyte), #对象类型 ("SkillID", c_int), #技能ID ("DiffValue", c_int), #值 + ("DiffValueEx", c_int), #超亿值 ("AttackType", c_ubyte), #攻击类型 ("SrcObjID", c_int), #飘血来源 ("SrcObjType", c_ubyte), @@ -10651,6 +10702,7 @@ self.ObjType = 0 self.SkillID = 0 self.DiffValue = 0 + self.DiffValueEx = 0 self.AttackType = 0 self.SrcObjID = 0 self.SrcObjType = 0 @@ -10672,6 +10724,7 @@ ObjType:%d, SkillID:%d, DiffValue:%d, + DiffValueEx:%d, AttackType:%d, SrcObjID:%d, SrcObjType:%d, @@ -10685,6 +10738,7 @@ self.ObjType, self.SkillID, self.DiffValue, + self.DiffValueEx, self.AttackType, self.SrcObjID, self.SrcObjType, @@ -10826,7 +10880,7 @@ MaxHP = 0 #(DWORD MaxHP) MaxHPEx = 0 #(DWORD MaxHPEx) Speed = 0 #(WORD Speed) - LV = 0 #(BYTE LV) + LV = 0 #(WORD LV) OwnerNameLen = 0 #(BYTE OwnerNameLen) OwnerName = "" #(String OwnerName)//size = OwnerNameLen data = None @@ -10851,7 +10905,7 @@ self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Speed,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.OwnerNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.OwnerNameLen) return _pos @@ -10891,7 +10945,7 @@ length += 4 length += 4 length += 2 - length += 1 + length += 2 length += 1 length += len(self.OwnerName) @@ -10911,7 +10965,7 @@ data = CommFunc.WriteDWORD(data, self.MaxHP) data = CommFunc.WriteDWORD(data, self.MaxHPEx) data = CommFunc.WriteWORD(data, self.Speed) - data = CommFunc.WriteBYTE(data, self.LV) + data = CommFunc.WriteWORD(data, self.LV) data = CommFunc.WriteBYTE(data, self.OwnerNameLen) data = CommFunc.WriteString(data, self.OwnerNameLen, self.OwnerName) return data @@ -10956,74 +11010,6 @@ m_NAtagPlayerSummonNPCAppear=tagPlayerSummonNPCAppear() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerSummonNPCAppear.Head.Cmd,m_NAtagPlayerSummonNPCAppear.Head.SubCmd))] = m_NAtagPlayerSummonNPCAppear - - -#------------------------------------------------------ -#04 40 周围对象刷新(支持大数值) #tagObjInfoRefreshEx - -class tagObjInfoRefreshEx(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ObjID", c_int), - ("ObjType", c_ubyte), - ("RefreshType", c_ubyte), - ("Value", c_int), - ("ValueEx", c_int), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0x04 - self.SubCmd = 0x40 - 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 = 0x04 - self.SubCmd = 0x40 - self.ObjID = 0 - self.ObjType = 0 - self.RefreshType = 0 - self.Value = 0 - self.ValueEx = 0 - return - - def GetLength(self): - return sizeof(tagObjInfoRefreshEx) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//04 40 周围对象刷新(支持大数值) //tagObjInfoRefreshEx: - Cmd:%s, - SubCmd:%s, - ObjID:%d, - ObjType:%d, - RefreshType:%d, - Value:%d, - ValueEx:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ObjID, - self.ObjType, - self.RefreshType, - self.Value, - self.ValueEx - ) - return DumpString - - -m_NAtagObjInfoRefreshEx=tagObjInfoRefreshEx() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagObjInfoRefreshEx.Cmd,m_NAtagObjInfoRefreshEx.SubCmd))] = m_NAtagObjInfoRefreshEx #------------------------------------------------------ @@ -11163,6 +11149,7 @@ NPCID = 0 #(DWORD NPCID) NPCFaceDir = 0 #(WORD NPCFaceDir)//NPC的面向 NPCHP = 0 #(DWORD NPCHP) + NPCHPEx = 0 #(DWORD NPCHPEx) NPCEventType = 0 #(WORD NPCEventType)//0 攻击 1 事件 IsActive = 0 #(BYTE IsActive)//这个NPC是否活着 PosX = 0 #(WORD PosX) @@ -11187,6 +11174,7 @@ self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.NPCFaceDir,_pos = CommFunc.ReadWORD(_lpData, _pos) self.NPCHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NPCHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.NPCEventType,_pos = CommFunc.ReadWORD(_lpData, _pos) self.IsActive,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.PosX,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -11207,6 +11195,7 @@ self.NPCID = 0 self.NPCFaceDir = 0 self.NPCHP = 0 + self.NPCHPEx = 0 self.NPCEventType = 0 self.IsActive = 0 self.PosX = 0 @@ -11224,6 +11213,7 @@ length += 4 length += 4 length += 2 + length += 4 length += 4 length += 2 length += 1 @@ -11244,6 +11234,7 @@ data = CommFunc.WriteDWORD(data, self.NPCID) data = CommFunc.WriteWORD(data, self.NPCFaceDir) data = CommFunc.WriteDWORD(data, self.NPCHP) + data = CommFunc.WriteDWORD(data, self.NPCHPEx) data = CommFunc.WriteWORD(data, self.NPCEventType) data = CommFunc.WriteBYTE(data, self.IsActive) data = CommFunc.WriteWORD(data, self.PosX) @@ -11262,6 +11253,7 @@ NPCID:%d, NPCFaceDir:%d, NPCHP:%d, + NPCHPEx:%d, NPCEventType:%d, IsActive:%d, PosX:%d, @@ -11278,6 +11270,7 @@ self.NPCID, self.NPCFaceDir, self.NPCHP, + self.NPCHPEx, self.NPCEventType, self.IsActive, self.PosX, @@ -12520,6 +12513,7 @@ ("ObjType", c_ubyte), #对象类型 ("AttackType", c_ubyte), #普攻, 闪躲, 致命 类型 ("Value", c_int), + ("ValueEx", c_int), ("RemainHP", c_int), #对方剩余的血 ("RemainHPEx", c_int), #对方剩余的血, 超亿支持 ] @@ -12545,6 +12539,7 @@ self.ObjType = 0 self.AttackType = 0 self.Value = 0 + self.ValueEx = 0 self.RemainHP = 0 self.RemainHPEx = 0 return @@ -12566,6 +12561,7 @@ ObjType:%d, AttackType:%d, Value:%d, + ValueEx:%d, RemainHP:%d, RemainHPEx:%d '''\ @@ -12579,6 +12575,7 @@ self.ObjType, self.AttackType, self.Value, + self.ValueEx, self.RemainHP, self.RemainHPEx ) @@ -12723,6 +12720,7 @@ ("ObjID", c_int), ("AttackType", c_ubyte), #爆击, miss ("HurtHP", c_int), + ("HurtHPEx", c_int), ("CurHP", c_int), ("CurHPEx", c_int), ] @@ -12741,6 +12739,7 @@ self.ObjID = 0 self.AttackType = 0 self.HurtHP = 0 + self.HurtHPEx = 0 self.CurHP = 0 self.CurHPEx = 0 return @@ -12757,6 +12756,7 @@ ObjID:%d, AttackType:%d, HurtHP:%d, + HurtHPEx:%d, CurHP:%d, CurHPEx:%d '''\ @@ -12765,6 +12765,7 @@ self.ObjID, self.AttackType, self.HurtHP, + self.HurtHPEx, self.CurHP, self.CurHPEx ) @@ -12889,6 +12890,7 @@ ("ObjID", c_int), ("AttackType", c_ubyte), #爆击, miss ("HurtHP", c_int), + ("HurtHPEx", c_int), ("CurHP", c_int), ("CurHPEx", c_int), ] @@ -12907,6 +12909,7 @@ self.ObjID = 0 self.AttackType = 0 self.HurtHP = 0 + self.HurtHPEx = 0 self.CurHP = 0 self.CurHPEx = 0 return @@ -12923,6 +12926,7 @@ ObjID:%d, AttackType:%d, HurtHP:%d, + HurtHPEx:%d, CurHP:%d, CurHPEx:%d '''\ @@ -12931,6 +12935,7 @@ self.ObjID, self.AttackType, self.HurtHP, + self.HurtHPEx, self.CurHP, self.CurHPEx ) @@ -12947,6 +12952,7 @@ PosY = 0 #(WORD PosY) HurtCount = 0 #(WORD HurtCount)//伤害数目 HurtList = list() #(vector<tagSkillPosHurtObj> HurtList)//size = HurtCount + SkillElementID = 0 #(WORD SkillElementID)//专精技能ID data = None def __init__(self): @@ -12969,6 +12975,7 @@ temHurtList = tagSkillPosHurtObj() _pos = temHurtList.ReadData(_lpData, _pos) self.HurtList.append(temHurtList) + self.SkillElementID,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): @@ -12984,6 +12991,7 @@ self.PosY = 0 self.HurtCount = 0 self.HurtList = list() + self.SkillElementID = 0 return def GetLength(self): @@ -12998,6 +13006,7 @@ length += 2 for i in range(self.HurtCount): length += self.HurtList[i].GetLength() + length += 2 return length @@ -13013,6 +13022,7 @@ data = CommFunc.WriteWORD(data, self.HurtCount) for i in range(self.HurtCount): data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.SkillElementID) return data def OutputString(self): @@ -13025,7 +13035,8 @@ PosX:%d, PosY:%d, HurtCount:%d, - HurtList:%s + HurtList:%s, + SkillElementID:%d '''\ %( self.Head.OutputString(), @@ -13036,7 +13047,8 @@ self.PosX, self.PosY, self.HurtCount, - "..." + "...", + self.SkillElementID ) return DumpString @@ -18587,7 +18599,9 @@ LVEx = 0 #(WORD LVEx)//玩家等级副本,用于转生 LV2 = 0 #(WORD LV2)//大师等级 HP = 0 #(DWORD HP) + HPEx = 0 #(DWORD HPEx) MaxHP = 0 #(DWORD MaxHP) + MaxHPEx = 0 #(DWORD MaxHPEx) MP = 0 #(DWORD MP) MaxMP = 0 #(DWORD MaxMP) PlayerType = 0 #(BYTE PlayerType)//五行 @@ -18620,7 +18634,9 @@ self.LVEx,_pos = CommFunc.ReadWORD(_lpData, _pos) self.LV2,_pos = CommFunc.ReadWORD(_lpData, _pos) self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MP,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxMP,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayerType,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -18649,7 +18665,9 @@ self.LVEx = 0 self.LV2 = 0 self.HP = 0 + self.HPEx = 0 self.MaxHP = 0 + self.MaxHPEx = 0 self.MP = 0 self.MaxMP = 0 self.PlayerType = 0 @@ -18679,6 +18697,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 1 length += 1 length += 1 @@ -18704,7 +18724,9 @@ data = CommFunc.WriteWORD(data, self.LVEx) data = CommFunc.WriteWORD(data, self.LV2) data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.HPEx) data = CommFunc.WriteDWORD(data, self.MaxHP) + data = CommFunc.WriteDWORD(data, self.MaxHPEx) data = CommFunc.WriteDWORD(data, self.MP) data = CommFunc.WriteDWORD(data, self.MaxMP) data = CommFunc.WriteBYTE(data, self.PlayerType) @@ -18731,7 +18753,9 @@ LVEx:%d, LV2:%d, HP:%d, + HPEx:%d, MaxHP:%d, + MaxHPEx:%d, MP:%d, MaxMP:%d, PlayerType:%d, @@ -18756,7 +18780,9 @@ self.LVEx, self.LV2, self.HP, + self.HPEx, self.MaxHP, + self.MaxHPEx, self.MP, self.MaxMP, self.PlayerType, @@ -18783,7 +18809,9 @@ ("PlayerID", c_int), ("LV", c_ushort), ("HP", c_int), + ("HPEx", c_int), ("MaxHP", c_int), + ("MaxHPEx", c_int), ("MP", c_int), ("MaxMP", c_int), ] @@ -18805,7 +18833,9 @@ self.PlayerID = 0 self.LV = 0 self.HP = 0 + self.HPEx = 0 self.MaxHP = 0 + self.MaxHPEx = 0 self.MP = 0 self.MaxMP = 0 return @@ -18823,7 +18853,9 @@ PlayerID:%d, LV:%d, HP:%d, + HPEx:%d, MaxHP:%d, + MaxHPEx:%d, MP:%d, MaxMP:%d '''\ @@ -18833,7 +18865,9 @@ self.PlayerID, self.LV, self.HP, + self.HPEx, self.MaxHP, + self.MaxHPEx, self.MP, self.MaxMP ) @@ -26000,7 +26034,9 @@ CON = 0 #(DWORD CON)//体魄 LeftPoints = 0 #(WORD LeftPoints)//潜力,即剩余点数 HP = 0 #(DWORD HP)// 当前气血 + HPEx = 0 #(DWORD HPEx)// 当前气血 超亿 MaxHP = 0 #(DWORD MaxHP)// 最大气血 + MaxHPEx = 0 #(DWORD MaxHPEx)// 最大气血 超亿 PhysicAtk = 0 #(DWORD PhysicAtk)// 外功 PhysicDef = 0 #(DWORD PhysicDef)// 外防 MagicAtk = 0 #(DWORD MagicAtk)// 内攻 @@ -26070,7 +26106,9 @@ self.CON,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.LeftPoints,_pos = CommFunc.ReadWORD(_lpData, _pos) self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PhysicAtk,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PhysicDef,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MagicAtk,_pos = CommFunc.ReadDWORD(_lpData, _pos) @@ -26138,7 +26176,9 @@ self.CON = 0 self.LeftPoints = 0 self.HP = 0 + self.HPEx = 0 self.MaxHP = 0 + self.MaxHPEx = 0 self.PhysicAtk = 0 self.PhysicDef = 0 self.MagicAtk = 0 @@ -26209,6 +26249,8 @@ length += 4 length += 4 length += 4 + length += 4 + length += 4 length += 1 for i in range(self.SkillListCnt): length += self.SkillList[i].GetLength() @@ -26272,7 +26314,9 @@ data = CommFunc.WriteDWORD(data, self.CON) data = CommFunc.WriteWORD(data, self.LeftPoints) data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.HPEx) data = CommFunc.WriteDWORD(data, self.MaxHP) + data = CommFunc.WriteDWORD(data, self.MaxHPEx) data = CommFunc.WriteDWORD(data, self.PhysicAtk) data = CommFunc.WriteDWORD(data, self.PhysicDef) data = CommFunc.WriteDWORD(data, self.MagicAtk) @@ -26339,7 +26383,9 @@ CON:%d, LeftPoints:%d, HP:%d, + HPEx:%d, MaxHP:%d, + MaxHPEx:%d, PhysicAtk:%d, PhysicDef:%d, MagicAtk:%d, @@ -26403,7 +26449,9 @@ self.CON, self.LeftPoints, self.HP, + self.HPEx, self.MaxHP, + self.MaxHPEx, self.PhysicAtk, self.PhysicDef, self.MagicAtk, @@ -29606,4 +29654,4 @@ m_NAtagGMCmdAnswer=tagGMCmdAnswer() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGMCmdAnswer.Head.Cmd,m_NAtagGMCmdAnswer.Head.SubCmd))] = m_NAtagGMCmdAnswer +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGMCmdAnswer.Head.Cmd,m_NAtagGMCmdAnswer.Head.SubCmd))] = m_NAtagGMCmdAnswer \ No newline at end of file diff --git a/Tool/RobotTest/Protocol/PacketsReceivedPY.py b/Tool/RobotTest/Protocol/PacketsReceivedPY.py index 23de93b..ee509f8 100644 --- a/Tool/RobotTest/Protocol/PacketsReceivedPY.py +++ b/Tool/RobotTest/Protocol/PacketsReceivedPY.py @@ -346,6 +346,7 @@ ("NowMinute", c_ubyte), ("NowSecond", c_ubyte), ("NowMicSecond", c_int), + ("WeekOfYear", c_ubyte), #一年中的第几周 ] def __init__(self): @@ -373,6 +374,7 @@ self.NowMinute = 0 self.NowSecond = 0 self.NowMicSecond = 0 + self.WeekOfYear = 0 return def GetLength(self): @@ -395,7 +397,8 @@ NowHour:%d, NowMinute:%d, NowSecond:%d, - NowMicSecond:%d + NowMicSecond:%d, + WeekOfYear:%d '''\ %( self.Cmd, @@ -410,7 +413,8 @@ self.NowHour, self.NowMinute, self.NowSecond, - self.NowMicSecond + self.NowMicSecond, + self.WeekOfYear ) return DumpString @@ -557,33 +561,41 @@ #A0 04 同步客户端时间 #tagServerDateTime class tagServerDateTime(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Year", c_ushort), - ("Month", c_ubyte), - ("Day", c_ubyte), - ("Hour", c_ubyte), - ("Minute", c_ubyte), - ("Second", c_ubyte), - ("MicSecond", c_int), - ] + Head = tagHead() + Year = 0 #(WORD Year) + Month = 0 #(BYTE Month) + Day = 0 #(BYTE Day) + Hour = 0 #(BYTE Hour) + Minute = 0 #(BYTE Minute) + Second = 0 #(BYTE Second) + MicSecond = 0 #(DWORD MicSecond) + CrossServerTime = "" #(char CrossServerTime[19]) + data = None def __init__(self): self.Clear() - self.Cmd = 0xA0 - self.SubCmd = 0x04 + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x04 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() + _pos = self.Head.ReadData(_lpData, _pos) + self.Year,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Month,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Day,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Second,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MicSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CrossServerTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + return _pos def Clear(self): - self.Cmd = 0xA0 - self.SubCmd = 0x04 + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x04 self.Year = 0 self.Month = 0 self.Day = 0 @@ -591,42 +603,64 @@ self.Minute = 0 self.Second = 0 self.MicSecond = 0 + self.CrossServerTime = "" return def GetLength(self): - return sizeof(tagServerDateTime) + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + length += 1 + length += 1 + length += 1 + length += 1 + length += 4 + length += 19 + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Year) + data = CommFunc.WriteBYTE(data, self.Month) + data = CommFunc.WriteBYTE(data, self.Day) + data = CommFunc.WriteBYTE(data, self.Hour) + data = CommFunc.WriteBYTE(data, self.Minute) + data = CommFunc.WriteBYTE(data, self.Second) + data = CommFunc.WriteDWORD(data, self.MicSecond) + data = CommFunc.WriteString(data, 19, self.CrossServerTime) + return data def OutputString(self): - DumpString = '''//A0 04 同步客户端时间 //tagServerDateTime: - Cmd:%s, - SubCmd:%s, + DumpString = ''' + Head:%s, Year:%d, Month:%d, Day:%d, Hour:%d, Minute:%d, Second:%d, - MicSecond:%d + MicSecond:%d, + CrossServerTime:%s '''\ %( - self.Cmd, - self.SubCmd, + self.Head.OutputString(), self.Year, self.Month, self.Day, self.Hour, self.Minute, self.Second, - self.MicSecond + self.MicSecond, + self.CrossServerTime ) return DumpString m_NAtagServerDateTime=tagServerDateTime() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagServerDateTime.Cmd,m_NAtagServerDateTime.SubCmd))] = m_NAtagServerDateTime +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagServerDateTime.Head.Cmd,m_NAtagServerDateTime.Head.SubCmd))] = m_NAtagServerDateTime #------------------------------------------------------ @@ -951,6 +985,190 @@ #------------------------------------------------------ +# A4 11 传功邀请信息 #tagGCChuangongInviteInfo + +class tagGCChuangongInviteInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x11 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV + ) + return DumpString + + +m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo + + +#------------------------------------------------------ +# A4 12 传功开始 #tagGCChuangongStart + +class tagGCChuangongStart(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 一起传功的玩家ID + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x12 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV + ) + return DumpString + + +m_NAtagGCChuangongStart=tagGCChuangongStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart + + +#------------------------------------------------------ # A4 0A 假仙盟信息 #tagGCFakeFamilyInfo class tagGCFakeFamilyInfo(Structure): @@ -1209,6 +1427,66 @@ #------------------------------------------------------ +# A4 0E 家族boss副本信息 #tagGCFamilyBosFBInfo + +class tagGCFamilyBosFBInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 仙盟累计伤血,亿求余部分 + ("HurtTotalPoint", c_int), # 仙盟累计伤血,亿整除部分 + ("FightMemCount", c_ubyte), # 目前正在仙盟boss副本中的成员数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x0E + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA4 + self.SubCmd = 0x0E + self.HurtTotal = 0 + self.HurtTotalPoint = 0 + self.FightMemCount = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyBosFBInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 0E 家族boss副本信息 //tagGCFamilyBosFBInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalPoint:%d, + FightMemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalPoint, + self.FightMemCount + ) + return DumpString + + +m_NAtagGCFamilyBosFBInfo=tagGCFamilyBosFBInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyBosFBInfo.Cmd,m_NAtagGCFamilyBosFBInfo.SubCmd))] = m_NAtagGCFamilyBosFBInfo + + +#------------------------------------------------------ # A4 02 家族boss副本开启及击杀信息 #tagGCFamilyBossFBInfo class tagGCFamilyBossFBInfo(Structure): @@ -1268,7 +1546,8 @@ # A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo class tagFGrabRedPacketInfo(Structure): - Name = "" #(char Name[33])//名字 + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//名字 PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 data = None @@ -1279,12 +1558,14 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): + self.NameLen = 0 self.Name = "" self.PlayeJob = 0 self.MoneyNum = 0 @@ -1292,7 +1573,8 @@ def GetLength(self): length = 0 - length += 33 + length += 1 + length += len(self.Name) length += 1 length += 4 @@ -1300,18 +1582,21 @@ def GetBuffer(self): data = '' - data = CommFunc.WriteString(data, 33, self.Name) + 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.MoneyNum) return data def OutputString(self): DumpString = ''' + NameLen:%d, Name:%s, PlayeJob:%d, MoneyNum:%d '''\ %( + self.NameLen, self.Name, self.PlayeJob, self.MoneyNum @@ -1398,15 +1683,18 @@ class tagFRedPacketInfo(Structure): RedPacketID = 0 #(DWORD RedPacketID)//红包唯一ID PlayerID = 0 #(DWORD PlayerID)//玩家ID - Name = "" #(char Name[33])//玩家名字 + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//玩家名字 Time = 0 #(DWORD Time)//时间 PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 MoneyType = 0 #(BYTE MoneyType)//金钱类型 - MoneyNum = 0 #(WORD MoneyNum)//金钱数量 + MoneyNum = 0 #(DWORD MoneyNum)//金钱数量 GetWay = 0 #(BYTE GetWay)//获得途径 PacketCnt = 0 #(BYTE PacketCnt)//可抢个数 State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完 - Wish = "" #(char Wish[33])//祝福语 + WishLen = 0 #(BYTE WishLen) + Wish = "" #(String Wish)//祝福语 + IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名 data = None def __init__(self): @@ -1417,20 +1705,24 @@ self.Clear() self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen) + self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): self.RedPacketID = 0 self.PlayerID = 0 + self.NameLen = 0 self.Name = "" self.Time = 0 self.PlayeJob = 0 @@ -1439,22 +1731,27 @@ self.GetWay = 0 self.PacketCnt = 0 self.State = 0 + self.WishLen = 0 self.Wish = "" + self.IsAnonymous = 0 return def GetLength(self): length = 0 length += 4 length += 4 - length += 33 + length += 1 + length += len(self.Name) length += 4 length += 1 length += 1 - length += 2 + length += 4 length += 1 length += 1 length += 1 - length += 33 + length += 1 + length += len(self.Wish) + length += 1 return length @@ -1462,21 +1759,25 @@ data = '' data = CommFunc.WriteDWORD(data, self.RedPacketID) data = CommFunc.WriteDWORD(data, self.PlayerID) - data = CommFunc.WriteString(data, 33, self.Name) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) data = CommFunc.WriteDWORD(data, self.Time) data = CommFunc.WriteBYTE(data, self.PlayeJob) data = CommFunc.WriteBYTE(data, self.MoneyType) - data = CommFunc.WriteWORD(data, self.MoneyNum) + data = CommFunc.WriteDWORD(data, self.MoneyNum) data = CommFunc.WriteBYTE(data, self.GetWay) data = CommFunc.WriteBYTE(data, self.PacketCnt) data = CommFunc.WriteBYTE(data, self.State) - data = CommFunc.WriteString(data, 33, self.Wish) + data = CommFunc.WriteBYTE(data, self.WishLen) + data = CommFunc.WriteString(data, self.WishLen, self.Wish) + data = CommFunc.WriteBYTE(data, self.IsAnonymous) return data def OutputString(self): DumpString = ''' RedPacketID:%d, PlayerID:%d, + NameLen:%d, Name:%s, Time:%d, PlayeJob:%d, @@ -1485,11 +1786,14 @@ GetWay:%d, PacketCnt:%d, State:%d, - Wish:%s + WishLen:%d, + Wish:%s, + IsAnonymous:%d '''\ %( self.RedPacketID, self.PlayerID, + self.NameLen, self.Name, self.Time, self.PlayeJob, @@ -1498,7 +1802,9 @@ self.GetWay, self.PacketCnt, self.State, - self.Wish + self.WishLen, + self.Wish, + self.IsAnonymous ) return DumpString @@ -2121,6 +2427,58 @@ #------------------------------------------------------ +# A4 0D 通知建盟次数 #tagGCServerCreatFamilyTimes + +class tagGCServerCreatFamilyTimes(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Times", c_int), #建盟次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA4 + self.SubCmd = 0x0D + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA4 + self.SubCmd = 0x0D + self.Times = 0 + return + + def GetLength(self): + return sizeof(tagGCServerCreatFamilyTimes) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A4 0D 通知建盟次数 //tagGCServerCreatFamilyTimes: + Cmd:%s, + SubCmd:%s, + Times:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Times + ) + return DumpString + + +m_NAtagGCServerCreatFamilyTimes=tagGCServerCreatFamilyTimes() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCServerCreatFamilyTimes.Cmd,m_NAtagGCServerCreatFamilyTimes.SubCmd))] = m_NAtagGCServerCreatFamilyTimes + + +#------------------------------------------------------ #A4 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo class tagtMemberInfo(Structure): @@ -2129,7 +2487,8 @@ Name = "" #(String Name)//size=NameLen PlayerLV = 0 #(WORD PlayerLV)//玩家等级 PlayeJob = 0 #(BYTE PlayeJob)//玩家职业 - PlayeFightPower = 0 #(DWORD PlayeFightPower)//玩家战斗力 + PlayeFightPower = 0 #(DWORD PlayeFightPower)//玩家战斗力,求余亿部分 + PlayeFightPowerEx = 0 #(DWORD PlayeFightPowerEx)//玩家战斗力,整除亿部分,1代表1亿 RequestTime = 0 #(DWORD RequestTime)//申请时间 IsOnLine = 0 #(BYTE IsOnLine)//是否在线 data = None @@ -2146,6 +2505,7 @@ self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.PlayeFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayeFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.RequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.IsOnLine,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos @@ -2157,6 +2517,7 @@ self.PlayerLV = 0 self.PlayeJob = 0 self.PlayeFightPower = 0 + self.PlayeFightPowerEx = 0 self.RequestTime = 0 self.IsOnLine = 0 return @@ -2168,6 +2529,7 @@ length += len(self.Name) length += 2 length += 1 + length += 4 length += 4 length += 4 length += 1 @@ -2182,6 +2544,7 @@ data = CommFunc.WriteWORD(data, self.PlayerLV) data = CommFunc.WriteBYTE(data, self.PlayeJob) data = CommFunc.WriteDWORD(data, self.PlayeFightPower) + data = CommFunc.WriteDWORD(data, self.PlayeFightPowerEx) data = CommFunc.WriteDWORD(data, self.RequestTime) data = CommFunc.WriteBYTE(data, self.IsOnLine) return data @@ -2194,6 +2557,7 @@ PlayerLV:%d, PlayeJob:%d, PlayeFightPower:%d, + PlayeFightPowerEx:%d, RequestTime:%d, IsOnLine:%d '''\ @@ -2204,6 +2568,7 @@ self.PlayerLV, self.PlayeJob, self.PlayeFightPower, + self.PlayeFightPowerEx, self.RequestTime, self.IsOnLine ) @@ -2274,6 +2639,452 @@ m_NAtagGCViewFamilyRequestInfo=tagGCViewFamilyRequestInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCViewFamilyRequestInfo.Head.Cmd,m_NAtagGCViewFamilyRequestInfo.Head.SubCmd))] = m_NAtagGCViewFamilyRequestInfo + + +#------------------------------------------------------ +# A9 26 竞技场对战玩家最新信息 #tagGCArenaBattlePlayerInfo + +class tagGCArenaBattlePlayerInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)//目标玩家ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x26 + 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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x26 + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.Score = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + 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.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Score:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Score + ) + return DumpString + + +m_NAtagGCArenaBattlePlayerInfo=tagGCArenaBattlePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattlePlayerInfo.Head.Cmd,m_NAtagGCArenaBattlePlayerInfo.Head.SubCmd))] = m_NAtagGCArenaBattlePlayerInfo + + +#------------------------------------------------------ +# A9 23 竞技场对战记录列表 #tagGCArenaBattleRecordList + +class tagGCArenaBattleRecord(Structure): + PlayerID = 0 #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + AddScoreLen = 0 #(BYTE AddScoreLen) + AddScore = "" #(String AddScore)//本次对战增加的积分,有正负 + IsWin = 0 #(BYTE IsWin)//是否获胜 + Time = 0 #(DWORD Time)//时间戳 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.AddScoreLen) + self.IsWin,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.Score = 0 + self.AddScoreLen = 0 + self.AddScore = "" + self.IsWin = 0 + self.Time = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.AddScore) + length += 1 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) + data = CommFunc.WriteBYTE(data, self.AddScoreLen) + data = CommFunc.WriteString(data, self.AddScoreLen, self.AddScore) + data = CommFunc.WriteBYTE(data, self.IsWin) + data = CommFunc.WriteDWORD(data, self.Time) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Score:%d, + AddScoreLen:%d, + AddScore:%s, + IsWin:%d, + Time:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Score, + self.AddScoreLen, + self.AddScore, + self.IsWin, + self.Time + ) + return DumpString + + +class tagGCArenaBattleRecordList(Structure): + Head = tagHead() + RecordCount = 0 #(BYTE RecordCount) + BattleRecordList = list() #(vector<tagGCArenaBattleRecord> BattleRecordList)// 对战列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temBattleRecordList = tagGCArenaBattleRecord() + _pos = temBattleRecordList.ReadData(_lpData, _pos) + self.BattleRecordList.append(temBattleRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x23 + self.RecordCount = 0 + self.BattleRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RecordCount): + length += self.BattleRecordList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.BattleRecordList[i].GetLength(), self.BattleRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordCount:%d, + BattleRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCArenaBattleRecordList=tagGCArenaBattleRecordList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaBattleRecordList.Head.Cmd,m_NAtagGCArenaBattleRecordList.Head.SubCmd))] = m_NAtagGCArenaBattleRecordList + + +#------------------------------------------------------ +# A9 22 竞技场匹配玩家列表 #tagGCArenaMatchList + +class tagGCArenaMatchInfo(Structure): + PlayerID = 0 #(DWORD PlayerID)//目标玩家ID,小于10000为机器人ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界,机器人读境界表取等级对应境界 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分,机器人读等级表取等级对应战力 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分,机器人读等级表取等级对应战力 + Score = 0 #(DWORD Score)//积分 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.Score = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteDWORD(data, self.Score) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d, + Score:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx, + self.Score + ) + return DumpString + + +class tagGCArenaMatchList(Structure): + Head = tagHead() + MatchCount = 0 #(BYTE MatchCount) + MatchList = list() #(vector<tagGCArenaMatchInfo> MatchList)// 匹配列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MatchCount): + temMatchList = tagGCArenaMatchInfo() + _pos = temMatchList.ReadData(_lpData, _pos) + self.MatchList.append(temMatchList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x22 + self.MatchCount = 0 + self.MatchList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.MatchCount): + length += self.MatchList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.MatchCount) + for i in range(self.MatchCount): + data = CommFunc.WriteString(data, self.MatchList[i].GetLength(), self.MatchList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + MatchCount:%d, + MatchList:%s + '''\ + %( + self.Head.OutputString(), + self.MatchCount, + "..." + ) + return DumpString + + +m_NAtagGCArenaMatchList=tagGCArenaMatchList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCArenaMatchList.Head.Cmd,m_NAtagGCArenaMatchList.Head.SubCmd))] = m_NAtagGCArenaMatchList #------------------------------------------------------ @@ -3421,7 +4232,7 @@ EvolveLV = 0 #(BYTE EvolveLV)//进化等级 WashLV = 0 #(BYTE WashLV)//洗练等级 WashValueCount = 0 #(BYTE WashValueCount) - WashValueList = list() #(vector<WORD> WashValueList)//洗练值 + WashValueList = list() #(vector<DWORD> WashValueList)//洗练值 StoneIDCount = 0 #(BYTE StoneIDCount) StoneIDList = list() #(vector<DWORD> StoneIDList)//宝石 ClassEquipCount = 0 #(BYTE ClassEquipCount) @@ -3445,7 +4256,7 @@ self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.WashValueCount): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.WashValueList.append(value) self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.StoneIDCount): @@ -3487,7 +4298,7 @@ length += 1 length += 1 length += 1 - length += 2 * self.WashValueCount + length += 4 * self.WashValueCount length += 1 length += 4 * self.StoneIDCount length += 1 @@ -3507,7 +4318,7 @@ data = CommFunc.WriteBYTE(data, self.WashLV) data = CommFunc.WriteBYTE(data, self.WashValueCount) for i in range(self.WashValueCount): - data = CommFunc.WriteWORD(data, self.WashValueList[i]) + data = CommFunc.WriteDWORD(data, self.WashValueList[i]) data = CommFunc.WriteBYTE(data, self.StoneIDCount) for i in range(self.StoneIDCount): data = CommFunc.WriteDWORD(data, self.StoneIDList[i]) @@ -4316,6 +5127,215 @@ #------------------------------------------------------ +# A9 AD 通知天星塔全服奖励通关玩家信息 #tagGCSkyTowerPassPlayerInfo + +class tagGCSkyTowerPassPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV + ) + return DumpString + + +class tagGCSkyTowerPassFloor(Structure): + FloorID = 0 #(DWORD FloorID)// 层ID + PassPlayerCount = 0 #(BYTE PassPlayerCount)// 通关记录玩家数 + PassPlayerIDList = list() #(vector<DWORD> PassPlayerIDList)// 通关记录玩家ID列表 [第1个通过玩家ID, 第2个, ...] + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FloorID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PassPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PassPlayerCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.PassPlayerIDList.append(value) + return _pos + + def Clear(self): + self.FloorID = 0 + self.PassPlayerCount = 0 + self.PassPlayerIDList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 4 * self.PassPlayerCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.FloorID) + data = CommFunc.WriteBYTE(data, self.PassPlayerCount) + for i in range(self.PassPlayerCount): + data = CommFunc.WriteDWORD(data, self.PassPlayerIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + FloorID:%d, + PassPlayerCount:%d, + PassPlayerIDList:%s + '''\ + %( + self.FloorID, + self.PassPlayerCount, + "..." + ) + return DumpString + + +class tagGCSkyTowerPassPlayerInfo(Structure): + Head = tagHead() + FloorCount = 0 #(WORD FloorCount) + PassFloorList = list() #(vector<tagGCSkyTowerPassFloor> PassFloorList)// 通关塔层信息列表 + PlayerCount = 0 #(WORD PlayerCount) + PassPlayerList = list() #(vector<tagGCSkyTowerPassPlayer> PassPlayerList)// 通关玩家信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAD + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FloorCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.FloorCount): + temPassFloorList = tagGCSkyTowerPassFloor() + _pos = temPassFloorList.ReadData(_lpData, _pos) + self.PassFloorList.append(temPassFloorList) + self.PlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.PlayerCount): + temPassPlayerList = tagGCSkyTowerPassPlayer() + _pos = temPassPlayerList.ReadData(_lpData, _pos) + self.PassPlayerList.append(temPassPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0xAD + self.FloorCount = 0 + self.PassFloorList = list() + self.PlayerCount = 0 + self.PassPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.FloorCount): + length += self.PassFloorList[i].GetLength() + length += 2 + for i in range(self.PlayerCount): + length += self.PassPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.FloorCount) + for i in range(self.FloorCount): + data = CommFunc.WriteString(data, self.PassFloorList[i].GetLength(), self.PassFloorList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.PassPlayerList[i].GetLength(), self.PassPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FloorCount:%d, + PassFloorList:%s, + PlayerCount:%d, + PassPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.FloorCount, + "...", + self.PlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCSkyTowerPassPlayerInfo=tagGCSkyTowerPassPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSkyTowerPassPlayerInfo.Head.Cmd,m_NAtagGCSkyTowerPassPlayerInfo.Head.SubCmd))] = m_NAtagGCSkyTowerPassPlayerInfo + + +#------------------------------------------------------ # A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo class tagGCStoreServerBuyCnt(Structure): @@ -4641,7 +5661,8 @@ ("SubCmd", c_ubyte), ("Point", c_int), # 复活点数 ("TotalPoint", c_int), # 复活总点数 - ("RebornCnt", c_ushort), # 复活次数 + ("RebornCnt", c_ushort), # 今日已复活次数 + ("TotalRebornCnt", c_ushort), # 每日可复活总次数,0为不限制 ] def __init__(self): @@ -4661,6 +5682,7 @@ self.Point = 0 self.TotalPoint = 0 self.RebornCnt = 0 + self.TotalRebornCnt = 0 return def GetLength(self): @@ -4675,20 +5697,304 @@ SubCmd:%s, Point:%d, TotalPoint:%d, - RebornCnt:%d + RebornCnt:%d, + TotalRebornCnt:%d '''\ %( self.Cmd, self.SubCmd, self.Point, self.TotalPoint, - self.RebornCnt + self.RebornCnt, + self.TotalRebornCnt ) return DumpString m_NAtagGCBossRebornPoint=tagGCBossRebornPoint() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint + + +#------------------------------------------------------ +# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo + +class tagGCCrossActAllRechargeItem(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(tagGCCrossActAllRechargeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagGCCrossActAllRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedRMB = 0 #(DWORD NeedRMB)// 所需全民充值RMB + NeedPlayerCount = 0 #(WORD NeedPlayerCount)// 所需充值达到该档玩家数 + NowPlayerCount = 0 #(WORD NowPlayerCount)// 当前充值达到该档玩家数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItemList = list() #(vector<tagGCCrossActAllRechargeItem> 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.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagGCCrossActAllRechargeItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedRMB = 0 + self.NeedPlayerCount = 0 + self.NowPlayerCount = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 2 + length += 2 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.NeedRMB) + data = CommFunc.WriteWORD(data, self.NeedPlayerCount) + data = CommFunc.WriteWORD(data, self.NowPlayerCount) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedRMB:%d, + NeedPlayerCount:%d, + NowPlayerCount:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedRMB, + self.NeedPlayerCount, + self.NowPlayerCount, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagGCCrossActAllRechargeInfo(Structure): + Head = tagHead() + ServerInfoLen = 0 #(BYTE ServerInfoLen) + ServerIDRangeInfo = "" #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AwardCount = 0 #(BYTE AwardCount) + AwardList = list() #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x13 + 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.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardList = tagGCCrossActAllRechargeAward() + _pos = temAwardList.ReadData(_lpData, _pos) + self.AwardList.append(temAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x13 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.StartDate = "" + self.EndtDate = "" + self.AwardCount = 0 + self.AwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 10 + length += 10 + length += 1 + for i in range(self.AwardCount): + length += self.AwardList[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.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + StartDate:%s, + EndtDate:%s, + AwardCount:%d, + AwardList:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.StartDate, + self.EndtDate, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo + + +#------------------------------------------------------ +# AC 12 跨服运营活动结束 # tagGCCrossActEnd + +class tagGCCrossActEnd(Structure): + Head = tagHead() + ActNameLen = 0 #(BYTE ActNameLen) + ActName = "" #(String ActName) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ActName,_pos = CommFunc.ReadString(_lpData, _pos,self.ActNameLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x12 + self.ActNameLen = 0 + self.ActName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ActName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNameLen) + data = CommFunc.WriteString(data, self.ActNameLen, self.ActName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNameLen:%d, + ActName:%s + '''\ + %( + self.Head.OutputString(), + self.ActNameLen, + self.ActName + ) + return DumpString + + +m_NAtagGCCrossActEnd=tagGCCrossActEnd() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActEnd.Head.Cmd,m_NAtagGCCrossActEnd.Head.SubCmd))] = m_NAtagGCCrossActEnd #------------------------------------------------------ @@ -4774,6 +6080,58 @@ m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo + + +#------------------------------------------------------ +# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo + +class tagGCFamilyWarInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("WorldLV", c_ushort), # 当前进行中的联赛世界等级 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAC + self.SubCmd = 0x01 + 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 = 0xAC + self.SubCmd = 0x01 + self.WorldLV = 0 + return + + def GetLength(self): + return sizeof(tagGCFamilyWarInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo: + Cmd:%s, + SubCmd:%s, + WorldLV:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.WorldLV + ) + return DumpString + + +m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo #------------------------------------------------------ @@ -5674,6 +7032,427 @@ #------------------------------------------------------ +# B0 01 新增协助 #tagGCAssistInfoList + +class tagGCAssistInfo(Structure): + AssistGUID = "" #(char AssistGUID[40])//协助GUID + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(BYTE RealmLV)//境界 + MapID = 0 #(DWORD MapID) + LineID = 0 #(DWORD LineID) + NPCID = 0 #(DWORD NPCID) + ExDataLen = 0 #(WORD ExDataLen) + ExData = "" #(String ExData)//其他自定义数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen) + return _pos + + def Clear(self): + self.AssistGUID = "" + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.MapID = 0 + self.LineID = 0 + self.NPCID = 0 + self.ExDataLen = 0 + self.ExData = "" + return + + def GetLength(self): + length = 0 + length += 40 + length += 4 + length += 33 + length += 1 + length += 2 + length += 1 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.ExData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 40, self.AssistGUID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteDWORD(data, self.LineID) + data = CommFunc.WriteDWORD(data, self.NPCID) + data = CommFunc.WriteWORD(data, self.ExDataLen) + data = CommFunc.WriteString(data, self.ExDataLen, self.ExData) + return data + + def OutputString(self): + DumpString = ''' + AssistGUID:%s, + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + MapID:%d, + LineID:%d, + NPCID:%d, + ExDataLen:%d, + ExData:%s + '''\ + %( + self.AssistGUID, + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.MapID, + self.LineID, + self.NPCID, + self.ExDataLen, + self.ExData + ) + return DumpString + + +class tagGCAssistInfoList(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + AssistInfoList = list() #(vector<tagGCAssistInfo> AssistInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x01 + 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): + temAssistInfoList = tagGCAssistInfo() + _pos = temAssistInfoList.ReadData(_lpData, _pos) + self.AssistInfoList.append(temAssistInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x01 + self.Count = 0 + self.AssistInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.AssistInfoList[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.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + AssistInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCAssistInfoList=tagGCAssistInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList + + +#------------------------------------------------------ +# B0 03 正在进行中的协助 #tagGCAssistingInfo + +class tagGCAssistingInfo(Structure): + Head = tagHead() + AssistGUID = "" #(char AssistGUID[40])//协助GUID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x03 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x03 + self.AssistGUID = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 40 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 40, self.AssistGUID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AssistGUID:%s + '''\ + %( + self.Head.OutputString(), + self.AssistGUID + ) + return DumpString + + +m_NAtagGCAssistingInfo=tagGCAssistingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo + + +#------------------------------------------------------ +# B0 08 协助结束 #tagGCAssistOver + +class tagGCAssistOver(Structure): + Head = tagHead() + IsTagPlayerReason = 0 #(BYTE IsTagPlayerReason)//是否发布方原因 + ReasonLen = 0 #(BYTE ReasonLen) + Reason = "" #(String Reason)//原因 + AssistGUID = "" #(char AssistGUID[40])//协助GUID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.IsTagPlayerReason,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ReasonLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Reason,_pos = CommFunc.ReadString(_lpData, _pos,self.ReasonLen) + self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x08 + self.IsTagPlayerReason = 0 + self.ReasonLen = 0 + self.Reason = "" + self.AssistGUID = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += len(self.Reason) + length += 40 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IsTagPlayerReason) + data = CommFunc.WriteBYTE(data, self.ReasonLen) + data = CommFunc.WriteString(data, self.ReasonLen, self.Reason) + data = CommFunc.WriteString(data, 40, self.AssistGUID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + IsTagPlayerReason:%d, + ReasonLen:%d, + Reason:%s, + AssistGUID:%s + '''\ + %( + self.Head.OutputString(), + self.IsTagPlayerReason, + self.ReasonLen, + self.Reason, + self.AssistGUID + ) + return DumpString + + +m_NAtagGCAssistOver=tagGCAssistOver() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistOver.Head.Cmd,m_NAtagGCAssistOver.Head.SubCmd))] = m_NAtagGCAssistOver + + +#------------------------------------------------------ +# B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount + +class tagGCCanGetAssistThanksGiftCount(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CanGetCount", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x06 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x06 + self.CanGetCount = 0 + return + + def GetLength(self): + return sizeof(tagGCCanGetAssistThanksGiftCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount: + Cmd:%s, + SubCmd:%s, + CanGetCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CanGetCount + ) + return DumpString + + +m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount + + +#------------------------------------------------------ +# B0 02 删除协助 #tagGCClearAssist + +class tagGCClearAssist(Structure): + Head = tagHead() + AssistGUID = "" #(char AssistGUID[40])//协助GUID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x02 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x02 + self.AssistGUID = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 40 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 40, self.AssistGUID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AssistGUID:%s + '''\ + %( + self.Head.OutputString(), + self.AssistGUID + ) + return DumpString + + +m_NAtagGCClearAssist=tagGCClearAssist() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist + + +#------------------------------------------------------ #B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo class tagFamilyArrestOverState(Structure): @@ -5802,6 +7581,324 @@ #------------------------------------------------------ +# B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview + +class tagGCGetAssistThanksGiftPreview(Structure): + Head = tagHead() + ItemID = 0 #(DWORD ItemID)//礼盒ID + PlayerID = 0 #(DWORD PlayerID)//发起玩家ID + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + RealmLV = 0 #(BYTE RealmLV)//境界 + MapID = 0 #(DWORD MapID) + LineID = 0 #(DWORD LineID) + NPCID = 0 #(DWORD NPCID) + ExDataLen = 0 #(WORD ExDataLen) + ExData = "" #(String ExData)//其他自定义数据 + TimeStr = "" #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss + ExtraAward = 0 #(BYTE ExtraAward)//是否有额外奖励 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen) + self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x05 + self.ItemID = 0 + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.MapID = 0 + self.LineID = 0 + self.NPCID = 0 + self.ExDataLen = 0 + self.ExData = "" + self.TimeStr = "" + self.ExtraAward = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 33 + length += 1 + length += 2 + length += 1 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.ExData) + length += 19 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteDWORD(data, self.LineID) + data = CommFunc.WriteDWORD(data, self.NPCID) + data = CommFunc.WriteWORD(data, self.ExDataLen) + data = CommFunc.WriteString(data, self.ExDataLen, self.ExData) + data = CommFunc.WriteString(data, 19, self.TimeStr) + data = CommFunc.WriteBYTE(data, self.ExtraAward) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ItemID:%d, + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + MapID:%d, + LineID:%d, + NPCID:%d, + ExDataLen:%d, + ExData:%s, + TimeStr:%s, + ExtraAward:%d + '''\ + %( + self.Head.OutputString(), + self.ItemID, + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.MapID, + self.LineID, + self.NPCID, + self.ExDataLen, + self.ExData, + self.TimeStr, + self.ExtraAward + ) + return DumpString + + +m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview + + +#------------------------------------------------------ +# B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview + +class tagGCAssistPlayerInfo(Structure): + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + RealmLV = 0 #(BYTE RealmLV)//境界 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV + ) + return DumpString + + +class tagGCUseAssistThanksGiftPreview(Structure): + Head = tagHead() + ItemID = 0 #(DWORD ItemID)//礼盒ID + MapID = 0 #(DWORD MapID) + LineID = 0 #(DWORD LineID) + NPCID = 0 #(DWORD NPCID) + ExDataLen = 0 #(WORD ExDataLen) + ExData = "" #(String ExData)//其他自定义数据 + AssistPlayerCount = 0 #(BYTE AssistPlayerCount) + AssistPlayerList = list() #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x04 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ItemID,_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) + self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen) + self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AssistPlayerCount): + temAssistPlayerList = tagGCAssistPlayerInfo() + _pos = temAssistPlayerList.ReadData(_lpData, _pos) + self.AssistPlayerList.append(temAssistPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x04 + self.ItemID = 0 + self.MapID = 0 + self.LineID = 0 + self.NPCID = 0 + self.ExDataLen = 0 + self.ExData = "" + self.AssistPlayerCount = 0 + self.AssistPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.ExData) + length += 1 + for i in range(self.AssistPlayerCount): + length += self.AssistPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteDWORD(data, self.LineID) + data = CommFunc.WriteDWORD(data, self.NPCID) + data = CommFunc.WriteWORD(data, self.ExDataLen) + data = CommFunc.WriteString(data, self.ExDataLen, self.ExData) + data = CommFunc.WriteBYTE(data, self.AssistPlayerCount) + for i in range(self.AssistPlayerCount): + data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ItemID:%d, + MapID:%d, + LineID:%d, + NPCID:%d, + ExDataLen:%d, + ExData:%s, + AssistPlayerCount:%d, + AssistPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.ItemID, + self.MapID, + self.LineID, + self.NPCID, + self.ExDataLen, + self.ExData, + self.AssistPlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview + + +#------------------------------------------------------ #B3 03 询问是否允许添加好友#tagGCFriendAskIfJoin class tagGCFriendAskIfJoin(Structure): @@ -5877,6 +7974,994 @@ m_NAtagGCFriendAskIfJoin=tagGCFriendAskIfJoin() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendAskIfJoin.Head.Cmd,m_NAtagGCFriendAskIfJoin.Head.SubCmd))] = m_NAtagGCFriendAskIfJoin + + +#------------------------------------------------------ +# B3 24 喜糖列表 #tagGCCandyList + +class tagGCCandyInfo(Structure): + PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家ID - 请求方 + NameALen = 0 #(BYTE NameALen) + PlayerNameA = "" #(String PlayerNameA) + PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家ID - 接受方 + NameBLen = 0 #(BYTE NameBLen) + PlayerNameB = "" #(String PlayerNameB) + BridePriceID = 0 #(BYTE BridePriceID)// 聘礼ID + MarryTime = 0 #(DWORD MarryTime)// 成亲时间戳,秒 + EndTime = 0 #(DWORD EndTime)// 结束时间戳,秒 + Prosperity = 0 #(DWORD Prosperity)// 当前繁荣度 + FireworksTotalBuyCount = 0 #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数 + FireworksPlayerBuyCount = 0 #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数 + PlayerFreeEatCandyCount = 0 #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen) + self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen) + self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerIDA = 0 + self.NameALen = 0 + self.PlayerNameA = "" + self.PlayerIDB = 0 + self.NameBLen = 0 + self.PlayerNameB = "" + self.BridePriceID = 0 + self.MarryTime = 0 + self.EndTime = 0 + self.Prosperity = 0 + self.FireworksTotalBuyCount = 0 + self.FireworksPlayerBuyCount = 0 + self.PlayerFreeEatCandyCount = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerNameA) + length += 4 + length += 1 + length += len(self.PlayerNameB) + length += 1 + length += 4 + length += 4 + length += 4 + length += 1 + length += 1 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerIDA) + data = CommFunc.WriteBYTE(data, self.NameALen) + data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA) + data = CommFunc.WriteDWORD(data, self.PlayerIDB) + data = CommFunc.WriteBYTE(data, self.NameBLen) + data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB) + data = CommFunc.WriteBYTE(data, self.BridePriceID) + data = CommFunc.WriteDWORD(data, self.MarryTime) + data = CommFunc.WriteDWORD(data, self.EndTime) + data = CommFunc.WriteDWORD(data, self.Prosperity) + data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount) + data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount) + data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount) + return data + + def OutputString(self): + DumpString = ''' + PlayerIDA:%d, + NameALen:%d, + PlayerNameA:%s, + PlayerIDB:%d, + NameBLen:%d, + PlayerNameB:%s, + BridePriceID:%d, + MarryTime:%d, + EndTime:%d, + Prosperity:%d, + FireworksTotalBuyCount:%d, + FireworksPlayerBuyCount:%d, + PlayerFreeEatCandyCount:%d + '''\ + %( + self.PlayerIDA, + self.NameALen, + self.PlayerNameA, + self.PlayerIDB, + self.NameBLen, + self.PlayerNameB, + self.BridePriceID, + self.MarryTime, + self.EndTime, + self.Prosperity, + self.FireworksTotalBuyCount, + self.FireworksPlayerBuyCount, + self.PlayerFreeEatCandyCount + ) + return DumpString + + +class tagGCCandyList(Structure): + Head = tagHead() + CandyCount = 0 #(WORD CandyCount) + CandyInfoList = list() #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x24 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.CandyCount): + temCandyInfoList = tagGCCandyInfo() + _pos = temCandyInfoList.ReadData(_lpData, _pos) + self.CandyInfoList.append(temCandyInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x24 + self.CandyCount = 0 + self.CandyInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.CandyCount): + length += self.CandyInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.CandyCount) + for i in range(self.CandyCount): + data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + CandyCount:%d, + CandyInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.CandyCount, + "..." + ) + return DumpString + + +m_NAtagGCCandyList=tagGCCandyList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList + + +#------------------------------------------------------ +# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList + +class tagGCCharmOfferBillboardData(Structure): + OrderIndex = 0 #(DWORD OrderIndex)//名次索引,0代表第一名 + PlayerID = 0 #(DWORD PlayerID)// 玩家ID - 贡献者 + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + CharmValue = 0 #(DWORD CharmValue)//贡献魅力值 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.OrderIndex = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.CharmValue = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.OrderIndex) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.CharmValue) + return data + + def OutputString(self): + DumpString = ''' + OrderIndex:%d, + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + CharmValue:%d + '''\ + %( + self.OrderIndex, + self.PlayerID, + self.NameLen, + self.PlayerName, + self.CharmValue + ) + return DumpString + + +class tagGCCharmOfferBillboardDataList(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 魅力玩家ID + QueryType = 0 #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜 + DataCount = 0 #(BYTE DataCount) + OfferBillboardDataList = list() #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x19 + 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.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DataCount): + temOfferBillboardDataList = tagGCCharmOfferBillboardData() + _pos = temOfferBillboardDataList.ReadData(_lpData, _pos) + self.OfferBillboardDataList.append(temOfferBillboardDataList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x19 + self.PlayerID = 0 + self.QueryType = 0 + self.DataCount = 0 + self.OfferBillboardDataList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + for i in range(self.DataCount): + length += self.OfferBillboardDataList[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.QueryType) + data = CommFunc.WriteBYTE(data, self.DataCount) + for i in range(self.DataCount): + data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + QueryType:%d, + DataCount:%d, + OfferBillboardDataList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.QueryType, + self.DataCount, + "..." + ) + return DumpString + + +m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList + + +#------------------------------------------------------ +# B3 26 伴侣信息 #tagGCCoupleInfo + +class tagGCCoupleInfo(Structure): + Head = tagHead() + CoupleID = 0 #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取 + NameLen = 0 #(BYTE NameLen) + CoupleName = "" #(String CoupleName) + NewMarryTime = 0 #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算 + MarryTime = 0 #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算 + BridePriceState = 0 #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次 + BreakRequestID = 0 #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求 + BreakRequestTime = 0 #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期 + PlayerBreakRequestTime = 0 #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x26 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x26 + self.CoupleID = 0 + self.NameLen = 0 + self.CoupleName = "" + self.NewMarryTime = 0 + self.MarryTime = 0 + self.BridePriceState = 0 + self.BreakRequestID = 0 + self.BreakRequestTime = 0 + self.PlayerBreakRequestTime = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.CoupleName) + length += 4 + length += 4 + 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.CoupleID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.CoupleName) + data = CommFunc.WriteDWORD(data, self.NewMarryTime) + data = CommFunc.WriteDWORD(data, self.MarryTime) + data = CommFunc.WriteDWORD(data, self.BridePriceState) + data = CommFunc.WriteDWORD(data, self.BreakRequestID) + data = CommFunc.WriteDWORD(data, self.BreakRequestTime) + data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + CoupleID:%d, + NameLen:%d, + CoupleName:%s, + NewMarryTime:%d, + MarryTime:%d, + BridePriceState:%d, + BreakRequestID:%d, + BreakRequestTime:%d, + PlayerBreakRequestTime:%d + '''\ + %( + self.Head.OutputString(), + self.CoupleID, + self.NameLen, + self.CoupleName, + self.NewMarryTime, + self.MarryTime, + self.BridePriceState, + self.BreakRequestID, + self.BreakRequestTime, + self.PlayerBreakRequestTime + ) + return DumpString + + +m_NAtagGCCoupleInfo=tagGCCoupleInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo + + +#------------------------------------------------------ +# B3 22 收到提亲信息 #tagGCMarryReqInfo + +class tagGCMarryReqInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可 + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + BridePriceID = 0 #(BYTE BridePriceID)// 聘礼ID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x22 + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.BridePriceID = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.BridePriceID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + BridePriceID:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.NameLen, + self.PlayerName, + self.BridePriceID + ) + return DumpString + + +m_NAtagGCMarryReqInfo=tagGCMarryReqInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo + + +#------------------------------------------------------ +# B3 21 提亲发送成功 #tagGCMarryReqOK + +class tagGCMarryReqOK(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x21 + return + + def GetLength(self): + return sizeof(tagGCMarryReqOK) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagGCMarryReqOK=tagGCMarryReqOK() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK + + +#------------------------------------------------------ +# B3 23 提亲回应结果 #tagGCMarryResponseRet + +class tagGCMarryResponseRet(Structure): + Head = tagHead() + PlayerIDA = 0 #(DWORD PlayerIDA)// 玩家ID - 请求方 + NameALen = 0 #(BYTE NameALen) + PlayerNameA = "" #(String PlayerNameA) + PlayerIDB = 0 #(DWORD PlayerIDB)// 玩家ID - 接受方 + NameBLen = 0 #(BYTE NameBLen) + PlayerNameB = "" #(String PlayerNameB) + IsOK = 0 #(BYTE IsOK)// 是否同意,0-否,1-是; 如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen) + self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen) + self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x23 + self.PlayerIDA = 0 + self.NameALen = 0 + self.PlayerNameA = "" + self.PlayerIDB = 0 + self.NameBLen = 0 + self.PlayerNameB = "" + self.IsOK = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.PlayerNameA) + length += 4 + length += 1 + length += len(self.PlayerNameB) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerIDA) + data = CommFunc.WriteBYTE(data, self.NameALen) + data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA) + data = CommFunc.WriteDWORD(data, self.PlayerIDB) + data = CommFunc.WriteBYTE(data, self.NameBLen) + data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB) + data = CommFunc.WriteBYTE(data, self.IsOK) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerIDA:%d, + NameALen:%d, + PlayerNameA:%s, + PlayerIDB:%d, + NameBLen:%d, + PlayerNameB:%s, + IsOK:%d + '''\ + %( + self.Head.OutputString(), + self.PlayerIDA, + self.NameALen, + self.PlayerNameA, + self.PlayerIDB, + self.NameBLen, + self.PlayerNameB, + self.IsOK + ) + return DumpString + + +m_NAtagGCMarryResponseRet=tagGCMarryResponseRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet + + +#------------------------------------------------------ +# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo + +class tagGCPlayerCharmValueInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CharmValueTotal", c_int), #当前魅力值 - 总 + ("CharmValueWeek", c_int), #当前魅力值 - 周 + ("CharmValueDay", c_int), #当前魅力值 - 日 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x25 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x25 + self.CharmValueTotal = 0 + self.CharmValueWeek = 0 + self.CharmValueDay = 0 + return + + def GetLength(self): + return sizeof(tagGCPlayerCharmValueInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo: + Cmd:%s, + SubCmd:%s, + CharmValueTotal:%d, + CharmValueWeek:%d, + CharmValueDay:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CharmValueTotal, + self.CharmValueWeek, + self.CharmValueDay + ) + return DumpString + + +m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo + + +#------------------------------------------------------ +# B3 20 送礼物成功通知 #tagGCSendGiftsOKList + +class tagGCSendGiftsOK(Structure): + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 赠送方玩家名 + PlayerID = 0 #(DWORD PlayerID)// 赠送方玩家ID + GiftNum = 0 #(WORD GiftNum)// 赠送礼物编号 + GiftCount = 0 #(DWORD GiftCount)// 赠送礼物数量 + SendTime = 0 #(DWORD SendTime)// 赠送时间戳 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.Name = "" + self.PlayerID = 0 + self.GiftNum = 0 + self.GiftCount = 0 + self.SendTime = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.Name) + length += 4 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteWORD(data, self.GiftNum) + data = CommFunc.WriteDWORD(data, self.GiftCount) + data = CommFunc.WriteDWORD(data, self.SendTime) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + Name:%s, + PlayerID:%d, + GiftNum:%d, + GiftCount:%d, + SendTime:%d + '''\ + %( + self.NameLen, + self.Name, + self.PlayerID, + self.GiftNum, + self.GiftCount, + self.SendTime + ) + return DumpString + + +class tagGCSendGiftsOKList(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + SendGiftsOKList = list() #(vector<tagGCSendGiftsOK> SendGiftsOKList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temSendGiftsOKList = tagGCSendGiftsOK() + _pos = temSendGiftsOKList.ReadData(_lpData, _pos) + self.SendGiftsOKList.append(temSendGiftsOKList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x20 + self.Count = 0 + self.SendGiftsOKList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.SendGiftsOKList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SendGiftsOKList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList + + +#------------------------------------------------------ +# B3 14 社交人群伴侣信息 #tagGCSocialCouples + +class tagGCSocialCouple(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), + ("CoupleID", c_int), #伴侣ID + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.PlayerID = 0 + self.CoupleID = 0 + return + + def GetLength(self): + return sizeof(tagGCSocialCouple) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 14 社交人群伴侣信息 //tagGCSocialCouples: + PlayerID:%d, + CoupleID:%d + '''\ + %( + self.PlayerID, + self.CoupleID + ) + return DumpString + + +class tagGCSocialCouples(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + Player = list() #(vector<tagGCSocialCouple> Player)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x14 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPlayer = tagGCSocialCouple() + _pos = temPlayer.ReadData(_lpData, _pos) + self.Player.append(temPlayer) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x14 + self.Count = 0 + self.Player = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.Player[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.Player[i].GetLength(), self.Player[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + Player:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCSocialCouples=tagGCSocialCouples() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialCouples.Head.Cmd,m_NAtagGCSocialCouples.Head.SubCmd))] = m_NAtagGCSocialCouples #------------------------------------------------------ @@ -6250,7 +9335,7 @@ _pack_ = 1 _fields_ = [ ("PlayerID", c_int), - ("SortValue", c_int), + ("SortValue", c_int), # 亲密组时为亲密度 ] def __init__(self): @@ -6287,7 +9372,7 @@ class tagGCGroupPlayers(Structure): Head = tagHead() - GroupType = 0 #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 + GroupType = 0 #(BYTE GroupType)// 分组 1 最近联系人 2 好友 3 仇人 4 黑名单 5亲密组 Count = 0 #(WORD Count) Players = list() #(vector<tagGCGroupPlayer> Players)//size = Count data = None @@ -6669,6 +9754,162 @@ #------------------------------------------------------ +# B3 11 聊天缓存通知 #tagGCTalkCache + +class tagGCTalkCacheInfo(Structure): + ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)//size = SrcNameLen + PlayerID = 0 #(DWORD PlayerID) + Time = 0 #(DWORD Time) + Len = 0 #(WORD Len) + Content = "" #(String Content)//size = Len + Extras = "" #(char Extras[256])//附加值列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Content,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) + self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256) + return _pos + + def Clear(self): + self.ChannelType = 0 + self.NameLen = 0 + self.Name = "" + self.PlayerID = 0 + self.Time = 0 + self.Len = 0 + self.Content = "" + self.Extras = "" + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += len(self.Name) + length += 4 + length += 4 + length += 2 + length += len(self.Content) + length += 256 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ChannelType) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteDWORD(data, self.Time) + data = CommFunc.WriteWORD(data, self.Len) + data = CommFunc.WriteString(data, self.Len, self.Content) + data = CommFunc.WriteString(data, 256, self.Extras) + return data + + def OutputString(self): + DumpString = ''' + ChannelType:%d, + NameLen:%d, + Name:%s, + PlayerID:%d, + Time:%d, + Len:%d, + Content:%s, + Extras:%s + '''\ + %( + self.ChannelType, + self.NameLen, + self.Name, + self.PlayerID, + self.Time, + self.Len, + self.Content, + self.Extras + ) + return DumpString + + +class tagGCTalkCache(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + InfoList = list() #(vector<tagGCTalkCacheInfo> InfoList)//size = Count + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temInfoList = tagGCTalkCacheInfo() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x11 + self.Count = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.InfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCTalkCache=tagGCTalkCache() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTalkCache.Head.Cmd,m_NAtagGCTalkCache.Head.SubCmd))] = m_NAtagGCTalkCache + + +#------------------------------------------------------ # B5 04 拍卖行新上架拍品 #tagGCAddAuctionItemInfo class tagGCAddAuctionItem(Structure): @@ -6858,7 +10099,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -6875,7 +10116,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -6900,7 +10141,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -6914,7 +10155,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -7021,7 +10262,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -7038,7 +10279,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -7063,7 +10304,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -7077,7 +10318,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -7261,7 +10502,7 @@ ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss BidderID = 0 #(DWORD BidderID)//竞拍玩家ID,也就是当前最高竞价玩家ID - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -7279,7 +10520,7 @@ self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.BidderID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -7306,7 +10547,7 @@ length += 2 length += 19 length += 4 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -7321,7 +10562,7 @@ data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) data = CommFunc.WriteDWORD(data, self.BidderID) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -7529,6 +10770,74 @@ #------------------------------------------------------ +# B5 11 部位升星自动购买拍品消耗信息 #tagGCEquipStarAutoBuyCostInfo + +class tagGCEquipStarAutoBuyCostInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ClassLV", c_ubyte), # 当前要升星的境界阶 + ("EquipPlace", c_ubyte), #当前要升星的装备位 + ("CurStar", c_ubyte), #当前星级 + ("CurRate", c_ubyte), #当前自动购买后的总概率,不满100则代表拍品库存不足 + ("AutoBuyCostMoney", c_int), #自动购买所需总消耗 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB5 + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB5 + self.SubCmd = 0x11 + self.ClassLV = 0 + self.EquipPlace = 0 + self.CurStar = 0 + self.CurRate = 0 + self.AutoBuyCostMoney = 0 + return + + def GetLength(self): + return sizeof(tagGCEquipStarAutoBuyCostInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B5 11 部位升星自动购买拍品消耗信息 //tagGCEquipStarAutoBuyCostInfo: + Cmd:%s, + SubCmd:%s, + ClassLV:%d, + EquipPlace:%d, + CurStar:%d, + CurRate:%d, + AutoBuyCostMoney:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ClassLV, + self.EquipPlace, + self.CurStar, + self.CurRate, + self.AutoBuyCostMoney + ) + return DumpString + + +m_NAtagGCEquipStarAutoBuyCostInfo=tagGCEquipStarAutoBuyCostInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEquipStarAutoBuyCostInfo.Cmd,m_NAtagGCEquipStarAutoBuyCostInfo.SubCmd))] = m_NAtagGCEquipStarAutoBuyCostInfo + + +#------------------------------------------------------ # B5 05 拍卖行仙盟拍卖中的物品信息 #tagGCFamilyAuctionItemInfo class tagGCFamilyAuctionItem(Structure): @@ -7537,7 +10846,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -7557,7 +10866,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -7588,7 +10897,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -7605,7 +10914,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -7721,7 +11030,7 @@ ItemID = 0 #(DWORD ItemID) ItemCount = 0 #(WORD ItemCount) AddTime = "" #(char AddTime[19])//上架时间 yyyy-MM-dd hh:mm:ss - BidderPrice = 0 #(WORD BidderPrice)//竞拍玩家出价 + BidderPrice = 0 #(DWORD BidderPrice)//竞拍玩家出价 BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss UserDataLen = 0 #(WORD UserDataLen) UserData = "" #(String UserData)//自定义数据 @@ -7738,7 +11047,7 @@ self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) self.AddTime,_pos = CommFunc.ReadString(_lpData, _pos,19) - self.BidderPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BidderPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BiddingTime,_pos = CommFunc.ReadString(_lpData, _pos,19) self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) @@ -7763,7 +11072,7 @@ length += 4 length += 2 length += 19 - length += 2 + length += 4 length += 19 length += 2 length += len(self.UserData) @@ -7777,7 +11086,7 @@ data = CommFunc.WriteDWORD(data, self.ItemID) data = CommFunc.WriteWORD(data, self.ItemCount) data = CommFunc.WriteString(data, 19, self.AddTime) - data = CommFunc.WriteWORD(data, self.BidderPrice) + data = CommFunc.WriteDWORD(data, self.BidderPrice) data = CommFunc.WriteString(data, 19, self.BiddingTime) data = CommFunc.WriteWORD(data, self.UserDataLen) data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) @@ -9650,6 +12959,1813 @@ #------------------------------------------------------ +# C0 23 跨服排位竞猜个人信息 #tagGCChampionshipGuessPriInfo + +class tagGCChampionshipGuessPlayerPri(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), # 目标玩家ID + ("MoneyTotal", c_int), # 已投注该玩家货币总数 + ("GuessRank", c_ubyte), # 竞猜名次,没有名次的竞猜默认0;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.PlayerID = 0 + self.MoneyTotal = 0 + self.GuessRank = 0 + return + + def GetLength(self): + return sizeof(tagGCChampionshipGuessPlayerPri) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 23 跨服排位竞猜个人信息 //tagGCChampionshipGuessPriInfo: + PlayerID:%d, + MoneyTotal:%d, + GuessRank:%d + '''\ + %( + self.PlayerID, + self.MoneyTotal, + self.GuessRank + ) + return DumpString + + +class tagGCChampionshipGuessPriList(Structure): + GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 + PlayerCount = 0 #(BYTE PlayerCount) + GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPri> GuessPlayerList)// 被竞猜玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temGuessPlayerList = tagGCChampionshipGuessPlayerPri() + _pos = temGuessPlayerList.ReadData(_lpData, _pos) + self.GuessPlayerList.append(temGuessPlayerList) + return _pos + + def Clear(self): + self.GuessType = 0 + self.PlayerCount = 0 + self.GuessPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.GuessPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GuessType) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GuessType:%d, + PlayerCount:%d, + GuessPlayerList:%s + '''\ + %( + self.GuessType, + self.PlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipGuessPriInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID + Count = 0 #(BYTE Count) + GuessList = list() #(vector<tagGCChampionshipGuessPriList> GuessList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x23 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temGuessList = tagGCChampionshipGuessPriList() + _pos = temGuessList.ReadData(_lpData, _pos) + self.GuessList.append(temGuessList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x23 + self.ZoneID = 0 + self.Count = 0 + self.GuessList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.GuessList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + Count:%d, + GuessList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipGuessPriInfo=tagGCChampionshipGuessPriInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPriInfo.Head.Cmd,m_NAtagGCChampionshipGuessPriInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPriInfo + + +#------------------------------------------------------ +# C0 22 跨服排位竞猜公共信息 #tagGCChampionshipGuessPubInfo + +class tagGCChampionshipGuessPlayerPub(Structure): + _pack_ = 1 + _fields_ = [ + ("PlayerID", c_int), # 目标玩家ID + ("SupportCount", 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.SupportCount = 0 + return + + def GetLength(self): + return sizeof(tagGCChampionshipGuessPlayerPub) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 22 跨服排位竞猜公共信息 //tagGCChampionshipGuessPubInfo: + PlayerID:%d, + SupportCount:%d + '''\ + %( + self.PlayerID, + self.SupportCount + ) + return DumpString + + +class tagGCChampionshipGuessPubList(Structure): + GuessType = 0 #(BYTE GuessType)//竞猜类型 8-8强;4-4强排位 + PlayerCount = 0 #(BYTE PlayerCount) + GuessPlayerList = list() #(vector<tagGCChampionshipGuessPlayerPub> GuessPlayerList)// 被竞猜玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GuessType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temGuessPlayerList = tagGCChampionshipGuessPlayerPub() + _pos = temGuessPlayerList.ReadData(_lpData, _pos) + self.GuessPlayerList.append(temGuessPlayerList) + return _pos + + def Clear(self): + self.GuessType = 0 + self.PlayerCount = 0 + self.GuessPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.GuessPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.GuessType) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.GuessPlayerList[i].GetLength(), self.GuessPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GuessType:%d, + PlayerCount:%d, + GuessPlayerList:%s + '''\ + %( + self.GuessType, + self.PlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipGuessPubInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 排位数据分区ID + Count = 0 #(BYTE Count) + GuessList = list() #(vector<tagGCChampionshipGuessPubList> GuessList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temGuessList = tagGCChampionshipGuessPubList() + _pos = temGuessList.ReadData(_lpData, _pos) + self.GuessList.append(temGuessList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x22 + self.ZoneID = 0 + self.Count = 0 + self.GuessList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.GuessList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.GuessList[i].GetLength(), self.GuessList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + Count:%d, + GuessList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipGuessPubInfo=tagGCChampionshipGuessPubInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipGuessPubInfo.Head.Cmd,m_NAtagGCChampionshipGuessPubInfo.Head.SubCmd))] = m_NAtagGCChampionshipGuessPubInfo + + +#------------------------------------------------------ +# C0 19 跨服排位仙官申请回应结果 #tagGCChampionshipOfficialApplyReplyRet + +class tagGCChampionshipOfficialApplyReplyRet(Structure): + Head = tagHead() + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 界主玩家名 + MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID + OfficialID = 0 #(WORD OfficialID)//申请官职ID + IsOK = 0 #(BYTE IsOK)//是否同意;1-是;0-否 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x19 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x19 + self.NameLen = 0 + self.PlayerName = "" + self.MainOfficialID = 0 + self.OfficialID = 0 + self.IsOK = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.PlayerName) + length += 2 + 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.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.IsOK) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + NameLen:%d, + PlayerName:%s, + MainOfficialID:%d, + OfficialID:%d, + IsOK:%d + '''\ + %( + self.Head.OutputString(), + self.NameLen, + self.PlayerName, + self.MainOfficialID, + self.OfficialID, + self.IsOK + ) + return DumpString + + +m_NAtagGCChampionshipOfficialApplyReplyRet=tagGCChampionshipOfficialApplyReplyRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialApplyReplyRet.Head.Cmd,m_NAtagGCChampionshipOfficialApplyReplyRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialApplyReplyRet + + +#------------------------------------------------------ +# C0 21 跨服排位仙官挑战记录 #tagGCChampionshipOfficialChallengeRecordInfo + +class tagGCChampionshipOfficialChallengeRecord(Structure): + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + ChallengeTime = 0 #(DWORD ChallengeTime)//挑战时间戳 + Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜; + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.ChallengeTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.PlayerName = "" + self.ChallengeTime = 0 + self.Ret = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.PlayerName) + length += 4 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.ChallengeTime) + data = CommFunc.WriteBYTE(data, self.Ret) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + PlayerName:%s, + ChallengeTime:%d, + Ret:%d + '''\ + %( + self.NameLen, + self.PlayerName, + self.ChallengeTime, + self.Ret + ) + return DumpString + + +class tagGCChampionshipOfficialChallengeRecordInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 分区ID + MainOfficialID = 0 #(WORD MainOfficialID)// 界主官职ID + OfficialID = 0 #(WORD OfficialID)// 记录的官职ID + RecordCount = 0 #(BYTE RecordCount)// 挑战记录数 + RecordList = list() #(vector<tagGCChampionshipOfficialChallengeRecord> RecordList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x21 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temRecordList = tagGCChampionshipOfficialChallengeRecord() + _pos = temRecordList.ReadData(_lpData, _pos) + self.RecordList.append(temRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x21 + self.ZoneID = 0 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.RecordCount = 0 + self.RecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 2 + length += 1 + for i in range(self.RecordCount): + length += self.RecordList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + MainOfficialID:%d, + OfficialID:%d, + RecordCount:%d, + RecordList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.MainOfficialID, + self.OfficialID, + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipOfficialChallengeRecordInfo=tagGCChampionshipOfficialChallengeRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRecordInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRecordInfo + + +#------------------------------------------------------ +# C0 20 跨服排位仙官挑战结果 #tagGCChampionshipOfficialChallengeRet + +class tagGCChampionshipOfficialChallengeRet(Structure): + Head = tagHead() + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 原仙官玩家名,可能为空,代表本来无玩家 + MainOfficialID = 0 #(WORD MainOfficialID)//界主官职ID + OfficialID = 0 #(WORD OfficialID)//挑战的官职ID + Ret = 0 #(BYTE Ret)//挑战结果;0-失败;1-获胜;2-目标仙官玩家ID已变更,可刷新后重试 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.MainOfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OfficialID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Ret,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x20 + self.NameLen = 0 + self.PlayerName = "" + self.MainOfficialID = 0 + self.OfficialID = 0 + self.Ret = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.PlayerName) + length += 2 + 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.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.MainOfficialID) + data = CommFunc.WriteWORD(data, self.OfficialID) + data = CommFunc.WriteBYTE(data, self.Ret) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + NameLen:%d, + PlayerName:%s, + MainOfficialID:%d, + OfficialID:%d, + Ret:%d + '''\ + %( + self.Head.OutputString(), + self.NameLen, + self.PlayerName, + self.MainOfficialID, + self.OfficialID, + self.Ret + ) + return DumpString + + +m_NAtagGCChampionshipOfficialChallengeRet=tagGCChampionshipOfficialChallengeRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialChallengeRet.Head.Cmd,m_NAtagGCChampionshipOfficialChallengeRet.Head.SubCmd))] = m_NAtagGCChampionshipOfficialChallengeRet + + +#------------------------------------------------------ +# C0 18 跨服排位官职信息 #tagGCChampionshipOfficialInfo + +class tagGCChampionshipOfficialPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID)// 玩家ID + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 + RealmLV = 0 #(WORD RealmLV) + 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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 4 + length += 4 + length += 2 + + 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.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + FightPower:%d, + FightPowerEx:%d, + RealmLV:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.FightPower, + self.FightPowerEx, + self.RealmLV + ) + return DumpString + + +class tagGCChampionshipOfficial(Structure): + OfficialID = 0 #(DWORD OfficialID)// 官职ID + LastDismissJuniorTime = 0 #(DWORD LastDismissJuniorTime)// 上次辞退下级仙官时间戳,跨服时间,如果自己是本界主时,用于计算辞退CD + WorshipCount = 0 #(DWORD WorshipCount)// 被膜拜次数 + WorshipDouble = 0 #(BYTE WorshipDouble)// 今日是否双倍膜拜,仅在规定时间点内有用 + OfficialPlayer=tagGCChampionshipOfficialPlayer() #(tagGCChampionshipOfficialPlayer OfficialPlayer)// 任职玩家信息,可能没有 + ApplyPlayerCount = 0 #(BYTE ApplyPlayerCount)// 申请该仙官玩家数 + ApplyPlayerList = list() #(vector<tagGCChampionshipOfficialPlayer> ApplyPlayerList)// 申请该仙官玩家列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OfficialID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LastDismissJuniorTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos) + _pos = self.OfficialPlayer.ReadData(_lpData,_pos) + self.ApplyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ApplyPlayerCount): + temApplyPlayerList = tagGCChampionshipOfficialPlayer() + _pos = temApplyPlayerList.ReadData(_lpData, _pos) + self.ApplyPlayerList.append(temApplyPlayerList) + return _pos + + def Clear(self): + self.OfficialID = 0 + self.LastDismissJuniorTime = 0 + self.WorshipCount = 0 + self.WorshipDouble = 0 + self.OfficialPlayer=tagGCChampionshipOfficialPlayer() + self.OfficialPlayer.Clear() + self.ApplyPlayerCount = 0 + self.ApplyPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 1 + length += self.OfficialPlayer.GetLength() + length += 1 + for i in range(self.ApplyPlayerCount): + length += self.ApplyPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.OfficialID) + data = CommFunc.WriteDWORD(data, self.LastDismissJuniorTime) + data = CommFunc.WriteDWORD(data, self.WorshipCount) + data = CommFunc.WriteBYTE(data, self.WorshipDouble) + data = CommFunc.WriteString(data,self.OfficialPlayer.GetLength(),self.OfficialPlayer.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ApplyPlayerCount) + for i in range(self.ApplyPlayerCount): + data = CommFunc.WriteString(data, self.ApplyPlayerList[i].GetLength(), self.ApplyPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + OfficialID:%d, + LastDismissJuniorTime:%d, + WorshipCount:%d, + WorshipDouble:%d, + OfficialPlayer:%s, + ApplyPlayerCount:%d, + ApplyPlayerList:%s + '''\ + %( + self.OfficialID, + self.LastDismissJuniorTime, + self.WorshipCount, + self.WorshipDouble, + self.OfficialPlayer.OutputString(), + self.ApplyPlayerCount, + "..." + ) + return DumpString + + +class tagGCChampionshipOfficialInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 官职数据分区ID + OfficialCount = 0 #(BYTE OfficialCount)// 官职数,包含界主及所有仙官 + OfficialList = list() #(vector<tagGCChampionshipOfficial> OfficialList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OfficialCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.OfficialCount): + temOfficialList = tagGCChampionshipOfficial() + _pos = temOfficialList.ReadData(_lpData, _pos) + self.OfficialList.append(temOfficialList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x18 + self.ZoneID = 0 + self.OfficialCount = 0 + self.OfficialList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.OfficialCount): + length += self.OfficialList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.OfficialCount) + for i in range(self.OfficialCount): + data = CommFunc.WriteString(data, self.OfficialList[i].GetLength(), self.OfficialList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + OfficialCount:%d, + OfficialList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.OfficialCount, + "..." + ) + return DumpString + + +m_NAtagGCChampionshipOfficialInfo=tagGCChampionshipOfficialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChampionshipOfficialInfo.Head.Cmd,m_NAtagGCChampionshipOfficialInfo.Head.SubCmd))] = m_NAtagGCChampionshipOfficialInfo + + +#------------------------------------------------------ +# C0 09 跨服战场玩家购买战场信息 #tagGCCrossBattlefieldBuyInfo + +class tagGCCrossBattlefieldPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33]) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV)//等级 + RealmLV = 0 #(WORD RealmLV)//境界 + FightPower = 0 #(DWORD FightPower)//战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)//战力整除亿部分 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 1 + length += 2 + length += 2 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Job:%d, + LV:%d, + RealmLV:%d, + FightPower:%d, + FightPowerEx:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Job, + self.LV, + self.RealmLV, + self.FightPower, + self.FightPowerEx + ) + return DumpString + + +class tagGCCrossBattlefieldBuyPlayer(Structure): + BuyPlayerID = 0 #(DWORD BuyPlayerID)//购买的玩家ID,即召集人 + Faction = 0 #(BYTE Faction)//阵营 1-红;2-蓝 + ServerOnly = 0 #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是 + FactionPlayerCount = 0 #(BYTE FactionPlayerCount) + FactionPlayerList = list() #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FactionPlayerCount): + temFactionPlayerList = tagGCCrossBattlefieldPlayer() + _pos = temFactionPlayerList.ReadData(_lpData, _pos) + self.FactionPlayerList.append(temFactionPlayerList) + return _pos + + def Clear(self): + self.BuyPlayerID = 0 + self.Faction = 0 + self.ServerOnly = 0 + self.FactionPlayerCount = 0 + self.FactionPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + length += 1 + for i in range(self.FactionPlayerCount): + length += self.FactionPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.BuyPlayerID) + data = CommFunc.WriteBYTE(data, self.Faction) + data = CommFunc.WriteBYTE(data, self.ServerOnly) + data = CommFunc.WriteBYTE(data, self.FactionPlayerCount) + for i in range(self.FactionPlayerCount): + data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + BuyPlayerID:%d, + Faction:%d, + ServerOnly:%d, + FactionPlayerCount:%d, + FactionPlayerList:%s + '''\ + %( + self.BuyPlayerID, + self.Faction, + self.ServerOnly, + self.FactionPlayerCount, + "..." + ) + return DumpString + + +class tagGCCrossBattlefieldBuyHM(Structure): + Hour = 0 #(BYTE Hour)//战场开启时 + Minute = 0 #(BYTE Minute)//战场开启分 + BuyPlayerCount = 0 #(BYTE BuyPlayerCount) + BuyPlayerList = list() #(vector<tagGCCrossBattlefieldBuyPlayer> BuyPlayerList)//购买本场次的玩家信息列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Hour,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Minute,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BuyPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BuyPlayerCount): + temBuyPlayerList = tagGCCrossBattlefieldBuyPlayer() + _pos = temBuyPlayerList.ReadData(_lpData, _pos) + self.BuyPlayerList.append(temBuyPlayerList) + return _pos + + def Clear(self): + self.Hour = 0 + self.Minute = 0 + self.BuyPlayerCount = 0 + self.BuyPlayerList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.BuyPlayerCount): + length += self.BuyPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Hour) + data = CommFunc.WriteBYTE(data, self.Minute) + data = CommFunc.WriteBYTE(data, self.BuyPlayerCount) + for i in range(self.BuyPlayerCount): + data = CommFunc.WriteString(data, self.BuyPlayerList[i].GetLength(), self.BuyPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Hour:%d, + Minute:%d, + BuyPlayerCount:%d, + BuyPlayerList:%s + '''\ + %( + self.Hour, + self.Minute, + self.BuyPlayerCount, + "..." + ) + return DumpString + + +class tagGCCrossBattlefieldBuyInfo(Structure): + Head = tagHead() + HMCount = 0 #(BYTE HMCount)// 为0时清空重置,其他为增量更新 + HMBuyList = list() #(vector<tagGCCrossBattlefieldBuyHM> HMBuyList)//购买场次列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.HMCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HMCount): + temHMBuyList = tagGCCrossBattlefieldBuyHM() + _pos = temHMBuyList.ReadData(_lpData, _pos) + self.HMBuyList.append(temHMBuyList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x09 + self.HMCount = 0 + self.HMBuyList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.HMCount): + length += self.HMBuyList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.HMCount) + for i in range(self.HMCount): + data = CommFunc.WriteString(data, self.HMBuyList[i].GetLength(), self.HMBuyList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + HMCount:%d, + HMBuyList:%s + '''\ + %( + self.Head.OutputString(), + self.HMCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossBattlefieldBuyInfo=tagGCCrossBattlefieldBuyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBattlefieldBuyInfo.Head.Cmd,m_NAtagGCCrossBattlefieldBuyInfo.Head.SubCmd))] = m_NAtagGCCrossBattlefieldBuyInfo + + +#------------------------------------------------------ +# C0 07 跨服排行榜信息 #tagGCCrossBillboardInfo + +class tagGCCrossBillboardData(Structure): + ID = 0 #(DWORD ID) + Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 + Name2 = "" #(char Name2[33])//名字2 + Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等 + Value1 = 0 #(DWORD Value1)//自定义值1 + Value2 = 0 #(DWORD Value2)//自定义值2 + CmpValue = 0 #(DWORD CmpValue)// 比较权值 + CmpValue2 = 0 #(DWORD CmpValue2)// 比较权值 + CmpValue3 = 0 #(DWORD CmpValue3)// 比较权值 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Name1,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Name2,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Type2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CmpValue3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.ID = 0 + self.Name1 = "" + self.Name2 = "" + self.Type2 = 0 + self.Value1 = 0 + self.Value2 = 0 + self.CmpValue = 0 + self.CmpValue2 = 0 + self.CmpValue3 = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 33 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ID) + data = CommFunc.WriteString(data, 33, self.Name1) + data = CommFunc.WriteString(data, 33, self.Name2) + data = CommFunc.WriteBYTE(data, self.Type2) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.CmpValue) + data = CommFunc.WriteDWORD(data, self.CmpValue2) + data = CommFunc.WriteDWORD(data, self.CmpValue3) + return data + + def OutputString(self): + DumpString = ''' + ID:%d, + Name1:%s, + Name2:%s, + Type2:%d, + Value1:%d, + Value2:%d, + CmpValue:%d, + CmpValue2:%d, + CmpValue3:%d + '''\ + %( + self.ID, + self.Name1, + self.Name2, + self.Type2, + self.Value1, + self.Value2, + self.CmpValue, + self.CmpValue2, + self.CmpValue3 + ) + return DumpString + + +class tagGCCrossBillboardInfo(Structure): + Head = tagHead() + Type = 0 #(BYTE Type)//榜单类型 + GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1 + GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 + BillboardCount = 0 #(BYTE BillboardCount) + CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x07 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillboardCount): + temCrossBillboardDataList = tagGCCrossBillboardData() + _pos = temCrossBillboardDataList.ReadData(_lpData, _pos) + self.CrossBillboardDataList.append(temCrossBillboardDataList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x07 + self.Type = 0 + self.GroupValue1 = 0 + self.GroupValue2 = 0 + self.BillboardCount = 0 + self.CrossBillboardDataList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 + length += 1 + for i in range(self.BillboardCount): + length += self.CrossBillboardDataList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Type) + data = CommFunc.WriteBYTE(data, self.GroupValue1) + data = CommFunc.WriteBYTE(data, self.GroupValue2) + data = CommFunc.WriteBYTE(data, self.BillboardCount) + for i in range(self.BillboardCount): + data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Type:%d, + GroupValue1:%d, + GroupValue2:%d, + BillboardCount:%d, + CrossBillboardDataList:%s + '''\ + %( + self.Head.OutputString(), + self.Type, + self.GroupValue1, + self.GroupValue2, + self.BillboardCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossBillboardInfo=tagGCCrossBillboardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossBillboardInfo.Head.Cmd,m_NAtagGCCrossBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossBillboardInfo + + +#------------------------------------------------------ +# C0 16 跨服排位战斗结果 #tagGCCrossChampionshipPKOver + +class tagGCCrossChampionshipPKOver(Structure): + Head = tagHead() + GroupMark = 0 #(DWORD GroupMark)// 分组标识:64、32、16、8 - 64、32、16、8强赛;4 - 半决赛; 2 - 决赛 + TimeStr = "" #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss + OverType = 0 #(BYTE OverType)// 0-正常,1-有人离线 + WinnerID = 0 #(DWORD WinnerID)// 胜方ID + LoserID = 0 #(DWORD LoserID)// 败方ID + RoundCount = 0 #(BYTE RoundCount)// PK回合数 + RoundWinnerID = list() #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表 + TagNameLen = 0 #(BYTE TagNameLen) + TagName = "" #(String TagName) + Rank = 0 #(BYTE Rank)// 最终名次,决赛才有 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x16 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19) + self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.RoundWinnerID.append(value) + self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen) + self.Rank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x16 + self.GroupMark = 0 + self.TimeStr = "" + self.OverType = 0 + self.WinnerID = 0 + self.LoserID = 0 + self.RoundCount = 0 + self.RoundWinnerID = list() + self.TagNameLen = 0 + self.TagName = "" + self.Rank = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 19 + length += 1 + length += 4 + length += 4 + length += 1 + length += 4 * self.RoundCount + length += 1 + length += len(self.TagName) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.GroupMark) + data = CommFunc.WriteString(data, 19, self.TimeStr) + data = CommFunc.WriteBYTE(data, self.OverType) + data = CommFunc.WriteDWORD(data, self.WinnerID) + data = CommFunc.WriteDWORD(data, self.LoserID) + data = CommFunc.WriteBYTE(data, self.RoundCount) + for i in range(self.RoundCount): + data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i]) + data = CommFunc.WriteBYTE(data, self.TagNameLen) + data = CommFunc.WriteString(data, self.TagNameLen, self.TagName) + data = CommFunc.WriteBYTE(data, self.Rank) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + GroupMark:%d, + TimeStr:%s, + OverType:%d, + WinnerID:%d, + LoserID:%d, + RoundCount:%d, + RoundWinnerID:%s, + TagNameLen:%d, + TagName:%s, + Rank:%d + '''\ + %( + self.Head.OutputString(), + self.GroupMark, + self.TimeStr, + self.OverType, + self.WinnerID, + self.LoserID, + self.RoundCount, + "...", + self.TagNameLen, + self.TagName, + self.Rank + ) + return DumpString + + +m_NAtagGCCrossChampionshipPKOver=tagGCCrossChampionshipPKOver() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKOver.Head.Cmd,m_NAtagGCCrossChampionshipPKOver.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKOver + + +#------------------------------------------------------ +# 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 + ] + + 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.BattleNum = 0 + self.WinPlayerID = 0 + self.PlayerIDA = 0 + self.PlayerIDB = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossChampionshipPKBattle) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 15 跨服排位分区分组信息 //tagGCCrossChampionshipPKZoneGroupInfo: + BattleNum:%d, + WinPlayerID:%d, + PlayerIDA:%d, + PlayerIDB:%d + '''\ + %( + self.BattleNum, + self.WinPlayerID, + self.PlayerIDA, + self.PlayerIDB + ) + return DumpString + + +class tagGCCrossChampionshipPKGroup(Structure): + GroupMark = 0 #(DWORD GroupMark)// 战斗分区mark, 如 64、32、16、8、4-半决赛、2-决赛; + BattleCount = 0 #(BYTE BattleCount)// 对战组数 + BattleList = list() #(vector<tagGCCrossChampionshipPKBattle> BattleList)// 对战组列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GroupMark,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BattleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BattleCount): + temBattleList = tagGCCrossChampionshipPKBattle() + _pos = temBattleList.ReadData(_lpData, _pos) + self.BattleList.append(temBattleList) + return _pos + + def Clear(self): + self.GroupMark = 0 + self.BattleCount = 0 + self.BattleList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.BattleCount): + length += self.BattleList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GroupMark) + data = CommFunc.WriteBYTE(data, self.BattleCount) + for i in range(self.BattleCount): + data = CommFunc.WriteString(data, self.BattleList[i].GetLength(), self.BattleList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GroupMark:%d, + BattleCount:%d, + BattleList:%s + '''\ + %( + self.GroupMark, + self.BattleCount, + "..." + ) + return DumpString + + +class tagGCCrossChampionshipPKPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID)// 玩家ID + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + FightPower = 0 #(DWORD FightPower)// 战力求余亿部分 + FightPowerEx = 0 #(DWORD FightPowerEx)// 战力整除亿部分 + RealmLV = 0 #(WORD RealmLV) + 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.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.FightPower = 0 + self.FightPowerEx = 0 + self.RealmLV = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 4 + length += 4 + length += 2 + + 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.PlayerName) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteDWORD(data, self.FightPowerEx) + data = CommFunc.WriteWORD(data, self.RealmLV) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + FightPower:%d, + FightPowerEx:%d, + RealmLV:%d + '''\ + %( + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.FightPower, + self.FightPowerEx, + self.RealmLV + ) + return DumpString + + +class tagGCCrossChampionshipPKZoneGroupInfo(Structure): + Head = tagHead() + ActID = 0 #(DWORD ActID)// 活动ID,活动ID不同则可重置前端排位赛相关缓存数据 + StateError = 0 #(BYTE StateError)// 本次活动是否已经出现流程状态异常;如服务器异常或维护服务器导致跳过步骤,则会废弃该次比赛,直到下次新活动; + ZoneID = 0 #(BYTE ZoneID)// 排位分区ID + PlayerCount = 0 #(BYTE PlayerCount)// 参赛玩家数 + PlayerList = list() #(vector<tagGCCrossChampionshipPKPlayer> PlayerList) + GroupCount = 0 #(WORD GroupCount) + GroupList = list() #(vector<tagGCCrossChampionshipPKGroup> GroupList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.StateError,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PlayerCount): + temPlayerList = tagGCCrossChampionshipPKPlayer() + _pos = temPlayerList.ReadData(_lpData, _pos) + self.PlayerList.append(temPlayerList) + self.GroupCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.GroupCount): + temGroupList = tagGCCrossChampionshipPKGroup() + _pos = temGroupList.ReadData(_lpData, _pos) + self.GroupList.append(temGroupList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x15 + self.ActID = 0 + self.StateError = 0 + self.ZoneID = 0 + self.PlayerCount = 0 + self.PlayerList = list() + self.GroupCount = 0 + self.GroupList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + length += 1 + for i in range(self.PlayerCount): + length += self.PlayerList[i].GetLength() + length += 2 + for i in range(self.GroupCount): + length += self.GroupList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.ActID) + data = CommFunc.WriteBYTE(data, self.StateError) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.PlayerCount) + for i in range(self.PlayerCount): + data = CommFunc.WriteString(data, self.PlayerList[i].GetLength(), self.PlayerList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.GroupCount) + for i in range(self.GroupCount): + data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActID:%d, + StateError:%d, + ZoneID:%d, + PlayerCount:%d, + PlayerList:%s, + GroupCount:%d, + GroupList:%s + '''\ + %( + self.Head.OutputString(), + self.ActID, + self.StateError, + self.ZoneID, + self.PlayerCount, + "...", + self.GroupCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossChampionshipPKZoneGroupInfo=tagGCCrossChampionshipPKZoneGroupInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.Cmd,m_NAtagGCCrossChampionshipPKZoneGroupInfo.Head.SubCmd))] = m_NAtagGCCrossChampionshipPKZoneGroupInfo + + +#------------------------------------------------------ # C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo class tagGCCrossRealmPKBillboardData(Structure): @@ -9828,7 +14944,8 @@ PlayerName = "" #(String PlayerName)// 跨服名字 Job = 0 #(BYTE Job) LV = 0 #(WORD LV) - MaxHP = 0 #(DWORD MaxHP)// 默认满血 + MaxHP = 0 #(DWORD MaxHP)// 默认满血,求余亿部分 + MaxHPEx = 0 #(DWORD MaxHPEx)// 默认满血,整除亿部分 MaxProDef = 0 #(DWORD MaxProDef)// 最大护盾 data = None @@ -9844,6 +14961,7 @@ 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) return _pos @@ -9854,6 +14972,7 @@ self.Job = 0 self.LV = 0 self.MaxHP = 0 + self.MaxHPEx = 0 self.MaxProDef = 0 return @@ -9864,6 +14983,7 @@ length += len(self.PlayerName) length += 1 length += 2 + length += 4 length += 4 length += 4 @@ -9877,6 +14997,7 @@ 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) return data @@ -9888,6 +15009,7 @@ Job:%d, LV:%d, MaxHP:%d, + MaxHPEx:%d, MaxProDef:%d '''\ %( @@ -9897,6 +15019,7 @@ self.Job, self.LV, self.MaxHP, + self.MaxHPEx, self.MaxProDef ) return DumpString @@ -10425,6 +15548,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("IsRobot", c_ubyte), # 是否匹配机器人 ] def __init__(self): @@ -10441,6 +15565,7 @@ def Clear(self): self.Cmd = 0xC0 self.SubCmd = 0x02 + self.IsRobot = 0 return def GetLength(self): @@ -10452,17 +15577,697 @@ def OutputString(self): DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch: Cmd:%s, - SubCmd:%s + SubCmd:%s, + IsRobot:%d '''\ %( self.Cmd, - self.SubCmd + self.SubCmd, + self.IsRobot ) return DumpString m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch + + +#------------------------------------------------------ +# C0 11 跨服妖魔boss玩家伤害信息 #tagGCCrossYaomoBossPlayerHurtInfo + +class tagGCCrossYaomoBossPlayerHurtInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 总伤害值,小于亿部分 + ("HurtTotalEx", c_int), # 总伤害值,整除亿部分 + ("AwardState", c_int), # 伤害目标值领奖状态,按奖励记录索引位运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x11 + self.HurtTotal = 0 + self.HurtTotalEx = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossYaomoBossPlayerHurtInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 11 跨服妖魔boss玩家伤害信息 //tagGCCrossYaomoBossPlayerHurtInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalEx:%d, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalEx, + self.AwardState + ) + return DumpString + + +m_NAtagGCCrossYaomoBossPlayerHurtInfo=tagGCCrossYaomoBossPlayerHurtInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossYaomoBossPlayerHurtInfo.Cmd,m_NAtagGCCrossYaomoBossPlayerHurtInfo.SubCmd))] = m_NAtagGCCrossYaomoBossPlayerHurtInfo + + +#------------------------------------------------------ +# C0 10 跨服所属分区信息 #tagGCCrossZoneInfo + +class tagGCCrossZoneInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CommZoneID", c_ubyte), # 所属常规分区ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + 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 = 0xC0 + self.SubCmd = 0x10 + self.CommZoneID = 0 + return + + def GetLength(self): + return sizeof(tagGCCrossZoneInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 10 跨服所属分区信息 //tagGCCrossZoneInfo: + Cmd:%s, + SubCmd:%s, + CommZoneID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CommZoneID + ) + return DumpString + + +m_NAtagGCCrossZoneInfo=tagGCCrossZoneInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossZoneInfo.Cmd,m_NAtagGCCrossZoneInfo.SubCmd))] = m_NAtagGCCrossZoneInfo + + +#------------------------------------------------------ +# C0 14 幸运云购开奖记录 #tagGCLuckyCloudBuyLotteryRecInfo + +class tagGCLuckyCloudBuyLotteryRec(Structure): + SuperItemID = 0 #(DWORD SuperItemID)// 大奖物品ID + SuperItemCount = 0 #(BYTE SuperItemCount)// 大奖物品个数 + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 中奖玩家名 + LotteryNum = 0 #(WORD LotteryNum)// 开奖号码 + LotteryTime = 0 #(DWORD LotteryTime)// 开奖时间戳,秒 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LotteryNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LotteryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.SuperItemID = 0 + self.SuperItemCount = 0 + self.NameLen = 0 + self.PlayerName = "" + self.LotteryNum = 0 + self.LotteryTime = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + length += len(self.PlayerName) + length += 2 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.SuperItemID) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.LotteryNum) + data = CommFunc.WriteDWORD(data, self.LotteryTime) + return data + + def OutputString(self): + DumpString = ''' + SuperItemID:%d, + SuperItemCount:%d, + NameLen:%d, + PlayerName:%s, + LotteryNum:%d, + LotteryTime:%d + '''\ + %( + self.SuperItemID, + self.SuperItemCount, + self.NameLen, + self.PlayerName, + self.LotteryNum, + self.LotteryTime + ) + return DumpString + + +class tagGCLuckyCloudBuyLotteryRecInfo(Structure): + Head = tagHead() + ZoneCount = 0 #(BYTE ZoneCount)// 分区数 + ZoneIDList = list() #(vector<BYTE> ZoneIDList)// 所有分区ID列表 + ZoneID = 0 #(BYTE ZoneID)// 返回记录分区ID + Count = 0 #(WORD Count) + LotteryRecList = list() #(vector<tagGCLuckyCloudBuyLotteryRec> LotteryRecList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x14 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ZoneCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ZoneIDList.append(value) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temLotteryRecList = tagGCLuckyCloudBuyLotteryRec() + _pos = temLotteryRecList.ReadData(_lpData, _pos) + self.LotteryRecList.append(temLotteryRecList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x14 + self.ZoneCount = 0 + self.ZoneIDList = list() + self.ZoneID = 0 + self.Count = 0 + self.LotteryRecList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 * self.ZoneCount + length += 1 + length += 2 + for i in range(self.Count): + length += self.LotteryRecList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneCount) + for i in range(self.ZoneCount): + data = CommFunc.WriteBYTE(data, self.ZoneIDList[i]) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.LotteryRecList[i].GetLength(), self.LotteryRecList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneCount:%d, + ZoneIDList:%s, + ZoneID:%d, + Count:%d, + LotteryRecList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneCount, + "...", + self.ZoneID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCLuckyCloudBuyLotteryRecInfo=tagGCLuckyCloudBuyLotteryRecInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyLotteryRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyLotteryRecInfo + + +#------------------------------------------------------ +# C0 13 幸运云购购买号码记录 #tagGCLuckyCloudBuyNumRecInfo + +class tagGCLuckyCloudBuyNumRec(Structure): + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName) + BuyNum = 0 #(WORD BuyNum) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.BuyNum,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.NameLen = 0 + self.PlayerName = "" + self.BuyNum = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += len(self.PlayerName) + length += 2 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteWORD(data, self.BuyNum) + return data + + def OutputString(self): + DumpString = ''' + NameLen:%d, + PlayerName:%s, + BuyNum:%d + '''\ + %( + self.NameLen, + self.PlayerName, + self.BuyNum + ) + return DumpString + + +class tagGCLuckyCloudBuyNumRecInfo(Structure): + Head = tagHead() + RemainCount = 0 #(WORD RemainCount)// 开奖剩余份数 + Count = 0 #(WORD Count) + BuyNumRecList = list() #(vector<tagGCLuckyCloudBuyNumRec> BuyNumRecList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RemainCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temBuyNumRecList = tagGCLuckyCloudBuyNumRec() + _pos = temBuyNumRecList.ReadData(_lpData, _pos) + self.BuyNumRecList.append(temBuyNumRecList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x13 + self.RemainCount = 0 + self.Count = 0 + self.BuyNumRecList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 2 + for i in range(self.Count): + length += self.BuyNumRecList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.RemainCount) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.BuyNumRecList[i].GetLength(), self.BuyNumRecList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RemainCount:%d, + Count:%d, + BuyNumRecList:%s + '''\ + %( + self.Head.OutputString(), + self.RemainCount, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCLuckyCloudBuyNumRecInfo=tagGCLuckyCloudBuyNumRecInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyNumRecInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyNumRecInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyNumRecInfo + + +#------------------------------------------------------ +# C0 12 幸运云购轮次信息 #tagGCLuckyCloudBuyRoundInfo + +class tagGCLuckyCloudBuyRoundItem(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(tagGCLuckyCloudBuyRoundItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 12 幸运云购轮次信息 //tagGCLuckyCloudBuyRoundInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagGCLuckyCloudBuyRoundTime(Structure): + StartTime = "" #(char StartTime[5])// 开始时间 H:M + EndtTime = "" #(char EndtTime[5])// 结束时间 H:M + RoundMax = 0 #(BYTE RoundMax)// 本时段最大轮次 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.RoundMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.StartTime = "" + self.EndtTime = "" + self.RoundMax = 0 + return + + def GetLength(self): + length = 0 + length += 5 + length += 5 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 5, self.StartTime) + data = CommFunc.WriteString(data, 5, self.EndtTime) + data = CommFunc.WriteBYTE(data, self.RoundMax) + return data + + def OutputString(self): + DumpString = ''' + StartTime:%s, + EndtTime:%s, + RoundMax:%d + '''\ + %( + self.StartTime, + self.EndtTime, + self.RoundMax + ) + return DumpString + + +class tagGCLuckyCloudBuyRoundInfo(Structure): + Head = tagHead() + ZoneID = 0 #(BYTE ZoneID)// 所属分区ID + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + RoundTimeCount = 0 #(BYTE RoundTimeCount) + RoundTimeList = list() #(vector<tagGCLuckyCloudBuyRoundTime> RoundTimeList)//轮次时间段 + RoundID = 0 #(DWORD RoundID)// 轮次唯一ID标识,当收到的轮次ID变更时,前端需清空购买号码记录缓存 + RoundNum = 0 #(BYTE RoundNum)// 当前时段第几轮 + SuperItemID = 0 #(DWORD SuperItemID)// 大奖物品ID + SuperItemCount = 0 #(BYTE SuperItemCount)// 大奖物品个数 + SuperItemMoneyType = 0 #(BYTE SuperItemMoneyType)// 大奖价值货币类型 + SuperItemMoneyValue = 0 #(DWORD SuperItemMoneyValue)// 大奖价值 + LVLimit = 0 #(WORD LVLimit)//开启等级 + BaseItemCount = 0 #(BYTE BaseItemCount)// 每次购买固定奖励物品数 + BaseItemList = list() #(vector<tagGCLuckyCloudBuyRoundItem> BaseItemList)// 每次购买固定奖励物品信息 + RandItemCount = 0 #(BYTE RandItemCount)// 每次购买随机奖励物品数 + RandItemList = list() #(vector<tagGCLuckyCloudBuyRoundItem> RandItemList)// 每次购买随机奖励物品信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.RoundTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundTimeCount): + temRoundTimeList = tagGCLuckyCloudBuyRoundTime() + _pos = temRoundTimeList.ReadData(_lpData, _pos) + self.RoundTimeList.append(temRoundTimeList) + self.RoundID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoundNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LVLimit,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BaseItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BaseItemCount): + temBaseItemList = tagGCLuckyCloudBuyRoundItem() + _pos = temBaseItemList.ReadData(_lpData, _pos) + self.BaseItemList.append(temBaseItemList) + self.RandItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RandItemCount): + temRandItemList = tagGCLuckyCloudBuyRoundItem() + _pos = temRandItemList.ReadData(_lpData, _pos) + self.RandItemList.append(temRandItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x12 + self.ZoneID = 0 + self.StartDate = "" + self.EndtDate = "" + self.RoundTimeCount = 0 + self.RoundTimeList = list() + self.RoundID = 0 + self.RoundNum = 0 + self.SuperItemID = 0 + self.SuperItemCount = 0 + self.SuperItemMoneyType = 0 + self.SuperItemMoneyValue = 0 + self.LVLimit = 0 + self.BaseItemCount = 0 + self.BaseItemList = list() + self.RandItemCount = 0 + self.RandItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + for i in range(self.RoundTimeCount): + length += self.RoundTimeList[i].GetLength() + length += 4 + length += 1 + length += 4 + length += 1 + length += 1 + length += 4 + length += 2 + length += 1 + for i in range(self.BaseItemCount): + length += self.BaseItemList[i].GetLength() + length += 1 + for i in range(self.RandItemCount): + length += self.RandItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.RoundTimeCount) + for i in range(self.RoundTimeCount): + data = CommFunc.WriteString(data, self.RoundTimeList[i].GetLength(), self.RoundTimeList[i].GetBuffer()) + data = CommFunc.WriteDWORD(data, self.RoundID) + data = CommFunc.WriteBYTE(data, self.RoundNum) + data = CommFunc.WriteDWORD(data, self.SuperItemID) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + data = CommFunc.WriteBYTE(data, self.SuperItemMoneyType) + data = CommFunc.WriteDWORD(data, self.SuperItemMoneyValue) + data = CommFunc.WriteWORD(data, self.LVLimit) + data = CommFunc.WriteBYTE(data, self.BaseItemCount) + for i in range(self.BaseItemCount): + data = CommFunc.WriteString(data, self.BaseItemList[i].GetLength(), self.BaseItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RandItemCount) + for i in range(self.RandItemCount): + data = CommFunc.WriteString(data, self.RandItemList[i].GetLength(), self.RandItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneID:%d, + StartDate:%s, + EndtDate:%s, + RoundTimeCount:%d, + RoundTimeList:%s, + RoundID:%d, + RoundNum:%d, + SuperItemID:%d, + SuperItemCount:%d, + SuperItemMoneyType:%d, + SuperItemMoneyValue:%d, + LVLimit:%d, + BaseItemCount:%d, + BaseItemList:%s, + RandItemCount:%d, + RandItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneID, + self.StartDate, + self.EndtDate, + self.RoundTimeCount, + "...", + self.RoundID, + self.RoundNum, + self.SuperItemID, + self.SuperItemCount, + self.SuperItemMoneyType, + self.SuperItemMoneyValue, + self.LVLimit, + self.BaseItemCount, + "...", + self.RandItemCount, + "..." + ) + return DumpString + + +m_NAtagGCLuckyCloudBuyRoundInfo=tagGCLuckyCloudBuyRoundInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCLuckyCloudBuyRoundInfo.Head.Cmd,m_NAtagGCLuckyCloudBuyRoundInfo.Head.SubCmd))] = m_NAtagGCLuckyCloudBuyRoundInfo #------------------------------------------------------ @@ -10519,9 +16324,11 @@ class tagMCCoinToGoldCount(Structure): _pack_ = 1 _fields_ = [ - ("RecordID", c_ubyte), + ("RecordID", c_ushort), ("TodayPayCount", c_ushort), # 今日已购买次数 ("TotalPayCount", c_int), # 累计总购买次数 + ("WeekPayCount", c_ushort), # 周总购买次数 + ("MonthPayCount", c_ushort), # 月总购买次数 ] def __init__(self): @@ -10537,6 +16344,8 @@ self.RecordID = 0 self.TodayPayCount = 0 self.TotalPayCount = 0 + self.WeekPayCount = 0 + self.MonthPayCount = 0 return def GetLength(self): @@ -10549,19 +16358,23 @@ DumpString = '''// A1 10 充值购买次数信息 //tagMCCoinToGoldCountInfo: RecordID:%d, TodayPayCount:%d, - TotalPayCount:%d + TotalPayCount:%d, + WeekPayCount:%d, + MonthPayCount:%d '''\ %( self.RecordID, self.TodayPayCount, - self.TotalPayCount + self.TotalPayCount, + self.WeekPayCount, + self.MonthPayCount ) return DumpString class tagMCCoinToGoldCountInfo(Structure): Head = tagHead() - RecordCount = 0 #(BYTE RecordCount) + RecordCount = 0 #(WORD RecordCount) CTGCountInfoList = list() #(vector<tagMCCoinToGoldCount> CTGCountInfoList) data = None @@ -10574,7 +16387,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.RecordCount): temCTGCountInfoList = tagMCCoinToGoldCount() _pos = temCTGCountInfoList.ReadData(_lpData, _pos) @@ -10593,7 +16406,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 + length += 2 for i in range(self.RecordCount): length += self.CTGCountInfoList[i].GetLength() @@ -10602,7 +16415,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RecordCount) + data = CommFunc.WriteWORD(data, self.RecordCount) for i in range(self.RecordCount): data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer()) return data @@ -10633,6 +16446,9 @@ OrderLen = 0 #(BYTE OrderLen) OrderID = "" #(String OrderID)// 订单id Coin = 0 #(DWORD Coin)// 充值的点卷 + RecordID = 0 #(WORD RecordID)// ctgID + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo) data = None def __init__(self): @@ -10647,6 +16463,9 @@ self.OrderLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.OrderID,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderLen) self.Coin,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) return _pos def Clear(self): @@ -10657,6 +16476,9 @@ self.OrderLen = 0 self.OrderID = "" self.Coin = 0 + self.RecordID = 0 + self.OrderInfoLen = 0 + self.OrderInfo = "" return def GetLength(self): @@ -10665,6 +16487,9 @@ length += 1 length += len(self.OrderID) length += 4 + length += 2 + length += 1 + length += len(self.OrderInfo) return length @@ -10674,6 +16499,9 @@ data = CommFunc.WriteBYTE(data, self.OrderLen) data = CommFunc.WriteString(data, self.OrderLen, self.OrderID) data = CommFunc.WriteDWORD(data, self.Coin) + data = CommFunc.WriteWORD(data, self.RecordID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) return data def OutputString(self): @@ -10681,13 +16509,19 @@ Head:%s, OrderLen:%d, OrderID:%s, - Coin:%d + Coin:%d, + RecordID:%d, + OrderInfoLen:%d, + OrderInfo:%s '''\ %( self.Head.OutputString(), self.OrderLen, self.OrderID, - self.Coin + self.Coin, + self.RecordID, + self.OrderInfoLen, + self.OrderInfo ) return DumpString @@ -10795,6 +16629,7 @@ ExAttr18 = 0 #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr19 = 0 #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 + HPEx = 0 #(DWORD HPEx)//当前血量 超过E的记录 data = None def __init__(self): @@ -10900,6 +16735,7 @@ self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -11001,6 +16837,7 @@ self.ExAttr18 = 0 self.ExAttr19 = 0 self.ExAttr20 = 0 + self.HPEx = 0 return def GetLength(self): @@ -11093,6 +16930,7 @@ length += 4 length += 4 length += 15 + length += 4 length += 4 length += 4 length += 4 @@ -11200,6 +17038,7 @@ data = CommFunc.WriteDWORD(data, self.ExAttr18) data = CommFunc.WriteDWORD(data, self.ExAttr19) data = CommFunc.WriteDWORD(data, self.ExAttr20) + data = CommFunc.WriteDWORD(data, self.HPEx) return data def OutputString(self): @@ -11298,7 +17137,8 @@ ExAttr17:%d, ExAttr18:%d, ExAttr19:%d, - ExAttr20:%d + ExAttr20:%d, + HPEx:%d '''\ %( self.Head.OutputString(), @@ -11395,7 +17235,8 @@ self.ExAttr17, self.ExAttr18, self.ExAttr19, - self.ExAttr20 + self.ExAttr20, + self.HPEx ) return DumpString @@ -12478,6 +18319,74 @@ #------------------------------------------------------ +# A3 C3 竞技场玩家信息 #tagMCArenaPlayerInfo + +class tagMCArenaPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsReset", c_ubyte), #是否是重置的 + ("Score", c_int), #当前积分 + ("BattleCountToday", c_ubyte), #今日已挑战次数 + ("MatchRefreshCount", c_ubyte), #当前已刷新匹配列表次数,每次挑战后会重置 + ("ItemAddBattleCountToday", c_ubyte), #今日已使用物品增加的挑战次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0xC3 + 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 = 0xA3 + self.SubCmd = 0xC3 + self.IsReset = 0 + self.Score = 0 + self.BattleCountToday = 0 + self.MatchRefreshCount = 0 + self.ItemAddBattleCountToday = 0 + return + + def GetLength(self): + return sizeof(tagMCArenaPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C3 竞技场玩家信息 //tagMCArenaPlayerInfo: + Cmd:%s, + SubCmd:%s, + IsReset:%d, + Score:%d, + BattleCountToday:%d, + MatchRefreshCount:%d, + ItemAddBattleCountToday:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsReset, + self.Score, + self.BattleCountToday, + self.MatchRefreshCount, + self.ItemAddBattleCountToday + ) + return DumpString + + +m_NAtagMCArenaPlayerInfo=tagMCArenaPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCArenaPlayerInfo.Cmd,m_NAtagMCArenaPlayerInfo.SubCmd))] = m_NAtagMCArenaPlayerInfo + + +#------------------------------------------------------ # A3 0F 通知玩家悬赏任务信息 #tagMCArrestTaskInfo class tagMCArrestTaskInfo(Structure): @@ -12573,7 +18482,8 @@ _fields_ = [ ("ItemID", c_int), #果实物品ID ("EatCnt", c_ushort), #已使用个数 - ("AddItemCnt", c_int), #增幅丹使用个数 + ("ItemAddCnt", c_int), #增幅丹增加上限 + ("ItemBreakCnt", c_int), #增幅丹突破次数 ] def __init__(self): @@ -12588,7 +18498,8 @@ def Clear(self): self.ItemID = 0 self.EatCnt = 0 - self.AddItemCnt = 0 + self.ItemAddCnt = 0 + self.ItemBreakCnt = 0 return def GetLength(self): @@ -12601,12 +18512,14 @@ DumpString = '''// A3 39 玩家属性果实已使用个数信息//tagMCAttrFruitEatCntList: ItemID:%d, EatCnt:%d, - AddItemCnt:%d + ItemAddCnt:%d, + ItemBreakCnt:%d '''\ %( self.ItemID, self.EatCnt, - self.AddItemCnt + self.ItemAddCnt, + self.ItemBreakCnt ) return DumpString @@ -12742,6 +18655,8 @@ ("BossType", c_ubyte), #编号类型0-世界boss 1-boss之家 ("KillCnt", c_int), #击杀次数 ("ItemAddCnt", c_int), #物品增加次数 + ("BuyCnt", c_ubyte), #购买次数 + ("KillCntTotal", c_int), #击杀次数 - 累计 ] def __init__(self): @@ -12757,6 +18672,8 @@ self.BossType = 0 self.KillCnt = 0 self.ItemAddCnt = 0 + self.BuyCnt = 0 + self.KillCntTotal = 0 return def GetLength(self): @@ -12769,12 +18686,16 @@ DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt: BossType:%d, KillCnt:%d, - ItemAddCnt:%d + ItemAddCnt:%d, + BuyCnt:%d, + KillCntTotal:%d '''\ %( self.BossType, self.KillCnt, - self.ItemAddCnt + self.ItemAddCnt, + self.BuyCnt, + self.KillCntTotal ) return DumpString @@ -13197,6 +19118,118 @@ m_NAtagMCCollectionItemInfo=tagMCCollectionItemInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectionItemInfo.Head.Cmd,m_NAtagMCCollectionItemInfo.Head.SubCmd))] = m_NAtagMCCollectionItemInfo + + +#------------------------------------------------------ +# A3 CC 自定义奖励信息 #tagMCCustomAwardInfo + +class tagMCCustomAwardState(Structure): + _pack_ = 1 + _fields_ = [ + ("KeyNum", c_ushort), # 奖励记录key编号,0~255,每个key存31个ID记录 0-30为编号0, 31-61为编号1.. + ("CanGetState", c_int), # 是否可领取;按位记录是否可领取 + ("GetState", 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.KeyNum = 0 + self.CanGetState = 0 + self.GetState = 0 + return + + def GetLength(self): + return sizeof(tagMCCustomAwardState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CC 自定义奖励信息 //tagMCCustomAwardInfo: + KeyNum:%d, + CanGetState:%d, + GetState:%d + '''\ + %( + self.KeyNum, + self.CanGetState, + self.GetState + ) + return DumpString + + +class tagMCCustomAwardInfo(Structure): + Head = tagHead() + RecordStateCnt = 0 #(WORD RecordStateCnt)// 记录个数 + RecordStateList = list() #(vector<tagMCCustomAwardState> RecordStateList)// 记录列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCC + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RecordStateCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.RecordStateCnt): + temRecordStateList = tagMCCustomAwardState() + _pos = temRecordStateList.ReadData(_lpData, _pos) + self.RecordStateList.append(temRecordStateList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCC + self.RecordStateCnt = 0 + self.RecordStateList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.RecordStateCnt): + length += self.RecordStateList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.RecordStateCnt) + for i in range(self.RecordStateCnt): + data = CommFunc.WriteString(data, self.RecordStateList[i].GetLength(), self.RecordStateList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordStateCnt:%d, + RecordStateList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordStateCnt, + "..." + ) + return DumpString + + +m_NAtagMCCustomAwardInfo=tagMCCustomAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCustomAwardInfo.Head.Cmd,m_NAtagMCCustomAwardInfo.Head.SubCmd))] = m_NAtagMCCustomAwardInfo #------------------------------------------------------ @@ -13656,6 +19689,87 @@ #------------------------------------------------------ +# A3 C4 装备神装拆解结果 #tagMCEquipDecomposeRet + +class tagMCEquipDecomposeRet(Structure): + Head = tagHead() + DecomposeEquipIDCount = 0 #(BYTE DecomposeEquipIDCount)// 已分解的装备个数 + DecomposeEquipIDList = list() #(vector<DWORD> DecomposeEquipIDList)// 已分解的神装装备ID列表 + GetItemLen = 0 #(WORD GetItemLen) + GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC4 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.DecomposeEquipIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DecomposeEquipIDCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.DecomposeEquipIDList.append(value) + self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC4 + self.DecomposeEquipIDCount = 0 + self.DecomposeEquipIDList = list() + self.GetItemLen = 0 + self.GetItemData = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.DecomposeEquipIDCount + length += 2 + length += len(self.GetItemData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.DecomposeEquipIDCount) + for i in range(self.DecomposeEquipIDCount): + data = CommFunc.WriteDWORD(data, self.DecomposeEquipIDList[i]) + data = CommFunc.WriteWORD(data, self.GetItemLen) + data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + DecomposeEquipIDCount:%d, + DecomposeEquipIDList:%s, + GetItemLen:%d, + GetItemData:%s + '''\ + %( + self.Head.OutputString(), + self.DecomposeEquipIDCount, + "...", + self.GetItemLen, + self.GetItemData + ) + return DumpString + + +m_NAtagMCEquipDecomposeRet=tagMCEquipDecomposeRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeRet.Head.Cmd,m_NAtagMCEquipDecomposeRet.Head.SubCmd))] = m_NAtagMCEquipDecomposeRet + + +#------------------------------------------------------ # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo class tagMCEquipPartStar(Structure): @@ -13761,6 +19875,73 @@ m_NAtagMCEquipPartStarInfo=tagMCEquipPartStarInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarInfo.Head.Cmd,m_NAtagMCEquipPartStarInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarInfo + + +#------------------------------------------------------ +# A3 B2 装备部位星级套装激活信息 #tagMCEquipPartSuiteActivateInfo + +class tagMCEquipPartSuiteActivateInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + SuiteActivateStateInfo = list() #(vector<DWORD> SuiteActivateStateInfo)//激活状态值列表,每个数按位存31个激活索引,每个位代表对应的激活索引是否已激活 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xB2 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SuiteActivateStateInfo.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xB2 + self.Count = 0 + self.SuiteActivateStateInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteDWORD(data, self.SuiteActivateStateInfo[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SuiteActivateStateInfo:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCEquipPartSuiteActivateInfo=tagMCEquipPartSuiteActivateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartSuiteActivateInfo.Head.Cmd,m_NAtagMCEquipPartSuiteActivateInfo.Head.SubCmd))] = m_NAtagMCEquipPartSuiteActivateInfo #------------------------------------------------------ @@ -14296,6 +20477,62 @@ m_NAtagMCFamilyActivityInfo=tagMCFamilyActivityInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityInfo.Head.Cmd,m_NAtagMCFamilyActivityInfo.Head.SubCmd))] = m_NAtagMCFamilyActivityInfo + + +#------------------------------------------------------ +# A3 54 法器信息 #tagMCFaQiInfo + +class tagMCFaQiInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("LV", c_ubyte), #等阶 + ("EatItemCount", c_int), #当前阶已吃丹个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x54 + 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 = 0xA3 + self.SubCmd = 0x54 + self.LV = 0 + self.EatItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFaQiInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 54 法器信息 //tagMCFaQiInfo: + Cmd:%s, + SubCmd:%s, + LV:%d, + EatItemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.LV, + self.EatItemCount + ) + return DumpString + + +m_NAtagMCFaQiInfo=tagMCFaQiInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo #------------------------------------------------------ @@ -15177,6 +21414,873 @@ #------------------------------------------------------ +# A3 C7 古宝信息 #tagMCGubaoInfo + +class tagMCGubao(Structure): + _pack_ = 1 + _fields_ = [ + ("GubaoID", c_ushort), + ("GubaoStar", c_ubyte), + ("GubaoLV", 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.GubaoID = 0 + self.GubaoStar = 0 + self.GubaoLV = 0 + return + + def GetLength(self): + return sizeof(tagMCGubao) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C7 古宝信息 //tagMCGubaoInfo: + GubaoID:%d, + GubaoStar:%d, + GubaoLV:%d + '''\ + %( + self.GubaoID, + self.GubaoStar, + self.GubaoLV + ) + return DumpString + + +class tagMCGubaoInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + GubaoInfoList = list() #(vector<tagMCGubao> GubaoInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC7 + 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): + temGubaoInfoList = tagMCGubao() + _pos = temGubaoInfoList.ReadData(_lpData, _pos) + self.GubaoInfoList.append(temGubaoInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC7 + self.Count = 0 + self.GubaoInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.GubaoInfoList[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.GubaoInfoList[i].GetLength(), self.GubaoInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + GubaoInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGubaoInfo=tagMCGubaoInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoInfo.Head.Cmd,m_NAtagMCGubaoInfo.Head.SubCmd))] = m_NAtagMCGubaoInfo + + +#------------------------------------------------------ +# A3 CA 古宝物品特殊效果信息 #tagMCGubaoItemEffInfo + +class tagMCGubaoItemEff(Structure): + _pack_ = 1 + _fields_ = [ + ("GubaoID", c_ushort), + ("EffType", c_ubyte), # 不同古宝ID允许拥有相同效果类型,进度值每个古宝ID单独统计 + ("EffValue", 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.GubaoID = 0 + self.EffType = 0 + self.EffValue = 0 + return + + def GetLength(self): + return sizeof(tagMCGubaoItemEff) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CA 古宝物品特殊效果信息 //tagMCGubaoItemEffInfo: + GubaoID:%d, + EffType:%d, + EffValue:%d + '''\ + %( + self.GubaoID, + self.EffType, + self.EffValue + ) + return DumpString + + +class tagMCGubaoItemEffInfo(Structure): + Head = tagHead() + Count = 0 #(WORD Count) + ItemEffInfoList = list() #(vector<tagMCGubaoItemEff> ItemEffInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCA + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temItemEffInfoList = tagMCGubaoItemEff() + _pos = temItemEffInfoList.ReadData(_lpData, _pos) + self.ItemEffInfoList.append(temItemEffInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCA + self.Count = 0 + self.ItemEffInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.ItemEffInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ItemEffInfoList[i].GetLength(), self.ItemEffInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ItemEffInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGubaoItemEffInfo=tagMCGubaoItemEffInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoItemEffInfo.Head.Cmd,m_NAtagMCGubaoItemEffInfo.Head.SubCmd))] = m_NAtagMCGubaoItemEffInfo + + +#------------------------------------------------------ +# A3 CB 古宝碎片信息 #tagMCGubaoPieceInfo + +class tagMCGubaoPiece(Structure): + _pack_ = 1 + _fields_ = [ + ("GubaoID", c_ushort), + ("PieceCount", 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.GubaoID = 0 + self.PieceCount = 0 + return + + def GetLength(self): + return sizeof(tagMCGubaoPiece) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CB 古宝碎片信息 //tagMCGubaoPieceInfo: + GubaoID:%d, + PieceCount:%d + '''\ + %( + self.GubaoID, + self.PieceCount + ) + return DumpString + + +class tagMCGubaoPieceInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + PieceInfoList = list() #(vector<tagMCGubaoPiece> PieceInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCB + 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): + temPieceInfoList = tagMCGubaoPiece() + _pos = temPieceInfoList.ReadData(_lpData, _pos) + self.PieceInfoList.append(temPieceInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCB + self.Count = 0 + self.PieceInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.PieceInfoList[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.PieceInfoList[i].GetLength(), self.PieceInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + PieceInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGubaoPieceInfo=tagMCGubaoPieceInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGubaoPieceInfo.Head.Cmd,m_NAtagMCGubaoPieceInfo.Head.SubCmd))] = m_NAtagMCGubaoPieceInfo + + +#------------------------------------------------------ +# A3 28 历史累积充值奖励领取记录 #tagMCHistoryReChargeAwardRecord + +class tagMCHistoryReChargeAwardRecord(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("AwardGetRecord", c_int), # 按二进制位标示领取记录 配置奖励ID代表第几位 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x28 + 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 = 0xA3 + self.SubCmd = 0x28 + self.AwardGetRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCHistoryReChargeAwardRecord) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 28 历史累积充值奖励领取记录 //tagMCHistoryReChargeAwardRecord: + Cmd:%s, + SubCmd:%s, + AwardGetRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.AwardGetRecord + ) + return DumpString + + +m_NAtagMCHistoryReChargeAwardRecord=tagMCHistoryReChargeAwardRecord() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHistoryReChargeAwardRecord.Cmd,m_NAtagMCHistoryReChargeAwardRecord.SubCmd))] = m_NAtagMCHistoryReChargeAwardRecord + + +#------------------------------------------------------ +# A3 12 通知骑宠觉醒信息 #tagMCHorsePetSkinData + +class tagMCHorsePetSkinInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Type", c_ubyte), # 1-坐骑 2-灵宠 + ("ID", c_int), # 对应坐骑表灵宠表ID + ("Exp", c_int), #经验 + ("SkinLV", c_ubyte), #觉醒等级 + ("SkinIndex", 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.Type = 0 + self.ID = 0 + self.Exp = 0 + self.SkinLV = 0 + self.SkinIndex = 0 + return + + def GetLength(self): + return sizeof(tagMCHorsePetSkinInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 12 通知骑宠觉醒信息 //tagMCHorsePetSkinData: + Type:%d, + ID:%d, + Exp:%d, + SkinLV:%d, + SkinIndex:%d + '''\ + %( + self.Type, + self.ID, + self.Exp, + self.SkinLV, + self.SkinIndex + ) + return DumpString + + +class tagMCHorsePetSkinData(Structure): + Head = tagHead() + Num = 0 #(BYTE Num)//个数 + InfoList = list() #(vector<tagMCHorsePetSkinInfo> InfoList)// 数据列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Num): + temInfoList = tagMCHorsePetSkinInfo() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x12 + self.Num = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Num): + length += self.InfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Num) + for i in range(self.Num): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Num:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Num, + "..." + ) + return DumpString + + +m_NAtagMCHorsePetSkinData=tagMCHorsePetSkinData() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorsePetSkinData.Head.Cmd,m_NAtagMCHorsePetSkinData.Head.SubCmd))] = m_NAtagMCHorsePetSkinData + + +#------------------------------------------------------ +# A3 10 通知坐骑幻化时效信息 #tagMCHorseSkinTimeInfoList + +class tagMCHorseSkinTimeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("ID", c_int), # 对应坐骑幻化表ID + ("InvalidTime", 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.ID = 0 + self.InvalidTime = 0 + return + + def GetLength(self): + return sizeof(tagMCHorseSkinTimeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 10 通知坐骑幻化时效信息 //tagMCHorseSkinTimeInfoList: + ID:%d, + InvalidTime:%d + '''\ + %( + self.ID, + self.InvalidTime + ) + return DumpString + + +class tagMCHorseSkinTimeInfoList(Structure): + Head = tagHead() + TimeCnt = 0 #(BYTE TimeCnt)//个数 + TimeInfoList = list() #(vector<tagMCHorseSkinTimeInfo> TimeInfoList)// 数据列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TimeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TimeCnt): + temTimeInfoList = tagMCHorseSkinTimeInfo() + _pos = temTimeInfoList.ReadData(_lpData, _pos) + self.TimeInfoList.append(temTimeInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x10 + self.TimeCnt = 0 + self.TimeInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.TimeCnt): + length += self.TimeInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TimeCnt) + for i in range(self.TimeCnt): + data = CommFunc.WriteString(data, self.TimeInfoList[i].GetLength(), self.TimeInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TimeCnt:%d, + TimeInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.TimeCnt, + "..." + ) + return DumpString + + +m_NAtagMCHorseSkinTimeInfoList=tagMCHorseSkinTimeInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorseSkinTimeInfoList.Head.Cmd,m_NAtagMCHorseSkinTimeInfoList.Head.SubCmd))] = m_NAtagMCHorseSkinTimeInfoList + + +#------------------------------------------------------ +# A3 CD 坐骑星级信息 #tagMCHorseStarInfo + +class tagMCHorseStar(Structure): + _pack_ = 1 + _fields_ = [ + ("HorseID", c_int), # 坐骑表ID + ("Star", c_ubyte), # 星级 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.HorseID = 0 + self.Star = 0 + return + + def GetLength(self): + return sizeof(tagMCHorseStar) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 CD 坐骑星级信息 //tagMCHorseStarInfo: + HorseID:%d, + Star:%d + '''\ + %( + self.HorseID, + self.Star + ) + return DumpString + + +class tagMCHorseStarInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + HorseStarList = list() #(vector<tagMCHorseStar> HorseStarList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCD + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temHorseStarList = tagMCHorseStar() + _pos = temHorseStarList.ReadData(_lpData, _pos) + self.HorseStarList.append(temHorseStarList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCD + self.Count = 0 + self.HorseStarList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.HorseStarList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.HorseStarList[i].GetLength(), self.HorseStarList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + HorseStarList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCHorseStarInfo=tagMCHorseStarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHorseStarInfo.Head.Cmd,m_NAtagMCHorseStarInfo.Head.SubCmd))] = m_NAtagMCHorseStarInfo + + +#------------------------------------------------------ +# A3 38 投资理财信息 #tagMCInvestInfo + +class tagMCInvestInfo(Structure): + Head = tagHead() + InvestType = 0 #(BYTE InvestType)// 投资类型 + CurDay = 0 #(WORD CurDay)// 当前天数,投资第一天为1 + ValueCount = 0 #(BYTE ValueCount) + RewardValue = list() #(vector<DWORD> RewardValue)//领奖记录值,按投资回报索引位记录是否已领取 + ProgressValue = list() #(vector<DWORD> ProgressValue)//投资相关可领取进度记录值: 9登录投资-记录已登录天数;11Boss投资-按回报索引位记录是否已击杀该boss + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x38 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.InvestType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CurDay,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.RewardValue.append(value) + for i in range(self.ValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ProgressValue.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x38 + self.InvestType = 0 + self.CurDay = 0 + self.ValueCount = 0 + self.RewardValue = list() + self.ProgressValue = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 1 + length += 4 * self.ValueCount + length += 4 * self.ValueCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.InvestType) + data = CommFunc.WriteWORD(data, self.CurDay) + data = CommFunc.WriteBYTE(data, self.ValueCount) + for i in range(self.ValueCount): + data = CommFunc.WriteDWORD(data, self.RewardValue[i]) + for i in range(self.ValueCount): + data = CommFunc.WriteDWORD(data, self.ProgressValue[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + InvestType:%d, + CurDay:%d, + ValueCount:%d, + RewardValue:%s, + ProgressValue:%s + '''\ + %( + self.Head.OutputString(), + self.InvestType, + self.CurDay, + self.ValueCount, + "...", + "..." + ) + return DumpString + + +m_NAtagMCInvestInfo=tagMCInvestInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCInvestInfo.Head.Cmd,m_NAtagMCInvestInfo.Head.SubCmd))] = m_NAtagMCInvestInfo + + +#------------------------------------------------------ +# A3 55 炼体信息 #tagMCLianTiInfo + +class tagMCLianTiInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("LianTiLV", c_ubyte), #炼体等级 + ("EatItemCount", c_int), #当前等级已吃丹个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x55 + 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 = 0xA3 + self.SubCmd = 0x55 + self.LianTiLV = 0 + self.EatItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCLianTiInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 55 炼体信息 //tagMCLianTiInfo: + Cmd:%s, + SubCmd:%s, + LianTiLV:%d, + EatItemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.LianTiLV, + self.EatItemCount + ) + return DumpString + + +m_NAtagMCLianTiInfo=tagMCLianTiInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLianTiInfo.Cmd,m_NAtagMCLianTiInfo.SubCmd))] = m_NAtagMCLianTiInfo + + +#------------------------------------------------------ # A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo class tagMCMagicWeaponInfo(Structure): @@ -15350,6 +22454,114 @@ m_NAtagMCGreatMasterExp=tagMCGreatMasterExp() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGreatMasterExp.Cmd,m_NAtagMCGreatMasterExp.SubCmd))] = m_NAtagMCGreatMasterExp + + +#------------------------------------------------------ +# A3 C2 大师强化等级激活信息 #tagMCMasterPlusLVInfo + +class tagMCMasterPlusLV(Structure): + _pack_ = 1 + _fields_ = [ + ("ClassLV", c_ubyte), + ("MasterPlusLV", 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.ClassLV = 0 + self.MasterPlusLV = 0 + return + + def GetLength(self): + return sizeof(tagMCMasterPlusLV) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C2 大师强化等级激活信息 //tagMCMasterPlusLVInfo: + ClassLV:%d, + MasterPlusLV:%d + '''\ + %( + self.ClassLV, + self.MasterPlusLV + ) + return DumpString + + +class tagMCMasterPlusLVInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)// 信息个数 + MasterPlusLVInfoList = list() #(vector<tagMCMasterPlusLV> MasterPlusLVInfoList)// 信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC2 + 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): + temMasterPlusLVInfoList = tagMCMasterPlusLV() + _pos = temMasterPlusLVInfoList.ReadData(_lpData, _pos) + self.MasterPlusLVInfoList.append(temMasterPlusLVInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC2 + self.Count = 0 + self.MasterPlusLVInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.MasterPlusLVInfoList[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.MasterPlusLVInfoList[i].GetLength(), self.MasterPlusLVInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + MasterPlusLVInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCMasterPlusLVInfo=tagMCMasterPlusLVInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMasterPlusLVInfo.Head.Cmd,m_NAtagMCMasterPlusLVInfo.Head.SubCmd))] = m_NAtagMCMasterPlusLVInfo #------------------------------------------------------ @@ -15644,7 +22856,8 @@ class tagMCModuleFightPowerInfo(Structure): Head = tagHead() - TotalFightPower = 0 #(DWORD TotalFightPower)//总战斗力 + TotalFightPower = 0 #(DWORD TotalFightPower)//总战斗力,求余亿部分 + TotalFightPoweEx = 0 #(DWORD TotalFightPoweEx)//总战斗力,整除亿部分,1代表1亿 MFPCnt = 0 #(BYTE MFPCnt)//模块战斗力总数 MFPList = list() #(vector<tagMCModuleFightPower> MFPList) data = None @@ -15659,6 +22872,7 @@ self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalFightPoweEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.MFPCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.MFPCnt): temMFPList = tagMCModuleFightPower() @@ -15672,6 +22886,7 @@ self.Head.Cmd = 0xA3 self.Head.SubCmd = 0xA1 self.TotalFightPower = 0 + self.TotalFightPoweEx = 0 self.MFPCnt = 0 self.MFPList = list() return @@ -15679,6 +22894,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 4 length += 4 length += 1 for i in range(self.MFPCnt): @@ -15690,6 +22906,7 @@ data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteDWORD(data, self.TotalFightPower) + data = CommFunc.WriteDWORD(data, self.TotalFightPoweEx) data = CommFunc.WriteBYTE(data, self.MFPCnt) for i in range(self.MFPCnt): data = CommFunc.WriteString(data, self.MFPList[i].GetLength(), self.MFPList[i].GetBuffer()) @@ -15699,12 +22916,14 @@ DumpString = ''' Head:%s, TotalFightPower:%d, + TotalFightPoweEx:%d, MFPCnt:%d, MFPList:%s '''\ %( self.Head.OutputString(), self.TotalFightPower, + self.TotalFightPoweEx, self.MFPCnt, "..." ) @@ -16067,6 +23286,7 @@ ItemAddCnt = 0 #(WORD ItemAddCnt)//物品增加次数 PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表 + EnterCntTotal = 0 #(DWORD EnterCntTotal)//累计进入次数 data = None def __init__(self): @@ -16083,6 +23303,7 @@ for i in range(self.PassGradeCnt): value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.PassGrade.append(value) + self.EnterCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -16092,6 +23313,7 @@ self.ItemAddCnt = 0 self.PassGradeCnt = 0 self.PassGrade = list() + self.EnterCntTotal = 0 return def GetLength(self): @@ -16102,6 +23324,7 @@ length += 2 length += 1 length += 4 * self.PassGradeCnt + length += 4 return length @@ -16114,6 +23337,7 @@ data = CommFunc.WriteBYTE(data, self.PassGradeCnt) for i in range(self.PassGradeCnt): data = CommFunc.WriteDWORD(data, self.PassGrade[i]) + data = CommFunc.WriteDWORD(data, self.EnterCntTotal) return data def OutputString(self): @@ -16123,7 +23347,8 @@ RecoverCnt:%d, ItemAddCnt:%d, PassGradeCnt:%d, - PassGrade:%s + PassGrade:%s, + EnterCntTotal:%d '''\ %( self.FBID, @@ -16131,7 +23356,8 @@ self.RecoverCnt, self.ItemAddCnt, self.PassGradeCnt, - "..." + "...", + self.EnterCntTotal ) return DumpString @@ -16461,6 +23687,7 @@ _fields_ = [ ("AlchemyID", c_int), # 丹 ID ("StartTime", c_int), # 开始炼的时间 + ("AlchemyTimes", c_ushort), # 炼的次数 ] def __init__(self): @@ -16475,6 +23702,7 @@ def Clear(self): self.AlchemyID = 0 self.StartTime = 0 + self.AlchemyTimes = 0 return def GetLength(self): @@ -16486,11 +23714,13 @@ def OutputString(self): DumpString = '''// A3 BF 通知客户端炼丹炉信息 //tagMCPlayerStoveMsg: AlchemyID:%d, - StartTime:%d + StartTime:%d, + AlchemyTimes:%d '''\ %( self.AlchemyID, - self.StartTime + self.StartTime, + self.AlchemyTimes ) return DumpString @@ -16500,7 +23730,7 @@ StoveLV = 0 #(BYTE StoveLV)// 炼丹炉等级 StoveExp = 0 #(DWORD StoveExp)// 炼丹炉经验 ItemID = 0 #(DWORD ItemID)// 合成物品id - ItemCnt = 0 #(BYTE ItemCnt)// 丹药数量 + ItemCnt = 0 #(WORD ItemCnt)// 丹药数量 StoveCnt = 0 #(WORD StoveCnt)// 丹药数量 InfoList = list() #(vector<tagMCPlayerStoveInfo> InfoList) data = None @@ -16517,7 +23747,7 @@ self.StoveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.StoveExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) self.StoveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.StoveCnt): temInfoList = tagMCPlayerStoveInfo() @@ -16544,7 +23774,7 @@ length += 1 length += 4 length += 4 - length += 1 + length += 2 length += 2 for i in range(self.StoveCnt): length += self.InfoList[i].GetLength() @@ -16557,7 +23787,7 @@ data = CommFunc.WriteBYTE(data, self.StoveLV) data = CommFunc.WriteDWORD(data, self.StoveExp) data = CommFunc.WriteDWORD(data, self.ItemID) - data = CommFunc.WriteBYTE(data, self.ItemCnt) + data = CommFunc.WriteWORD(data, self.ItemCnt) data = CommFunc.WriteWORD(data, self.StoveCnt) for i in range(self.StoveCnt): data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) @@ -16724,6 +23954,7 @@ ("ExtraCnt", c_ubyte), # VIP额外次数 ("ExtraData", c_ubyte), # 额外参数1 ("ExtraData2", c_ubyte), # 额外参数2 + ("HaveRecover", c_ubyte), # 已找回 1-全部已找回 2-非VIP已找回 ] def __init__(self): @@ -16741,6 +23972,7 @@ self.ExtraCnt = 0 self.ExtraData = 0 self.ExtraData2 = 0 + self.HaveRecover = 0 return def GetLength(self): @@ -16755,14 +23987,16 @@ RecoverCnt:%d, ExtraCnt:%d, ExtraData:%d, - ExtraData2:%d + ExtraData2:%d, + HaveRecover:%d '''\ %( self.Index, self.RecoverCnt, self.ExtraCnt, self.ExtraData, - self.ExtraData2 + self.ExtraData2, + self.HaveRecover ) return DumpString @@ -16905,6 +24139,185 @@ m_NAtagMCRuneInfo=tagMCRuneInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRuneInfo.Head.Cmd,m_NAtagMCRuneInfo.Head.SubCmd))] = m_NAtagMCRuneInfo + + +#------------------------------------------------------ +# A3 C8 神通等级信息 #tagMCShentongLVInfo + +class tagMCShentongLV(Structure): + _pack_ = 1 + _fields_ = [ + ("ShentongID", c_ubyte), + ("ClassLV", c_ubyte), + ("LV", 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.ShentongID = 0 + self.ClassLV = 0 + self.LV = 0 + return + + def GetLength(self): + return sizeof(tagMCShentongLV) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C8 神通等级信息 //tagMCShentongLVInfo: + ShentongID:%d, + ClassLV:%d, + LV:%d + '''\ + %( + self.ShentongID, + self.ClassLV, + self.LV + ) + return DumpString + + +class tagMCShentongLVInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + ShentongLVList = list() #(vector<tagMCShentongLV> ShentongLVList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC8 + 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): + temShentongLVList = tagMCShentongLV() + _pos = temShentongLVList.ReadData(_lpData, _pos) + self.ShentongLVList.append(temShentongLVList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC8 + self.Count = 0 + self.ShentongLVList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.ShentongLVList[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.ShentongLVList[i].GetLength(), self.ShentongLVList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ShentongLVList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCShentongLVInfo=tagMCShentongLVInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongLVInfo.Head.Cmd,m_NAtagMCShentongLVInfo.Head.SubCmd))] = m_NAtagMCShentongLVInfo + + +#------------------------------------------------------ +# A3 C9 神通技能设置信息 #tagMCShentongSkillInfo + +class tagMCShentongSkillInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + SkillIDList = list() #(vector<DWORD> SkillIDList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC9 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SkillIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xC9 + self.Count = 0 + self.SkillIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteDWORD(data, self.SkillIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SkillIDList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCShentongSkillInfo=tagMCShentongSkillInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongSkillInfo.Head.Cmd,m_NAtagMCShentongSkillInfo.Head.SubCmd))] = m_NAtagMCShentongSkillInfo #------------------------------------------------------ @@ -17329,6 +24742,7 @@ _fields_ = [ ("RecordIndex", c_ushort), #第几个记录值 每个key存31个succid 0-30为0, 31-61为1.. ("Record", c_int), #对应是否领取值 + ("PassportRecord", c_int), #通行证奖励是否领取值 ] def __init__(self): @@ -17343,6 +24757,7 @@ def Clear(self): self.RecordIndex = 0 self.Record = 0 + self.PassportRecord = 0 return def GetLength(self): @@ -17354,11 +24769,13 @@ def OutputString(self): DumpString = '''//A3 42 成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList: RecordIndex:%d, - Record:%d + Record:%d, + PassportRecord:%d '''\ %( self.RecordIndex, - self.Record + self.Record, + self.PassportRecord ) return DumpString @@ -17558,6 +24975,58 @@ #------------------------------------------------------ +# A3 43 成就积分信息 #tagMCSuccessScoreInfo + +class tagMCSuccessScoreInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ScoreAwardState", c_int), #成就积分领奖记录,按奖励索引位记录是否领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x43 + 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 = 0xA3 + self.SubCmd = 0x43 + self.ScoreAwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCSuccessScoreInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 43 成就积分信息 //tagMCSuccessScoreInfo: + Cmd:%s, + SubCmd:%s, + ScoreAwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ScoreAwardState + ) + return DumpString + + +m_NAtagMCSuccessScoreInfo=tagMCSuccessScoreInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuccessScoreInfo.Cmd,m_NAtagMCSuccessScoreInfo.SubCmd))] = m_NAtagMCSuccessScoreInfo + + +#------------------------------------------------------ #A3 14 通知各功能的祝福值 #tagMCSyncBlessValue class tagMCSyncSingleBlessValue(Structure): @@ -17748,6 +25217,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("IsPass", c_ubyte), #是否通关副本 + ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取 ] def __init__(self): @@ -17765,6 +25235,7 @@ self.Cmd = 0xA3 self.SubCmd = 0x11 self.IsPass = 0 + self.XXZLAwardState = 0 return def GetLength(self): @@ -17777,12 +25248,14 @@ DumpString = '''// A3 11 通知玩家境界信息 //tagMCSyncRealmInfo: Cmd:%s, SubCmd:%s, - IsPass:%d + IsPass:%d, + XXZLAwardState:%d '''\ %( self.Cmd, self.SubCmd, - self.IsPass + self.IsPass, + self.XXZLAwardState ) return DumpString @@ -17792,14 +25265,13 @@ #------------------------------------------------------ -#A3 01 坐骑培养信息 #tagTrainHorseData +# A3 CE 称号星级信息 #tagMCTitleStarInfo -class tagMCHorseInfo(Structure): +class tagMCTitleStar(Structure): _pack_ = 1 _fields_ = [ - ("HorseID", c_int), #ID - ("LV", c_ubyte), #等级 - ("Exp", c_int), #经验 + ("TitleID", c_int), # 称号ID + ("Star", c_ubyte), # 星级 ] def __init__(self): @@ -17812,36 +25284,391 @@ return _pos + self.GetLength() def Clear(self): - self.HorseID = 0 - self.LV = 0 - self.Exp = 0 + self.TitleID = 0 + self.Star = 0 return def GetLength(self): - return sizeof(tagMCHorseInfo) + return sizeof(tagMCTitleStar) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''//A3 01 坐骑培养信息 //tagTrainHorseData: - HorseID:%d, - LV:%d, - Exp:%d + DumpString = '''// A3 CE 称号星级信息 //tagMCTitleStarInfo: + TitleID:%d, + Star:%d '''\ %( - self.HorseID, - self.LV, - self.Exp + self.TitleID, + self.Star ) return DumpString +class tagMCTitleStarInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + TitleStarList = list() #(vector<tagMCTitleStar> TitleStarList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCE + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temTitleStarList = tagMCTitleStar() + _pos = temTitleStarList.ReadData(_lpData, _pos) + self.TitleStarList.append(temTitleStarList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0xCE + self.Count = 0 + self.TitleStarList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.TitleStarList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.TitleStarList[i].GetLength(), self.TitleStarList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + TitleStarList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCTitleStarInfo=tagMCTitleStarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTitleStarInfo.Head.Cmd,m_NAtagMCTitleStarInfo.Head.SubCmd))] = m_NAtagMCTitleStarInfo + + +#------------------------------------------------------ +# A3 56 通天令信息 #tagMCTongTianLingInfo + +class tagMCTongTianLingInfo(Structure): + Head = tagHead() + TTLBuyState = 0 #(BYTE TTLBuyState)//通天令是否已购买 + TTLLV = 0 #(BYTE TTLLV)//通天令等级,从0开始 + CurPoint = 0 #(DWORD CurPoint)//通天令当前等级经验积分点 + AwardStateCount = 0 #(BYTE AwardStateCount)//等级领奖记录值数,每个值存31个记录 0-30, 31-61, ... + CommAwardStateList = list() #(vector<DWORD> CommAwardStateList)//常规奖励领奖记录,按等级二进制位存储是否领奖 + XianAwardStateList = list() #(vector<DWORD> XianAwardStateList)//仙品奖励领奖记录,按等级二进制位存储是否领奖 + StartTime = 0 #(DWORD StartTime)//通天令本轮开始时间戳,秒 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x56 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TTLBuyState,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TTLLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.CommAwardStateList.append(value) + for i in range(self.AwardStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.XianAwardStateList.append(value) + self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x56 + self.TTLBuyState = 0 + self.TTLLV = 0 + self.CurPoint = 0 + self.AwardStateCount = 0 + self.CommAwardStateList = list() + self.XianAwardStateList = list() + self.StartTime = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 + length += 1 + length += 4 * self.AwardStateCount + length += 4 * self.AwardStateCount + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TTLBuyState) + data = CommFunc.WriteBYTE(data, self.TTLLV) + data = CommFunc.WriteDWORD(data, self.CurPoint) + data = CommFunc.WriteBYTE(data, self.AwardStateCount) + for i in range(self.AwardStateCount): + data = CommFunc.WriteDWORD(data, self.CommAwardStateList[i]) + for i in range(self.AwardStateCount): + data = CommFunc.WriteDWORD(data, self.XianAwardStateList[i]) + data = CommFunc.WriteDWORD(data, self.StartTime) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TTLBuyState:%d, + TTLLV:%d, + CurPoint:%d, + AwardStateCount:%d, + CommAwardStateList:%s, + XianAwardStateList:%s, + StartTime:%d + '''\ + %( + self.Head.OutputString(), + self.TTLBuyState, + self.TTLLV, + self.CurPoint, + self.AwardStateCount, + "...", + "...", + self.StartTime + ) + return DumpString + + +m_NAtagMCTongTianLingInfo=tagMCTongTianLingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingInfo.Head.Cmd,m_NAtagMCTongTianLingInfo.Head.SubCmd))] = m_NAtagMCTongTianLingInfo + + +#------------------------------------------------------ +# A3 58 通天令任务奖励信息 #tagMCTongTianLingTaskAwardInfo + +class tagMCTongTianLingTaskAwardInfo(Structure): + Head = tagHead() + AwardStateCount = 0 #(BYTE AwardStateCount) + TaskAwardStateList = list() #(vector<DWORD> TaskAwardStateList)//任务领奖记录值个数,按任务ID二进制位存储是否已领取,每个值存31个记录 0-30, 31-61, ... + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x58 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AwardStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TaskAwardStateList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x58 + self.AwardStateCount = 0 + self.TaskAwardStateList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.AwardStateCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AwardStateCount) + for i in range(self.AwardStateCount): + data = CommFunc.WriteDWORD(data, self.TaskAwardStateList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AwardStateCount:%d, + TaskAwardStateList:%s + '''\ + %( + self.Head.OutputString(), + self.AwardStateCount, + "..." + ) + return DumpString + + +m_NAtagMCTongTianLingTaskAwardInfo=tagMCTongTianLingTaskAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskAwardInfo.Head.Cmd,m_NAtagMCTongTianLingTaskAwardInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskAwardInfo + + +#------------------------------------------------------ +# A3 57 通天令任务进度信息 #tagMCTongTianLingTaskValueInfo + +class tagMCTongTianLingTaskValue(Structure): + _pack_ = 1 + _fields_ = [ + ("TaskType", c_ubyte), #成就类型 + ("IsDaily", c_ubyte), #是否每日任务 + ("TaskValue", c_int), #当前完成进度值 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.TaskType = 0 + self.IsDaily = 0 + self.TaskValue = 0 + return + + def GetLength(self): + return sizeof(tagMCTongTianLingTaskValue) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 57 通天令任务进度信息 //tagMCTongTianLingTaskValueInfo: + TaskType:%d, + IsDaily:%d, + TaskValue:%d + '''\ + %( + self.TaskType, + self.IsDaily, + self.TaskValue + ) + return DumpString + + +class tagMCTongTianLingTaskValueInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//信息个数 + TaskValueList = list() #(vector<tagMCTongTianLingTaskValue> TaskValueList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x57 + 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): + temTaskValueList = tagMCTongTianLingTaskValue() + _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 = 0x57 + self.Count = 0 + self.TaskValueList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.TaskValueList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.TaskValueList[i].GetLength(), self.TaskValueList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + TaskValueList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCTongTianLingTaskValueInfo=tagMCTongTianLingTaskValueInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTongTianLingTaskValueInfo.Head.Cmd,m_NAtagMCTongTianLingTaskValueInfo.Head.SubCmd))] = m_NAtagMCTongTianLingTaskValueInfo + + +#------------------------------------------------------ +#A3 01 坐骑培养信息 #tagTrainHorseData + class tagTrainHorseData(Structure): Head = tagHead() - Multiple = 0 #(BYTE Multiple)//下次暴击倍数 - Num = 0 #(BYTE Num)//个数 - InfoList = list() #(vector<tagMCHorseInfo> InfoList)// 坐骑数据列表 + LV = 0 #(BYTE LV)//等阶 + EatItemCount = 0 #(DWORD EatItemCount)//当前阶已吃丹个数 + SkinPlusState = 0 #(DWORD SkinPlusState)//幻化激活状态,按位存储是否激活,幻化编号ID对应位,废弃,使用 SkinPlusStateList + TrainTypes = 0 #(BYTE TrainTypes)//培养类型数 + TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1 + TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1 + SkinPlusStateCount = 0 #(BYTE SkinPlusStateCount)//幻化激活状态值数 + SkinPlusStateList = list() #(vector<DWORD> SkinPlusStateList)//幻化激活状态值列表,按位存储是否激活,幻化编号ID对应位 data = None def __init__(self): @@ -17853,12 +25680,20 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Num): - temInfoList = tagMCHorseInfo() - _pos = temInfoList.ReadData(_lpData, _pos) - self.InfoList.append(temInfoList) + self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.EatItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SkinPlusState,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainLVList.append(value) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainItemCountList.append(value) + self.SkinPlusStateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SkinPlusStateCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SkinPlusStateList.append(value) return _pos def Clear(self): @@ -17866,41 +25701,67 @@ self.Head.Clear() self.Head.Cmd = 0xA3 self.Head.SubCmd = 0x01 - self.Multiple = 0 - self.Num = 0 - self.InfoList = list() + self.LV = 0 + self.EatItemCount = 0 + self.SkinPlusState = 0 + self.TrainTypes = 0 + self.TrainLVList = list() + self.TrainItemCountList = list() + self.SkinPlusStateCount = 0 + self.SkinPlusStateList = list() return def GetLength(self): length = 0 length += self.Head.GetLength() length += 1 + length += 4 + length += 4 length += 1 - for i in range(self.Num): - length += self.InfoList[i].GetLength() + length += 4 * self.TrainTypes + length += 4 * self.TrainTypes + length += 1 + length += 4 * self.SkinPlusStateCount return length def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Multiple) - data = CommFunc.WriteBYTE(data, self.Num) - for i in range(self.Num): - data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.LV) + data = CommFunc.WriteDWORD(data, self.EatItemCount) + data = CommFunc.WriteDWORD(data, self.SkinPlusState) + data = CommFunc.WriteBYTE(data, self.TrainTypes) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainLVList[i]) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i]) + data = CommFunc.WriteBYTE(data, self.SkinPlusStateCount) + for i in range(self.SkinPlusStateCount): + data = CommFunc.WriteDWORD(data, self.SkinPlusStateList[i]) return data def OutputString(self): DumpString = ''' Head:%s, - Multiple:%d, - Num:%d, - InfoList:%s + LV:%d, + EatItemCount:%d, + SkinPlusState:%d, + TrainTypes:%d, + TrainLVList:%s, + TrainItemCountList:%s, + SkinPlusStateCount:%d, + SkinPlusStateList:%s '''\ %( self.Head.OutputString(), - self.Multiple, - self.Num, + self.LV, + self.EatItemCount, + self.SkinPlusState, + self.TrainTypes, + "...", + "...", + self.SkinPlusStateCount, "..." ) return DumpString @@ -18538,6 +26399,385 @@ #------------------------------------------------------ +# A5 10 传功奖励结果 #tagMCChuangongResult + +class tagMCChuangongItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", c_ushort), + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCChuangongItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 10 传功奖励结果 //tagMCChuangongResult: + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCChuangongResult(Structure): + Head = tagHead() + FromLV = 0 #(WORD FromLV)// 传功前等级 + ToLV = 0 #(WORD ToLV)// 传功后等级 + Exp = 0 #(DWORD Exp)// 获得经验求余亿部分 + ExpPoint = 0 #(DWORD ExpPoint)// 获得经验整除亿部分 + ItemCount = 0 #(BYTE ItemCount) + AwardItemList = list() #(vector<tagMCChuangongItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FromLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ToLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemCount): + temAwardItemList = tagMCChuangongItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x10 + self.FromLV = 0 + self.ToLV = 0 + self.Exp = 0 + self.ExpPoint = 0 + self.ItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 2 + length += 4 + length += 4 + length += 1 + for i in range(self.ItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.FromLV) + data = CommFunc.WriteWORD(data, self.ToLV) + data = CommFunc.WriteDWORD(data, self.Exp) + data = CommFunc.WriteDWORD(data, self.ExpPoint) + data = CommFunc.WriteBYTE(data, self.ItemCount) + for i in range(self.ItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FromLV:%d, + ToLV:%d, + Exp:%d, + ExpPoint:%d, + ItemCount:%d, + AwardItemList:%s + '''\ + %( + self.Head.OutputString(), + self.FromLV, + self.ToLV, + self.Exp, + self.ExpPoint, + self.ItemCount, + "..." + ) + return DumpString + + +m_NAtagMCChuangongResult=tagMCChuangongResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChuangongResult.Head.Cmd,m_NAtagMCChuangongResult.Head.SubCmd))] = m_NAtagMCChuangongResult + + +#------------------------------------------------------ +# A5 02 家族活跃令兑换结果 #tagMCFamilyActivityExchangeResult + +class tagMCFamilyActivityExchangeResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Point", c_int), # 活跃令 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x02 + 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 = 0x02 + self.Point = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyActivityExchangeResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 02 家族活跃令兑换结果 //tagMCFamilyActivityExchangeResult: + Cmd:%s, + SubCmd:%s, + Point:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Point + ) + return DumpString + + +m_NAtagMCFamilyActivityExchangeResult=tagMCFamilyActivityExchangeResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyActivityExchangeResult.Cmd,m_NAtagMCFamilyActivityExchangeResult.SubCmd))] = m_NAtagMCFamilyActivityExchangeResult + + +#------------------------------------------------------ +# A5 08 家族事务信息 #tagMCFamilyAffairInfo + +class tagMCFamilyAffair(Structure): + _pack_ = 1 + _fields_ = [ + ("AffairID", c_ushort), # 事务ID + ("Star", c_ubyte), # 星级 + ("State", c_ubyte), # 状态:0-无;1-进行中;2-已完成 + ("RemainDuration", c_ushort), # 剩余时长,秒,有剩余时间代表进行中 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.AffairID = 0 + self.Star = 0 + self.State = 0 + self.RemainDuration = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyAffair) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 08 家族事务信息 //tagMCFamilyAffairInfo: + AffairID:%d, + Star:%d, + State:%d, + RemainDuration:%d + '''\ + %( + self.AffairID, + self.Star, + self.State, + self.RemainDuration + ) + return DumpString + + +class tagMCFamilyAffairInfo(Structure): + Head = tagHead() + RefreshFreeCount = 0 #(BYTE RefreshFreeCount)// 今日已免费刷新次数 + Count = 0 #(BYTE Count) + AffairInfoList = list() #(vector<tagMCFamilyAffair> AffairInfoList)// 事务列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RefreshFreeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAffairInfoList = tagMCFamilyAffair() + _pos = temAffairInfoList.ReadData(_lpData, _pos) + self.AffairInfoList.append(temAffairInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x08 + self.RefreshFreeCount = 0 + self.Count = 0 + self.AffairInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.Count): + length += self.AffairInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RefreshFreeCount) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AffairInfoList[i].GetLength(), self.AffairInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RefreshFreeCount:%d, + Count:%d, + AffairInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.RefreshFreeCount, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFamilyAffairInfo=tagMCFamilyAffairInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyAffairInfo.Head.Cmd,m_NAtagMCFamilyAffairInfo.Head.SubCmd))] = m_NAtagMCFamilyAffairInfo + + +#------------------------------------------------------ +# A5 07 家族boss副本玩家信息 #tagMCFamilyBosFBPlayerInfo + +class tagMCFamilyBosFBPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HurtTotal", c_int), # 累计伤血,亿求余部分 + ("HurtTotalPoint", c_int), # 累计伤血,亿整除部分 + ("FightSeconds", c_int), # 已累计战斗时长,秒 + ("HurtAwardState", c_int), # 个人总伤血领奖记录,按奖励位二进制位运算表示是否已领取 + ("HurtAwardStateFamily", c_int), # 仙盟总伤血领奖记录,按奖励位二进制位运算表示是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x07 + self.HurtTotal = 0 + self.HurtTotalPoint = 0 + self.FightSeconds = 0 + self.HurtAwardState = 0 + self.HurtAwardStateFamily = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyBosFBPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 07 家族boss副本玩家信息 //tagMCFamilyBosFBPlayerInfo: + Cmd:%s, + SubCmd:%s, + HurtTotal:%d, + HurtTotalPoint:%d, + FightSeconds:%d, + HurtAwardState:%d, + HurtAwardStateFamily:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HurtTotal, + self.HurtTotalPoint, + self.FightSeconds, + self.HurtAwardState, + self.HurtAwardStateFamily + ) + return DumpString + + +m_NAtagMCFamilyBosFBPlayerInfo=tagMCFamilyBosFBPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyBosFBPlayerInfo.Cmd,m_NAtagMCFamilyBosFBPlayerInfo.SubCmd))] = m_NAtagMCFamilyBosFBPlayerInfo + + +#------------------------------------------------------ # A5 06 仙盟每日福利领取状态 #tagMCFamilyDayAward class tagMCFamilyDayAward(Structure): @@ -18546,6 +26786,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("GetState", c_ubyte), #是否已领取 + ("MoneyDonateCount", c_ubyte), #今日货币捐献次数 ] def __init__(self): @@ -18563,6 +26804,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x06 self.GetState = 0 + self.MoneyDonateCount = 0 return def GetLength(self): @@ -18575,12 +26817,14 @@ DumpString = '''// A5 06 仙盟每日福利领取状态 //tagMCFamilyDayAward: Cmd:%s, SubCmd:%s, - GetState:%d + GetState:%d, + MoneyDonateCount:%d '''\ %( self.Cmd, self.SubCmd, - self.GetState + self.GetState, + self.MoneyDonateCount ) return DumpString @@ -18650,6 +26894,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("HasSendGold", c_int), # 已用额度 + ("ServerGrabCnt", c_int), # 全服红包已抢次数 ] def __init__(self): @@ -18667,6 +26912,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x05 self.HasSendGold = 0 + self.ServerGrabCnt = 0 return def GetLength(self): @@ -18679,18 +26925,199 @@ DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit: Cmd:%s, SubCmd:%s, - HasSendGold:%d + HasSendGold:%d, + ServerGrabCnt:%d '''\ %( self.Cmd, self.SubCmd, - self.HasSendGold + self.HasSendGold, + self.ServerGrabCnt ) return DumpString m_NAtagMCFamilyRedPacketGoldLimit=tagMCFamilyRedPacketGoldLimit() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyRedPacketGoldLimit.Cmd,m_NAtagMCFamilyRedPacketGoldLimit.SubCmd))] = m_NAtagMCFamilyRedPacketGoldLimit + + +#------------------------------------------------------ +# A5 11 打坐信息 #tagMCFamilySitInfo + +class tagMCFamilySitInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ExpRound", c_ushort), # 已获得经验轮次 + ("Exp", c_int), # 获得经验求余亿部分 + ("ExpPoint", c_int), # 获得经验整除亿部分 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x11 + self.ExpRound = 0 + self.Exp = 0 + self.ExpPoint = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilySitInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 11 打坐信息 //tagMCFamilySitInfo: + Cmd:%s, + SubCmd:%s, + ExpRound:%d, + Exp:%d, + ExpPoint:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ExpRound, + self.Exp, + self.ExpPoint + ) + return DumpString + + +m_NAtagMCFamilySitInfo=tagMCFamilySitInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilySitInfo.Cmd,m_NAtagMCFamilySitInfo.SubCmd))] = m_NAtagMCFamilySitInfo + + +#------------------------------------------------------ +# A5 09 仙盟阵法信息 #tagMCFamilyZhenfaInfo + +class tagMCFamilyZhenfa(Structure): + _pack_ = 1 + _fields_ = [ + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ZhenfaLV", c_ushort), # 阵法等级 + ("ZhenfaExp", c_int), # 阵法经验 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ZhenfaType = 0 + self.ZhenfaLV = 0 + self.ZhenfaExp = 0 + return + + def GetLength(self): + return sizeof(tagMCFamilyZhenfa) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 09 仙盟阵法信息 //tagMCFamilyZhenfaInfo: + ZhenfaType:%d, + ZhenfaLV:%d, + ZhenfaExp:%d + '''\ + %( + self.ZhenfaType, + self.ZhenfaLV, + self.ZhenfaExp + ) + return DumpString + + +class tagMCFamilyZhenfaInfo(Structure): + Head = tagHead() + PlayerID = 0 #(DWORD PlayerID)// 当前培养阵法的玩家ID,如果有做自动捐献,需等收到的玩家ID为自己的时候才发送下一个捐献包 + Count = 0 #(BYTE Count) + ZhenfaInfoList = list() #(vector<tagMCFamilyZhenfa> ZhenfaInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temZhenfaInfoList = tagMCFamilyZhenfa() + _pos = temZhenfaInfoList.ReadData(_lpData, _pos) + self.ZhenfaInfoList.append(temZhenfaInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA5 + self.Head.SubCmd = 0x09 + self.PlayerID = 0 + self.Count = 0 + self.ZhenfaInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.Count): + length += self.ZhenfaInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ZhenfaInfoList[i].GetLength(), self.ZhenfaInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PlayerID:%d, + Count:%d, + ZhenfaInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.PlayerID, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFamilyZhenfaInfo=tagMCFamilyZhenfaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyZhenfaInfo.Head.Cmd,m_NAtagMCFamilyZhenfaInfo.Head.SubCmd))] = m_NAtagMCFamilyZhenfaInfo #------------------------------------------------------ @@ -19547,6 +27974,58 @@ m_NAtagMCCollectAwardItemInfo=tagMCCollectAwardItemInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectAwardItemInfo.Head.Cmd,m_NAtagMCCollectAwardItemInfo.Head.SubCmd))] = m_NAtagMCCollectAwardItemInfo + + +#------------------------------------------------------ +# A7 20 创角奖励领奖状态 #tagMCCreateRoleAwardState + +class tagMCCreateRoleAwardState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GetState", c_ubyte), # 是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA7 + self.SubCmd = 0x20 + 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 = 0xA7 + self.SubCmd = 0x20 + self.GetState = 0 + return + + def GetLength(self): + return sizeof(tagMCCreateRoleAwardState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 20 创角奖励领奖状态 //tagMCCreateRoleAwardState: + Cmd:%s, + SubCmd:%s, + GetState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GetState + ) + return DumpString + + +m_NAtagMCCreateRoleAwardState=tagMCCreateRoleAwardState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCreateRoleAwardState.Cmd,m_NAtagMCCreateRoleAwardState.SubCmd))] = m_NAtagMCCreateRoleAwardState #------------------------------------------------------ @@ -21044,6 +29523,7 @@ _fields_ = [ ("RefreshType", c_ubyte), ("Value", c_int), + ("ValueEx", c_int), ] def __init__(self): @@ -21058,6 +29538,7 @@ def Clear(self): self.RefreshType = 0 self.Value = 0 + self.ValueEx = 0 return def GetLength(self): @@ -21069,11 +29550,13 @@ def OutputString(self): DumpString = '''//A7 09 周围对象刷新合并包 //tagObjInfoListRefresh: RefreshType:%d, - Value:%d + Value:%d, + ValueEx:%d '''\ %( self.RefreshType, - self.Value + self.Value, + self.ValueEx ) return DumpString @@ -21331,6 +29814,142 @@ m_NAtagMCItemDayUseCntInfo=tagMCItemDayUseCntInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCItemDayUseCntInfo.Head.Cmd,m_NAtagMCItemDayUseCntInfo.Head.SubCmd))] = m_NAtagMCItemDayUseCntInfo + + +#------------------------------------------------------ +# A8 15 灵器突破结果 #tagMCLingQiEquipBreakResult + +class tagMCLingQiEquipBreakResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MakeItemID", c_int), #突破后的物品ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA8 + self.SubCmd = 0x15 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA8 + self.SubCmd = 0x15 + self.MakeItemID = 0 + return + + def GetLength(self): + return sizeof(tagMCLingQiEquipBreakResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A8 15 灵器突破结果 //tagMCLingQiEquipBreakResult: + Cmd:%s, + SubCmd:%s, + MakeItemID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MakeItemID + ) + return DumpString + + +m_NAtagMCLingQiEquipBreakResult=tagMCLingQiEquipBreakResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiEquipBreakResult.Cmd,m_NAtagMCLingQiEquipBreakResult.SubCmd))] = m_NAtagMCLingQiEquipBreakResult + + +#------------------------------------------------------ +# A8 18 灵器培养信息 #tagMCLingQiTrainInfo + +class tagMCLingQiTrainInfo(Structure): + Head = tagHead() + EquipPlace = 0 #(BYTE EquipPlace)//灵器装备位 + TrainTypes = 0 #(BYTE TrainTypes)//培养类型数 + TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1 + TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.EquipPlace,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainLVList.append(value) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainItemCountList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x18 + self.EquipPlace = 0 + self.TrainTypes = 0 + self.TrainLVList = list() + self.TrainItemCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.TrainTypes + length += 4 * self.TrainTypes + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.EquipPlace) + data = CommFunc.WriteBYTE(data, self.TrainTypes) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainLVList[i]) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + EquipPlace:%d, + TrainTypes:%d, + TrainLVList:%s, + TrainItemCountList:%s + '''\ + %( + self.Head.OutputString(), + self.EquipPlace, + self.TrainTypes, + "...", + "..." + ) + return DumpString + + +m_NAtagMCLingQiTrainInfo=tagMCLingQiTrainInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiTrainInfo.Head.Cmd,m_NAtagMCLingQiTrainInfo.Head.SubCmd))] = m_NAtagMCLingQiTrainInfo #------------------------------------------------------ @@ -21761,6 +30380,83 @@ #------------------------------------------------------ +# A8 17 宠物培养信息 #tagMCPetTrainInfo + +class tagMCPetTrainInfo(Structure): + Head = tagHead() + TrainTypes = 0 #(BYTE TrainTypes)//培养类型数 + TrainLVList = list() #(vector<DWORD> TrainLVList)//培养等阶列表,索引为培养类型减1 + TrainItemCountList = list() #(vector<DWORD> TrainItemCountList)//培养当前阶已吃培养丹个数列表,索引为培养类型减1 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x17 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TrainTypes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainLVList.append(value) + for i in range(self.TrainTypes): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.TrainItemCountList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x17 + self.TrainTypes = 0 + self.TrainLVList = list() + self.TrainItemCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.TrainTypes + length += 4 * self.TrainTypes + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TrainTypes) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainLVList[i]) + for i in range(self.TrainTypes): + data = CommFunc.WriteDWORD(data, self.TrainItemCountList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TrainTypes:%d, + TrainLVList:%s, + TrainItemCountList:%s + '''\ + %( + self.Head.OutputString(), + self.TrainTypes, + "...", + "..." + ) + return DumpString + + +m_NAtagMCPetTrainInfo=tagMCPetTrainInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetTrainInfo.Head.Cmd,m_NAtagMCPetTrainInfo.Head.SubCmd))] = m_NAtagMCPetTrainInfo + + +#------------------------------------------------------ # A8 02 通知NPC商店物品今日已购买次数 #tagMCShopItemDayBuyCntInfo class tagMCShopItemDayBuyCnt(Structure): @@ -21958,14 +30654,14 @@ #------------------------------------------------------ -# A8 15 诛仙装备分解结果通知 #tagMCZhuXianDecomposeResult +# AA 67 Boss历练活动信息 #tagMCActBossTrialInfo -class tagMCZhuXianDecomposeItem(Structure): +class tagMCActBossTrialItem(Structure): _pack_ = 1 _fields_ = [ - ("ItemID", c_int), #物品ID - ("ItemCnt", c_ubyte), #物品数量 - ("IsBind", c_ubyte), #是否绑定 + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), ] def __init__(self): @@ -21979,94 +30675,2111 @@ def Clear(self): self.ItemID = 0 - self.ItemCnt = 0 + self.ItemCount = 0 self.IsBind = 0 return def GetLength(self): - return sizeof(tagMCZhuXianDecomposeItem) + return sizeof(tagMCActBossTrialItem) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// A8 15 诛仙装备分解结果通知 //tagMCZhuXianDecomposeResult: + DumpString = '''// AA 67 Boss历练活动信息 //tagMCActBossTrialInfo: ItemID:%d, - ItemCnt:%d, + ItemCount:%d, IsBind:%d '''\ %( self.ItemID, - self.ItemCnt, + self.ItemCount, self.IsBind ) return DumpString -class tagMCZhuXianDecomposeResult(Structure): - Head = tagHead() - Cnt = 0 #(BYTE Cnt)//数量 - ItemList = list() #(vector<tagMCZhuXianDecomposeItem> ItemList) +class tagMCActBossTrialBillard(Structure): + Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 data = None def __init__(self): self.Clear() - self.Head.Cmd = 0xA8 - self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Rank = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Rank) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rank:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.Rank, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialSubmitInfo(Structure): + RecordIndex = 0 #(BYTE RecordIndex)// 记录索引 + NeedCount = 0 #(WORD NeedCount)// 所需提交个数 + Count = 0 #(BYTE Count)// 奖励物品数 + AwardItemList = list() #(vector<tagMCActBossTrialItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temAwardItemList = tagMCActBossTrialItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.RecordIndex = 0 + self.NeedCount = 0 + self.Count = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + for i in range(self.Count): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordIndex) + data = CommFunc.WriteWORD(data, self.NeedCount) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + RecordIndex:%d, + NeedCount:%d, + Count:%d, + AwardItemList:%s + '''\ + %( + self.RecordIndex, + self.NeedCount, + self.Count, + "..." + ) + return DumpString + + +class tagMCActBossTrialInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + SubmitCount = 0 #(BYTE SubmitCount) + SubmitInfoList = list() #(vector<tagMCActBossTrialSubmitInfo> SubmitInfoList)// 提交凭证信息列表 + BillardCount = 0 #(BYTE BillardCount) + BillboardInfoList = list() #(vector<tagMCActBossTrialBillard> BillboardInfoList)// 榜单信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Cnt): - temItemList = tagMCZhuXianDecomposeItem() - _pos = temItemList.ReadData(_lpData, _pos) - self.ItemList.append(temItemList) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SubmitCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SubmitCount): + temSubmitInfoList = tagMCActBossTrialSubmitInfo() + _pos = temSubmitInfoList.ReadData(_lpData, _pos) + self.SubmitInfoList.append(temSubmitInfoList) + self.BillardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BillardCount): + temBillboardInfoList = tagMCActBossTrialBillard() + _pos = temBillboardInfoList.ReadData(_lpData, _pos) + self.BillboardInfoList.append(temBillboardInfoList) return _pos def Clear(self): self.Head = tagHead() self.Head.Clear() - self.Head.Cmd = 0xA8 - self.Head.SubCmd = 0x15 - self.Cnt = 0 - self.ItemList = list() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x67 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.SubmitCount = 0 + self.SubmitInfoList = list() + self.BillardCount = 0 + self.BillboardInfoList = list() return def GetLength(self): length = 0 length += self.Head.GetLength() length += 1 - for i in range(self.Cnt): - length += self.ItemList[i].GetLength() + length += 10 + length += 10 + length += 1 + length += 1 + length += 2 + length += 1 + for i in range(self.SubmitCount): + length += self.SubmitInfoList[i].GetLength() + length += 1 + for i in range(self.BillardCount): + length += self.BillboardInfoList[i].GetLength() return length def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Cnt) - for i in range(self.Cnt): - data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.SubmitCount) + for i in range(self.SubmitCount): + data = CommFunc.WriteString(data, self.SubmitInfoList[i].GetLength(), self.SubmitInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BillardCount) + for i in range(self.BillardCount): + data = CommFunc.WriteString(data, self.BillboardInfoList[i].GetLength(), self.BillboardInfoList[i].GetBuffer()) return data def OutputString(self): DumpString = ''' Head:%s, - Cnt:%d, - ItemList:%s + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + SubmitCount:%d, + SubmitInfoList:%s, + BillardCount:%d, + BillboardInfoList:%s '''\ %( self.Head.OutputString(), - self.Cnt, + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.SubmitCount, + "...", + self.BillardCount, "..." ) return DumpString -m_NAtagMCZhuXianDecomposeResult=tagMCZhuXianDecomposeResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianDecomposeResult.Head.Cmd,m_NAtagMCZhuXianDecomposeResult.Head.SubCmd))] = m_NAtagMCZhuXianDecomposeResult +m_NAtagMCActBossTrialInfo=tagMCActBossTrialInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialInfo.Head.Cmd,m_NAtagMCActBossTrialInfo.Head.SubCmd))] = m_NAtagMCActBossTrialInfo + + +#------------------------------------------------------ +# AA 68 Boss历练活动玩家信息 #tagMCActBossTrialPlayerInfo + +class tagMCActBossTrialPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("SubmitCount", c_ushort), # 已提交凭证个数 + ("SubmitCountAward", c_int), # 提交凭证奖励领奖状态 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x68 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x68 + self.ActNum = 0 + self.SubmitCount = 0 + self.SubmitCountAward = 0 + return + + def GetLength(self): + return sizeof(tagMCActBossTrialPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 68 Boss历练活动玩家信息 //tagMCActBossTrialPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d, + SubmitCountAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount, + self.SubmitCountAward + ) + return DumpString + + +m_NAtagMCActBossTrialPlayerInfo=tagMCActBossTrialPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBossTrialPlayerInfo.Cmd,m_NAtagMCActBossTrialPlayerInfo.SubCmd))] = m_NAtagMCActBossTrialPlayerInfo + + +#------------------------------------------------------ +# AA 65 买一送多活动信息 #tagMCActBuyOneInfo + +class tagMCActBuyOneInfoFreeItem(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(tagMCActBuyOneInfoFreeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 65 买一送多活动信息 //tagMCActBuyOneInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActBuyOneInfoFreeGift(Structure): + FreeIndex = 0 #(BYTE FreeIndex)// 免费领取索引 + FreeItemCount = 0 #(BYTE FreeItemCount)// 免费礼包数 + FreeItemList = list() #(vector<tagMCActBuyOneInfoFreeItem> FreeItemList)// 免费礼包列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FreeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FreeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FreeItemCount): + temFreeItemList = tagMCActBuyOneInfoFreeItem() + _pos = temFreeItemList.ReadData(_lpData, _pos) + self.FreeItemList.append(temFreeItemList) + return _pos + + def Clear(self): + self.FreeIndex = 0 + self.FreeItemCount = 0 + self.FreeItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.FreeItemCount): + length += self.FreeItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.FreeIndex) + data = CommFunc.WriteBYTE(data, self.FreeItemCount) + for i in range(self.FreeItemCount): + data = CommFunc.WriteString(data, self.FreeItemList[i].GetLength(), self.FreeItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + FreeIndex:%d, + FreeItemCount:%d, + FreeItemList:%s + '''\ + %( + self.FreeIndex, + self.FreeItemCount, + "..." + ) + return DumpString + + +class tagMCActBuyOneInfoGiftbag(Structure): + CTGID = 0 #(DWORD CTGID)//所需充值ID + RecordIndex = 0 #(BYTE RecordIndex)// 记录索引 + FreeGiftCount = 0 #(BYTE FreeGiftCount)// 免费礼包数 + FreeGiftList = list() #(vector<tagMCActBuyOneInfoFreeGift> FreeGiftList)// 免费礼包列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.CTGID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FreeGiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FreeGiftCount): + temFreeGiftList = tagMCActBuyOneInfoFreeGift() + _pos = temFreeGiftList.ReadData(_lpData, _pos) + self.FreeGiftList.append(temFreeGiftList) + return _pos + + def Clear(self): + self.CTGID = 0 + self.RecordIndex = 0 + self.FreeGiftCount = 0 + self.FreeGiftList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + for i in range(self.FreeGiftCount): + length += self.FreeGiftList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.CTGID) + data = CommFunc.WriteBYTE(data, self.RecordIndex) + data = CommFunc.WriteBYTE(data, self.FreeGiftCount) + for i in range(self.FreeGiftCount): + data = CommFunc.WriteString(data, self.FreeGiftList[i].GetLength(), self.FreeGiftList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + CTGID:%d, + RecordIndex:%d, + FreeGiftCount:%d, + FreeGiftList:%s + '''\ + %( + self.CTGID, + self.RecordIndex, + self.FreeGiftCount, + "..." + ) + return DumpString + + +class tagMCActBuyOneInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + GiftbagCount = 0 #(BYTE GiftbagCount)// 活动礼包个数 + GiftbagList = list() #(vector<tagMCActBuyOneInfoGiftbag> GiftbagList)// 礼包列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x65 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagList = tagMCActBuyOneInfoGiftbag() + _pos = temGiftbagList.ReadData(_lpData, _pos) + self.GiftbagList.append(temGiftbagList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x65 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.GiftbagCount = 0 + self.GiftbagList = 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.GiftbagCount): + length += self.GiftbagList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.GiftbagCount) + for i in range(self.GiftbagCount): + data = CommFunc.WriteString(data, self.GiftbagList[i].GetLength(), self.GiftbagList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + GiftbagCount:%d, + GiftbagList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.GiftbagCount, + "..." + ) + return DumpString + + +m_NAtagMCActBuyOneInfo=tagMCActBuyOneInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOneInfo.Head.Cmd,m_NAtagMCActBuyOneInfo.Head.SubCmd))] = m_NAtagMCActBuyOneInfo + + +#------------------------------------------------------ +# AA 66 买一送多活动玩家信息 #tagMCActBuyOnePlayerInfo + +class tagMCActBuyOnePlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + FreeRecordCount = 0 #(BYTE FreeRecordCount)// 免费礼包领奖记录个数 + FreeRecordList = list() #(vector<DWORD> FreeRecordList)// 免费礼包领奖记录列表,按所需充值ID记录索引取记录,每个记录代表每个充值ID对应免费礼包的领取记录,按免费领取索引位运算记录是否已领取 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x66 + 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.FreeRecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FreeRecordCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.FreeRecordList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x66 + self.ActNum = 0 + self.FreeRecordCount = 0 + self.FreeRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.FreeRecordCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.FreeRecordCount) + for i in range(self.FreeRecordCount): + data = CommFunc.WriteDWORD(data, self.FreeRecordList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + FreeRecordCount:%d, + FreeRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.FreeRecordCount, + "..." + ) + return DumpString + + +m_NAtagMCActBuyOnePlayerInfo=tagMCActBuyOnePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOnePlayerInfo.Head.Cmd,m_NAtagMCActBuyOnePlayerInfo.Head.SubCmd))] = m_NAtagMCActBuyOnePlayerInfo + + +#------------------------------------------------------ +# AA 40 集字活动信息 #tagMCActCollectWordsInfo + +class tagMCActCollectWordsNeedItem(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(tagMCActCollectWordsNeedItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 40 集字活动信息 //tagMCActCollectWordsInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActCollectWordsExchangeItem(Structure): + ExchangeNum = 0 #(BYTE ExchangeNum)//兑换编号 + ExchangeCountMax = 0 #(WORD ExchangeCountMax)//最大兑换次数,0不限制 + ItemID = 0 #(DWORD ItemID)//目标物品 + ItemCount = 0 #(WORD ItemCount) + IsBind = 0 #(BYTE IsBind) + NeedItemCount = 0 #(BYTE NeedItemCount) + NeedItemList = list() #(vector<tagMCActCollectWordsNeedItem> NeedItemList)// 所需物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ExchangeNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExchangeCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.NeedItemCount): + temNeedItemList = tagMCActCollectWordsNeedItem() + _pos = temNeedItemList.ReadData(_lpData, _pos) + self.NeedItemList.append(temNeedItemList) + return _pos + + def Clear(self): + self.ExchangeNum = 0 + self.ExchangeCountMax = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + self.NeedItemCount = 0 + self.NeedItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 4 + length += 2 + length += 1 + length += 1 + for i in range(self.NeedItemCount): + length += self.NeedItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ExchangeNum) + data = CommFunc.WriteWORD(data, self.ExchangeCountMax) + data = CommFunc.WriteDWORD(data, self.ItemID) + data = CommFunc.WriteWORD(data, self.ItemCount) + data = CommFunc.WriteBYTE(data, self.IsBind) + data = CommFunc.WriteBYTE(data, self.NeedItemCount) + for i in range(self.NeedItemCount): + data = CommFunc.WriteString(data, self.NeedItemList[i].GetLength(), self.NeedItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + ExchangeNum:%d, + ExchangeCountMax:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d, + NeedItemCount:%d, + NeedItemList:%s + '''\ + %( + self.ExchangeNum, + self.ExchangeCountMax, + self.ItemID, + self.ItemCount, + self.IsBind, + self.NeedItemCount, + "..." + ) + return DumpString + + +class tagMCActCollectWordsInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + LastDayOnlyExchange = 0 #(BYTE LastDayOnlyExchange)//最后一天是否仅兑换 + ExchangeCount = 0 #(BYTE ExchangeCount) + ExchangeItemList = list() #(vector<tagMCActCollectWordsExchangeItem> ExchangeItemList)//兑换组合列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x40 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LastDayOnlyExchange,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ExchangeCount): + temExchangeItemList = tagMCActCollectWordsExchangeItem() + _pos = temExchangeItemList.ReadData(_lpData, _pos) + self.ExchangeItemList.append(temExchangeItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x40 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.LastDayOnlyExchange = 0 + self.ExchangeCount = 0 + self.ExchangeItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.ExchangeCount): + length += self.ExchangeItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.LastDayOnlyExchange) + data = CommFunc.WriteBYTE(data, self.ExchangeCount) + for i in range(self.ExchangeCount): + data = CommFunc.WriteString(data, self.ExchangeItemList[i].GetLength(), self.ExchangeItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + LastDayOnlyExchange:%d, + ExchangeCount:%d, + ExchangeItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.LastDayOnlyExchange, + self.ExchangeCount, + "..." + ) + return DumpString + + +m_NAtagMCActCollectWordsInfo=tagMCActCollectWordsInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsInfo.Head.Cmd,m_NAtagMCActCollectWordsInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsInfo + + +#------------------------------------------------------ +# AA 41 集字活动玩家信息 #tagMCActCollectWordsPlayerInfo + +class tagMCActCollectWordsExchangeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("ExchangeNum", c_ubyte), #兑换编号 + ("ExchangeCount", 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.ExchangeNum = 0 + self.ExchangeCount = 0 + return + + def GetLength(self): + return sizeof(tagMCActCollectWordsExchangeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 41 集字活动玩家信息 //tagMCActCollectWordsPlayerInfo: + ExchangeNum:%d, + ExchangeCount:%d + '''\ + %( + self.ExchangeNum, + self.ExchangeCount + ) + return DumpString + + +class tagMCActCollectWordsPlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号,1 或 2,相互独立的活动,可同时开启 + ExchangeCount = 0 #(BYTE ExchangeCount) + ExchangeInfoList = list() #(vector<tagMCActCollectWordsExchangeInfo> ExchangeInfoList)//兑换数据列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x41 + 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.ExchangeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ExchangeCount): + temExchangeInfoList = tagMCActCollectWordsExchangeInfo() + _pos = temExchangeInfoList.ReadData(_lpData, _pos) + self.ExchangeInfoList.append(temExchangeInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x41 + self.ActNum = 0 + self.ExchangeCount = 0 + self.ExchangeInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.ExchangeCount): + length += self.ExchangeInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.ExchangeCount) + for i in range(self.ExchangeCount): + data = CommFunc.WriteString(data, self.ExchangeInfoList[i].GetLength(), self.ExchangeInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + ExchangeCount:%d, + ExchangeInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.ExchangeCount, + "..." + ) + return DumpString + + +m_NAtagMCActCollectWordsPlayerInfo=tagMCActCollectWordsPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActCollectWordsPlayerInfo.Head.Cmd,m_NAtagMCActCollectWordsPlayerInfo.Head.SubCmd))] = m_NAtagMCActCollectWordsPlayerInfo + + +#------------------------------------------------------ +# AA 55 垃圾收集活动信息 #tagMCActGarbageSortingInfo + +class tagMCActGarbageSortingInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x55 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x55 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + 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.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType + ) + return DumpString + + +m_NAtagMCActGarbageSortingInfo=tagMCActGarbageSortingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingInfo.Head.Cmd,m_NAtagMCActGarbageSortingInfo.Head.SubCmd))] = m_NAtagMCActGarbageSortingInfo + + +#------------------------------------------------------ +# AA 57 垃圾收集活动分类结果 #tagMCActGarbageSortingResult + +class tagMCActGarbageSortingResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("GarbageSortingType", c_ubyte), #垃圾分类类型 + ("IsRight", c_ubyte), #是否正确 + ("AddEnvValue", c_int), #增加环保值 + ("HisEnvValueTotal", c_int), # 当前活动累计获得环保值 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x57 + 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 = 0x57 + self.ActNum = 0 + self.GarbageSortingType = 0 + self.IsRight = 0 + self.AddEnvValue = 0 + self.HisEnvValueTotal = 0 + return + + def GetLength(self): + return sizeof(tagMCActGarbageSortingResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 57 垃圾收集活动分类结果 //tagMCActGarbageSortingResult: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + GarbageSortingType:%d, + IsRight:%d, + AddEnvValue:%d, + HisEnvValueTotal:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.GarbageSortingType, + self.IsRight, + self.AddEnvValue, + self.HisEnvValueTotal + ) + return DumpString + + +m_NAtagMCActGarbageSortingResult=tagMCActGarbageSortingResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageSortingResult.Cmd,m_NAtagMCActGarbageSortingResult.SubCmd))] = m_NAtagMCActGarbageSortingResult + + +#------------------------------------------------------ +# AA 56 垃圾收集活动任务进度信息 #tagMCActGarbageTaskInfo + +class tagMCActGarbageTask(Structure): + _pack_ = 1 + _fields_ = [ + ("GarbageTaskID", c_ubyte), #垃圾任务ID + ("GarbageTaskValue", c_int), #当前进度值,一直累加 + ("GarbageTaskFinishCount", c_int), #当前已完成次数; 前端计算未完成次数的进度值=max(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.GarbageTaskID = 0 + self.GarbageTaskValue = 0 + self.GarbageTaskFinishCount = 0 + return + + def GetLength(self): + return sizeof(tagMCActGarbageTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 56 垃圾收集活动任务进度信息 //tagMCActGarbageTaskInfo: + GarbageTaskID:%d, + GarbageTaskValue:%d, + GarbageTaskFinishCount:%d + '''\ + %( + self.GarbageTaskID, + self.GarbageTaskValue, + self.GarbageTaskFinishCount + ) + return DumpString + + +class tagMCActGarbageTaskInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + HisEnvValueTotal = 0 #(DWORD HisEnvValueTotal)// 当前活动累计获得环保值 + GarbageTaskCount = 0 #(BYTE GarbageTaskCount)//任务数 + GarbageTaskList = list() #(vector<tagMCActGarbageTask> GarbageTaskList)//任务信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x56 + 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.HisEnvValueTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GarbageTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GarbageTaskCount): + temGarbageTaskList = tagMCActGarbageTask() + _pos = temGarbageTaskList.ReadData(_lpData, _pos) + self.GarbageTaskList.append(temGarbageTaskList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x56 + self.ActNum = 0 + self.HisEnvValueTotal = 0 + self.GarbageTaskCount = 0 + self.GarbageTaskList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 1 + for i in range(self.GarbageTaskCount): + length += self.GarbageTaskList[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.WriteDWORD(data, self.HisEnvValueTotal) + data = CommFunc.WriteBYTE(data, self.GarbageTaskCount) + for i in range(self.GarbageTaskCount): + data = CommFunc.WriteString(data, self.GarbageTaskList[i].GetLength(), self.GarbageTaskList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + HisEnvValueTotal:%d, + GarbageTaskCount:%d, + GarbageTaskList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.HisEnvValueTotal, + self.GarbageTaskCount, + "..." + ) + return DumpString + + +m_NAtagMCActGarbageTaskInfo=tagMCActGarbageTaskInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGarbageTaskInfo.Head.Cmd,m_NAtagMCActGarbageTaskInfo.Head.SubCmd))] = m_NAtagMCActGarbageTaskInfo + + +#------------------------------------------------------ +# AA 60 天帝礼包活动信息 #tagMCActGodGiftInfo + +class tagMCActGodGiftItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemNum", c_ubyte), # 物品在本库中的编号 + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ("CanChooseTimes", c_ubyte), #可选择次数,0代表不限次数 + ("ChooseTimes", c_ubyte), #已选次数 + ("IsChoose", 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.ItemNum = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + self.CanChooseTimes = 0 + self.ChooseTimes = 0 + self.IsChoose = 0 + return + + def GetLength(self): + return sizeof(tagMCActGodGiftItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 60 天帝礼包活动信息 //tagMCActGodGiftInfo: + ItemNum:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d, + CanChooseTimes:%d, + ChooseTimes:%d, + IsChoose:%d + '''\ + %( + self.ItemNum, + self.ItemID, + self.ItemCount, + self.IsBind, + self.CanChooseTimes, + self.ChooseTimes, + self.IsChoose + ) + return DumpString + + +class tagMCActGodGiftItemLib(Structure): + ItemLibType = 0 #(BYTE ItemLibType)//物品库类型 + NeedChooseCount = 0 #(BYTE NeedChooseCount)//需要选择个数 + GodGiftItemCount = 0 #(BYTE GodGiftItemCount)//可选择物品个数 + GodGiftItemList = list() #(vector<tagMCActGodGiftItem> GodGiftItemList)//可选物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GodGiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GodGiftItemCount): + temGodGiftItemList = tagMCActGodGiftItem() + _pos = temGodGiftItemList.ReadData(_lpData, _pos) + self.GodGiftItemList.append(temGodGiftItemList) + return _pos + + def Clear(self): + self.ItemLibType = 0 + self.NeedChooseCount = 0 + self.GodGiftItemCount = 0 + self.GodGiftItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.GodGiftItemCount): + length += self.GodGiftItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ItemLibType) + data = CommFunc.WriteBYTE(data, self.NeedChooseCount) + data = CommFunc.WriteBYTE(data, self.GodGiftItemCount) + for i in range(self.GodGiftItemCount): + data = CommFunc.WriteString(data, self.GodGiftItemList[i].GetLength(), self.GodGiftItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + ItemLibType:%d, + NeedChooseCount:%d, + GodGiftItemCount:%d, + GodGiftItemList:%s + '''\ + %( + self.ItemLibType, + self.NeedChooseCount, + self.GodGiftItemCount, + "..." + ) + return DumpString + + +class tagMCActGodGiftInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每日重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + CostMoneyType = 0 #(BYTE CostMoneyType)//消耗货币类型 + CostMoneyValueCount = 0 #(BYTE CostMoneyValueCount) + CostMoneyValueList = list() #(vector<DWORD> CostMoneyValueList)//消耗货币值列表 + PrizeMoneyType = 0 #(BYTE PrizeMoneyType)//奖励货币类型 + PrizeMoneyValueCount = 0 #(BYTE PrizeMoneyValueCount) + PrizeMoneyValueList = list() #(vector<DWORD> PrizeMoneyValueList)//奖励货币值列表 + ResetLimitTimes = 0 #(BYTE ResetLimitTimes)//至少抽几次才可重置奖池 + ResetCountMax = 0 #(BYTE ResetCountMax)//最大可重置奖池次数 + IsAwardPoolOK = 0 #(BYTE IsAwardPoolOK)//奖池是否选择完毕,否的话需要先选择奖池才可抽奖 + ItemLibCount = 0 #(BYTE ItemLibCount)//奖池库个数 + ItemLibList = list() #(vector<tagMCActGodGiftItemLib> ItemLibList)//奖池库信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x60 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.CostMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CostMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CostMoneyValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.CostMoneyValueList.append(value) + self.PrizeMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PrizeMoneyValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PrizeMoneyValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.PrizeMoneyValueList.append(value) + self.ResetLimitTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetCountMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsAwardPoolOK,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemLibCount): + temItemLibList = tagMCActGodGiftItemLib() + _pos = temItemLibList.ReadData(_lpData, _pos) + self.ItemLibList.append(temItemLibList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x60 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.CostMoneyType = 0 + self.CostMoneyValueCount = 0 + self.CostMoneyValueList = list() + self.PrizeMoneyType = 0 + self.PrizeMoneyValueCount = 0 + self.PrizeMoneyValueList = list() + self.ResetLimitTimes = 0 + self.ResetCountMax = 0 + self.IsAwardPoolOK = 0 + self.ItemLibCount = 0 + self.ItemLibList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + length += 1 + length += 4 * self.CostMoneyValueCount + length += 1 + length += 1 + length += 4 * self.PrizeMoneyValueCount + length += 1 + length += 1 + length += 1 + length += 1 + for i in range(self.ItemLibCount): + length += self.ItemLibList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.CostMoneyType) + data = CommFunc.WriteBYTE(data, self.CostMoneyValueCount) + for i in range(self.CostMoneyValueCount): + data = CommFunc.WriteDWORD(data, self.CostMoneyValueList[i]) + data = CommFunc.WriteBYTE(data, self.PrizeMoneyType) + data = CommFunc.WriteBYTE(data, self.PrizeMoneyValueCount) + for i in range(self.PrizeMoneyValueCount): + data = CommFunc.WriteDWORD(data, self.PrizeMoneyValueList[i]) + data = CommFunc.WriteBYTE(data, self.ResetLimitTimes) + data = CommFunc.WriteBYTE(data, self.ResetCountMax) + data = CommFunc.WriteBYTE(data, self.IsAwardPoolOK) + data = CommFunc.WriteBYTE(data, self.ItemLibCount) + for i in range(self.ItemLibCount): + data = CommFunc.WriteString(data, self.ItemLibList[i].GetLength(), self.ItemLibList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + CostMoneyType:%d, + CostMoneyValueCount:%d, + CostMoneyValueList:%s, + PrizeMoneyType:%d, + PrizeMoneyValueCount:%d, + PrizeMoneyValueList:%s, + ResetLimitTimes:%d, + ResetCountMax:%d, + IsAwardPoolOK:%d, + ItemLibCount:%d, + ItemLibList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.CostMoneyType, + self.CostMoneyValueCount, + "...", + self.PrizeMoneyType, + self.PrizeMoneyValueCount, + "...", + self.ResetLimitTimes, + self.ResetCountMax, + self.IsAwardPoolOK, + self.ItemLibCount, + "..." + ) + return DumpString + + +m_NAtagMCActGodGiftInfo=tagMCActGodGiftInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftInfo.Head.Cmd,m_NAtagMCActGodGiftInfo.Head.SubCmd))] = m_NAtagMCActGodGiftInfo + + +#------------------------------------------------------ +# AA 61 天帝礼包活动玩家信息 #tagMCActGodGiftPlayerInfo + +class tagMCActGodGiftAwardItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemLibType", c_ubyte), #物品库类型 + ("ItemNum", 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.ItemLibType = 0 + self.ItemNum = 0 + return + + def GetLength(self): + return sizeof(tagMCActGodGiftAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 61 天帝礼包活动玩家信息 //tagMCActGodGiftPlayerInfo: + ItemLibType:%d, + ItemNum:%d + '''\ + %( + self.ItemLibType, + self.ItemNum + ) + return DumpString + + +class tagMCActGodGiftPlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + ResetCount = 0 #(BYTE ResetCount)// 本次活动已重置次数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 本次奖池已抽中奖品个数,也代表本次奖池已抽奖次数 + AwardItemList = list() #(vector<tagMCActGodGiftAwardItem> AwardItemList)// 本次奖池已抽中物品列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x61 + 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.ResetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActGodGiftAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x61 + self.ActNum = 0 + self.ResetCount = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.ResetCount) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + ResetCount:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.ResetCount, + self.AwardItemCount, + "..." + ) + return DumpString + + +m_NAtagMCActGodGiftPlayerInfo=tagMCActGodGiftPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGodGiftPlayerInfo.Head.Cmd,m_NAtagMCActGodGiftPlayerInfo.Head.SubCmd))] = m_NAtagMCActGodGiftPlayerInfo + + +#------------------------------------------------------ +# AA 31 成长必买活动信息 #tagMCActGrowupBuyInfo + +class tagMCActGrowupBuyCTGItem(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(tagMCActGrowupBuyCTGItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 31 成长必买活动信息 //tagMCActGrowupBuyInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActGrowupBuyCTGInfo(Structure): + CTGID = 0 #(WORD CTGID)// 充值表ID + GainItemCount = 0 #(BYTE GainItemCount)// 获得物品数 + GainItemList = list() #(vector<tagMCActGrowupBuyCTGItem> GainItemList)// 获得物品列表,替换充值表中的 GainItemList 字段信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.CTGID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GainItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GainItemCount): + temGainItemList = tagMCActGrowupBuyCTGItem() + _pos = temGainItemList.ReadData(_lpData, _pos) + self.GainItemList.append(temGainItemList) + return _pos + + def Clear(self): + self.CTGID = 0 + self.GainItemCount = 0 + self.GainItemList = list() + return + + def GetLength(self): + length = 0 + length += 2 + length += 1 + for i in range(self.GainItemCount): + length += self.GainItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteWORD(data, self.CTGID) + data = CommFunc.WriteBYTE(data, self.GainItemCount) + for i in range(self.GainItemCount): + data = CommFunc.WriteString(data, self.GainItemList[i].GetLength(), self.GainItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + CTGID:%d, + GainItemCount:%d, + GainItemList:%s + '''\ + %( + self.CTGID, + self.GainItemCount, + "..." + ) + return DumpString + + +class tagMCActGrowupBuyGroup(Structure): + BuyCount = 0 #(BYTE BuyCount)// 循环购买礼包数 + BuyCTGIDList = list() #(vector<tagMCActGrowupBuyCTGInfo> BuyCTGIDList)// 循环购买礼包充值ID信息列表 + PlayerBuyIndex = 0 #(BYTE PlayerBuyIndex)// 玩家当前可购买的礼包充值ID在列表中索引 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BuyCount): + temBuyCTGIDList = tagMCActGrowupBuyCTGInfo() + _pos = temBuyCTGIDList.ReadData(_lpData, _pos) + self.BuyCTGIDList.append(temBuyCTGIDList) + self.PlayerBuyIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.BuyCount = 0 + self.BuyCTGIDList = list() + self.PlayerBuyIndex = 0 + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.BuyCount): + length += self.BuyCTGIDList[i].GetLength() + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.BuyCount) + for i in range(self.BuyCount): + data = CommFunc.WriteString(data, self.BuyCTGIDList[i].GetLength(), self.BuyCTGIDList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.PlayerBuyIndex) + return data + + def OutputString(self): + DumpString = ''' + BuyCount:%d, + BuyCTGIDList:%s, + PlayerBuyIndex:%d + '''\ + %( + self.BuyCount, + "...", + self.PlayerBuyIndex + ) + return DumpString + + +class tagMCActGrowupBuyInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + GroupCount = 0 #(BYTE GroupCount)// 循环购买礼包组数 + GroupList = list() #(vector<tagMCActGrowupBuyGroup> GroupList)//循环购买礼包组列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x31 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GroupCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GroupCount): + temGroupList = tagMCActGrowupBuyGroup() + _pos = temGroupList.ReadData(_lpData, _pos) + self.GroupList.append(temGroupList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x31 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.GroupCount = 0 + self.GroupList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.GroupCount): + length += self.GroupList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.GroupCount) + for i in range(self.GroupCount): + data = CommFunc.WriteString(data, self.GroupList[i].GetLength(), self.GroupList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + GroupCount:%d, + GroupList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.GroupCount, + "..." + ) + return DumpString + + +m_NAtagMCActGrowupBuyInfo=tagMCActGrowupBuyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActGrowupBuyInfo.Head.Cmd,m_NAtagMCActGrowupBuyInfo.Head.SubCmd))] = m_NAtagMCActGrowupBuyInfo + + +#------------------------------------------------------ +# AA 54 骑宠盛宴活动信息 #tagMCActHorsePetFeastInfo + +class tagMCActHorsePetFeastTime(Structure): + StartTime = "" #(char StartTime[5])// 开始时间 H:M + EndtTime = "" #(char EndtTime[5])// 结束时间 H:M + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + return _pos + + def Clear(self): + self.StartTime = "" + self.EndtTime = "" + return + + def GetLength(self): + length = 0 + length += 5 + length += 5 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 5, self.StartTime) + data = CommFunc.WriteString(data, 5, self.EndtTime) + return data + + def OutputString(self): + DumpString = ''' + StartTime:%s, + EndtTime:%s + '''\ + %( + self.StartTime, + self.EndtTime + ) + return DumpString + + +class tagMCActHorsePetFeastInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + TimeCount = 0 #(BYTE TimeCount) + ActTimeList = list() #(vector<tagMCActHorsePetFeastTime> ActTimeList)// 活动时间 H:M 列表 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x54 + 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.TimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TimeCount): + temActTimeList = tagMCActHorsePetFeastTime() + _pos = temActTimeList.ReadData(_lpData, _pos) + self.ActTimeList.append(temActTimeList) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x54 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.TimeCount = 0 + self.ActTimeList = list() + self.LimitLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + for i in range(self.TimeCount): + length += self.ActTimeList[i].GetLength() + length += 2 + + 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.TimeCount) + for i in range(self.TimeCount): + data = CommFunc.WriteString(data, self.ActTimeList[i].GetLength(), self.ActTimeList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.LimitLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + TimeCount:%d, + ActTimeList:%s, + LimitLV:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.TimeCount, + "...", + self.LimitLV + ) + return DumpString + + +m_NAtagMCActHorsePetFeastInfo=tagMCActHorsePetFeastInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActHorsePetFeastInfo.Head.Cmd,m_NAtagMCActHorsePetFeastInfo.Head.SubCmd))] = m_NAtagMCActHorsePetFeastInfo #------------------------------------------------------ @@ -22497,6 +33210,1331 @@ #------------------------------------------------------ +# AA 48 多日连充活动信息 #tagMCActManyDayRechargeInfo + +class tagMCActManyDayRechargeItem(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(tagMCActManyDayRechargeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 48 多日连充活动信息 //tagMCActManyDayRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActManyDayRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedRecharge = 0 #(DWORD NeedRecharge)// 单天所需充值额度 + NeedDays = 0 #(BYTE NeedDays)// 所需充值天数 + AwardItemCount = 0 #(BYTE AwardItemCount) + AwardItemList = list() #(vector<tagMCActManyDayRechargeItem> 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.NeedRecharge,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NeedDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActManyDayRechargeItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedRecharge = 0 + self.NeedDays = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.NeedRecharge) + data = CommFunc.WriteBYTE(data, self.NeedDays) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedRecharge:%d, + NeedDays:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedRecharge, + self.NeedDays, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCActManyDayRechargeInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + AwardCount = 0 #(BYTE AwardCount) + AwardList = list() #(vector<tagMCActManyDayRechargeAward> AwardList)// 奖励信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x48 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardList = tagMCActManyDayRechargeAward() + _pos = temAwardList.ReadData(_lpData, _pos) + self.AwardList.append(temAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x48 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.AwardCount = 0 + self.AwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.AwardCount): + length += self.AwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + AwardCount:%d, + AwardList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCActManyDayRechargeInfo=tagMCActManyDayRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargeInfo.Head.Cmd,m_NAtagMCActManyDayRechargeInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargeInfo + + +#------------------------------------------------------ +# AA 49 多日连充活动玩家信息 #tagMCActManyDayRechargePlayerInfo + +class tagMCActManyDayRechargePlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + Days = 0 #(BYTE Days) + DayRechargeValues = list() #(vector<DWORD> DayRechargeValues)//活动每天充值列表 + RecordCount = 0 #(BYTE RecordCount) + AwardRecord = list() #(vector<DWORD> AwardRecord)//奖励领奖记录,按奖励索引二进制位存储是否已领取 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x49 + 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.Days,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Days): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.DayRechargeValues.append(value) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.AwardRecord.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x49 + self.ActNum = 0 + self.Days = 0 + self.DayRechargeValues = list() + self.RecordCount = 0 + self.AwardRecord = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.Days + length += 1 + length += 4 * self.RecordCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.Days) + for i in range(self.Days): + data = CommFunc.WriteDWORD(data, self.DayRechargeValues[i]) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteDWORD(data, self.AwardRecord[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + Days:%d, + DayRechargeValues:%s, + RecordCount:%d, + AwardRecord:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.Days, + "...", + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagMCActManyDayRechargePlayerInfo=tagMCActManyDayRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActManyDayRechargePlayerInfo.Head.Cmd,m_NAtagMCActManyDayRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActManyDayRechargePlayerInfo + + +#------------------------------------------------------ +# AA 62 充值抵扣活动信息 #tagMCActRecharegeCouponInfo + +class tagMCActRecharegeCouponItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ("IsMainItem", 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 + self.IsMainItem = 0 + return + + def GetLength(self): + return sizeof(tagMCActRecharegeCouponItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 62 充值抵扣活动信息 //tagMCActRecharegeCouponInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d, + IsMainItem:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind, + self.IsMainItem + ) + return DumpString + + +class tagMCActRecharegeCouponGiftbag(Structure): + GiftID = 0 #(DWORD GiftID)//商城表的物品ID + BuyCountLimit = 0 #(BYTE BuyCountLimit)//限购数 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyNumber = 0 #(DWORD MoneyNumber)//消耗货币数量 + MoneyOriginal = 0 #(DWORD MoneyOriginal)//原价 + GiftItemCount = 0 #(BYTE GiftItemCount)// 礼包物品数 + ItemInfo = list() #(vector<tagMCActRecharegeCouponItem> ItemInfo)// 物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyNumber,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftItemCount): + temItemInfo = tagMCActRecharegeCouponItem() + _pos = temItemInfo.ReadData(_lpData, _pos) + self.ItemInfo.append(temItemInfo) + return _pos + + def Clear(self): + self.GiftID = 0 + self.BuyCountLimit = 0 + self.MoneyType = 0 + self.MoneyNumber = 0 + self.MoneyOriginal = 0 + self.GiftItemCount = 0 + self.ItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + length += 4 + length += 4 + length += 1 + for i in range(self.GiftItemCount): + length += self.ItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GiftID) + data = CommFunc.WriteBYTE(data, self.BuyCountLimit) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteDWORD(data, self.MoneyNumber) + data = CommFunc.WriteDWORD(data, self.MoneyOriginal) + data = CommFunc.WriteBYTE(data, self.GiftItemCount) + for i in range(self.GiftItemCount): + data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GiftID:%d, + BuyCountLimit:%d, + MoneyType:%d, + MoneyNumber:%d, + MoneyOriginal:%d, + GiftItemCount:%d, + ItemInfo:%s + '''\ + %( + self.GiftID, + self.BuyCountLimit, + self.MoneyType, + self.MoneyNumber, + self.MoneyOriginal, + self.GiftItemCount, + "..." + ) + return DumpString + + +class tagMCActRecharegeCouponInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + CouponMoneyType = 0 #(BYTE CouponMoneyType)//抵扣券对应货币类型 + GiftbagCount = 0 #(BYTE GiftbagCount)// 可购买礼包个数 + GiftbagList = list() #(vector<tagMCActRecharegeCouponGiftbag> GiftbagList)// 可购买礼包顺序列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x62 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.CouponMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagList = tagMCActRecharegeCouponGiftbag() + _pos = temGiftbagList.ReadData(_lpData, _pos) + self.GiftbagList.append(temGiftbagList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x62 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.CouponMoneyType = 0 + self.GiftbagCount = 0 + self.GiftbagList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.CouponMoneyType) + data = CommFunc.WriteBYTE(data, self.GiftbagCount) + for i in range(self.GiftbagCount): + data = CommFunc.WriteString(data, self.GiftbagList[i].GetLength(), self.GiftbagList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + CouponMoneyType:%d, + GiftbagCount:%d, + GiftbagList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.CouponMoneyType, + self.GiftbagCount, + "..." + ) + return DumpString + + +m_NAtagMCActRecharegeCouponInfo=tagMCActRecharegeCouponInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponInfo.Head.Cmd,m_NAtagMCActRecharegeCouponInfo.Head.SubCmd))] = m_NAtagMCActRecharegeCouponInfo + + +#------------------------------------------------------ +# AA 63 充值抵扣活动玩家信息 #tagMCActRecharegeCouponPlayerInfo + +class tagMCActRecharegeCouponPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("CouponMoney", c_int), # 当前可用抵扣点 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x63 + 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 = 0x63 + self.ActNum = 0 + self.CouponMoney = 0 + return + + def GetLength(self): + return sizeof(tagMCActRecharegeCouponPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 63 充值抵扣活动玩家信息 //tagMCActRecharegeCouponPlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + CouponMoney:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.CouponMoney + ) + return DumpString + + +m_NAtagMCActRecharegeCouponPlayerInfo=tagMCActRecharegeCouponPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponPlayerInfo.Cmd,m_NAtagMCActRecharegeCouponPlayerInfo.SubCmd))] = m_NAtagMCActRecharegeCouponPlayerInfo + + +#------------------------------------------------------ +# AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo + +class tagMCActRechargePrize(Structure): + _pack_ = 1 + _fields_ = [ + ("CTGID", c_ushort), # 对应充值表充值ID + ("GoldPrize", c_int), #返利仙玉数 + ("PrizeCountLimit", 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.CTGID = 0 + self.GoldPrize = 0 + self.PrizeCountLimit = 0 + return + + def GetLength(self): + return sizeof(tagMCActRechargePrize) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 27 充值返利活动信息 //tagMCActRechargePrizeInfo: + CTGID:%d, + GoldPrize:%d, + PrizeCountLimit:%d + '''\ + %( + self.CTGID, + self.GoldPrize, + self.PrizeCountLimit + ) + return DumpString + + +class tagMCActRechargePrizeDay(Structure): + Prizes = 0 #(BYTE Prizes)// 返利档数 + PrizeInfo = list() #(vector<tagMCActRechargePrize> PrizeInfo)// 返利档信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Prizes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Prizes): + temPrizeInfo = tagMCActRechargePrize() + _pos = temPrizeInfo.ReadData(_lpData, _pos) + self.PrizeInfo.append(temPrizeInfo) + return _pos + + def Clear(self): + self.Prizes = 0 + self.PrizeInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.Prizes): + length += self.PrizeInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Prizes) + for i in range(self.Prizes): + data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Prizes:%d, + PrizeInfo:%s + '''\ + %( + self.Prizes, + "..." + ) + return DumpString + + +class tagMCActRechargePrizeInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + PrizeDays = 0 #(BYTE PrizeDays) + PrizeDayInfo = list() #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x27 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PrizeDays): + temPrizeDayInfo = tagMCActRechargePrizeDay() + _pos = temPrizeDayInfo.ReadData(_lpData, _pos) + self.PrizeDayInfo.append(temPrizeDayInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x27 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.IsDayReset = 0 + self.PrizeDays = 0 + self.PrizeDayInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.PrizeDays): + length += self.PrizeDayInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.PrizeDays) + for i in range(self.PrizeDays): + data = CommFunc.WriteString(data, self.PrizeDayInfo[i].GetLength(), self.PrizeDayInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + IsDayReset:%d, + PrizeDays:%d, + PrizeDayInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.IsDayReset, + self.PrizeDays, + "..." + ) + return DumpString + + +m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo + + +#------------------------------------------------------ +# AA 29 累计充值返利仙玉活动信息 #tagMCActRechargeRebateGoldInfo + +class tagMCActRechargeRebate(Structure): + _pack_ = 1 + _fields_ = [ + ("RMBMin", c_int), # 充值RMB最小值 + ("RMBMax", c_int), # 充值RMB最大值,0代表无上限 + ("RebateRate", 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.RMBMin = 0 + self.RMBMax = 0 + self.RebateRate = 0 + return + + def GetLength(self): + return sizeof(tagMCActRechargeRebate) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 29 累计充值返利仙玉活动信息 //tagMCActRechargeRebateGoldInfo: + RMBMin:%d, + RMBMax:%d, + RebateRate:%d + '''\ + %( + self.RMBMin, + self.RMBMax, + self.RebateRate + ) + return DumpString + + +class tagMCActRechargeRebateDay(Structure): + Rebates = 0 #(BYTE Rebates)// 返利档数 + RebateInfo = list() #(vector<tagMCActRechargeRebate> RebateInfo)// 返利档信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Rebates,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Rebates): + temRebateInfo = tagMCActRechargeRebate() + _pos = temRebateInfo.ReadData(_lpData, _pos) + self.RebateInfo.append(temRebateInfo) + return _pos + + def Clear(self): + self.Rebates = 0 + self.RebateInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.Rebates): + length += self.RebateInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Rebates) + for i in range(self.Rebates): + data = CommFunc.WriteString(data, self.RebateInfo[i].GetLength(), self.RebateInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Rebates:%d, + RebateInfo:%s + '''\ + %( + self.Rebates, + "..." + ) + return DumpString + + +class tagMCActRechargeRebateGoldInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + RebateDays = 0 #(BYTE RebateDays) + RebateDayInfo = list() #(vector<tagMCActRechargeRebateDay> RebateDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x29 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RebateDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RebateDays): + temRebateDayInfo = tagMCActRechargeRebateDay() + _pos = temRebateDayInfo.ReadData(_lpData, _pos) + self.RebateDayInfo.append(temRebateDayInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x29 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.IsDayReset = 0 + self.RebateDays = 0 + self.RebateDayInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.RebateDays): + length += self.RebateDayInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.RebateDays) + for i in range(self.RebateDays): + data = CommFunc.WriteString(data, self.RebateDayInfo[i].GetLength(), self.RebateDayInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + IsDayReset:%d, + RebateDays:%d, + RebateDayInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.IsDayReset, + self.RebateDays, + "..." + ) + return DumpString + + +m_NAtagMCActRechargeRebateGoldInfo=tagMCActRechargeRebateGoldInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargeRebateGoldInfo.Head.Cmd,m_NAtagMCActRechargeRebateGoldInfo.Head.SubCmd))] = m_NAtagMCActRechargeRebateGoldInfo + + +#------------------------------------------------------ +# AA 50 单笔累充活动信息 #tagMCActSingleRechargeInfo + +class tagMCActSingleRechargeAwardItem(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(tagMCActSingleRechargeAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 50 单笔累充活动信息 //tagMCActSingleRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCActSingleRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 + AwardCountMax = 0 #(WORD AwardCountMax)// 最大领奖次数 + SingleRechargeValue = 0 #(DWORD SingleRechargeValue)// 单笔所需充值额度 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItem = list() #(vector<tagMCActSingleRechargeAwardItem> AwardItem)// 奖励物品信息 + 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.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.SingleRechargeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItem = tagMCActSingleRechargeAwardItem() + _pos = temAwardItem.ReadData(_lpData, _pos) + self.AwardItem.append(temAwardItem) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.AwardCountMax = 0 + self.SingleRechargeValue = 0 + self.AwardItemCount = 0 + self.AwardItem = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 4 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItem[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteWORD(data, self.AwardCountMax) + data = CommFunc.WriteDWORD(data, self.SingleRechargeValue) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + AwardCountMax:%d, + SingleRechargeValue:%d, + AwardItemCount:%d, + AwardItem:%s + '''\ + %( + self.AwardIndex, + self.AwardCountMax, + self.SingleRechargeValue, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCActSingleRechargeInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + AwardRuleType = 0 #(BYTE AwardRuleType)// 领奖规则类型 0-向下兼容;1-匹配最高档;2-精确匹配对应档次 + AwardCount = 0 #(BYTE AwardCount)// 奖励档数 + AwardInfo = list() #(vector<tagMCActSingleRechargeAward> AwardInfo)// 奖励档信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x50 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardRuleType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardInfo = tagMCActSingleRechargeAward() + _pos = temAwardInfo.ReadData(_lpData, _pos) + self.AwardInfo.append(temAwardInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x50 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.AwardRuleType = 0 + self.AwardCount = 0 + self.AwardInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.AwardCount): + length += self.AwardInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.AwardRuleType) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardInfo[i].GetLength(), self.AwardInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + AwardRuleType:%d, + AwardCount:%d, + AwardInfo:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.AwardRuleType, + self.AwardCount, + "..." + ) + return DumpString + + +m_NAtagMCActSingleRechargeInfo=tagMCActSingleRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargeInfo.Head.Cmd,m_NAtagMCActSingleRechargeInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargeInfo + + +#------------------------------------------------------ +# AA 51 单笔累充活动玩家信息 #tagMCActSingleRechargePlayerInfo + +class tagMCActSingleRechargePlayerAward(Structure): + _pack_ = 1 + _fields_ = [ + ("AwardIndex", c_ubyte), # 奖励索引 + ("CanGetCount", c_ushort), # 可领奖次数 + ("GetCount", 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.AwardIndex = 0 + self.CanGetCount = 0 + self.GetCount = 0 + return + + def GetLength(self): + return sizeof(tagMCActSingleRechargePlayerAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 51 单笔累充活动玩家信息 //tagMCActSingleRechargePlayerInfo: + AwardIndex:%d, + CanGetCount:%d, + GetCount:%d + '''\ + %( + self.AwardIndex, + self.CanGetCount, + self.GetCount + ) + return DumpString + + +class tagMCActSingleRechargePlayerInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 + RecordCount = 0 #(BYTE RecordCount) + AwardRecordList = list() #(vector<tagMCActSingleRechargePlayerAward> AwardRecordList)// 领奖次数记录列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x51 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temAwardRecordList = tagMCActSingleRechargePlayerAward() + _pos = temAwardRecordList.ReadData(_lpData, _pos) + self.AwardRecordList.append(temAwardRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x51 + self.ActNum = 0 + self.RecordCount = 0 + self.AwardRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.RecordCount): + length += self.AwardRecordList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.AwardRecordList[i].GetLength(), self.AwardRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + RecordCount:%d, + AwardRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagMCActSingleRechargePlayerInfo=tagMCActSingleRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Head.Cmd,m_NAtagMCActSingleRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo + + +#------------------------------------------------------ # AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo class tagMCTotalRechargeAwardItem(Structure): @@ -22658,6 +34696,7 @@ class tagMCActTotalRechargeInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 @@ -22675,6 +34714,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -22691,6 +34731,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x1D + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.IsDayReset = 0 @@ -22702,6 +34743,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 1 @@ -22715,6 +34757,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteBYTE(data, self.IsDayReset) @@ -22727,6 +34770,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, IsDayReset:%d, @@ -22736,6 +34780,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.IsDayReset, @@ -22748,6 +34793,322 @@ m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo + + +#------------------------------------------------------ +# AA 52 转盘活动信息 #tagMCActTurntableInfo + +class tagMCActTurntableItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemNum", c_ubyte), #物品编号 1~n;注意转盘已确定物品编号 与 极品终极物品待选择库编号可能相同,但并不代表同一物品 + ("ItemLibType", c_ubyte), #物品库类型;1-常规,2-极品,3-终极 + ("ItemID", c_int), + ("ItemCount", c_ushort), + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemNum = 0 + self.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCActTurntableItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 52 转盘活动信息 //tagMCActTurntableInfo: + ItemNum:%d, + ItemLibType:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemNum, + self.ItemLibType, + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCActTurntableInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)// 是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + CTGPrizeCount = 0 #(BYTE CTGPrizeCount) + CTGPrizeList = list() #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...] + UseMoneyType = 0 #(BYTE UseMoneyType)// 累计消费货币类型 + UseMoneyPrizeCount = 0 #(BYTE UseMoneyPrizeCount) + UseMoneyPrizeList = list() #(vector<DWORD> UseMoneyPrizeList)// 累计消费货币奖励次数列表 [奖励第1次所需累计消费货币, 第2次, ...] + TurnItemCount = 0 #(BYTE TurnItemCount) + TurnItemList = list() #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘; + GoodItemCount = 0 #(BYTE GoodItemCount) + GoodItemList = list() #(vector<tagMCActTurntableItem> GoodItemList)// 极品物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品; + GoodItemCanChooseCount = 0 #(BYTE GoodItemCanChooseCount)// 极品物品可选择个数 + SuperItemCount = 0 #(BYTE SuperItemCount) + SuperItemList = list() #(vector<tagMCActTurntableItem> SuperItemList)// 终极物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品; + SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 终极物品可选择个数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x52 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.CTGPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CTGPrizeCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.CTGPrizeList.append(value) + self.UseMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UseMoneyPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.UseMoneyPrizeCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.UseMoneyPrizeList.append(value) + self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TurnItemCount): + temTurnItemList = tagMCActTurntableItem() + _pos = temTurnItemList.ReadData(_lpData, _pos) + self.TurnItemList.append(temTurnItemList) + self.GoodItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GoodItemCount): + temGoodItemList = tagMCActTurntableItem() + _pos = temGoodItemList.ReadData(_lpData, _pos) + self.GoodItemList.append(temGoodItemList) + self.GoodItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + temSuperItemList = tagMCActTurntableItem() + _pos = temSuperItemList.ReadData(_lpData, _pos) + self.SuperItemList.append(temSuperItemList) + self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x52 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.CTGPrizeCount = 0 + self.CTGPrizeList = list() + self.UseMoneyType = 0 + self.UseMoneyPrizeCount = 0 + self.UseMoneyPrizeList = list() + self.TurnItemCount = 0 + self.TurnItemList = list() + self.GoodItemCount = 0 + self.GoodItemList = list() + self.GoodItemCanChooseCount = 0 + self.SuperItemCount = 0 + self.SuperItemList = list() + self.SuperItemCanChooseCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + length += 4 * self.CTGPrizeCount + length += 1 + length += 1 + length += 4 * self.UseMoneyPrizeCount + length += 1 + for i in range(self.TurnItemCount): + length += self.TurnItemList[i].GetLength() + length += 1 + for i in range(self.GoodItemCount): + length += self.GoodItemList[i].GetLength() + length += 1 + length += 1 + for i in range(self.SuperItemCount): + length += self.SuperItemList[i].GetLength() + 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.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.CTGPrizeCount) + for i in range(self.CTGPrizeCount): + data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i]) + data = CommFunc.WriteBYTE(data, self.UseMoneyType) + data = CommFunc.WriteBYTE(data, self.UseMoneyPrizeCount) + for i in range(self.UseMoneyPrizeCount): + data = CommFunc.WriteDWORD(data, self.UseMoneyPrizeList[i]) + data = CommFunc.WriteBYTE(data, self.TurnItemCount) + for i in range(self.TurnItemCount): + data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.GoodItemCount) + for i in range(self.GoodItemCount): + data = CommFunc.WriteString(data, self.GoodItemList[i].GetLength(), self.GoodItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.GoodItemCanChooseCount) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + CTGPrizeCount:%d, + CTGPrizeList:%s, + UseMoneyType:%d, + UseMoneyPrizeCount:%d, + UseMoneyPrizeList:%s, + TurnItemCount:%d, + TurnItemList:%s, + GoodItemCount:%d, + GoodItemList:%s, + GoodItemCanChooseCount:%d, + SuperItemCount:%d, + SuperItemList:%s, + SuperItemCanChooseCount:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.CTGPrizeCount, + "...", + self.UseMoneyType, + self.UseMoneyPrizeCount, + "...", + self.TurnItemCount, + "...", + self.GoodItemCount, + "...", + self.GoodItemCanChooseCount, + self.SuperItemCount, + "...", + self.SuperItemCanChooseCount + ) + return DumpString + + +m_NAtagMCActTurntableInfo=tagMCActTurntableInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntableInfo.Head.Cmd,m_NAtagMCActTurntableInfo.Head.SubCmd))] = m_NAtagMCActTurntableInfo + + +#------------------------------------------------------ +# AA 53 转盘活动玩家信息 #tagMCActTurntablePlayerInfo + +class tagMCActTurntablePlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("CanUseCount", c_ubyte), #可转盘次数 + ("CTGTotal", c_int), #累计充值额度 + ("UseMoneyTotal", c_int), #累计消费货币额度 + ("TurnItemState", c_int), #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中 + ("GetItemNum", c_ubyte), #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x53 + 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 = 0x53 + self.ActNum = 0 + self.CanUseCount = 0 + self.CTGTotal = 0 + self.UseMoneyTotal = 0 + self.TurnItemState = 0 + self.GetItemNum = 0 + return + + def GetLength(self): + return sizeof(tagMCActTurntablePlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 53 转盘活动玩家信息 //tagMCActTurntablePlayerInfo: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + CanUseCount:%d, + CTGTotal:%d, + UseMoneyTotal:%d, + TurnItemState:%d, + GetItemNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.CanUseCount, + self.CTGTotal, + self.UseMoneyTotal, + self.TurnItemState, + self.GetItemNum + ) + return DumpString + + +m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo #------------------------------------------------------ @@ -23198,6 +35559,288 @@ #------------------------------------------------------ +# AA 59 仙匣秘境抽奖结果 #tagMCActXianXiaMJAwardItemResult + +class tagMCActXianXiaMJAwardItemResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x59 + 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 = 0x59 + self.ActNum = 0 + self.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItemResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 59 仙匣秘境抽奖结果 //tagMCActXianXiaMJAwardItemResult: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow + ) + return DumpString + + +m_NAtagMCActXianXiaMJAwardItemResult=tagMCActXianXiaMJAwardItemResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJAwardItemResult.Cmd,m_NAtagMCActXianXiaMJAwardItemResult.SubCmd))] = m_NAtagMCActXianXiaMJAwardItemResult + + +#------------------------------------------------------ +# AA 58 仙匣秘境活动信息 #tagMCActXianXiaMJInfo + +class tagMCActXianXiaMJAwardItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemLibType", c_ubyte), #物品库类型;9-固定为大奖库,非9-策划自定义库 + ("ItemID", c_int), # 注意: 不同库物品ID可能相同,但个数不同 + ("ItemCount", c_ushort), + ("PosNum", c_ubyte), # 被抽中时的位置编号,1~99,前端自定义展示位置编号,0代表未被抽中; + ("TotalTimesNow", c_ubyte), #当前已产出次数,不限制次数时不记录,即同样为0 + ("TotalTimesMax", c_ubyte), #最大可产出次数,0不限 + ("LayerLimit", c_ubyte), #大于等于X层后可产出,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.ItemLibType = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.PosNum = 0 + self.TotalTimesNow = 0 + self.TotalTimesMax = 0 + self.LayerLimit = 0 + return + + def GetLength(self): + return sizeof(tagMCActXianXiaMJAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 58 仙匣秘境活动信息 //tagMCActXianXiaMJInfo: + ItemLibType:%d, + ItemID:%d, + ItemCount:%d, + PosNum:%d, + TotalTimesNow:%d, + TotalTimesMax:%d, + LayerLimit:%d + '''\ + %( + self.ItemLibType, + self.ItemID, + self.ItemCount, + self.PosNum, + self.TotalTimesNow, + self.TotalTimesMax, + self.LayerLimit + ) + return DumpString + + +class tagMCActXianXiaMJInfo(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyValue = 0 #(WORD MoneyValue)//消耗货币值 + LayerNum = 0 #(BYTE LayerNum)//当前奖池第几层 + AwardItemCount = 0 #(BYTE AwardItemCount) + AwardItemList = list() #(vector<tagMCActXianXiaMJAwardItem> AwardItemList)// 奖池物品列表,已生成的,包含已选择的大奖物品 + SuperItemCount = 0 #(BYTE SuperItemCount) + SuperItemList = list() #(vector<tagMCActXianXiaMJAwardItem> SuperItemList)// 大奖物品待选择库,由玩家从库中选择放入奖池的物品; + SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 大奖物品可选择个数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LayerNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCActXianXiaMJAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + temSuperItemList = tagMCActXianXiaMJAwardItem() + _pos = temSuperItemList.ReadData(_lpData, _pos) + self.SuperItemList.append(temSuperItemList) + self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x58 + self.ActNum = 0 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + self.LayerNum = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + self.SuperItemCount = 0 + self.SuperItemList = list() + self.SuperItemCanChooseCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + length += 1 + for i in range(self.SuperItemCount): + length += self.SuperItemList[i].GetLength() + 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.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteWORD(data, self.MoneyValue) + data = CommFunc.WriteBYTE(data, self.LayerNum) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + MoneyType:%d, + MoneyValue:%d, + LayerNum:%d, + AwardItemCount:%d, + AwardItemList:%s, + SuperItemCount:%d, + SuperItemList:%s, + SuperItemCanChooseCount:%d + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.MoneyType, + self.MoneyValue, + self.LayerNum, + self.AwardItemCount, + "...", + self.SuperItemCount, + "...", + self.SuperItemCanChooseCount + ) + return DumpString + + +m_NAtagMCActXianXiaMJInfo=tagMCActXianXiaMJInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActXianXiaMJInfo.Head.Cmd,m_NAtagMCActXianXiaMJInfo.Head.SubCmd))] = m_NAtagMCActXianXiaMJInfo + + +#------------------------------------------------------ # AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo class tagMCAllPeoplePartyCount(Structure): @@ -23320,13 +35963,434 @@ #------------------------------------------------------ +# AA 32 跨服充值排行活动信息 #tagMCCACTGBillboardInfo + +class tagMCCACTGBillboardAwardItem(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(tagMCCACTGBillboardAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 32 跨服充值排行活动信息 //tagMCCACTGBillboardInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCACTGBillboardDabiao(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedRMB = 0 #(DWORD NeedRMB)// 所需充值RMB + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCACTGBillboardAwardItem> 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.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCCACTGBillboardAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedRMB = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteDWORD(data, self.NeedRMB) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedRMB:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedRMB, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCCACTGBillboardOrder(Structure): + OrderA = 0 #(BYTE OrderA)// 名次A + OrderB = 0 #(BYTE OrderB)// 至名次B + NeedRMB = 0 #(DWORD NeedRMB)// 所需充值RMB,未达标的该名次空,排名后面的玩家向下顺延 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItemList = list() #(vector<tagMCCACTGBillboardAwardItem> AwardItemList)// 奖励物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.OrderA,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderB,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCCACTGBillboardAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.OrderA = 0 + self.OrderB = 0 + self.NeedRMB = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 4 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.OrderA) + data = CommFunc.WriteBYTE(data, self.OrderB) + data = CommFunc.WriteDWORD(data, self.NeedRMB) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + OrderA:%d, + OrderB:%d, + NeedRMB:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.OrderA, + self.OrderB, + self.NeedRMB, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCCACTGBillboardTempInfo(Structure): + TemplateID = 0 #(BYTE TemplateID)// 活动模板ID + DabiaoAwardCount = 0 #(BYTE DabiaoAwardCount)// 达标奖励档数 + DabiaoAwardInfo = list() #(vector<tagMCCACTGBillboardDabiao> DabiaoAwardInfo)// 达标奖励信息 + OrderAwardCount = 0 #(BYTE OrderAwardCount)// 排行奖励档数 + OrderAwardInfo = list() #(vector<tagMCCACTGBillboardOrder> OrderAwardInfo)// 排行奖励信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.TemplateID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.DabiaoAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DabiaoAwardCount): + temDabiaoAwardInfo = tagMCCACTGBillboardDabiao() + _pos = temDabiaoAwardInfo.ReadData(_lpData, _pos) + self.DabiaoAwardInfo.append(temDabiaoAwardInfo) + self.OrderAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.OrderAwardCount): + temOrderAwardInfo = tagMCCACTGBillboardOrder() + _pos = temOrderAwardInfo.ReadData(_lpData, _pos) + self.OrderAwardInfo.append(temOrderAwardInfo) + return _pos + + def Clear(self): + self.TemplateID = 0 + self.DabiaoAwardCount = 0 + self.DabiaoAwardInfo = list() + self.OrderAwardCount = 0 + self.OrderAwardInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.DabiaoAwardCount): + length += self.DabiaoAwardInfo[i].GetLength() + length += 1 + for i in range(self.OrderAwardCount): + length += self.OrderAwardInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.TemplateID) + data = CommFunc.WriteBYTE(data, self.DabiaoAwardCount) + for i in range(self.DabiaoAwardCount): + data = CommFunc.WriteString(data, self.DabiaoAwardInfo[i].GetLength(), self.DabiaoAwardInfo[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.OrderAwardCount) + for i in range(self.OrderAwardCount): + data = CommFunc.WriteString(data, self.OrderAwardInfo[i].GetLength(), self.OrderAwardInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + TemplateID:%d, + DabiaoAwardCount:%d, + DabiaoAwardInfo:%s, + OrderAwardCount:%d, + OrderAwardInfo:%s + '''\ + %( + self.TemplateID, + self.DabiaoAwardCount, + "...", + self.OrderAwardCount, + "..." + ) + return DumpString + + +class tagMCCACTGBillboardInfo(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 + TemplateID = 0 #(BYTE TemplateID)// 当前活动模板ID + TemplateCount = 0 #(BYTE TemplateCount) + TempInfo = list() #(vector<tagMCCACTGBillboardTempInfo> TempInfo)// 模板信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x32 + 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.TemplateID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TemplateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TemplateCount): + temTempInfo = tagMCCACTGBillboardTempInfo() + _pos = temTempInfo.ReadData(_lpData, _pos) + self.TempInfo.append(temTempInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x32 + self.ServerInfoLen = 0 + self.ServerIDRangeInfo = "" + self.GroupValue1 = 0 + self.StartDate = "" + self.EndtDate = "" + self.TemplateID = 0 + self.TemplateCount = 0 + self.TempInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.ServerIDRangeInfo) + length += 1 + length += 10 + length += 10 + length += 1 + length += 1 + for i in range(self.TemplateCount): + length += self.TempInfo[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.WriteBYTE(data, self.TemplateID) + data = CommFunc.WriteBYTE(data, self.TemplateCount) + for i in range(self.TemplateCount): + data = CommFunc.WriteString(data, self.TempInfo[i].GetLength(), self.TempInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ServerInfoLen:%d, + ServerIDRangeInfo:%s, + GroupValue1:%d, + StartDate:%s, + EndtDate:%s, + TemplateID:%d, + TemplateCount:%d, + TempInfo:%s + '''\ + %( + self.Head.OutputString(), + self.ServerInfoLen, + self.ServerIDRangeInfo, + self.GroupValue1, + self.StartDate, + self.EndtDate, + self.TemplateID, + self.TemplateCount, + "..." + ) + return DumpString + + +m_NAtagMCCACTGBillboardInfo=tagMCCACTGBillboardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCACTGBillboardInfo.Head.Cmd,m_NAtagMCCACTGBillboardInfo.Head.SubCmd))] = m_NAtagMCCACTGBillboardInfo + + +#------------------------------------------------------ +# AA 33 跨服充值排行活动玩家信息 #tagMCCACTGBillboardPlayerInfo + +class tagMCCACTGBillboardPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CTGRMBTotal", c_int), # 活动已累计充值RMB + ("DabiaoAwardRecord", c_int), # 达标奖励记录,与达标奖励索引位或运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x33 + 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 = 0x33 + self.CTGRMBTotal = 0 + self.DabiaoAwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCCACTGBillboardPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 33 跨服充值排行活动玩家信息 //tagMCCACTGBillboardPlayerInfo: + Cmd:%s, + SubCmd:%s, + CTGRMBTotal:%d, + DabiaoAwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CTGRMBTotal, + self.DabiaoAwardRecord + ) + return DumpString + + +m_NAtagMCCACTGBillboardPlayerInfo=tagMCCACTGBillboardPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCACTGBillboardPlayerInfo.Cmd,m_NAtagMCCACTGBillboardPlayerInfo.SubCmd))] = m_NAtagMCCACTGBillboardPlayerInfo + + +#------------------------------------------------------ # AA 09 消费返利活动信息 #tagMCCostRebateInfo class tagMCCostRebateAwardItem(Structure): _pack_ = 1 _fields_ = [ ("ItemID", c_int), - ("ItemCount", c_ushort), + ("ItemCount", c_int), ("IsBind", c_ubyte), ] @@ -23481,6 +36545,7 @@ class tagMCCostRebateInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 @@ -23498,6 +36563,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) @@ -23514,6 +36580,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x09 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.IsDayReset = 0 @@ -23525,6 +36592,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 1 @@ -23538,6 +36606,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteBYTE(data, self.IsDayReset) @@ -23550,6 +36619,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, IsDayReset:%d, @@ -23559,6 +36629,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.IsDayReset, @@ -23581,6 +36652,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 ("CostGoldTotal", c_int), #本次活动已累计消费仙玉数 ("AwardRecord", c_int), #返利奖励领奖记录,按奖励索引二进制位存储是否已领取 ] @@ -23599,6 +36671,7 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x10 + self.ActNum = 0 self.CostGoldTotal = 0 self.AwardRecord = 0 return @@ -23613,12 +36686,14 @@ DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo: Cmd:%s, SubCmd:%s, + ActNum:%d, CostGoldTotal:%d, AwardRecord:%d '''\ %( self.Cmd, self.SubCmd, + self.ActNum, self.CostGoldTotal, self.AwardRecord ) @@ -23627,6 +36702,1182 @@ m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo + + +#------------------------------------------------------ +# AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo + +class tagMCCrossActAllRechargePlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CTGRMBTotal", c_int), # 活动已累计充值RMB + ("AwardRecord", c_int), # 奖励记录,根据奖励索引位或运算判断是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x34 + 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 = 0x34 + self.CTGRMBTotal = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCCrossActAllRechargePlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo: + Cmd:%s, + SubCmd:%s, + CTGRMBTotal:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CTGRMBTotal, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo + + +#------------------------------------------------------ +# AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo + +class tagMCDailyGiftbagItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", c_ushort), + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagMCDailyGiftbagItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 25 每日礼包活动信息 //tagMCDailyGiftbagInfo: + ItemID:%d, + ItemCount:%d + '''\ + %( + self.ItemID, + self.ItemCount + ) + return DumpString + + +class tagMCDailyGiftbag(Structure): + GiftID = 0 #(DWORD GiftID)//礼包ID,0为免费 + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo)//商品编号 + BuyCountLimit = 0 #(BYTE BuyCountLimit)//限购数 + RMB = 0 #(DWORD RMB)//所需RMB,元 + GiftItemCount = 0 #(BYTE GiftItemCount)// 礼包物品数 + ItemInfo = list() #(vector<tagMCDailyGiftbagItem> ItemInfo)// 物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) + self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftItemCount): + temItemInfo = tagMCDailyGiftbagItem() + _pos = temItemInfo.ReadData(_lpData, _pos) + self.ItemInfo.append(temItemInfo) + return _pos + + def Clear(self): + self.GiftID = 0 + self.OrderInfoLen = 0 + self.OrderInfo = "" + self.BuyCountLimit = 0 + self.RMB = 0 + self.GiftItemCount = 0 + self.ItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.OrderInfo) + length += 1 + length += 4 + length += 1 + for i in range(self.GiftItemCount): + length += self.ItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GiftID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) + data = CommFunc.WriteBYTE(data, self.BuyCountLimit) + data = CommFunc.WriteDWORD(data, self.RMB) + data = CommFunc.WriteBYTE(data, self.GiftItemCount) + for i in range(self.GiftItemCount): + data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GiftID:%d, + OrderInfoLen:%d, + OrderInfo:%s, + BuyCountLimit:%d, + RMB:%d, + GiftItemCount:%d, + ItemInfo:%s + '''\ + %( + self.GiftID, + self.OrderInfoLen, + self.OrderInfo, + self.BuyCountLimit, + self.RMB, + self.GiftItemCount, + "..." + ) + return DumpString + + +class tagMCDailyGiftbagInfo(Structure): + Head = tagHead() + LimitLV = 0 #(WORD LimitLV)// 限制等级 + GiftbagCount = 0 #(BYTE GiftbagCount)// 礼包数 + GiftbagInfo = list() #(vector<tagMCDailyGiftbag> GiftbagInfo)// 礼包信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x25 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagInfo = tagMCDailyGiftbag() + _pos = temGiftbagInfo.ReadData(_lpData, _pos) + self.GiftbagInfo.append(temGiftbagInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x25 + self.LimitLV = 0 + self.GiftbagCount = 0 + self.GiftbagInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.GiftbagCount) + for i in range(self.GiftbagCount): + data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + LimitLV:%d, + GiftbagCount:%d, + GiftbagInfo:%s + '''\ + %( + self.Head.OutputString(), + self.LimitLV, + self.GiftbagCount, + "..." + ) + return DumpString + + +m_NAtagMCDailyGiftbagInfo=tagMCDailyGiftbagInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagInfo.Head.Cmd,m_NAtagMCDailyGiftbagInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagInfo + + +#------------------------------------------------------ +# AA 26 每日礼包玩家活动信息 #tagMCDailyGiftbagPlayerInfo + +class tagMCDailyGiftbagBuyCount(Structure): + _pack_ = 1 + _fields_ = [ + ("GiftbagID", c_int), #礼包ID + ("BuyCount", 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.GiftbagID = 0 + self.BuyCount = 0 + return + + def GetLength(self): + return sizeof(tagMCDailyGiftbagBuyCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 26 每日礼包玩家活动信息 //tagMCDailyGiftbagPlayerInfo: + GiftbagID:%d, + BuyCount:%d + '''\ + %( + self.GiftbagID, + self.BuyCount + ) + return DumpString + + +class tagMCDailyGiftbagPlayerInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + BuyCountList = list() #(vector<tagMCDailyGiftbagBuyCount> BuyCountList)//礼包购买次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x26 + 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): + temBuyCountList = tagMCDailyGiftbagBuyCount() + _pos = temBuyCountList.ReadData(_lpData, _pos) + self.BuyCountList.append(temBuyCountList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x26 + self.Count = 0 + self.BuyCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.BuyCountList[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.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + BuyCountList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCDailyGiftbagPlayerInfo=tagMCDailyGiftbagPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGiftbagPlayerInfo.Head.Cmd,m_NAtagMCDailyGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCDailyGiftbagPlayerInfo + + +#------------------------------------------------------ +# AA 03 每日打包直购礼包 #tagMCDailyPackBuyGiftInfo + +class tagMCDailyPackBuyGiftInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PackBuyTime", c_int), # 打包购买的时间戳,如果有该值,代表已经一次性打包购买了,可根据次时间戳算出当前是第几天 + ("BuyStateToday", c_int), # 今日礼包购买状态,按礼包索引二进制位计算代表是否已购买,仅非打包购买状态下有用 + ("AwardState", c_int), # 今日礼包领奖状态,按礼包索引二进制位计算代表是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x03 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x03 + self.PackBuyTime = 0 + self.BuyStateToday = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCDailyPackBuyGiftInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 03 每日打包直购礼包 //tagMCDailyPackBuyGiftInfo: + Cmd:%s, + SubCmd:%s, + PackBuyTime:%d, + BuyStateToday:%d, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PackBuyTime, + self.BuyStateToday, + self.AwardState + ) + return DumpString + + +m_NAtagMCDailyPackBuyGiftInfo=tagMCDailyPackBuyGiftInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyPackBuyGiftInfo.Cmd,m_NAtagMCDailyPackBuyGiftInfo.SubCmd))] = m_NAtagMCDailyPackBuyGiftInfo + + +#------------------------------------------------------ +# AA 24 每日免费直购礼包信息 #tagMCDayFreeGoldGiftState + +class tagMCDayFreeGoldGiftState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("DayFreeGoldGiftState", c_ubyte), #每日免费直购礼包是否已领奖 0-未领 1-已领 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x24 + 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 = 0x24 + self.DayFreeGoldGiftState = 0 + return + + def GetLength(self): + return sizeof(tagMCDayFreeGoldGiftState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 24 每日免费直购礼包信息 //tagMCDayFreeGoldGiftState: + Cmd:%s, + SubCmd:%s, + DayFreeGoldGiftState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.DayFreeGoldGiftState + ) + return DumpString + + +m_NAtagMCDayFreeGoldGiftState=tagMCDayFreeGoldGiftState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDayFreeGoldGiftState.Cmd,m_NAtagMCDayFreeGoldGiftState.SubCmd))] = m_NAtagMCDayFreeGoldGiftState + + +#------------------------------------------------------ +# AA 42 节日登录奖励活动信息 #tagMCFeastLoginInfo + +class tagMCFeastLoginDayAwardItem(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(tagMCFeastLoginDayAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 42 节日登录奖励活动信息 //tagMCFeastLoginInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFeastLoginDayAward(Structure): + DayNum = 0 #(BYTE DayNum)//天编号,从1开始,活动第X天只能领对应第X天的奖励 + AwardCount = 0 #(BYTE AwardCount) + AwardItemList = list() #(vector<tagMCFeastLoginDayAwardItem> AwardItemList)// 奖励物品列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardItemList = tagMCFeastLoginDayAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.DayNum = 0 + self.AwardCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + for i in range(self.AwardCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.DayNum) + data = CommFunc.WriteBYTE(data, self.AwardCount) + for i in range(self.AwardCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + DayNum:%d, + AwardCount:%d, + AwardItemList:%s + '''\ + %( + self.DayNum, + self.AwardCount, + "..." + ) + return DumpString + + +class tagMCFeastLoginInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + DayCount = 0 #(BYTE DayCount)// 总共几天 + DayAwardList = list() #(vector<tagMCFeastLoginDayAward> DayAwardList)//登录天奖励列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x42 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DayCount): + temDayAwardList = tagMCFeastLoginDayAward() + _pos = temDayAwardList.ReadData(_lpData, _pos) + self.DayAwardList.append(temDayAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x42 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.DayCount = 0 + self.DayAwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.DayCount): + length += self.DayAwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.DayCount) + for i in range(self.DayCount): + data = CommFunc.WriteString(data, self.DayAwardList[i].GetLength(), self.DayAwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + DayCount:%d, + DayAwardList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.DayCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastLoginInfo=tagMCFeastLoginInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginInfo.Head.Cmd,m_NAtagMCFeastLoginInfo.Head.SubCmd))] = m_NAtagMCFeastLoginInfo + + +#------------------------------------------------------ +# AA 39 节日登录奖励活动玩家信息 #tagMCFeastLoginPlayerInfo + +class tagMCFeastLoginPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("LoginState", c_int), # 是否已登录,按天索引0代表第1天记录当天是否已登录 + ("LoginAward", c_int), # 是否已领取,按天索引0代表第1天记录当天是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x39 + 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 = 0x39 + self.LoginState = 0 + self.LoginAward = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastLoginPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 39 节日登录奖励活动玩家信息 //tagMCFeastLoginPlayerInfo: + Cmd:%s, + SubCmd:%s, + LoginState:%d, + LoginAward:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.LoginState, + self.LoginAward + ) + return DumpString + + +m_NAtagMCFeastLoginPlayerInfo=tagMCFeastLoginPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastLoginPlayerInfo.Cmd,m_NAtagMCFeastLoginPlayerInfo.SubCmd))] = m_NAtagMCFeastLoginPlayerInfo + + +#------------------------------------------------------ +# AA 46 节日游历活动信息 #tagMCFeastTravelInfo + +class tagMCFeastTravelAwardItem(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(tagMCFeastTravelAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 46 节日游历活动信息 //tagMCFeastTravelInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFeastTravelAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)//游历奖励索引 + NeedTravelPoint = 0 #(WORD NeedTravelPoint)//单次领奖所需游历值 + AwardCountMax = 0 #(WORD AwardCountMax)//最大可领取次数,0代表不限 + AwardItemCount = 0 #(BYTE AwardItemCount)//奖励物品数 + AwardItemList = list() #(vector<tagMCFeastTravelAwardItem> 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.NeedTravelPoint,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItemList = tagMCFeastTravelAwardItem() + _pos = temAwardItemList.ReadData(_lpData, _pos) + self.AwardItemList.append(temAwardItemList) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedTravelPoint = 0 + self.AwardCountMax = 0 + self.AwardItemCount = 0 + self.AwardItemList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 2 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.AwardIndex) + data = CommFunc.WriteWORD(data, self.NeedTravelPoint) + data = CommFunc.WriteWORD(data, self.AwardCountMax) + data = CommFunc.WriteBYTE(data, self.AwardItemCount) + for i in range(self.AwardItemCount): + data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + AwardIndex:%d, + NeedTravelPoint:%d, + AwardCountMax:%d, + AwardItemCount:%d, + AwardItemList:%s + '''\ + %( + self.AwardIndex, + self.NeedTravelPoint, + self.AwardCountMax, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCFeastTravelTask(Structure): + _pack_ = 1 + _fields_ = [ + ("TravelTaskID", c_ubyte), #游历任务ID + ("FinishNeedValue", c_ushort), #单次完成所需进度 + ("FinishTimeMax", c_ushort), #最大可完成次数,0代表不限 + ("AddTravelPoint", 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.TravelTaskID = 0 + self.FinishNeedValue = 0 + self.FinishTimeMax = 0 + self.AddTravelPoint = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastTravelTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 46 节日游历活动信息 //tagMCFeastTravelInfo: + TravelTaskID:%d, + FinishNeedValue:%d, + FinishTimeMax:%d, + AddTravelPoint:%d + '''\ + %( + self.TravelTaskID, + self.FinishNeedValue, + self.FinishTimeMax, + self.AddTravelPoint + ) + return DumpString + + +class tagMCFeastTravelInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + TravelTaskCount = 0 #(BYTE TravelTaskCount)// 游历任务数 + TravelTaskList = list() #(vector<tagMCFeastTravelTask> TravelTaskList)//游历任务信息列表 + TravelAwardCount = 0 #(BYTE TravelAwardCount)// 游历奖励数 + TravelAwardList = list() #(vector<tagMCFeastTravelAward> TravelAwardList)//游历奖励信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x46 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TravelTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelTaskCount): + temTravelTaskList = tagMCFeastTravelTask() + _pos = temTravelTaskList.ReadData(_lpData, _pos) + self.TravelTaskList.append(temTravelTaskList) + self.TravelAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelAwardCount): + temTravelAwardList = tagMCFeastTravelAward() + _pos = temTravelAwardList.ReadData(_lpData, _pos) + self.TravelAwardList.append(temTravelAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x46 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.TravelTaskCount = 0 + self.TravelTaskList = list() + self.TravelAwardCount = 0 + self.TravelAwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + for i in range(self.TravelTaskCount): + length += self.TravelTaskList[i].GetLength() + length += 1 + for i in range(self.TravelAwardCount): + length += self.TravelAwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteBYTE(data, self.TravelTaskCount) + for i in range(self.TravelTaskCount): + data = CommFunc.WriteString(data, self.TravelTaskList[i].GetLength(), self.TravelTaskList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TravelAwardCount) + for i in range(self.TravelAwardCount): + data = CommFunc.WriteString(data, self.TravelAwardList[i].GetLength(), self.TravelAwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + TravelTaskCount:%d, + TravelTaskList:%s, + TravelAwardCount:%d, + TravelAwardList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.TravelTaskCount, + "...", + self.TravelAwardCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastTravelInfo=tagMCFeastTravelInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastTravelInfo.Head.Cmd,m_NAtagMCFeastTravelInfo.Head.SubCmd))] = m_NAtagMCFeastTravelInfo + + +#------------------------------------------------------ +# AA 47 节日游历活动玩家信息 #tagMCFeastTravelPlayerInfo + +class tagMCFeastTravelPlayerAward(Structure): + _pack_ = 1 + _fields_ = [ + ("AwardIndex", c_ubyte), #游历奖励索引 + ("GetAwardCount", c_int), #已领取次数;前端判断是否可领取: 总游历值 >= (已领取次数 + 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.AwardIndex = 0 + self.GetAwardCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastTravelPlayerAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 47 节日游历活动玩家信息 //tagMCFeastTravelPlayerInfo: + AwardIndex:%d, + GetAwardCount:%d + '''\ + %( + self.AwardIndex, + self.GetAwardCount + ) + return DumpString + + +class tagMCFeastTravelPlayerTask(Structure): + _pack_ = 1 + _fields_ = [ + ("TravelTaskID", c_ubyte), #游历任务ID + ("TravelValue", c_int), #当前进度值,一直累加 + ("FinishCount", c_ubyte), #当前已完成次数; 前端计算未完成次数的进度值=max(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.TravelTaskID = 0 + self.TravelValue = 0 + self.FinishCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastTravelPlayerTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 47 节日游历活动玩家信息 //tagMCFeastTravelPlayerInfo: + TravelTaskID:%d, + TravelValue:%d, + FinishCount:%d + '''\ + %( + self.TravelTaskID, + self.TravelValue, + self.FinishCount + ) + return DumpString + + +class tagMCFeastTravelPlayerInfo(Structure): + Head = tagHead() + TravelPoint = 0 #(DWORD TravelPoint)//当前总游历值,一直累加,不会扣的 + TravelPlayerTaskCount = 0 #(BYTE TravelPlayerTaskCount)// 游历任务数,不一定有同步,有同步数据则替换即可 + TravelPlayerTaskList = list() #(vector<tagMCFeastTravelPlayerTask> TravelPlayerTaskList)//游历任务信息列表 + TravelPlayerAwardCount = 0 #(BYTE TravelPlayerAwardCount)// 游历奖励数,不一定有同步,有同步数据则替换即可 + TravelPlayerAwardList = list() #(vector<tagMCFeastTravelPlayerAward> TravelPlayerAwardList)//游历奖励信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x47 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TravelPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TravelPlayerTaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelPlayerTaskCount): + temTravelPlayerTaskList = tagMCFeastTravelPlayerTask() + _pos = temTravelPlayerTaskList.ReadData(_lpData, _pos) + self.TravelPlayerTaskList.append(temTravelPlayerTaskList) + self.TravelPlayerAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TravelPlayerAwardCount): + temTravelPlayerAwardList = tagMCFeastTravelPlayerAward() + _pos = temTravelPlayerAwardList.ReadData(_lpData, _pos) + self.TravelPlayerAwardList.append(temTravelPlayerAwardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x47 + self.TravelPoint = 0 + self.TravelPlayerTaskCount = 0 + self.TravelPlayerTaskList = list() + self.TravelPlayerAwardCount = 0 + self.TravelPlayerAwardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.TravelPlayerTaskCount): + length += self.TravelPlayerTaskList[i].GetLength() + length += 1 + for i in range(self.TravelPlayerAwardCount): + length += self.TravelPlayerAwardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.TravelPoint) + data = CommFunc.WriteBYTE(data, self.TravelPlayerTaskCount) + for i in range(self.TravelPlayerTaskCount): + data = CommFunc.WriteString(data, self.TravelPlayerTaskList[i].GetLength(), self.TravelPlayerTaskList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TravelPlayerAwardCount) + for i in range(self.TravelPlayerAwardCount): + data = CommFunc.WriteString(data, self.TravelPlayerAwardList[i].GetLength(), self.TravelPlayerAwardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TravelPoint:%d, + TravelPlayerTaskCount:%d, + TravelPlayerTaskList:%s, + TravelPlayerAwardCount:%d, + TravelPlayerAwardList:%s + '''\ + %( + self.Head.OutputString(), + self.TravelPoint, + self.TravelPlayerTaskCount, + "...", + self.TravelPlayerAwardCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastTravelPlayerInfo=tagMCFeastTravelPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastTravelPlayerInfo.Head.Cmd,m_NAtagMCFeastTravelPlayerInfo.Head.SubCmd))] = m_NAtagMCFeastTravelPlayerInfo #------------------------------------------------------ @@ -24142,6 +38393,421 @@ #------------------------------------------------------ +# AA 43 节日祝福活动信息 #tagMCFeastWishInfo + +class tagMCFeastWishBottleItem(Structure): + _pack_ = 1 + _fields_ = [ + ("RecordIndex", c_ubyte), #物品索引,用于选择及记录是否已选择 + ("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.RecordIndex = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastWishBottleItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 43 节日祝福活动信息 //tagMCFeastWishInfo: + RecordIndex:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.RecordIndex, + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFeastWishBottleInfo(Structure): + BottleNum = 0 #(BYTE BottleNum)//瓶子编号 + NeedWishValue = 0 #(WORD NeedWishValue)//单次领奖所需祝福值 + ChooseTimeMax = 0 #(BYTE ChooseTimeMax)//最大可领奖次数 + ChoosePrizeCount = 0 #(BYTE ChoosePrizeCount)//可选择奖励个数 + ChoosePrizeList = list() #(vector<tagMCFeastWishBottleItem> ChoosePrizeList)// 选择奖励物品列表,已选过的无法再选 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BottleNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.NeedWishValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ChooseTimeMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ChoosePrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ChoosePrizeCount): + temChoosePrizeList = tagMCFeastWishBottleItem() + _pos = temChoosePrizeList.ReadData(_lpData, _pos) + self.ChoosePrizeList.append(temChoosePrizeList) + return _pos + + def Clear(self): + self.BottleNum = 0 + self.NeedWishValue = 0 + self.ChooseTimeMax = 0 + self.ChoosePrizeCount = 0 + self.ChoosePrizeList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + length += 1 + for i in range(self.ChoosePrizeCount): + length += self.ChoosePrizeList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.BottleNum) + data = CommFunc.WriteWORD(data, self.NeedWishValue) + data = CommFunc.WriteBYTE(data, self.ChooseTimeMax) + data = CommFunc.WriteBYTE(data, self.ChoosePrizeCount) + for i in range(self.ChoosePrizeCount): + data = CommFunc.WriteString(data, self.ChoosePrizeList[i].GetLength(), self.ChoosePrizeList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + BottleNum:%d, + NeedWishValue:%d, + ChooseTimeMax:%d, + ChoosePrizeCount:%d, + ChoosePrizeList:%s + '''\ + %( + self.BottleNum, + self.NeedWishValue, + self.ChooseTimeMax, + self.ChoosePrizeCount, + "..." + ) + return DumpString + + +class tagMCFeastWishInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点开,5点重置;2-5点开,0点重置 + WishPoolShowCount = 0 #(BYTE WishPoolShowCount)//祝福池展示物品数 + WishPoolShowItemList = list() #(vector<DWORD> WishPoolShowItemList)//祝福池展示物品ID列表 + BottleCount = 0 #(BYTE BottleCount)// 祝福瓶个数 + BottleInfoList = list() #(vector<tagMCFeastWishBottleInfo> BottleInfoList)// 祝福瓶信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x43 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WishPoolShowCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WishPoolShowCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.WishPoolShowItemList.append(value) + self.BottleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BottleCount): + temBottleInfoList = tagMCFeastWishBottleInfo() + _pos = temBottleInfoList.ReadData(_lpData, _pos) + self.BottleInfoList.append(temBottleInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x43 + self.StartDate = "" + self.EndtDate = "" + self.LimitLV = 0 + self.ResetType = 0 + self.WishPoolShowCount = 0 + self.WishPoolShowItemList = list() + self.BottleCount = 0 + self.BottleInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + length += 4 * self.WishPoolShowCount + length += 1 + for i in range(self.BottleCount): + length += self.BottleInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteBYTE(data, self.WishPoolShowCount) + for i in range(self.WishPoolShowCount): + data = CommFunc.WriteDWORD(data, self.WishPoolShowItemList[i]) + data = CommFunc.WriteBYTE(data, self.BottleCount) + for i in range(self.BottleCount): + data = CommFunc.WriteString(data, self.BottleInfoList[i].GetLength(), self.BottleInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + LimitLV:%d, + ResetType:%d, + WishPoolShowCount:%d, + WishPoolShowItemList:%s, + BottleCount:%d, + BottleInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.LimitLV, + self.ResetType, + self.WishPoolShowCount, + "...", + self.BottleCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastWishInfo=tagMCFeastWishInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWishInfo.Head.Cmd,m_NAtagMCFeastWishInfo.Head.SubCmd))] = m_NAtagMCFeastWishInfo + + +#------------------------------------------------------ +# AA 44 节日祝福活动玩家信息 #tagMCFeastWishPlayerInfo + +class tagMCFeastWishPlayerBottle(Structure): + _pack_ = 1 + _fields_ = [ + ("BottleNum", c_ubyte), #瓶子编号 + ("WishValue", c_ushort), #当前可用祝福值 + ("ChooseRecord", 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.BottleNum = 0 + self.WishValue = 0 + self.ChooseRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCFeastWishPlayerBottle) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 44 节日祝福活动玩家信息 //tagMCFeastWishPlayerInfo: + BottleNum:%d, + WishValue:%d, + ChooseRecord:%d + '''\ + %( + self.BottleNum, + self.WishValue, + self.ChooseRecord + ) + return DumpString + + +class tagMCFeastWishPlayerInfo(Structure): + Head = tagHead() + BottleCount = 0 #(BYTE BottleCount)// 祝福瓶个数 + PlayerBottleInfo = list() #(vector<tagMCFeastWishPlayerBottle> PlayerBottleInfo)// 祝福瓶信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x44 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.BottleCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BottleCount): + temPlayerBottleInfo = tagMCFeastWishPlayerBottle() + _pos = temPlayerBottleInfo.ReadData(_lpData, _pos) + self.PlayerBottleInfo.append(temPlayerBottleInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x44 + self.BottleCount = 0 + self.PlayerBottleInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.BottleCount): + length += self.PlayerBottleInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BottleCount) + for i in range(self.BottleCount): + data = CommFunc.WriteString(data, self.PlayerBottleInfo[i].GetLength(), self.PlayerBottleInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + BottleCount:%d, + PlayerBottleInfo:%s + '''\ + %( + self.Head.OutputString(), + self.BottleCount, + "..." + ) + return DumpString + + +m_NAtagMCFeastWishPlayerInfo=tagMCFeastWishPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWishPlayerInfo.Head.Cmd,m_NAtagMCFeastWishPlayerInfo.Head.SubCmd))] = m_NAtagMCFeastWishPlayerInfo + + +#------------------------------------------------------ +# AA 45 节日祝福祝福结果 #tagMCFeastWishResult + +class tagMCFeastWishResult(Structure): + Head = tagHead() + AddWishValue = 0 #(WORD AddWishValue)// 本次增加的祝福值 + WishResultLen = 0 #(WORD WishResultLen) + WishResult = "" #(String WishResult)// 获得物品结果[[物品ID,个数,是否绑定], ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x45 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AddWishValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.WishResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.WishResult,_pos = CommFunc.ReadString(_lpData, _pos,self.WishResultLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x45 + self.AddWishValue = 0 + self.WishResultLen = 0 + self.WishResult = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 2 + length += len(self.WishResult) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.AddWishValue) + data = CommFunc.WriteWORD(data, self.WishResultLen) + data = CommFunc.WriteString(data, self.WishResultLen, self.WishResult) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AddWishValue:%d, + WishResultLen:%d, + WishResult:%s + '''\ + %( + self.Head.OutputString(), + self.AddWishValue, + self.WishResultLen, + self.WishResult + ) + return DumpString + + +m_NAtagMCFeastWishResult=tagMCFeastWishResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFeastWishResult.Head.Cmd,m_NAtagMCFeastWishResult.Head.SubCmd))] = m_NAtagMCFeastWishResult + + +#------------------------------------------------------ # AA 02 首充信息 #tagMCFirstGoldInfo class tagMCFirstGoldInfo(Structure): @@ -24149,8 +38815,9 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("FirstGoldRewardState", c_ubyte), #首充奖励是否已领奖 + ("FirstGoldRewardState", c_ubyte), #首充奖励领奖记录,按位记录首充第X天是否已领取,第1天为第0索引位 ("FirstGoldTry", c_ubyte), #首充试用状态0-不可试用 1-可试用 2-已试用 + ("FirstGoldServerDay", c_ushort), #首充时是开服第几天,从1开始,0代表未记录充值 ] def __init__(self): @@ -24169,6 +38836,7 @@ self.SubCmd = 0x02 self.FirstGoldRewardState = 0 self.FirstGoldTry = 0 + self.FirstGoldServerDay = 0 return def GetLength(self): @@ -24182,13 +38850,15 @@ Cmd:%s, SubCmd:%s, FirstGoldRewardState:%d, - FirstGoldTry:%d + FirstGoldTry:%d, + FirstGoldServerDay:%d '''\ %( self.Cmd, self.SubCmd, self.FirstGoldRewardState, - self.FirstGoldTry + self.FirstGoldTry, + self.FirstGoldServerDay ) return DumpString @@ -24488,6 +39158,7 @@ class tagMCFlashGiftbagInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 @@ -24508,6 +39179,7 @@ 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -24530,6 +39202,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x12 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.AdvanceMinutes = 0 @@ -24544,6 +39217,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 2 @@ -24561,6 +39235,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteWORD(data, self.AdvanceMinutes) @@ -24577,6 +39252,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, AdvanceMinutes:%d, @@ -24589,6 +39265,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.AdvanceMinutes, @@ -24650,6 +39327,7 @@ class tagMCFlashGiftbagPlayerInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 Count = 0 #(BYTE Count) BuyCountList = list() #(vector<tagMCFlashGiftbagBuyCount> BuyCountList)//礼包购买次数信息 data = None @@ -24663,6 +39341,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.Count): temBuyCountList = tagMCFlashGiftbagBuyCount() @@ -24675,6 +39354,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x13 + self.ActNum = 0 self.Count = 0 self.BuyCountList = list() return @@ -24682,6 +39362,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 1 for i in range(self.Count): length += self.BuyCountList[i].GetLength() @@ -24691,6 +39372,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteBYTE(data, self.Count) for i in range(self.Count): data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer()) @@ -24699,11 +39381,13 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, Count:%d, BuyCountList:%s '''\ %( self.Head.OutputString(), + self.ActNum, self.Count, "..." ) @@ -24758,6 +39442,7 @@ class tagMCFlashSaleAppointmentInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 IsAll = 0 #(BYTE IsAll)// 是否全部 GoodsCount = 0 #(WORD GoodsCount)// 商品数 GoodsList = list() #(vector<tagMCFlashSaleAppointmentState> GoodsList)// 预约的商品 @@ -24772,6 +39457,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) + self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GoodsCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.GoodsCount): @@ -24785,6 +39471,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x18 + self.ActNum = 0 self.IsAll = 0 self.GoodsCount = 0 self.GoodsList = list() @@ -24793,6 +39480,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 1 length += 2 for i in range(self.GoodsCount): @@ -24803,6 +39491,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteBYTE(data, self.IsAll) data = CommFunc.WriteWORD(data, self.GoodsCount) for i in range(self.GoodsCount): @@ -24812,12 +39501,14 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, IsAll:%d, GoodsCount:%d, GoodsList:%s '''\ %( self.Head.OutputString(), + self.ActNum, self.IsAll, self.GoodsCount, "..." @@ -25010,6 +39701,7 @@ class tagMCFlashSaleInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 @@ -25030,6 +39722,7 @@ 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -25052,6 +39745,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x17 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.AdvanceMinutes = 0 @@ -25066,6 +39760,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 2 @@ -25083,6 +39778,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteWORD(data, self.AdvanceMinutes) @@ -25099,6 +39795,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, AdvanceMinutes:%d, @@ -25111,6 +39808,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.AdvanceMinutes, @@ -25518,6 +40216,218 @@ #------------------------------------------------------ +# AA 04 创角在线充值特惠信息 #tagMCOnlineRechargeTH + +class tagMCOnlineRechargeTH(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("AwardState", c_ubyte), #是否已领取奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x04 + 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 = 0x04 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCOnlineRechargeTH) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 04 创角在线充值特惠信息 //tagMCOnlineRechargeTH: + Cmd:%s, + SubCmd:%s, + AwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.AwardState + ) + return DumpString + + +m_NAtagMCOnlineRechargeTH=tagMCOnlineRechargeTH() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlineRechargeTH.Cmd,m_NAtagMCOnlineRechargeTH.SubCmd))] = m_NAtagMCOnlineRechargeTH + + +#------------------------------------------------------ +# AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo + +class tagMCRechargePrizeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("CTGID", c_ushort), # 对应充值表充值ID + ("PrizeCount", 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.CTGID = 0 + self.PrizeCount = 0 + return + + def GetLength(self): + return sizeof(tagMCRechargePrizeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 28 充值返利玩家活动信息 //tagMCRechargePrizePlayerInfo: + CTGID:%d, + PrizeCount:%d + '''\ + %( + self.CTGID, + self.PrizeCount + ) + return DumpString + + +class tagMCRechargePrizePlayerInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + PlayerInfoList = list() #(vector<tagMCRechargePrizeInfo> PlayerInfoList)//玩家返利信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x28 + 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): + temPlayerInfoList = tagMCRechargePrizeInfo() + _pos = temPlayerInfoList.ReadData(_lpData, _pos) + self.PlayerInfoList.append(temPlayerInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x28 + self.Count = 0 + self.PlayerInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + 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.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + PlayerInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo + + +#------------------------------------------------------ +# AA 30 累计充值返利仙玉玩家活动信息 #tagMCRechargeRebateGoldPlayerInfo + +class tagMCRechargeRebateGoldPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RechargeRMBTotal", c_int), # 活动已累计充值RMB + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x30 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x30 + self.RechargeRMBTotal = 0 + return + + def GetLength(self): + return sizeof(tagMCRechargeRebateGoldPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 30 累计充值返利仙玉玩家活动信息 //tagMCRechargeRebateGoldPlayerInfo: + Cmd:%s, + SubCmd:%s, + RechargeRMBTotal:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RechargeRMBTotal + ) + return DumpString + + +m_NAtagMCRechargeRebateGoldPlayerInfo=tagMCRechargeRebateGoldPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargeRebateGoldPlayerInfo.Cmd,m_NAtagMCRechargeRebateGoldPlayerInfo.SubCmd))] = m_NAtagMCRechargeRebateGoldPlayerInfo + + +#------------------------------------------------------ # AA 11 限时特惠活动信息 #tagMCSpringSaleInfo class tagMCSpringSaleItem(Structure): @@ -25749,6 +40659,7 @@ class tagMCSpringSaleInfo(Structure): Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 @@ -25769,6 +40680,7 @@ 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) @@ -25791,6 +40703,7 @@ self.Head.Clear() self.Head.Cmd = 0xAA self.Head.SubCmd = 0x11 + self.ActNum = 0 self.StartDate = "" self.EndtDate = "" self.AdvanceMinutes = 0 @@ -25805,6 +40718,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() + length += 1 length += 10 length += 10 length += 2 @@ -25822,6 +40736,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteWORD(data, self.AdvanceMinutes) @@ -25838,6 +40753,7 @@ def OutputString(self): DumpString = ''' Head:%s, + ActNum:%d, StartDate:%s, EndtDate:%s, AdvanceMinutes:%d, @@ -25850,6 +40766,7 @@ '''\ %( self.Head.OutputString(), + self.ActNum, self.StartDate, self.EndtDate, self.AdvanceMinutes, @@ -25983,6 +40900,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2 ("GoldTotal", c_int), #本次活动已累计充值仙玉数 ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取 ] @@ -26001,6 +40919,7 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x1C + self.ActNum = 0 self.GoldTotal = 0 self.AwardRecord = 0 return @@ -26015,12 +40934,14 @@ DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo: Cmd:%s, SubCmd:%s, + ActNum:%d, GoldTotal:%d, AwardRecord:%d '''\ %( self.Cmd, self.SubCmd, + self.ActNum, self.GoldTotal, self.AwardRecord ) @@ -26552,6 +41473,9 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("State", c_ubyte), #0-不可领 1-可领 2-已领取 + ("CTGTotal", c_int), #本次活动已累计充值,单位元 + ("FireworksBuyCount", c_ushort), #已购买高级烟花数 + ("FirewordsScore", c_int), #当前累计所有烟花总积分 ] def __init__(self): @@ -26569,6 +41493,9 @@ self.Cmd = 0xAA self.SubCmd = 0x14 self.State = 0 + self.CTGTotal = 0 + self.FireworksBuyCount = 0 + self.FirewordsScore = 0 return def GetLength(self): @@ -26581,18 +41508,132 @@ DumpString = '''// AA 14 仙界盛典充值大礼 //tagMCXJSDRecharge: Cmd:%s, SubCmd:%s, - State:%d + State:%d, + CTGTotal:%d, + FireworksBuyCount:%d, + FirewordsScore:%d '''\ %( self.Cmd, self.SubCmd, - self.State + self.State, + self.CTGTotal, + self.FireworksBuyCount, + self.FirewordsScore ) return DumpString m_NAtagMCXJSDRecharge=tagMCXJSDRecharge() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXJSDRecharge.Cmd,m_NAtagMCXJSDRecharge.SubCmd))] = m_NAtagMCXJSDRecharge + + +#------------------------------------------------------ +# AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo + +class tagMCBossFirstKillState(Structure): + _pack_ = 1 + _fields_ = [ + ("NPCID", c_int), + ("FKState", c_int), # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励 + ] + + 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.NPCID = 0 + self.FKState = 0 + return + + def GetLength(self): + return sizeof(tagMCBossFirstKillState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo: + NPCID:%d, + FKState:%d + '''\ + %( + self.NPCID, + self.FKState + ) + return DumpString + + +class tagMCBossFirstKillStateInfo(Structure): + Head = tagHead() + BossCount = 0 #(BYTE BossCount) + FirstKillStateList = list() #(vector<tagMCBossFirstKillState> FirstKillStateList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAB + self.Head.SubCmd = 0x01 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.BossCount): + temFirstKillStateList = tagMCBossFirstKillState() + _pos = temFirstKillStateList.ReadData(_lpData, _pos) + self.FirstKillStateList.append(temFirstKillStateList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAB + self.Head.SubCmd = 0x01 + self.BossCount = 0 + self.FirstKillStateList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.BossCount): + length += self.FirstKillStateList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.BossCount) + for i in range(self.BossCount): + data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + BossCount:%d, + FirstKillStateList:%s + '''\ + %( + self.Head.OutputString(), + self.BossCount, + "..." + ) + return DumpString + + +m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo #------------------------------------------------------ @@ -27743,6 +42784,126 @@ #------------------------------------------------------ +# B0 27 活跃放置信息 #tagMCActivityPlaceInfo + +class tagMCActivityPlaceInfo(Structure): + Head = tagHead() + StartTime = 0 #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间 + PlaceCount = 0 #(BYTE PlaceCount)// 剩余未完成探索次数 + RewardCount = 0 #(BYTE RewardCount)// 累计未领取探索奖励次数 + RewardLen = 0 #(BYTE RewardLen) + RewardInfo = "" #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...] + TodayExp = 0 #(DWORD TodayExp) + TodayExpPoint = 0 #(DWORD TodayExpPoint) + YestordayExp = 0 #(DWORD YestordayExp) + YestordayExpPoint = 0 #(DWORD YestordayExpPoint) + TotalCount = 0 #(DWORD TotalCount)// 累计活跃放置次数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x27 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlaceCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen) + self.TodayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TodayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.YestordayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.YestordayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x27 + self.StartTime = 0 + self.PlaceCount = 0 + self.RewardCount = 0 + self.RewardLen = 0 + self.RewardInfo = "" + self.TodayExp = 0 + self.TodayExpPoint = 0 + self.YestordayExp = 0 + self.YestordayExpPoint = 0 + self.TotalCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + length += 1 + length += len(self.RewardInfo) + length += 4 + 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.StartTime) + data = CommFunc.WriteBYTE(data, self.PlaceCount) + data = CommFunc.WriteBYTE(data, self.RewardCount) + data = CommFunc.WriteBYTE(data, self.RewardLen) + data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo) + data = CommFunc.WriteDWORD(data, self.TodayExp) + data = CommFunc.WriteDWORD(data, self.TodayExpPoint) + data = CommFunc.WriteDWORD(data, self.YestordayExp) + data = CommFunc.WriteDWORD(data, self.YestordayExpPoint) + data = CommFunc.WriteDWORD(data, self.TotalCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartTime:%d, + PlaceCount:%d, + RewardCount:%d, + RewardLen:%d, + RewardInfo:%s, + TodayExp:%d, + TodayExpPoint:%d, + YestordayExp:%d, + YestordayExpPoint:%d, + TotalCount:%d + '''\ + %( + self.Head.OutputString(), + self.StartTime, + self.PlaceCount, + self.RewardCount, + self.RewardLen, + self.RewardInfo, + self.TodayExp, + self.TodayExpPoint, + self.YestordayExp, + self.YestordayExpPoint, + self.TotalCount + ) + return DumpString + + +m_NAtagMCActivityPlaceInfo=tagMCActivityPlaceInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActivityPlaceInfo.Head.Cmd,m_NAtagMCActivityPlaceInfo.Head.SubCmd))] = m_NAtagMCActivityPlaceInfo + + +#------------------------------------------------------ #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState class tagFamilyArrestAwardReceiveState(Structure): @@ -27840,6 +43001,62 @@ m_NAtagMCFishResult=tagMCFishResult() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFishResult.Cmd,m_NAtagMCFishResult.SubCmd))] = m_NAtagMCFishResult + + +#------------------------------------------------------ +# B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo + +class tagMCTodayAssistMoneyInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TodayAssistMoney", c_ushort), #今日已获得活跃令,不含社交加成 + ("SocialMoney", c_ushort), #社交额外加成 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x07 + self.TodayAssistMoney = 0 + self.SocialMoney = 0 + return + + def GetLength(self): + return sizeof(tagMCTodayAssistMoneyInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 07 今日协助活跃令信息 //tagMCTodayAssistMoneyInfo: + Cmd:%s, + SubCmd:%s, + TodayAssistMoney:%d, + SocialMoney:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TodayAssistMoney, + self.SocialMoney + ) + return DumpString + + +m_NAtagMCTodayAssistMoneyInfo=tagMCTodayAssistMoneyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTodayAssistMoneyInfo.Cmd,m_NAtagMCTodayAssistMoneyInfo.SubCmd))] = m_NAtagMCTodayAssistMoneyInfo #------------------------------------------------------ @@ -27965,6 +43182,118 @@ #------------------------------------------------------ +# B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList + +class tagMCFuncSysPrivilegeInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("FuncSysID", c_ubyte), # 功能系统ID + ("ActivateTime", c_int), # 激活时间戳 + ("AwardState", 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.FuncSysID = 0 + self.ActivateTime = 0 + self.AwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCFuncSysPrivilegeInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 11 功能系统特权信息 //tagMCFuncSysPrivilegeInfoList: + FuncSysID:%d, + ActivateTime:%d, + AwardState:%d + '''\ + %( + self.FuncSysID, + self.ActivateTime, + self.AwardState + ) + return DumpString + + +class tagMCFuncSysPrivilegeInfoList(Structure): + Head = tagHead() + PrivilegeCount = 0 #(BYTE PrivilegeCount)// 特权个数 + PrivilegeInfoList = list() #(vector<tagMCFuncSysPrivilegeInfo> PrivilegeInfoList)// 特权信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.PrivilegeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PrivilegeCount): + temPrivilegeInfoList = tagMCFuncSysPrivilegeInfo() + _pos = temPrivilegeInfoList.ReadData(_lpData, _pos) + self.PrivilegeInfoList.append(temPrivilegeInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x11 + self.PrivilegeCount = 0 + self.PrivilegeInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.PrivilegeCount): + length += self.PrivilegeInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.PrivilegeCount) + for i in range(self.PrivilegeCount): + data = CommFunc.WriteString(data, self.PrivilegeInfoList[i].GetLength(), self.PrivilegeInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + PrivilegeCount:%d, + PrivilegeInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.PrivilegeCount, + "..." + ) + return DumpString + + +m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList + + +#------------------------------------------------------ # B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove class tagMCNotifyPlayerMove(Structure): @@ -28022,6 +43351,80 @@ m_NAtagMCNotifyPlayerMove=tagMCNotifyPlayerMove() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyPlayerMove.Cmd,m_NAtagMCNotifyPlayerMove.SubCmd))] = m_NAtagMCNotifyPlayerMove + + +#------------------------------------------------------ +# B1 13 在线奖励信息新 #tagMCOnlinePrizeNew + +class tagMCOnlinePrizeNew(Structure): + Head = tagHead() + OnlineTime = 0 #(DWORD OnlineTime)//在线时间毫秒 + Len = 0 #(BYTE Len) + PrizeInfo = list() #(vector<DWORD> PrizeInfo)//领奖记录 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.OnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Len,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Len): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.PrizeInfo.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x13 + self.OnlineTime = 0 + self.Len = 0 + self.PrizeInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 4 * self.Len + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.OnlineTime) + data = CommFunc.WriteBYTE(data, self.Len) + for i in range(self.Len): + data = CommFunc.WriteDWORD(data, self.PrizeInfo[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + OnlineTime:%d, + Len:%d, + PrizeInfo:%s + '''\ + %( + self.Head.OutputString(), + self.OnlineTime, + self.Len, + "..." + ) + return DumpString + + +m_NAtagMCOnlinePrizeNew=tagMCOnlinePrizeNew() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOnlinePrizeNew.Head.Cmd,m_NAtagMCOnlinePrizeNew.Head.SubCmd))] = m_NAtagMCOnlinePrizeNew #------------------------------------------------------ @@ -28083,7 +43486,7 @@ Head = tagHead() PointAttrIDCount = 0 #(BYTE PointAttrIDCount)// 点类型个数 PointAttrIDList = list() #(vector<BYTE> PointAttrIDList)// 点类型列表 - PointValueList = list() #(vector<WORD> PointValueList)// 点类型对应已加自由点数列表 + PointValueList = list() #(vector<DWORD> PointValueList)// 点类型对应已加自由点数列表 data = None def __init__(self): @@ -28100,7 +43503,7 @@ value,_pos=CommFunc.ReadBYTE(_lpData,_pos) self.PointAttrIDList.append(value) for i in range(self.PointAttrIDCount): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.PointValueList.append(value) return _pos @@ -28119,7 +43522,7 @@ length += self.Head.GetLength() length += 1 length += 1 * self.PointAttrIDCount - length += 2 * self.PointAttrIDCount + length += 4 * self.PointAttrIDCount return length @@ -28130,7 +43533,7 @@ for i in range(self.PointAttrIDCount): data = CommFunc.WriteBYTE(data, self.PointAttrIDList[i]) for i in range(self.PointAttrIDCount): - data = CommFunc.WriteWORD(data, self.PointValueList[i]) + data = CommFunc.WriteDWORD(data, self.PointValueList[i]) return data def OutputString(self): @@ -28422,6 +43825,132 @@ #------------------------------------------------------ +# B1 20 战令信息 #tagMCZhanlingInfo + +class tagMCZhanling(Structure): + _pack_ = 1 + _fields_ = [ + ("NeedValue", c_int), # 奖励所需值 + ("FreeRewardState", c_ubyte), # 免费奖励是否已领取 + ("ZLRewardState", c_ubyte), # 战令奖励是否已领取 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.NeedValue = 0 + self.FreeRewardState = 0 + self.ZLRewardState = 0 + return + + def GetLength(self): + return sizeof(tagMCZhanling) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo: + NeedValue:%d, + FreeRewardState:%d, + ZLRewardState:%d + '''\ + %( + self.NeedValue, + self.FreeRewardState, + self.ZLRewardState + ) + return DumpString + + +class tagMCZhanlingInfo(Structure): + Head = tagHead() + ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型 + IsActivite = 0 #(BYTE IsActivite)// 是否已激活 + RewardCount = 0 #(WORD RewardCount) + RewardList = list() #(vector<tagMCZhanling> RewardList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.RewardCount): + temRewardList = tagMCZhanling() + _pos = temRewardList.ReadData(_lpData, _pos) + self.RewardList.append(temRewardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x20 + self.ZhanlingType = 0 + self.IsActivite = 0 + self.RewardCount = 0 + self.RewardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 2 + for i in range(self.RewardCount): + length += self.RewardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ZhanlingType) + data = CommFunc.WriteBYTE(data, self.IsActivite) + data = CommFunc.WriteWORD(data, self.RewardCount) + for i in range(self.RewardCount): + data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZhanlingType:%d, + IsActivite:%d, + RewardCount:%d, + RewardList:%s + '''\ + %( + self.Head.OutputString(), + self.ZhanlingType, + self.IsActivite, + self.RewardCount, + "..." + ) + return DumpString + + +m_NAtagMCZhanlingInfo=tagMCZhanlingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhanlingInfo.Head.Cmd,m_NAtagMCZhanlingInfo.Head.SubCmd))] = m_NAtagMCZhanlingInfo + + +#------------------------------------------------------ # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg class tagMCAddXianyuanCoinMsg(Structure): @@ -28539,87 +44068,6 @@ m_NAtagMCAddXianyuanCoinMsg=tagMCAddXianyuanCoinMsg() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddXianyuanCoinMsg.Head.Cmd,m_NAtagMCAddXianyuanCoinMsg.Head.SubCmd))] = m_NAtagMCAddXianyuanCoinMsg - - -#------------------------------------------------------ -# B2 14 自定义副本奖励信息 #tagMCCuntomFBPrizeInfo - -class tagMCCuntomFBPrizeInfo(Structure): - Head = tagHead() - MapID = 0 #(DWORD MapID) - FuncLineID = 0 #(WORD FuncLineID) - PrizeItemCount = 0 #(BYTE PrizeItemCount) - PrizeItemIDList = list() #(vector<DWORD> PrizeItemIDList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xB2 - self.Head.SubCmd = 0x14 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.PrizeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.PrizeItemCount): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.PrizeItemIDList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xB2 - self.Head.SubCmd = 0x14 - self.MapID = 0 - self.FuncLineID = 0 - self.PrizeItemCount = 0 - self.PrizeItemIDList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 2 - length += 1 - length += 4 * self.PrizeItemCount - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.MapID) - data = CommFunc.WriteWORD(data, self.FuncLineID) - data = CommFunc.WriteBYTE(data, self.PrizeItemCount) - for i in range(self.PrizeItemCount): - data = CommFunc.WriteDWORD(data, self.PrizeItemIDList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - MapID:%d, - FuncLineID:%d, - PrizeItemCount:%d, - PrizeItemIDList:%s - '''\ - %( - self.Head.OutputString(), - self.MapID, - self.FuncLineID, - self.PrizeItemCount, - "..." - ) - return DumpString - - -m_NAtagMCCuntomFBPrizeInfo=tagMCCuntomFBPrizeInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCuntomFBPrizeInfo.Head.Cmd,m_NAtagMCCuntomFBPrizeInfo.Head.SubCmd))] = m_NAtagMCCuntomFBPrizeInfo #------------------------------------------------------ @@ -28926,6 +44374,7 @@ _fields_ = [ ("DataMapID", c_int), # 地图ID ("RemainTime", c_int), # 剩余时间秒 + ("RegainCnt", c_ubyte), # 今日已恢复次数 ] def __init__(self): @@ -28940,6 +44389,7 @@ def Clear(self): self.DataMapID = 0 self.RemainTime = 0 + self.RegainCnt = 0 return def GetLength(self): @@ -28951,11 +44401,13 @@ def OutputString(self): DumpString = '''// B2 09 副本次数恢复剩余时间 //tagMCFBCntRegainRemainTime: DataMapID:%d, - RemainTime:%d + RemainTime:%d, + RegainCnt:%d '''\ %( self.DataMapID, - self.RemainTime + self.RemainTime, + self.RegainCnt ) return DumpString @@ -29757,9 +45209,9 @@ #------------------------------------------------------ -# B2 13 天星塔通关层数 #tagMCSkyTowerInfo +# B2 17 境界塔信息 #tagMCRealmTowerInfo -class tagMCSkyTowerInfo(Structure): +class tagMCRealmTowerInfo(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), @@ -29770,7 +45222,7 @@ def __init__(self): self.Clear() self.Cmd = 0xB2 - self.SubCmd = 0x13 + self.SubCmd = 0x17 return def ReadData(self, stringData, _pos=0, _len=0): @@ -29780,18 +45232,18 @@ def Clear(self): self.Cmd = 0xB2 - self.SubCmd = 0x13 + self.SubCmd = 0x17 self.Floor = 0 return def GetLength(self): - return sizeof(tagMCSkyTowerInfo) + return sizeof(tagMCRealmTowerInfo) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo: + DumpString = '''// B2 17 境界塔信息 //tagMCRealmTowerInfo: Cmd:%s, SubCmd:%s, Floor:%d @@ -29804,8 +45256,183 @@ return DumpString +m_NAtagMCRealmTowerInfo=tagMCRealmTowerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRealmTowerInfo.Cmd,m_NAtagMCRealmTowerInfo.SubCmd))] = m_NAtagMCRealmTowerInfo + + +#------------------------------------------------------ +# B2 13 天星塔通关层数 #tagMCSkyTowerInfo + +class tagMCSkyTowerServerReward(Structure): + _pack_ = 1 + _fields_ = [ + ("Floor", c_int), # 全服奖励层ID + ("ServerRewardRecord", 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.Floor = 0 + self.ServerRewardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCSkyTowerServerReward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo: + Floor:%d, + ServerRewardRecord:%d + '''\ + %( + self.Floor, + self.ServerRewardRecord + ) + return DumpString + + +class tagMCSkyTowerInfo(Structure): + Head = tagHead() + Floor = 0 #(DWORD Floor)// 已通关层 + ServerRewardCount = 0 #(WORD ServerRewardCount) + ServerRewardList = list() #(vector<tagMCSkyTowerServerReward> ServerRewardList)// 全服奖励领取记录列表,下发的层记录替换更新即可,领奖记录没有变化时服务端不会下发 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Floor,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ServerRewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.ServerRewardCount): + temServerRewardList = tagMCSkyTowerServerReward() + _pos = temServerRewardList.ReadData(_lpData, _pos) + self.ServerRewardList.append(temServerRewardList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x13 + self.Floor = 0 + self.ServerRewardCount = 0 + self.ServerRewardList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + for i in range(self.ServerRewardCount): + length += self.ServerRewardList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.Floor) + data = CommFunc.WriteWORD(data, self.ServerRewardCount) + for i in range(self.ServerRewardCount): + data = CommFunc.WriteString(data, self.ServerRewardList[i].GetLength(), self.ServerRewardList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Floor:%d, + ServerRewardCount:%d, + ServerRewardList:%s + '''\ + %( + self.Head.OutputString(), + self.Floor, + self.ServerRewardCount, + "..." + ) + return DumpString + + m_NAtagMCSkyTowerInfo=tagMCSkyTowerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Cmd,m_NAtagMCSkyTowerInfo.SubCmd))] = m_NAtagMCSkyTowerInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Head.Cmd,m_NAtagMCSkyTowerInfo.Head.SubCmd))] = m_NAtagMCSkyTowerInfo + + +#------------------------------------------------------ +# B2 16 开始自定义场景结果 #tagMCStartCustomSceneResult + +class tagMCStartCustomSceneResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MapID", c_int), + ("FuncLineID", c_ushort), + ("Result", c_ubyte), #是否允许 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x16 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x16 + self.MapID = 0 + self.FuncLineID = 0 + self.Result = 0 + return + + def GetLength(self): + return sizeof(tagMCStartCustomSceneResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 16 开始自定义场景结果 //tagMCStartCustomSceneResult: + Cmd:%s, + SubCmd:%s, + MapID:%d, + FuncLineID:%d, + Result:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MapID, + self.FuncLineID, + self.Result + ) + return DumpString + + +m_NAtagMCStartCustomSceneResult=tagMCStartCustomSceneResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartCustomSceneResult.Cmd,m_NAtagMCStartCustomSceneResult.SubCmd))] = m_NAtagMCStartCustomSceneResult #------------------------------------------------------ @@ -29932,6 +45559,166 @@ #------------------------------------------------------ +# B3 30 情缘相关信息 #tagMCLoveInfo + +class tagMCLoveInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("EatCandyToday", c_int), # 今日已吃喜糖次数,包含免费及付费的所有次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x30 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x30 + self.EatCandyToday = 0 + return + + def GetLength(self): + return sizeof(tagMCLoveInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 30 情缘相关信息 //tagMCLoveInfo: + Cmd:%s, + SubCmd:%s, + EatCandyToday:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.EatCandyToday + ) + return DumpString + + +m_NAtagMCLoveInfo=tagMCLoveInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveInfo.Cmd,m_NAtagMCLoveInfo.SubCmd))] = m_NAtagMCLoveInfo + + +#------------------------------------------------------ +# B3 27 情戒信息 #tagMCLoveRingInfo + +class tagMCLoveRingInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ClassLV", c_ubyte), # 阶 + ("StarLV", c_ubyte), # 星 + ("EatCount", c_int), # 本星已淬炼道具数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x27 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x27 + self.ClassLV = 0 + self.StarLV = 0 + self.EatCount = 0 + return + + def GetLength(self): + return sizeof(tagMCLoveRingInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 27 情戒信息 //tagMCLoveRingInfo: + Cmd:%s, + SubCmd:%s, + ClassLV:%d, + StarLV:%d, + EatCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ClassLV, + self.StarLV, + self.EatCount + ) + return DumpString + + +m_NAtagMCLoveRingInfo=tagMCLoveRingInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingInfo.Cmd,m_NAtagMCLoveRingInfo.SubCmd))] = m_NAtagMCLoveRingInfo + + +#------------------------------------------------------ +# B3 29 情戒解锁成功 #tagMCLoveRingUnlockOK + +class tagMCLoveRingUnlockOK(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + 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 = 0xB3 + self.SubCmd = 0x29 + return + + def GetLength(self): + return sizeof(tagMCLoveRingUnlockOK) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 29 情戒解锁成功 //tagMCLoveRingUnlockOK: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagMCLoveRingUnlockOK=tagMCLoveRingUnlockOK() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingUnlockOK.Cmd,m_NAtagMCLoveRingUnlockOK.SubCmd))] = m_NAtagMCLoveRingUnlockOK + + +#------------------------------------------------------ # B4 11 新增恶意攻击玩家 #tagMCAddMaliciousAtkPlayer class tagMCAddMaliciousAtkPlayer(Structure): @@ -29981,6 +45768,226 @@ m_NAtagMCAddMaliciousAtkPlayer=tagMCAddMaliciousAtkPlayer() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddMaliciousAtkPlayer.Cmd,m_NAtagMCAddMaliciousAtkPlayer.SubCmd))] = m_NAtagMCAddMaliciousAtkPlayer + + +#------------------------------------------------------ +# B4 15 Boss伤血排行榜信息 #tagMCBossHurtValueRankInfo + +class tagMCBossHurtValueAssist(Structure): + PlayerID = 0 #(DWORD PlayerID)// 助战玩家ID + PlayerName = "" #(char PlayerName[33]) + HurtValue = 0 #(DWORD HurtValue)//不超过亿部分 + HurtValueEx = 0 #(DWORD HurtValueEx)//支持超过20亿 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + 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.PlayerName) + data = CommFunc.WriteDWORD(data, self.HurtValue) + data = CommFunc.WriteDWORD(data, self.HurtValueEx) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.PlayerID, + self.PlayerName, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagMCBossHurtValue(Structure): + HurtType = 0 #(BYTE HurtType)// 伤血类型 1-玩家,2-队伍 + HurtID = 0 #(DWORD HurtID)//玩家时为玩家ID,队伍时为队伍ID + HurtName = "" #(char HurtName[33])// 名称 + HurtValue = 0 #(DWORD HurtValue)//不超过亿部分 + HurtValueEx = 0 #(DWORD HurtValueEx)//支持超过20亿 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtName,_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.HurtType = 0 + self.HurtID = 0 + self.HurtName = "" + self.HurtValue = 0 + self.HurtValueEx = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 33 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.HurtType) + data = CommFunc.WriteDWORD(data, self.HurtID) + data = CommFunc.WriteString(data, 33, self.HurtName) + data = CommFunc.WriteDWORD(data, self.HurtValue) + data = CommFunc.WriteDWORD(data, self.HurtValueEx) + return data + + def OutputString(self): + DumpString = ''' + HurtType:%d, + HurtID:%d, + HurtName:%s, + HurtValue:%d, + HurtValueEx:%d + '''\ + %( + self.HurtType, + self.HurtID, + self.HurtName, + self.HurtValue, + self.HurtValueEx + ) + return DumpString + + +class tagMCBossHurtValueRankInfo(Structure): + Head = tagHead() + ObjID = 0 #(DWORD ObjID)//NPC实例ID + HurtCount = 0 #(BYTE HurtCount)//伤血数目 + HurtValueList = list() #(vector<tagMCBossHurtValue> HurtValueList) + AssistHurtCount = 0 #(BYTE AssistHurtCount)//助战伤血数目 + AssistHurtValueList = list() #(vector<tagMCBossHurtValueAssist> AssistHurtValueList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HurtCount): + temHurtValueList = tagMCBossHurtValue() + _pos = temHurtValueList.ReadData(_lpData, _pos) + self.HurtValueList.append(temHurtValueList) + self.AssistHurtCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AssistHurtCount): + temAssistHurtValueList = tagMCBossHurtValueAssist() + _pos = temAssistHurtValueList.ReadData(_lpData, _pos) + self.AssistHurtValueList.append(temAssistHurtValueList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x15 + self.ObjID = 0 + self.HurtCount = 0 + self.HurtValueList = list() + self.AssistHurtCount = 0 + self.AssistHurtValueList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.HurtCount): + length += self.HurtValueList[i].GetLength() + length += 1 + for i in range(self.AssistHurtCount): + length += self.AssistHurtValueList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.ObjID) + data = CommFunc.WriteBYTE(data, self.HurtCount) + for i in range(self.HurtCount): + data = CommFunc.WriteString(data, self.HurtValueList[i].GetLength(), self.HurtValueList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AssistHurtCount) + for i in range(self.AssistHurtCount): + data = CommFunc.WriteString(data, self.AssistHurtValueList[i].GetLength(), self.AssistHurtValueList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ObjID:%d, + HurtCount:%d, + HurtValueList:%s, + AssistHurtCount:%d, + AssistHurtValueList:%s + '''\ + %( + self.Head.OutputString(), + self.ObjID, + self.HurtCount, + "...", + self.AssistHurtCount, + "..." + ) + return DumpString + + +m_NAtagMCBossHurtValueRankInfo=tagMCBossHurtValueRankInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossHurtValueRankInfo.Head.Cmd,m_NAtagMCBossHurtValueRankInfo.Head.SubCmd))] = m_NAtagMCBossHurtValueRankInfo #------------------------------------------------------ @@ -30853,6 +46860,7 @@ ("ObjID", c_int), ("AttackType", c_ubyte), #爆击, miss ("HurtHP", c_int), + ("HurtHPEx", c_int), ("CurHP", c_int), ("CurHPEx", c_int), ] @@ -30871,6 +46879,7 @@ self.ObjID = 0 self.AttackType = 0 self.HurtHP = 0 + self.HurtHPEx = 0 self.CurHP = 0 self.CurHPEx = 0 return @@ -30887,6 +46896,7 @@ ObjID:%d, AttackType:%d, HurtHP:%d, + HurtHPEx:%d, CurHP:%d, CurHPEx:%d '''\ @@ -30895,6 +46905,7 @@ self.ObjID, self.AttackType, self.HurtHP, + self.HurtHPEx, self.CurHP, self.CurHPEx ) @@ -30910,6 +46921,7 @@ PosY = 0 #(WORD PosY) HurtCount = 0 #(WORD HurtCount)//伤害数目 HurtList = list() #(vector<tagSkillPosHurtObj> HurtList)//size = HurtCount + SkillElementID = 0 #(WORD SkillElementID)//专精技能ID data = None def __init__(self): @@ -30931,6 +46943,7 @@ temHurtList = tagSkillPosHurtObj() _pos = temHurtList.ReadData(_lpData, _pos) self.HurtList.append(temHurtList) + self.SkillElementID,_pos = CommFunc.ReadWORD(_lpData, _pos) return _pos def Clear(self): @@ -30945,6 +46958,7 @@ self.PosY = 0 self.HurtCount = 0 self.HurtList = list() + self.SkillElementID = 0 return def GetLength(self): @@ -30958,6 +46972,7 @@ length += 2 for i in range(self.HurtCount): length += self.HurtList[i].GetLength() + length += 2 return length @@ -30972,6 +46987,7 @@ data = CommFunc.WriteWORD(data, self.HurtCount) for i in range(self.HurtCount): data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.SkillElementID) return data def OutputString(self): @@ -30983,7 +46999,8 @@ PosX:%d, PosY:%d, HurtCount:%d, - HurtList:%s + HurtList:%s, + SkillElementID:%d '''\ %( self.Head.OutputString(), @@ -30993,7 +47010,8 @@ self.PosX, self.PosY, self.HurtCount, - "..." + "...", + self.SkillElementID ) return DumpString @@ -31228,6 +47246,126 @@ m_NAtagMCTJGInfo=tagMCTJGInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Head.Cmd,m_NAtagMCTJGInfo.Head.SubCmd))] = m_NAtagMCTJGInfo + + +#------------------------------------------------------ +# C1 09 跨服排位玩家信息 #tagMCChampionshipPlayerInfo + +class tagMCChampionshipPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("WorshipCount", c_ubyte), # 今日已膜拜次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x09 + 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 = 0x09 + self.WorshipCount = 0 + return + + def GetLength(self): + return sizeof(tagMCChampionshipPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 09 跨服排位玩家信息 //tagMCChampionshipPlayerInfo: + Cmd:%s, + SubCmd:%s, + WorshipCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.WorshipCount + ) + return DumpString + + +m_NAtagMCChampionshipPlayerInfo=tagMCChampionshipPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChampionshipPlayerInfo.Cmd,m_NAtagMCChampionshipPlayerInfo.SubCmd))] = m_NAtagMCChampionshipPlayerInfo + + +#------------------------------------------------------ +# C1 07 跨服战场玩家信息 #tagMCCrossBattlefieldPlayerInfo + +class tagMCCrossBattlefieldPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BuyOpenCountToday", c_ubyte), # 今日已购买开启战场次数 + ("HighScoreToday", c_int), # 今日最高积分 + ("EnterCountWeek", c_int), # 本周总参与次数 + ("BuyOpenCountWeek", c_int), # 本周总购买召集次数 + ("HighScoreTotalWeek", c_int), # 本周每日最高分累加总分 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x07 + self.BuyOpenCountToday = 0 + self.HighScoreToday = 0 + self.EnterCountWeek = 0 + self.BuyOpenCountWeek = 0 + self.HighScoreTotalWeek = 0 + return + + def GetLength(self): + return sizeof(tagMCCrossBattlefieldPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 07 跨服战场玩家信息 //tagMCCrossBattlefieldPlayerInfo: + Cmd:%s, + SubCmd:%s, + BuyOpenCountToday:%d, + HighScoreToday:%d, + EnterCountWeek:%d, + BuyOpenCountWeek:%d, + HighScoreTotalWeek:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BuyOpenCountToday, + self.HighScoreToday, + self.EnterCountWeek, + self.BuyOpenCountWeek, + self.HighScoreTotalWeek + ) + return DumpString + + +m_NAtagMCCrossBattlefieldPlayerInfo=tagMCCrossBattlefieldPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossBattlefieldPlayerInfo.Cmd,m_NAtagMCCrossBattlefieldPlayerInfo.SubCmd))] = m_NAtagMCCrossBattlefieldPlayerInfo #------------------------------------------------------ @@ -31547,6 +47685,58 @@ #------------------------------------------------------ +# C1 08 幸运云购玩家信息 #tagMCLuckyCloudBuyPlayerInfo + +class tagMCLuckyCloudBuyPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BuyCount", c_ushort), # 本轮已购买份数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x08 + 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 = 0x08 + self.BuyCount = 0 + return + + def GetLength(self): + return sizeof(tagMCLuckyCloudBuyPlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 08 幸运云购玩家信息 //tagMCLuckyCloudBuyPlayerInfo: + Cmd:%s, + SubCmd:%s, + BuyCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BuyCount + ) + return DumpString + + +m_NAtagMCLuckyCloudBuyPlayerInfo=tagMCLuckyCloudBuyPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyCloudBuyPlayerInfo.Cmd,m_NAtagMCLuckyCloudBuyPlayerInfo.SubCmd))] = m_NAtagMCLuckyCloudBuyPlayerInfo + + +#------------------------------------------------------ # C1 04 准备进入跨服服务器 #tagMCPrepareEnterCrossServer class tagMCPrepareEnterCrossServer(Structure): @@ -31643,4 +47833,4 @@ m_NAtagMCStartEnterCrossServer=tagMCStartEnterCrossServer() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartEnterCrossServer.Cmd,m_NAtagMCStartEnterCrossServer.SubCmd))] = m_NAtagMCStartEnterCrossServer +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartEnterCrossServer.Cmd,m_NAtagMCStartEnterCrossServer.SubCmd))] = m_NAtagMCStartEnterCrossServer \ No newline at end of file diff --git a/Tool/RobotTest/Protocol/PacketsSend.py b/Tool/RobotTest/Protocol/PacketsSend.py index 1ae5f43..ba4ef2b 100644 --- a/Tool/RobotTest/Protocol/PacketsSend.py +++ b/Tool/RobotTest/Protocol/PacketsSend.py @@ -5204,7 +5204,7 @@ Phone = 0 #(BYTE Phone)//是否绑定手机 ServerID = 0 #(DWORD ServerID)//服务器ID Adult = 0 #(BYTE Adult)//是否成年 0未成年 1成年 - ExtraLen = 0 #(BYTE ExtraLen)//扩展长度 + ExtraLen = 0 #(WORD ExtraLen)//扩展长度 Extra = "" #(String Extra)//扩展内容,根据不同平台而定 data = None @@ -5229,7 +5229,7 @@ self.Phone,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Adult,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ExtraLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExtraLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Extra,_pos = CommFunc.ReadString(_lpData, _pos,self.ExtraLen) return _pos @@ -5269,7 +5269,7 @@ length += 1 length += 4 length += 1 - length += 1 + length += 2 length += len(self.Extra) return length @@ -5289,7 +5289,7 @@ data = CommFunc.WriteBYTE(data, self.Phone) data = CommFunc.WriteDWORD(data, self.ServerID) data = CommFunc.WriteBYTE(data, self.Adult) - data = CommFunc.WriteBYTE(data, self.ExtraLen) + data = CommFunc.WriteWORD(data, self.ExtraLen) data = CommFunc.WriteString(data, self.ExtraLen, self.Extra) return data @@ -21445,4 +21445,4 @@ m_NAtagCGMCMD=tagCGMCMD() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMCMD.Head.Cmd,m_NAtagCGMCMD.Head.SubCmd))] = m_NAtagCGMCMD +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMCMD.Head.Cmd,m_NAtagCGMCMD.Head.SubCmd))] = m_NAtagCGMCMD \ No newline at end of file diff --git a/Tool/RobotTest/Protocol/PacketsSendPY.py b/Tool/RobotTest/Protocol/PacketsSendPY.py index a765658..f32553e 100644 --- a/Tool/RobotTest/Protocol/PacketsSendPY.py +++ b/Tool/RobotTest/Protocol/PacketsSendPY.py @@ -706,58 +706,6 @@ #------------------------------------------------------ -# A4 05 开启家族boss副本 #tagCGOpenFamilyBossFB - -class tagCGOpenFamilyBossFB(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), # 开启的副本地图ID - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA4 - self.SubCmd = 0x05 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xA4 - self.SubCmd = 0x05 - self.MapID = 0 - return - - def GetLength(self): - return sizeof(tagCGOpenFamilyBossFB) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A4 05 开启家族boss副本 //tagCGOpenFamilyBossFB: - Cmd:%s, - SubCmd:%s, - MapID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MapID - ) - return DumpString - - -m_NAtagCGOpenFamilyBossFB=tagCGOpenFamilyBossFB() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGOpenFamilyBossFB.Cmd,m_NAtagCGOpenFamilyBossFB.SubCmd))] = m_NAtagCGOpenFamilyBossFB - - -#------------------------------------------------------ # A4 04 创建家族 #tagCGPyCreatFamily class tagCGPyCreatFamily(Structure): @@ -1245,6 +1193,162 @@ m_NAtagCGFuzzySearchPlayer=tagCGFuzzySearchPlayer() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGFuzzySearchPlayer.Head.Cmd,m_NAtagCGFuzzySearchPlayer.Head.SubCmd))] = m_NAtagCGFuzzySearchPlayer + + +#------------------------------------------------------ +# A9 01 获取Boss首杀奖励 #tagCGGetBossFirstKillAward + +class tagCGGetBossFirstKillAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("NPCID", c_int), + ("AwardType", c_ubyte), # 0-首杀红包奖励;1-个人首杀奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + self.SubCmd = 0x01 + 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 = 0xA9 + self.SubCmd = 0x01 + self.NPCID = 0 + self.AwardType = 0 + return + + def GetLength(self): + return sizeof(tagCGGetBossFirstKillAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 01 获取Boss首杀奖励 //tagCGGetBossFirstKillAward: + Cmd:%s, + SubCmd:%s, + NPCID:%d, + AwardType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.NPCID, + self.AwardType + ) + return DumpString + + +m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward + + +#------------------------------------------------------ +# A9 A5 查看竞技场对战玩家最新信息 #tagCGQueryArenaBattlePlayer + +class tagCGQueryArenaBattlePlayer(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), #目标玩家ID,仅支持查真实玩家 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + self.SubCmd = 0xA5 + 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 = 0xA9 + self.SubCmd = 0xA5 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGQueryArenaBattlePlayer) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 A5 查看竞技场对战玩家最新信息 //tagCGQueryArenaBattlePlayer: + Cmd:%s, + SubCmd:%s, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID + ) + return DumpString + + +m_NAtagCGQueryArenaBattlePlayer=tagCGQueryArenaBattlePlayer() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryArenaBattlePlayer.Cmd,m_NAtagCGQueryArenaBattlePlayer.SubCmd))] = m_NAtagCGQueryArenaBattlePlayer + + +#------------------------------------------------------ +# A9 A8 查看竞技场对战记录 #tagCGQueryArenaBattleRecord + +class tagCGQueryArenaBattleRecord(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA9 + self.SubCmd = 0xA8 + 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 = 0xA9 + self.SubCmd = 0xA8 + return + + def GetLength(self): + return sizeof(tagCGQueryArenaBattleRecord) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 A8 查看竞技场对战记录 //tagCGQueryArenaBattleRecord: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGQueryArenaBattleRecord=tagCGQueryArenaBattleRecord() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryArenaBattleRecord.Cmd,m_NAtagCGQueryArenaBattleRecord.SubCmd))] = m_NAtagCGQueryArenaBattleRecord #------------------------------------------------------ @@ -1904,6 +2008,115 @@ #------------------------------------------------------ +# B0 13 取消协助Boss #tagCGCancelAssistBoss + +class tagCGCancelAssistBoss(Structure): + Head = tagHead() + AssistGUID = "" #(char AssistGUID[40])//协助GUID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x13 + self.AssistGUID = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 40 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 40, self.AssistGUID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AssistGUID:%s + '''\ + %( + self.Head.OutputString(), + self.AssistGUID + ) + return DumpString + + +m_NAtagCGCancelAssistBoss=tagCGCancelAssistBoss() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCancelAssistBoss.Head.Cmd,m_NAtagCGCancelAssistBoss.Head.SubCmd))] = m_NAtagCGCancelAssistBoss + + +#------------------------------------------------------ +# B0 15 接收协助感谢礼物 #tagCGGetAssistThanksGift + +class tagCGGetAssistThanksGift(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsPreview", c_ubyte), #是否预览,非预览即确认领取,无额外奖励确认时也需要回复领取包代表已读 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x15 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x15 + self.IsPreview = 0 + return + + def GetLength(self): + return sizeof(tagCGGetAssistThanksGift) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 15 接收协助感谢礼物 //tagCGGetAssistThanksGift: + Cmd:%s, + SubCmd:%s, + IsPreview:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsPreview + ) + return DumpString + + +m_NAtagCGGetAssistThanksGift=tagCGGetAssistThanksGift() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetAssistThanksGift.Cmd,m_NAtagCGGetAssistThanksGift.SubCmd))] = m_NAtagCGGetAssistThanksGift + + +#------------------------------------------------------ #B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState class tagQueryFamilyArrestOverState(Structure): @@ -1949,6 +2162,335 @@ m_NAtagQueryFamilyArrestOverState=tagQueryFamilyArrestOverState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestOverState.Cmd,m_NAtagQueryFamilyArrestOverState.SubCmd))] = m_NAtagQueryFamilyArrestOverState + + +#------------------------------------------------------ +# B0 12 开始协助Boss #tagCGStartAssistBoss + +class tagCGStartAssistBoss(Structure): + Head = tagHead() + AssistGUID = "" #(char AssistGUID[40])//协助GUID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x12 + self.AssistGUID = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 40 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 40, self.AssistGUID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AssistGUID:%s + '''\ + %( + self.Head.OutputString(), + self.AssistGUID + ) + return DumpString + + +m_NAtagCGStartAssistBoss=tagCGStartAssistBoss() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGStartAssistBoss.Head.Cmd,m_NAtagCGStartAssistBoss.Head.SubCmd))] = m_NAtagCGStartAssistBoss + + +#------------------------------------------------------ +# B0 14 使用协助感谢礼盒 #tagCGUseAssistThanksGift + +class tagCGUseAssistThanksGift(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ItemID", c_int), + ("IsPreview", c_ubyte), #是否预览,非预览即确认使用 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x14 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x14 + self.ItemID = 0 + self.IsPreview = 0 + return + + def GetLength(self): + return sizeof(tagCGUseAssistThanksGift) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 14 使用协助感谢礼盒 //tagCGUseAssistThanksGift: + Cmd:%s, + SubCmd:%s, + ItemID:%d, + IsPreview:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ItemID, + self.IsPreview + ) + return DumpString + + +m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift + + +#------------------------------------------------------ +# B3 19 提升魅力等级 #tagCGCharmLVUp + +class tagCGCharmLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x19 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x19 + return + + def GetLength(self): + return sizeof(tagCGCharmLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 19 提升魅力等级 //tagCGCharmLVUp: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGCharmLVUp=tagCGCharmLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmLVUp.Cmd,m_NAtagCGCharmLVUp.SubCmd))] = m_NAtagCGCharmLVUp + + +#------------------------------------------------------ +# B3 09 魅力贡献榜查看 #tagCGCharmOfferBillboardQuery + +class tagCGCharmOfferBillboardQuery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 魅力玩家ID + ("QueryType", c_ubyte), # 查看类型: 1-总榜,2-周榜,3-日榜 + ("QueryCount", c_ubyte), # 查看名次数量,最大255 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x09 + self.PlayerID = 0 + self.QueryType = 0 + self.QueryCount = 0 + return + + def GetLength(self): + return sizeof(tagCGCharmOfferBillboardQuery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 09 魅力贡献榜查看 //tagCGCharmOfferBillboardQuery: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + QueryType:%d, + QueryCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.QueryType, + self.QueryCount + ) + return DumpString + + +m_NAtagCGCharmOfferBillboardQuery=tagCGCharmOfferBillboardQuery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmOfferBillboardQuery.Cmd,m_NAtagCGCharmOfferBillboardQuery.SubCmd))] = m_NAtagCGCharmOfferBillboardQuery + + +#------------------------------------------------------ +# B3 16 和平离婚回应 #tagGCMarryBreakResponse + +class tagGCMarryBreakResponse(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsOK", c_ubyte), # 是否同意,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x16 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x16 + self.IsOK = 0 + return + + def GetLength(self): + return sizeof(tagGCMarryBreakResponse) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 16 和平离婚回应 //tagGCMarryBreakResponse: + Cmd:%s, + SubCmd:%s, + IsOK:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsOK + ) + return DumpString + + +m_NAtagGCMarryBreakResponse=tagGCMarryBreakResponse() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryBreakResponse.Cmd,m_NAtagGCMarryBreakResponse.SubCmd))] = m_NAtagGCMarryBreakResponse + + +#------------------------------------------------------ +# B3 12 提亲回应 #tagCGMarryResponse + +class tagCGMarryResponse(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ReqPlayerID", c_int), # 提亲的玩家ID + ("IsOK", c_ubyte), # 是否同意,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + 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 = 0xB3 + self.SubCmd = 0x12 + self.ReqPlayerID = 0 + self.IsOK = 0 + return + + def GetLength(self): + return sizeof(tagCGMarryResponse) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 12 提亲回应 //tagCGMarryResponse: + Cmd:%s, + SubCmd:%s, + ReqPlayerID:%d, + IsOK:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ReqPlayerID, + self.IsOK + ) + return DumpString + + +m_NAtagCGMarryResponse=tagCGMarryResponse() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMarryResponse.Cmd,m_NAtagCGMarryResponse.SubCmd))] = m_NAtagCGMarryResponse #------------------------------------------------------ @@ -3289,6 +3831,58 @@ #------------------------------------------------------ +# B9 11 请求加入队伍 #tagCGRequestJoinTeam + +class tagCGRequestJoinTeam(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TeamID", c_int), # 目标队伍ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB9 + self.SubCmd = 0x11 + self.TeamID = 0 + return + + def GetLength(self): + return sizeof(tagCGRequestJoinTeam) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 11 请求加入队伍 //tagCGRequestJoinTeam: + Cmd:%s, + SubCmd:%s, + TeamID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TeamID + ) + return DumpString + + +m_NAtagCGRequestJoinTeam=tagCGRequestJoinTeam() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGRequestJoinTeam.Cmd,m_NAtagCGRequestJoinTeam.SubCmd))] = m_NAtagCGRequestJoinTeam + + +#------------------------------------------------------ # B9 09 队员进入副本准备选择 #tagCGTeamMemberPrepare class tagCGTeamMemberPrepare(Structure): @@ -3341,6 +3935,422 @@ #------------------------------------------------------ +# C0 21 跨服排位仙官申请回应 #tagCGChampionshipOfficialApplyReply + +class tagCGChampionshipOfficialApplyReply(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #申请官职ID + ("PlayerID", c_int), #申请的玩家ID + ("IsOK", c_ubyte), #是否同意;1-是;0-否 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x21 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.PlayerID = 0 + self.IsOK = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialApplyReply) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 21 跨服排位仙官申请回应 //tagCGChampionshipOfficialApplyReply: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d, + PlayerID:%d, + IsOK:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID, + self.PlayerID, + self.IsOK + ) + return DumpString + + +m_NAtagCGChampionshipOfficialApplyReply=tagCGChampionshipOfficialApplyReply() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialApplyReply.Cmd,m_NAtagCGChampionshipOfficialApplyReply.SubCmd))] = m_NAtagCGChampionshipOfficialApplyReply + + +#------------------------------------------------------ +# C0 23 跨服排位仙官挑战记录查询 #tagCGChampionshipOfficialChallengeQuery + +class tagCGChampionshipOfficialChallengeQuery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #查询官职ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x23 + self.MainOfficialID = 0 + self.OfficialID = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialChallengeQuery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 23 跨服排位仙官挑战记录查询 //tagCGChampionshipOfficialChallengeQuery: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID + ) + return DumpString + + +m_NAtagCGChampionshipOfficialChallengeQuery=tagCGChampionshipOfficialChallengeQuery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialChallengeQuery.Cmd,m_NAtagCGChampionshipOfficialChallengeQuery.SubCmd))] = m_NAtagCGChampionshipOfficialChallengeQuery + + +#------------------------------------------------------ +# C0 24 跨服排位辞退下级仙官 #tagCGChampionshipOfficialKick + +class tagCGChampionshipOfficialKick(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #目标官职ID + ("PlayerID", c_int), #目标玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x24 + 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 = 0x24 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialKick) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 24 跨服排位辞退下级仙官 //tagCGChampionshipOfficialKick: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID, + self.PlayerID + ) + return DumpString + + +m_NAtagCGChampionshipOfficialKick=tagCGChampionshipOfficialKick() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialKick.Cmd,m_NAtagCGChampionshipOfficialKick.SubCmd))] = m_NAtagCGChampionshipOfficialKick + + +#------------------------------------------------------ +# C0 25 跨服排位主动离任仙官 #tagCGChampionshipOfficialLeave + +class tagCGChampionshipOfficialLeave(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #离任官职ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x25 + 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 = 0x25 + self.MainOfficialID = 0 + self.OfficialID = 0 + return + + def GetLength(self): + return sizeof(tagCGChampionshipOfficialLeave) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 25 跨服排位主动离任仙官 //tagCGChampionshipOfficialLeave: + Cmd:%s, + SubCmd:%s, + MainOfficialID:%d, + OfficialID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MainOfficialID, + self.OfficialID + ) + return DumpString + + +m_NAtagCGChampionshipOfficialLeave=tagCGChampionshipOfficialLeave() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChampionshipOfficialLeave.Cmd,m_NAtagCGChampionshipOfficialLeave.SubCmd))] = m_NAtagCGChampionshipOfficialLeave + + +#------------------------------------------------------ +# C0 09 跨服战场召集场次修改 #tagCGCrossBattlefieldCallChange + +class tagCGCrossBattlefieldCallChange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("ServerOnly", c_ubyte), #是否仅本服玩家可加入,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x09 + 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 = 0x09 + self.Hour = 0 + self.Minute = 0 + self.ServerOnly = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldCallChange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 09 跨服战场召集场次修改 //tagCGCrossBattlefieldCallChange: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + ServerOnly:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.ServerOnly + ) + return DumpString + + +m_NAtagCGCrossBattlefieldCallChange=tagCGCrossBattlefieldCallChange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallChange.Cmd,m_NAtagCGCrossBattlefieldCallChange.SubCmd))] = m_NAtagCGCrossBattlefieldCallChange + + +#------------------------------------------------------ +# C0 08 跨服战场召集场次踢人 #tagCGCrossBattlefieldCallKick + +class tagCGCrossBattlefieldCallKick(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("TagPlayerID", c_int), #目标玩家ID,即要被踢出去的玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x08 + 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 = 0x08 + self.Hour = 0 + self.Minute = 0 + self.TagPlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldCallKick) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 08 跨服战场召集场次踢人 //tagCGCrossBattlefieldCallKick: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + TagPlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.TagPlayerID + ) + return DumpString + + +m_NAtagCGCrossBattlefieldCallKick=tagCGCrossBattlefieldCallKick() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallKick.Cmd,m_NAtagCGCrossBattlefieldCallKick.SubCmd))] = m_NAtagCGCrossBattlefieldCallKick + + +#------------------------------------------------------ +# C0 07 跨服战场加入召集场次 #tagCGCrossBattlefieldJoinByCall + +class tagCGCrossBattlefieldJoinByCall(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("BuyPlayerID", c_int), #加入目标玩家的召集队伍,即购买召集场的玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC0 + self.SubCmd = 0x07 + self.Hour = 0 + self.Minute = 0 + self.BuyPlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCGCrossBattlefieldJoinByCall) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 07 跨服战场加入召集场次 //tagCGCrossBattlefieldJoinByCall: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + BuyPlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.BuyPlayerID + ) + return DumpString + + +m_NAtagCGCrossBattlefieldJoinByCall=tagCGCrossBattlefieldJoinByCall() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldJoinByCall.Cmd,m_NAtagCGCrossBattlefieldJoinByCall.SubCmd))] = m_NAtagCGCrossBattlefieldJoinByCall + + +#------------------------------------------------------ # C0 03 强制退出跨服状态 #tagCGForceQuitCrossState class tagCGForceQuitCrossState(Structure): @@ -3386,6 +4396,166 @@ m_NAtagCGForceQuitCrossState=tagCGForceQuitCrossState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGForceQuitCrossState.Cmd,m_NAtagCGForceQuitCrossState.SubCmd))] = m_NAtagCGForceQuitCrossState + + +#------------------------------------------------------ +# C0 06 查询幸运云购开奖记录 #tagCGQueryLuckyCloudBuyLotteryRec + +class tagCGQueryLuckyCloudBuyLotteryRec(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #查询分区ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x06 + 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 = 0x06 + self.ZoneID = 0 + return + + def GetLength(self): + return sizeof(tagCGQueryLuckyCloudBuyLotteryRec) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 06 查询幸运云购开奖记录 //tagCGQueryLuckyCloudBuyLotteryRec: + Cmd:%s, + SubCmd:%s, + ZoneID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID + ) + return DumpString + + +m_NAtagCGQueryLuckyCloudBuyLotteryRec=tagCGQueryLuckyCloudBuyLotteryRec() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyLotteryRec.Cmd,m_NAtagCGQueryLuckyCloudBuyLotteryRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyLotteryRec + + +#------------------------------------------------------ +# C0 05 查询幸运云购购买号码记录 #tagCGQueryLuckyCloudBuyNumRec + +class tagCGQueryLuckyCloudBuyNumRec(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x05 + 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 = 0x05 + return + + def GetLength(self): + return sizeof(tagCGQueryLuckyCloudBuyNumRec) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 05 查询幸运云购购买号码记录 //tagCGQueryLuckyCloudBuyNumRec: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGQueryLuckyCloudBuyNumRec=tagCGQueryLuckyCloudBuyNumRec() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryLuckyCloudBuyNumRec.Cmd,m_NAtagCGQueryLuckyCloudBuyNumRec.SubCmd))] = m_NAtagCGQueryLuckyCloudBuyNumRec + + +#------------------------------------------------------ +# C0 04 查看跨服排行榜 #tagCGViewCrossBillboard + +class tagCGViewCrossBillboard(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Type", c_ubyte), #榜单类型 + ("GroupValue1", c_ubyte), # 分组值1 + ("GroupValue2", c_ubyte), # 分组值2,与分组值1组合归为同组榜单数据 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + self.SubCmd = 0x04 + 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 = 0x04 + self.Type = 0 + self.GroupValue1 = 0 + self.GroupValue2 = 0 + return + + def GetLength(self): + return sizeof(tagCGViewCrossBillboard) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 04 查看跨服排行榜 //tagCGViewCrossBillboard: + Cmd:%s, + SubCmd:%s, + Type:%d, + GroupValue1:%d, + GroupValue2:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Type, + self.GroupValue1, + self.GroupValue2 + ) + return DumpString + + +m_NAtagCGViewCrossBillboard=tagCGViewCrossBillboard() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossBillboard.Cmd,m_NAtagCGViewCrossBillboard.SubCmd))] = m_NAtagCGViewCrossBillboard #------------------------------------------------------ @@ -3498,6 +4668,196 @@ m_NAtagCGViewCrossPlayerInfo=tagCGViewCrossPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewCrossPlayerInfo.Cmd,m_NAtagCGViewCrossPlayerInfo.SubCmd))] = m_NAtagCGViewCrossPlayerInfo + + +#------------------------------------------------------ +# A1 21 转职业 #tagCMChangeJob + +class tagCMChangeJob(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagJob", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA1 + self.SubCmd = 0x21 + self.TagJob = 0 + return + + def GetLength(self): + return sizeof(tagCMChangeJob) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 21 转职业 //tagCMChangeJob: + Cmd:%s, + SubCmd:%s, + TagJob:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagJob + ) + return DumpString + + +m_NAtagCMChangeJob=tagCMChangeJob() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeJob.Cmd,m_NAtagCMChangeJob.SubCmd))] = m_NAtagCMChangeJob + + +#------------------------------------------------------ +# A1 25 代币购买充值商品编号商品 #tagCMCoinBuyOrderInfo + +class tagCMCoinBuyOrderInfo(Structure): + Head = tagHead() + AppIDLen = 0 #(BYTE AppIDLen) + AppID = "" #(String AppID) + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo)//商品编号 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x25 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AppIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AppID,_pos = CommFunc.ReadString(_lpData, _pos,self.AppIDLen) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x25 + self.AppIDLen = 0 + self.AppID = "" + self.OrderInfoLen = 0 + self.OrderInfo = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.AppID) + length += 1 + length += len(self.OrderInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AppIDLen) + data = CommFunc.WriteString(data, self.AppIDLen, self.AppID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AppIDLen:%d, + AppID:%s, + OrderInfoLen:%d, + OrderInfo:%s + '''\ + %( + self.Head.OutputString(), + self.AppIDLen, + self.AppID, + self.OrderInfoLen, + self.OrderInfo + ) + return DumpString + + +m_NAtagCMCoinBuyOrderInfo=tagCMCoinBuyOrderInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCoinBuyOrderInfo.Head.Cmd,m_NAtagCMCoinBuyOrderInfo.Head.SubCmd))] = m_NAtagCMCoinBuyOrderInfo + + +#------------------------------------------------------ +# A1 20 货币兑换 #tagCMMoneyExchange + +class tagCMMoneyExchange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("SrcMoneyType", c_ubyte), # 源货币类型 + ("TagMoneyType", c_ubyte), # 目标货币类型 + ("ExchangeValue", c_int), # 兑换数量(消耗源货币的数量) + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x20 + 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 = 0xA1 + self.SubCmd = 0x20 + self.SrcMoneyType = 0 + self.TagMoneyType = 0 + self.ExchangeValue = 0 + return + + def GetLength(self): + return sizeof(tagCMMoneyExchange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 20 货币兑换 //tagCMMoneyExchange: + Cmd:%s, + SubCmd:%s, + SrcMoneyType:%d, + TagMoneyType:%d, + ExchangeValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.SrcMoneyType, + self.TagMoneyType, + self.ExchangeValue + ) + return DumpString + + +m_NAtagCMMoneyExchange=tagCMMoneyExchange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMoneyExchange.Cmd,m_NAtagCMMoneyExchange.SubCmd))] = m_NAtagCMMoneyExchange #------------------------------------------------------ @@ -3618,6 +4978,58 @@ m_NAtagCMPCInfo=tagCMPCInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPCInfo.Head.Cmd,m_NAtagCMPCInfo.Head.SubCmd))] = m_NAtagCMPCInfo + + +#------------------------------------------------------ +# A1 23 查询充值次数 #tagCMQueryCoinToGoldCount + +class tagCMQueryCoinToGoldCount(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RecordID", c_ushort), #充值记录ID,也就是充值ID,发0则查全部 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA1 + self.SubCmd = 0x23 + self.RecordID = 0 + return + + def GetLength(self): + return sizeof(tagCMQueryCoinToGoldCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 23 查询充值次数 //tagCMQueryCoinToGoldCount: + Cmd:%s, + SubCmd:%s, + RecordID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RecordID + ) + return DumpString + + +m_NAtagCMQueryCoinToGoldCount=tagCMQueryCoinToGoldCount() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryCoinToGoldCount.Cmd,m_NAtagCMQueryCoinToGoldCount.SubCmd))] = m_NAtagCMQueryCoinToGoldCount #------------------------------------------------------ @@ -5276,6 +6688,58 @@ #------------------------------------------------------ +# A2 35 选择境界难度层级 #tagCMSelectRealmDifficulty + +class tagCMSelectRealmDifficulty(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RealmDifficulty", c_ubyte), #境界难度 = 100 + 所选境界等级,如境界13,则发113 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA2 + self.SubCmd = 0x35 + 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 = 0xA2 + self.SubCmd = 0x35 + self.RealmDifficulty = 0 + return + + def GetLength(self): + return sizeof(tagCMSelectRealmDifficulty) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A2 35 选择境界难度层级 //tagCMSelectRealmDifficulty: + Cmd:%s, + SubCmd:%s, + RealmDifficulty:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RealmDifficulty + ) + return DumpString + + +m_NAtagCMSelectRealmDifficulty=tagCMSelectRealmDifficulty() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectRealmDifficulty.Cmd,m_NAtagCMSelectRealmDifficulty.SubCmd))] = m_NAtagCMSelectRealmDifficulty + + +#------------------------------------------------------ # A2 30 设置聊天气泡框 #tagCMSetChatBubbleBox class tagCMSetChatBubbleBox(Structure): @@ -5656,6 +7120,58 @@ m_NAtagCMVoiceChat=tagCMVoiceChat() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMVoiceChat.Head.Cmd,m_NAtagCMVoiceChat.Head.SubCmd))] = m_NAtagCMVoiceChat + + +#------------------------------------------------------ +# A2 07 接受任务 #tagCMTakeTask + +class tagCMTakeTask(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TaskID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA2 + self.SubCmd = 0x07 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA2 + self.SubCmd = 0x07 + self.TaskID = 0 + return + + def GetLength(self): + return sizeof(tagCMTakeTask) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A2 07 接受任务 //tagCMTakeTask: + Cmd:%s, + SubCmd:%s, + TaskID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TaskID + ) + return DumpString + + +m_NAtagCMTakeTask=tagCMTakeTask() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTakeTask.Cmd,m_NAtagCMTakeTask.SubCmd))] = m_NAtagCMTakeTask #------------------------------------------------------ @@ -6211,6 +7727,58 @@ #------------------------------------------------------ +# A3 30 装备神装进阶 #tagCMEquipEvolve + +class tagCMEquipEvolve(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("EquipIndex", c_ubyte), # 要进阶的装备在装备背包中索引 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x30 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA3 + self.SubCmd = 0x30 + self.EquipIndex = 0 + return + + def GetLength(self): + return sizeof(tagCMEquipEvolve) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 30 装备神装进阶 //tagCMEquipEvolve: + Cmd:%s, + SubCmd:%s, + EquipIndex:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.EquipIndex + ) + return DumpString + + +m_NAtagCMEquipEvolve=tagCMEquipEvolve() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Cmd,m_NAtagCMEquipEvolve.SubCmd))] = m_NAtagCMEquipEvolve + + +#------------------------------------------------------ #A3 01 装备强化 #tagEquipPlus class tagEquipPlus(Structure): @@ -6316,6 +7884,73 @@ m_NAtagCMEquipPlusEvolve=tagCMEquipPlusEvolve() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPlusEvolve.Cmd,m_NAtagCMEquipPlusEvolve.SubCmd))] = m_NAtagCMEquipPlusEvolve + + +#------------------------------------------------------ +# A3 31 装备神装拆解 #tagCMEquipShenDecompose + +class tagCMEquipShenDecompose(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//所在背包索引的数量 + IndexList = list() #(vector<WORD> IndexList)//所在背包索引列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x31 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.IndexList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x31 + self.Count = 0 + self.IndexList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteWORD(data, self.IndexList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + IndexList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagCMEquipShenDecompose=tagCMEquipShenDecompose() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipShenDecompose.Head.Cmd,m_NAtagCMEquipShenDecompose.Head.SubCmd))] = m_NAtagCMEquipShenDecompose #------------------------------------------------------ @@ -6599,62 +8234,6 @@ #------------------------------------------------------ -# A3 30 装备诛仙装备 #tagCMEquipZhuXianItem - -class tagCMEquipZhuXianItem(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("EquipIndex", c_ubyte), #装备在诛仙装备背包中的索引 - ("ItemIndex", c_ubyte), #装备在诛仙物品背包中的索引 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x30 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x30 - self.EquipIndex = 0 - self.ItemIndex = 0 - return - - def GetLength(self): - return sizeof(tagCMEquipZhuXianItem) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A3 30 装备诛仙装备 //tagCMEquipZhuXianItem: - Cmd:%s, - SubCmd:%s, - EquipIndex:%d, - ItemIndex:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.EquipIndex, - self.ItemIndex - ) - return DumpString - - -m_NAtagCMEquipZhuXianItem=tagCMEquipZhuXianItem() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipZhuXianItem.Cmd,m_NAtagCMEquipZhuXianItem.SubCmd))] = m_NAtagCMEquipZhuXianItem - - -#------------------------------------------------------ # A3 12 守护拾取物品 #tagCMGuardPickupItem class tagCMGuardPickupItem(Structure): @@ -6783,6 +8362,7 @@ ("SubCmd", c_ubyte), ("PackType", c_ubyte), #背包类型 ("ItemIndex", c_ubyte), #物品在背包中索引 + ("IsAll", c_ubyte), #是否处理所有过期物品 ] def __init__(self): @@ -6801,6 +8381,7 @@ self.SubCmd = 0x08 self.PackType = 0 self.ItemIndex = 0 + self.IsAll = 0 return def GetLength(self): @@ -6814,19 +8395,133 @@ Cmd:%s, SubCmd:%s, PackType:%d, - ItemIndex:%d + ItemIndex:%d, + IsAll:%d '''\ %( self.Cmd, self.SubCmd, self.PackType, - self.ItemIndex + self.ItemIndex, + self.IsAll ) return DumpString m_NAtagCMItemTimeout=tagCMItemTimeout() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMItemTimeout.Cmd,m_NAtagCMItemTimeout.SubCmd))] = m_NAtagCMItemTimeout + + +#------------------------------------------------------ +# A3 18 灵器突破 #tagCMLingQiEquipBreak + +class tagCMLingQiEquipBreak(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ItemID", c_int), #突破的物品ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x18 + 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 = 0xA3 + self.SubCmd = 0x18 + self.ItemID = 0 + return + + def GetLength(self): + return sizeof(tagCMLingQiEquipBreak) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 18 灵器突破 //tagCMLingQiEquipBreak: + Cmd:%s, + SubCmd:%s, + ItemID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ItemID + ) + return DumpString + + +m_NAtagCMLingQiEquipBreak=tagCMLingQiEquipBreak() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLingQiEquipBreak.Cmd,m_NAtagCMLingQiEquipBreak.SubCmd))] = m_NAtagCMLingQiEquipBreak + + +#------------------------------------------------------ +# A3 27 灵器培养 #tagCMLingQiTrain + +class tagCMLingQiTrain(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("EquipPlace", c_ubyte), #灵器装备位 + ("TrainType", c_ubyte), #培养类型: 1-基础培养,2-特殊培养,3-百分比培养 + ("UseItemCnt", c_ushort), #消耗材料个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x27 + 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 = 0xA3 + self.SubCmd = 0x27 + self.EquipPlace = 0 + self.TrainType = 0 + self.UseItemCnt = 0 + return + + def GetLength(self): + return sizeof(tagCMLingQiTrain) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 27 灵器培养 //tagCMLingQiTrain: + Cmd:%s, + SubCmd:%s, + EquipPlace:%d, + TrainType:%d, + UseItemCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.EquipPlace, + self.TrainType, + self.UseItemCnt + ) + return DumpString + + +m_NAtagCMLingQiTrain=tagCMLingQiTrain() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLingQiTrain.Cmd,m_NAtagCMLingQiTrain.SubCmd))] = m_NAtagCMLingQiTrain #------------------------------------------------------ @@ -7295,58 +8990,6 @@ #------------------------------------------------------ -# A3 31 卸下诛仙装备 #tagCMUnEquipZhuXianItem - -class tagCMUnEquipZhuXianItem(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("EquipIndex", c_ubyte), #装备在诛仙装备背包中的索引 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x31 - 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 = 0xA3 - self.SubCmd = 0x31 - self.EquipIndex = 0 - return - - def GetLength(self): - return sizeof(tagCMUnEquipZhuXianItem) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A3 31 卸下诛仙装备 //tagCMUnEquipZhuXianItem: - Cmd:%s, - SubCmd:%s, - EquipIndex:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.EquipIndex - ) - return DumpString - - -m_NAtagCMUnEquipZhuXianItem=tagCMUnEquipZhuXianItem() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnEquipZhuXianItem.Cmd,m_NAtagCMUnEquipZhuXianItem.SubCmd))] = m_NAtagCMUnEquipZhuXianItem - - -#------------------------------------------------------ # A3 2B 一键使用属性果实 #tagCMUseAllAttrFruit class tagCMUseAllAttrFruit(Structure): @@ -7526,90 +9169,6 @@ #------------------------------------------------------ -# A3 32 诛仙装备分解 #tagCMZhuXianEquipDecompose - -class tagCMZhuXianEquipDecompose(Structure): - Head = tagHead() - Count = 0 #(BYTE Count)//材料所在背包索引的数量 - IndexList = list() #(vector<WORD> IndexList)//材料所在背包索引列表 - ItemIDList = list() #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表 - IsAuto = 0 #(BYTE IsAuto)//是否自动分解 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x32 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) - self.IndexList.append(value) - for i in range(self.Count): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.ItemIDList.append(value) - self.IsAuto,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x32 - self.Count = 0 - self.IndexList = list() - self.ItemIDList = list() - self.IsAuto = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 2 * self.Count - length += 4 * self.Count - length += 1 - - 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.WriteWORD(data, self.IndexList[i]) - for i in range(self.Count): - data = CommFunc.WriteDWORD(data, self.ItemIDList[i]) - data = CommFunc.WriteBYTE(data, self.IsAuto) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - IndexList:%s, - ItemIDList:%s, - IsAuto:%d - '''\ - %( - self.Head.OutputString(), - self.Count, - "...", - "...", - self.IsAuto - ) - return DumpString - - -m_NAtagCMZhuXianEquipDecompose=tagCMZhuXianEquipDecompose() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMZhuXianEquipDecompose.Head.Cmd,m_NAtagCMZhuXianEquipDecompose.Head.SubCmd))] = m_NAtagCMZhuXianEquipDecompose - - -#------------------------------------------------------ # A5 30 购买魔魂铜钱经验什么的 #tagCMBuySomething class tagCMBuySomething(Structure): @@ -7669,7 +9228,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("HorseID", c_int), #坐骑ID + ("HorseID", c_int), #坐骑幻化ID ] def __init__(self): @@ -7711,6 +9270,62 @@ m_NAtagPlayerActivateHorse=tagPlayerActivateHorse() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerActivateHorse.Cmd,m_NAtagPlayerActivateHorse.SubCmd))] = m_NAtagPlayerActivateHorse + + +#------------------------------------------------------ +# A5 C7 激活大师强化等级 #tagCMActivateMasterPlusLV + +class tagCMActivateMasterPlusLV(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ClassLV", c_ubyte), # 所属装备阶 + ("MasterPlusLV", c_ushort), # 大师强化等级 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0xC7 + 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 = 0xC7 + self.ClassLV = 0 + self.MasterPlusLV = 0 + return + + def GetLength(self): + return sizeof(tagCMActivateMasterPlusLV) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 C7 激活大师强化等级 //tagCMActivateMasterPlusLV: + Cmd:%s, + SubCmd:%s, + ClassLV:%d, + MasterPlusLV:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ClassLV, + self.MasterPlusLV + ) + return DumpString + + +m_NAtagCMActivateMasterPlusLV=tagCMActivateMasterPlusLV() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivateMasterPlusLV.Cmd,m_NAtagCMActivateMasterPlusLV.SubCmd))] = m_NAtagCMActivateMasterPlusLV #------------------------------------------------------ @@ -8442,6 +10057,54 @@ m_NAtagCMBuyKillBossCnt=tagCMBuyKillBossCnt() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyKillBossCnt.Cmd,m_NAtagCMBuyKillBossCnt.SubCmd))] = m_NAtagCMBuyKillBossCnt + + +#------------------------------------------------------ +# A5 46 购买通天令 #tagCMBuyTongTianLing + +class tagCMBuyTongTianLing(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x46 + 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 = 0x46 + return + + def GetLength(self): + return sizeof(tagCMBuyTongTianLing) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 46 购买通天令 //tagCMBuyTongTianLing: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMBuyTongTianLing=tagCMBuyTongTianLing() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMBuyTongTianLing.Cmd,m_NAtagCMBuyTongTianLing.SubCmd))] = m_NAtagCMBuyTongTianLing #------------------------------------------------------ @@ -9276,6 +10939,7 @@ CostEquipCnt = 0 #(BYTE CostEquipCnt)// 装备个数 CostEquipIndex = list() #(vector<WORD> CostEquipIndex)// 装备索引 CostEquipID = list() #(vector<DWORD> CostEquipID)// 装备物品ID + AutoBuy = 0 #(BYTE AutoBuy)// 自动购买 0-不自动购买,1-自动购买并升星,2-自动购买预览(未满概率时预览消耗时使用) data = None def __init__(self): @@ -9295,6 +10959,7 @@ for i in range(self.CostEquipCnt): value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.CostEquipID.append(value) + self.AutoBuy,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -9306,6 +10971,7 @@ self.CostEquipCnt = 0 self.CostEquipIndex = list() self.CostEquipID = list() + self.AutoBuy = 0 return def GetLength(self): @@ -9315,6 +10981,7 @@ length += 1 length += 2 * self.CostEquipCnt length += 4 * self.CostEquipCnt + length += 1 return length @@ -9327,6 +10994,7 @@ data = CommFunc.WriteWORD(data, self.CostEquipIndex[i]) for i in range(self.CostEquipCnt): data = CommFunc.WriteDWORD(data, self.CostEquipID[i]) + data = CommFunc.WriteBYTE(data, self.AutoBuy) return data def OutputString(self): @@ -9335,20 +11003,86 @@ EquipPackIndex:%d, CostEquipCnt:%d, CostEquipIndex:%s, - CostEquipID:%s + CostEquipID:%s, + AutoBuy:%d '''\ %( self.Head.OutputString(), self.EquipPackIndex, self.CostEquipCnt, "...", - "..." + "...", + self.AutoBuy ) return DumpString m_NAtagCMEquipPartStarUp=tagCMEquipPartStarUp() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartStarUp.Head.Cmd,m_NAtagCMEquipPartStarUp.Head.SubCmd))] = m_NAtagCMEquipPartStarUp + + +#------------------------------------------------------ +# A5 C6 装备部位星级套装激活 #tagCMEquipPartSuiteActivate + +class tagCMEquipPartSuiteActivate(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ClassLV", c_ubyte), # 所属装备阶 + ("SuiteID", c_ushort), # 套装ID + ("SuiteCount", c_ubyte), # 件数 + ("Star", c_ubyte), # 星数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0xC6 + 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 = 0xC6 + self.ClassLV = 0 + self.SuiteID = 0 + self.SuiteCount = 0 + self.Star = 0 + return + + def GetLength(self): + return sizeof(tagCMEquipPartSuiteActivate) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 C6 装备部位星级套装激活 //tagCMEquipPartSuiteActivate: + Cmd:%s, + SubCmd:%s, + ClassLV:%d, + SuiteID:%d, + SuiteCount:%d, + Star:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ClassLV, + self.SuiteID, + self.SuiteCount, + self.Star + ) + return DumpString + + +m_NAtagCMEquipPartSuiteActivate=tagCMEquipPartSuiteActivate() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartSuiteActivate.Cmd,m_NAtagCMEquipPartSuiteActivate.SubCmd))] = m_NAtagCMEquipPartSuiteActivate #------------------------------------------------------ @@ -9405,6 +11139,114 @@ m_NAtagCMExchangeMasterEXP=tagCMExchangeMasterEXP() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExchangeMasterEXP.Cmd,m_NAtagCMExchangeMasterEXP.SubCmd))] = m_NAtagCMExchangeMasterEXP + + +#------------------------------------------------------ +# A5 45 兑换通天令等级经验积分点 #tagCMExchangeTongTianLVPoint + +class tagCMExchangeTongTianLVPoint(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ExchangePoint", c_int), # 兑换点数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x45 + 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 = 0x45 + self.ExchangePoint = 0 + return + + def GetLength(self): + return sizeof(tagCMExchangeTongTianLVPoint) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 45 兑换通天令等级经验积分点 //tagCMExchangeTongTianLVPoint: + Cmd:%s, + SubCmd:%s, + ExchangePoint:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ExchangePoint + ) + return DumpString + + +m_NAtagCMExchangeTongTianLVPoint=tagCMExchangeTongTianLVPoint() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExchangeTongTianLVPoint.Cmd,m_NAtagCMExchangeTongTianLVPoint.SubCmd))] = m_NAtagCMExchangeTongTianLVPoint + + +#------------------------------------------------------ +# A5 32 法器升级 #tagCMFaQiLVUp + +class tagCMFaQiLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("UseItemCnt", c_ushort), #消耗材料个数 + ("IsAutoBuy", c_ubyte), #是否自动购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x32 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x32 + self.UseItemCnt = 0 + self.IsAutoBuy = 0 + return + + def GetLength(self): + return sizeof(tagCMFaQiLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 32 法器升级 //tagCMFaQiLVUp: + Cmd:%s, + SubCmd:%s, + UseItemCnt:%d, + IsAutoBuy:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.UseItemCnt, + self.IsAutoBuy + ) + return DumpString + + +m_NAtagCMFaQiLVUp=tagCMFaQiLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaQiLVUp.Cmd,m_NAtagCMFaQiLVUp.SubCmd))] = m_NAtagCMFaQiLVUp #------------------------------------------------------ @@ -9686,6 +11528,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("Index", c_ubyte), # 奖励索引,其他按顺序 + ("IsDaily", c_ubyte), # 是否领取每日日常的奖励,是发1,如果领取定制创角天奖励的则默认发0即可 ] def __init__(self): @@ -9703,6 +11546,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x06 self.Index = 0 + self.IsDaily = 0 return def GetLength(self): @@ -9715,12 +11559,14 @@ DumpString = '''//A5 06 玩家领取在线奖励 //tagCMGetOnlinePrize: Cmd:%s, SubCmd:%s, - Index:%d + Index:%d, + IsDaily:%d '''\ %( self.Cmd, self.SubCmd, - self.Index + self.Index, + self.IsDaily ) return DumpString @@ -9738,6 +11584,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("SuccID", c_int), #成就ID + ("IsPassport", c_ubyte), #是否通行证奖励 ] def __init__(self): @@ -9755,6 +11602,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x42 self.SuccID = 0 + self.IsPassport = 0 return def GetLength(self): @@ -9767,18 +11615,128 @@ DumpString = '''// A5 42 领取成就奖励 //tagMCGetSuccessAward: Cmd:%s, SubCmd:%s, - SuccID:%d + SuccID:%d, + IsPassport:%d '''\ %( self.Cmd, self.SubCmd, - self.SuccID + self.SuccID, + self.IsPassport ) return DumpString m_NAtagMCGetSuccessAward=tagMCGetSuccessAward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGetSuccessAward.Cmd,m_NAtagMCGetSuccessAward.SubCmd))] = m_NAtagMCGetSuccessAward + + +#------------------------------------------------------ +# A5 44 通天令领取等级奖励 #tagCMGetTongTianLVAward + +class tagCMGetTongTianLVAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TTLV", c_ubyte), # 领取对应等级奖励,发255为一键领取所有等级奖励,包含仙品奖励 + ("IsXian", c_ubyte), # 是否领取仙品奖励,仅指定等级奖励有效 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x44 + 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 = 0x44 + self.TTLV = 0 + self.IsXian = 0 + return + + def GetLength(self): + return sizeof(tagCMGetTongTianLVAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 44 通天令领取等级奖励 //tagCMGetTongTianLVAward: + Cmd:%s, + SubCmd:%s, + TTLV:%d, + IsXian:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TTLV, + self.IsXian + ) + return DumpString + + +m_NAtagCMGetTongTianLVAward=tagCMGetTongTianLVAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianLVAward.Cmd,m_NAtagCMGetTongTianLVAward.SubCmd))] = m_NAtagCMGetTongTianLVAward + + +#------------------------------------------------------ +# A5 43 通天令领取任务奖励 #tagCMGetTongTianTaskAward + +class tagCMGetTongTianTaskAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TaskID", c_ubyte), # 任务ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x43 + 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 = 0x43 + self.TaskID = 0 + return + + def GetLength(self): + return sizeof(tagCMGetTongTianTaskAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 43 通天令领取任务奖励 //tagCMGetTongTianTaskAward: + Cmd:%s, + SubCmd:%s, + TaskID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TaskID + ) + return DumpString + + +m_NAtagCMGetTongTianTaskAward=tagCMGetTongTianTaskAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetTongTianTaskAward.Cmd,m_NAtagCMGetTongTianTaskAward.SubCmd))] = m_NAtagCMGetTongTianTaskAward #------------------------------------------------------ @@ -9954,6 +11912,234 @@ #------------------------------------------------------ +# A5 29 骑宠觉醒 #tagCMHorsePetAwake + +class tagCMHorsePetAwake(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Type", c_ushort), # 1-坐骑 2-灵宠 + ("ID", c_int), # 对应坐骑表灵宠表ID + ("EatItemID", c_int), # 吞噬的物品ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + 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 = 0xA5 + self.SubCmd = 0x29 + self.Type = 0 + self.ID = 0 + self.EatItemID = 0 + return + + def GetLength(self): + return sizeof(tagCMHorsePetAwake) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 29 骑宠觉醒 //tagCMHorsePetAwake: + Cmd:%s, + SubCmd:%s, + Type:%d, + ID:%d, + EatItemID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Type, + self.ID, + self.EatItemID + ) + return DumpString + + +m_NAtagCMHorsePetAwake=tagCMHorsePetAwake() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorsePetAwake.Cmd,m_NAtagCMHorsePetAwake.SubCmd))] = m_NAtagCMHorsePetAwake + + +#------------------------------------------------------ +# A5 30 骑宠外观选择 #tagCMHorsePetSkinSelect + +class tagCMHorsePetSkinSelect(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Type", c_ushort), # 1-坐骑 2-灵宠 + ("ID", c_int), # 对应坐骑表灵宠表ID + ("SkinIndex", c_ubyte), # 外观索引 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x30 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA5 + self.SubCmd = 0x30 + self.Type = 0 + self.ID = 0 + self.SkinIndex = 0 + return + + def GetLength(self): + return sizeof(tagCMHorsePetSkinSelect) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 30 骑宠外观选择 //tagCMHorsePetSkinSelect: + Cmd:%s, + SubCmd:%s, + Type:%d, + ID:%d, + SkinIndex:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Type, + self.ID, + self.SkinIndex + ) + return DumpString + + +m_NAtagCMHorsePetSkinSelect=tagCMHorsePetSkinSelect() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorsePetSkinSelect.Cmd,m_NAtagCMHorsePetSkinSelect.SubCmd))] = m_NAtagCMHorsePetSkinSelect + + +#------------------------------------------------------ +# A5 35 坐骑升星 #tagCMHorseStarUp + +class tagCMHorseStarUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("HorseID", c_int), #坐骑ID,对应坐骑表ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x35 + 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 = 0x35 + self.HorseID = 0 + return + + def GetLength(self): + return sizeof(tagCMHorseStarUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 35 坐骑升星 //tagCMHorseStarUp: + Cmd:%s, + SubCmd:%s, + HorseID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.HorseID + ) + return DumpString + + +m_NAtagCMHorseStarUp=tagCMHorseStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseStarUp.Cmd,m_NAtagCMHorseStarUp.SubCmd))] = m_NAtagCMHorseStarUp + + +#------------------------------------------------------ +# A5 31 坐骑培养 #tagCMHorseTrain + +class tagCMHorseTrain(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TrainType", c_ubyte), #培养类型: 1-基础培养,2-特殊培养,3-百分比培养 + ("UseItemCnt", c_ushort), #消耗材料个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x31 + 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 = 0x31 + self.TrainType = 0 + self.UseItemCnt = 0 + return + + def GetLength(self): + return sizeof(tagCMHorseTrain) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 31 坐骑培养 //tagCMHorseTrain: + Cmd:%s, + SubCmd:%s, + TrainType:%d, + UseItemCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TrainType, + self.UseItemCnt + ) + return DumpString + + +m_NAtagCMHorseTrain=tagCMHorseTrain() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseTrain.Cmd,m_NAtagCMHorseTrain.SubCmd))] = m_NAtagCMHorseTrain + + +#------------------------------------------------------ # A5 27 坐骑提升 #tagCMHorseUp class tagCMHorseUp(Structure): @@ -9961,8 +12147,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("HorseID", c_int), #坐骑ID - ("UseItemCnt", c_ubyte), #消耗材料个数 + ("UseItemCnt", c_ushort), #消耗材料个数 ("IsAutoBuy", c_ubyte), #是否自动购买 ] @@ -9980,7 +12165,6 @@ def Clear(self): self.Cmd = 0xA5 self.SubCmd = 0x27 - self.HorseID = 0 self.UseItemCnt = 0 self.IsAutoBuy = 0 return @@ -9995,14 +12179,12 @@ DumpString = '''// A5 27 坐骑提升 //tagCMHorseUp: Cmd:%s, SubCmd:%s, - HorseID:%d, UseItemCnt:%d, IsAutoBuy:%d '''\ %( self.Cmd, self.SubCmd, - self.HorseID, self.UseItemCnt, self.IsAutoBuy ) @@ -10011,6 +12193,110 @@ m_NAtagCMHorseUp=tagCMHorseUp() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMHorseUp.Cmd,m_NAtagCMHorseUp.SubCmd))] = m_NAtagCMHorseUp + + +#------------------------------------------------------ +# A5 34 炼体突破 #tagCMLianTiLVUp + +class tagCMLianTiLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x34 + 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 = 0x34 + return + + def GetLength(self): + return sizeof(tagCMLianTiLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 34 炼体突破 //tagCMLianTiLVUp: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMLianTiLVUp=tagCMLianTiLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiLVUp.Cmd,m_NAtagCMLianTiLVUp.SubCmd))] = m_NAtagCMLianTiLVUp + + +#------------------------------------------------------ +# A5 33 炼体提升 #tagCMLianTiUp + +class tagCMLianTiUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("UseItemCnt", c_int), #消耗材料个数 + ("IsAutoBuy", c_ubyte), #是否自动购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x33 + 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 = 0x33 + self.UseItemCnt = 0 + self.IsAutoBuy = 0 + return + + def GetLength(self): + return sizeof(tagCMLianTiUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 33 炼体提升 //tagCMLianTiUp: + Cmd:%s, + SubCmd:%s, + UseItemCnt:%d, + IsAutoBuy:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.UseItemCnt, + self.IsAutoBuy + ) + return DumpString + + +m_NAtagCMLianTiUp=tagCMLianTiUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiUp.Cmd,m_NAtagCMLianTiUp.SubCmd))] = m_NAtagCMLianTiUp #------------------------------------------------------ @@ -10173,7 +12459,8 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("Index", c_int), #选择索引 + ("ChooseType", c_ubyte), # 1-按等阶,2-按幻化 + ("LVID", c_ubyte), # 阶等级或幻化ID ] def __init__(self): @@ -10190,7 +12477,8 @@ def Clear(self): self.Cmd = 0xA5 self.SubCmd = 0x02 - self.Index = 0 + self.ChooseType = 0 + self.LVID = 0 return def GetLength(self): @@ -10203,12 +12491,14 @@ DumpString = '''//A5 02 坐骑选择 //tagPlayerChooseHorse: Cmd:%s, SubCmd:%s, - Index:%d + ChooseType:%d, + LVID:%d '''\ %( self.Cmd, self.SubCmd, - self.Index + self.ChooseType, + self.LVID ) return DumpString @@ -10304,6 +12594,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("AlchemyID", c_int), # 丹药ID + ("AlchemyTimes", c_ushort), # 丹药次数 ("DoType", c_ubyte), # 0-学习 1-开始炼丹 2-停止炼丹 3-开炉取丹 ] @@ -10322,6 +12613,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x76 self.AlchemyID = 0 + self.AlchemyTimes = 0 self.DoType = 0 return @@ -10336,12 +12628,14 @@ Cmd:%s, SubCmd:%s, AlchemyID:%d, + AlchemyTimes:%d, DoType:%d '''\ %( self.Cmd, self.SubCmd, self.AlchemyID, + self.AlchemyTimes, self.DoType ) return DumpString @@ -11065,6 +13359,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("SkillTypeID", c_int), # 专精技能ID + ("DoType", c_ubyte), # 0-激活 1-使用 ] def __init__(self): @@ -11082,6 +13377,7 @@ self.Cmd = 0xA5 self.SubCmd = 0x16 self.SkillTypeID = 0 + self.DoType = 0 return def GetLength(self): @@ -11094,12 +13390,14 @@ DumpString = '''// A5 16 选择技能五行专精 //tagCMSelectSkillElement: Cmd:%s, SubCmd:%s, - SkillTypeID:%d + SkillTypeID:%d, + DoType:%d '''\ %( self.Cmd, self.SubCmd, - self.SkillTypeID + self.SkillTypeID, + self.DoType ) return DumpString @@ -11254,6 +13552,58 @@ m_NAtagCMThinkMagicWeapon=tagCMThinkMagicWeapon() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMThinkMagicWeapon.Cmd,m_NAtagCMThinkMagicWeapon.SubCmd))] = m_NAtagCMThinkMagicWeapon + + +#------------------------------------------------------ +# A5 36 称号升星 #tagCMTitleStarUp + +class tagCMTitleStarUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TitleID", c_int), #称号ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA5 + self.SubCmd = 0x36 + 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 = 0x36 + self.TitleID = 0 + return + + def GetLength(self): + return sizeof(tagCMTitleStarUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A5 36 称号升星 //tagCMTitleStarUp: + Cmd:%s, + SubCmd:%s, + TitleID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TitleID + ) + return DumpString + + +m_NAtagCMTitleStarUp=tagCMTitleStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTitleStarUp.Cmd,m_NAtagCMTitleStarUp.SubCmd))] = m_NAtagCMTitleStarUp #------------------------------------------------------ @@ -11581,6 +13931,66 @@ #------------------------------------------------------ +# A6 15 传功操作 #tagCMChuangongOP + +class tagCMChuangongOP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("OPType", c_ubyte), # 操作类型:1-邀请;2-回应;3-领奖; + ("PlayerID", c_int), # 目标玩家ID;回应时为邀请方玩家ID + ("OPData", c_ubyte), # 操作数据,可选:回应时为是否同意 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + self.SubCmd = 0x15 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA6 + self.SubCmd = 0x15 + self.OPType = 0 + self.PlayerID = 0 + self.OPData = 0 + return + + def GetLength(self): + return sizeof(tagCMChuangongOP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 15 传功操作 //tagCMChuangongOP: + Cmd:%s, + SubCmd:%s, + OPType:%d, + PlayerID:%d, + OPData:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.OPType, + self.PlayerID, + self.OPData + ) + return DumpString + + +m_NAtagCMChuangongOP=tagCMChuangongOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChuangongOP.Cmd,m_NAtagCMChuangongOP.SubCmd))] = m_NAtagCMChuangongOP + + +#------------------------------------------------------ # A6 11 家族改名 #tagCMRenameFamily class tagCMRenameFamily(Structure): @@ -11652,19 +14062,98 @@ #------------------------------------------------------ -# A6 05 家族捐献兽粮 #tagCMFamilyDonate +# A6 06 家族兑换活跃令 #tagCMFamilyActivityExchange -class tagCMFamilyDonate(Structure): +class tagCMFamilyActivityExchange(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//材料所在背包索引的数量 + IndexList = list() #(vector<WORD> IndexList)//材料所在背包索引列表 + ItemIDList = list() #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA6 + self.Head.SubCmd = 0x06 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.IndexList.append(value) + for i in range(self.Count): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ItemIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA6 + self.Head.SubCmd = 0x06 + self.Count = 0 + self.IndexList = list() + self.ItemIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 * self.Count + length += 4 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteWORD(data, self.IndexList[i]) + for i in range(self.Count): + data = CommFunc.WriteDWORD(data, self.ItemIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + IndexList:%s, + ItemIDList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "...", + "..." + ) + return DumpString + + +m_NAtagCMFamilyActivityExchange=tagCMFamilyActivityExchange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyActivityExchange.Head.Cmd,m_NAtagCMFamilyActivityExchange.Head.SubCmd))] = m_NAtagCMFamilyActivityExchange + + +#------------------------------------------------------ +# A6 13 家族事务操作 #tagCMFamilyAffairOP + +class tagCMFamilyAffairOP(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("OPType", c_ubyte), # 操作类型:1-刷新事务;2-开始事务;3-领取事务奖励; + ("AffairID", c_ushort), # 事务ID,可选 ] def __init__(self): self.Clear() self.Cmd = 0xA6 - self.SubCmd = 0x05 + self.SubCmd = 0x13 return def ReadData(self, stringData, _pos=0, _len=0): @@ -11674,29 +14163,87 @@ def Clear(self): self.Cmd = 0xA6 - self.SubCmd = 0x05 + self.SubCmd = 0x13 + self.OPType = 0 + self.AffairID = 0 return def GetLength(self): - return sizeof(tagCMFamilyDonate) + return sizeof(tagCMFamilyAffairOP) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// A6 05 家族捐献兽粮 //tagCMFamilyDonate: + DumpString = '''// A6 13 家族事务操作 //tagCMFamilyAffairOP: Cmd:%s, - SubCmd:%s + SubCmd:%s, + OPType:%d, + AffairID:%d '''\ %( self.Cmd, - self.SubCmd + self.SubCmd, + self.OPType, + self.AffairID ) return DumpString -m_NAtagCMFamilyDonate=tagCMFamilyDonate() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyDonate.Cmd,m_NAtagCMFamilyDonate.SubCmd))] = m_NAtagCMFamilyDonate +m_NAtagCMFamilyAffairOP=tagCMFamilyAffairOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyAffairOP.Cmd,m_NAtagCMFamilyAffairOP.SubCmd))] = m_NAtagCMFamilyAffairOP + + +#------------------------------------------------------ +# A6 12 家族捐献货币 #tagCMFamilyMoneyDonate + +class tagCMFamilyMoneyDonate(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MoneyType", c_ubyte), # 捐献货币类型 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + 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 = 0xA6 + self.SubCmd = 0x12 + self.MoneyType = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyMoneyDonate) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 12 家族捐献货币 //tagCMFamilyMoneyDonate: + Cmd:%s, + SubCmd:%s, + MoneyType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MoneyType + ) + return DumpString + + +m_NAtagCMFamilyMoneyDonate=tagCMFamilyMoneyDonate() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyMoneyDonate.Cmd,m_NAtagCMFamilyMoneyDonate.SubCmd))] = m_NAtagCMFamilyMoneyDonate #------------------------------------------------------ @@ -11809,6 +14356,66 @@ m_NAtagCMFamilyStoreExchange=tagCMFamilyStoreExchange() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyStoreExchange.Cmd,m_NAtagCMFamilyStoreExchange.SubCmd))] = m_NAtagCMFamilyStoreExchange + + +#------------------------------------------------------ +# A6 14 家族阵法升级 #tagCMFamilyZhenfaLVUP + +class tagCMFamilyZhenfaLVUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZhenfaType", c_ubyte), # 阵法类型 + ("ItemID", c_int), # 消耗的物品ID + ("ItemCount", c_ushort), # 消耗个数,默认1 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA6 + self.SubCmd = 0x14 + 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 = 0xA6 + self.SubCmd = 0x14 + self.ZhenfaType = 0 + self.ItemID = 0 + self.ItemCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFamilyZhenfaLVUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A6 14 家族阵法升级 //tagCMFamilyZhenfaLVUP: + Cmd:%s, + SubCmd:%s, + ZhenfaType:%d, + ItemID:%d, + ItemCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZhenfaType, + self.ItemID, + self.ItemCount + ) + return DumpString + + +m_NAtagCMFamilyZhenfaLVUP=tagCMFamilyZhenfaLVUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyZhenfaLVUP.Cmd,m_NAtagCMFamilyZhenfaLVUP.SubCmd))] = m_NAtagCMFamilyZhenfaLVUP #------------------------------------------------------ @@ -11928,6 +14535,7 @@ PacketCnt = 0 #(WORD PacketCnt)// 红包数量 MoneyNum = 0 #(WORD MoneyNum)//金钱数量 Wish = "" #(char Wish[33])//祝福语 + IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名 data = None def __init__(self): @@ -11943,6 +14551,7 @@ self.PacketCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -11954,6 +14563,7 @@ self.PacketCnt = 0 self.MoneyNum = 0 self.Wish = "" + self.IsAnonymous = 0 return def GetLength(self): @@ -11963,6 +14573,7 @@ length += 2 length += 2 length += 33 + length += 1 return length @@ -11973,6 +14584,7 @@ data = CommFunc.WriteWORD(data, self.PacketCnt) data = CommFunc.WriteWORD(data, self.MoneyNum) data = CommFunc.WriteString(data, 33, self.Wish) + data = CommFunc.WriteBYTE(data, self.IsAnonymous) return data def OutputString(self): @@ -11981,14 +14593,16 @@ RedPacketID:%d, PacketCnt:%d, MoneyNum:%d, - Wish:%s + Wish:%s, + IsAnonymous:%d '''\ %( self.Head.OutputString(), self.RedPacketID, self.PacketCnt, self.MoneyNum, - self.Wish + self.Wish, + self.IsAnonymous ) return DumpString @@ -12159,6 +14773,114 @@ m_NAtagCMPetClassUP=tagCMPetClassUP() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetClassUP.Cmd,m_NAtagCMPetClassUP.SubCmd))] = m_NAtagCMPetClassUP + + +#------------------------------------------------------ +# A7 06 宠物升星 #tagCMPetStarUp + +class tagCMPetStarUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PetItemIndex", c_ubyte), #宠物数据背包索引 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA7 + self.SubCmd = 0x06 + 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 = 0xA7 + self.SubCmd = 0x06 + self.PetItemIndex = 0 + return + + def GetLength(self): + return sizeof(tagCMPetStarUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 06 宠物升星 //tagCMPetStarUp: + Cmd:%s, + SubCmd:%s, + PetItemIndex:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PetItemIndex + ) + return DumpString + + +m_NAtagCMPetStarUp=tagCMPetStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetStarUp.Cmd,m_NAtagCMPetStarUp.SubCmd))] = m_NAtagCMPetStarUp + + +#------------------------------------------------------ +# A7 05 宠物培养 #tagCMPetTrain + +class tagCMPetTrain(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TrainType", c_ubyte), #培养类型: 1-基础培养,2-特殊培养,3-百分比培养 + ("UseItemCnt", c_ushort), #消耗材料个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA7 + self.SubCmd = 0x05 + 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 = 0xA7 + self.SubCmd = 0x05 + self.TrainType = 0 + self.UseItemCnt = 0 + return + + def GetLength(self): + return sizeof(tagCMPetTrain) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 05 宠物培养 //tagCMPetTrain: + Cmd:%s, + SubCmd:%s, + TrainType:%d, + UseItemCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TrainType, + self.UseItemCnt + ) + return DumpString + + +m_NAtagCMPetTrain=tagCMPetTrain() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPetTrain.Cmd,m_NAtagCMPetTrain.SubCmd))] = m_NAtagCMPetTrain #------------------------------------------------------ @@ -12418,6 +15140,689 @@ #------------------------------------------------------ +# AA 24 Boss历练领奖 #tagCMActBossTrialGetAward + +class tagCMActBossTrialGetAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #领取凭证个数对应奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x24 + 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 = 0x24 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialGetAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 24 Boss历练领奖 //tagCMActBossTrialGetAward: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialGetAward=tagCMActBossTrialGetAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialGetAward.Cmd,m_NAtagCMActBossTrialGetAward.SubCmd))] = m_NAtagCMActBossTrialGetAward + + +#------------------------------------------------------ +# AA 23 Boss历练提交凭证 #tagCMActBossTrialSubmit + +class tagCMActBossTrialSubmit(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("SubmitCount", c_ushort), #提交凭证个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x23 + self.ActNum = 0 + self.SubmitCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActBossTrialSubmit) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 23 Boss历练提交凭证 //tagCMActBossTrialSubmit: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + SubmitCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.SubmitCount + ) + return DumpString + + +m_NAtagCMActBossTrialSubmit=tagCMActBossTrialSubmit() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActBossTrialSubmit.Cmd,m_NAtagCMActBossTrialSubmit.SubCmd))] = m_NAtagCMActBossTrialSubmit + + +#------------------------------------------------------ +# AA 09 集字活动兑换 #tagCMActCollectWordsExchange + +class tagCMActCollectWordsExchange(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号,1 或 2,相互独立的活动,可同时开启 + ("ExchangeNum", c_ubyte), #兑换编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x09 + 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 = 0x09 + self.ActNum = 0 + self.ExchangeNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActCollectWordsExchange) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 09 集字活动兑换 //tagCMActCollectWordsExchange: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + ExchangeNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.ExchangeNum + ) + return DumpString + + +m_NAtagCMActCollectWordsExchange=tagCMActCollectWordsExchange() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActCollectWordsExchange.Cmd,m_NAtagCMActCollectWordsExchange.SubCmd))] = m_NAtagCMActCollectWordsExchange + + +#------------------------------------------------------ +# AA 15 垃圾分类活动收集已完成的任务垃圾 #tagCMActGarbageGetTaskAward + +class tagCMActGarbageGetTaskAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("GarbageTaskID", c_ubyte), #垃圾任务ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x15 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x15 + self.ActNum = 0 + self.GarbageTaskID = 0 + return + + def GetLength(self): + return sizeof(tagCMActGarbageGetTaskAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 15 垃圾分类活动收集已完成的任务垃圾 //tagCMActGarbageGetTaskAward: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + GarbageTaskID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.GarbageTaskID + ) + return DumpString + + +m_NAtagCMActGarbageGetTaskAward=tagCMActGarbageGetTaskAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageGetTaskAward.Cmd,m_NAtagCMActGarbageGetTaskAward.SubCmd))] = m_NAtagCMActGarbageGetTaskAward + + +#------------------------------------------------------ +# AA 14 垃圾分类活动分类垃圾 #tagCMActGarbageSorting + +class tagCMActGarbageSorting(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + GarbageSortingType = 0 #(BYTE GarbageSortingType)//垃圾分类类型,即属于哪种垃圾 + ItemIndexCount = 0 #(BYTE ItemIndexCount)//垃圾背包中的物品索引数 + ItemIndexList = list() #(vector<BYTE> ItemIndexList)//垃圾背包中的物品索引列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x14 + 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.GarbageSortingType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ItemIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ItemIndexCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ItemIndexList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x14 + self.ActNum = 0 + self.GarbageSortingType = 0 + self.ItemIndexCount = 0 + self.ItemIndexList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 + length += 1 * self.ItemIndexCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.GarbageSortingType) + data = CommFunc.WriteBYTE(data, self.ItemIndexCount) + for i in range(self.ItemIndexCount): + data = CommFunc.WriteBYTE(data, self.ItemIndexList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + GarbageSortingType:%d, + ItemIndexCount:%d, + ItemIndexList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.GarbageSortingType, + self.ItemIndexCount, + "..." + ) + return DumpString + + +m_NAtagCMActGarbageSorting=tagCMActGarbageSorting() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGarbageSorting.Head.Cmd,m_NAtagCMActGarbageSorting.Head.SubCmd))] = m_NAtagCMActGarbageSorting + + +#------------------------------------------------------ +# AA 20 天帝礼包选择物品 #tagCMActGodGiftChooseItem + +class tagCMActGodGiftChooseItemInfo(Structure): + ItemLibType = 0 #(BYTE ItemLibType)//物品库类型 + Count = 0 #(BYTE Count)//选择个数 + ItemNumList = list() #(vector<BYTE> ItemNumList)//选择物品编号列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ItemLibType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ItemNumList.append(value) + return _pos + + def Clear(self): + self.ItemLibType = 0 + self.Count = 0 + self.ItemNumList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ItemLibType) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteBYTE(data, self.ItemNumList[i]) + return data + + def OutputString(self): + DumpString = ''' + ItemLibType:%d, + Count:%d, + ItemNumList:%s + '''\ + %( + self.ItemLibType, + self.Count, + "..." + ) + return DumpString + + +class tagCMActGodGiftChooseItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + ChooseLibCount = 0 #(BYTE ChooseLibCount)//选择库个数 + ChooseItemList = list() #(vector<tagCMActGodGiftChooseItemInfo> ChooseItemList)//选择库物品信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x20 + 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.ChooseLibCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ChooseLibCount): + temChooseItemList = tagCMActGodGiftChooseItemInfo() + _pos = temChooseItemList.ReadData(_lpData, _pos) + self.ChooseItemList.append(temChooseItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x20 + self.ActNum = 0 + self.ChooseLibCount = 0 + self.ChooseItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.ChooseLibCount): + length += self.ChooseItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.ChooseLibCount) + for i in range(self.ChooseLibCount): + data = CommFunc.WriteString(data, self.ChooseItemList[i].GetLength(), self.ChooseItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + ChooseLibCount:%d, + ChooseItemList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.ChooseLibCount, + "..." + ) + return DumpString + + +m_NAtagCMActGodGiftChooseItem=tagCMActGodGiftChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftChooseItem.Head.Cmd,m_NAtagCMActGodGiftChooseItem.Head.SubCmd))] = m_NAtagCMActGodGiftChooseItem + + +#------------------------------------------------------ +# AA 21 天帝礼包抽奖 #tagCMActGodGiftlottery + +class tagCMActGodGiftlottery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x21 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActGodGiftlottery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 21 天帝礼包抽奖 //tagCMActGodGiftlottery: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActGodGiftlottery=tagCMActGodGiftlottery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftlottery.Cmd,m_NAtagCMActGodGiftlottery.SubCmd))] = m_NAtagCMActGodGiftlottery + + +#------------------------------------------------------ +# AA 22 天帝礼包重置 #tagCMActGodGiftReset + +class tagCMActGodGiftReset(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x22 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x22 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActGodGiftReset) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 22 天帝礼包重置 //tagCMActGodGiftReset: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActGodGiftReset=tagCMActGodGiftReset() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActGodGiftReset.Cmd,m_NAtagCMActGodGiftReset.SubCmd))] = m_NAtagCMActGodGiftReset + + +#------------------------------------------------------ +# AA 12 选择转盘活动物品 #tagCMActTurntableChooseItem + +class tagCMActTurntableChooseItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)// 活动编号 + GoodItemNumCount = 0 #(BYTE GoodItemNumCount) + GoodItemNumList = list() #(vector<BYTE> GoodItemNumList)// 选择的极品物品编号列表 + SuperItemNumCount = 0 #(BYTE SuperItemNumCount) + SuperItemNumList = list() #(vector<BYTE> SuperItemNumList)// 选择的终极物品编号列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + 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.GoodItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GoodItemNumCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.GoodItemNumList.append(value) + self.SuperItemNumCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemNumCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.SuperItemNumList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + self.ActNum = 0 + self.GoodItemNumCount = 0 + self.GoodItemNumList = list() + self.SuperItemNumCount = 0 + self.SuperItemNumList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 1 * self.GoodItemNumCount + length += 1 + length += 1 * self.SuperItemNumCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.GoodItemNumCount) + for i in range(self.GoodItemNumCount): + data = CommFunc.WriteBYTE(data, self.GoodItemNumList[i]) + data = CommFunc.WriteBYTE(data, self.SuperItemNumCount) + for i in range(self.SuperItemNumCount): + data = CommFunc.WriteBYTE(data, self.SuperItemNumList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + GoodItemNumCount:%d, + GoodItemNumList:%s, + SuperItemNumCount:%d, + SuperItemNumList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.GoodItemNumCount, + "...", + self.SuperItemNumCount, + "..." + ) + return DumpString + + +m_NAtagCMActTurntableChooseItem=tagCMActTurntableChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableChooseItem.Head.Cmd,m_NAtagCMActTurntableChooseItem.Head.SubCmd))] = m_NAtagCMActTurntableChooseItem + + +#------------------------------------------------------ +# AA 13 启动转盘 #tagCMActTurntableStart + +class tagCMActTurntableStart(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), # 活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x13 + 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 = 0x13 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActTurntableStart) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 13 启动转盘 //tagCMActTurntableStart: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActTurntableStart=tagCMActTurntableStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActTurntableStart.Cmd,m_NAtagCMActTurntableStart.SubCmd))] = m_NAtagCMActTurntableStart + + +#------------------------------------------------------ # AA 07 许愿池活动刷新奖池 #tagCMActWishingRefresh class tagCMActWishingRefresh(Structure): @@ -12467,6 +15872,188 @@ m_NAtagCMActWishingRefresh=tagCMActWishingRefresh() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActWishingRefresh.Cmd,m_NAtagCMActWishingRefresh.SubCmd))] = m_NAtagCMActWishingRefresh + + +#------------------------------------------------------ +# AA 18 仙匣秘境活动奖池刷新 #tagCMActXianXiaMJAwardPoolRefresh + +class tagCMActXianXiaMJAwardPoolRefresh(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x18 + 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 = 0x18 + self.ActNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJAwardPoolRefresh) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 18 仙匣秘境活动奖池刷新 //tagCMActXianXiaMJAwardPoolRefresh: + Cmd:%s, + SubCmd:%s, + ActNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJAwardPoolRefresh=tagCMActXianXiaMJAwardPoolRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJAwardPoolRefresh.Cmd,m_NAtagCMActXianXiaMJAwardPoolRefresh.SubCmd))] = m_NAtagCMActXianXiaMJAwardPoolRefresh + + +#------------------------------------------------------ +# AA 17 仙匣秘境活动抽奖 #tagCMActXianXiaMJLottery + +class tagCMActXianXiaMJLottery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 + ("PosNum", c_ubyte), #玩家点击的奖励位置编号,从1开始 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x17 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x17 + self.ActNum = 0 + self.PosNum = 0 + return + + def GetLength(self): + return sizeof(tagCMActXianXiaMJLottery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 17 仙匣秘境活动抽奖 //tagCMActXianXiaMJLottery: + Cmd:%s, + SubCmd:%s, + ActNum:%d, + PosNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ActNum, + self.PosNum + ) + return DumpString + + +m_NAtagCMActXianXiaMJLottery=tagCMActXianXiaMJLottery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJLottery.Cmd,m_NAtagCMActXianXiaMJLottery.SubCmd))] = m_NAtagCMActXianXiaMJLottery + + +#------------------------------------------------------ +# AA 16 仙匣秘境活动选择大奖 #tagCMActXianXiaMJSuperItem + +class tagCMActXianXiaMJSuperItem(Structure): + Head = tagHead() + ActNum = 0 #(BYTE ActNum)//活动编号 + SuperItemCount = 0 #(BYTE SuperItemCount)//选择物品数量 + SuperItemIDList = list() #(vector<DWORD> SuperItemIDList)//选择的大奖库物品ID列表,每次重新选择需要发送全部已选择的大奖物品ID,不能只发单个物品ID; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + 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.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.SuperItemCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SuperItemIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + self.ActNum = 0 + self.SuperItemCount = 0 + self.SuperItemIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += 4 * self.SuperItemCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActNum) + data = CommFunc.WriteBYTE(data, self.SuperItemCount) + for i in range(self.SuperItemCount): + data = CommFunc.WriteDWORD(data, self.SuperItemIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActNum:%d, + SuperItemCount:%d, + SuperItemIDList:%s + '''\ + %( + self.Head.OutputString(), + self.ActNum, + self.SuperItemCount, + "..." + ) + return DumpString + + +m_NAtagCMActXianXiaMJSuperItem=tagCMActXianXiaMJSuperItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActXianXiaMJSuperItem.Head.Cmd,m_NAtagCMActXianXiaMJSuperItem.Head.SubCmd))] = m_NAtagCMActXianXiaMJSuperItem #------------------------------------------------------ @@ -12534,6 +16121,114 @@ #------------------------------------------------------ +# AA 10 节日祝福瓶选择奖励物品 #tagCMFeastWishBottleChooseItem + +class tagCMFeastWishBottleChooseItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BottleNum", c_ubyte), #瓶子编号 + ("RecordIndex", c_ubyte), #物品索引,用于选择及记录是否已选择 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + 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 = 0xAA + self.SubCmd = 0x10 + self.BottleNum = 0 + self.RecordIndex = 0 + return + + def GetLength(self): + return sizeof(tagCMFeastWishBottleChooseItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 10 节日祝福瓶选择奖励物品 //tagCMFeastWishBottleChooseItem: + Cmd:%s, + SubCmd:%s, + BottleNum:%d, + RecordIndex:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BottleNum, + self.RecordIndex + ) + return DumpString + + +m_NAtagCMFeastWishBottleChooseItem=tagCMFeastWishBottleChooseItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishBottleChooseItem.Cmd,m_NAtagCMFeastWishBottleChooseItem.SubCmd))] = m_NAtagCMFeastWishBottleChooseItem + + +#------------------------------------------------------ +# AA 11 节日祝福池祝福 #tagCMFeastWishPoolWish + +class tagCMFeastWishPoolWish(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("WishCount", c_ubyte), #祝福次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x11 + self.WishCount = 0 + return + + def GetLength(self): + return sizeof(tagCMFeastWishPoolWish) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 11 节日祝福池祝福 //tagCMFeastWishPoolWish: + Cmd:%s, + SubCmd:%s, + WishCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.WishCount + ) + return DumpString + + +m_NAtagCMFeastWishPoolWish=tagCMFeastWishPoolWish() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFeastWishPoolWish.Cmd,m_NAtagCMFeastWishPoolWish.SubCmd))] = m_NAtagCMFeastWishPoolWish + + +#------------------------------------------------------ # AA 05 限时抢购预约 #tagCMFlashSaleAppointment class tagCMFlashSaleAppointment(Structure): @@ -12541,6 +16236,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ActNum", c_ubyte), #活动编号 ("GoodsID", c_int), # 抢购商品标识 ("State", c_ubyte), # 1-预约 0-取消 ] @@ -12559,6 +16255,7 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x05 + self.ActNum = 0 self.GoodsID = 0 self.State = 0 return @@ -12573,12 +16270,14 @@ DumpString = '''// AA 05 限时抢购预约 //tagCMFlashSaleAppointment: Cmd:%s, SubCmd:%s, + ActNum:%d, GoodsID:%d, State:%d '''\ %( self.Cmd, self.SubCmd, + self.ActNum, self.GoodsID, self.State ) @@ -13438,6 +17137,154 @@ #------------------------------------------------------ +# B0 29 活跃放置明细查询 #tagCMActivityPlaceQuery + +class tagCMActivityPlaceQuery(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + 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 = 0xB0 + self.SubCmd = 0x29 + return + + def GetLength(self): + return sizeof(tagCMActivityPlaceQuery) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 29 活跃放置明细查询 //tagCMActivityPlaceQuery: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMActivityPlaceQuery=tagCMActivityPlaceQuery() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuery.Cmd,m_NAtagCMActivityPlaceQuery.SubCmd))] = m_NAtagCMActivityPlaceQuery + + +#------------------------------------------------------ +# B0 28 活跃放置快速完成 #tagCMActivityPlaceQuickFinish + +class tagCMActivityPlaceQuickFinish(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FinishCount", c_ubyte), #完成次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x28 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x28 + self.FinishCount = 0 + return + + def GetLength(self): + return sizeof(tagCMActivityPlaceQuickFinish) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 28 活跃放置快速完成 //tagCMActivityPlaceQuickFinish: + Cmd:%s, + SubCmd:%s, + FinishCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FinishCount + ) + return DumpString + + +m_NAtagCMActivityPlaceQuickFinish=tagCMActivityPlaceQuickFinish() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceQuickFinish.Cmd,m_NAtagCMActivityPlaceQuickFinish.SubCmd))] = m_NAtagCMActivityPlaceQuickFinish + + +#------------------------------------------------------ +# B0 27 活跃放置启动 #tagCMActivityPlaceStart + +class tagCMActivityPlaceStart(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x27 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x27 + return + + def GetLength(self): + return sizeof(tagCMActivityPlaceStart) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 27 活跃放置启动 //tagCMActivityPlaceStart: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMActivityPlaceStart=tagCMActivityPlaceStart() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivityPlaceStart.Cmd,m_NAtagCMActivityPlaceStart.SubCmd))] = m_NAtagCMActivityPlaceStart + + +#------------------------------------------------------ # B0 50 钓鱼收杆 #tagCMDoFish class tagCMDoFish(Structure): @@ -13591,6 +17438,118 @@ m_NAtagReceiveFamilyArrestAward=tagReceiveFamilyArrestAward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagReceiveFamilyArrestAward.Cmd,m_NAtagReceiveFamilyArrestAward.SubCmd))] = m_NAtagReceiveFamilyArrestAward + + +#------------------------------------------------------ +# B0 10 请求协助Boss #tagCMRequestAssistBoss + +class tagCMRequestAssistBoss(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ObjID", c_int), + ("NPCID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + 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 = 0xB0 + self.SubCmd = 0x10 + self.ObjID = 0 + self.NPCID = 0 + return + + def GetLength(self): + return sizeof(tagCMRequestAssistBoss) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 10 请求协助Boss //tagCMRequestAssistBoss: + Cmd:%s, + SubCmd:%s, + ObjID:%d, + NPCID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ObjID, + self.NPCID + ) + return DumpString + + +m_NAtagCMRequestAssistBoss=tagCMRequestAssistBoss() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistBoss.Cmd,m_NAtagCMRequestAssistBoss.SubCmd))] = m_NAtagCMRequestAssistBoss + + +#------------------------------------------------------ +# B0 11 请求协助组队副本 #tagCMRequestAssistTeamFB + +class tagCMRequestAssistTeamFB(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MapID", c_ushort), + ("LineID", c_ushort), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x11 + self.MapID = 0 + self.LineID = 0 + return + + def GetLength(self): + return sizeof(tagCMRequestAssistTeamFB) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 11 请求协助组队副本 //tagCMRequestAssistTeamFB: + Cmd:%s, + SubCmd:%s, + MapID:%d, + LineID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MapID, + self.LineID + ) + return DumpString + + +m_NAtagCMRequestAssistTeamFB=tagCMRequestAssistTeamFB() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRequestAssistTeamFB.Cmd,m_NAtagCMRequestAssistTeamFB.SubCmd))] = m_NAtagCMRequestAssistTeamFB #------------------------------------------------------ @@ -13834,62 +17793,6 @@ #------------------------------------------------------ -# B1 09 结算自定义副本奖励 #tagCMGiveCustomFBPrize - -class tagCMGiveCustomFBPrize(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), - ("FuncLineID", c_ushort), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB1 - self.SubCmd = 0x09 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xB1 - self.SubCmd = 0x09 - self.MapID = 0 - self.FuncLineID = 0 - return - - def GetLength(self): - return sizeof(tagCMGiveCustomFBPrize) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B1 09 结算自定义副本奖励 //tagCMGiveCustomFBPrize: - Cmd:%s, - SubCmd:%s, - MapID:%d, - FuncLineID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MapID, - self.FuncLineID - ) - return DumpString - - -m_NAtagCMGiveCustomFBPrize=tagCMGiveCustomFBPrize() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGiveCustomFBPrize.Cmd,m_NAtagCMGiveCustomFBPrize.SubCmd))] = m_NAtagCMGiveCustomFBPrize - - -#------------------------------------------------------ # B1 06 助战召唤 #tagCMHelpBattleCall class tagCMHelpBattleCall(Structure): @@ -14106,62 +18009,6 @@ #------------------------------------------------------ -# B1 08 刷新自定义副本奖励 #tagCMRefreshCustomFBPrize - -class tagCMRefreshCustomFBPrize(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), - ("FuncLineID", c_ushort), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB1 - self.SubCmd = 0x08 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xB1 - self.SubCmd = 0x08 - self.MapID = 0 - self.FuncLineID = 0 - return - - def GetLength(self): - return sizeof(tagCMRefreshCustomFBPrize) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// B1 08 刷新自定义副本奖励 //tagCMRefreshCustomFBPrize: - Cmd:%s, - SubCmd:%s, - MapID:%d, - FuncLineID:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MapID, - self.FuncLineID - ) - return DumpString - - -m_NAtagCMRefreshCustomFBPrize=tagCMRefreshCustomFBPrize() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRefreshCustomFBPrize.Cmd,m_NAtagCMRefreshCustomFBPrize.SubCmd))] = m_NAtagCMRefreshCustomFBPrize - - -#------------------------------------------------------ # B1 03 设置封魔坛多倍击杀 #tagCMSetFMTDouble class tagCMSetFMTDouble(Structure): @@ -14214,13 +18061,80 @@ #------------------------------------------------------ +# B2 11 激活功能系统特权奖励 #tagCMActivateFuncSysPrivilege + +class tagCMActivateFuncSysPrivilege(Structure): + Head = tagHead() + ActivateCount = 0 #(BYTE ActivateCount)// 激活个数 + ActivateFuncSysIDList = list() #(vector<BYTE> ActivateFuncSysIDList)// 激活功能系统ID列表,全部激活则需要发所有ID列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x11 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ActivateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ActivateCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ActivateFuncSysIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x11 + self.ActivateCount = 0 + self.ActivateFuncSysIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 * self.ActivateCount + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ActivateCount) + for i in range(self.ActivateCount): + data = CommFunc.WriteBYTE(data, self.ActivateFuncSysIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ActivateCount:%d, + ActivateFuncSysIDList:%s + '''\ + %( + self.Head.OutputString(), + self.ActivateCount, + "..." + ) + return DumpString + + +m_NAtagCMActivateFuncSysPrivilege=tagCMActivateFuncSysPrivilege() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivateFuncSysPrivilege.Head.Cmd,m_NAtagCMActivateFuncSysPrivilege.Head.SubCmd))] = m_NAtagCMActivateFuncSysPrivilege + + +#------------------------------------------------------ # B2 06 玩家加点 #tagCMAddPoint class tagCMAddPoint(Structure): Head = tagHead() PointAttrIDCount = 0 #(BYTE PointAttrIDCount)// 加点属性ID个数 PointAttrIDList = list() #(vector<BYTE> PointAttrIDList)// 加点属性ID列表 - PointValueList = list() #(vector<WORD> PointValueList)// 加点属性ID对应的点数列表 + PointValueList = list() #(vector<DWORD> PointValueList)// 加点属性ID对应的点数列表 data = None def __init__(self): @@ -14237,7 +18151,7 @@ value,_pos=CommFunc.ReadBYTE(_lpData,_pos) self.PointAttrIDList.append(value) for i in range(self.PointAttrIDCount): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) self.PointValueList.append(value) return _pos @@ -14256,7 +18170,7 @@ length += self.Head.GetLength() length += 1 length += 1 * self.PointAttrIDCount - length += 2 * self.PointAttrIDCount + length += 4 * self.PointAttrIDCount return length @@ -14267,7 +18181,7 @@ for i in range(self.PointAttrIDCount): data = CommFunc.WriteBYTE(data, self.PointAttrIDList[i]) for i in range(self.PointAttrIDCount): - data = CommFunc.WriteWORD(data, self.PointValueList[i]) + data = CommFunc.WriteDWORD(data, self.PointValueList[i]) return data def OutputString(self): @@ -14288,6 +18202,326 @@ m_NAtagCMAddPoint=tagCMAddPoint() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMAddPoint.Head.Cmd,m_NAtagCMAddPoint.Head.SubCmd))] = m_NAtagCMAddPoint + + +#------------------------------------------------------ +# B2 10 竞技场挑战玩家 #tagCMArenaBattle + +class tagCMArenaBattle(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagPlayerID", c_int), # 目标玩家ID或机器人ID + ("Result", c_ubyte), # 0-进入自定义场景发送通知后端;1-胜利(后端处理,暂时不需要发送此状态);2-失败(前端被对手击杀需要发送此状态) + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x10 + self.TagPlayerID = 0 + self.Result = 0 + return + + def GetLength(self): + return sizeof(tagCMArenaBattle) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 10 竞技场挑战玩家 //tagCMArenaBattle: + Cmd:%s, + SubCmd:%s, + TagPlayerID:%d, + Result:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagPlayerID, + self.Result + ) + return DumpString + + +m_NAtagCMArenaBattle=tagCMArenaBattle() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaBattle.Cmd,m_NAtagCMArenaBattle.SubCmd))] = m_NAtagCMArenaBattle + + +#------------------------------------------------------ +# B2 09 竞技场匹配玩家 #tagCMArenaMatch + +class tagCMArenaMatch(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsRefresh", c_ubyte), # 0-打开界面无匹配数据时时查询,1-强制刷新匹配列表 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x09 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x09 + self.IsRefresh = 0 + return + + def GetLength(self): + return sizeof(tagCMArenaMatch) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 09 竞技场匹配玩家 //tagCMArenaMatch: + Cmd:%s, + SubCmd:%s, + IsRefresh:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsRefresh + ) + return DumpString + + +m_NAtagCMArenaMatch=tagCMArenaMatch() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMArenaMatch.Cmd,m_NAtagCMArenaMatch.SubCmd))] = m_NAtagCMArenaMatch + + +#------------------------------------------------------ +# B2 12 领取功能系统特权奖励 #tagCMGetFuncSysPrivilegeAward + +class tagCMGetFuncSysPrivilegeAward(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FuncSysID", c_ubyte), # 功能系统ID + ("DayNum", c_ubyte), # 第X天,1为第1天 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x12 + self.FuncSysID = 0 + self.DayNum = 0 + return + + def GetLength(self): + return sizeof(tagCMGetFuncSysPrivilegeAward) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 12 领取功能系统特权奖励 //tagCMGetFuncSysPrivilegeAward: + Cmd:%s, + SubCmd:%s, + FuncSysID:%d, + DayNum:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FuncSysID, + self.DayNum + ) + return DumpString + + +m_NAtagCMGetFuncSysPrivilegeAward=tagCMGetFuncSysPrivilegeAward() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetFuncSysPrivilegeAward.Cmd,m_NAtagCMGetFuncSysPrivilegeAward.SubCmd))] = m_NAtagCMGetFuncSysPrivilegeAward + + +#------------------------------------------------------ +# B2 16 古宝激活 #tagCMGubaoActivate + +class tagCMGubaoActivate(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GubaoID", c_ushort), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x16 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x16 + self.GubaoID = 0 + return + + def GetLength(self): + return sizeof(tagCMGubaoActivate) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 16 古宝激活 //tagCMGubaoActivate: + Cmd:%s, + SubCmd:%s, + GubaoID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GubaoID + ) + return DumpString + + +m_NAtagCMGubaoActivate=tagCMGubaoActivate() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoActivate.Cmd,m_NAtagCMGubaoActivate.SubCmd))] = m_NAtagCMGubaoActivate + + +#------------------------------------------------------ +# B2 18 古宝升级 #tagCMGubaoLVUp + +class tagCMGubaoLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GubaoID", c_ushort), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x18 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x18 + self.GubaoID = 0 + return + + def GetLength(self): + return sizeof(tagCMGubaoLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 18 古宝升级 //tagCMGubaoLVUp: + Cmd:%s, + SubCmd:%s, + GubaoID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GubaoID + ) + return DumpString + + +m_NAtagCMGubaoLVUp=tagCMGubaoLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoLVUp.Cmd,m_NAtagCMGubaoLVUp.SubCmd))] = m_NAtagCMGubaoLVUp + + +#------------------------------------------------------ +# B2 17 古宝升星 #tagCMGubaoStarUp + +class tagCMGubaoStarUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GubaoID", c_ushort), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x17 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x17 + self.GubaoID = 0 + return + + def GetLength(self): + return sizeof(tagCMGubaoStarUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 17 古宝升星 //tagCMGubaoStarUp: + Cmd:%s, + SubCmd:%s, + GubaoID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GubaoID + ) + return DumpString + + +m_NAtagCMGubaoStarUp=tagCMGubaoStarUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGubaoStarUp.Cmd,m_NAtagCMGubaoStarUp.SubCmd))] = m_NAtagCMGubaoStarUp #------------------------------------------------------ @@ -14336,6 +18570,125 @@ m_NAtagCMResetAttrPoint=tagCMResetAttrPoint() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMResetAttrPoint.Cmd,m_NAtagCMResetAttrPoint.SubCmd))] = m_NAtagCMResetAttrPoint + + +#------------------------------------------------------ +# B2 19 神通升级 #tagCMShentongLVUp + +class tagCMShentongLVUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ShentongID", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x19 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB2 + self.SubCmd = 0x19 + self.ShentongID = 0 + return + + def GetLength(self): + return sizeof(tagCMShentongLVUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 19 神通升级 //tagCMShentongLVUp: + Cmd:%s, + SubCmd:%s, + ShentongID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ShentongID + ) + return DumpString + + +m_NAtagCMShentongLVUp=tagCMShentongLVUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongLVUp.Cmd,m_NAtagCMShentongLVUp.SubCmd))] = m_NAtagCMShentongLVUp + + +#------------------------------------------------------ +# B2 20 神通技能设置 #tagCMShentongSkillSet + +class tagCMShentongSkillSet(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + SkillIDList = list() #(vector<DWORD> SkillIDList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.SkillIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x20 + self.Count = 0 + self.SkillIDList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 * self.Count + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteDWORD(data, self.SkillIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SkillIDList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagCMShentongSkillSet=tagCMShentongSkillSet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongSkillSet.Head.Cmd,m_NAtagCMShentongSkillSet.Head.SubCmd))] = m_NAtagCMShentongSkillSet #------------------------------------------------------ @@ -14622,6 +18975,498 @@ #------------------------------------------------------ +# B3 17 情戒解锁 #tagCMLoveRingUnlock + +class tagCMLoveRingUnlock(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x17 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x17 + return + + def GetLength(self): + return sizeof(tagCMLoveRingUnlock) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 17 情戒解锁 //tagCMLoveRingUnlock: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMLoveRingUnlock=tagCMLoveRingUnlock() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUnlock.Cmd,m_NAtagCMLoveRingUnlock.SubCmd))] = m_NAtagCMLoveRingUnlock + + +#------------------------------------------------------ +# B3 18 情戒升级 #tagCMLoveRingUp + +class tagCMLoveRingUp(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("UseItemCnt", c_int), #消耗材料个数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x18 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x18 + self.UseItemCnt = 0 + return + + def GetLength(self): + return sizeof(tagCMLoveRingUp) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 18 情戒升级 //tagCMLoveRingUp: + Cmd:%s, + SubCmd:%s, + UseItemCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.UseItemCnt + ) + return DumpString + + +m_NAtagCMLoveRingUp=tagCMLoveRingUp() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUp.Cmd,m_NAtagCMLoveRingUp.SubCmd))] = m_NAtagCMLoveRingUp + + +#------------------------------------------------------ +# B3 15 离婚 #tagCMMarryBreak + +class tagCMMarryBreak(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BreakType", c_ubyte), # 0-和平离婚;1-强制离婚 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x15 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x15 + self.BreakType = 0 + return + + def GetLength(self): + return sizeof(tagCMMarryBreak) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 15 离婚 //tagCMMarryBreak: + Cmd:%s, + SubCmd:%s, + BreakType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BreakType + ) + return DumpString + + +m_NAtagCMMarryBreak=tagCMMarryBreak() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBreak.Cmd,m_NAtagCMMarryBreak.SubCmd))] = m_NAtagCMMarryBreak + + +#------------------------------------------------------ +# B3 14 购买婚礼烟花 #tagCMMarryBuyFireworks + +class tagCMMarryBuyFireworks(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerIDA", c_int), # 喜糖所属玩家IDA + ("PlayerIDB", c_int), # 喜糖所属玩家IDB + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x14 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x14 + self.PlayerIDA = 0 + self.PlayerIDB = 0 + return + + def GetLength(self): + return sizeof(tagCMMarryBuyFireworks) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 14 购买婚礼烟花 //tagCMMarryBuyFireworks: + Cmd:%s, + SubCmd:%s, + PlayerIDA:%d, + PlayerIDB:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerIDA, + self.PlayerIDB + ) + return DumpString + + +m_NAtagCMMarryBuyFireworks=tagCMMarryBuyFireworks() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBuyFireworks.Cmd,m_NAtagCMMarryBuyFireworks.SubCmd))] = m_NAtagCMMarryBuyFireworks + + +#------------------------------------------------------ +# B3 13 吃喜糖 #tagCMMarryEatCandy + +class tagCMMarryEatCandy(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerIDA", c_int), # 喜糖所属玩家IDA + ("PlayerIDB", c_int), # 喜糖所属玩家IDB + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x13 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x13 + self.PlayerIDA = 0 + self.PlayerIDB = 0 + return + + def GetLength(self): + return sizeof(tagCMMarryEatCandy) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 13 吃喜糖 //tagCMMarryEatCandy: + Cmd:%s, + SubCmd:%s, + PlayerIDA:%d, + PlayerIDB:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerIDA, + self.PlayerIDB + ) + return DumpString + + +m_NAtagCMMarryEatCandy=tagCMMarryEatCandy() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryEatCandy.Cmd,m_NAtagCMMarryEatCandy.SubCmd))] = m_NAtagCMMarryEatCandy + + +#------------------------------------------------------ +# B3 11 提亲 #tagCMMarryReq + +class tagCMMarryReq(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagPlayerID", c_int), # 目标玩家ID + ("BridePriceID", c_ubyte), # 聘礼ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + self.SubCmd = 0x11 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB3 + self.SubCmd = 0x11 + self.TagPlayerID = 0 + self.BridePriceID = 0 + return + + def GetLength(self): + return sizeof(tagCMMarryReq) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 11 提亲 //tagCMMarryReq: + Cmd:%s, + SubCmd:%s, + TagPlayerID:%d, + BridePriceID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagPlayerID, + self.BridePriceID + ) + return DumpString + + +m_NAtagCMMarryReq=tagCMMarryReq() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryReq.Cmd,m_NAtagCMMarryReq.SubCmd))] = m_NAtagCMMarryReq + + +#------------------------------------------------------ +# B3 10 送礼物 #tagCMSendGifts + +class tagCMSendGifts(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("TagPlayerID", c_int), # 目标玩家ID + ("GiftNum", c_ushort), # 赠送礼物编号 + ("GiftCount", c_int), # 赠送礼物数量 + ("IsAutoBuy", c_ubyte), # 是否自动购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB3 + 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 = 0xB3 + self.SubCmd = 0x10 + self.TagPlayerID = 0 + self.GiftNum = 0 + self.GiftCount = 0 + self.IsAutoBuy = 0 + return + + def GetLength(self): + return sizeof(tagCMSendGifts) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B3 10 送礼物 //tagCMSendGifts: + Cmd:%s, + SubCmd:%s, + TagPlayerID:%d, + GiftNum:%d, + GiftCount:%d, + IsAutoBuy:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TagPlayerID, + self.GiftNum, + self.GiftCount, + self.IsAutoBuy + ) + return DumpString + + +m_NAtagCMSendGifts=tagCMSendGifts() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSendGifts.Cmd,m_NAtagCMSendGifts.SubCmd))] = m_NAtagCMSendGifts + + +#------------------------------------------------------ +# B4 0F 回收私有专属木桩怪 #tagCMRecyclePriWoodPile + +class tagCMRecyclePriWoodPile(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ObjID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + self.SubCmd = 0x0F + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB4 + self.SubCmd = 0x0F + self.ObjID = 0 + return + + def GetLength(self): + return sizeof(tagCMRecyclePriWoodPile) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 0F 回收私有专属木桩怪 //tagCMRecyclePriWoodPile: + Cmd:%s, + SubCmd:%s, + ObjID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ObjID + ) + return DumpString + + +m_NAtagCMRecyclePriWoodPile=tagCMRecyclePriWoodPile() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRecyclePriWoodPile.Cmd,m_NAtagCMRecyclePriWoodPile.SubCmd))] = m_NAtagCMRecyclePriWoodPile + + +#------------------------------------------------------ +# B4 0E 玩家掉血 #tagCMRoleLostHP + +class tagCMRoleLostHP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("LostHP", c_int), + ("LostHPEx", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + self.SubCmd = 0x0E + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB4 + self.SubCmd = 0x0E + self.LostHP = 0 + self.LostHPEx = 0 + return + + def GetLength(self): + return sizeof(tagCMRoleLostHP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 0E 玩家掉血 //tagCMRoleLostHP: + Cmd:%s, + SubCmd:%s, + LostHP:%d, + LostHPEx:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.LostHP, + self.LostHPEx + ) + return DumpString + + +m_NAtagCMRoleLostHP=tagCMRoleLostHP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRoleLostHP.Cmd,m_NAtagCMRoleLostHP.SubCmd))] = m_NAtagCMRoleLostHP + + +#------------------------------------------------------ # B4 0C 召唤私有专属木桩怪 #tagCMSummonPriWoodPile class tagCMSummonPriWoodPile(Structure): @@ -14631,6 +19476,8 @@ ("SubCmd", c_ubyte), ("NPCID", c_int), ("Count", c_ubyte), #默认1个,最多5个 + ("HP", c_int), #默认0取最大值,其中一个血量数值大于0则用指定血量 + ("HPEx", c_int), #默认0取最大值,其中一个血量数值大于0则用指定血量 ] def __init__(self): @@ -14649,6 +19496,8 @@ self.SubCmd = 0x0C self.NPCID = 0 self.Count = 0 + self.HP = 0 + self.HPEx = 0 return def GetLength(self): @@ -14662,13 +19511,17 @@ Cmd:%s, SubCmd:%s, NPCID:%d, - Count:%d + Count:%d, + HP:%d, + HPEx:%d '''\ %( self.Cmd, self.SubCmd, self.NPCID, - self.Count + self.Count, + self.HP, + self.HPEx ) return DumpString @@ -15182,6 +20035,7 @@ ("ObjID", c_int), ("AttackType", c_ubyte), #爆击, miss ("HurtHP", c_int), + ("HurtHPEx", c_int), ] def __init__(self): @@ -15198,6 +20052,7 @@ self.ObjID = 0 self.AttackType = 0 self.HurtHP = 0 + self.HurtHPEx = 0 return def GetLength(self): @@ -15211,13 +20066,15 @@ ObjType:%d, ObjID:%d, AttackType:%d, - HurtHP:%d + HurtHP:%d, + HurtHPEx:%d '''\ %( self.ObjType, self.ObjID, self.AttackType, - self.HurtHP + self.HurtHP, + self.HurtHPEx ) return DumpString @@ -15583,7 +20440,7 @@ class tagCMBiddingAuctionItem(Structure): Head = tagHead() ItemGUID = "" #(char ItemGUID[40]) - BiddingPrice = 0 #(WORD BiddingPrice)//竞价价格 + BiddingPrice = 0 #(DWORD BiddingPrice)//竞价价格 data = None def __init__(self): @@ -15596,7 +20453,7 @@ self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) - self.BiddingPrice,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BiddingPrice,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -15612,7 +20469,7 @@ length = 0 length += self.Head.GetLength() length += 40 - length += 2 + length += 4 return length @@ -15620,7 +20477,7 @@ data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteString(data, 40, self.ItemGUID) - data = CommFunc.WriteWORD(data, self.BiddingPrice) + data = CommFunc.WriteDWORD(data, self.BiddingPrice) return data def OutputString(self): @@ -15799,6 +20656,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("ItemIndex", c_ubyte), #物品在背包中索引 + ("SellCount", c_ushort), #上架个数,0代表全部上架 ] def __init__(self): @@ -15816,6 +20674,7 @@ self.Cmd = 0xB5 self.SubCmd = 0x13 self.ItemIndex = 0 + self.SellCount = 0 return def GetLength(self): @@ -15828,18 +20687,77 @@ DumpString = '''// B5 13 拍卖行上架拍品 //tagCMSellAuctionItem: Cmd:%s, SubCmd:%s, - ItemIndex:%d + ItemIndex:%d, + SellCount:%d '''\ %( self.Cmd, self.SubCmd, - self.ItemIndex + self.ItemIndex, + self.SellCount ) return DumpString m_NAtagCMSellAuctionItem=tagCMSellAuctionItem() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSellAuctionItem.Cmd,m_NAtagCMSellAuctionItem.SubCmd))] = m_NAtagCMSellAuctionItem + + +#------------------------------------------------------ +# B5 15 拍卖行下架拍品 #tagCMUnsellAuctionItem + +class tagCMUnsellAuctionItem(Structure): + Head = tagHead() + ItemGUID = "" #(char ItemGUID[40]) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB5 + self.Head.SubCmd = 0x15 + self.ItemGUID = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 40 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 40, self.ItemGUID) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ItemGUID:%s + '''\ + %( + self.Head.OutputString(), + self.ItemGUID + ) + return DumpString + + +m_NAtagCMUnsellAuctionItem=tagCMUnsellAuctionItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUnsellAuctionItem.Head.Cmd,m_NAtagCMUnsellAuctionItem.Head.SubCmd))] = m_NAtagCMUnsellAuctionItem #------------------------------------------------------ @@ -15896,6 +20814,322 @@ m_NAtagCMChangeTeamCheckState=tagCMChangeTeamCheckState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeTeamCheckState.Cmd,m_NAtagCMChangeTeamCheckState.SubCmd))] = m_NAtagCMChangeTeamCheckState + + +#------------------------------------------------------ +# C1 22 跨服排位竞猜 #tagCMChampionshipGuess + +class tagCMChampionshipGuess(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #排位数据分区ID + ("GuessType", c_ubyte), #竞猜类型 8-8强;4-4强排位 + ("PlayerID", c_int), #目标玩家ID + ("GuessCount", c_ubyte), #投注/追加份数 + ("GuessRank", c_ubyte), # 竞猜名次,没有名次的竞猜默认0;1-代表第一名 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x22 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x22 + self.ZoneID = 0 + self.GuessType = 0 + self.PlayerID = 0 + self.GuessCount = 0 + self.GuessRank = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipGuess) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 22 跨服排位竞猜 //tagCMChampionshipGuess: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + GuessType:%d, + PlayerID:%d, + GuessCount:%d, + GuessRank:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.GuessType, + self.PlayerID, + self.GuessCount, + self.GuessRank + ) + return DumpString + + +m_NAtagCMChampionshipGuess=tagCMChampionshipGuess() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipGuess.Cmd,m_NAtagCMChampionshipGuess.SubCmd))] = m_NAtagCMChampionshipGuess + + +#------------------------------------------------------ +# C1 20 跨服排位仙官申请 #tagCMChampionshipOfficialApply + +class tagCMChampionshipOfficialApply(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #仙官数据分区ID + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #申请官职ID + ("Cancel", c_ubyte), #是否取消申请,默认0-申请;1-取消申请 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x20 + 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 = 0x20 + self.ZoneID = 0 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.Cancel = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipOfficialApply) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 20 跨服排位仙官申请 //tagCMChampionshipOfficialApply: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + MainOfficialID:%d, + OfficialID:%d, + Cancel:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.MainOfficialID, + self.OfficialID, + self.Cancel + ) + return DumpString + + +m_NAtagCMChampionshipOfficialApply=tagCMChampionshipOfficialApply() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipOfficialApply.Cmd,m_NAtagCMChampionshipOfficialApply.SubCmd))] = m_NAtagCMChampionshipOfficialApply + + +#------------------------------------------------------ +# C1 21 跨服排位仙官挑战 #tagCMChampionshipOfficialChallenge + +class tagCMChampionshipOfficialChallenge(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #仙官数据分区ID + ("MainOfficialID", c_ushort), #界主官职ID + ("OfficialID", c_ushort), #挑战的目标官职ID + ("PlayerID", c_int), #挑战时的目标玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x21 + self.ZoneID = 0 + self.MainOfficialID = 0 + self.OfficialID = 0 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipOfficialChallenge) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 21 跨服排位仙官挑战 //tagCMChampionshipOfficialChallenge: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + MainOfficialID:%d, + OfficialID:%d, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.MainOfficialID, + self.OfficialID, + self.PlayerID + ) + return DumpString + + +m_NAtagCMChampionshipOfficialChallenge=tagCMChampionshipOfficialChallenge() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipOfficialChallenge.Cmd,m_NAtagCMChampionshipOfficialChallenge.SubCmd))] = m_NAtagCMChampionshipOfficialChallenge + + +#------------------------------------------------------ +# C1 23 跨服排位膜拜 #tagCMChampionshipWorship + +class tagCMChampionshipWorship(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), #仙官数据分区ID + ("PlayerID", c_int), #目标玩家ID + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xC1 + self.SubCmd = 0x23 + self.ZoneID = 0 + self.PlayerID = 0 + return + + def GetLength(self): + return sizeof(tagCMChampionshipWorship) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 23 跨服排位膜拜 //tagCMChampionshipWorship: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + PlayerID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.PlayerID + ) + return DumpString + + +m_NAtagCMChampionshipWorship=tagCMChampionshipWorship() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChampionshipWorship.Cmd,m_NAtagCMChampionshipWorship.SubCmd))] = m_NAtagCMChampionshipWorship + + +#------------------------------------------------------ +# C1 09 跨服战场购买开启场次 #tagCMCrossBattlefieldBuyOpen + +class tagCMCrossBattlefieldBuyOpen(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Hour", c_ubyte), #战场开启时 + ("Minute", c_ubyte), #战场开启分 + ("Faction", c_ubyte), #阵营 1-红;2-蓝 + ("ServerOnly", c_ubyte), #是否仅本服玩家可加入,0-否,1-是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + self.SubCmd = 0x09 + 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 = 0x09 + self.Hour = 0 + self.Minute = 0 + self.Faction = 0 + self.ServerOnly = 0 + return + + def GetLength(self): + return sizeof(tagCMCrossBattlefieldBuyOpen) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 09 跨服战场购买开启场次 //tagCMCrossBattlefieldBuyOpen: + Cmd:%s, + SubCmd:%s, + Hour:%d, + Minute:%d, + Faction:%d, + ServerOnly:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Hour, + self.Minute, + self.Faction, + self.ServerOnly + ) + return DumpString + + +m_NAtagCMCrossBattlefieldBuyOpen=tagCMCrossBattlefieldBuyOpen() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCrossBattlefieldBuyOpen.Cmd,m_NAtagCMCrossBattlefieldBuyOpen.SubCmd))] = m_NAtagCMCrossBattlefieldBuyOpen #------------------------------------------------------ @@ -16272,3 +21506,55 @@ m_NAtagCMExitCrossRealm=tagCMExitCrossRealm() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMExitCrossRealm.Cmd,m_NAtagCMExitCrossRealm.SubCmd))] = m_NAtagCMExitCrossRealm + + +#------------------------------------------------------ +# C1 10 幸运云购购买 #tagCMLuckyCloudBuy + +class tagCMLuckyCloudBuy(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BuyCount", c_ushort), # 购买份数 + ] + + 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.BuyCount = 0 + return + + def GetLength(self): + return sizeof(tagCMLuckyCloudBuy) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 10 幸运云购购买 //tagCMLuckyCloudBuy: + Cmd:%s, + SubCmd:%s, + BuyCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BuyCount + ) + return DumpString + + +m_NAtagCMLuckyCloudBuy=tagCMLuckyCloudBuy() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLuckyCloudBuy.Cmd,m_NAtagCMLuckyCloudBuy.SubCmd))] = m_NAtagCMLuckyCloudBuy \ No newline at end of file -- Gitblit v1.8.0