From e463972e32a6c06dd215a55e1d7799be2bc6f1c5 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期一, 14 一月 2019 13:47:37 +0800 Subject: [PATCH] 5768 【后端】【1.5】新增8-14天活动功能(增加提前显示) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 6024 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 5,001 insertions(+), 1,023 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index d989dba..4611140 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -318,6 +318,14 @@ ("Day", c_ushort), # 已开服天数,从0开始 ("IsMixServer", c_ubyte), #是否是合服服务器 ("MixDay", c_ushort), # 已合服天数,从0开始 + ("OpenWeekday", c_ubyte), #开服是周几,1代表周一 + ("NowYear", c_ushort), #服务器当前时间 - 年 + ("NowMonth", c_ubyte), + ("NowDay", c_ubyte), + ("NowHour", c_ubyte), + ("NowMinute", c_ubyte), + ("NowSecond", c_ubyte), + ("NowMicSecond", c_int), ] def __init__(self): @@ -337,6 +345,14 @@ self.Day = 0 self.IsMixServer = 0 self.MixDay = 0 + self.OpenWeekday = 0 + self.NowYear = 0 + self.NowMonth = 0 + self.NowDay = 0 + self.NowHour = 0 + self.NowMinute = 0 + self.NowSecond = 0 + self.NowMicSecond = 0 return def GetLength(self): @@ -351,14 +367,30 @@ SubCmd:%s, Day:%d, IsMixServer:%d, - MixDay:%d + MixDay:%d, + OpenWeekday:%d, + NowYear:%d, + NowMonth:%d, + NowDay:%d, + NowHour:%d, + NowMinute:%d, + NowSecond:%d, + NowMicSecond:%d '''\ %( self.Cmd, self.SubCmd, self.Day, self.IsMixServer, - self.MixDay + self.MixDay, + self.OpenWeekday, + self.NowYear, + self.NowMonth, + self.NowDay, + self.NowHour, + self.NowMinute, + self.NowSecond, + self.NowMicSecond ) return DumpString @@ -2285,8 +2317,9 @@ class tagGCBossShuntLineState(Structure): BossID = 0 #(DWORD BossID)// bossID - DeadLineCount = 0 #(BYTE DeadLineCount) - DeadLineList = list() #(vector<BYTE> DeadLineList)// 已死亡的线路列表 + LineCount = 0 #(BYTE LineCount) + LineIDList = list() #(vector<BYTE> LineIDList)// 线路ID列表 + StateList = list() #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着 data = None def __init__(self): @@ -2296,43 +2329,52 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DeadLineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.DeadLineCount): + self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.LineCount): value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.DeadLineList.append(value) + self.LineIDList.append(value) + for i in range(self.LineCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.StateList.append(value) return _pos def Clear(self): self.BossID = 0 - self.DeadLineCount = 0 - self.DeadLineList = list() + self.LineCount = 0 + self.LineIDList = list() + self.StateList = list() return def GetLength(self): length = 0 length += 4 length += 1 - length += 1 * self.DeadLineCount + length += 1 * self.LineCount + length += 1 * self.LineCount return length def GetBuffer(self): data = '' data = CommFunc.WriteDWORD(data, self.BossID) - data = CommFunc.WriteBYTE(data, self.DeadLineCount) - for i in range(self.DeadLineCount): - data = CommFunc.WriteBYTE(data, self.DeadLineList[i]) + data = CommFunc.WriteBYTE(data, self.LineCount) + for i in range(self.LineCount): + data = CommFunc.WriteBYTE(data, self.LineIDList[i]) + for i in range(self.LineCount): + data = CommFunc.WriteBYTE(data, self.StateList[i]) return data def OutputString(self): DumpString = ''' BossID:%d, - DeadLineCount:%d, - DeadLineList:%s + LineCount:%d, + LineIDList:%s, + StateList:%s '''\ %( self.BossID, - self.DeadLineCount, + self.LineCount, + "...", "..." ) return DumpString @@ -2868,6 +2910,7 @@ RecordLen = 0 #(WORD RecordLen)// 长度 KillRecord = "" #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 + RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 data = None def __init__(self): @@ -2881,6 +2924,7 @@ self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen) self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -2889,6 +2933,7 @@ self.RecordLen = 0 self.KillRecord = "" self.RefreshSecond = 0 + self.RefreshCD = 0 return def GetLength(self): @@ -2897,6 +2942,7 @@ length += 1 length += 2 length += len(self.KillRecord) + length += 4 length += 4 return length @@ -2908,6 +2954,7 @@ data = CommFunc.WriteWORD(data, self.RecordLen) data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord) data = CommFunc.WriteDWORD(data, self.RefreshSecond) + data = CommFunc.WriteDWORD(data, self.RefreshCD) return data def OutputString(self): @@ -2916,14 +2963,16 @@ IsAlive:%d, RecordLen:%d, KillRecord:%s, - RefreshSecond:%d + RefreshSecond:%d, + RefreshCD:%d '''\ %( self.BossID, self.IsAlive, self.RecordLen, self.KillRecord, - self.RefreshSecond + self.RefreshSecond, + self.RefreshCD ) return DumpString @@ -4185,6 +4234,114 @@ #------------------------------------------------------ +# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo + +class tagGCStoreServerBuyCnt(Structure): + _pack_ = 1 + _fields_ = [ + ("GoodsID", c_int), #商品标识 + ("BuyCnt", 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.GoodsID = 0 + self.BuyCnt = 0 + return + + def GetLength(self): + return sizeof(tagGCStoreServerBuyCnt) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo: + GoodsID:%d, + BuyCnt:%d + '''\ + %( + self.GoodsID, + self.BuyCnt + ) + return DumpString + + +class tagGCStoreServerBuyCntInfo(Structure): + Head = tagHead() + Count = 0 #(WORD Count)//数量 + InfoList = list() #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x06 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temInfoList = tagGCStoreServerBuyCnt() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x06 + 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_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo + + +#------------------------------------------------------ #A9 21 角色改名结果 #tagUpdatePlayerNameResult class tagUpdatePlayerNameResult(Structure): @@ -4402,6 +4559,7 @@ ("SubCmd", c_ubyte), ("Point", c_int), # 复活点数 ("TotalPoint", c_int), # 复活总点数 + ("RebornCnt", c_ushort), # 复活次数 ] def __init__(self): @@ -4420,6 +4578,7 @@ self.SubCmd = 0x08 self.Point = 0 self.TotalPoint = 0 + self.RebornCnt = 0 return def GetLength(self): @@ -4433,13 +4592,15 @@ Cmd:%s, SubCmd:%s, Point:%d, - TotalPoint:%d + TotalPoint:%d, + RebornCnt:%d '''\ %( self.Cmd, self.SubCmd, self.Point, - self.TotalPoint + self.TotalPoint, + self.RebornCnt ) return DumpString @@ -4457,6 +4618,7 @@ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d WorldLV = 0 #(WORD WorldLV)// 世界等级 LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 data = None def __init__(self): @@ -4472,6 +4634,7 @@ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -4483,6 +4646,7 @@ self.EndtDate = "" self.WorldLV = 0 self.LimitLV = 0 + self.ResetType = 0 return def GetLength(self): @@ -4492,6 +4656,7 @@ length += 10 length += 2 length += 2 + length += 1 return length @@ -4502,6 +4667,7 @@ data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteWORD(data, self.WorldLV) data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) return data def OutputString(self): @@ -4510,14 +4676,16 @@ StartDate:%s, EndtDate:%s, WorldLV:%d, - LimitLV:%d + LimitLV:%d, + ResetType:%d '''\ %( self.Head.OutputString(), self.StartDate, self.EndtDate, self.WorldLV, - self.LimitLV + self.LimitLV, + self.ResetType ) return DumpString @@ -5029,6 +5197,7 @@ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d Multiple = 0 #(BYTE Multiple)// 倍数 LimitLV = 0 #(WORD LimitLV)// 限制等级 + LimitPoint = 0 #(DWORD LimitPoint)// 限制获得修行点 data = None def __init__(self): @@ -5044,6 +5213,7 @@ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.Multiple,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LimitPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -5055,6 +5225,7 @@ self.EndtDate = "" self.Multiple = 0 self.LimitLV = 0 + self.LimitPoint = 0 return def GetLength(self): @@ -5064,6 +5235,7 @@ length += 10 length += 1 length += 2 + length += 4 return length @@ -5074,6 +5246,7 @@ data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteBYTE(data, self.Multiple) data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteDWORD(data, self.LimitPoint) return data def OutputString(self): @@ -5082,14 +5255,16 @@ StartDate:%s, EndtDate:%s, Multiple:%d, - LimitLV:%d + LimitLV:%d, + LimitPoint:%d '''\ %( self.Head.OutputString(), self.StartDate, self.EndtDate, self.Multiple, - self.LimitLV + self.LimitLV, + self.LimitPoint ) return DumpString @@ -6414,6 +6589,66 @@ m_NAtagGCVoiceChat=tagGCVoiceChat() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCVoiceChat.Head.Cmd,m_NAtagGCVoiceChat.Head.SubCmd))] = m_NAtagGCVoiceChat + + +#------------------------------------------------------ +# B9 13 进入组队副本失败原因 #tagGCEnterTeamFBFailReason + +class tagGCEnterTeamFBFailReason(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MapID", c_int), # 请求进入的地图ID + ("AskType", c_ubyte), # 请求类型: 0-匹配请求;1-进入请求 + ("Reason", c_ubyte), # 失败原因:2-次数不足;3-进入CD中;6-门票不足 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB9 + 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 = 0xB9 + self.SubCmd = 0x13 + self.MapID = 0 + self.AskType = 0 + self.Reason = 0 + return + + def GetLength(self): + return sizeof(tagGCEnterTeamFBFailReason) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B9 13 进入组队副本失败原因 //tagGCEnterTeamFBFailReason: + Cmd:%s, + SubCmd:%s, + MapID:%d, + AskType:%d, + Reason:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.MapID, + self.AskType, + self.Reason + ) + return DumpString + + +m_NAtagGCEnterTeamFBFailReason=tagGCEnterTeamFBFailReason() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCEnterTeamFBFailReason.Cmd,m_NAtagGCEnterTeamFBFailReason.SubCmd))] = m_NAtagGCEnterTeamFBFailReason #------------------------------------------------------ @@ -7812,875 +8047,699 @@ #------------------------------------------------------ -# D1 25 通知可进入跨服王者争霸 #tagCanEnterMergeKing +# C0 05 跨服PK赛季排行榜 #tagGCCrossRealmPKBillboardInfo -class tagCanEnterMergeKing(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("GroupType", c_ubyte), # 战斗赛事组类型,如16强等 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xD1 - 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 = 0xD1 - self.SubCmd = 0x25 - self.GroupType = 0 - return - - def GetLength(self): - return sizeof(tagCanEnterMergeKing) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// D1 25 通知可进入跨服王者争霸 //tagCanEnterMergeKing: - Cmd:%s, - SubCmd:%s, - GroupType:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.GroupType - ) - return DumpString - - -m_NAtagCanEnterMergeKing=tagCanEnterMergeKing() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergeKing.Cmd,m_NAtagCanEnterMergeKing.SubCmd))] = m_NAtagCanEnterMergeKing - - -#------------------------------------------------------ -# D1 24 通知可进入跨服PK匹配 #tagCanEnterMergePK - -class tagCanEnterMergePKMember(Structure): - Head = tagHead() - AccIDLen = 0 #(BYTE AccIDLen) - AccID = "" #(String AccID) +class tagGCCrossRealmPKBillboardData(Structure): + PlayerID = 0 #(DWORD PlayerID) NameLen = 0 #(BYTE NameLen) PlayerName = "" #(String PlayerName) Job = 0 #(BYTE Job) - PKCnt = 0 #(DWORD PKCnt)// 已PK次数 - PKCWinCnt = 0 #(DWORD PKCWinCnt)// 当前连胜次数 - Score = 0 #(DWORD Score)// 赛季积分 - DayScore = 0 #(DWORD DayScore)// 当日积分 - PKWinCnt = 0 #(DWORD PKWinCnt)// 累计胜利次数 - MaxCWinCnt = 0 #(DWORD MaxCWinCnt)// 最大连胜次数 - Grade = 0 #(BYTE Grade)// 当前段位 - FightPower = 0 #(DWORD FightPower)// 战斗力 - PlayerLV = 0 #(WORD PlayerLV)// 等级 - MaxHP = 0 #(DWORD MaxHP)// 最大生命值 + FightPower = 0 #(DWORD FightPower) + RealmLV = 0 #(WORD RealmLV) + PKScore = 0 #(DWORD PKScore) + DanLV = 0 #(BYTE DanLV) data = None def __init__(self): self.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x24 return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen) + 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.PKCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PKCWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Score,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DayScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PKWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MaxCWinCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Grade,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PKScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x24 - self.AccIDLen = 0 - self.AccID = "" + self.PlayerID = 0 self.NameLen = 0 self.PlayerName = "" self.Job = 0 - self.PKCnt = 0 - self.PKCWinCnt = 0 - self.Score = 0 - self.DayScore = 0 - self.PKWinCnt = 0 - self.MaxCWinCnt = 0 - self.Grade = 0 self.FightPower = 0 - self.PlayerLV = 0 - self.MaxHP = 0 + self.RealmLV = 0 + self.PKScore = 0 + self.DanLV = 0 return def GetLength(self): length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.AccID) + length += 4 length += 1 length += len(self.PlayerName) length += 1 length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 4 - length += 1 - length += 4 length += 2 length += 4 + length += 1 return length def GetBuffer(self): data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.AccIDLen) - data = CommFunc.WriteString(data, self.AccIDLen, self.AccID) + 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.WriteDWORD(data, self.PKCnt) - data = CommFunc.WriteDWORD(data, self.PKCWinCnt) - data = CommFunc.WriteDWORD(data, self.Score) - data = CommFunc.WriteDWORD(data, self.DayScore) - data = CommFunc.WriteDWORD(data, self.PKWinCnt) - data = CommFunc.WriteDWORD(data, self.MaxCWinCnt) - data = CommFunc.WriteBYTE(data, self.Grade) data = CommFunc.WriteDWORD(data, self.FightPower) - data = CommFunc.WriteWORD(data, self.PlayerLV) - data = CommFunc.WriteDWORD(data, self.MaxHP) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.PKScore) + data = CommFunc.WriteBYTE(data, self.DanLV) return data def OutputString(self): DumpString = ''' - Head:%s, - AccIDLen:%d, - AccID:%s, + PlayerID:%d, NameLen:%d, PlayerName:%s, Job:%d, - PKCnt:%d, - PKCWinCnt:%d, - Score:%d, - DayScore:%d, - PKWinCnt:%d, - MaxCWinCnt:%d, - Grade:%d, FightPower:%d, - PlayerLV:%d, - MaxHP:%d + RealmLV:%d, + PKScore:%d, + DanLV:%d '''\ %( - self.Head.OutputString(), - self.AccIDLen, - self.AccID, + self.PlayerID, self.NameLen, self.PlayerName, self.Job, - self.PKCnt, - self.PKCWinCnt, - self.Score, - self.DayScore, - self.PKWinCnt, - self.MaxCWinCnt, - self.Grade, self.FightPower, - self.PlayerLV, - self.MaxHP + self.RealmLV, + self.PKScore, + self.DanLV ) return DumpString -class tagCanEnterMergePK(Structure): +class tagGCCrossRealmPKBillboardInfo(Structure): Head = tagHead() - MapID = 0 #(DWORD MapID)// 要进入的地图ID - RoomID = 0 #(DWORD RoomID)// 要进入的房间ID - MemberCnt = 0 #(BYTE MemberCnt)// 对战玩家个数 - MemberList = list() #(vector<tagCanEnterMergePKMember> MemberList)// 对战玩家详细信息 + ZoneID = 0 #(BYTE ZoneID)// 赛区ID + SeasonID = 0 #(BYTE SeasonID)// 赛季ID + Count = 0 #(WORD Count) + PKBillboardList = list() #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList) data = None def __init__(self): self.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x24 + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x05 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.RoomID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MemberCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.MemberCnt): - temMemberList = tagCanEnterMergePKMember() - _pos = temMemberList.ReadData(_lpData, _pos) - self.MemberList.append(temMemberList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x24 - self.MapID = 0 - self.RoomID = 0 - self.MemberCnt = 0 - self.MemberList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 4 - length += 1 - for i in range(self.MemberCnt): - length += self.MemberList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.MapID) - data = CommFunc.WriteDWORD(data, self.RoomID) - data = CommFunc.WriteBYTE(data, self.MemberCnt) - for i in range(self.MemberCnt): - data = CommFunc.WriteString(data, self.MemberList[i].GetLength(), self.MemberList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - MapID:%d, - RoomID:%d, - MemberCnt:%d, - MemberList:%s - '''\ - %( - self.Head.OutputString(), - self.MapID, - self.RoomID, - self.MemberCnt, - "..." - ) - return DumpString - - -m_NAtagCanEnterMergePK=tagCanEnterMergePK() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergePK.Head.Cmd,m_NAtagCanEnterMergePK.Head.SubCmd))] = m_NAtagCanEnterMergePK - - -#------------------------------------------------------ -# D1 23 通知可进入跨服活动 #tagCanEnterMergeServer - -class tagCanEnterMergeServer(Structure): - Head = tagHead() - ActionType = 0 #(BYTE ActionType)//活动类型 - MapID = 0 #(DWORD MapID)// 登录后在中转地图时要跳转进入的地图ID - LineID = 0 #(DWORD LineID)// 要进入的线路或地图扩展数据 - NewAccIDLen = 0 #(BYTE NewAccIDLen) - NewAccID = "" #(String NewAccID) - NewPswLen = 0 #(BYTE NewPswLen) - NewPsw = "" #(String NewPsw) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x23 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ActionType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.NewAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NewAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.NewAccIDLen) - self.NewPswLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NewPsw,_pos = CommFunc.ReadString(_lpData, _pos,self.NewPswLen) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x23 - self.ActionType = 0 - self.MapID = 0 - self.LineID = 0 - self.NewAccIDLen = 0 - self.NewAccID = "" - self.NewPswLen = 0 - self.NewPsw = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 4 - length += 4 - length += 1 - length += len(self.NewAccID) - length += 1 - length += len(self.NewPsw) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ActionType) - data = CommFunc.WriteDWORD(data, self.MapID) - data = CommFunc.WriteDWORD(data, self.LineID) - data = CommFunc.WriteBYTE(data, self.NewAccIDLen) - data = CommFunc.WriteString(data, self.NewAccIDLen, self.NewAccID) - data = CommFunc.WriteBYTE(data, self.NewPswLen) - data = CommFunc.WriteString(data, self.NewPswLen, self.NewPsw) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ActionType:%d, - MapID:%d, - LineID:%d, - NewAccIDLen:%d, - NewAccID:%s, - NewPswLen:%d, - NewPsw:%s - '''\ - %( - self.Head.OutputString(), - self.ActionType, - self.MapID, - self.LineID, - self.NewAccIDLen, - self.NewAccID, - self.NewPswLen, - self.NewPsw - ) - return DumpString - - -m_NAtagCanEnterMergeServer=tagCanEnterMergeServer() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCanEnterMergeServer.Head.Cmd,m_NAtagCanEnterMergeServer.Head.SubCmd))] = m_NAtagCanEnterMergeServer - - -#------------------------------------------------------ -#D1 08 上传数据查询结果 #tagMergeRegisterQueryResult - -class tagMergeRegisterQueryResult(Structure): - Head = tagHead() - NewAccIDLen = 0 #(BYTE NewAccIDLen) - NewAccID = "" #(String NewAccID) - NewPswLen = 0 #(BYTE NewPswLen) - NewPsw = "" #(String NewPsw) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x08 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.NewAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NewAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.NewAccIDLen) - self.NewPswLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.NewPsw,_pos = CommFunc.ReadString(_lpData, _pos,self.NewPswLen) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x08 - self.NewAccIDLen = 0 - self.NewAccID = "" - self.NewPswLen = 0 - self.NewPsw = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.NewAccID) - length += 1 - length += len(self.NewPsw) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.NewAccIDLen) - data = CommFunc.WriteString(data, self.NewAccIDLen, self.NewAccID) - data = CommFunc.WriteBYTE(data, self.NewPswLen) - data = CommFunc.WriteString(data, self.NewPswLen, self.NewPsw) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - NewAccIDLen:%d, - NewAccID:%s, - NewPswLen:%d, - NewPsw:%s - '''\ - %( - self.Head.OutputString(), - self.NewAccIDLen, - self.NewAccID, - self.NewPswLen, - self.NewPsw - ) - return DumpString - - -m_NAtagMergeRegisterQueryResult=tagMergeRegisterQueryResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeRegisterQueryResult.Head.Cmd,m_NAtagMergeRegisterQueryResult.Head.SubCmd))] = m_NAtagMergeRegisterQueryResult - - -#------------------------------------------------------ -#D1 16 跨服赛服务器信息 #tagMergeServerInfo - -class tagMergeServerInfo(Structure): - Head = tagHead() - ServerIPLen = 0 #(BYTE ServerIPLen) - ServerIP = "" #(String ServerIP) - Port = 0 #(DWORD Port) - IsMergeServer = 0 #(BYTE IsMergeServer) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x16 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.ServerIPLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.ServerIP,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerIPLen) - self.Port,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.IsMergeServer,_pos = CommFunc.ReadBYTE(_lpData, _pos) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x16 - self.ServerIPLen = 0 - self.ServerIP = "" - self.Port = 0 - self.IsMergeServer = 0 - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += len(self.ServerIP) - length += 4 - length += 1 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.ServerIPLen) - data = CommFunc.WriteString(data, self.ServerIPLen, self.ServerIP) - data = CommFunc.WriteDWORD(data, self.Port) - data = CommFunc.WriteBYTE(data, self.IsMergeServer) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - ServerIPLen:%d, - ServerIP:%s, - Port:%d, - IsMergeServer:%d - '''\ - %( - self.Head.OutputString(), - self.ServerIPLen, - self.ServerIP, - self.Port, - self.IsMergeServer - ) - return DumpString - - -m_NAtagMergeServerInfo=tagMergeServerInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeServerInfo.Head.Cmd,m_NAtagMergeServerInfo.Head.SubCmd))] = m_NAtagMergeServerInfo - - -#------------------------------------------------------ -# D1 27 通知跨服PK战斗结果 #tagMergePKOverInfo - -class tagMergePKOver(Structure): - TimeLen = 0 #(BYTE TimeLen) - TimeStr = "" #(String TimeStr)// yyyy-MM-dd HH:mm:ss - RoomID = 0 #(DWORD RoomID) - OverType = 0 #(BYTE OverType) - RemainTime = 0 #(DWORD RemainTime) - WinnerAccIDLen = 0 #(BYTE WinnerAccIDLen) - WinnerAccID = "" #(String WinnerAccID) - LoserAccIDLen = 0 #(BYTE LoserAccIDLen) - LoserAccID = "" #(String LoserAccID) - WinnerID = 0 #(DWORD WinnerID) - LoserID = 0 #(DWORD LoserID) - WinnerNameLen = 0 #(BYTE WinnerNameLen) - WinnerName = "" #(String WinnerName) - LoserNameLen = 0 #(BYTE LoserNameLen) - LoserName = "" #(String LoserName) - WinnerAddScore = 0 #(WORD WinnerAddScore) - LoserAddScoreLen = 0 #(BYTE LoserAddScoreLen) - LoserAddScore = "" #(String LoserAddScore)// 失败附加分,支持负值 - WinnerWinCnt = 0 #(BYTE WinnerWinCnt)// 比分获胜方获胜次数 - LoserWinCnt = 0 #(BYTE LoserWinCnt)// 比分失败方获胜次数 - WinnerCWinCnt = 0 #(WORD WinnerCWinCnt)// 获胜者连胜数 - LuckyItemID = 0 #(DWORD LuckyItemID) - data = None - - def __init__(self): - self.Clear() - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen) - self.RoomID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.OverType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RemainTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.WinnerAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WinnerAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.WinnerAccIDLen) - self.LoserAccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LoserAccID,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserAccIDLen) - self.WinnerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LoserID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.WinnerNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WinnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.WinnerNameLen) - self.LoserNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LoserName,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserNameLen) - self.WinnerAddScore,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LoserAddScoreLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LoserAddScore,_pos = CommFunc.ReadString(_lpData, _pos,self.LoserAddScoreLen) - self.WinnerWinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.LoserWinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.WinnerCWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.LuckyItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - return _pos - - def Clear(self): - self.TimeLen = 0 - self.TimeStr = "" - self.RoomID = 0 - self.OverType = 0 - self.RemainTime = 0 - self.WinnerAccIDLen = 0 - self.WinnerAccID = "" - self.LoserAccIDLen = 0 - self.LoserAccID = "" - self.WinnerID = 0 - self.LoserID = 0 - self.WinnerNameLen = 0 - self.WinnerName = "" - self.LoserNameLen = 0 - self.LoserName = "" - self.WinnerAddScore = 0 - self.LoserAddScoreLen = 0 - self.LoserAddScore = "" - self.WinnerWinCnt = 0 - self.LoserWinCnt = 0 - self.WinnerCWinCnt = 0 - self.LuckyItemID = 0 - return - - def GetLength(self): - length = 0 - length += 1 - length += len(self.TimeStr) - length += 4 - length += 1 - length += 4 - length += 1 - length += len(self.WinnerAccID) - length += 1 - length += len(self.LoserAccID) - length += 4 - length += 4 - length += 1 - length += len(self.WinnerName) - length += 1 - length += len(self.LoserName) - length += 2 - length += 1 - length += len(self.LoserAddScore) - length += 1 - length += 1 - length += 2 - length += 4 - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteBYTE(data, self.TimeLen) - data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr) - data = CommFunc.WriteDWORD(data, self.RoomID) - data = CommFunc.WriteBYTE(data, self.OverType) - data = CommFunc.WriteDWORD(data, self.RemainTime) - data = CommFunc.WriteBYTE(data, self.WinnerAccIDLen) - data = CommFunc.WriteString(data, self.WinnerAccIDLen, self.WinnerAccID) - data = CommFunc.WriteBYTE(data, self.LoserAccIDLen) - data = CommFunc.WriteString(data, self.LoserAccIDLen, self.LoserAccID) - data = CommFunc.WriteDWORD(data, self.WinnerID) - data = CommFunc.WriteDWORD(data, self.LoserID) - data = CommFunc.WriteBYTE(data, self.WinnerNameLen) - data = CommFunc.WriteString(data, self.WinnerNameLen, self.WinnerName) - data = CommFunc.WriteBYTE(data, self.LoserNameLen) - data = CommFunc.WriteString(data, self.LoserNameLen, self.LoserName) - data = CommFunc.WriteWORD(data, self.WinnerAddScore) - data = CommFunc.WriteBYTE(data, self.LoserAddScoreLen) - data = CommFunc.WriteString(data, self.LoserAddScoreLen, self.LoserAddScore) - data = CommFunc.WriteBYTE(data, self.WinnerWinCnt) - data = CommFunc.WriteBYTE(data, self.LoserWinCnt) - data = CommFunc.WriteWORD(data, self.WinnerCWinCnt) - data = CommFunc.WriteDWORD(data, self.LuckyItemID) - return data - - def OutputString(self): - DumpString = ''' - TimeLen:%d, - TimeStr:%s, - RoomID:%d, - OverType:%d, - RemainTime:%d, - WinnerAccIDLen:%d, - WinnerAccID:%s, - LoserAccIDLen:%d, - LoserAccID:%s, - WinnerID:%d, - LoserID:%d, - WinnerNameLen:%d, - WinnerName:%s, - LoserNameLen:%d, - LoserName:%s, - WinnerAddScore:%d, - LoserAddScoreLen:%d, - LoserAddScore:%s, - WinnerWinCnt:%d, - LoserWinCnt:%d, - WinnerCWinCnt:%d, - LuckyItemID:%d - '''\ - %( - self.TimeLen, - self.TimeStr, - self.RoomID, - self.OverType, - self.RemainTime, - self.WinnerAccIDLen, - self.WinnerAccID, - self.LoserAccIDLen, - self.LoserAccID, - self.WinnerID, - self.LoserID, - self.WinnerNameLen, - self.WinnerName, - self.LoserNameLen, - self.LoserName, - self.WinnerAddScore, - self.LoserAddScoreLen, - self.LoserAddScore, - self.WinnerWinCnt, - self.LoserWinCnt, - self.WinnerCWinCnt, - self.LuckyItemID - ) - return DumpString - - -class tagMergePKOverInfo(Structure): - Head = tagHead() - Count = 0 #(BYTE Count) - PKOverList = list() #(vector<tagMergePKOver> PKOverList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x27 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SeasonID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.Count): - temPKOverList = tagMergePKOver() - _pos = temPKOverList.ReadData(_lpData, _pos) - self.PKOverList.append(temPKOverList) + temPKBillboardList = tagGCCrossRealmPKBillboardData() + _pos = temPKBillboardList.ReadData(_lpData, _pos) + self.PKBillboardList.append(temPKBillboardList) return _pos def Clear(self): self.Head = tagHead() self.Head.Clear() - self.Head.Cmd = 0xD1 - self.Head.SubCmd = 0x27 + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x05 + self.ZoneID = 0 + self.SeasonID = 0 self.Count = 0 - self.PKOverList = list() + self.PKBillboardList = list() return def GetLength(self): length = 0 length += self.Head.GetLength() length += 1 + length += 1 + length += 2 for i in range(self.Count): - length += self.PKOverList[i].GetLength() + length += self.PKBillboardList[i].GetLength() return length def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Count) + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.SeasonID) + data = CommFunc.WriteWORD(data, self.Count) for i in range(self.Count): - data = CommFunc.WriteString(data, self.PKOverList[i].GetLength(), self.PKOverList[i].GetBuffer()) + data = CommFunc.WriteString(data, self.PKBillboardList[i].GetLength(), self.PKBillboardList[i].GetBuffer()) return data def OutputString(self): DumpString = ''' Head:%s, + ZoneID:%d, + SeasonID:%d, Count:%d, - PKOverList:%s + PKBillboardList:%s '''\ %( self.Head.OutputString(), + self.ZoneID, + self.SeasonID, self.Count, "..." ) return DumpString -m_NAtagMergePKOverInfo=tagMergePKOverInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergePKOverInfo.Head.Cmd,m_NAtagMergePKOverInfo.Head.SubCmd))] = m_NAtagMergePKOverInfo +m_NAtagGCCrossRealmPKBillboardInfo=tagGCCrossRealmPKBillboardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKBillboardInfo.Head.Cmd,m_NAtagGCCrossRealmPKBillboardInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKBillboardInfo #------------------------------------------------------ -# D1 28 跨服PK赛季信息 #tagGCMergePKSeasonInfo +# C0 01 跨服PK匹配成功 #tagGCCrossRealmPKMatchOK -class tagGCMergePKSeasonInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("SeasonID", c_int), # 赛季ID - ("SeasonStartTime", c_int), # 赛季开始时间 - ("SeasonCycle", c_ubyte), # 赛季周期天数 - ("IsSeasonEnd", c_ubyte), # 赛季是否结束 - ] +class tagGCCrossRealmPKMatchPlayer(Structure): + PlayerID = 0 #(DWORD PlayerID) + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 跨服名字 + Job = 0 #(BYTE Job) + LV = 0 #(WORD LV) + MaxHP = 0 #(DWORD MaxHP)// 默认满血 + MaxProDef = 0 #(DWORD MaxProDef)// 最大护盾 + data = None def __init__(self): self.Clear() - self.Cmd = 0xD1 - self.SubCmd = 0x28 return - def ReadData(self, stringData, _pos=0, _len=0): + def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() + self.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.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxProDef,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos def Clear(self): - self.Cmd = 0xD1 - self.SubCmd = 0x28 - self.SeasonID = 0 - self.SeasonStartTime = 0 - self.SeasonCycle = 0 - self.IsSeasonEnd = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Job = 0 + self.LV = 0 + self.MaxHP = 0 + self.MaxProDef = 0 return def GetLength(self): - return sizeof(tagGCMergePKSeasonInfo) + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + length += 4 + length += 4 + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + 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.MaxHP) + data = CommFunc.WriteDWORD(data, self.MaxProDef) + return data def OutputString(self): - DumpString = '''// D1 28 跨服PK赛季信息 //tagGCMergePKSeasonInfo: - Cmd:%s, - SubCmd:%s, - SeasonID:%d, - SeasonStartTime:%d, - SeasonCycle:%d, - IsSeasonEnd:%d + DumpString = ''' + PlayerID:%d, + NameLen:%d, + PlayerName:%s, + Job:%d, + LV:%d, + MaxHP:%d, + MaxProDef:%d '''\ %( - self.Cmd, - self.SubCmd, - self.SeasonID, - self.SeasonStartTime, - self.SeasonCycle, - self.IsSeasonEnd + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.MaxHP, + self.MaxProDef ) return DumpString -m_NAtagGCMergePKSeasonInfo=tagGCMergePKSeasonInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMergePKSeasonInfo.Cmd,m_NAtagGCMergePKSeasonInfo.SubCmd))] = m_NAtagGCMergePKSeasonInfo +class tagGCCrossRealmPKMatchOK(Structure): + Head = tagHead() + RoomID = 0 #(WORD RoomID)// 房间ID + NameLen = 0 #(BYTE NameLen) + PlayerName = "" #(String PlayerName)// 跨服名字 + Number = 0 #(BYTE Number)// 位置编号;1-左,2-右 + MatchPlayerCount = 0 #(BYTE MatchPlayerCount) + MatchPlayer = list() #(vector<tagGCCrossRealmPKMatchPlayer> MatchPlayer)// 匹配到的玩家 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x01 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RoomID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.Number,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MatchPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MatchPlayerCount): + temMatchPlayer = tagGCCrossRealmPKMatchPlayer() + _pos = temMatchPlayer.ReadData(_lpData, _pos) + self.MatchPlayer.append(temMatchPlayer) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x01 + self.RoomID = 0 + self.NameLen = 0 + self.PlayerName = "" + self.Number = 0 + self.MatchPlayerCount = 0 + self.MatchPlayer = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 1 + for i in range(self.MatchPlayerCount): + length += self.MatchPlayer[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.RoomID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.Number) + data = CommFunc.WriteBYTE(data, self.MatchPlayerCount) + for i in range(self.MatchPlayerCount): + data = CommFunc.WriteString(data, self.MatchPlayer[i].GetLength(), self.MatchPlayer[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RoomID:%d, + NameLen:%d, + PlayerName:%s, + Number:%d, + MatchPlayerCount:%d, + MatchPlayer:%s + '''\ + %( + self.Head.OutputString(), + self.RoomID, + self.NameLen, + self.PlayerName, + self.Number, + self.MatchPlayerCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossRealmPKMatchOK=tagGCCrossRealmPKMatchOK() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKMatchOK.Head.Cmd,m_NAtagGCCrossRealmPKMatchOK.Head.SubCmd))] = m_NAtagGCCrossRealmPKMatchOK #------------------------------------------------------ -# D1 26 通知跨服PK续胜结果 #tagRecoverMergePKWinOK +# C0 03 跨服PK战斗结果 #tagGCCrossRealmPKOverInfo -class tagRecoverMergePKWinOK(Structure): +class tagGCCrossRealmPKOverInfo(Structure): + Head = tagHead() + TimeStr = "" #(char TimeStr[19])// 结算时间,格式 yyyy-MM-dd HH:mm:ss + OverType = 0 #(BYTE OverType)// 0-正常,1-有人离线 + WinnerID = 0 #(DWORD WinnerID)// 胜方ID + RoundCount = 0 #(BYTE RoundCount)// PK回合数 + RoundWinnerID = list() #(vector<DWORD> RoundWinnerID)// 回合获胜ID列表 + AddScore = 0 #(WORD AddScore)// 本场加分 + Score = 0 #(WORD Score)// 当前积分 + DanLV = 0 #(BYTE DanLV)// 当前段位 + CWinCnt = 0 #(WORD CWinCnt)// 当前连胜数 + TagNameLen = 0 #(BYTE TagNameLen) + TagName = "" #(String TagName) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x03 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_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.RoundCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RoundCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.RoundWinnerID.append(value) + self.AddScore,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Score,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.DanLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CWinCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagName,_pos = CommFunc.ReadString(_lpData, _pos,self.TagNameLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x03 + self.TimeStr = "" + self.OverType = 0 + self.WinnerID = 0 + self.RoundCount = 0 + self.RoundWinnerID = list() + self.AddScore = 0 + self.Score = 0 + self.DanLV = 0 + self.CWinCnt = 0 + self.TagNameLen = 0 + self.TagName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 19 + length += 1 + length += 4 + length += 1 + length += 4 * self.RoundCount + length += 2 + length += 2 + length += 1 + length += 2 + length += 1 + length += len(self.TagName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 19, self.TimeStr) + data = CommFunc.WriteBYTE(data, self.OverType) + data = CommFunc.WriteDWORD(data, self.WinnerID) + data = CommFunc.WriteBYTE(data, self.RoundCount) + for i in range(self.RoundCount): + data = CommFunc.WriteDWORD(data, self.RoundWinnerID[i]) + data = CommFunc.WriteWORD(data, self.AddScore) + data = CommFunc.WriteWORD(data, self.Score) + data = CommFunc.WriteBYTE(data, self.DanLV) + data = CommFunc.WriteWORD(data, self.CWinCnt) + data = CommFunc.WriteBYTE(data, self.TagNameLen) + data = CommFunc.WriteString(data, self.TagNameLen, self.TagName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TimeStr:%s, + OverType:%d, + WinnerID:%d, + RoundCount:%d, + RoundWinnerID:%s, + AddScore:%d, + Score:%d, + DanLV:%d, + CWinCnt:%d, + TagNameLen:%d, + TagName:%s + '''\ + %( + self.Head.OutputString(), + self.TimeStr, + self.OverType, + self.WinnerID, + self.RoundCount, + "...", + self.AddScore, + self.Score, + self.DanLV, + self.CWinCnt, + self.TagNameLen, + self.TagName + ) + return DumpString + + +m_NAtagGCCrossRealmPKOverInfo=tagGCCrossRealmPKOverInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKOverInfo.Head.Cmd,m_NAtagGCCrossRealmPKOverInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKOverInfo + + +#------------------------------------------------------ +# C0 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo + +class tagGCCrossRealmPKSeason(Structure): + SeasonID = 0 #(WORD SeasonID)// 当前赛季ID + StartDate = "" #(char StartDate[10])// 开始日期 yyyy-MM-dd + EndDate = "" #(char EndDate[10])// 结束日期 yyyy-MM-dd + EndTime = "" #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + return _pos + + def Clear(self): + self.SeasonID = 0 + self.StartDate = "" + self.EndDate = "" + self.EndTime = "" + return + + def GetLength(self): + length = 0 + length += 2 + length += 10 + length += 10 + length += 5 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteWORD(data, self.SeasonID) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndDate) + data = CommFunc.WriteString(data, 5, self.EndTime) + return data + + def OutputString(self): + DumpString = ''' + SeasonID:%d, + StartDate:%s, + EndDate:%s, + EndTime:%s + '''\ + %( + self.SeasonID, + self.StartDate, + self.EndDate, + self.EndTime + ) + return DumpString + + +class tagGCCrossRealmPKZone(Structure): + ZoneID = 0 #(BYTE ZoneID)// 赛区ID + ZoneNameLen = 0 #(BYTE ZoneNameLen) + ZoneName = "" #(String ZoneName)// 赛区名 + SeasonCount = 0 #(WORD SeasonCount) + SeasonList = list() #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen) + self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.SeasonCount): + temSeasonList = tagGCCrossRealmPKSeason() + _pos = temSeasonList.ReadData(_lpData, _pos) + self.SeasonList.append(temSeasonList) + return _pos + + def Clear(self): + self.ZoneID = 0 + self.ZoneNameLen = 0 + self.ZoneName = "" + self.SeasonCount = 0 + self.SeasonList = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += len(self.ZoneName) + length += 2 + for i in range(self.SeasonCount): + length += self.SeasonList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ZoneID) + data = CommFunc.WriteBYTE(data, self.ZoneNameLen) + data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName) + data = CommFunc.WriteWORD(data, self.SeasonCount) + for i in range(self.SeasonCount): + data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + ZoneID:%d, + ZoneNameLen:%d, + ZoneName:%s, + SeasonCount:%d, + SeasonList:%s + '''\ + %( + self.ZoneID, + self.ZoneNameLen, + self.ZoneName, + self.SeasonCount, + "..." + ) + return DumpString + + +class tagGCCrossRealmPKSeasonInfo(Structure): + Head = tagHead() + ZoneCount = 0 #(BYTE ZoneCount)// 赛区个数 + ZoneList = list() #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x04 + 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): + temZoneList = tagGCCrossRealmPKZone() + _pos = temZoneList.ReadData(_lpData, _pos) + self.ZoneList.append(temZoneList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC0 + self.Head.SubCmd = 0x04 + self.ZoneCount = 0 + self.ZoneList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.ZoneCount): + length += self.ZoneList[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.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ZoneCount:%d, + ZoneList:%s + '''\ + %( + self.Head.OutputString(), + self.ZoneCount, + "..." + ) + return DumpString + + +m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo + + +#------------------------------------------------------ +# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState + +class tagGCCrossRealmPKSeasonState(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), + ("ZoneID", c_ubyte), # 所属赛区ID + ("SeasonID", c_ushort), # 当前赛季ID + ("SeasonState", c_ubyte), # 赛季状态;0-未开启,1-开启中,2-已结束 + ("MatchState", c_ubyte), # 匹配状态;0-未开启;1-开启中 ] def __init__(self): self.Clear() - self.Cmd = 0xD1 - self.SubCmd = 0x26 + self.Cmd = 0xC0 + self.SubCmd = 0x06 return def ReadData(self, stringData, _pos=0, _len=0): @@ -8689,18 +8748,78 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xD1 - self.SubCmd = 0x26 + self.Cmd = 0xC0 + self.SubCmd = 0x06 + self.ZoneID = 0 + self.SeasonID = 0 + self.SeasonState = 0 + self.MatchState = 0 return def GetLength(self): - return sizeof(tagRecoverMergePKWinOK) + return sizeof(tagGCCrossRealmPKSeasonState) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// D1 26 通知跨服PK续胜结果 //tagRecoverMergePKWinOK: + DumpString = '''// C0 06 跨服PK本服赛季状态 //tagGCCrossRealmPKSeasonState: + Cmd:%s, + SubCmd:%s, + ZoneID:%d, + SeasonID:%d, + SeasonState:%d, + MatchState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ZoneID, + self.SeasonID, + self.SeasonState, + self.MatchState + ) + return DumpString + + +m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Cmd,m_NAtagGCCrossRealmPKSeasonState.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState + + +#------------------------------------------------------ +# C0 02 跨服PK开始匹配 #tagGCCrossRealmPKStartMatch + +class tagGCCrossRealmPKStartMatch(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC0 + 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 = 0xC0 + self.SubCmd = 0x02 + return + + def GetLength(self): + return sizeof(tagGCCrossRealmPKStartMatch) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C0 02 跨服PK开始匹配 //tagGCCrossRealmPKStartMatch: Cmd:%s, SubCmd:%s '''\ @@ -8711,8 +8830,8 @@ return DumpString -m_NAtagRecoverMergePKWinOK=tagRecoverMergePKWinOK() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagRecoverMergePKWinOK.Cmd,m_NAtagRecoverMergePKWinOK.SubCmd))] = m_NAtagRecoverMergePKWinOK +m_NAtagGCCrossRealmPKStartMatch=tagGCCrossRealmPKStartMatch() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKStartMatch.Cmd,m_NAtagGCCrossRealmPKStartMatch.SubCmd))] = m_NAtagGCCrossRealmPKStartMatch #------------------------------------------------------ @@ -8944,6 +9063,714 @@ m_NAtagMCCoinToGoldReport=tagMCCoinToGoldReport() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCoinToGoldReport.Head.Cmd,m_NAtagMCCoinToGoldReport.Head.SubCmd))] = m_NAtagMCCoinToGoldReport + + +#------------------------------------------------------ +# A1 12 玩家初始化 #tagMCDBPlayer + +class tagMCDBPlayer(Structure): + Head = tagHead() + AccID = "" #(char AccID[65])//帐号名, 该角色所在的帐号的用户名 + PlayerID = 0 #(DWORD PlayerID) + PlayerName = "" #(char PlayerName[33])//size = 14 + AccState = 0 #(BYTE AccState)//0: 未创建, 1: 创建OK,正常登录 2:封号 3:已删除 + GMLevel = 0 #(BYTE GMLevel)//GM等级, 0:不是GM >=1 : GM的等级 + Sex = 0 #(BYTE Sex)//性别 + Job = 0 #(BYTE Job)//职业, 0.新手 1.游侠 2.战士 3.弓箭手 4.术士 5.道士 + ReincarnationLv = 0 #(WORD ReincarnationLv)// 转生等级 + LV = 0 #(WORD LV)//等级 + LVEx = 0 #(WORD LVEx)//玩家等级副本,用于转生 + LV2 = 0 #(WORD LV2)//大师等级 + ExpPoint = 0 #(DWORD ExpPoint)//扩充经验点数 + TotalExp = 0 #(DWORD TotalExp)//总经验 + Family = 0 #(DWORD Family)//家族 + FamilyName = "" #(char FamilyName[33])//家族名称 + TeamHornor = 0 #(int TeamHornor)//组队荣誉 + FamilyHornor = 0 #(int FamilyHornor)//家族荣耀 + FamilyActiveValue = 0 #(int FamilyActiveValue)//家族活跃度 + LastWeekFamilyActiveValue = 0 #(int LastWeekFamilyActiveValue)//上周家族活跃度 + CountryHornor = 0 #(int CountryHornor)//本周国家功勋值 + CountryLastWeekHornor = 0 #(int CountryLastWeekHornor)//上周国家功勋值 + Mate = 0 #(DWORD Mate) + Gold = 0 #(DWORD Gold)//金子 + GoldPaper = 0 #(DWORD GoldPaper)//金票 + Silver = 0 #(DWORD Silver)//银子 + SilverPaper = 0 #(DWORD SilverPaper)//银票 + FightPoint = 0 #(DWORD FightPoint)//战斗值 + HappyPoint = 0 #(DWORD HappyPoint)//脱机挂时长(秒) + LineID = 0 #(BYTE LineID)//角色所在线路 + MapID = 0 #(WORD MapID)//角色所在地图 + PosX = 0 #(WORD PosX)//角色坐标 + PosY = 0 #(WORD PosY) + RebornMapID = 0 #(WORD RebornMapID)//重生点地图ID + RebornPosX = 0 #(WORD RebornPosX) + RebornPosY = 0 #(WORD RebornPosY) + State = 0 #(BYTE State)//角色状态 0.正常在线1.脱机挂在线 2脱机挂死亡 + HP = 0 #(DWORD HP)//当前HP + XP = 0 #(DWORD XP)//当前XP + HPRestoreSetting = 0 #(WORD HPRestoreSetting)//少于这个值%自动喝血 + MPRestoreSetting = 0 #(WORD MPRestoreSetting)//少于这个值%自动喝魔 + FreePoint = 0 #(DWORD FreePoint)//未分配点数 + FreeSkillPoint = 0 #(DWORD FreeSkillPoint)//未分配的技能点 + BaseSTR = 0 #(int BaseSTR)//裸体力量 + BasePNE = 0 #(int BasePNE)//裸体真元 + BasePHY = 0 #(int BasePHY)//裸体筋骨 + BaseCON = 0 #(int BaseCON)//裸体体魄 + STR = 0 #(int STR)//力量 + PNE = 0 #(int PNE)//真元 + PHY = 0 #(int PHY)//筋骨 + CON = 0 #(int CON)//体魄 + PKValue = 0 #(WORD PKValue)//衡量PK能力的一项属性,由攻防计算而得 + BackpackLV = 0 #(BYTE BackpackLV)//背包等级 + WarehouseLV = 0 #(BYTE WarehouseLV)//仓库等级 + TeamID = 0 #(DWORD TeamID)//队伍ID + UseGoldType = 0 #(BYTE UseGoldType)//默认用金子/金票 类型为MoneyType + UseSilverType = 0 #(BYTE UseSilverType)//默认用的银子/银票 + AttackMode = 0 #(BYTE AttackMode)//攻击模式 + LastWeekOnlineTime = 0 #(DWORD LastWeekOnlineTime)//上周在线时间 + FBID = 0 #(BYTE FBID)//fb id + FamilyLV = 0 #(BYTE FamilyLV)//家族等级 + FriendFavor = 0 #(DWORD FriendFavor)//好友人气值 + Energy = 0 #(DWORD Energy)//精力值 + EquipShowSwitch = 0 #(DWORD EquipShowSwitch)//装备显示开关 + LuckValue = 0 #(DWORD LuckValue)//幸运值 + ExAttr1 = 0 #(DWORD ExAttr1)//扩展属性1,各项目专用 + ExAttr2 = 0 #(DWORD ExAttr2)//扩展属性2,各项目专用 + ExAttr3 = 0 #(DWORD ExAttr3)//扩展属性3,各项目专用 + ExAttr4 = 0 #(DWORD ExAttr4)//扩展属性4,各项目专用 + ExAttr5 = 0 #(DWORD ExAttr5)//扩展属性5,各项目专用 + Faction = 0 #(BYTE Faction)//阵营 + InfamyValue = 0 #(DWORD InfamyValue)//恶名值 + OfficialRank = 0 #(BYTE OfficialRank)//官阶,官职等级 + ChangeCoinPointTotal = 0 #(DWORD ChangeCoinPointTotal)//兑换的点数总计 + VIPLv = 0 #(BYTE VIPLv)//VIP等级 + VIPLvForPhone = 0 #(BYTE VIPLvForPhone)//移动VIP等级 + ExAttr6 = 0 #(DWORD ExAttr6)//扩展属性6,各项目专用 + ExAttr7 = 0 #(DWORD ExAttr7)//扩展属性7,各项目专用 + ExAttr8 = 0 #(DWORD ExAttr8)//扩展属性8,各项目专用 + ExAttr9 = 0 #(DWORD ExAttr9)//扩展属性9,各项目专用 + ExAttr10 = 0 #(DWORD ExAttr10)//扩展属性10,各项目专用 + ModelMark = 0 #(DWORD ModelMark)// 变形模型mark + ExAttr11 = 0 #(DWORD ExAttr11)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr12 = 0 #(DWORD ExAttr12)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr13 = 0 #(DWORD ExAttr13)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr14 = 0 #(DWORD ExAttr14)//预留的扩展属性字段,用来存放项目特定的属性 + OperateInfo = 0 #(DWORD OperateInfo)//玩家附加运营商信息 + Operate = "" #(char Operate[15])//所属运营商平台名 + ServerID = 0 #(DWORD ServerID)//所属区服ID + ExAttr15 = 0 #(DWORD ExAttr15)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr16 = 0 #(DWORD ExAttr16)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr17 = 0 #(DWORD ExAttr17)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr18 = 0 #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr19 = 0 #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性 + ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,65) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.AccState,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GMLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Sex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ReincarnationLv,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LVEx,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.LV2,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TotalExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Family,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.TeamHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LastWeekFamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountryHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CountryLastWeekHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Mate,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SilverPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FightPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HappyPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PosX,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PosY,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RebornMapID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RebornPosX,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RebornPosY,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.XP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FreePoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FreeSkillPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BaseSTR,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BasePNE,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BasePHY,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BaseCON,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.STR,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PNE,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PHY,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CON,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PKValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BackpackLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WarehouseLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.UseGoldType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UseSilverType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AttackMode,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LastWeekOnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FBID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FriendFavor,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Energy,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LuckValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.InfamyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ChangeCoinPointTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.VIPLv,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.VIPLvForPhone,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ExAttr6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr8,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr9,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr10,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ModelMark,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr11,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr12,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr13,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr14,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OperateInfo,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Operate,_pos = CommFunc.ReadString(_lpData, _pos,15) + self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr15,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr16,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr17,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x12 + self.AccID = "" + self.PlayerID = 0 + self.PlayerName = "" + self.AccState = 0 + self.GMLevel = 0 + self.Sex = 0 + self.Job = 0 + self.ReincarnationLv = 0 + self.LV = 0 + self.LVEx = 0 + self.LV2 = 0 + self.ExpPoint = 0 + self.TotalExp = 0 + self.Family = 0 + self.FamilyName = "" + self.TeamHornor = 0 + self.FamilyHornor = 0 + self.FamilyActiveValue = 0 + self.LastWeekFamilyActiveValue = 0 + self.CountryHornor = 0 + self.CountryLastWeekHornor = 0 + self.Mate = 0 + self.Gold = 0 + self.GoldPaper = 0 + self.Silver = 0 + self.SilverPaper = 0 + self.FightPoint = 0 + self.HappyPoint = 0 + self.LineID = 0 + self.MapID = 0 + self.PosX = 0 + self.PosY = 0 + self.RebornMapID = 0 + self.RebornPosX = 0 + self.RebornPosY = 0 + self.State = 0 + self.HP = 0 + self.XP = 0 + self.HPRestoreSetting = 0 + self.MPRestoreSetting = 0 + self.FreePoint = 0 + self.FreeSkillPoint = 0 + self.BaseSTR = 0 + self.BasePNE = 0 + self.BasePHY = 0 + self.BaseCON = 0 + self.STR = 0 + self.PNE = 0 + self.PHY = 0 + self.CON = 0 + self.PKValue = 0 + self.BackpackLV = 0 + self.WarehouseLV = 0 + self.TeamID = 0 + self.UseGoldType = 0 + self.UseSilverType = 0 + self.AttackMode = 0 + self.LastWeekOnlineTime = 0 + self.FBID = 0 + self.FamilyLV = 0 + self.FriendFavor = 0 + self.Energy = 0 + self.EquipShowSwitch = 0 + self.LuckValue = 0 + self.ExAttr1 = 0 + self.ExAttr2 = 0 + self.ExAttr3 = 0 + self.ExAttr4 = 0 + self.ExAttr5 = 0 + self.Faction = 0 + self.InfamyValue = 0 + self.OfficialRank = 0 + self.ChangeCoinPointTotal = 0 + self.VIPLv = 0 + self.VIPLvForPhone = 0 + self.ExAttr6 = 0 + self.ExAttr7 = 0 + self.ExAttr8 = 0 + self.ExAttr9 = 0 + self.ExAttr10 = 0 + self.ModelMark = 0 + self.ExAttr11 = 0 + self.ExAttr12 = 0 + self.ExAttr13 = 0 + self.ExAttr14 = 0 + self.OperateInfo = 0 + self.Operate = "" + self.ServerID = 0 + self.ExAttr15 = 0 + self.ExAttr16 = 0 + self.ExAttr17 = 0 + self.ExAttr18 = 0 + self.ExAttr19 = 0 + self.ExAttr20 = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 65 + length += 4 + length += 33 + length += 1 + length += 1 + length += 1 + length += 1 + length += 2 + length += 2 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + length += 33 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + length += 2 + length += 2 + length += 2 + length += 2 + length += 2 + length += 2 + length += 1 + length += 4 + length += 4 + length += 2 + length += 2 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += 1 + length += 1 + length += 4 + length += 1 + length += 1 + length += 1 + length += 4 + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + length += 4 + length += 1 + length += 4 + length += 1 + length += 1 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 15 + length += 4 + 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.WriteString(data, 65, self.AccID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteBYTE(data, self.AccState) + data = CommFunc.WriteBYTE(data, self.GMLevel) + data = CommFunc.WriteBYTE(data, self.Sex) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.ReincarnationLv) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteWORD(data, self.LVEx) + data = CommFunc.WriteWORD(data, self.LV2) + data = CommFunc.WriteDWORD(data, self.ExpPoint) + data = CommFunc.WriteDWORD(data, self.TotalExp) + data = CommFunc.WriteDWORD(data, self.Family) + data = CommFunc.WriteString(data, 33, self.FamilyName) + data = CommFunc.WriteDWORD(data, self.TeamHornor) + data = CommFunc.WriteDWORD(data, self.FamilyHornor) + data = CommFunc.WriteDWORD(data, self.FamilyActiveValue) + data = CommFunc.WriteDWORD(data, self.LastWeekFamilyActiveValue) + data = CommFunc.WriteDWORD(data, self.CountryHornor) + data = CommFunc.WriteDWORD(data, self.CountryLastWeekHornor) + data = CommFunc.WriteDWORD(data, self.Mate) + data = CommFunc.WriteDWORD(data, self.Gold) + data = CommFunc.WriteDWORD(data, self.GoldPaper) + data = CommFunc.WriteDWORD(data, self.Silver) + data = CommFunc.WriteDWORD(data, self.SilverPaper) + data = CommFunc.WriteDWORD(data, self.FightPoint) + data = CommFunc.WriteDWORD(data, self.HappyPoint) + data = CommFunc.WriteBYTE(data, self.LineID) + data = CommFunc.WriteWORD(data, self.MapID) + data = CommFunc.WriteWORD(data, self.PosX) + data = CommFunc.WriteWORD(data, self.PosY) + data = CommFunc.WriteWORD(data, self.RebornMapID) + data = CommFunc.WriteWORD(data, self.RebornPosX) + data = CommFunc.WriteWORD(data, self.RebornPosY) + data = CommFunc.WriteBYTE(data, self.State) + data = CommFunc.WriteDWORD(data, self.HP) + data = CommFunc.WriteDWORD(data, self.XP) + data = CommFunc.WriteWORD(data, self.HPRestoreSetting) + data = CommFunc.WriteWORD(data, self.MPRestoreSetting) + data = CommFunc.WriteDWORD(data, self.FreePoint) + data = CommFunc.WriteDWORD(data, self.FreeSkillPoint) + data = CommFunc.WriteDWORD(data, self.BaseSTR) + data = CommFunc.WriteDWORD(data, self.BasePNE) + data = CommFunc.WriteDWORD(data, self.BasePHY) + data = CommFunc.WriteDWORD(data, self.BaseCON) + data = CommFunc.WriteDWORD(data, self.STR) + data = CommFunc.WriteDWORD(data, self.PNE) + data = CommFunc.WriteDWORD(data, self.PHY) + data = CommFunc.WriteDWORD(data, self.CON) + data = CommFunc.WriteWORD(data, self.PKValue) + data = CommFunc.WriteBYTE(data, self.BackpackLV) + data = CommFunc.WriteBYTE(data, self.WarehouseLV) + data = CommFunc.WriteDWORD(data, self.TeamID) + data = CommFunc.WriteBYTE(data, self.UseGoldType) + data = CommFunc.WriteBYTE(data, self.UseSilverType) + data = CommFunc.WriteBYTE(data, self.AttackMode) + data = CommFunc.WriteDWORD(data, self.LastWeekOnlineTime) + data = CommFunc.WriteBYTE(data, self.FBID) + data = CommFunc.WriteBYTE(data, self.FamilyLV) + data = CommFunc.WriteDWORD(data, self.FriendFavor) + data = CommFunc.WriteDWORD(data, self.Energy) + data = CommFunc.WriteDWORD(data, self.EquipShowSwitch) + data = CommFunc.WriteDWORD(data, self.LuckValue) + data = CommFunc.WriteDWORD(data, self.ExAttr1) + data = CommFunc.WriteDWORD(data, self.ExAttr2) + data = CommFunc.WriteDWORD(data, self.ExAttr3) + data = CommFunc.WriteDWORD(data, self.ExAttr4) + data = CommFunc.WriteDWORD(data, self.ExAttr5) + data = CommFunc.WriteBYTE(data, self.Faction) + data = CommFunc.WriteDWORD(data, self.InfamyValue) + data = CommFunc.WriteBYTE(data, self.OfficialRank) + data = CommFunc.WriteDWORD(data, self.ChangeCoinPointTotal) + data = CommFunc.WriteBYTE(data, self.VIPLv) + data = CommFunc.WriteBYTE(data, self.VIPLvForPhone) + data = CommFunc.WriteDWORD(data, self.ExAttr6) + data = CommFunc.WriteDWORD(data, self.ExAttr7) + data = CommFunc.WriteDWORD(data, self.ExAttr8) + data = CommFunc.WriteDWORD(data, self.ExAttr9) + data = CommFunc.WriteDWORD(data, self.ExAttr10) + data = CommFunc.WriteDWORD(data, self.ModelMark) + data = CommFunc.WriteDWORD(data, self.ExAttr11) + data = CommFunc.WriteDWORD(data, self.ExAttr12) + data = CommFunc.WriteDWORD(data, self.ExAttr13) + data = CommFunc.WriteDWORD(data, self.ExAttr14) + data = CommFunc.WriteDWORD(data, self.OperateInfo) + data = CommFunc.WriteString(data, 15, self.Operate) + data = CommFunc.WriteDWORD(data, self.ServerID) + data = CommFunc.WriteDWORD(data, self.ExAttr15) + data = CommFunc.WriteDWORD(data, self.ExAttr16) + data = CommFunc.WriteDWORD(data, self.ExAttr17) + data = CommFunc.WriteDWORD(data, self.ExAttr18) + data = CommFunc.WriteDWORD(data, self.ExAttr19) + data = CommFunc.WriteDWORD(data, self.ExAttr20) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AccID:%s, + PlayerID:%d, + PlayerName:%s, + AccState:%d, + GMLevel:%d, + Sex:%d, + Job:%d, + ReincarnationLv:%d, + LV:%d, + LVEx:%d, + LV2:%d, + ExpPoint:%d, + TotalExp:%d, + Family:%d, + FamilyName:%s, + TeamHornor:%d, + FamilyHornor:%d, + FamilyActiveValue:%d, + LastWeekFamilyActiveValue:%d, + CountryHornor:%d, + CountryLastWeekHornor:%d, + Mate:%d, + Gold:%d, + GoldPaper:%d, + Silver:%d, + SilverPaper:%d, + FightPoint:%d, + HappyPoint:%d, + LineID:%d, + MapID:%d, + PosX:%d, + PosY:%d, + RebornMapID:%d, + RebornPosX:%d, + RebornPosY:%d, + State:%d, + HP:%d, + XP:%d, + HPRestoreSetting:%d, + MPRestoreSetting:%d, + FreePoint:%d, + FreeSkillPoint:%d, + BaseSTR:%d, + BasePNE:%d, + BasePHY:%d, + BaseCON:%d, + STR:%d, + PNE:%d, + PHY:%d, + CON:%d, + PKValue:%d, + BackpackLV:%d, + WarehouseLV:%d, + TeamID:%d, + UseGoldType:%d, + UseSilverType:%d, + AttackMode:%d, + LastWeekOnlineTime:%d, + FBID:%d, + FamilyLV:%d, + FriendFavor:%d, + Energy:%d, + EquipShowSwitch:%d, + LuckValue:%d, + ExAttr1:%d, + ExAttr2:%d, + ExAttr3:%d, + ExAttr4:%d, + ExAttr5:%d, + Faction:%d, + InfamyValue:%d, + OfficialRank:%d, + ChangeCoinPointTotal:%d, + VIPLv:%d, + VIPLvForPhone:%d, + ExAttr6:%d, + ExAttr7:%d, + ExAttr8:%d, + ExAttr9:%d, + ExAttr10:%d, + ModelMark:%d, + ExAttr11:%d, + ExAttr12:%d, + ExAttr13:%d, + ExAttr14:%d, + OperateInfo:%d, + Operate:%s, + ServerID:%d, + ExAttr15:%d, + ExAttr16:%d, + ExAttr17:%d, + ExAttr18:%d, + ExAttr19:%d, + ExAttr20:%d + '''\ + %( + self.Head.OutputString(), + self.AccID, + self.PlayerID, + self.PlayerName, + self.AccState, + self.GMLevel, + self.Sex, + self.Job, + self.ReincarnationLv, + self.LV, + self.LVEx, + self.LV2, + self.ExpPoint, + self.TotalExp, + self.Family, + self.FamilyName, + self.TeamHornor, + self.FamilyHornor, + self.FamilyActiveValue, + self.LastWeekFamilyActiveValue, + self.CountryHornor, + self.CountryLastWeekHornor, + self.Mate, + self.Gold, + self.GoldPaper, + self.Silver, + self.SilverPaper, + self.FightPoint, + self.HappyPoint, + self.LineID, + self.MapID, + self.PosX, + self.PosY, + self.RebornMapID, + self.RebornPosX, + self.RebornPosY, + self.State, + self.HP, + self.XP, + self.HPRestoreSetting, + self.MPRestoreSetting, + self.FreePoint, + self.FreeSkillPoint, + self.BaseSTR, + self.BasePNE, + self.BasePHY, + self.BaseCON, + self.STR, + self.PNE, + self.PHY, + self.CON, + self.PKValue, + self.BackpackLV, + self.WarehouseLV, + self.TeamID, + self.UseGoldType, + self.UseSilverType, + self.AttackMode, + self.LastWeekOnlineTime, + self.FBID, + self.FamilyLV, + self.FriendFavor, + self.Energy, + self.EquipShowSwitch, + self.LuckValue, + self.ExAttr1, + self.ExAttr2, + self.ExAttr3, + self.ExAttr4, + self.ExAttr5, + self.Faction, + self.InfamyValue, + self.OfficialRank, + self.ChangeCoinPointTotal, + self.VIPLv, + self.VIPLvForPhone, + self.ExAttr6, + self.ExAttr7, + self.ExAttr8, + self.ExAttr9, + self.ExAttr10, + self.ModelMark, + self.ExAttr11, + self.ExAttr12, + self.ExAttr13, + self.ExAttr14, + self.OperateInfo, + self.Operate, + self.ServerID, + self.ExAttr15, + self.ExAttr16, + self.ExAttr17, + self.ExAttr18, + self.ExAttr19, + self.ExAttr20 + ) + return DumpString + + +m_NAtagMCDBPlayer=tagMCDBPlayer() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDBPlayer.Head.Cmd,m_NAtagMCDBPlayer.Head.SubCmd))] = m_NAtagMCDBPlayer #------------------------------------------------------ @@ -10216,14 +11043,70 @@ #------------------------------------------------------ +# A3 24 通知绑玉转盘结果 #tagMCBindJadeWheelResult + +class tagMCBindJadeWheelResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Index", c_ubyte), # 格子 + ("Cnt", c_ubyte), #今日已转次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + 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 = 0xA3 + self.SubCmd = 0x24 + self.Index = 0 + self.Cnt = 0 + return + + def GetLength(self): + return sizeof(tagMCBindJadeWheelResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 24 通知绑玉转盘结果 //tagMCBindJadeWheelResult: + Cmd:%s, + SubCmd:%s, + Index:%d, + Cnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Index, + self.Cnt + ) + return DumpString + + +m_NAtagMCBindJadeWheelResult=tagMCBindJadeWheelResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBindJadeWheelResult.Cmd,m_NAtagMCBindJadeWheelResult.SubCmd))] = m_NAtagMCBindJadeWheelResult + + +#------------------------------------------------------ #A3 B7 当日累计攻击boss次数 #tagMCBOSSAttactCnt class tagMCBossCntInfo(Structure): _pack_ = 1 _fields_ = [ ("BossType", c_ubyte), #编号类型0-世界boss 1-boss之家 - ("KillCnt", c_ubyte), #击杀次数 - ("ItemAddCnt", c_ubyte), #物品增加次数 + ("KillCnt", c_int), #击杀次数 + ("ItemAddCnt", c_int), #物品增加次数 ] def __init__(self): @@ -10805,6 +11688,7 @@ ("RealmPoint", c_int), # 可领取修行点 ("StageIndex", c_ubyte), # 当前阶段索引 ("AwardRecord", c_int), # 领奖记录 按位存储 + ("ExtraPoint", c_int), # 多倍活动获得的额外修行点 ] def __init__(self): @@ -10825,6 +11709,7 @@ self.RealmPoint = 0 self.StageIndex = 0 self.AwardRecord = 0 + self.ExtraPoint = 0 return def GetLength(self): @@ -10840,7 +11725,8 @@ CurValue:%d, RealmPoint:%d, StageIndex:%d, - AwardRecord:%d + AwardRecord:%d, + ExtraPoint:%d '''\ %( self.Cmd, @@ -10848,7 +11734,8 @@ self.CurValue, self.RealmPoint, self.StageIndex, - self.AwardRecord + self.AwardRecord, + self.ExtraPoint ) return DumpString @@ -11536,19 +12423,15 @@ #------------------------------------------------------ #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo -class tagMCFBEncourageInfo(Structure): +class tagMCFBEncourageCnt(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Cnt1", c_ubyte), # 当前铜钱鼓舞次数 - ("Cnt2", c_ubyte), # 当前仙玉鼓舞次数 + ("MoneyType", c_ubyte), # 金钱类型 + ("EncourageCnt", c_ubyte), # 当前鼓舞次数 ] def __init__(self): self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x0A return def ReadData(self, stringData, _pos=0, _len=0): @@ -11557,36 +12440,92 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x0A - self.Cnt1 = 0 - self.Cnt2 = 0 + self.MoneyType = 0 + self.EncourageCnt = 0 return def GetLength(self): - return sizeof(tagMCFBEncourageInfo) + return sizeof(tagMCFBEncourageCnt) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''//A3 0A 副本鼓舞信息通知 //tagMCFBEncourageInfo: - Cmd:%s, - SubCmd:%s, - Cnt1:%d, - Cnt2:%d + MoneyType:%d, + EncourageCnt:%d '''\ %( - self.Cmd, - self.SubCmd, - self.Cnt1, - self.Cnt2 + self.MoneyType, + self.EncourageCnt + ) + return DumpString + + +class tagMCFBEncourageInfo(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)// + InfoList = list() #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x0A + 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): + temInfoList = tagMCFBEncourageCnt() + _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 = 0x0A + self.Cnt = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Cnt): + 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.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." ) return DumpString m_NAtagMCFBEncourageInfo=tagMCFBEncourageInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Cmd,m_NAtagMCFBEncourageInfo.SubCmd))] = m_NAtagMCFBEncourageInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Head.Cmd,m_NAtagMCFBEncourageInfo.Head.SubCmd))] = m_NAtagMCFBEncourageInfo #------------------------------------------------------ @@ -11895,6 +12834,7 @@ _fields_ = [ ("FuncID", c_ubyte), # 功能ID ("State", c_ubyte), # 是否开启 + ("AwardState", c_ubyte), # 是否已领奖励 ] def __init__(self): @@ -11909,6 +12849,7 @@ def Clear(self): self.FuncID = 0 self.State = 0 + self.AwardState = 0 return def GetLength(self): @@ -11920,11 +12861,13 @@ def OutputString(self): DumpString = '''//A3 02 功能开通状态 //tagMCFuncOpenStateList: FuncID:%d, - State:%d + State:%d, + AwardState:%d '''\ %( self.FuncID, - self.State + self.State, + self.AwardState ) return DumpString @@ -11993,6 +12936,73 @@ m_NAtagMCFuncOpenStateList=tagMCFuncOpenStateList() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncOpenStateList.Head.Cmd,m_NAtagMCFuncOpenStateList.Head.SubCmd))] = m_NAtagMCFuncOpenStateList + + +#------------------------------------------------------ +# A3 1E 玩家聚魂孔信息 #tagMCGatherSoulHoleInfo + +class tagMCGatherSoulHoleInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)// 孔信息数 + GatherSoulDataList = list() #(vector<DWORD> GatherSoulDataList)// 孔数据信息, 数据与背包数据相同 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x1E + 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.GatherSoulDataList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x1E + self.Count = 0 + self.GatherSoulDataList = 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.GatherSoulDataList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + GatherSoulDataList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCGatherSoulHoleInfo=tagMCGatherSoulHoleInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGatherSoulHoleInfo.Head.Cmd,m_NAtagMCGatherSoulHoleInfo.Head.SubCmd))] = m_NAtagMCGatherSoulHoleInfo #------------------------------------------------------ @@ -12365,6 +13375,8 @@ ("LV", c_ubyte), ("Exp", c_int), ("State", c_ubyte), #是否点击法宝认主 + ("FBPassLV", c_ubyte), #副本关卡 + ("IsWear", c_ubyte), #是否佩戴(仅适用王者法宝) ] def __init__(self): @@ -12381,6 +13393,8 @@ self.LV = 0 self.Exp = 0 self.State = 0 + self.FBPassLV = 0 + self.IsWear = 0 return def GetLength(self): @@ -12394,13 +13408,17 @@ MWID:%d, LV:%d, Exp:%d, - State:%d + State:%d, + FBPassLV:%d, + IsWear:%d '''\ %( self.MWID, self.LV, self.Exp, - self.State + self.State, + self.FBPassLV, + self.IsWear ) return DumpString @@ -13802,6 +14820,62 @@ m_NAtagMCPlayerStoveMsg=tagMCPlayerStoveMsg() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerStoveMsg.Cmd,m_NAtagMCPlayerStoveMsg.SubCmd))] = m_NAtagMCPlayerStoveMsg + + +#------------------------------------------------------ +# A3 21 祈福丹药结果 #tagMCPrayElixirResult + +class tagMCPrayElixirResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ItemID", c_int), # 物品ID + ("PrayCnt", c_ubyte), # 今日祈福次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + 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 = 0xA3 + self.SubCmd = 0x21 + self.ItemID = 0 + self.PrayCnt = 0 + return + + def GetLength(self): + return sizeof(tagMCPrayElixirResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 21 祈福丹药结果 //tagMCPrayElixirResult: + Cmd:%s, + SubCmd:%s, + ItemID:%d, + PrayCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ItemID, + self.PrayCnt + ) + return DumpString + + +m_NAtagMCPrayElixirResult=tagMCPrayElixirResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrayElixirResult.Cmd,m_NAtagMCPrayElixirResult.SubCmd))] = m_NAtagMCPrayElixirResult #------------------------------------------------------ @@ -16382,6 +17456,58 @@ #------------------------------------------------------ +# A7 17 聊天气泡框状态 #tagMCChatBubbleBoxState + +class tagMCChatBubbleBoxState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BoxState", c_int), # 按二进制位存储代表是否已开启,暂支持31位,以后有需要再加 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA7 + 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 = 0xA7 + self.SubCmd = 0x17 + self.BoxState = 0 + return + + def GetLength(self): + return sizeof(tagMCChatBubbleBoxState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 17 聊天气泡框状态 //tagMCChatBubbleBoxState: + Cmd:%s, + SubCmd:%s, + BoxState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BoxState + ) + return DumpString + + +m_NAtagMCChatBubbleBoxState=tagMCChatBubbleBoxState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChatBubbleBoxState.Cmd,m_NAtagMCChatBubbleBoxState.SubCmd))] = m_NAtagMCChatBubbleBoxState + + +#------------------------------------------------------ # A7 13 动态障碍物状态 #tagMCDynamicBarrierState class tagMCDynamicBarrier(Structure): @@ -16391,6 +17517,7 @@ ("APosY", c_ushort), ("BPosX", c_ushort), ("BPosY", c_ushort), + ("Angle", c_ushort), ] def __init__(self): @@ -16407,6 +17534,7 @@ self.APosY = 0 self.BPosX = 0 self.BPosY = 0 + self.Angle = 0 return def GetLength(self): @@ -16420,13 +17548,15 @@ APosX:%d, APosY:%d, BPosX:%d, - BPosY:%d + BPosY:%d, + Angle:%d '''\ %( self.APosX, self.APosY, self.BPosX, - self.BPosY + self.BPosY, + self.Angle ) return DumpString @@ -16854,6 +17984,134 @@ m_NAtagMCGuideState=tagMCGuideState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuideState.Head.Cmd,m_NAtagMCGuideState.Head.SubCmd))] = m_NAtagMCGuideState + + +#------------------------------------------------------ +# A7 16 小助手设置 #tagMCLittleHelperSet + +class tagMCLittleHelperFuncSet(Structure): + _pack_ = 1 + _fields_ = [ + ("SetNum", c_ubyte), # 托管功能设置编号1~20,每个编号对应的托管功能前端自定义 + ("Value1", c_int), # 自定义值1,如果存储的是勾选信息, 按二进制位存储代表是否勾选,支持31位,每位代表的含义前端自定义 + ("Value2", c_int), # 自定义值2 + ("Value3", c_int), # 自定义值3 + ("Value4", c_int), # 自定义值4 + ("Value5", c_int), # 自定义值5 + ("Value6", c_int), # 自定义值6 + ] + + 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.SetNum = 0 + self.Value1 = 0 + self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + return + + def GetLength(self): + return sizeof(tagMCLittleHelperFuncSet) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 16 小助手设置 //tagMCLittleHelperSet: + SetNum:%d, + Value1:%d, + Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d + '''\ + %( + self.SetNum, + self.Value1, + self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6 + ) + return DumpString + + +class tagMCLittleHelperSet(Structure): + Head = tagHead() + FuncSetCount = 0 #(BYTE FuncSetCount)// 托管功能设置数,暂支持20个 + FuncSetList = list() #(vector<tagMCLittleHelperFuncSet> FuncSetList)// 托管功能设置列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x16 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FuncSetCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.FuncSetCount): + temFuncSetList = tagMCLittleHelperFuncSet() + _pos = temFuncSetList.ReadData(_lpData, _pos) + self.FuncSetList.append(temFuncSetList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x16 + self.FuncSetCount = 0 + self.FuncSetList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.FuncSetCount): + length += self.FuncSetList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.FuncSetCount) + for i in range(self.FuncSetCount): + data = CommFunc.WriteString(data, self.FuncSetList[i].GetLength(), self.FuncSetList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FuncSetCount:%d, + FuncSetList:%s + '''\ + %( + self.Head.OutputString(), + self.FuncSetCount, + "..." + ) + return DumpString + + +m_NAtagMCLittleHelperSet=tagMCLittleHelperSet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLittleHelperSet.Head.Cmd,m_NAtagMCLittleHelperSet.Head.SubCmd))] = m_NAtagMCLittleHelperSet #------------------------------------------------------ @@ -17519,6 +18777,7 @@ ItemData = "" #(String ItemData)//物品记录 PlusDataSize = 0 #(DWORD PlusDataSize) PlusData = "" #(String PlusData)//扩展记录 + CrossPlayer = 0 #(BYTE CrossPlayer)//是否跨服玩家 data = None def __init__(self): @@ -17537,6 +18796,7 @@ self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize) self.PlusDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize) + self.CrossPlayer,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -17551,6 +18811,7 @@ self.ItemData = "" self.PlusDataSize = 0 self.PlusData = "" + self.CrossPlayer = 0 return def GetLength(self): @@ -17563,6 +18824,7 @@ length += len(self.ItemData) length += 4 length += len(self.PlusData) + length += 1 return length @@ -17576,6 +18838,7 @@ data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData) data = CommFunc.WriteDWORD(data, self.PlusDataSize) data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData) + data = CommFunc.WriteBYTE(data, self.CrossPlayer) return data def OutputString(self): @@ -17587,7 +18850,8 @@ ItemDataSize:%d, ItemData:%s, PlusDataSize:%d, - PlusData:%s + PlusData:%s, + CrossPlayer:%d '''\ %( self.Head.OutputString(), @@ -17597,7 +18861,8 @@ self.ItemDataSize, self.ItemData, self.PlusDataSize, - self.PlusData + self.PlusData, + self.CrossPlayer ) return DumpString @@ -18069,6 +19334,114 @@ m_NAtagMCShoppingResult=tagMCShoppingResult() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShoppingResult.Cmd,m_NAtagMCShoppingResult.SubCmd))] = m_NAtagMCShoppingResult + + +#------------------------------------------------------ +# A8 06 通知神秘限购商品时间 #tagMCMysticalShopTimeInfo + +class tagMCMysticalShopTime(Structure): + _pack_ = 1 + _fields_ = [ + ("GoodsID", c_int), # 商品ID + ("StartTime", 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.GoodsID = 0 + self.StartTime = 0 + return + + def GetLength(self): + return sizeof(tagMCMysticalShopTime) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A8 06 通知神秘限购商品时间 //tagMCMysticalShopTimeInfo: + GoodsID:%d, + StartTime:%d + '''\ + %( + self.GoodsID, + self.StartTime + ) + return DumpString + + +class tagMCMysticalShopTimeInfo(Structure): + Head = tagHead() + Count = 0 #(WORD Count)// 商品数 + ShopTimeList = list() #(vector<tagMCMysticalShopTime> ShopTimeList)// 商品开卖信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x06 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temShopTimeList = tagMCMysticalShopTime() + _pos = temShopTimeList.ReadData(_lpData, _pos) + self.ShopTimeList.append(temShopTimeList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x06 + self.Count = 0 + self.ShopTimeList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.ShopTimeList[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.ShopTimeList[i].GetLength(), self.ShopTimeList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ShopTimeList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCMysticalShopTimeInfo=tagMCMysticalShopTimeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMysticalShopTimeInfo.Head.Cmd,m_NAtagMCMysticalShopTimeInfo.Head.SubCmd))] = m_NAtagMCMysticalShopTimeInfo #------------------------------------------------------ @@ -18711,6 +20084,707 @@ m_NAtagMCVirtualItemDrop=tagMCVirtualItemDrop() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVirtualItemDrop.Head.Cmd,m_NAtagMCVirtualItemDrop.Head.SubCmd))] = m_NAtagMCVirtualItemDrop + + +#------------------------------------------------------ +# AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo + +class tagMCTotalRechargeAwardItem(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(tagMCTotalRechargeAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 1D 累计充值活动信息 //tagMCActTotalRechargeInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCTotalRechargeAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedGold = 0 #(DWORD NeedGold)// 所需仙玉数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItem = list() #(vector<tagMCTotalRechargeAwardItem> 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.NeedGold,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItem = tagMCTotalRechargeAwardItem() + _pos = temAwardItem.ReadData(_lpData, _pos) + self.AwardItem.append(temAwardItem) + return _pos + + def Clear(self): + self.AwardIndex = 0 + self.NeedGold = 0 + self.AwardItemCount = 0 + self.AwardItem = list() + return + + def GetLength(self): + length = 0 + length += 1 + 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.WriteDWORD(data, self.NeedGold) + 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, + NeedGold:%d, + AwardItemCount:%d, + AwardItem:%s + '''\ + %( + self.AwardIndex, + self.NeedGold, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCTotalRechargeAwardDay(Structure): + AwardCount = 0 #(BYTE AwardCount)// 奖励档数 + AwardInfo = list() #(vector<tagMCTotalRechargeAward> AwardInfo)// 奖励档信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardCount): + temAwardInfo = tagMCTotalRechargeAward() + _pos = temAwardInfo.ReadData(_lpData, _pos) + self.AwardInfo.append(temAwardInfo) + return _pos + + def Clear(self): + self.AwardCount = 0 + self.AwardInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.AwardCount): + length += self.AwardInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + 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 = ''' + AwardCount:%d, + AwardInfo:%s + '''\ + %( + self.AwardCount, + "..." + ) + return DumpString + + +class tagMCActTotalRechargeInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + AwardDays = 0 #(BYTE AwardDays) + AwardDayInfo = list() #(vector<tagMCTotalRechargeAwardDay> AwardDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x1D + 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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AwardDays,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardDays): + temAwardDayInfo = tagMCTotalRechargeAwardDay() + _pos = temAwardDayInfo.ReadData(_lpData, _pos) + self.AwardDayInfo.append(temAwardDayInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x1D + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.LimitLV = 0 + self.AwardDays = 0 + self.AwardDayInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 1 + length += 2 + length += 1 + for i in range(self.AwardDays): + length += self.AwardDayInfo[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.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.AwardDays) + for i in range(self.AwardDays): + data = CommFunc.WriteString(data, self.AwardDayInfo[i].GetLength(), self.AwardDayInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + LimitLV:%d, + AwardDays:%d, + AwardDayInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.LimitLV, + self.AwardDays, + "..." + ) + return DumpString + + +m_NAtagMCActTotalRechargeInfo=tagMCActTotalRechargeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTotalRechargeInfo.Head.Cmd,m_NAtagMCActTotalRechargeInfo.Head.SubCmd))] = m_NAtagMCActTotalRechargeInfo + + +#------------------------------------------------------ +# AA 1B 许愿池拖动结果 #tagMCActWishingDragResult + +class tagMCPlayerWishingDragInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("WellType", c_ubyte), # 库 0-可选库 1-结果库 + ("Index", c_ubyte), # 索引 + ("ItemID", c_int), # 物品ID + ("ItemCnt", c_ushort), # 物品数量 + ("IsBind", c_ubyte), # 是否绑定 + ("IsSpecial", 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.WellType = 0 + self.Index = 0 + self.ItemID = 0 + self.ItemCnt = 0 + self.IsBind = 0 + self.IsSpecial = 0 + return + + def GetLength(self): + return sizeof(tagMCPlayerWishingDragInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 1B 许愿池拖动结果 //tagMCActWishingDragResult: + WellType:%d, + Index:%d, + ItemID:%d, + ItemCnt:%d, + IsBind:%d, + IsSpecial:%d + '''\ + %( + self.WellType, + self.Index, + self.ItemID, + self.ItemCnt, + self.IsBind, + self.IsSpecial + ) + return DumpString + + +class tagMCActWishingDragResult(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt) + InfoList = list() #(vector<tagMCPlayerWishingDragInfo> InfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x1B + 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): + temInfoList = tagMCPlayerWishingDragInfo() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x1B + self.Cnt = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Cnt): + 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.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." + ) + return DumpString + + +m_NAtagMCActWishingDragResult=tagMCActWishingDragResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingDragResult.Head.Cmd,m_NAtagMCActWishingDragResult.Head.SubCmd))] = m_NAtagMCActWishingDragResult + + +#------------------------------------------------------ +# AA 19 许愿池活动信息 #tagMCActWishingWellInfo + +class tagMCWishingWellItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), # 物品ID + ("ItemCnt", c_ushort), # 物品数量 + ("IsBind", c_ubyte), # 是否绑定 + ("Mark", c_int), # 排序标识 + ("Rare", 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.ItemCnt = 0 + self.IsBind = 0 + self.Mark = 0 + self.Rare = 0 + return + + def GetLength(self): + return sizeof(tagMCWishingWellItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 19 许愿池活动信息 //tagMCActWishingWellInfo: + ItemID:%d, + ItemCnt:%d, + IsBind:%d, + Mark:%d, + Rare:%d + '''\ + %( + self.ItemID, + self.ItemCnt, + self.IsBind, + self.Mark, + self.Rare + ) + return DumpString + + +class tagMCActWishingWellInfo(Structure): + Head = tagHead() + 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)// 限制等级 + Count = 0 #(WORD Count)// 物品数 + WellItemInfo = list() #(vector<tagMCWishingWellItem> WellItemInfo)// 随机库物品信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x19 + 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.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temWellItemInfo = tagMCWishingWellItem() + _pos = temWellItemInfo.ReadData(_lpData, _pos) + self.WellItemInfo.append(temWellItemInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x19 + self.StartDate = "" + self.EndtDate = "" + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.Count = 0 + self.WellItemInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 1 + length += 1 + length += 2 + length += 2 + for i in range(self.Count): + length += self.WellItemInfo[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.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.WellItemInfo[i].GetLength(), self.WellItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + Count:%d, + WellItemInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCActWishingWellInfo=tagMCActWishingWellInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellInfo.Head.Cmd,m_NAtagMCActWishingWellInfo.Head.SubCmd))] = m_NAtagMCActWishingWellInfo + + +#------------------------------------------------------ +# AA 1A 许愿池活动玩家信息 #tagMCActWishingWellPlayerInfo + +class tagMCPlayerWishingWellItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), # 物品ID + ("ItemCnt", c_ushort), # 物品数量 + ("IsBind", c_ubyte), # 是否绑定 + ("IsSpecial", 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.ItemCnt = 0 + self.IsBind = 0 + self.IsSpecial = 0 + return + + def GetLength(self): + return sizeof(tagMCPlayerWishingWellItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 1A 许愿池活动玩家信息 //tagMCActWishingWellPlayerInfo: + ItemID:%d, + ItemCnt:%d, + IsBind:%d, + IsSpecial:%d + '''\ + %( + self.ItemID, + self.ItemCnt, + self.IsBind, + self.IsSpecial + ) + return DumpString + + +class tagMCActWishingWellPlayerInfo(Structure): + Head = tagHead() + FreeStartTime = 0 #(DWORD FreeStartTime)// 免费开始倒计时时间 + WishCnt = 0 #(DWORD WishCnt)// 许愿付费刷新次数 + WellItemCnt = 0 #(BYTE WellItemCnt)//许愿池物品数量 + WellItemInfo = list() #(vector<tagMCPlayerWishingWellItem> WellItemInfo)// 随机库物品信息 + CurAwardCnt = 0 #(BYTE CurAwardCnt)// 当前奖励物品数量 + CurAwardItemInfo = list() #(vector<tagMCPlayerWishingWellItem> CurAwardItemInfo)// 当前奖励物品 + LastAwardCnt = 0 #(BYTE LastAwardCnt)// 可领取奖励物品数量 + LastAwardItemInfo = list() #(vector<tagMCPlayerWishingWellItem> LastAwardItemInfo)// 可领取奖励物品 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x1A + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.FreeStartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WishCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WellItemCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WellItemCnt): + temWellItemInfo = tagMCPlayerWishingWellItem() + _pos = temWellItemInfo.ReadData(_lpData, _pos) + self.WellItemInfo.append(temWellItemInfo) + self.CurAwardCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.CurAwardCnt): + temCurAwardItemInfo = tagMCPlayerWishingWellItem() + _pos = temCurAwardItemInfo.ReadData(_lpData, _pos) + self.CurAwardItemInfo.append(temCurAwardItemInfo) + self.LastAwardCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.LastAwardCnt): + temLastAwardItemInfo = tagMCPlayerWishingWellItem() + _pos = temLastAwardItemInfo.ReadData(_lpData, _pos) + self.LastAwardItemInfo.append(temLastAwardItemInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x1A + self.FreeStartTime = 0 + self.WishCnt = 0 + self.WellItemCnt = 0 + self.WellItemInfo = list() + self.CurAwardCnt = 0 + self.CurAwardItemInfo = list() + self.LastAwardCnt = 0 + self.LastAwardItemInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 1 + for i in range(self.WellItemCnt): + length += self.WellItemInfo[i].GetLength() + length += 1 + for i in range(self.CurAwardCnt): + length += self.CurAwardItemInfo[i].GetLength() + length += 1 + for i in range(self.LastAwardCnt): + length += self.LastAwardItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.FreeStartTime) + data = CommFunc.WriteDWORD(data, self.WishCnt) + data = CommFunc.WriteBYTE(data, self.WellItemCnt) + for i in range(self.WellItemCnt): + data = CommFunc.WriteString(data, self.WellItemInfo[i].GetLength(), self.WellItemInfo[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.CurAwardCnt) + for i in range(self.CurAwardCnt): + data = CommFunc.WriteString(data, self.CurAwardItemInfo[i].GetLength(), self.CurAwardItemInfo[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.LastAwardCnt) + for i in range(self.LastAwardCnt): + data = CommFunc.WriteString(data, self.LastAwardItemInfo[i].GetLength(), self.LastAwardItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + FreeStartTime:%d, + WishCnt:%d, + WellItemCnt:%d, + WellItemInfo:%s, + CurAwardCnt:%d, + CurAwardItemInfo:%s, + LastAwardCnt:%d, + LastAwardItemInfo:%s + '''\ + %( + self.Head.OutputString(), + self.FreeStartTime, + self.WishCnt, + self.WellItemCnt, + "...", + self.CurAwardCnt, + "...", + self.LastAwardCnt, + "..." + ) + return DumpString + + +m_NAtagMCActWishingWellPlayerInfo=tagMCActWishingWellPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActWishingWellPlayerInfo.Head.Cmd,m_NAtagMCActWishingWellPlayerInfo.Head.SubCmd))] = m_NAtagMCActWishingWellPlayerInfo #------------------------------------------------------ @@ -19728,6 +21802,7 @@ Head = tagHead() StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 ActivityTimeCount = 0 #(BYTE ActivityTimeCount) ActivityTime = list() #(vector<tagMCFlashGiftbagTime> ActivityTime)//活动时间 IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 @@ -19747,6 +21822,7 @@ _pos = self.Head.ReadData(_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) self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.ActivityTimeCount): temActivityTime = tagMCFlashGiftbagTime() @@ -19768,6 +21844,7 @@ self.Head.SubCmd = 0x12 self.StartDate = "" self.EndtDate = "" + self.AdvanceMinutes = 0 self.ActivityTimeCount = 0 self.ActivityTime = list() self.IsDayReset = 0 @@ -19781,6 +21858,7 @@ length += self.Head.GetLength() length += 10 length += 10 + length += 2 length += 1 for i in range(self.ActivityTimeCount): length += self.ActivityTime[i].GetLength() @@ -19797,6 +21875,7 @@ 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.AdvanceMinutes) data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) for i in range(self.ActivityTimeCount): data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) @@ -19812,6 +21891,7 @@ Head:%s, StartDate:%s, EndtDate:%s, + AdvanceMinutes:%d, ActivityTimeCount:%d, ActivityTime:%s, IsDayReset:%d, @@ -19823,6 +21903,7 @@ self.Head.OutputString(), self.StartDate, self.EndtDate, + self.AdvanceMinutes, self.ActivityTimeCount, "...", self.IsDayReset, @@ -19943,6 +22024,420 @@ m_NAtagMCFlashGiftbagPlayerInfo=tagMCFlashGiftbagPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagPlayerInfo.Head.Cmd,m_NAtagMCFlashGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagPlayerInfo + + +#------------------------------------------------------ +# AA 18 限时抢购活动玩家预约信息 #tagMCFlashSaleAppointmentInfo + +class tagMCFlashSaleAppointmentState(Structure): + _pack_ = 1 + _fields_ = [ + ("GoodsMark", c_int), # 商品标识 + ("State", 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.GoodsMark = 0 + self.State = 0 + return + + def GetLength(self): + return sizeof(tagMCFlashSaleAppointmentState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 18 限时抢购活动玩家预约信息 //tagMCFlashSaleAppointmentInfo: + GoodsMark:%d, + State:%d + '''\ + %( + self.GoodsMark, + self.State + ) + return DumpString + + +class tagMCFlashSaleAppointmentInfo(Structure): + Head = tagHead() + IsAll = 0 #(BYTE IsAll)// 是否全部 + GoodsCount = 0 #(WORD GoodsCount)// 商品数 + GoodsList = list() #(vector<tagMCFlashSaleAppointmentState> GoodsList)// 预约的商品 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GoodsCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.GoodsCount): + temGoodsList = tagMCFlashSaleAppointmentState() + _pos = temGoodsList.ReadData(_lpData, _pos) + self.GoodsList.append(temGoodsList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x18 + self.IsAll = 0 + self.GoodsCount = 0 + self.GoodsList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + for i in range(self.GoodsCount): + length += self.GoodsList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IsAll) + data = CommFunc.WriteWORD(data, self.GoodsCount) + for i in range(self.GoodsCount): + data = CommFunc.WriteString(data, self.GoodsList[i].GetLength(), self.GoodsList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + IsAll:%d, + GoodsCount:%d, + GoodsList:%s + '''\ + %( + self.Head.OutputString(), + self.IsAll, + self.GoodsCount, + "..." + ) + return DumpString + + +m_NAtagMCFlashSaleAppointmentInfo=tagMCFlashSaleAppointmentInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleAppointmentInfo.Head.Cmd,m_NAtagMCFlashSaleAppointmentInfo.Head.SubCmd))] = m_NAtagMCFlashSaleAppointmentInfo + + +#------------------------------------------------------ +# AA 17 限时抢购活动信息 #tagMCFlashSaleInfo + +class tagMCFlashSaleGiftbag(Structure): + _pack_ = 1 + _fields_ = [ + ("GiftID", c_int), #商城表的物品ID + ("BuyCountLimit", c_ubyte), #限购数 + ("ServerBuyCountLimit", c_ushort), #全服限购数 + ("MoneyType", c_ubyte), #消耗货币类型 + ("MoneyNumber", c_int), #消耗货币数量 + ("MoneyOriginal", c_int), #原价 + ("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.GiftID = 0 + self.BuyCountLimit = 0 + self.ServerBuyCountLimit = 0 + self.MoneyType = 0 + self.MoneyNumber = 0 + self.MoneyOriginal = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + return + + def GetLength(self): + return sizeof(tagMCFlashSaleGiftbag) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 17 限时抢购活动信息 //tagMCFlashSaleInfo: + GiftID:%d, + BuyCountLimit:%d, + ServerBuyCountLimit:%d, + MoneyType:%d, + MoneyNumber:%d, + MoneyOriginal:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.GiftID, + self.BuyCountLimit, + self.ServerBuyCountLimit, + self.MoneyType, + self.MoneyNumber, + self.MoneyOriginal, + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFlashSaleShop(Structure): + DayIndex = 0 #(BYTE DayIndex)// 活动第几天 + TimeIndex = 0 #(BYTE TimeIndex)// 第几个时间段 + GiftbagCount = 0 #(BYTE GiftbagCount)// 商店礼包数 + GiftbagInfo = list() #(vector<tagMCFlashSaleGiftbag> GiftbagInfo)// 礼包信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.DayIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TimeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagInfo = tagMCFlashSaleGiftbag() + _pos = temGiftbagInfo.ReadData(_lpData, _pos) + self.GiftbagInfo.append(temGiftbagInfo) + return _pos + + def Clear(self): + self.DayIndex = 0 + self.TimeIndex = 0 + self.GiftbagCount = 0 + self.GiftbagInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.DayIndex) + data = CommFunc.WriteBYTE(data, self.TimeIndex) + 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 = ''' + DayIndex:%d, + TimeIndex:%d, + GiftbagCount:%d, + GiftbagInfo:%s + '''\ + %( + self.DayIndex, + self.TimeIndex, + self.GiftbagCount, + "..." + ) + return DumpString + + +class tagMCFlashSaleTime(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 tagMCFlashSaleInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 + ActivityTimeCount = 0 #(BYTE ActivityTimeCount) + ActivityTime = list() #(vector<tagMCFlashSaleTime> ActivityTime)//活动时间 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ShopCount = 0 #(BYTE ShopCount)// 商店数 + ShopInfo = list() #(vector<tagMCFlashSaleShop> ShopInfo)// 商店信息, 当有多个商店且有多个活动时间段时则每个时间段对应一个商店; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x17 + 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ActivityTimeCount): + temActivityTime = tagMCFlashSaleTime() + _pos = temActivityTime.ReadData(_lpData, _pos) + self.ActivityTime.append(temActivityTime) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ShopCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ShopCount): + temShopInfo = tagMCFlashSaleShop() + _pos = temShopInfo.ReadData(_lpData, _pos) + self.ShopInfo.append(temShopInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x17 + self.StartDate = "" + self.EndtDate = "" + self.AdvanceMinutes = 0 + self.ActivityTimeCount = 0 + self.ActivityTime = list() + self.IsDayReset = 0 + self.LimitLV = 0 + self.ShopCount = 0 + self.ShopInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.ActivityTimeCount): + length += self.ActivityTime[i].GetLength() + length += 1 + length += 2 + length += 1 + for i in range(self.ShopCount): + length += self.ShopInfo[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.AdvanceMinutes) + data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) + for i in range(self.ActivityTimeCount): + data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ShopCount) + for i in range(self.ShopCount): + data = CommFunc.WriteString(data, self.ShopInfo[i].GetLength(), self.ShopInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + AdvanceMinutes:%d, + ActivityTimeCount:%d, + ActivityTime:%s, + IsDayReset:%d, + LimitLV:%d, + ShopCount:%d, + ShopInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.AdvanceMinutes, + self.ActivityTimeCount, + "...", + self.IsDayReset, + self.LimitLV, + self.ShopCount, + "..." + ) + return DumpString + + +m_NAtagMCFlashSaleInfo=tagMCFlashSaleInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleInfo.Head.Cmd,m_NAtagMCFlashSaleInfo.Head.SubCmd))] = m_NAtagMCFlashSaleInfo #------------------------------------------------------ @@ -20371,6 +22866,7 @@ Head = tagHead() StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 ActivityTimeCount = 0 #(BYTE ActivityTimeCount) ActivityTime = list() #(vector<tagMCSpringSaleTime> ActivityTime)//活动时间 IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 @@ -20390,6 +22886,7 @@ _pos = self.Head.ReadData(_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) self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.ActivityTimeCount): temActivityTime = tagMCSpringSaleTime() @@ -20411,6 +22908,7 @@ self.Head.SubCmd = 0x11 self.StartDate = "" self.EndtDate = "" + self.AdvanceMinutes = 0 self.ActivityTimeCount = 0 self.ActivityTime = list() self.IsDayReset = 0 @@ -20424,6 +22922,7 @@ length += self.Head.GetLength() length += 10 length += 10 + length += 2 length += 1 for i in range(self.ActivityTimeCount): length += self.ActivityTime[i].GetLength() @@ -20440,6 +22939,7 @@ 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.AdvanceMinutes) data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) for i in range(self.ActivityTimeCount): data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) @@ -20455,6 +22955,7 @@ Head:%s, StartDate:%s, EndtDate:%s, + AdvanceMinutes:%d, ActivityTimeCount:%d, ActivityTime:%s, IsDayReset:%d, @@ -20466,6 +22967,7 @@ self.Head.OutputString(), self.StartDate, self.EndtDate, + self.AdvanceMinutes, self.ActivityTimeCount, "...", self.IsDayReset, @@ -20478,6 +22980,58 @@ m_NAtagMCSpringSaleInfo=tagMCSpringSaleInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSpringSaleInfo.Head.Cmd,m_NAtagMCSpringSaleInfo.Head.SubCmd))] = m_NAtagMCSpringSaleInfo + + +#------------------------------------------------------ +# AA 16 通知超值礼包信息 #tagMCSuperGiftInfo + +class tagMCSuperGiftInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("StartTime", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + 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 = 0xAA + self.SubCmd = 0x16 + self.StartTime = 0 + return + + def GetLength(self): + return sizeof(tagMCSuperGiftInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 16 通知超值礼包信息 //tagMCSuperGiftInfo: + Cmd:%s, + SubCmd:%s, + StartTime:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.StartTime + ) + return DumpString + + +m_NAtagMCSuperGiftInfo=tagMCSuperGiftInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Cmd,m_NAtagMCSuperGiftInfo.SubCmd))] = m_NAtagMCSuperGiftInfo #------------------------------------------------------ @@ -20534,6 +23088,574 @@ m_NAtagMCTotalLoginDayCntInfo=tagMCTotalLoginDayCntInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalLoginDayCntInfo.Cmd,m_NAtagMCTotalLoginDayCntInfo.SubCmd))] = m_NAtagMCTotalLoginDayCntInfo + + +#------------------------------------------------------ +# AA 1C 累计充值玩家活动信息 #tagMCTotalRechargePlayerInfo + +class tagMCTotalRechargePlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("GoldTotal", c_int), #本次活动已累计充值仙玉数 + ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x1C + return + + def 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 = 0x1C + self.GoldTotal = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCTotalRechargePlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo: + Cmd:%s, + SubCmd:%s, + GoldTotal:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.GoldTotal, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCTotalRechargePlayerInfo=tagMCTotalRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalRechargePlayerInfo.Cmd,m_NAtagMCTotalRechargePlayerInfo.SubCmd))] = m_NAtagMCTotalRechargePlayerInfo + + +#------------------------------------------------------ +# AA 0A 周狂欢活动信息 #tagMCWeekPartyInfo + +class tagMCWeekPartyItem(Structure): + _pack_ = 1 + _fields_ = [ + ("NeedPoint", c_ushort), # 领奖需要积分 + ("ItemID", c_int), # 物品ID + ("ItemCnt", 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.NeedPoint = 0 + self.ItemID = 0 + self.ItemCnt = 0 + self.IsBind = 0 + return + + def GetLength(self): + return sizeof(tagMCWeekPartyItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 0A 周狂欢活动信息 //tagMCWeekPartyInfo: + NeedPoint:%d, + ItemID:%d, + ItemCnt:%d, + IsBind:%d + '''\ + %( + self.NeedPoint, + self.ItemID, + self.ItemCnt, + self.IsBind + ) + return DumpString + + +class tagMCWeekPartyAction(Structure): + TemplateID = 0 #(DWORD TemplateID)// 模板ID + ActionType = 0 #(WORD ActionType)// 活动类别 + TotalTimes = 0 #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数 + SingleTimes = 0 #(DWORD SingleTimes)// 单次领奖需要的次数 + Point = 0 #(DWORD Point)// 单次领奖积分 + Count = 0 #(BYTE Count)// 物品数 + ItemInfo = list() #(vector<tagMCWeekPartyItem> ItemInfo)// 物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.TemplateID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temItemInfo = tagMCWeekPartyItem() + _pos = temItemInfo.ReadData(_lpData, _pos) + self.ItemInfo.append(temItemInfo) + return _pos + + def Clear(self): + self.TemplateID = 0 + self.ActionType = 0 + self.TotalTimes = 0 + self.SingleTimes = 0 + self.Point = 0 + self.Count = 0 + self.ItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 2 + length += 4 + length += 4 + length += 4 + length += 1 + for i in range(self.Count): + length += self.ItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.TemplateID) + data = CommFunc.WriteWORD(data, self.ActionType) + data = CommFunc.WriteDWORD(data, self.TotalTimes) + data = CommFunc.WriteDWORD(data, self.SingleTimes) + data = CommFunc.WriteDWORD(data, self.Point) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + TemplateID:%d, + ActionType:%d, + TotalTimes:%d, + SingleTimes:%d, + Point:%d, + Count:%d, + ItemInfo:%s + '''\ + %( + self.TemplateID, + self.ActionType, + self.TotalTimes, + self.SingleTimes, + self.Point, + self.Count, + "..." + ) + return DumpString + + +class tagMCWeekPartyDayInfo(Structure): + ActCnt = 0 #(BYTE ActCnt)// 数量 + TemplateList = list() #(vector<WORD> TemplateList)// 模板列表 + PCount = 0 #(BYTE PCount)// 物品数 + PItemInfo = list() #(vector<tagMCWeekPartyItem> PItemInfo)// 物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ActCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ActCnt): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.TemplateList.append(value) + self.PCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.PCount): + temPItemInfo = tagMCWeekPartyItem() + _pos = temPItemInfo.ReadData(_lpData, _pos) + self.PItemInfo.append(temPItemInfo) + return _pos + + def Clear(self): + self.ActCnt = 0 + self.TemplateList = list() + self.PCount = 0 + self.PItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 * self.ActCnt + length += 1 + for i in range(self.PCount): + length += self.PItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.ActCnt) + for i in range(self.ActCnt): + data = CommFunc.WriteWORD(data, self.TemplateList[i]) + data = CommFunc.WriteBYTE(data, self.PCount) + for i in range(self.PCount): + data = CommFunc.WriteString(data, self.PItemInfo[i].GetLength(), self.PItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + ActCnt:%d, + TemplateList:%s, + PCount:%d, + PItemInfo:%s + '''\ + %( + self.ActCnt, + "...", + self.PCount, + "..." + ) + return DumpString + + +class tagMCWeekPartyInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + DayCnt = 0 #(BYTE DayCnt)// 天数 + DayInfoList = list() #(vector<tagMCWeekPartyDayInfo> DayInfoList)// 每天模板 + TCount = 0 #(BYTE TCount)// 模板数 + ActionInfo = list() #(vector<tagMCWeekPartyAction> ActionInfo)// 活动模板信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x0A + 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.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.DayCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.DayCnt): + temDayInfoList = tagMCWeekPartyDayInfo() + _pos = temDayInfoList.ReadData(_lpData, _pos) + self.DayInfoList.append(temDayInfoList) + self.TCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TCount): + temActionInfo = tagMCWeekPartyAction() + _pos = temActionInfo.ReadData(_lpData, _pos) + self.ActionInfo.append(temActionInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x0A + self.StartDate = "" + self.EndtDate = "" + self.AdvanceMinutes = 0 + self.IsDayReset = 0 + self.ResetType = 0 + self.LimitLV = 0 + self.DayCnt = 0 + self.DayInfoList = list() + self.TCount = 0 + self.ActionInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + length += 1 + length += 2 + length += 1 + for i in range(self.DayCnt): + length += self.DayInfoList[i].GetLength() + length += 1 + for i in range(self.TCount): + length += self.ActionInfo[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.AdvanceMinutes) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteBYTE(data, self.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.DayCnt) + for i in range(self.DayCnt): + data = CommFunc.WriteString(data, self.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TCount) + for i in range(self.TCount): + data = CommFunc.WriteString(data, self.ActionInfo[i].GetLength(), self.ActionInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + AdvanceMinutes:%d, + IsDayReset:%d, + ResetType:%d, + LimitLV:%d, + DayCnt:%d, + DayInfoList:%s, + TCount:%d, + ActionInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.AdvanceMinutes, + self.IsDayReset, + self.ResetType, + self.LimitLV, + self.DayCnt, + "...", + self.TCount, + "..." + ) + return DumpString + + +m_NAtagMCWeekPartyInfo=tagMCWeekPartyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWeekPartyInfo.Head.Cmd,m_NAtagMCWeekPartyInfo.Head.SubCmd))] = m_NAtagMCWeekPartyInfo + + +#------------------------------------------------------ +# AA 0B 周狂欢玩家活动信息 #tagMCWeekPartyPlayerInfo + +class tagMCWeekPartyTaskInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("TemplateID", c_ushort), # 模板ID + ("CurTimes", c_ushort), #已完成次数 + ("GotTimes", 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.TemplateID = 0 + self.CurTimes = 0 + self.GotTimes = 0 + return + + def GetLength(self): + return sizeof(tagMCWeekPartyTaskInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 0B 周狂欢玩家活动信息 //tagMCWeekPartyPlayerInfo: + TemplateID:%d, + CurTimes:%d, + GotTimes:%d + '''\ + %( + self.TemplateID, + self.CurTimes, + self.GotTimes + ) + return DumpString + + +class tagMCWeekPartyDayPlayerInfo(Structure): + DayIndex = 0 #(DWORD DayIndex)//第X天 + Point = 0 #(DWORD Point)//积分 + AwardRecord = 0 #(DWORD AwardRecord)//积分领奖记录 + ACount = 0 #(DWORD ACount)//任务条目数 + TaskList = list() #(vector<tagMCWeekPartyTaskInfo> TaskList)//活动完成次数信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.DayIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Point,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ACount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + for i in range(self.ACount): + temTaskList = tagMCWeekPartyTaskInfo() + _pos = temTaskList.ReadData(_lpData, _pos) + self.TaskList.append(temTaskList) + return _pos + + def Clear(self): + self.DayIndex = 0 + self.Point = 0 + self.AwardRecord = 0 + self.ACount = 0 + self.TaskList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 4 + for i in range(self.ACount): + length += self.TaskList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.DayIndex) + data = CommFunc.WriteDWORD(data, self.Point) + data = CommFunc.WriteDWORD(data, self.AwardRecord) + data = CommFunc.WriteDWORD(data, self.ACount) + for i in range(self.ACount): + data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + DayIndex:%d, + Point:%d, + AwardRecord:%d, + ACount:%d, + TaskList:%s + '''\ + %( + self.DayIndex, + self.Point, + self.AwardRecord, + self.ACount, + "..." + ) + return DumpString + + +class tagMCWeekPartyPlayerInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + DayInfoList = list() #(vector<tagMCWeekPartyDayPlayerInfo> DayInfoList)//活动完成次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x0B + 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): + temDayInfoList = tagMCWeekPartyDayPlayerInfo() + _pos = temDayInfoList.ReadData(_lpData, _pos) + self.DayInfoList.append(temDayInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x0B + self.Count = 0 + self.DayInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.DayInfoList[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.DayInfoList[i].GetLength(), self.DayInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + DayInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCWeekPartyPlayerInfo=tagMCWeekPartyPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWeekPartyPlayerInfo.Head.Cmd,m_NAtagMCWeekPartyPlayerInfo.Head.SubCmd))] = m_NAtagMCWeekPartyPlayerInfo #------------------------------------------------------ @@ -21125,6 +24247,7 @@ Head = tagHead() StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 LimitLV = 0 #(WORD LimitLV)// 限制等级 TaskCnt = 0 #(BYTE TaskCnt) TaskInfo = list() #(vector<tagMCBossRebornTaskInfo> TaskInfo) @@ -21141,6 +24264,7 @@ _pos = self.Head.ReadData(_lpData, _pos) self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.TaskCnt): @@ -21156,6 +24280,7 @@ self.Head.SubCmd = 0x04 self.StartDate = "" self.EndtDate = "" + self.ResetType = 0 self.LimitLV = 0 self.TaskCnt = 0 self.TaskInfo = list() @@ -21166,6 +24291,7 @@ length += self.Head.GetLength() length += 10 length += 10 + length += 1 length += 2 length += 1 for i in range(self.TaskCnt): @@ -21178,6 +24304,7 @@ 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.WriteBYTE(data, self.ResetType) data = CommFunc.WriteWORD(data, self.LimitLV) data = CommFunc.WriteBYTE(data, self.TaskCnt) for i in range(self.TaskCnt): @@ -21189,6 +24316,7 @@ Head:%s, StartDate:%s, EndtDate:%s, + ResetType:%d, LimitLV:%d, TaskCnt:%d, TaskInfo:%s @@ -21197,6 +24325,7 @@ self.Head.OutputString(), self.StartDate, self.EndtDate, + self.ResetType, self.LimitLV, self.TaskCnt, "..." @@ -22082,17 +25211,12 @@ class tagMCClothesCoatLVInfo(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), ("CoatIndex", c_int), #时装索引 ("CoatLV", c_ubyte), #时装等级 - ("CoatExp", c_int), #时装祝福值经验 ] def __init__(self): self.Clear() - self.Cmd = 0xB1 - self.SubCmd = 0x02 return def ReadData(self, stringData, _pos=0, _len=0): @@ -22101,11 +25225,8 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xB1 - self.SubCmd = 0x02 self.CoatIndex = 0 self.CoatLV = 0 - self.CoatExp = 0 return def GetLength(self): @@ -22116,26 +25237,21 @@ def OutputString(self): DumpString = '''// B1 02 玩家时装皮肤激活状态 //tagMCClothesCoatSkinState: - Cmd:%s, - SubCmd:%s, CoatIndex:%d, - CoatLV:%d, - CoatExp:%d + CoatLV:%d '''\ %( - self.Cmd, - self.SubCmd, self.CoatIndex, - self.CoatLV, - self.CoatExp + self.CoatLV ) return DumpString class tagMCClothesCoatSkinState(Structure): Head = tagHead() - SkinOpenState = 0 #(DWORD SkinOpenState)//时装激活状态, 按索引表示激活状态 - CoatNum = 0 #(BYTE CoatNum)//时装个数 + CoatChestLV = 0 #(DWORD CoatChestLV)//时装柜等级 + CoatChestExp = 0 #(DWORD CoatChestExp)//时装柜经验 + CoatNum = 0 #(WORD CoatNum)//时装个数 CoatInfoList = list() #(vector<tagMCClothesCoatLVInfo> CoatInfoList)// 时装数据列表 data = None @@ -22148,8 +25264,9 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.SkinOpenState,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CoatNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CoatChestLV,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CoatChestExp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CoatNum,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.CoatNum): temCoatInfoList = tagMCClothesCoatLVInfo() _pos = temCoatInfoList.ReadData(_lpData, _pos) @@ -22161,7 +25278,8 @@ self.Head.Clear() self.Head.Cmd = 0xB1 self.Head.SubCmd = 0x02 - self.SkinOpenState = 0 + self.CoatChestLV = 0 + self.CoatChestExp = 0 self.CoatNum = 0 self.CoatInfoList = list() return @@ -22170,7 +25288,8 @@ length = 0 length += self.Head.GetLength() length += 4 - length += 1 + length += 4 + length += 2 for i in range(self.CoatNum): length += self.CoatInfoList[i].GetLength() @@ -22179,8 +25298,9 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.SkinOpenState) - data = CommFunc.WriteBYTE(data, self.CoatNum) + data = CommFunc.WriteDWORD(data, self.CoatChestLV) + data = CommFunc.WriteDWORD(data, self.CoatChestExp) + data = CommFunc.WriteWORD(data, self.CoatNum) for i in range(self.CoatNum): data = CommFunc.WriteString(data, self.CoatInfoList[i].GetLength(), self.CoatInfoList[i].GetBuffer()) return data @@ -22188,13 +25308,15 @@ def OutputString(self): DumpString = ''' Head:%s, - SkinOpenState:%d, + CoatChestLV:%d, + CoatChestExp:%d, CoatNum:%d, CoatInfoList:%s '''\ %( self.Head.OutputString(), - self.SkinOpenState, + self.CoatChestLV, + self.CoatChestExp, self.CoatNum, "..." ) @@ -22203,6 +25325,66 @@ m_NAtagMCClothesCoatSkinState=tagMCClothesCoatSkinState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCClothesCoatSkinState.Head.Cmd,m_NAtagMCClothesCoatSkinState.Head.SubCmd))] = m_NAtagMCClothesCoatSkinState + + +#------------------------------------------------------ +# B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove + +class tagMCNotifyPlayerMove(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PosX", c_int), + ("PosY", c_int), + ("NPCID", c_int), #目标点寻路NPCID, 可能为0 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB1 + 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 = 0xB1 + self.SubCmd = 0x06 + self.PosX = 0 + self.PosY = 0 + self.NPCID = 0 + return + + def GetLength(self): + return sizeof(tagMCNotifyPlayerMove) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B1 06 通知玩家向目标点移动 //tagMCNotifyPlayerMove: + Cmd:%s, + SubCmd:%s, + PosX:%d, + PosY:%d, + NPCID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PosX, + self.PosY, + self.NPCID + ) + return DumpString + + +m_NAtagMCNotifyPlayerMove=tagMCNotifyPlayerMove() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyPlayerMove.Cmd,m_NAtagMCNotifyPlayerMove.SubCmd))] = m_NAtagMCNotifyPlayerMove #------------------------------------------------------ @@ -22475,6 +25657,126 @@ m_NAtagMCPlayerWallow=tagMCPlayerWallow() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerWallow.Cmd,m_NAtagMCPlayerWallow.SubCmd))] = m_NAtagMCPlayerWallow + + +#------------------------------------------------------ +# B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg + +class tagMCAddXianyuanCoinMsg(Structure): + Head = tagHead() + MapID = 0 #(DWORD MapID) + FuncLineID = 0 #(BYTE FuncLineID) + Relation = 0 #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友 + RelationCoinAdd = 0 #(BYTE RelationCoinAdd)// 社交关系总加成 + XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 实际增加的仙缘币 + Reason = 0 #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限 + CallPlayerID = 0 #(DWORD CallPlayerID)// 助战的玩家ID,有值时代表真实助战,没有值时为自己打的 + NameLen = 0 #(BYTE NameLen) + CallPlayerName = "" #(String CallPlayerName)// 助战的玩家名,size = NameLen + IsSweep = 0 #(BYTE IsSweep)// 是否扫荡 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x08 + 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.ReadBYTE(_lpData, _pos) + self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RelationCoinAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.IsSweep,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x08 + self.MapID = 0 + self.FuncLineID = 0 + self.Relation = 0 + self.RelationCoinAdd = 0 + self.XianyuanCoinAdd = 0 + self.Reason = 0 + self.CallPlayerID = 0 + self.NameLen = 0 + self.CallPlayerName = "" + self.IsSweep = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += 1 + length += 1 + length += 2 + length += 1 + length += 4 + length += 1 + length += len(self.CallPlayerName) + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteBYTE(data, self.FuncLineID) + data = CommFunc.WriteBYTE(data, self.Relation) + data = CommFunc.WriteBYTE(data, self.RelationCoinAdd) + data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd) + data = CommFunc.WriteBYTE(data, self.Reason) + data = CommFunc.WriteDWORD(data, self.CallPlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName) + data = CommFunc.WriteBYTE(data, self.IsSweep) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + MapID:%d, + FuncLineID:%d, + Relation:%d, + RelationCoinAdd:%d, + XianyuanCoinAdd:%d, + Reason:%d, + CallPlayerID:%d, + NameLen:%d, + CallPlayerName:%s, + IsSweep:%d + '''\ + %( + self.Head.OutputString(), + self.MapID, + self.FuncLineID, + self.Relation, + self.RelationCoinAdd, + self.XianyuanCoinAdd, + self.Reason, + self.CallPlayerID, + self.NameLen, + self.CallPlayerName, + self.IsSweep + ) + return DumpString + + +m_NAtagMCAddXianyuanCoinMsg=tagMCAddXianyuanCoinMsg() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddXianyuanCoinMsg.Head.Cmd,m_NAtagMCAddXianyuanCoinMsg.Head.SubCmd))] = m_NAtagMCAddXianyuanCoinMsg #------------------------------------------------------ @@ -22778,6 +26080,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("IsDouble", c_ubyte), #是否双倍 + ("OldDouble", c_ubyte), #是否曾经允许双倍 ] def __init__(self): @@ -22795,6 +26098,7 @@ self.Cmd = 0xB2 self.SubCmd = 0x01 self.IsDouble = 0 + self.OldDouble = 0 return def GetLength(self): @@ -22807,18 +26111,564 @@ DumpString = '''// B2 01 通知封魔坛双倍击杀状态 //tagMCFMTDoubleState: Cmd:%s, SubCmd:%s, - IsDouble:%d + IsDouble:%d, + OldDouble:%d '''\ %( self.Cmd, self.SubCmd, - self.IsDouble + self.IsDouble, + self.OldDouble ) return DumpString m_NAtagMCFMTDoubleState=tagMCFMTDoubleState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFMTDoubleState.Cmd,m_NAtagMCFMTDoubleState.SubCmd))] = m_NAtagMCFMTDoubleState + + +#------------------------------------------------------ +# B2 06 助战召唤结果 #tagMCHelpBattleCallResult + +class tagMCHelpBattleCallResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ObjID", c_int), # 助战实例ID + ("PlayerID", c_int), # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤 + ("Job", c_ubyte), # 职业 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x06 + self.ObjID = 0 + self.PlayerID = 0 + self.Job = 0 + return + + def GetLength(self): + return sizeof(tagMCHelpBattleCallResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 06 助战召唤结果 //tagMCHelpBattleCallResult: + Cmd:%s, + SubCmd:%s, + ObjID:%d, + PlayerID:%d, + Job:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ObjID, + self.PlayerID, + self.Job + ) + return DumpString + + +m_NAtagMCHelpBattleCallResult=tagMCHelpBattleCallResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleCallResult.Cmd,m_NAtagMCHelpBattleCallResult.SubCmd))] = m_NAtagMCHelpBattleCallResult + + +#------------------------------------------------------ +# B2 05 助战登记结果 #tagMCHelpBattleCheckInResult + +class tagMCHelpBattleCheckInResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsOK", c_ubyte), #是否成功 + ("IsLogin", c_ubyte), #是否登录同步已登记 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x05 + self.IsOK = 0 + self.IsLogin = 0 + return + + def GetLength(self): + return sizeof(tagMCHelpBattleCheckInResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 05 助战登记结果 //tagMCHelpBattleCheckInResult: + Cmd:%s, + SubCmd:%s, + IsOK:%d, + IsLogin:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsOK, + self.IsLogin + ) + return DumpString + + +m_NAtagMCHelpBattleCheckInResult=tagMCHelpBattleCheckInResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleCheckInResult.Cmd,m_NAtagMCHelpBattleCheckInResult.SubCmd))] = m_NAtagMCHelpBattleCheckInResult + + +#------------------------------------------------------ +# B2 07 助战机器人列表 #tagMCHelpBattleList + +class tagMCHelpBattlePlayer(Structure): + ObjID = 0 #(DWORD ObjID)// 实例ID, 0代表未召唤 + PlayerID = 0 #(DWORD PlayerID)// 助战镜像ID, 大于1小于100代表机器人,如果是机器人,没有以下信息,相关信息自己读配置 + NameLen = 0 #(BYTE NameLen) + Name = "" #(String Name)// 玩家名,size = NameLen + LV = 0 #(WORD LV)// 玩家等级 + Job = 0 #(BYTE Job)// 玩家职业, 如果是机器人,则职业有值,服务端控制 + RealmLV = 0 #(WORD RealmLV)// 玩家境界等级 + FightPower = 0 #(DWORD FightPower)// 玩家战力 + Relation = 0 #(BYTE Relation)// 关系:0-无,1-好友,2-盟友 + IsNeedGold = 0 #(BYTE IsNeedGold)// 是否需要仙玉召唤 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsNeedGold,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.ObjID = 0 + self.PlayerID = 0 + self.NameLen = 0 + self.Name = "" + self.LV = 0 + self.Job = 0 + self.RealmLV = 0 + self.FightPower = 0 + self.Relation = 0 + self.IsNeedGold = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.Name) + length += 2 + length += 1 + length += 2 + length += 4 + length += 1 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.ObjID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.Name) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteBYTE(data, self.Job) + data = CommFunc.WriteWORD(data, self.RealmLV) + data = CommFunc.WriteDWORD(data, self.FightPower) + data = CommFunc.WriteBYTE(data, self.Relation) + data = CommFunc.WriteBYTE(data, self.IsNeedGold) + return data + + def OutputString(self): + DumpString = ''' + ObjID:%d, + PlayerID:%d, + NameLen:%d, + Name:%s, + LV:%d, + Job:%d, + RealmLV:%d, + FightPower:%d, + Relation:%d, + IsNeedGold:%d + '''\ + %( + self.ObjID, + self.PlayerID, + self.NameLen, + self.Name, + self.LV, + self.Job, + self.RealmLV, + self.FightPower, + self.Relation, + self.IsNeedGold + ) + return DumpString + + +class tagMCHelpBattleList(Structure): + Head = tagHead() + RefreshCount = 0 #(BYTE RefreshCount)// 已刷新次数 + HelpCount = 0 #(BYTE HelpCount)// 助战个数 + HelpPlayerList = list() #(vector<tagMCHelpBattlePlayer> HelpPlayerList)// 助战镜像信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x07 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RefreshCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HelpCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.HelpCount): + temHelpPlayerList = tagMCHelpBattlePlayer() + _pos = temHelpPlayerList.ReadData(_lpData, _pos) + self.HelpPlayerList.append(temHelpPlayerList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x07 + self.RefreshCount = 0 + self.HelpCount = 0 + self.HelpPlayerList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + for i in range(self.HelpCount): + length += self.HelpPlayerList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RefreshCount) + data = CommFunc.WriteBYTE(data, self.HelpCount) + for i in range(self.HelpCount): + data = CommFunc.WriteString(data, self.HelpPlayerList[i].GetLength(), self.HelpPlayerList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RefreshCount:%d, + HelpCount:%d, + HelpPlayerList:%s + '''\ + %( + self.Head.OutputString(), + self.RefreshCount, + self.HelpCount, + "..." + ) + return DumpString + + +m_NAtagMCHelpBattleList=tagMCHelpBattleList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleList.Head.Cmd,m_NAtagMCHelpBattleList.Head.SubCmd))] = m_NAtagMCHelpBattleList + + +#------------------------------------------------------ +# B2 11 助战记录列表 #tagMCHelpBattleRecordList + +class tagMCHelpBattleRecord(Structure): + CallPlayerID = 0 #(DWORD CallPlayerID)// 邀请助战的玩家ID + NameLen = 0 #(BYTE NameLen) + CallPlayerName = "" #(String CallPlayerName)// 邀请助战的玩家名,size = NameLen + MapID = 0 #(DWORD MapID) + FuncLineID = 0 #(BYTE FuncLineID) + XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 增加的仙缘币,0代表已达上限 + Relation = 0 #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友 + VIPLV = 0 #(BYTE VIPLV)// 当时的VIP等级 + HelpTime = "" #(char HelpTime[19])// 助战时间yyyy-MM-dd hh:mm:ss + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.VIPLV,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HelpTime,_pos = CommFunc.ReadString(_lpData, _pos,19) + return _pos + + def Clear(self): + self.CallPlayerID = 0 + self.NameLen = 0 + self.CallPlayerName = "" + self.MapID = 0 + self.FuncLineID = 0 + self.XianyuanCoinAdd = 0 + self.Relation = 0 + self.VIPLV = 0 + self.HelpTime = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.CallPlayerName) + length += 4 + length += 1 + length += 2 + length += 1 + length += 1 + length += 19 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.CallPlayerID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteBYTE(data, self.FuncLineID) + data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd) + data = CommFunc.WriteBYTE(data, self.Relation) + data = CommFunc.WriteBYTE(data, self.VIPLV) + data = CommFunc.WriteString(data, 19, self.HelpTime) + return data + + def OutputString(self): + DumpString = ''' + CallPlayerID:%d, + NameLen:%d, + CallPlayerName:%s, + MapID:%d, + FuncLineID:%d, + XianyuanCoinAdd:%d, + Relation:%d, + VIPLV:%d, + HelpTime:%s + '''\ + %( + self.CallPlayerID, + self.NameLen, + self.CallPlayerName, + self.MapID, + self.FuncLineID, + self.XianyuanCoinAdd, + self.Relation, + self.VIPLV, + self.HelpTime + ) + return DumpString + + +class tagMCHelpBattleRecordList(Structure): + Head = tagHead() + RecordCount = 0 #(WORD RecordCount)// 记录数 + RecordList = list() #(vector<tagMCHelpBattleRecord> RecordList) + 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.RecordCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.RecordCount): + temRecordList = tagMCHelpBattleRecord() + _pos = temRecordList.ReadData(_lpData, _pos) + self.RecordList.append(temRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x11 + self.RecordCount = 0 + self.RecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + 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.WriteWORD(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, + RecordCount:%d, + RecordList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagMCHelpBattleRecordList=tagMCHelpBattleRecordList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCHelpBattleRecordList.Head.Cmd,m_NAtagMCHelpBattleRecordList.Head.SubCmd))] = m_NAtagMCHelpBattleRecordList + + +#------------------------------------------------------ +# B2 04 冰晶矿脉信息通知 #tagMCIceLodeInfo + +class tagMCIceLodeInfo(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)// 今日玩法数量 + LineList = list() #(vector<BYTE> LineList)// 玩法列表 + AwardRecord = 0 #(DWORD AwardRecord)// 领奖记录 + HasSweep = 0 #(BYTE HasSweep)// 是否已扫荡 + DayLV = 0 #(WORD DayLV)// 今日等级 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x04 + 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): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.LineList.append(value) + self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HasSweep,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.DayLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x04 + self.Cnt = 0 + self.LineList = list() + self.AwardRecord = 0 + self.HasSweep = 0 + self.DayLV = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 * self.Cnt + length += 4 + length += 1 + length += 2 + + 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.WriteBYTE(data, self.LineList[i]) + data = CommFunc.WriteDWORD(data, self.AwardRecord) + data = CommFunc.WriteBYTE(data, self.HasSweep) + data = CommFunc.WriteWORD(data, self.DayLV) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + LineList:%s, + AwardRecord:%d, + HasSweep:%d, + DayLV:%d + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "...", + self.AwardRecord, + self.HasSweep, + self.DayLV + ) + return DumpString + + +m_NAtagMCIceLodeInfo=tagMCIceLodeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCIceLodeInfo.Head.Cmd,m_NAtagMCIceLodeInfo.Head.SubCmd))] = m_NAtagMCIceLodeInfo #------------------------------------------------------ @@ -24146,19 +27996,210 @@ #------------------------------------------------------ -#D2 01 跨服赛报名(上传数据)状态 #tagMergeWarRegisterState +# C1 02 跨服PK玩家奖励记录 #tagMCCrossRealmPKAwardState -class tagMergeWarRegisterState(Structure): +class tagMCCrossRealmPKAwardState(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("RegisterState", c_ubyte), + ("DayPKCountAwardState", c_int), # 每日匹配次数奖励记录,二进制位存储是否已领取,按匹配次数升序排序索引代表奖励位 + ("DayWinCountAwardState", c_int), # 每日胜利次数奖励记录,二进制位存储是否已领取,按胜利次数升序排序索引代表奖励位 + ("DanLVAwardState", c_int), # 段位达标奖励记录,二进制位存储是否已领取,按段位代表奖励位 + ("SeasonAwardState", c_ubyte), # 赛季结算奖励是否已领取 ] def __init__(self): self.Clear() - self.Cmd = 0xD2 + self.Cmd = 0xC1 + 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 = 0xC1 + self.SubCmd = 0x02 + self.DayPKCountAwardState = 0 + self.DayWinCountAwardState = 0 + self.DanLVAwardState = 0 + self.SeasonAwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCCrossRealmPKAwardState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 02 跨服PK玩家奖励记录 //tagMCCrossRealmPKAwardState: + Cmd:%s, + SubCmd:%s, + DayPKCountAwardState:%d, + DayWinCountAwardState:%d, + DanLVAwardState:%d, + SeasonAwardState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.DayPKCountAwardState, + self.DayWinCountAwardState, + self.DanLVAwardState, + self.SeasonAwardState + ) + return DumpString + + +m_NAtagMCCrossRealmPKAwardState=tagMCCrossRealmPKAwardState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKAwardState.Cmd,m_NAtagMCCrossRealmPKAwardState.SubCmd))] = m_NAtagMCCrossRealmPKAwardState + + +#------------------------------------------------------ +# C1 03 跨服PK玩家历史赛季信息 #tagMCCrossRealmPKPlayerHisSeasonInfo + +class tagMCCrossRealmPKPlayerHisSeason(Structure): + _pack_ = 1 + _fields_ = [ + ("SeasonID", c_ushort), # 赛季ID + ("Order", c_ushort), # 名次 + ("DanLV", c_ubyte), # 段位 + ("Score", c_int), # 积分 + ("AwardLV", 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.SeasonID = 0 + self.Order = 0 + self.DanLV = 0 + self.Score = 0 + self.AwardLV = 0 + return + + def GetLength(self): + return sizeof(tagMCCrossRealmPKPlayerHisSeason) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 03 跨服PK玩家历史赛季信息 //tagMCCrossRealmPKPlayerHisSeasonInfo: + SeasonID:%d, + Order:%d, + DanLV:%d, + Score:%d, + AwardLV:%d + '''\ + %( + self.SeasonID, + self.Order, + self.DanLV, + self.Score, + self.AwardLV + ) + return DumpString + + +class tagMCCrossRealmPKPlayerHisSeasonInfo(Structure): + Head = tagHead() + Count = 0 #(WORD Count)// 赛季个数 + SeasonList = list() #(vector<tagMCCrossRealmPKPlayerHisSeason> SeasonList)// 赛季信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x03 + 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): + temSeasonList = tagMCCrossRealmPKPlayerHisSeason() + _pos = temSeasonList.ReadData(_lpData, _pos) + self.SeasonList.append(temSeasonList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xC1 + self.Head.SubCmd = 0x03 + self.Count = 0 + self.SeasonList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.Count): + length += self.SeasonList[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.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + SeasonList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCCrossRealmPKPlayerHisSeasonInfo=tagMCCrossRealmPKPlayerHisSeasonInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKPlayerHisSeasonInfo.Head.Cmd,m_NAtagMCCrossRealmPKPlayerHisSeasonInfo.Head.SubCmd))] = m_NAtagMCCrossRealmPKPlayerHisSeasonInfo + + +#------------------------------------------------------ +# C1 01 跨服PK玩家信息 #tagMCCrossRealmPKPlayerInfo + +class tagMCCrossRealmPKPlayerInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Score", c_int), # 当前积分 + ("DanLV", c_ubyte), # 当前段位 + ("PKCount", c_ushort), # PK次数 + ("WinCount", c_ushort), # 胜利次数 + ("CWinCount", c_ushort), # 连胜次数 + ("DayPKCount", c_ubyte), # 当日已PK次数 + ("DayWinCount", c_ubyte), # 当日已胜利次数 + ("DayBuyCount", c_ubyte), # 当日已购买次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 self.SubCmd = 0x01 return @@ -24168,223 +28209,69 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xD2 + self.Cmd = 0xC1 self.SubCmd = 0x01 - self.RegisterState = 0 + self.Score = 0 + self.DanLV = 0 + self.PKCount = 0 + self.WinCount = 0 + self.CWinCount = 0 + self.DayPKCount = 0 + self.DayWinCount = 0 + self.DayBuyCount = 0 return def GetLength(self): - return sizeof(tagMergeWarRegisterState) + return sizeof(tagMCCrossRealmPKPlayerInfo) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''//D2 01 跨服赛报名(上传数据)状态 //tagMergeWarRegisterState: + DumpString = '''// C1 01 跨服PK玩家信息 //tagMCCrossRealmPKPlayerInfo: Cmd:%s, SubCmd:%s, - RegisterState:%d + Score:%d, + DanLV:%d, + PKCount:%d, + WinCount:%d, + CWinCount:%d, + DayPKCount:%d, + DayWinCount:%d, + DayBuyCount:%d '''\ %( self.Cmd, self.SubCmd, - self.RegisterState + self.Score, + self.DanLV, + self.PKCount, + self.WinCount, + self.CWinCount, + self.DayPKCount, + self.DayWinCount, + self.DayBuyCount ) return DumpString -m_NAtagMergeWarRegisterState=tagMergeWarRegisterState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeWarRegisterState.Cmd,m_NAtagMergeWarRegisterState.SubCmd))] = m_NAtagMergeWarRegisterState +m_NAtagMCCrossRealmPKPlayerInfo=tagMCCrossRealmPKPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKPlayerInfo.Cmd,m_NAtagMCCrossRealmPKPlayerInfo.SubCmd))] = m_NAtagMCCrossRealmPKPlayerInfo #------------------------------------------------------ -# D2 09 跨服boss奖励领奖状态 #tagMCMergeBossAwardRecord +# C1 06 进入跨服服务器错误 #tagMCEnterCrossServerError -class tagMCMergeBossAwardRecord(Structure): +class tagMCEnterCrossServerError(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("FirstJoinAwardState", c_ubyte), # 首次参与奖励状态;0-不可领,1-可领,2-已领 ] def __init__(self): self.Clear() - self.Cmd = 0xD2 - 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 = 0xD2 - self.SubCmd = 0x09 - self.FirstJoinAwardState = 0 - return - - def GetLength(self): - return sizeof(tagMCMergeBossAwardRecord) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// D2 09 跨服boss奖励领奖状态 //tagMCMergeBossAwardRecord: - Cmd:%s, - SubCmd:%s, - FirstJoinAwardState:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.FirstJoinAwardState - ) - return DumpString - - -m_NAtagMCMergeBossAwardRecord=tagMCMergeBossAwardRecord() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergeBossAwardRecord.Cmd,m_NAtagMCMergeBossAwardRecord.SubCmd))] = m_NAtagMCMergeBossAwardRecord - - -#------------------------------------------------------ -# D2 07 跨服王者争霸奖励相关 #tagMCMergeKingAwardInfo - -class tagMCMergeKingAwardInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ServerHonour", c_ubyte), # 全服荣耀值, 1 2 4 8等 - ("ServerHonourAward", c_ubyte), # 全服荣耀奖励是否已领取, 0否1是 - ("RankAward", c_ubyte), # 晋级排名奖励是否已领取, 0否1是 - ("SupportAward", c_int), # 竞猜积分奖励领取记录,按位表示 - ("WorshipState", c_ubyte), # 今日是否已膜拜, 0否1是 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xD2 - 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 = 0xD2 - self.SubCmd = 0x07 - self.ServerHonour = 0 - self.ServerHonourAward = 0 - self.RankAward = 0 - self.SupportAward = 0 - self.WorshipState = 0 - return - - def GetLength(self): - return sizeof(tagMCMergeKingAwardInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// D2 07 跨服王者争霸奖励相关 //tagMCMergeKingAwardInfo: - Cmd:%s, - SubCmd:%s, - ServerHonour:%d, - ServerHonourAward:%d, - RankAward:%d, - SupportAward:%d, - WorshipState:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ServerHonour, - self.ServerHonourAward, - self.RankAward, - self.SupportAward, - self.WorshipState - ) - return DumpString - - -m_NAtagMCMergeKingAwardInfo=tagMCMergeKingAwardInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergeKingAwardInfo.Cmd,m_NAtagMCMergeKingAwardInfo.SubCmd))] = m_NAtagMCMergeKingAwardInfo - - -#------------------------------------------------------ -# D2 08 跨服PK奖励领奖记录 #tagMCMergePKAwardRecord - -class tagMCMergePKAwardRecord(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("FirstWinAwardRecord", c_int), # 首次胜利奖励记录, 按位存储是否已领 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xD2 - 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 = 0xD2 - self.SubCmd = 0x08 - self.FirstWinAwardRecord = 0 - return - - def GetLength(self): - return sizeof(tagMCMergePKAwardRecord) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// D2 08 跨服PK奖励领奖记录 //tagMCMergePKAwardRecord: - Cmd:%s, - SubCmd:%s, - FirstWinAwardRecord:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.FirstWinAwardRecord - ) - return DumpString - - -m_NAtagMCMergePKAwardRecord=tagMCMergePKAwardRecord() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergePKAwardRecord.Cmd,m_NAtagMCMergePKAwardRecord.SubCmd))] = m_NAtagMCMergePKAwardRecord - - -#------------------------------------------------------ -# D2 06 跨服PK次数通知 #tagMCMergePKCnt - -class tagMCMergePKCnt(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("DayPKCnt", c_ushort), # 当日已PK次数 - ("DayBuyCnt", c_ushort), # 当日已购买次数 - ("UnUsedBuyCnt", c_ushort), # 未使用的购买次数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xD2 + self.Cmd = 0xC1 self.SubCmd = 0x06 return @@ -24394,36 +28281,127 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xD2 + self.Cmd = 0xC1 self.SubCmd = 0x06 - self.DayPKCnt = 0 - self.DayBuyCnt = 0 - self.UnUsedBuyCnt = 0 return def GetLength(self): - return sizeof(tagMCMergePKCnt) + return sizeof(tagMCEnterCrossServerError) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// D2 06 跨服PK次数通知 //tagMCMergePKCnt: + DumpString = '''// C1 06 进入跨服服务器错误 //tagMCEnterCrossServerError: Cmd:%s, - SubCmd:%s, - DayPKCnt:%d, - DayBuyCnt:%d, - UnUsedBuyCnt:%d + SubCmd:%s '''\ %( self.Cmd, - self.SubCmd, - self.DayPKCnt, - self.DayBuyCnt, - self.UnUsedBuyCnt + self.SubCmd ) return DumpString -m_NAtagMCMergePKCnt=tagMCMergePKCnt() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMergePKCnt.Cmd,m_NAtagMCMergePKCnt.SubCmd))] = m_NAtagMCMergePKCnt \ No newline at end of file +m_NAtagMCEnterCrossServerError=tagMCEnterCrossServerError() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEnterCrossServerError.Cmd,m_NAtagMCEnterCrossServerError.SubCmd))] = m_NAtagMCEnterCrossServerError + + +#------------------------------------------------------ +# C1 04 准备进入跨服服务器 #tagMCPrepareEnterCrossServer + +class tagMCPrepareEnterCrossServer(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("DataMapID", c_int), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + 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 = 0xC1 + self.SubCmd = 0x04 + self.DataMapID = 0 + return + + def GetLength(self): + return sizeof(tagMCPrepareEnterCrossServer) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 04 准备进入跨服服务器 //tagMCPrepareEnterCrossServer: + Cmd:%s, + SubCmd:%s, + DataMapID:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.DataMapID + ) + return DumpString + + +m_NAtagMCPrepareEnterCrossServer=tagMCPrepareEnterCrossServer() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrepareEnterCrossServer.Cmd,m_NAtagMCPrepareEnterCrossServer.SubCmd))] = m_NAtagMCPrepareEnterCrossServer + + +#------------------------------------------------------ +# C1 05 开始进入跨服服务器 #tagMCStartEnterCrossServer + +class tagMCStartEnterCrossServer(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xC1 + 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 = 0xC1 + self.SubCmd = 0x05 + return + + def GetLength(self): + return sizeof(tagMCStartEnterCrossServer) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// C1 05 开始进入跨服服务器 //tagMCStartEnterCrossServer: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagMCStartEnterCrossServer=tagMCStartEnterCrossServer() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCStartEnterCrossServer.Cmd,m_NAtagMCStartEnterCrossServer.SubCmd))] = m_NAtagMCStartEnterCrossServer \ No newline at end of file -- Gitblit v1.8.0