From 7b9354771ba6087012ca989f02d7bca345ed1764 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期三, 26 十二月 2018 12:02:00 +0800 Subject: [PATCH] 860312 脱机工具封包补齐 --- Tool/RobotTest/Protocol/PacketsReceivedPY.py | 11466 ++++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 7,693 insertions(+), 3,773 deletions(-) diff --git a/Tool/RobotTest/Protocol/PacketsReceivedPY.py b/Tool/RobotTest/Protocol/PacketsReceivedPY.py index 7d4ff03..49baa51 100644 --- a/Tool/RobotTest/Protocol/PacketsReceivedPY.py +++ b/Tool/RobotTest/Protocol/PacketsReceivedPY.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 @@ -847,6 +879,73 @@ #------------------------------------------------------ +# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo + +class tagGCFakeFamilyInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + FakeIDList = list() #(vector<DWORD> FakeIDList)// 假仙盟名字索引1开始 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0A + 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.FakeIDList.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0A + self.Count = 0 + self.FakeIDList = 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.FakeIDList[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + FakeIDList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCFakeFamilyInfo=tagGCFakeFamilyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFakeFamilyInfo.Head.Cmd,m_NAtagGCFakeFamilyInfo.Head.SubCmd))] = m_NAtagGCFakeFamilyInfo + + +#------------------------------------------------------ # A4 03 家族行为信息 #tagGCFamilyActionInfo class tagGCFamilyAction(Structure): @@ -1045,7 +1144,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("IsOpen", c_ubyte), # 是否已开启 + ("IsOpen", c_int), # 是否已开启 ("OpenCnt", c_ubyte), # 本周已开启次数 ] @@ -1660,6 +1759,77 @@ #------------------------------------------------------ +# A4 0B 玩家参与的仙盟联赛仙盟信息 #tagGCPlayerJoinFamilyWarInfo + +class tagGCPlayerJoinFamilyWarInfo(Structure): + Head = tagHead() + JoinFamilyID = 0 #(DWORD JoinFamilyID)//参与的仙盟ID,默认0本仙盟,仙盟不同时才会收到本包 + JoinFamilyNameLen = 0 #(BYTE JoinFamilyNameLen) + JoinFamilyName = "" #(String JoinFamilyName) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0B + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.JoinFamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.JoinFamilyNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.JoinFamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.JoinFamilyNameLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA4 + self.Head.SubCmd = 0x0B + self.JoinFamilyID = 0 + self.JoinFamilyNameLen = 0 + self.JoinFamilyName = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.JoinFamilyName) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.JoinFamilyID) + data = CommFunc.WriteBYTE(data, self.JoinFamilyNameLen) + data = CommFunc.WriteString(data, self.JoinFamilyNameLen, self.JoinFamilyName) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + JoinFamilyID:%d, + JoinFamilyNameLen:%d, + JoinFamilyName:%s + '''\ + %( + self.Head.OutputString(), + self.JoinFamilyID, + self.JoinFamilyNameLen, + self.JoinFamilyName + ) + return DumpString + + +m_NAtagGCPlayerJoinFamilyWarInfo=tagGCPlayerJoinFamilyWarInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerJoinFamilyWarInfo.Head.Cmd,m_NAtagGCPlayerJoinFamilyWarInfo.Head.SubCmd))] = m_NAtagGCPlayerJoinFamilyWarInfo + + +#------------------------------------------------------ # A4 08 查看家族 #tagGCPyAllFamilyView class tagGCPyFamilyView(Structure): @@ -2143,6 +2313,140 @@ #------------------------------------------------------ +# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo + +class tagGCBossShuntLineState(Structure): + BossID = 0 #(DWORD BossID)// bossID + LineCount = 0 #(BYTE LineCount) + LineIDList = list() #(vector<BYTE> LineIDList)// 线路ID列表 + StateList = list() #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.LineCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + 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.LineCount = 0 + self.LineIDList = list() + self.StateList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + 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.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, + LineCount:%d, + LineIDList:%s, + StateList:%s + '''\ + %( + self.BossID, + self.LineCount, + "...", + "..." + ) + return DumpString + + +class tagGCBossShuntLineStateInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + BossLineStateInfo = list() #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x01 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temBossLineStateInfo = tagGCBossShuntLineState() + _pos = temBossLineStateInfo.ReadData(_lpData, _pos) + self.BossLineStateInfo.append(temBossLineStateInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA9 + self.Head.SubCmd = 0x01 + self.Count = 0 + self.BossLineStateInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.BossLineStateInfo[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.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + BossLineStateInfo:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo + + +#------------------------------------------------------ # A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice class tagGCBourseItemPrice(Structure): @@ -2405,24 +2709,17 @@ #------------------------------------------------------ -# A9 A5 通知摇骰子数据 #tagGCDiceData +# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime -class tagGCDiceData(Structure): +class tagDogzTimeInfoObj(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("HasDiceCnt", c_ubyte), #已摇次数 - ("HasBestCnt", c_ubyte), #已出状元数量 - ("DiceState", c_ubyte), #活动状态0 结束 1第一轮 99暂停 - ("CurPoint", c_int), #当前积分 - ("PointPrizeState", c_int), # 积分奖励 按二进制位标示领取记录 + ("NPCID", c_int), # npcid + ("RefreshSecond", c_int), # 刷新倒计时, 秒 ] def __init__(self): self.Clear() - self.Cmd = 0xA9 - self.SubCmd = 0xA5 return def ReadData(self, stringData, _pos=0, _len=0): @@ -2431,137 +2728,92 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA9 - self.SubCmd = 0xA5 - self.HasDiceCnt = 0 - self.HasBestCnt = 0 - self.DiceState = 0 - self.CurPoint = 0 - self.PointPrizeState = 0 + self.NPCID = 0 + self.RefreshSecond = 0 return def GetLength(self): - return sizeof(tagGCDiceData) + return sizeof(tagDogzTimeInfoObj) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// A9 A5 通知摇骰子数据 //tagGCDiceData: - Cmd:%s, - SubCmd:%s, - HasDiceCnt:%d, - HasBestCnt:%d, - DiceState:%d, - CurPoint:%d, - PointPrizeState:%d + DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime: + NPCID:%d, + RefreshSecond:%d '''\ %( - self.Cmd, - self.SubCmd, - self.HasDiceCnt, - self.HasBestCnt, - self.DiceState, - self.CurPoint, - self.PointPrizeState + self.NPCID, + self.RefreshSecond ) return DumpString -m_NAtagGCDiceData=tagGCDiceData() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDiceData.Cmd,m_NAtagGCDiceData.SubCmd))] = m_NAtagGCDiceData - - -#------------------------------------------------------ -# A9 A4 通知摇骰子结果 #tagGCDiceResult - -class tagGCDiceResult(Structure): +class tagGCDogzNPCRefreshTime(Structure): Head = tagHead() - DiceType = 0 #(BYTE DiceType)//骰子组合类型 - AddPoint = 0 #(DWORD AddPoint)//增加的积分 - MoneyType = 0 #(BYTE MoneyType)//获得金钱类型 - MoneyNum = 0 #(DWORD MoneyNum)//获得金钱数量 - DataSize = 0 #(DWORD DataSize) - DiceNum = "" #(String DiceNum)//具体骰子数 + Cnt = 0 #(BYTE Cnt)//信息个数 + InfoList = list() #(vector<tagDogzTimeInfoObj> InfoList)//信息列表 data = None def __init__(self): self.Clear() self.Head.Cmd = 0xA9 - self.Head.SubCmd = 0xA4 + self.Head.SubCmd = 0x04 return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.DiceType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.AddPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DiceNum,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temInfoList = tagDogzTimeInfoObj() + _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 = 0xA4 - self.DiceType = 0 - self.AddPoint = 0 - self.MoneyType = 0 - self.MoneyNum = 0 - self.DataSize = 0 - self.DiceNum = "" + self.Head.SubCmd = 0x04 + self.Cnt = 0 + self.InfoList = list() return def GetLength(self): length = 0 length += self.Head.GetLength() length += 1 - length += 4 - length += 1 - length += 4 - length += 4 - length += len(self.DiceNum) + 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.DiceType) - data = CommFunc.WriteDWORD(data, self.AddPoint) - data = CommFunc.WriteBYTE(data, self.MoneyType) - data = CommFunc.WriteDWORD(data, self.MoneyNum) - data = CommFunc.WriteDWORD(data, self.DataSize) - data = CommFunc.WriteString(data, self.DataSize, self.DiceNum) + 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, - DiceType:%d, - AddPoint:%d, - MoneyType:%d, - MoneyNum:%d, - DataSize:%d, - DiceNum:%s + Cnt:%d, + InfoList:%s '''\ %( self.Head.OutputString(), - self.DiceType, - self.AddPoint, - self.MoneyType, - self.MoneyNum, - self.DataSize, - self.DiceNum + self.Cnt, + "..." ) return DumpString -m_NAtagGCDiceResult=tagGCDiceResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDiceResult.Head.Cmd,m_NAtagGCDiceResult.Head.SubCmd))] = m_NAtagGCDiceResult +m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime #------------------------------------------------------ @@ -2658,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): @@ -2671,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): @@ -2679,6 +2933,7 @@ self.RecordLen = 0 self.KillRecord = "" self.RefreshSecond = 0 + self.RefreshCD = 0 return def GetLength(self): @@ -2687,6 +2942,7 @@ length += 1 length += 2 length += len(self.KillRecord) + length += 4 length += 4 return length @@ -2698,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): @@ -2706,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 @@ -3371,7 +3630,7 @@ NameLen = 0 #(BYTE NameLen) Name = "" #(String Name)//size = NameLen SpeakerType = 0 #(BYTE SpeakerType) - TextLen = 0 #(BYTE TextLen) + TextLen = 0 #(WORD TextLen) Text = "" #(String Text)//size = TextLen ExtraValue = 0 #(DWORD ExtraValue)//附加值 Extras = "" #(char Extras[256])//附加值列表 @@ -3392,7 +3651,7 @@ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TextLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen) self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256) @@ -3424,7 +3683,7 @@ length += 1 length += len(self.Name) length += 1 - length += 1 + length += 2 length += len(self.Text) length += 4 length += 256 @@ -3440,7 +3699,7 @@ data = CommFunc.WriteBYTE(data, self.NameLen) data = CommFunc.WriteString(data, self.NameLen, self.Name) data = CommFunc.WriteBYTE(data, self.SpeakerType) - data = CommFunc.WriteBYTE(data, self.TextLen) + data = CommFunc.WriteWORD(data, self.TextLen) data = CommFunc.WriteString(data, self.TextLen, self.Text) data = CommFunc.WriteDWORD(data, self.ExtraValue) data = CommFunc.WriteString(data, 256, self.Extras) @@ -3975,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): @@ -4027,177 +4394,304 @@ #------------------------------------------------------ -# AC 15 嘉年华抽奖结果 #tagGCCarnivalResult +# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList -class tagGCCarnivalResult(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Index", c_ubyte), # 抽奖索引 - ("Multiple", c_int), # 倍数150代表1.5倍 - ] +class tagGCFamilyBossHurtInfo(Structure): + NPCID = 0 #(DWORD NPCID) + CurHP = 0 #(DWORD CurHP) + CurHPEx = 0 #(DWORD CurHPEx) + MaxHP = 0 #(DWORD MaxHP) + MaxHPEx = 0 #(DWORD MaxHPEx) + FamilyID = 0 #(DWORD FamilyID)// 最大实时伤血仙盟 + NameLen = 0 #(BYTE NameLen) + FamilyName = "" #(String FamilyName) + data = None def __init__(self): self.Clear() - self.Cmd = 0xAC - self.SubCmd = 0x15 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.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CurHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.CurHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + return _pos def Clear(self): - self.Cmd = 0xAC - self.SubCmd = 0x15 - self.Index = 0 - self.Multiple = 0 + self.NPCID = 0 + self.CurHP = 0 + self.CurHPEx = 0 + self.MaxHP = 0 + self.MaxHPEx = 0 + self.FamilyID = 0 + self.NameLen = 0 + self.FamilyName = "" return def GetLength(self): - return sizeof(tagGCCarnivalResult) + length = 0 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 1 + length += len(self.FamilyName) + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteDWORD(data, self.NPCID) + data = CommFunc.WriteDWORD(data, self.CurHP) + data = CommFunc.WriteDWORD(data, self.CurHPEx) + data = CommFunc.WriteDWORD(data, self.MaxHP) + data = CommFunc.WriteDWORD(data, self.MaxHPEx) + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.FamilyName) + return data def OutputString(self): - DumpString = '''// AC 15 嘉年华抽奖结果 //tagGCCarnivalResult: - Cmd:%s, - SubCmd:%s, - Index:%d, - Multiple:%d + DumpString = ''' + NPCID:%d, + CurHP:%d, + CurHPEx:%d, + MaxHP:%d, + MaxHPEx:%d, + FamilyID:%d, + NameLen:%d, + FamilyName:%s '''\ %( - self.Cmd, - self.SubCmd, - self.Index, - self.Multiple + self.NPCID, + self.CurHP, + self.CurHPEx, + self.MaxHP, + self.MaxHPEx, + self.FamilyID, + self.NameLen, + self.FamilyName ) return DumpString -m_NAtagGCCarnivalResult=tagGCCarnivalResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCarnivalResult.Cmd,m_NAtagGCCarnivalResult.SubCmd))] = m_NAtagGCCarnivalResult - - -#------------------------------------------------------ -# AC 13 通知活动怪信息 #tagGCFestivalNPCInfoList - -class tagGCFestivalNPCInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), # 活动地图ID - ("NPCCnt", c_ushort), # 剩余活动怪数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAC - 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 = 0xAC - self.SubCmd = 0x13 - self.MapID = 0 - self.NPCCnt = 0 - return - - def GetLength(self): - return sizeof(tagGCFestivalNPCInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AC 13 通知活动怪信息 //tagGCFestivalNPCInfoList: - Cmd:%s, - SubCmd:%s, - MapID:%d, - NPCCnt:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MapID, - self.NPCCnt - ) - return DumpString - - -class tagGCFestivalNPCInfoList(Structure): +class tagGCAllFamilyBossHurtInfoList(Structure): Head = tagHead() - Cnt = 0 #(BYTE Cnt)//信息个数 - MapNPCInfoList = list() #(vector<tagGCFestivalNPCInfo> MapNPCInfoList)//地图活动怪列表 + NPCCount = 0 #(BYTE NPCCount)// 个数 + NPCHurtInfo = list() #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表 data = None def __init__(self): self.Clear() self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x13 + self.Head.SubCmd = 0x10 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): - temMapNPCInfoList = tagGCFestivalNPCInfo() - _pos = temMapNPCInfoList.ReadData(_lpData, _pos) - self.MapNPCInfoList.append(temMapNPCInfoList) + self.NPCCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.NPCCount): + temNPCHurtInfo = tagGCFamilyBossHurtInfo() + _pos = temNPCHurtInfo.ReadData(_lpData, _pos) + self.NPCHurtInfo.append(temNPCHurtInfo) return _pos def Clear(self): self.Head = tagHead() self.Head.Clear() self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x13 - self.Cnt = 0 - self.MapNPCInfoList = list() + self.Head.SubCmd = 0x10 + self.NPCCount = 0 + self.NPCHurtInfo = list() return def GetLength(self): length = 0 length += self.Head.GetLength() length += 1 - for i in range(self.Cnt): - length += self.MapNPCInfoList[i].GetLength() + for i in range(self.NPCCount): + length += self.NPCHurtInfo[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.MapNPCInfoList[i].GetLength(), self.MapNPCInfoList[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.NPCCount) + for i in range(self.NPCCount): + data = CommFunc.WriteString(data, self.NPCHurtInfo[i].GetLength(), self.NPCHurtInfo[i].GetBuffer()) return data def OutputString(self): DumpString = ''' Head:%s, - Cnt:%d, - MapNPCInfoList:%s + NPCCount:%d, + NPCHurtInfo:%s '''\ %( self.Head.OutputString(), - self.Cnt, + self.NPCCount, "..." ) return DumpString -m_NAtagGCFestivalNPCInfoList=tagGCFestivalNPCInfoList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFestivalNPCInfoList.Head.Cmd,m_NAtagGCFestivalNPCInfoList.Head.SubCmd))] = m_NAtagGCFestivalNPCInfoList +m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList + + +#------------------------------------------------------ +# AC 08 boss复活点数通知 #tagGCBossRebornPoint + +class tagGCBossRebornPoint(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Point", c_int), # 复活点数 + ("TotalPoint", c_int), # 复活总点数 + ("RebornCnt", c_ushort), # 复活次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAC + 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 = 0xAC + self.SubCmd = 0x08 + self.Point = 0 + self.TotalPoint = 0 + self.RebornCnt = 0 + return + + def GetLength(self): + return sizeof(tagGCBossRebornPoint) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint: + Cmd:%s, + SubCmd:%s, + Point:%d, + TotalPoint:%d, + RebornCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Point, + self.TotalPoint, + self.RebornCnt + ) + return DumpString + + +m_NAtagGCBossRebornPoint=tagGCBossRebornPoint() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint + + +#------------------------------------------------------ +# AC 09 仙界盛典活动信息 #tagGCFairyCeremonyInfo + +class tagGCFairyCeremonyInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + 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): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x09 + 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.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): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x09 + self.StartDate = "" + self.EndtDate = "" + self.WorldLV = 0 + self.LimitLV = 0 + self.ResetType = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 2 + length += 1 + + 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.WorldLV) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + WorldLV:%d, + LimitLV:%d, + ResetType:%d + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.WorldLV, + self.LimitLV, + self.ResetType + ) + return DumpString + + +m_NAtagGCFairyCeremonyInfo=tagGCFairyCeremonyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFairyCeremonyInfo.Head.Cmd,m_NAtagGCFairyCeremonyInfo.Head.SubCmd))] = m_NAtagGCFairyCeremonyInfo #------------------------------------------------------ @@ -4385,62 +4879,6 @@ #------------------------------------------------------ -# AC 14 百服活动状态 #tagGCHundredServerAction - -class tagGCHundredServerAction(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("StartDate", c_int), # 开始时间time - ("IsHundredServer", c_ubyte), # 是否百服服务器 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAC - self.SubCmd = 0x14 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xAC - self.SubCmd = 0x14 - self.StartDate = 0 - self.IsHundredServer = 0 - return - - def GetLength(self): - return sizeof(tagGCHundredServerAction) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AC 14 百服活动状态 //tagGCHundredServerAction: - Cmd:%s, - SubCmd:%s, - StartDate:%d, - IsHundredServer:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.StartDate, - self.IsHundredServer - ) - return DumpString - - -m_NAtagGCHundredServerAction=tagGCHundredServerAction() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCHundredServerAction.Cmd,m_NAtagGCHundredServerAction.SubCmd))] = m_NAtagGCHundredServerAction - - -#------------------------------------------------------ # AC 01 通知领地争夺占领情况 #tagGCManorWarInfo class tagGCManorInfo(Structure): @@ -4606,6 +5044,300 @@ m_NAtagGCManorWarInfo=tagGCManorWarInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCManorWarInfo.Head.Cmd,m_NAtagGCManorWarInfo.Head.SubCmd))] = m_NAtagGCManorWarInfo + + +#------------------------------------------------------ +# AC 06 多倍经验活动信息 #tagGCMultiExpRateInfo + +class tagGCMultiExpRateTime(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 tagGCMultiExpRateInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + ActivityTimeCount = 0 #(BYTE ActivityTimeCount) + ActivityTime = list() #(vector<tagGCMultiExpRateTime> ActivityTime)//活动时间 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + AddExpRate = 0 #(DWORD AddExpRate)// 增加的经验倍率,万分率 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x06 + 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.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ActivityTimeCount): + temActivityTime = tagGCMultiExpRateTime() + _pos = temActivityTime.ReadData(_lpData, _pos) + self.ActivityTime.append(temActivityTime) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddExpRate,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x06 + self.StartDate = "" + self.EndtDate = "" + self.ActivityTimeCount = 0 + self.ActivityTime = list() + self.LimitLV = 0 + self.AddExpRate = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 1 + for i in range(self.ActivityTimeCount): + length += self.ActivityTime[i].GetLength() + length += 2 + length += 4 + + 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.ActivityTimeCount) + for i in range(self.ActivityTimeCount): + data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteDWORD(data, self.AddExpRate) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + ActivityTimeCount:%d, + ActivityTime:%s, + LimitLV:%d, + AddExpRate:%d + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.ActivityTimeCount, + "...", + self.LimitLV, + self.AddExpRate + ) + return DumpString + + +m_NAtagGCMultiExpRateInfo=tagGCMultiExpRateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiExpRateInfo.Head.Cmd,m_NAtagGCMultiExpRateInfo.Head.SubCmd))] = m_NAtagGCMultiExpRateInfo + + +#------------------------------------------------------ +# AC 0A 多倍修行点活动信息 #tagGCMultiRealmPointInfo + +class tagGCMultiRealmPointInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + Multiple = 0 #(BYTE Multiple)// 倍数 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + LimitPoint = 0 #(DWORD LimitPoint)// 限制获得修行点 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + 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.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): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x0A + self.StartDate = "" + self.EndtDate = "" + self.Multiple = 0 + self.LimitLV = 0 + self.LimitPoint = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 1 + length += 2 + length += 4 + + 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.Multiple) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteDWORD(data, self.LimitPoint) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + Multiple:%d, + LimitLV:%d, + LimitPoint:%d + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.Multiple, + self.LimitLV, + self.LimitPoint + ) + return DumpString + + +m_NAtagGCMultiRealmPointInfo=tagGCMultiRealmPointInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMultiRealmPointInfo.Head.Cmd,m_NAtagGCMultiRealmPointInfo.Head.SubCmd))] = m_NAtagGCMultiRealmPointInfo + + +#------------------------------------------------------ +# AC 05 红包删除 #tagGCRedPacketDel + +class tagGCRedPacketDel(Structure): + Head = tagHead() + Cnt = 0 #(DWORD Cnt)// 个数 + DelRedPacketID = list() #(vector<DWORD> DelRedPacketID)// 红包ID + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x05 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadDWORD(_lpData, _pos) + for i in range(self.Cnt): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.DelRedPacketID.append(value) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAC + self.Head.SubCmd = 0x05 + self.Cnt = 0 + self.DelRedPacketID = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 * self.Cnt + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteDWORD(data, self.DelRedPacketID[i]) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + DelRedPacketID:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." + ) + return DumpString + + +m_NAtagGCRedPacketDel=tagGCRedPacketDel() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRedPacketDel.Head.Cmd,m_NAtagGCRedPacketDel.Head.SubCmd))] = m_NAtagGCRedPacketDel #------------------------------------------------------ @@ -5727,6 +6459,196 @@ m_NAtagGCSocialRefreshType=tagGCSocialRefreshType() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSocialRefreshType.Cmd,m_NAtagGCSocialRefreshType.SubCmd))] = m_NAtagGCSocialRefreshType + + +#------------------------------------------------------ +#B3 10 语音聊天 #tagGCVoiceChat + +class tagGCVoiceChat(Structure): + Head = tagHead() + ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域 + SrcNameLen = 0 #(BYTE SrcNameLen) + SrcName = "" #(String SrcName)//size = SrcNameLen + PlayerID = 0 #(DWORD PlayerID) + ToNameLen = 0 #(BYTE ToNameLen) + ToName = "" #(String ToName)//size = ToNameLen + ToPlayerID = 0 #(DWORD ToPlayerID) + Len = 0 #(WORD Len) + Content = list() #(vector<BYTE> Content)//size = Len + ExtraValue = 0 #(DWORD ExtraValue)//附加值 + Extras = "" #(char Extras[256])//附加值列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ChannelType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SrcNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SrcName,_pos = CommFunc.ReadString(_lpData, _pos,self.SrcNameLen) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ToNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.ToName,_pos = CommFunc.ReadString(_lpData, _pos,self.ToNameLen) + self.ToPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Len): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.Content.append(value) + self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB3 + self.Head.SubCmd = 0x10 + self.ChannelType = 0 + self.SrcNameLen = 0 + self.SrcName = "" + self.PlayerID = 0 + self.ToNameLen = 0 + self.ToName = "" + self.ToPlayerID = 0 + self.Len = 0 + self.Content = list() + self.ExtraValue = 0 + self.Extras = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += len(self.SrcName) + length += 4 + length += 1 + length += len(self.ToName) + length += 4 + length += 2 + length += 1 * self.Len + length += 4 + length += 256 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.ChannelType) + data = CommFunc.WriteBYTE(data, self.SrcNameLen) + data = CommFunc.WriteString(data, self.SrcNameLen, self.SrcName) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.ToNameLen) + data = CommFunc.WriteString(data, self.ToNameLen, self.ToName) + data = CommFunc.WriteDWORD(data, self.ToPlayerID) + data = CommFunc.WriteWORD(data, self.Len) + for i in range(self.Len): + data = CommFunc.WriteBYTE(data, self.Content[i]) + data = CommFunc.WriteDWORD(data, self.ExtraValue) + data = CommFunc.WriteString(data, 256, self.Extras) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ChannelType:%d, + SrcNameLen:%d, + SrcName:%s, + PlayerID:%d, + ToNameLen:%d, + ToName:%s, + ToPlayerID:%d, + Len:%d, + Content:%s, + ExtraValue:%d, + Extras:%s + '''\ + %( + self.Head.OutputString(), + self.ChannelType, + self.SrcNameLen, + self.SrcName, + self.PlayerID, + self.ToNameLen, + self.ToName, + self.ToPlayerID, + self.Len, + "...", + self.ExtraValue, + self.Extras + ) + return DumpString + + +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 #------------------------------------------------------ @@ -7125,875 +8047,685 @@ #------------------------------------------------------ -# 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)// 默认满血 + 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) + 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 return def GetLength(self): - return sizeof(tagGCMergePKSeasonInfo) + length = 0 + length += 4 + length += 1 + length += len(self.PlayerName) + length += 1 + length += 2 + 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) + 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 '''\ %( - self.Cmd, - self.SubCmd, - self.SeasonID, - self.SeasonStartTime, - self.SeasonCycle, - self.IsSeasonEnd + self.PlayerID, + self.NameLen, + self.PlayerName, + self.Job, + self.LV, + self.MaxHP ) 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)// 跨服名字 + 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.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.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 + 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.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, + MatchPlayerCount:%d, + MatchPlayer:%s + '''\ + %( + self.Head.OutputString(), + self.RoomID, + self.NameLen, + self.PlayerName, + 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): @@ -8002,18 +8734,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 '''\ @@ -8024,8 +8816,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 #------------------------------------------------------ @@ -8074,6 +8866,118 @@ m_NAtagMCChangeMapFail=tagMCChangeMapFail() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChangeMapFail.Cmd,m_NAtagMCChangeMapFail.SubCmd))] = m_NAtagMCChangeMapFail + + +#------------------------------------------------------ +# A1 10 充值购买次数信息 #tagMCCoinToGoldCountInfo + +class tagMCCoinToGoldCount(Structure): + _pack_ = 1 + _fields_ = [ + ("RecordID", c_ubyte), + ("TodayPayCount", c_ushort), # 今日已购买次数 + ("TotalPayCount", 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.RecordID = 0 + self.TodayPayCount = 0 + self.TotalPayCount = 0 + return + + def GetLength(self): + return sizeof(tagMCCoinToGoldCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 10 充值购买次数信息 //tagMCCoinToGoldCountInfo: + RecordID:%d, + TodayPayCount:%d, + TotalPayCount:%d + '''\ + %( + self.RecordID, + self.TodayPayCount, + self.TotalPayCount + ) + return DumpString + + +class tagMCCoinToGoldCountInfo(Structure): + Head = tagHead() + RecordCount = 0 #(BYTE RecordCount) + CTGCountInfoList = list() #(vector<tagMCCoinToGoldCount> CTGCountInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.RecordCount): + temCTGCountInfoList = tagMCCoinToGoldCount() + _pos = temCTGCountInfoList.ReadData(_lpData, _pos) + self.CTGCountInfoList.append(temCTGCountInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x10 + self.RecordCount = 0 + self.CTGCountInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RecordCount): + length += self.CTGCountInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.RecordCount) + for i in range(self.RecordCount): + data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordCount:%d, + CTGCountInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagMCCoinToGoldCountInfo=tagMCCoinToGoldCountInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCoinToGoldCountInfo.Head.Cmd,m_NAtagMCCoinToGoldCountInfo.Head.SubCmd))] = m_NAtagMCCoinToGoldCountInfo #------------------------------------------------------ @@ -8372,94 +9276,6 @@ #------------------------------------------------------ -#A1 04 玩家经验加成 #tagMCPlayerExpRate - -class tagMCPlayerExpRate(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("SysExpRate", c_int), #系统经验 - ("VipExpRate", c_int), #VIP经验 - ("CaromExpRate", c_int), #连斩经验 - ("FightExpRate", c_int), #buff经验等 - ("ActionExpRate", c_int), #节日活动经验 - ("WorldAverageExpRate", c_int), #世界等级经验 - ("GameEventExpRate", c_int), #小游戏事件经验倍率 - ("WeiClientExpRate", c_int), #微端登录经验倍率 - ("NobleExpRate", c_int), #贵族经验倍率 - ("CommMapExpRate", c_int), #野外常规地图经验倍率 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA1 - 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 = 0xA1 - self.SubCmd = 0x04 - self.SysExpRate = 0 - self.VipExpRate = 0 - self.CaromExpRate = 0 - self.FightExpRate = 0 - self.ActionExpRate = 0 - self.WorldAverageExpRate = 0 - self.GameEventExpRate = 0 - self.WeiClientExpRate = 0 - self.NobleExpRate = 0 - self.CommMapExpRate = 0 - return - - def GetLength(self): - return sizeof(tagMCPlayerExpRate) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A1 04 玩家经验加成 //tagMCPlayerExpRate: - Cmd:%s, - SubCmd:%s, - SysExpRate:%d, - VipExpRate:%d, - CaromExpRate:%d, - FightExpRate:%d, - ActionExpRate:%d, - WorldAverageExpRate:%d, - GameEventExpRate:%d, - WeiClientExpRate:%d, - NobleExpRate:%d, - CommMapExpRate:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.SysExpRate, - self.VipExpRate, - self.CaromExpRate, - self.FightExpRate, - self.ActionExpRate, - self.WorldAverageExpRate, - self.GameEventExpRate, - self.WeiClientExpRate, - self.NobleExpRate, - self.CommMapExpRate - ) - return DumpString - - -m_NAtagMCPlayerExpRate=tagMCPlayerExpRate() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerExpRate.Cmd,m_NAtagMCPlayerExpRate.SubCmd))] = m_NAtagMCPlayerExpRate - - -#------------------------------------------------------ # A1 24 玩家初始化扩展信息 #tagMCPlayerInfo class tagMCPlayerInfo(Structure): @@ -8580,6 +9396,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("MapID", c_ushort), + ("FuncLineID", c_ushort), #功能线路ID ] def __init__(self): @@ -8597,6 +9414,7 @@ self.Cmd = 0xA1 self.SubCmd = 0x26 self.MapID = 0 + self.FuncLineID = 0 return def GetLength(self): @@ -8609,12 +9427,14 @@ DumpString = '''//A1 26 准备切换地图 //tagMCPrepareChangeMap: Cmd:%s, SubCmd:%s, - MapID:%d + MapID:%d, + FuncLineID:%d '''\ %( self.Cmd, self.SubCmd, - self.MapID + self.MapID, + self.FuncLineID ) return DumpString @@ -8632,6 +9452,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("MapID", c_int), + ("FuncLineID", c_ushort), #功能线路ID ] def __init__(self): @@ -8649,6 +9470,7 @@ self.Cmd = 0xA1 self.SubCmd = 0x27 self.MapID = 0 + self.FuncLineID = 0 return def GetLength(self): @@ -8661,12 +9483,14 @@ DumpString = '''//A1 27 开始切换地图 //tagMCStartChangeMap: Cmd:%s, SubCmd:%s, - MapID:%d + MapID:%d, + FuncLineID:%d '''\ %( self.Cmd, self.SubCmd, - self.MapID + self.MapID, + self.FuncLineID ) return DumpString @@ -9083,7 +9907,8 @@ _pack_ = 1 _fields_ = [ ("Type", c_ubyte), #14铜钱,15经验 - ("BuyCnt", c_ubyte), #已购买次数 + ("BuyCnt", c_ubyte), #今日已购买次数 + ("HistoryBuyCnt", c_ubyte), #历史已购买次数 ("LastFreeTime", c_int), #上次的免费时间 ] @@ -9099,6 +9924,7 @@ def Clear(self): self.Type = 0 self.BuyCnt = 0 + self.HistoryBuyCnt = 0 self.LastFreeTime = 0 return @@ -9112,11 +9938,13 @@ DumpString = '''//A3 30 购买魔魂铜钱经验什么的通知 //tagMCBuySomething: Type:%d, BuyCnt:%d, + HistoryBuyCnt:%d, LastFreeTime:%d '''\ %( self.Type, self.BuyCnt, + self.HistoryBuyCnt, self.LastFreeTime ) return DumpString @@ -9186,6 +10014,114 @@ m_NAtagMCBuySomething=tagMCBuySomething() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuySomething.Head.Cmd,m_NAtagMCBuySomething.Head.SubCmd))] = m_NAtagMCBuySomething + + +#------------------------------------------------------ +# A3 17 全身属性激活数量通知 #tagMCAllEquipAttrActiveInfo + +class tagMCEquipActiveInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Type", c_ubyte), # 0强化 1星数 + ("Cnt", 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.Type = 0 + self.Cnt = 0 + return + + def GetLength(self): + return sizeof(tagMCEquipActiveInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 17 全身属性激活数量通知 //tagMCAllEquipAttrActiveInfo: + Type:%d, + Cnt:%d + '''\ + %( + self.Type, + self.Cnt + ) + return DumpString + + +class tagMCAllEquipAttrActiveInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)// 个数 + ActiveInfo = list() #(vector<tagMCEquipActiveInfo> ActiveInfo)//信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x17 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temActiveInfo = tagMCEquipActiveInfo() + _pos = temActiveInfo.ReadData(_lpData, _pos) + self.ActiveInfo.append(temActiveInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x17 + self.Count = 0 + self.ActiveInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.ActiveInfo[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.ActiveInfo[i].GetLength(), self.ActiveInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + ActiveInfo:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCAllEquipAttrActiveInfo=tagMCAllEquipAttrActiveInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAllEquipAttrActiveInfo.Head.Cmd,m_NAtagMCAllEquipAttrActiveInfo.Head.SubCmd))] = m_NAtagMCAllEquipAttrActiveInfo #------------------------------------------------------ @@ -9385,95 +10321,21 @@ #------------------------------------------------------ -# A3 27 玩家命格信息 #tagMCBirthChartInfo +# A3 24 通知绑玉转盘结果 #tagMCBindJadeWheelResult -class tagMCBirthChartInfo(Structure): - Head = tagHead() - OpenState = 0 #(DWORD OpenState)//命格孔状态, 按索引表示激活状态 - Count = 0 #(BYTE Count)// 命格孔信息数 - BirthChartDataList = list() #(vector<DWORD> BirthChartDataList)// 命格孔数据信息, 数据与背包数据相同 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x27 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.OpenState,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.BirthChartDataList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x27 - self.OpenState = 0 - self.Count = 0 - self.BirthChartDataList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 4 * self.Count - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.OpenState) - data = CommFunc.WriteBYTE(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteDWORD(data, self.BirthChartDataList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - OpenState:%d, - Count:%d, - BirthChartDataList:%s - '''\ - %( - self.Head.OutputString(), - self.OpenState, - self.Count, - "..." - ) - return DumpString - - -m_NAtagMCBirthChartInfo=tagMCBirthChartInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBirthChartInfo.Head.Cmd,m_NAtagMCBirthChartInfo.Head.SubCmd))] = m_NAtagMCBirthChartInfo - - -#------------------------------------------------------ -# A3 47 当前精血和获取次数信息 #tagMCBloodAndGetNumInfo - -class tagMCBloodAndGetNumInfo(Structure): +class tagMCBindJadeWheelResult(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("Blood", c_int), # 精血 - ("GetNum", c_int), # 当日获取次数 + ("Index", c_ubyte), # 格子 + ("Cnt", c_ubyte), #今日已转次数 ] def __init__(self): self.Clear() self.Cmd = 0xA3 - self.SubCmd = 0x47 + self.SubCmd = 0x24 return def ReadData(self, stringData, _pos=0, _len=0): @@ -9483,44 +10345,87 @@ def Clear(self): self.Cmd = 0xA3 - self.SubCmd = 0x47 - self.Blood = 0 - self.GetNum = 0 + self.SubCmd = 0x24 + self.Index = 0 + self.Cnt = 0 return def GetLength(self): - return sizeof(tagMCBloodAndGetNumInfo) + return sizeof(tagMCBindJadeWheelResult) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// A3 47 当前精血和获取次数信息 //tagMCBloodAndGetNumInfo: + DumpString = '''// A3 24 通知绑玉转盘结果 //tagMCBindJadeWheelResult: Cmd:%s, SubCmd:%s, - Blood:%d, - GetNum:%d + Index:%d, + Cnt:%d '''\ %( self.Cmd, self.SubCmd, - self.Blood, - self.GetNum + self.Index, + self.Cnt ) return DumpString -m_NAtagMCBloodAndGetNumInfo=tagMCBloodAndGetNumInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBloodAndGetNumInfo.Cmd,m_NAtagMCBloodAndGetNumInfo.SubCmd))] = m_NAtagMCBloodAndGetNumInfo +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_int), #击杀次数 + ("ItemAddCnt", 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.BossType = 0 + self.KillCnt = 0 + self.ItemAddCnt = 0 + return + + def GetLength(self): + return sizeof(tagMCBossCntInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//A3 B7 当日累计攻击boss次数 //tagMCBOSSAttactCnt: + BossType:%d, + KillCnt:%d, + ItemAddCnt:%d + '''\ + %( + self.BossType, + self.KillCnt, + self.ItemAddCnt + ) + return DumpString + + class tagMCBOSSAttactCnt(Structure): Head = tagHead() - DataSize = 0 #(DWORD DataSize) - KillCntInfo = "" #(String KillCntInfo)//'{编号:击杀次数}' + Cnt = 0 #(BYTE Cnt) + KillCntInfoList = list() #(vector<tagMCBossCntInfo> KillCntInfoList) data = None def __init__(self): @@ -9532,8 +10437,11 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.KillCntInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temKillCntInfoList = tagMCBossCntInfo() + _pos = temKillCntInfoList.ReadData(_lpData, _pos) + self.KillCntInfoList.append(temKillCntInfoList) return _pos def Clear(self): @@ -9541,35 +10449,37 @@ self.Head.Clear() self.Head.Cmd = 0xA3 self.Head.SubCmd = 0xB7 - self.DataSize = 0 - self.KillCntInfo = "" + self.Cnt = 0 + self.KillCntInfoList = list() return def GetLength(self): length = 0 length += self.Head.GetLength() - length += 4 - length += len(self.KillCntInfo) + length += 1 + for i in range(self.Cnt): + length += self.KillCntInfoList[i].GetLength() return length def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.DataSize) - data = CommFunc.WriteString(data, self.DataSize, self.KillCntInfo) + data = CommFunc.WriteBYTE(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.KillCntInfoList[i].GetLength(), self.KillCntInfoList[i].GetBuffer()) return data def OutputString(self): DumpString = ''' Head:%s, - DataSize:%d, - KillCntInfo:%s + Cnt:%d, + KillCntInfoList:%s '''\ %( self.Head.OutputString(), - self.DataSize, - self.KillCntInfo + self.Cnt, + "..." ) return DumpString @@ -9748,119 +10658,6 @@ m_NAtagMCBuySomethingReward=tagMCBuySomethingReward() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuySomethingReward.Cmd,m_NAtagMCBuySomethingReward.SubCmd))] = m_NAtagMCBuySomethingReward - - -#------------------------------------------------------ -# A3 B5 通知收集装备信息 #tagMCCollectEquipInfo - -class tagMCCollectEquipInfo(Structure): - Head = tagHead() - DataSize = 0 #(DWORD DataSize) - CollectData = "" #(String CollectData)//收集记录 - ActiveSize = 0 #(DWORD ActiveSize) - ActiveData = "" #(String ActiveData)//属性激活记录 - GoalDataSize = 0 #(DWORD GoalDataSize) - GoalCollectData = "" #(String GoalCollectData)//目标收集记录 - GoalActiveData = 0 #(DWORD GoalActiveData)//目标属性激活记录 - GoaAwardSize = 0 #(DWORD GoaAwardSize) - GoalAwardData = "" #(String GoalAwardData)//目标收集领奖记录 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0xB5 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.CollectData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize) - self.ActiveSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.ActiveData,_pos = CommFunc.ReadString(_lpData, _pos,self.ActiveSize) - self.GoalDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GoalCollectData,_pos = CommFunc.ReadString(_lpData, _pos,self.GoalDataSize) - self.GoalActiveData,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GoaAwardSize,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.GoalAwardData,_pos = CommFunc.ReadString(_lpData, _pos,self.GoaAwardSize) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0xB5 - self.DataSize = 0 - self.CollectData = "" - self.ActiveSize = 0 - self.ActiveData = "" - self.GoalDataSize = 0 - self.GoalCollectData = "" - self.GoalActiveData = 0 - self.GoaAwardSize = 0 - self.GoalAwardData = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += len(self.CollectData) - length += 4 - length += len(self.ActiveData) - length += 4 - length += len(self.GoalCollectData) - length += 4 - length += 4 - length += len(self.GoalAwardData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.DataSize) - data = CommFunc.WriteString(data, self.DataSize, self.CollectData) - data = CommFunc.WriteDWORD(data, self.ActiveSize) - data = CommFunc.WriteString(data, self.ActiveSize, self.ActiveData) - data = CommFunc.WriteDWORD(data, self.GoalDataSize) - data = CommFunc.WriteString(data, self.GoalDataSize, self.GoalCollectData) - data = CommFunc.WriteDWORD(data, self.GoalActiveData) - data = CommFunc.WriteDWORD(data, self.GoaAwardSize) - data = CommFunc.WriteString(data, self.GoaAwardSize, self.GoalAwardData) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - DataSize:%d, - CollectData:%s, - ActiveSize:%d, - ActiveData:%s, - GoalDataSize:%d, - GoalCollectData:%s, - GoalActiveData:%d, - GoaAwardSize:%d, - GoalAwardData:%s - '''\ - %( - self.Head.OutputString(), - self.DataSize, - self.CollectData, - self.ActiveSize, - self.ActiveData, - self.GoalDataSize, - self.GoalCollectData, - self.GoalActiveData, - self.GoaAwardSize, - self.GoalAwardData - ) - return DumpString - - -m_NAtagMCCollectEquipInfo=tagMCCollectEquipInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCollectEquipInfo.Head.Cmd,m_NAtagMCCollectEquipInfo.Head.SubCmd))] = m_NAtagMCCollectEquipInfo #------------------------------------------------------ @@ -10166,8 +10963,10 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("CurValue", c_int), # 当前总活跃度 + ("RealmPoint", c_int), # 可领取修行点 ("StageIndex", c_ubyte), # 当前阶段索引 ("AwardRecord", c_int), # 领奖记录 按位存储 + ("ExtraPoint", c_int), # 多倍活动获得的额外修行点 ] def __init__(self): @@ -10185,8 +10984,10 @@ self.Cmd = 0xA3 self.SubCmd = 0x33 self.CurValue = 0 + self.RealmPoint = 0 self.StageIndex = 0 self.AwardRecord = 0 + self.ExtraPoint = 0 return def GetLength(self): @@ -10200,81 +11001,25 @@ Cmd:%s, SubCmd:%s, CurValue:%d, + RealmPoint:%d, StageIndex:%d, - AwardRecord:%d + AwardRecord:%d, + ExtraPoint:%d '''\ %( self.Cmd, self.SubCmd, self.CurValue, + self.RealmPoint, self.StageIndex, - self.AwardRecord + self.AwardRecord, + self.ExtraPoint ) return DumpString m_NAtagMCDailyActivityInfoList=tagMCDailyActivityInfoList() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyActivityInfoList.Cmd,m_NAtagMCDailyActivityInfoList.SubCmd))] = m_NAtagMCDailyActivityInfoList - - -#------------------------------------------------------ -#A3 A2 每日一购购物记录 # tagMCDailyGoldShop - -class tagMCDailyGoldShop(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("BuyRecord", c_int), # 当日购买记录, 按二进制位表示是否购买对应索引物品,0-未购买,1-已购买 - ("BuyCnt", c_int), # 累积购买次数 - ("AwardRecord", c_int), # 累积购买次数奖励记录 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0xA2 - return - - def 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 = 0xA2 - self.BuyRecord = 0 - self.BuyCnt = 0 - self.AwardRecord = 0 - return - - def GetLength(self): - return sizeof(tagMCDailyGoldShop) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A3 A2 每日一购购物记录 // tagMCDailyGoldShop: - Cmd:%s, - SubCmd:%s, - BuyRecord:%d, - BuyCnt:%d, - AwardRecord:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.BuyRecord, - self.BuyCnt, - self.AwardRecord - ) - return DumpString - - -m_NAtagMCDailyGoldShop=tagMCDailyGoldShop() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGoldShop.Cmd,m_NAtagMCDailyGoldShop.SubCmd))] = m_NAtagMCDailyGoldShop #------------------------------------------------------ @@ -10289,6 +11034,7 @@ ("ReplenishSignCount", c_ubyte), # 可以补签天数 ("IsSign", c_ubyte), #当天是否已经签到,发送0和1 ("IsFrist", c_ubyte), #是否是第一个月 + ("TotalSignCount", c_ushort), #累计总签到天数 ] def __init__(self): @@ -10309,6 +11055,7 @@ self.ReplenishSignCount = 0 self.IsSign = 0 self.IsFrist = 0 + self.TotalSignCount = 0 return def GetLength(self): @@ -10324,7 +11071,8 @@ DaySignCount:%d, ReplenishSignCount:%d, IsSign:%d, - IsFrist:%d + IsFrist:%d, + TotalSignCount:%d '''\ %( self.Cmd, @@ -10332,7 +11080,8 @@ self.DaySignCount, self.ReplenishSignCount, self.IsSign, - self.IsFrist + self.IsFrist, + self.TotalSignCount ) return DumpString @@ -10342,20 +11091,21 @@ #------------------------------------------------------ -# A3 B6 通知是否参与过天降钻石 #tagMCDiceRecord +# A3 C1 神兽助战状态刷新 #tagMCDogzHelpbattleState -class tagMCDiceRecord(Structure): +class tagMCDogzHelpbattleState(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("IsJoin", c_ubyte), #是否参加过 + ("DogzID", c_ubyte), # 神兽ID + ("BatteState", c_ubyte), #是否已助战, 0否1是 ] def __init__(self): self.Clear() self.Cmd = 0xA3 - self.SubCmd = 0xB6 + self.SubCmd = 0xC1 return def ReadData(self, stringData, _pos=0, _len=0): @@ -10365,32 +11115,179 @@ def Clear(self): self.Cmd = 0xA3 - self.SubCmd = 0xB6 - self.IsJoin = 0 + self.SubCmd = 0xC1 + self.DogzID = 0 + self.BatteState = 0 return def GetLength(self): - return sizeof(tagMCDiceRecord) + return sizeof(tagMCDogzHelpbattleState) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// A3 B6 通知是否参与过天降钻石 //tagMCDiceRecord: + DumpString = '''// A3 C1 神兽助战状态刷新 //tagMCDogzHelpbattleState: Cmd:%s, SubCmd:%s, - IsJoin:%d + DogzID:%d, + BatteState:%d '''\ %( self.Cmd, self.SubCmd, - self.IsJoin + self.DogzID, + self.BatteState ) return DumpString -m_NAtagMCDiceRecord=tagMCDiceRecord() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceRecord.Cmd,m_NAtagMCDiceRecord.SubCmd))] = m_NAtagMCDiceRecord +m_NAtagMCDogzHelpbattleState=tagMCDogzHelpbattleState() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzHelpbattleState.Cmd,m_NAtagMCDogzHelpbattleState.SubCmd))] = m_NAtagMCDogzHelpbattleState + + +#------------------------------------------------------ +# A3 C0 神兽信息 #tagMCDogzInfo + +class tagMCDogzInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("BuyHelpbattleCount", c_ubyte), #额外购买的助战数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0xC0 + return + + def 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 = 0xC0 + self.BuyHelpbattleCount = 0 + return + + def GetLength(self): + return sizeof(tagMCDogzInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C0 神兽信息 //tagMCDogzInfo: + Cmd:%s, + SubCmd:%s, + BuyHelpbattleCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.BuyHelpbattleCount + ) + return DumpString + + +m_NAtagMCDogzInfo=tagMCDogzInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzInfo.Cmd,m_NAtagMCDogzInfo.SubCmd))] = m_NAtagMCDogzInfo + + +#------------------------------------------------------ +# A3 1C 通知装备分解信息 #tagMCEquipDecomposeInfo + +class tagMCEquipDecomposeInfo(Structure): + Head = tagHead() + LV = 0 #(WORD LV)// 等级 + Exp = 0 #(DWORD Exp)// 升级经验 + Seting = 0 #(DWORD Seting)// 操作数据记录 + DecomposeCnt = 0 #(BYTE DecomposeCnt)// 分解件数进度 + GetItemLen = 0 #(WORD GetItemLen) + GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x1C + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Seting,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.DecomposeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GetItemLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GetItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.GetItemLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x1C + self.LV = 0 + self.Exp = 0 + self.Seting = 0 + self.DecomposeCnt = 0 + self.GetItemLen = 0 + self.GetItemData = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + length += 4 + length += 4 + length += 1 + length += 2 + length += len(self.GetItemData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteWORD(data, self.LV) + data = CommFunc.WriteDWORD(data, self.Exp) + data = CommFunc.WriteDWORD(data, self.Seting) + data = CommFunc.WriteBYTE(data, self.DecomposeCnt) + data = CommFunc.WriteWORD(data, self.GetItemLen) + data = CommFunc.WriteString(data, self.GetItemLen, self.GetItemData) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + LV:%d, + Exp:%d, + Seting:%d, + DecomposeCnt:%d, + GetItemLen:%d, + GetItemData:%s + '''\ + %( + self.Head.OutputString(), + self.LV, + self.Exp, + self.Seting, + self.DecomposeCnt, + self.GetItemLen, + self.GetItemData + ) + return DumpString + + +m_NAtagMCEquipDecomposeInfo=tagMCEquipDecomposeInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipDecomposeInfo.Head.Cmd,m_NAtagMCEquipDecomposeInfo.Head.SubCmd))] = m_NAtagMCEquipDecomposeInfo #------------------------------------------------------ @@ -10687,118 +11584,6 @@ #------------------------------------------------------ -# A3 45 转生灵力信息 #tagMCExchangeReikiCnt - -class tagMCExchangeReikiCnt(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ExCnt", c_ubyte), #今日降级兑换灵力次数 - ("AddChangeReikiCnt", c_ubyte), #增加的兑换灵力次数 - ("CurReiki", c_int), #当前灵力 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x45 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x45 - self.ExCnt = 0 - self.AddChangeReikiCnt = 0 - self.CurReiki = 0 - return - - def GetLength(self): - return sizeof(tagMCExchangeReikiCnt) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A3 45 转生灵力信息 //tagMCExchangeReikiCnt: - Cmd:%s, - SubCmd:%s, - ExCnt:%d, - AddChangeReikiCnt:%d, - CurReiki:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ExCnt, - self.AddChangeReikiCnt, - self.CurReiki - ) - return DumpString - - -m_NAtagMCExchangeReikiCnt=tagMCExchangeReikiCnt() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCExchangeReikiCnt.Cmd,m_NAtagMCExchangeReikiCnt.SubCmd))] = m_NAtagMCExchangeReikiCnt - - -#------------------------------------------------------ -#A3 A4 表情包开通状态#tagMCFacePackageState - -class tagMCFacePackageState(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PackageInfo", c_int), # 按二进制位标示表情包开启状态 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0xA4 - return - - def 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 = 0xA4 - self.PackageInfo = 0 - return - - def GetLength(self): - return sizeof(tagMCFacePackageState) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A3 A4 表情包开通状态//tagMCFacePackageState: - Cmd:%s, - SubCmd:%s, - PackageInfo:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PackageInfo - ) - return DumpString - - -m_NAtagMCFacePackageState=tagMCFacePackageState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFacePackageState.Cmd,m_NAtagMCFacePackageState.SubCmd))] = m_NAtagMCFacePackageState - - -#------------------------------------------------------ # A3 16 仙盟活跃信息通知 #tagMCFamilyActivityInfo class tagMCFamilyActionCnt(Structure): @@ -10916,18 +11701,15 @@ #------------------------------------------------------ #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo -class tagMCFBEncourageInfo(Structure): +class tagMCFBEncourageCnt(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("LV", 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): @@ -10936,33 +11718,92 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x0A - self.LV = 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, - LV:%d + MoneyType:%d, + EncourageCnt:%d '''\ %( - self.Cmd, - self.SubCmd, - self.LV + 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 #------------------------------------------------------ @@ -11089,6 +11930,121 @@ #------------------------------------------------------ +# A3 18 极品白拿信息 #tagMCFreeGoodsInfo + +class tagMCFreeGoods(Structure): + _pack_ = 1 + _fields_ = [ + ("ID", c_ubyte), # 礼包ID + ("BuyState", c_int), # 购买状态 0-未购买 1-已领返还 time值-购买时间 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ID = 0 + self.BuyState = 0 + return + + def GetLength(self): + return sizeof(tagMCFreeGoods) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 18 极品白拿信息 //tagMCFreeGoodsInfo: + ID:%d, + BuyState:%d + '''\ + %( + self.ID, + self.BuyState + ) + return DumpString + + +class tagMCFreeGoodsInfo(Structure): + Head = tagHead() + OpenTime = 0 #(DWORD OpenTime)// 活动开启时间 + Count = 0 #(BYTE Count)// 个数 + FreeGoodsList = list() #(vector<tagMCFreeGoods> FreeGoodsList)// 信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.OpenTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temFreeGoodsList = tagMCFreeGoods() + _pos = temFreeGoodsList.ReadData(_lpData, _pos) + self.FreeGoodsList.append(temFreeGoodsList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x18 + self.OpenTime = 0 + self.Count = 0 + self.FreeGoodsList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.Count): + length += self.FreeGoodsList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.OpenTime) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.FreeGoodsList[i].GetLength(), self.FreeGoodsList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + OpenTime:%d, + Count:%d, + FreeGoodsList:%s + '''\ + %( + self.Head.OutputString(), + self.OpenTime, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCFreeGoodsInfo=tagMCFreeGoodsInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFreeGoodsInfo.Head.Cmd,m_NAtagMCFreeGoodsInfo.Head.SubCmd))] = m_NAtagMCFreeGoodsInfo + + +#------------------------------------------------------ # A3 22 功能NPC已采集次数 #tagMCFuncNPCCollectionCnt class tagMCFuncNPCCollectionCnt(Structure): @@ -11156,6 +12112,7 @@ _fields_ = [ ("FuncID", c_ubyte), # 功能ID ("State", c_ubyte), # 是否开启 + ("AwardState", c_ubyte), # 是否已领奖励 ] def __init__(self): @@ -11170,6 +12127,7 @@ def Clear(self): self.FuncID = 0 self.State = 0 + self.AwardState = 0 return def GetLength(self): @@ -11181,11 +12139,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 @@ -11254,6 +12214,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 #------------------------------------------------------ @@ -11550,272 +12577,6 @@ #------------------------------------------------------ -#A3 07 该组玩家激活的卡片等级信息 #tagMCGroupMonsterTags - -class tagMCGroupMonsterTags(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MonsterTags1", c_int), #字典一中的数据(以数位存卡片等级) - ("MonsterTags2", c_int), #字典二中的数据 - ("GroupIndex", c_ubyte), #怪物组别索引 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - 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 = 0xA3 - self.SubCmd = 0x07 - self.MonsterTags1 = 0 - self.MonsterTags2 = 0 - self.GroupIndex = 0 - return - - def GetLength(self): - return sizeof(tagMCGroupMonsterTags) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A3 07 该组玩家激活的卡片等级信息 //tagMCGroupMonsterTags: - Cmd:%s, - SubCmd:%s, - MonsterTags1:%d, - MonsterTags2:%d, - GroupIndex:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MonsterTags1, - self.MonsterTags2, - self.GroupIndex - ) - return DumpString - - -m_NAtagMCGroupMonsterTags=tagMCGroupMonsterTags() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGroupMonsterTags.Cmd,m_NAtagMCGroupMonsterTags.SubCmd))] = m_NAtagMCGroupMonsterTags - - -#------------------------------------------------------ -# A3 B1 守护激活信息 #tagMCGuardData - -class tagMCGuard(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("GuardID", c_int), #守护ID - ("StarLV", c_ubyte), # 星级(从0开始) - ("ClassLV", c_ubyte), # 当前品质等级(0为未激活) - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0xB1 - return - - def 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 = 0xB1 - self.GuardID = 0 - self.StarLV = 0 - self.ClassLV = 0 - return - - def GetLength(self): - return sizeof(tagMCGuard) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A3 B1 守护激活信息 //tagMCGuardData: - Cmd:%s, - SubCmd:%s, - GuardID:%d, - StarLV:%d, - ClassLV:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.GuardID, - self.StarLV, - self.ClassLV - ) - return DumpString - - -class tagMCGuardData(Structure): - Head = tagHead() - Count = 0 #(BYTE Count)// 守护信息个数 - InfoList = list() #(vector<tagMCGuard> InfoList)// 守护信息列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0xB1 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - temInfoList = tagMCGuard() - _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 = 0xB1 - self.Count = 0 - self.InfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Count): - length += self.InfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - InfoList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagMCGuardData=tagMCGuardData() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuardData.Head.Cmd,m_NAtagMCGuardData.Head.SubCmd))] = m_NAtagMCGuardData - - -#------------------------------------------------------ -# A3 29 魔方寻宝信息 #tagMCMagicTreasureInfo - -class tagMCMagicTreasureInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MTCnt", c_int), # 今日已寻宝次数 - ("GiftState", c_int), # 寻宝次数返利领取状态, 按位表示0-未领, 1-已领 - ("SpecialType", c_int), # 特殊寻宝活动类型 - ("CurLucky", c_int), # 当前幸运值 - ("LuckyTime", c_int), # 幸运寻宝开始时间, time值 - ("CurFreeCnt", c_ubyte), # 当前可用免费次数 - ("OLTotalFreeCnt", c_ubyte), # 今日在线时长总累计免费次数 - ("OLFreeTick", c_int), # 单次在线奖励次数累计时长, 毫秒 - ("OLFreeLastRefreshTick", c_int), # 上次刷新在线奖励寻宝次数tick - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x29 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x29 - self.MTCnt = 0 - self.GiftState = 0 - self.SpecialType = 0 - self.CurLucky = 0 - self.LuckyTime = 0 - self.CurFreeCnt = 0 - self.OLTotalFreeCnt = 0 - self.OLFreeTick = 0 - self.OLFreeLastRefreshTick = 0 - return - - def GetLength(self): - return sizeof(tagMCMagicTreasureInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A3 29 魔方寻宝信息 //tagMCMagicTreasureInfo: - Cmd:%s, - SubCmd:%s, - MTCnt:%d, - GiftState:%d, - SpecialType:%d, - CurLucky:%d, - LuckyTime:%d, - CurFreeCnt:%d, - OLTotalFreeCnt:%d, - OLFreeTick:%d, - OLFreeLastRefreshTick:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MTCnt, - self.GiftState, - self.SpecialType, - self.CurLucky, - self.LuckyTime, - self.CurFreeCnt, - self.OLTotalFreeCnt, - self.OLFreeTick, - self.OLFreeLastRefreshTick - ) - return DumpString - - -m_NAtagMCMagicTreasureInfo=tagMCMagicTreasureInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicTreasureInfo.Cmd,m_NAtagMCMagicTreasureInfo.SubCmd))] = m_NAtagMCMagicTreasureInfo - - -#------------------------------------------------------ # A3 12 通知玩家法宝信息 #tagMCMagicWeaponData class tagMCMagicWeaponData(Structure): @@ -11880,6 +12641,130 @@ m_NAtagMCMagicWeaponData=tagMCMagicWeaponData() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponData.Head.Cmd,m_NAtagMCMagicWeaponData.Head.SubCmd))] = m_NAtagMCMagicWeaponData + + +#------------------------------------------------------ +# A3 52 法宝等级信息 #tagMCMagicWeaponLVInfo + +class tagMCMagicWeaponInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("MWID", c_int), + ("LV", c_ubyte), + ("Exp", c_int), + ("State", c_ubyte), #是否点击法宝认主 + ("FBPassLV", c_ubyte), #副本关卡 + ("IsWear", 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.MWID = 0 + self.LV = 0 + self.Exp = 0 + self.State = 0 + self.FBPassLV = 0 + self.IsWear = 0 + return + + def GetLength(self): + return sizeof(tagMCMagicWeaponInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 52 法宝等级信息 //tagMCMagicWeaponLVInfo: + MWID:%d, + LV:%d, + Exp:%d, + State:%d, + FBPassLV:%d, + IsWear:%d + '''\ + %( + self.MWID, + self.LV, + self.Exp, + self.State, + self.FBPassLV, + self.IsWear + ) + return DumpString + + +class tagMCMagicWeaponLVInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)// 信息个数 + InfoList = list() #(vector<tagMCMagicWeaponInfo> InfoList)// 信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x52 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temInfoList = tagMCMagicWeaponInfo() + _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 = 0x52 + self.Count = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.InfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCMagicWeaponLVInfo=tagMCMagicWeaponLVInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicWeaponLVInfo.Head.Cmd,m_NAtagMCMagicWeaponLVInfo.Head.SubCmd))] = m_NAtagMCMagicWeaponLVInfo #------------------------------------------------------ @@ -12406,18 +13291,69 @@ #------------------------------------------------------ -#A3 AB 抽取图鉴卡片结果 #tagCMMonsterCardLottery +# A3 53 法宝特权数据 #tagMCMWPrivilegeDataInfo -class tagCMMonsterCardLottery(Structure): +class tagMCMWPrivilegeData(Structure): + _pack_ = 1 + _fields_ = [ + ("PriID", c_int), # 特权ID + ("State", c_ubyte), #激活状态 + ("CurValue", c_int), #当前总进度 + ("GotValue", c_int), #已领取进度 + ("ItemAwardState", 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.PriID = 0 + self.State = 0 + self.CurValue = 0 + self.GotValue = 0 + self.ItemAwardState = 0 + return + + def GetLength(self): + return sizeof(tagMCMWPrivilegeData) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 53 法宝特权数据 //tagMCMWPrivilegeDataInfo: + PriID:%d, + State:%d, + CurValue:%d, + GotValue:%d, + ItemAwardState:%d + '''\ + %( + self.PriID, + self.State, + self.CurValue, + self.GotValue, + self.ItemAwardState + ) + return DumpString + + +class tagMCMWPrivilegeDataInfo(Structure): Head = tagHead() - Count = 0 #(BYTE Count)//抽奖结果数 - ResultList = list() #(vector<DWORD> ResultList)//抽奖结果列表size = Count + Count = 0 #(BYTE Count)// 信息个数 + InfoList = list() #(vector<tagMCMWPrivilegeData> InfoList)// 信息列表 data = None def __init__(self): self.Clear() self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0xAB + self.Head.SubCmd = 0x53 return def ReadData(self, _lpData, _pos=0, _Len=0): @@ -12425,24 +13361,26 @@ _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.ResultList.append(value) + temInfoList = tagMCMWPrivilegeData() + _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 = 0xAB + self.Head.SubCmd = 0x53 self.Count = 0 - self.ResultList = list() + self.InfoList = list() return def GetLength(self): length = 0 length += self.Head.GetLength() length += 1 - length += 4 * self.Count + for i in range(self.Count): + length += self.InfoList[i].GetLength() return length @@ -12451,14 +13389,14 @@ 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.ResultList[i]) + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) return data def OutputString(self): DumpString = ''' Head:%s, Count:%d, - ResultList:%s + InfoList:%s '''\ %( self.Head.OutputString(), @@ -12468,64 +13406,8 @@ return DumpString -m_NAtagCMMonsterCardLottery=tagCMMonsterCardLottery() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMonsterCardLottery.Head.Cmd,m_NAtagCMMonsterCardLottery.Head.SubCmd))] = m_NAtagCMMonsterCardLottery - - -#------------------------------------------------------ -#A3 06 怪物图鉴馆等级,经验信息 #tagMCMonsterLabInfo - -class tagMCMonsterLabInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("LabLV", c_int), #图鉴馆等级 - ("LabExp", c_int), #图鉴馆经验 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - 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 = 0xA3 - self.SubCmd = 0x06 - self.LabLV = 0 - self.LabExp = 0 - return - - def GetLength(self): - return sizeof(tagMCMonsterLabInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A3 06 怪物图鉴馆等级,经验信息 //tagMCMonsterLabInfo: - Cmd:%s, - SubCmd:%s, - LabLV:%d, - LabExp:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.LabLV, - self.LabExp - ) - return DumpString - - -m_NAtagMCMonsterLabInfo=tagMCMonsterLabInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMonsterLabInfo.Cmd,m_NAtagMCMonsterLabInfo.SubCmd))] = m_NAtagMCMonsterLabInfo +m_NAtagMCMWPrivilegeDataInfo=tagMCMWPrivilegeDataInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMWPrivilegeDataInfo.Head.Cmd,m_NAtagMCMWPrivilegeDataInfo.Head.SubCmd))] = m_NAtagMCMWPrivilegeDataInfo #------------------------------------------------------ @@ -12534,16 +13416,12 @@ class tagMCNPCIDCollectionCnt(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), ("NPCID", c_int), #NPCID ("CollectionCnt", c_ubyte), #已采集次数 ] def __init__(self): self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x26 return def ReadData(self, stringData, _pos=0, _len=0): @@ -12552,8 +13430,6 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x26 self.NPCID = 0 self.CollectionCnt = 0 return @@ -12566,14 +13442,10 @@ def OutputString(self): DumpString = '''// A3 26 NPCID已采集次数信息 //tagMCNPCIDCollectionCntInfo: - Cmd:%s, - SubCmd:%s, NPCID:%d, CollectionCnt:%d '''\ %( - self.Cmd, - self.SubCmd, self.NPCID, self.CollectionCnt ) @@ -12721,12 +13593,65 @@ #------------------------------------------------------ +# A3 19 分包下载奖励记录 #tagMCPackDownloadRecord + +class tagMCPackDownloadRecord(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Record", c_ubyte), #0-未领取 1-已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x19 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA3 + self.SubCmd = 0x19 + self.Record = 0 + return + + def GetLength(self): + return sizeof(tagMCPackDownloadRecord) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 19 分包下载奖励记录 //tagMCPackDownloadRecord: + Cmd:%s, + SubCmd:%s, + Record:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Record + ) + return DumpString + + +m_NAtagMCPackDownloadRecord=tagMCPackDownloadRecord() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPackDownloadRecord.Cmd,m_NAtagMCPackDownloadRecord.SubCmd))] = m_NAtagMCPackDownloadRecord + + +#------------------------------------------------------ # A3 20 玩家副本相关信息 #tagMCPlayerFBInfoData class tagMCFBInfo(Structure): FBID = 0 #(DWORD FBID)//fbId EnterCnt = 0 #(WORD EnterCnt)//当日进入次数 RecoverCnt = 0 #(WORD RecoverCnt)//找回次数 + ItemAddCnt = 0 #(WORD ItemAddCnt)//物品增加次数 PassGradeCnt = 0 #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID PassGrade = list() #(vector<DWORD> PassGrade)//副本线路对应星级值列表 data = None @@ -12740,6 +13665,7 @@ self.FBID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.EnterCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) self.RecoverCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ItemAddCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) self.PassGradeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.PassGradeCnt): value,_pos=CommFunc.ReadDWORD(_lpData,_pos) @@ -12750,6 +13676,7 @@ self.FBID = 0 self.EnterCnt = 0 self.RecoverCnt = 0 + self.ItemAddCnt = 0 self.PassGradeCnt = 0 self.PassGrade = list() return @@ -12757,6 +13684,7 @@ def GetLength(self): length = 0 length += 4 + length += 2 length += 2 length += 2 length += 1 @@ -12769,6 +13697,7 @@ data = CommFunc.WriteDWORD(data, self.FBID) data = CommFunc.WriteWORD(data, self.EnterCnt) data = CommFunc.WriteWORD(data, self.RecoverCnt) + data = CommFunc.WriteWORD(data, self.ItemAddCnt) data = CommFunc.WriteBYTE(data, self.PassGradeCnt) for i in range(self.PassGradeCnt): data = CommFunc.WriteDWORD(data, self.PassGrade[i]) @@ -12779,6 +13708,7 @@ FBID:%d, EnterCnt:%d, RecoverCnt:%d, + ItemAddCnt:%d, PassGradeCnt:%d, PassGrade:%s '''\ @@ -12786,6 +13716,7 @@ self.FBID, self.EnterCnt, self.RecoverCnt, + self.ItemAddCnt, self.PassGradeCnt, "..." ) @@ -12867,6 +13798,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("LVAwardGetRecord", c_int), # 按二进制位标示领取记录,每位对应的等级在配表中配置,服务端客户端对应 + ("VIPAwardRecord", c_int), # 按二进制位标示vip领取记录,每位对应的等级在配表中配置,服务端客户端对应 ] def __init__(self): @@ -12884,6 +13816,7 @@ self.Cmd = 0xA3 self.SubCmd = 0x0B self.LVAwardGetRecord = 0 + self.VIPAwardRecord = 0 return def GetLength(self): @@ -12896,12 +13829,14 @@ DumpString = '''//A3 0B 玩家等级奖励领取记录信息 //tagMCPlayerLVAwardGetRecord: Cmd:%s, SubCmd:%s, - LVAwardGetRecord:%d + LVAwardGetRecord:%d, + VIPAwardRecord:%d '''\ %( self.Cmd, self.SubCmd, - self.LVAwardGetRecord + self.LVAwardGetRecord, + self.VIPAwardRecord ) return DumpString @@ -13106,58 +14041,6 @@ #------------------------------------------------------ -#A3 0E 玩家累计签到次数 # tagMCPlayerSignCntTotal - -class tagMCPlayerSignCntTotal(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("SignCount", c_ubyte), # 累计签到次数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x0E - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x0E - self.SignCount = 0 - return - - def GetLength(self): - return sizeof(tagMCPlayerSignCntTotal) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A3 0E 玩家累计签到次数 // tagMCPlayerSignCntTotal: - Cmd:%s, - SubCmd:%s, - SignCount:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.SignCount - ) - return DumpString - - -m_NAtagMCPlayerSignCntTotal=tagMCPlayerSignCntTotal() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerSignCntTotal.Cmd,m_NAtagMCPlayerSignCntTotal.SubCmd))] = m_NAtagMCPlayerSignCntTotal - - -#------------------------------------------------------ # A3 BF 通知客户端炼丹炉信息 #tagMCPlayerStoveMsg class tagMCPlayerStoveMsg(Structure): @@ -13218,18 +14101,21 @@ #------------------------------------------------------ -#A3 38 新符文系统符文信息#tagMCPropEnhanceInfo +# A3 21 祈福丹药结果 #tagMCPrayElixirResult -class tagPropEnhanceStone(Structure): +class tagMCPrayElixirResult(Structure): _pack_ = 1 _fields_ = [ - ("index", c_ubyte), #符文索引 - ("LV", c_ubyte), #当前等级 - ("Exp", c_int), #当前经验 + ("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): @@ -13238,95 +14124,36 @@ return _pos + self.GetLength() def Clear(self): - self.index = 0 - self.LV = 0 - self.Exp = 0 + self.Cmd = 0xA3 + self.SubCmd = 0x21 + self.ItemID = 0 + self.PrayCnt = 0 return def GetLength(self): - return sizeof(tagPropEnhanceStone) + return sizeof(tagMCPrayElixirResult) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''//A3 38 新符文系统符文信息//tagMCPropEnhanceInfo: - index:%d, - LV:%d, - Exp:%d + DumpString = '''// A3 21 祈福丹药结果 //tagMCPrayElixirResult: + Cmd:%s, + SubCmd:%s, + ItemID:%d, + PrayCnt:%d '''\ %( - self.index, - self.LV, - self.Exp + self.Cmd, + self.SubCmd, + self.ItemID, + self.PrayCnt ) return DumpString -class tagMCPropEnhanceInfo(Structure): - Head = tagHead() - count = 0 #(BYTE count)//符文信息个数 - InfoList = list() #(vector<tagPropEnhanceStone> InfoList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x38 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.count): - temInfoList = tagPropEnhanceStone() - _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 = 0x38 - self.count = 0 - self.InfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.count): - length += self.InfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.count) - for i in range(self.count): - data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - count:%d, - InfoList:%s - '''\ - %( - self.Head.OutputString(), - self.count, - "..." - ) - return DumpString - - -m_NAtagMCPropEnhanceInfo=tagMCPropEnhanceInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPropEnhanceInfo.Head.Cmd,m_NAtagMCPropEnhanceInfo.Head.SubCmd))] = m_NAtagMCPropEnhanceInfo +m_NAtagMCPrayElixirResult=tagMCPrayElixirResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrayElixirResult.Cmd,m_NAtagMCPrayElixirResult.SubCmd))] = m_NAtagMCPrayElixirResult #------------------------------------------------------ @@ -13338,7 +14165,8 @@ ("Index", c_ubyte), # 找回项索引 ("RecoverCnt", c_ubyte), # 可找回次数 ("ExtraCnt", c_ubyte), # VIP额外次数 - ("ExtraData", c_ubyte), # 额外参数 + ("ExtraData", c_ubyte), # 额外参数1 + ("ExtraData2", c_ubyte), # 额外参数2 ] def __init__(self): @@ -13355,6 +14183,7 @@ self.RecoverCnt = 0 self.ExtraCnt = 0 self.ExtraData = 0 + self.ExtraData2 = 0 return def GetLength(self): @@ -13368,13 +14197,15 @@ Index:%d, RecoverCnt:%d, ExtraCnt:%d, - ExtraData:%d + ExtraData:%d, + ExtraData2:%d '''\ %( self.Index, self.RecoverCnt, self.ExtraCnt, - self.ExtraData + self.ExtraData, + self.ExtraData2 ) return DumpString @@ -13764,10 +14595,49 @@ #------------------------------------------------------ #A3 42 成就完成领奖记录列表 #tagMCSuccessFinishAwardRecordList +class tagMCSuccessFinishAwardRecord(Structure): + _pack_ = 1 + _fields_ = [ + ("RecordIndex", c_ushort), #第几个记录值 每个key存31个succid 0-30为0, 31-61为1.. + ("Record", 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.RecordIndex = 0 + self.Record = 0 + return + + def GetLength(self): + return sizeof(tagMCSuccessFinishAwardRecord) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''//A3 42 成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList: + RecordIndex:%d, + Record:%d + '''\ + %( + self.RecordIndex, + self.Record + ) + return DumpString + + class tagMCSuccessFinishAwardRecordList(Structure): Head = tagHead() - RecordCnt = 0 #(BYTE RecordCnt)//记录值对应个数, 每个key存31个succid - RecordList = list() #(vector<DWORD> RecordList)//对应是否领取值列表 + RecordCnt = 0 #(WORD RecordCnt)//记录个数 + RecordList = list() #(vector<tagMCSuccessFinishAwardRecord> RecordList)//记录列表 data = None def __init__(self): @@ -13779,10 +14649,11 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.RecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.RecordCnt): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.RecordList.append(value) + temRecordList = tagMCSuccessFinishAwardRecord() + _pos = temRecordList.ReadData(_lpData, _pos) + self.RecordList.append(temRecordList) return _pos def Clear(self): @@ -13797,17 +14668,18 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 - length += 4 * self.RecordCnt + length += 2 + for i in range(self.RecordCnt): + length += self.RecordList[i].GetLength() return length def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RecordCnt) + data = CommFunc.WriteWORD(data, self.RecordCnt) for i in range(self.RecordCnt): - data = CommFunc.WriteDWORD(data, self.RecordList[i]) + data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) return data def OutputString(self): @@ -13832,39 +14704,59 @@ # A3 40 成就信息列表 #tagMCSuccessInfoList class tagMCSuccessInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("SuccID", c_int), #成就ID - ("CntValue", c_int), #当前完成进度值 - ] + SuccType = 0 #(WORD SuccType)//成就类型 + Len = 0 #(WORD Len)//条件长度 + Condition = "" #(String Condition)//成就条件 + CntValue = 0 #(DWORD CntValue)//当前完成进度值 + data = None def __init__(self): self.Clear() return - def ReadData(self, stringData, _pos=0, _len=0): + def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() + self.SuccType,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Condition,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) + self.CntValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos def Clear(self): - self.SuccID = 0 + self.SuccType = 0 + self.Len = 0 + self.Condition = "" self.CntValue = 0 return def GetLength(self): - return sizeof(tagMCSuccessInfo) + length = 0 + length += 2 + length += 2 + length += len(self.Condition) + length += 4 + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteWORD(data, self.SuccType) + data = CommFunc.WriteWORD(data, self.Len) + data = CommFunc.WriteString(data, self.Len, self.Condition) + data = CommFunc.WriteDWORD(data, self.CntValue) + return data def OutputString(self): - DumpString = '''// A3 40 成就信息列表 //tagMCSuccessInfoList: - SuccID:%d, + DumpString = ''' + SuccType:%d, + Len:%d, + Condition:%s, CntValue:%d '''\ %( - self.SuccID, + self.SuccType, + self.Len, + self.Condition, self.CntValue ) return DumpString @@ -14187,70 +15079,6 @@ #------------------------------------------------------ -#A3 32 通知魔方寻宝获得物品 #tagMCMagicTreasureGetItem - -class tagMCMagicTreasureGetItem(Structure): - Head = tagHead() - MTItemLen = 0 #(DWORD MTItemLen) - MTItemData = "" #(String MTItemData)// 获得物品信息 [[物品1参数列表], [物品2参数列表], ...] ; 参数列表索引0为itemID - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x32 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.MTItemLen,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.MTItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.MTItemLen) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA3 - self.Head.SubCmd = 0x32 - self.MTItemLen = 0 - self.MTItemData = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += len(self.MTItemData) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.MTItemLen) - data = CommFunc.WriteString(data, self.MTItemLen, self.MTItemData) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - MTItemLen:%d, - MTItemData:%s - '''\ - %( - self.Head.OutputString(), - self.MTItemLen, - self.MTItemData - ) - return DumpString - - -m_NAtagMCMagicTreasureGetItem=tagMCMagicTreasureGetItem() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCMagicTreasureGetItem.Head.Cmd,m_NAtagMCMagicTreasureGetItem.Head.SubCmd))] = m_NAtagMCMagicTreasureGetItem - - -#------------------------------------------------------ #A3 01 坐骑培养信息 #tagTrainHorseData class tagMCHorseInfo(Structure): @@ -14372,76 +15200,72 @@ #------------------------------------------------------ # A3 51 寻宝功能信息 #tagMCTreasureInfo -class tagMCTreasureNumInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("TreasureNum", c_ubyte), # 自定义的寻宝编号 - ("CurFreeCnt", c_ubyte), # 当前可用免费次数 - ("TodayFreeCnt", c_ubyte), # 今日已累计免费次数 - ("StartCalcFreeCntTime", c_int), # 开始计算免费次数时间time值 - ("IsPlayTreasure", c_ubyte), # 是否寻宝过,含免费次数 - ("IsPlayGoldTreasure", c_ubyte), # 是否钻石寻宝过 - ] +class tagMCTreasureTypeInfo(Structure): + TreasureType = 0 #(BYTE TreasureType)//寻宝类型 + LuckValue = 0 #(WORD LuckValue)//当前幸运值 + IndexCount = 0 #(BYTE IndexCount)//索引个数 + FreeCountTime = list() #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值 + data = None def __init__(self): self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x51 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.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.IndexCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.FreeCountTime.append(value) + return _pos def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x51 - self.TreasureNum = 0 - self.CurFreeCnt = 0 - self.TodayFreeCnt = 0 - self.StartCalcFreeCntTime = 0 - self.IsPlayTreasure = 0 - self.IsPlayGoldTreasure = 0 + self.TreasureType = 0 + self.LuckValue = 0 + self.IndexCount = 0 + self.FreeCountTime = list() return def GetLength(self): - return sizeof(tagMCTreasureNumInfo) + length = 0 + length += 1 + length += 2 + length += 1 + length += 4 * self.IndexCount + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteBYTE(data, self.TreasureType) + data = CommFunc.WriteWORD(data, self.LuckValue) + data = CommFunc.WriteBYTE(data, self.IndexCount) + for i in range(self.IndexCount): + data = CommFunc.WriteDWORD(data, self.FreeCountTime[i]) + return data def OutputString(self): - DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo: - Cmd:%s, - SubCmd:%s, - TreasureNum:%d, - CurFreeCnt:%d, - TodayFreeCnt:%d, - StartCalcFreeCntTime:%d, - IsPlayTreasure:%d, - IsPlayGoldTreasure:%d + DumpString = ''' + TreasureType:%d, + LuckValue:%d, + IndexCount:%d, + FreeCountTime:%s '''\ %( - self.Cmd, - self.SubCmd, - self.TreasureNum, - self.CurFreeCnt, - self.TodayFreeCnt, - self.StartCalcFreeCntTime, - self.IsPlayTreasure, - self.IsPlayGoldTreasure + self.TreasureType, + self.LuckValue, + self.IndexCount, + "..." ) return DumpString class tagMCTreasureInfo(Structure): Head = tagHead() - TreauserActionType = 0 #(DWORD TreauserActionType)// 当前寻宝活动类型, 默认0 - TreasuerNumInfoCnt = 0 #(BYTE TreasuerNumInfoCnt)// 寻宝编号信息数 - TreasuerNumInfo = list() #(vector<tagMCTreasureNumInfo> TreasuerNumInfo)// 寻宝编号信息列表 + InfoCount = 0 #(BYTE InfoCount)// 寻宝类型信息数 + TreasuerInfoList = list() #(vector<tagMCTreasureTypeInfo> TreasuerInfoList)// 寻宝类型信息列表 data = None def __init__(self): @@ -14453,12 +15277,11 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.TreauserActionType,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.TreasuerNumInfoCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.TreasuerNumInfoCnt): - temTreasuerNumInfo = tagMCTreasureNumInfo() - _pos = temTreasuerNumInfo.ReadData(_lpData, _pos) - self.TreasuerNumInfo.append(temTreasuerNumInfo) + self.InfoCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.InfoCount): + temTreasuerInfoList = tagMCTreasureTypeInfo() + _pos = temTreasuerInfoList.ReadData(_lpData, _pos) + self.TreasuerInfoList.append(temTreasuerInfoList) return _pos def Clear(self): @@ -14466,41 +15289,36 @@ self.Head.Clear() self.Head.Cmd = 0xA3 self.Head.SubCmd = 0x51 - self.TreauserActionType = 0 - self.TreasuerNumInfoCnt = 0 - self.TreasuerNumInfo = list() + self.InfoCount = 0 + self.TreasuerInfoList = list() return def GetLength(self): length = 0 length += self.Head.GetLength() - length += 4 length += 1 - for i in range(self.TreasuerNumInfoCnt): - length += self.TreasuerNumInfo[i].GetLength() + for i in range(self.InfoCount): + length += self.TreasuerInfoList[i].GetLength() return length def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.TreauserActionType) - data = CommFunc.WriteBYTE(data, self.TreasuerNumInfoCnt) - for i in range(self.TreasuerNumInfoCnt): - data = CommFunc.WriteString(data, self.TreasuerNumInfo[i].GetLength(), self.TreasuerNumInfo[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.InfoCount) + for i in range(self.InfoCount): + data = CommFunc.WriteString(data, self.TreasuerInfoList[i].GetLength(), self.TreasuerInfoList[i].GetBuffer()) return data def OutputString(self): DumpString = ''' Head:%s, - TreauserActionType:%d, - TreasuerNumInfoCnt:%d, - TreasuerNumInfo:%s + InfoCount:%d, + TreasuerInfoList:%s '''\ %( self.Head.OutputString(), - self.TreauserActionType, - self.TreasuerNumInfoCnt, + self.InfoCount, "..." ) return DumpString @@ -14515,9 +15333,10 @@ class tagMCTreasureResult(Structure): Head = tagHead() - AddTreasureMoney = 0 #(WORD AddTreasureMoney)// 本次寻宝增加的货币碎片 + AddTreasureScore = 0 #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分 + AddTreasureLuck = 0 #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值 TreasureResultLen = 0 #(WORD TreasureResultLen) - TreasureResult = "" #(String TreasureResult)// 获得物品结果[[物品ID,个数,是否绑定,是否好物品], ...] + TreasureResult = "" #(String TreasureResult)// 获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...] data = None def __init__(self): @@ -14529,7 +15348,8 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.AddTreasureMoney,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos) self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos) self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen) return _pos @@ -14539,7 +15359,8 @@ self.Head.Clear() self.Head.Cmd = 0xA3 self.Head.SubCmd = 0x50 - self.AddTreasureMoney = 0 + self.AddTreasureScore = 0 + self.AddTreasureLuck = 0 self.TreasureResultLen = 0 self.TreasureResult = "" return @@ -14549,6 +15370,7 @@ length += self.Head.GetLength() length += 2 length += 2 + length += 2 length += len(self.TreasureResult) return length @@ -14556,7 +15378,8 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteWORD(data, self.AddTreasureMoney) + data = CommFunc.WriteWORD(data, self.AddTreasureScore) + data = CommFunc.WriteWORD(data, self.AddTreasureLuck) data = CommFunc.WriteWORD(data, self.TreasureResultLen) data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult) return data @@ -14564,13 +15387,15 @@ def OutputString(self): DumpString = ''' Head:%s, - AddTreasureMoney:%d, + AddTreasureScore:%d, + AddTreasureLuck:%d, TreasureResultLen:%d, TreasureResult:%s '''\ %( self.Head.OutputString(), - self.AddTreasureMoney, + self.AddTreasureScore, + self.AddTreasureLuck, self.TreasureResultLen, self.TreasureResult ) @@ -14590,6 +15415,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("PassLV", c_int), + ("YesterDayPassLV", c_int), ] def __init__(self): @@ -14607,6 +15433,7 @@ self.Cmd = 0xA3 self.SubCmd = 0xBA self.PassLV = 0 + self.YesterDayPassLV = 0 return def GetLength(self): @@ -14619,122 +15446,20 @@ DumpString = '''// A3 BA 通知试炼之塔过关数 //tagMCTrialTowerInfo: Cmd:%s, SubCmd:%s, - PassLV:%d + PassLV:%d, + YesterDayPassLV:%d '''\ %( self.Cmd, self.SubCmd, - self.PassLV + self.PassLV, + self.YesterDayPassLV ) return DumpString m_NAtagMCTrialTowerInfo=tagMCTrialTowerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTrialTowerInfo.Cmd,m_NAtagMCTrialTowerInfo.SubCmd))] = m_NAtagMCTrialTowerInfo - - -#------------------------------------------------------ -#A3 AA 刷新玩家图鉴兑换点数#tagMCUpdatePlayerMonsterCurrency - -class tagMCUpdatePlayerMonsterCurrency(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Value", c_int), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0xAA - return - - def 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 = 0xAA - self.Value = 0 - return - - def GetLength(self): - return sizeof(tagMCUpdatePlayerMonsterCurrency) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//A3 AA 刷新玩家图鉴兑换点数//tagMCUpdatePlayerMonsterCurrency: - Cmd:%s, - SubCmd:%s, - Value:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.Value - ) - return DumpString - - -m_NAtagMCUpdatePlayerMonsterCurrency=tagMCUpdatePlayerMonsterCurrency() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUpdatePlayerMonsterCurrency.Cmd,m_NAtagMCUpdatePlayerMonsterCurrency.SubCmd))] = m_NAtagMCUpdatePlayerMonsterCurrency - - -#------------------------------------------------------ -# A3 25 VIP副本过关情况 #tagMCVIPFBPassInfo - -class tagMCVIPFBPassInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("PassInfo", c_int), #按位表示通关次数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA3 - 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 = 0xA3 - self.SubCmd = 0x25 - self.PassInfo = 0 - return - - def GetLength(self): - return sizeof(tagMCVIPFBPassInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A3 25 VIP副本过关情况 //tagMCVIPFBPassInfo: - Cmd:%s, - SubCmd:%s, - PassInfo:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.PassInfo - ) - return DumpString - - -m_NAtagMCVIPFBPassInfo=tagMCVIPFBPassInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCVIPFBPassInfo.Cmd,m_NAtagMCVIPFBPassInfo.SubCmd))] = m_NAtagMCVIPFBPassInfo #------------------------------------------------------ @@ -14937,6 +15662,114 @@ m_NAtagPyMCWorldAverageLv=tagPyMCWorldAverageLv() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPyMCWorldAverageLv.Cmd,m_NAtagPyMCWorldAverageLv.SubCmd))] = m_NAtagPyMCWorldAverageLv + + +#------------------------------------------------------ +# A3 48 仙宝寻主领奖记录 #tagMCXBXZAwardRecordList + +class tagMCXBXZAwardRecord(Structure): + _pack_ = 1 + _fields_ = [ + ("RecordIndex", c_ushort), #第几个记录值 每个key存31个id 0-30为0, 31-61为1.. + ("Record", 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.RecordIndex = 0 + self.Record = 0 + return + + def GetLength(self): + return sizeof(tagMCXBXZAwardRecord) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 48 仙宝寻主领奖记录 //tagMCXBXZAwardRecordList: + RecordIndex:%d, + Record:%d + '''\ + %( + self.RecordIndex, + self.Record + ) + return DumpString + + +class tagMCXBXZAwardRecordList(Structure): + Head = tagHead() + RecordCnt = 0 #(WORD RecordCnt)//记录个数 + RecordList = list() #(vector<tagMCXBXZAwardRecord> RecordList)//记录列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x48 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.RecordCnt): + temRecordList = tagMCXBXZAwardRecord() + _pos = temRecordList.ReadData(_lpData, _pos) + self.RecordList.append(temRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x48 + self.RecordCnt = 0 + self.RecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 2 + for i in range(self.RecordCnt): + 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.RecordCnt) + for i in range(self.RecordCnt): + data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordCnt:%d, + RecordList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCnt, + "..." + ) + return DumpString + + +m_NAtagMCXBXZAwardRecordList=tagMCXBXZAwardRecordList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXBXZAwardRecordList.Head.Cmd,m_NAtagMCXBXZAwardRecordList.Head.SubCmd))] = m_NAtagMCXBXZAwardRecordList #------------------------------------------------------ @@ -15901,6 +16734,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): @@ -15910,6 +16795,7 @@ ("APosY", c_ushort), ("BPosX", c_ushort), ("BPosY", c_ushort), + ("Angle", c_ushort), ] def __init__(self): @@ -15926,6 +16812,7 @@ self.APosY = 0 self.BPosX = 0 self.BPosY = 0 + self.Angle = 0 return def GetLength(self): @@ -15939,13 +16826,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 @@ -16021,6 +16910,183 @@ m_NAtagMCDynamicBarrierState=tagMCDynamicBarrierState() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDynamicBarrierState.Head.Cmd,m_NAtagMCDynamicBarrierState.Head.SubCmd))] = m_NAtagMCDynamicBarrierState + + +#------------------------------------------------------ +# A7 15 通知仙盟抢Boss伤血信息 #tagMCFamilyBossHurtList + +class tagMCFamilyBossHurt(Structure): + FamilyID = 0 #(DWORD FamilyID)// 所属仙盟ID + HurtID = 0 #(DWORD HurtID)// 伤血的ID, 根据伤血类型表示不同的ID, 如仙盟ID或玩家ID + NameLen = 0 #(BYTE NameLen) + HurtName = "" #(String HurtName) + HurtValue = 0 #(DWORD HurtValue)// 累计伤血,求余1亿的值 + HurtValueEx = 0 #(DWORD HurtValueEx)// 累计伤血,整除1亿的值 + InitTick = 0 #(DWORD InitTick)// 伤血初始tick,用于排序,先按伤血倒序排,再按tick正序排 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HurtName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen) + self.HurtValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtValueEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.InitTick,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.FamilyID = 0 + self.HurtID = 0 + self.NameLen = 0 + self.HurtName = "" + self.HurtValue = 0 + self.HurtValueEx = 0 + self.InitTick = 0 + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 1 + length += len(self.HurtName) + length += 4 + length += 4 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.FamilyID) + data = CommFunc.WriteDWORD(data, self.HurtID) + data = CommFunc.WriteBYTE(data, self.NameLen) + data = CommFunc.WriteString(data, self.NameLen, self.HurtName) + data = CommFunc.WriteDWORD(data, self.HurtValue) + data = CommFunc.WriteDWORD(data, self.HurtValueEx) + data = CommFunc.WriteDWORD(data, self.InitTick) + return data + + def OutputString(self): + DumpString = ''' + FamilyID:%d, + HurtID:%d, + NameLen:%d, + HurtName:%s, + HurtValue:%d, + HurtValueEx:%d, + InitTick:%d + '''\ + %( + self.FamilyID, + self.HurtID, + self.NameLen, + self.HurtName, + self.HurtValue, + self.HurtValueEx, + self.InitTick + ) + return DumpString + + +class tagMCFamilyBossHurtList(Structure): + Head = tagHead() + ObjID = 0 #(DWORD ObjID) + NPCID = 0 #(DWORD NPCID) + HurtType = 0 #(BYTE HurtType)// 0-实时仙盟伤血,1-历史仙盟伤血,2-实时玩家伤血,3-历史玩家伤血 + IsSort = 0 #(BYTE IsSort)// 是否排序过的,一般boss被击杀后会统一同步一次排序过的最终结果,其他情况下客户端自己排序 + HurtCount = 0 #(WORD HurtCount)// 伤血个数 + HurtList = list() #(vector<tagMCFamilyBossHurt> HurtList)// 伤血列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.ObjID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.HurtType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.IsSort,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.HurtCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.HurtCount): + temHurtList = tagMCFamilyBossHurt() + _pos = temHurtList.ReadData(_lpData, _pos) + self.HurtList.append(temHurtList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x15 + self.ObjID = 0 + self.NPCID = 0 + self.HurtType = 0 + self.IsSort = 0 + self.HurtCount = 0 + self.HurtList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 1 + length += 1 + length += 2 + for i in range(self.HurtCount): + length += self.HurtList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.ObjID) + data = CommFunc.WriteDWORD(data, self.NPCID) + data = CommFunc.WriteBYTE(data, self.HurtType) + data = CommFunc.WriteBYTE(data, self.IsSort) + data = CommFunc.WriteWORD(data, self.HurtCount) + for i in range(self.HurtCount): + data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + ObjID:%d, + NPCID:%d, + HurtType:%d, + IsSort:%d, + HurtCount:%d, + HurtList:%s + '''\ + %( + self.Head.OutputString(), + self.ObjID, + self.NPCID, + self.HurtType, + self.IsSort, + self.HurtCount, + "..." + ) + return DumpString + + +m_NAtagMCFamilyBossHurtList=tagMCFamilyBossHurtList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyBossHurtList.Head.Cmd,m_NAtagMCFamilyBossHurtList.Head.SubCmd))] = m_NAtagMCFamilyBossHurtList #------------------------------------------------------ @@ -16199,6 +17265,249 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ +# A7 14 通知查询的NPC数量 #tagMCNPCCntList + +class tagMCNPCCntInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("NPCID", c_int), + ("Cnt", 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.NPCID = 0 + self.Cnt = 0 + return + + def GetLength(self): + return sizeof(tagMCNPCCntInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A7 14 通知查询的NPC数量 //tagMCNPCCntList: + NPCID:%d, + Cnt:%d + '''\ + %( + self.NPCID, + self.Cnt + ) + return DumpString + + +class tagMCNPCCntList(Structure): + Head = tagHead() + MapID = 0 #(DWORD MapID) + NPCInfoCnt = 0 #(BYTE NPCInfoCnt) + NPCInfoList = list() #(vector<tagMCNPCCntInfo> NPCInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x14 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.NPCInfoCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.NPCInfoCnt): + temNPCInfoList = tagMCNPCCntInfo() + _pos = temNPCInfoList.ReadData(_lpData, _pos) + self.NPCInfoList.append(temNPCInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA7 + self.Head.SubCmd = 0x14 + self.MapID = 0 + self.NPCInfoCnt = 0 + self.NPCInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + for i in range(self.NPCInfoCnt): + length += self.NPCInfoList[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.WriteBYTE(data, self.NPCInfoCnt) + for i in range(self.NPCInfoCnt): + data = CommFunc.WriteString(data, self.NPCInfoList[i].GetLength(), self.NPCInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + MapID:%d, + NPCInfoCnt:%d, + NPCInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.MapID, + self.NPCInfoCnt, + "..." + ) + return DumpString + + +m_NAtagMCNPCCntList=tagMCNPCCntList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCCntList.Head.Cmd,m_NAtagMCNPCCntList.Head.SubCmd))] = m_NAtagMCNPCCntList + + +#------------------------------------------------------ #A7 01 通知选中对象 # tagMCNotifySelectObj class tagMCNotifySelectObj(Structure): @@ -16264,8 +17573,6 @@ class tagMCNPCInfo(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), ("ObjID", c_int), ("NPCID", c_int), ("NPCHP", c_int), @@ -16278,8 +17585,6 @@ def __init__(self): self.Clear() - self.Cmd = 0xA7 - self.SubCmd = 0x06 return def ReadData(self, stringData, _pos=0, _len=0): @@ -16288,8 +17593,6 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA7 - self.SubCmd = 0x06 self.ObjID = 0 self.NPCID = 0 self.NPCHP = 0 @@ -16308,8 +17611,6 @@ def OutputString(self): DumpString = '''// A7 06 通知查询的NPC信息 //tagMCNPCInfoList: - Cmd:%s, - SubCmd:%s, ObjID:%d, NPCID:%d, NPCHP:%d, @@ -16320,8 +17621,6 @@ RefreshSecond:%d '''\ %( - self.Cmd, - self.SubCmd, self.ObjID, self.NPCID, self.NPCHP, @@ -17018,132 +18317,6 @@ #------------------------------------------------------ -# A8 07 通知使用皇室宝箱情况 #tagMCCRBoxInfoList - -class tagMCCRBoxInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("FuncIndex", c_ubyte), #功能索引 - ("BoxIndex", c_ubyte), #宝箱格子索引 - ("ItemID", c_int), #物品ID - ("UnlockTime", c_int), # 解锁时间 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xA8 - 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 = 0xA8 - self.SubCmd = 0x07 - self.FuncIndex = 0 - self.BoxIndex = 0 - self.ItemID = 0 - self.UnlockTime = 0 - return - - def GetLength(self): - return sizeof(tagMCCRBoxInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// A8 07 通知使用皇室宝箱情况 //tagMCCRBoxInfoList: - Cmd:%s, - SubCmd:%s, - FuncIndex:%d, - BoxIndex:%d, - ItemID:%d, - UnlockTime:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.FuncIndex, - self.BoxIndex, - self.ItemID, - self.UnlockTime - ) - return DumpString - - -class tagMCCRBoxInfoList(Structure): - Head = tagHead() - Count = 0 #(BYTE Count)//通知个数 - InfoList = list() #(vector<tagMCCRBoxInfo> InfoList) - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA8 - self.Head.SubCmd = 0x07 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.Count): - temInfoList = tagMCCRBoxInfo() - _pos = temInfoList.ReadData(_lpData, _pos) - self.InfoList.append(temInfoList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA8 - self.Head.SubCmd = 0x07 - self.Count = 0 - self.InfoList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - for i in range(self.Count): - length += self.InfoList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Count) - for i in range(self.Count): - data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - InfoList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagMCCRBoxInfoList=tagMCCRBoxInfoList() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCRBoxInfoList.Head.Cmd,m_NAtagMCCRBoxInfoList.Head.SubCmd))] = m_NAtagMCCRBoxInfoList - - -#------------------------------------------------------ # A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc class tagMCGuradPickupItemSucc(Structure): @@ -17435,6 +18608,114 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # A8 10 通知获得物品 #tagMCNotifyUseItemGetItem class tagMCNotifyUseItemGetItem(Structure): @@ -17524,84 +18805,6 @@ m_NAtagMCNotifyUseItemGetItem=tagMCNotifyUseItemGetItem() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNotifyUseItemGetItem.Head.Cmd,m_NAtagMCNotifyUseItemGetItem.Head.SubCmd))] = m_NAtagMCNotifyUseItemGetItem - - -#------------------------------------------------------ -# A8 08 通知开启皇室宝箱后奖励结果 #tagMCOpenCRBoxResult - -class tagMCOpenCRBoxResult(Structure): - Head = tagHead() - UseItemID = 0 #(DWORD UseItemID)// 使用的物品ID - IsBind = 0 #(BYTE IsBind)// 奖励是否绑定 - Num = 0 #(BYTE Num)// 奖励个数 - RewardList = "" #(String RewardList)// 奖励列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xA8 - self.Head.SubCmd = 0x08 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Num,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.RewardList,_pos = CommFunc.ReadString(_lpData, _pos,self.Num) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA8 - self.Head.SubCmd = 0x08 - self.UseItemID = 0 - self.IsBind = 0 - self.Num = 0 - self.RewardList = "" - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 1 - length += len(self.RewardList) - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.UseItemID) - data = CommFunc.WriteBYTE(data, self.IsBind) - data = CommFunc.WriteBYTE(data, self.Num) - data = CommFunc.WriteString(data, self.Num, self.RewardList) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - UseItemID:%d, - IsBind:%d, - Num:%d, - RewardList:%s - '''\ - %( - self.Head.OutputString(), - self.UseItemID, - self.IsBind, - self.Num, - self.RewardList - ) - return DumpString - - -m_NAtagMCOpenCRBoxResult=tagMCOpenCRBoxResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOpenCRBoxResult.Head.Cmd,m_NAtagMCOpenCRBoxResult.Head.SubCmd))] = m_NAtagMCOpenCRBoxResult #------------------------------------------------------ @@ -18070,90 +19273,6 @@ #------------------------------------------------------ -# A8 06 使用翻牌物品结果 #tagMCUseTurnCardItemResult - -class tagMCUseTurnCardItemResult(Structure): - Head = tagHead() - UseItemID = 0 #(DWORD UseItemID)// 使用的物品ID - AllCardNum = 0 #(BYTE AllCardNum)// 总牌数 - AllCfgIndexList = list() #(vector<WORD> AllCfgIndexList)// 总牌配置索引列表 - TurnCardList = list() #(vector<WORD> TurnCardList)// 已翻牌配置索引列表 - 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.UseItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.AllCardNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.AllCardNum): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) - self.AllCfgIndexList.append(value) - for i in range(self.AllCardNum): - value,_pos=CommFunc.ReadWORD(_lpData,_pos) - self.TurnCardList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xA8 - self.Head.SubCmd = 0x06 - self.UseItemID = 0 - self.AllCardNum = 0 - self.AllCfgIndexList = list() - self.TurnCardList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 2 * self.AllCardNum - length += 2 * self.AllCardNum - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.UseItemID) - data = CommFunc.WriteBYTE(data, self.AllCardNum) - for i in range(self.AllCardNum): - data = CommFunc.WriteWORD(data, self.AllCfgIndexList[i]) - for i in range(self.AllCardNum): - data = CommFunc.WriteWORD(data, self.TurnCardList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - UseItemID:%d, - AllCardNum:%d, - AllCfgIndexList:%s, - TurnCardList:%s - '''\ - %( - self.Head.OutputString(), - self.UseItemID, - self.AllCardNum, - "...", - "..." - ) - return DumpString - - -m_NAtagMCUseTurnCardItemResult=tagMCUseTurnCardItemResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseTurnCardItemResult.Head.Cmd,m_NAtagMCUseTurnCardItemResult.Head.SubCmd))] = m_NAtagMCUseTurnCardItemResult - - -#------------------------------------------------------ # A8 13 虚拟掉落物品 #tagMCVirtualItemDrop class tagMCVirtualItemDrop(Structure): @@ -18236,6 +19355,829 @@ 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 + + +#------------------------------------------------------ +# AA 15 仙界盛典全民来嗨玩家信息 #tagMCAllPeoplePartyInfo + +class tagMCAllPeoplePartyCount(Structure): + _pack_ = 1 + _fields_ = [ + ("ActID", c_int), #活动ID + ("CurTimes", 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.ActID = 0 + self.CurTimes = 0 + return + + def GetLength(self): + return sizeof(tagMCAllPeoplePartyCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 15 仙界盛典全民来嗨玩家信息 //tagMCAllPeoplePartyInfo: + ActID:%d, + CurTimes:%d + '''\ + %( + self.ActID, + self.CurTimes + ) + return DumpString + + +class tagMCAllPeoplePartyInfo(Structure): + Head = tagHead() + CurPoint = 0 #(DWORD CurPoint)//当前总点数 + AwardRecord = 0 #(DWORD AwardRecord)//领奖记录 按奖励索引二进制位存储是否已领取 + Count = 0 #(BYTE Count) + BuyCountList = list() #(vector<tagMCAllPeoplePartyCount> BuyCountList)//活动完成次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.CurPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AwardRecord,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temBuyCountList = tagMCAllPeoplePartyCount() + _pos = temBuyCountList.ReadData(_lpData, _pos) + self.BuyCountList.append(temBuyCountList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x15 + self.CurPoint = 0 + self.AwardRecord = 0 + self.Count = 0 + self.BuyCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 1 + for i in range(self.Count): + length += self.BuyCountList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.CurPoint) + data = CommFunc.WriteDWORD(data, self.AwardRecord) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + CurPoint:%d, + AwardRecord:%d, + Count:%d, + BuyCountList:%s + '''\ + %( + self.Head.OutputString(), + self.CurPoint, + self.AwardRecord, + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCAllPeoplePartyInfo=tagMCAllPeoplePartyInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAllPeoplePartyInfo.Head.Cmd,m_NAtagMCAllPeoplePartyInfo.Head.SubCmd))] = m_NAtagMCAllPeoplePartyInfo #------------------------------------------------------ @@ -18473,14 +20415,325 @@ #------------------------------------------------------ -# AA 02 天天首充活动开启状态 #tagMCDailyGoldState +# AA 09 消费返利活动信息 #tagMCCostRebateInfo -class tagMCDailyGoldState(Structure): +class tagMCCostRebateAwardItem(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(tagMCCostRebateAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 09 消费返利活动信息 //tagMCCostRebateInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCCostRebateAward(Structure): + AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31 + NeedGold = 0 #(DWORD NeedGold)// 所需仙玉数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItem = list() #(vector<tagMCCostRebateAwardItem> 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 = tagMCCostRebateAwardItem() + _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 tagMCCostRebateAwardDay(Structure): + AwardCount = 0 #(BYTE AwardCount)// 奖励档数 + AwardInfo = list() #(vector<tagMCCostRebateAward> 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 = tagMCCostRebateAward() + _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 tagMCCostRebateInfo(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<tagMCCostRebateAwardDay> AwardDayInfo)//每天对应返利信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x09 + 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 = tagMCCostRebateAwardDay() + _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 = 0x09 + 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_NAtagMCCostRebateInfo=tagMCCostRebateInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebateInfo.Head.Cmd,m_NAtagMCCostRebateInfo.Head.SubCmd))] = m_NAtagMCCostRebateInfo + + +#------------------------------------------------------ +# AA 10 消费返利玩家活动信息 #tagMCCostRebatePlayerInfo + +class tagMCCostRebatePlayerInfo(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("State", c_ubyte), # 0-未开启;1-已开启 + ("CostGoldTotal", c_int), #本次活动已累计消费仙玉数 + ("AwardRecord", c_int), #返利奖励领奖记录,按奖励索引二进制位存储是否已领取 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + self.SubCmd = 0x10 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xAA + self.SubCmd = 0x10 + self.CostGoldTotal = 0 + self.AwardRecord = 0 + return + + def GetLength(self): + return sizeof(tagMCCostRebatePlayerInfo) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 10 消费返利玩家活动信息 //tagMCCostRebatePlayerInfo: + Cmd:%s, + SubCmd:%s, + CostGoldTotal:%d, + AwardRecord:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CostGoldTotal, + self.AwardRecord + ) + return DumpString + + +m_NAtagMCCostRebatePlayerInfo=tagMCCostRebatePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCostRebatePlayerInfo.Cmd,m_NAtagMCCostRebatePlayerInfo.SubCmd))] = m_NAtagMCCostRebatePlayerInfo + + +#------------------------------------------------------ +# AA 02 首充信息 #tagMCFirstGoldInfo + +class tagMCFirstGoldInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FirstGoldRewardState", c_ubyte), #首充奖励是否已领奖 + ("FirstGoldTry", c_ubyte), #首充试用状态0-不可试用 1-可试用 2-已试用 ] def __init__(self): @@ -18497,31 +20750,965 @@ def Clear(self): self.Cmd = 0xAA self.SubCmd = 0x02 - self.State = 0 + self.FirstGoldRewardState = 0 + self.FirstGoldTry = 0 return def GetLength(self): - return sizeof(tagMCDailyGoldState) + return sizeof(tagMCFirstGoldInfo) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// AA 02 天天首充活动开启状态 //tagMCDailyGoldState: + DumpString = '''// AA 02 首充信息 //tagMCFirstGoldInfo: Cmd:%s, SubCmd:%s, - State:%d + FirstGoldRewardState:%d, + FirstGoldTry:%d '''\ %( self.Cmd, self.SubCmd, + self.FirstGoldRewardState, + self.FirstGoldTry + ) + return DumpString + + +m_NAtagMCFirstGoldInfo=tagMCFirstGoldInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldInfo.Cmd,m_NAtagMCFirstGoldInfo.SubCmd))] = m_NAtagMCFirstGoldInfo + + +#------------------------------------------------------ +# AA 08 首充提示剩余时间 #tagMCFirstGoldTime + +class tagMCFirstGoldTime(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("FirstGoldRemainTime", c_int), #首充提示剩余时间 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xAA + 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 = 0xAA + self.SubCmd = 0x08 + self.FirstGoldRemainTime = 0 + return + + def GetLength(self): + return sizeof(tagMCFirstGoldTime) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 08 首充提示剩余时间 //tagMCFirstGoldTime: + Cmd:%s, + SubCmd:%s, + FirstGoldRemainTime:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.FirstGoldRemainTime + ) + return DumpString + + +m_NAtagMCFirstGoldTime=tagMCFirstGoldTime() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldTime.Cmd,m_NAtagMCFirstGoldTime.SubCmd))] = m_NAtagMCFirstGoldTime + + +#------------------------------------------------------ +# AA 12 限时礼包活动信息 #tagMCFlashGiftbagInfo + +class tagMCFlashGiftbagItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ("IsMainItem", c_ubyte), #是否标的物 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + self.IsMainItem = 0 + return + + def GetLength(self): + return sizeof(tagMCFlashGiftbagItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 12 限时礼包活动信息 //tagMCFlashGiftbagInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d, + IsMainItem:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind, + self.IsMainItem + ) + return DumpString + + +class tagMCFlashGiftbag(Structure): + GiftID = 0 #(DWORD GiftID)//礼包ID + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo)//商品编号 + BuyCountLimit = 0 #(BYTE BuyCountLimit)//限购数 + RMB = 0 #(DWORD RMB)//所需RMB,元 + RMBOriginal = 0 #(DWORD RMBOriginal)//原价 + GiftItemCount = 0 #(BYTE GiftItemCount)// 礼包物品数 + ItemInfo = list() #(vector<tagMCFlashGiftbagItem> ItemInfo)// 物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) + self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RMB,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RMBOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftItemCount): + temItemInfo = tagMCFlashGiftbagItem() + _pos = temItemInfo.ReadData(_lpData, _pos) + self.ItemInfo.append(temItemInfo) + return _pos + + def Clear(self): + self.GiftID = 0 + self.OrderInfoLen = 0 + self.OrderInfo = "" + self.BuyCountLimit = 0 + self.RMB = 0 + self.RMBOriginal = 0 + self.GiftItemCount = 0 + self.ItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += len(self.OrderInfo) + length += 1 + length += 4 + length += 4 + length += 1 + for i in range(self.GiftItemCount): + length += self.ItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GiftID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) + data = CommFunc.WriteBYTE(data, self.BuyCountLimit) + data = CommFunc.WriteDWORD(data, self.RMB) + data = CommFunc.WriteDWORD(data, self.RMBOriginal) + data = CommFunc.WriteBYTE(data, self.GiftItemCount) + for i in range(self.GiftItemCount): + data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GiftID:%d, + OrderInfoLen:%d, + OrderInfo:%s, + BuyCountLimit:%d, + RMB:%d, + RMBOriginal:%d, + GiftItemCount:%d, + ItemInfo:%s + '''\ + %( + self.GiftID, + self.OrderInfoLen, + self.OrderInfo, + self.BuyCountLimit, + self.RMB, + self.RMBOriginal, + self.GiftItemCount, + "..." + ) + return DumpString + + +class tagMCFlashGiftbagType(Structure): + GiftbagCount = 0 #(BYTE GiftbagCount)// 礼包数 + GiftbagInfo = list() #(vector<tagMCFlashGiftbag> GiftbagInfo)// 礼包信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagInfo = tagMCFlashGiftbag() + _pos = temGiftbagInfo.ReadData(_lpData, _pos) + self.GiftbagInfo.append(temGiftbagInfo) + return _pos + + def Clear(self): + self.GiftbagCount = 0 + self.GiftbagInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + 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 = ''' + GiftbagCount:%d, + GiftbagInfo:%s + '''\ + %( + self.GiftbagCount, + "..." + ) + return DumpString + + +class tagMCFlashGiftbagTime(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 tagMCFlashGiftbagInfo(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<tagMCFlashGiftbagTime> ActivityTime)//活动时间 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + GiftbagTypeCount = 0 #(BYTE GiftbagTypeCount)// 礼包类型数 + GiftbagTypeInfo = list() #(vector<tagMCFlashGiftbagType> GiftbagTypeInfo)// 礼包类型信息, 当有多个且有多个活动时间段时则每个时间段对应一个礼包类型; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.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() + _pos = temActivityTime.ReadData(_lpData, _pos) + self.ActivityTime.append(temActivityTime) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GiftbagTypeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagTypeCount): + temGiftbagTypeInfo = tagMCFlashGiftbagType() + _pos = temGiftbagTypeInfo.ReadData(_lpData, _pos) + self.GiftbagTypeInfo.append(temGiftbagTypeInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x12 + self.StartDate = "" + self.EndtDate = "" + self.AdvanceMinutes = 0 + self.ActivityTimeCount = 0 + self.ActivityTime = list() + self.IsDayReset = 0 + self.LimitLV = 0 + self.GiftbagTypeCount = 0 + self.GiftbagTypeInfo = 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.GiftbagTypeCount): + length += self.GiftbagTypeInfo[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.GiftbagTypeCount) + for i in range(self.GiftbagTypeCount): + data = CommFunc.WriteString(data, self.GiftbagTypeInfo[i].GetLength(), self.GiftbagTypeInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + AdvanceMinutes:%d, + ActivityTimeCount:%d, + ActivityTime:%s, + IsDayReset:%d, + LimitLV:%d, + GiftbagTypeCount:%d, + GiftbagTypeInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.AdvanceMinutes, + self.ActivityTimeCount, + "...", + self.IsDayReset, + self.LimitLV, + self.GiftbagTypeCount, + "..." + ) + return DumpString + + +m_NAtagMCFlashGiftbagInfo=tagMCFlashGiftbagInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagInfo.Head.Cmd,m_NAtagMCFlashGiftbagInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagInfo + + +#------------------------------------------------------ +# AA 13 限时礼包玩家活动信息 #tagMCFlashGiftbagPlayerInfo + +class tagMCFlashGiftbagBuyCount(Structure): + _pack_ = 1 + _fields_ = [ + ("GiftbagID", c_int), #礼包ID + ("BuyCount", c_ushort), #本次活动已购买次数 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.GiftbagID = 0 + self.BuyCount = 0 + return + + def GetLength(self): + return sizeof(tagMCFlashGiftbagBuyCount) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 13 限时礼包玩家活动信息 //tagMCFlashGiftbagPlayerInfo: + GiftbagID:%d, + BuyCount:%d + '''\ + %( + self.GiftbagID, + self.BuyCount + ) + return DumpString + + +class tagMCFlashGiftbagPlayerInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count) + BuyCountList = list() #(vector<tagMCFlashGiftbagBuyCount> BuyCountList)//礼包购买次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x13 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temBuyCountList = tagMCFlashGiftbagBuyCount() + _pos = temBuyCountList.ReadData(_lpData, _pos) + self.BuyCountList.append(temBuyCountList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x13 + self.Count = 0 + self.BuyCountList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.BuyCountList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.BuyCountList[i].GetLength(), self.BuyCountList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + BuyCountList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_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 -m_NAtagMCDailyGoldState=tagMCDailyGoldState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDailyGoldState.Cmd,m_NAtagMCDailyGoldState.SubCmd))] = m_NAtagMCDailyGoldState +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 #------------------------------------------------------ @@ -18717,6 +21904,408 @@ #------------------------------------------------------ +# AA 11 限时特惠活动信息 #tagMCSpringSaleInfo + +class tagMCSpringSaleItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ("IsMainItem", c_ubyte), #是否标的物 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + self.IsMainItem = 0 + return + + def GetLength(self): + return sizeof(tagMCSpringSaleItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 11 限时特惠活动信息 //tagMCSpringSaleInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d, + IsMainItem:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind, + self.IsMainItem + ) + return DumpString + + +class tagMCSpringSaleGiftbag(Structure): + GiftID = 0 #(DWORD GiftID)//商城表的物品ID + BuyCountLimit = 0 #(BYTE BuyCountLimit)//限购数 + MoneyType = 0 #(BYTE MoneyType)//消耗货币类型 + MoneyNumber = 0 #(DWORD MoneyNumber)//消耗货币数量 + MoneyOriginal = 0 #(DWORD MoneyOriginal)//原价 + GiftItemCount = 0 #(BYTE GiftItemCount)// 礼包物品数 + ItemInfo = list() #(vector<tagMCSpringSaleItem> ItemInfo)// 物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.BuyCountLimit,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoneyNumber,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MoneyOriginal,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.GiftItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftItemCount): + temItemInfo = tagMCSpringSaleItem() + _pos = temItemInfo.ReadData(_lpData, _pos) + self.ItemInfo.append(temItemInfo) + return _pos + + def Clear(self): + self.GiftID = 0 + self.BuyCountLimit = 0 + self.MoneyType = 0 + self.MoneyNumber = 0 + self.MoneyOriginal = 0 + self.GiftItemCount = 0 + self.ItemInfo = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 1 + length += 4 + length += 4 + length += 1 + for i in range(self.GiftItemCount): + length += self.ItemInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.GiftID) + data = CommFunc.WriteBYTE(data, self.BuyCountLimit) + data = CommFunc.WriteBYTE(data, self.MoneyType) + data = CommFunc.WriteDWORD(data, self.MoneyNumber) + data = CommFunc.WriteDWORD(data, self.MoneyOriginal) + data = CommFunc.WriteBYTE(data, self.GiftItemCount) + for i in range(self.GiftItemCount): + data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + GiftID:%d, + BuyCountLimit:%d, + MoneyType:%d, + MoneyNumber:%d, + MoneyOriginal:%d, + GiftItemCount:%d, + ItemInfo:%s + '''\ + %( + self.GiftID, + self.BuyCountLimit, + self.MoneyType, + self.MoneyNumber, + self.MoneyOriginal, + self.GiftItemCount, + "..." + ) + return DumpString + + +class tagMCSpringSaleShop(Structure): + GiftbagCount = 0 #(BYTE GiftbagCount)// 商店礼包数 + GiftbagInfo = list() #(vector<tagMCSpringSaleGiftbag> GiftbagInfo)// 礼包信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagInfo = tagMCSpringSaleGiftbag() + _pos = temGiftbagInfo.ReadData(_lpData, _pos) + self.GiftbagInfo.append(temGiftbagInfo) + return _pos + + def Clear(self): + self.GiftbagCount = 0 + self.GiftbagInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + 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 = ''' + GiftbagCount:%d, + GiftbagInfo:%s + '''\ + %( + self.GiftbagCount, + "..." + ) + return DumpString + + +class tagMCSpringSaleTime(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 tagMCSpringSaleInfo(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<tagMCSpringSaleTime> ActivityTime)//活动时间 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ShopCount = 0 #(BYTE ShopCount)// 商店数 + ShopInfo = list() #(vector<tagMCSpringSaleShop> ShopInfo)// 商店信息, 当有多个商店且有多个活动时间段时则每个时间段对应一个商店; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x11 + 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 = tagMCSpringSaleTime() + _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 = tagMCSpringSaleShop() + _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 = 0x11 + 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_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 + + +#------------------------------------------------------ #AA 01 累计登陆天数信息 #tagMCTotalLoginDayCntInfo class tagMCTotalLoginDayCntInfo(Structure): @@ -18773,20 +22362,21 @@ #------------------------------------------------------ -# AB 20 嘉年华抽奖记录 #tagMCCarnivalRecord +# AA 1C 累计充值玩家活动信息 #tagMCTotalRechargePlayerInfo -class tagMCCarnivalRecord(Structure): +class tagMCTotalRechargePlayerInfo(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("JoinRecord", c_int), + ("GoldTotal", c_int), #本次活动已累计充值仙玉数 + ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取 ] def __init__(self): self.Clear() - self.Cmd = 0xAB - self.SubCmd = 0x20 + self.Cmd = 0xAA + self.SubCmd = 0x1C return def ReadData(self, stringData, _pos=0, _len=0): @@ -18795,55 +22385,53 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xAB - self.SubCmd = 0x20 - self.JoinRecord = 0 + self.Cmd = 0xAA + self.SubCmd = 0x1C + self.GoldTotal = 0 + self.AwardRecord = 0 return def GetLength(self): - return sizeof(tagMCCarnivalRecord) + return sizeof(tagMCTotalRechargePlayerInfo) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// AB 20 嘉年华抽奖记录 //tagMCCarnivalRecord: + DumpString = '''// AA 1C 累计充值玩家活动信息 //tagMCTotalRechargePlayerInfo: Cmd:%s, SubCmd:%s, - JoinRecord:%d + GoldTotal:%d, + AwardRecord:%d '''\ %( self.Cmd, self.SubCmd, - self.JoinRecord + self.GoldTotal, + self.AwardRecord ) return DumpString -m_NAtagMCCarnivalRecord=tagMCCarnivalRecord() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCarnivalRecord.Cmd,m_NAtagMCCarnivalRecord.SubCmd))] = m_NAtagMCCarnivalRecord +m_NAtagMCTotalRechargePlayerInfo=tagMCTotalRechargePlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTotalRechargePlayerInfo.Cmd,m_NAtagMCTotalRechargePlayerInfo.SubCmd))] = m_NAtagMCTotalRechargePlayerInfo #------------------------------------------------------ -# AB 15 骰子投掷结果 #tagMCDiceTakeResult +# AA 14 仙界盛典充值大礼 #tagMCXJSDRecharge -class tagMCDiceTakeResult(Structure): +class tagMCXJSDRecharge(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("PosIndex", c_int), # 骰子的位置 - ("CfgIndex", c_ushort), # 物品配置索引 - ("TakeNum", c_ushort), # 已投掷次数 - ("TimeNum", c_ushort), # 按时间增加的次数 - ("BuyNum", c_ushort), # 已购买的次数 - ("AwardNum", c_ushort), # 奖励的次数 + ("State", c_ubyte), #0-不可领 1-可领 2-已领取 ] def __init__(self): self.Clear() - self.Cmd = 0xAB - self.SubCmd = 0x15 + self.Cmd = 0xAA + self.SubCmd = 0x14 return def ReadData(self, stringData, _pos=0, _len=0): @@ -18852,48 +22440,145 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xAB - self.SubCmd = 0x15 - self.PosIndex = 0 - self.CfgIndex = 0 - self.TakeNum = 0 - self.TimeNum = 0 - self.BuyNum = 0 - self.AwardNum = 0 + self.Cmd = 0xAA + self.SubCmd = 0x14 + self.State = 0 return def GetLength(self): - return sizeof(tagMCDiceTakeResult) + return sizeof(tagMCXJSDRecharge) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// AB 15 骰子投掷结果 //tagMCDiceTakeResult: + DumpString = '''// AA 14 仙界盛典充值大礼 //tagMCXJSDRecharge: Cmd:%s, SubCmd:%s, - PosIndex:%d, - CfgIndex:%d, - TakeNum:%d, - TimeNum:%d, - BuyNum:%d, - AwardNum:%d + State:%d '''\ %( self.Cmd, self.SubCmd, - self.PosIndex, - self.CfgIndex, - self.TakeNum, - self.TimeNum, - self.BuyNum, - self.AwardNum + self.State ) return DumpString -m_NAtagMCDiceTakeResult=tagMCDiceTakeResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceTakeResult.Cmd,m_NAtagMCDiceTakeResult.SubCmd))] = m_NAtagMCDiceTakeResult +m_NAtagMCXJSDRecharge=tagMCXJSDRecharge() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXJSDRecharge.Cmd,m_NAtagMCXJSDRecharge.SubCmd))] = m_NAtagMCXJSDRecharge + + +#------------------------------------------------------ +# AB 03 Boss复活玩家活动信息 #tagMCBossRebornPlayerInfo + +class tagMCBossRebornData(Structure): + _pack_ = 1 + _fields_ = [ + ("ActID", c_ubyte), #活动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.ActID = 0 + self.CurTimes = 0 + self.GotTimes = 0 + return + + def GetLength(self): + return sizeof(tagMCBossRebornData) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AB 03 Boss复活玩家活动信息 //tagMCBossRebornPlayerInfo: + ActID:%d, + CurTimes:%d, + GotTimes:%d + '''\ + %( + self.ActID, + self.CurTimes, + self.GotTimes + ) + return DumpString + + +class tagMCBossRebornPlayerInfo(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//活动个数 + DataList = list() #(vector<tagMCBossRebornData> DataList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAB + 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.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + temDataList = tagMCBossRebornData() + _pos = temDataList.ReadData(_lpData, _pos) + self.DataList.append(temDataList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAB + self.Head.SubCmd = 0x03 + self.Count = 0 + self.DataList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Count): + length += self.DataList[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.DataList[i].GetLength(), self.DataList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + DataList:%s + '''\ + %( + self.Head.OutputString(), + self.Count, + "..." + ) + return DumpString + + +m_NAtagMCBossRebornPlayerInfo=tagMCBossRebornPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornPlayerInfo.Head.Cmd,m_NAtagMCBossRebornPlayerInfo.Head.SubCmd))] = m_NAtagMCBossRebornPlayerInfo #------------------------------------------------------ @@ -19085,294 +22770,6 @@ #------------------------------------------------------ -# AB 11 全民进阶总动员活动奖励情况 #tagMCFuncUpgrade - -class tagMCFuncUpgrade(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("FuncAwardState1", c_int), - ("FuncAwardState2", c_int), - ("FuncAwardState3", c_int), - ("FuncAwardState4", c_int), - ("FuncAwardState5", c_int), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAB - self.SubCmd = 0x11 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xAB - self.SubCmd = 0x11 - self.FuncAwardState1 = 0 - self.FuncAwardState2 = 0 - self.FuncAwardState3 = 0 - self.FuncAwardState4 = 0 - self.FuncAwardState5 = 0 - return - - def GetLength(self): - return sizeof(tagMCFuncUpgrade) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AB 11 全民进阶总动员活动奖励情况 //tagMCFuncUpgrade: - Cmd:%s, - SubCmd:%s, - FuncAwardState1:%d, - FuncAwardState2:%d, - FuncAwardState3:%d, - FuncAwardState4:%d, - FuncAwardState5:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.FuncAwardState1, - self.FuncAwardState2, - self.FuncAwardState3, - self.FuncAwardState4, - self.FuncAwardState5 - ) - return DumpString - - -m_NAtagMCFuncUpgrade=tagMCFuncUpgrade() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncUpgrade.Cmd,m_NAtagMCFuncUpgrade.SubCmd))] = m_NAtagMCFuncUpgrade - - -#------------------------------------------------------ -# AB 10 首充团购每日充值钻石数 #tagMCGroupFirstRechargeGold - -class tagMCGroupFirstRechargeGold(Structure): - Head = tagHead() - Count = 0 #(WORD Count) - GoldList = list() #(vector<DWORD> GoldList)//size = Count - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x10 - 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): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.GoldList.append(value) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x10 - self.Count = 0 - self.GoldList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 2 - length += 4 * self.Count - - 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.WriteDWORD(data, self.GoldList[i]) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Count:%d, - GoldList:%s - '''\ - %( - self.Head.OutputString(), - self.Count, - "..." - ) - return DumpString - - -m_NAtagMCGroupFirstRechargeGold=tagMCGroupFirstRechargeGold() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGroupFirstRechargeGold.Head.Cmd,m_NAtagMCGroupFirstRechargeGold.Head.SubCmd))] = m_NAtagMCGroupFirstRechargeGold - - -#------------------------------------------------------ -# AB 21 领主之路活动信息 #tagMCLingZhuZhiLuInfo - -class tagMCLingZhuZhiLuScore(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("LingZhuZLScoreNum", c_ubyte), # 积分类型编号 - ("LingZhuZLScore", c_int), # 已获得积分 - ("LingZhuZLData", c_int), # 积分类型数据 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAB - 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 = 0xAB - self.SubCmd = 0x21 - self.LingZhuZLScoreNum = 0 - self.LingZhuZLScore = 0 - self.LingZhuZLData = 0 - return - - def GetLength(self): - return sizeof(tagMCLingZhuZhiLuScore) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AB 21 领主之路活动信息 //tagMCLingZhuZhiLuInfo: - Cmd:%s, - SubCmd:%s, - LingZhuZLScoreNum:%d, - LingZhuZLScore:%d, - LingZhuZLData:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.LingZhuZLScoreNum, - self.LingZhuZLScore, - self.LingZhuZLData - ) - return DumpString - - -class tagMCLingZhuZhiLuInfo(Structure): - Head = tagHead() - LingZhuZLActionNum = 0 #(DWORD LingZhuZLActionNum)// 领主之路活动当前活动编号 - LingZhuZLPrizeRecordCnt = 0 #(BYTE LingZhuZLPrizeRecordCnt)// 进度奖励领取记录个数 - LingZhuZLPrizeRecord = list() #(vector<DWORD> LingZhuZLPrizeRecord)// 进度奖励领取记录, 每级奖励一个值, 按奖励索引位二进制存储是否已领 - LingZhuZLTotalScore = 0 #(DWORD LingZhuZLTotalScore)// 当前总积分 - LingZhuZLScoreCount = 0 #(BYTE LingZhuZLScoreCount)// 同步的积分个数, 有变更的才会同步 - LingZhuZLScoreList = list() #(vector<tagMCLingZhuZhiLuScore> LingZhuZLScoreList)// 同步积分信息列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x21 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.LingZhuZLActionNum,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LingZhuZLPrizeRecordCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.LingZhuZLPrizeRecordCnt): - value,_pos=CommFunc.ReadDWORD(_lpData,_pos) - self.LingZhuZLPrizeRecord.append(value) - self.LingZhuZLTotalScore,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.LingZhuZLScoreCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.LingZhuZLScoreCount): - temLingZhuZLScoreList = tagMCLingZhuZhiLuScore() - _pos = temLingZhuZLScoreList.ReadData(_lpData, _pos) - self.LingZhuZLScoreList.append(temLingZhuZLScoreList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x21 - self.LingZhuZLActionNum = 0 - self.LingZhuZLPrizeRecordCnt = 0 - self.LingZhuZLPrizeRecord = list() - self.LingZhuZLTotalScore = 0 - self.LingZhuZLScoreCount = 0 - self.LingZhuZLScoreList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 4 - length += 1 - length += 4 * self.LingZhuZLPrizeRecordCnt - length += 4 - length += 1 - for i in range(self.LingZhuZLScoreCount): - length += self.LingZhuZLScoreList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteDWORD(data, self.LingZhuZLActionNum) - data = CommFunc.WriteBYTE(data, self.LingZhuZLPrizeRecordCnt) - for i in range(self.LingZhuZLPrizeRecordCnt): - data = CommFunc.WriteDWORD(data, self.LingZhuZLPrizeRecord[i]) - data = CommFunc.WriteDWORD(data, self.LingZhuZLTotalScore) - data = CommFunc.WriteBYTE(data, self.LingZhuZLScoreCount) - for i in range(self.LingZhuZLScoreCount): - data = CommFunc.WriteString(data, self.LingZhuZLScoreList[i].GetLength(), self.LingZhuZLScoreList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - LingZhuZLActionNum:%d, - LingZhuZLPrizeRecordCnt:%d, - LingZhuZLPrizeRecord:%s, - LingZhuZLTotalScore:%d, - LingZhuZLScoreCount:%d, - LingZhuZLScoreList:%s - '''\ - %( - self.Head.OutputString(), - self.LingZhuZLActionNum, - self.LingZhuZLPrizeRecordCnt, - "...", - self.LingZhuZLTotalScore, - self.LingZhuZLScoreCount, - "..." - ) - return DumpString - - -m_NAtagMCLingZhuZhiLuInfo=tagMCLingZhuZhiLuInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingZhuZhiLuInfo.Head.Cmd,m_NAtagMCLingZhuZhiLuInfo.Head.SubCmd))] = m_NAtagMCLingZhuZhiLuInfo - - -#------------------------------------------------------ # AB 02 领地占领每日奖励领奖情况 #tagMCManorDailyAward class tagMCManorDailyAward(Structure): @@ -19486,6 +22883,217 @@ m_NAtagMCManorWarResult=tagMCManorWarResult() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCManorWarResult.Cmd,m_NAtagMCManorWarResult.SubCmd))] = m_NAtagMCManorWarResult + + +#------------------------------------------------------ +# AB 04 Boss复活活动信息 #tagMCBossRebornInfo + +class tagMCBossRebornAwardItem(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(tagMCBossRebornAwardItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo: + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCBossRebornTaskInfo(Structure): + TaskID = 0 #(BYTE TaskID)// id + TotalTimes = 0 #(BYTE TotalTimes)// 可完成总次数,0表示不限次数 + SingleTimes = 0 #(BYTE SingleTimes)// 单次领奖需要次数 + AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数 + AwardItem = list() #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AwardItemCount): + temAwardItem = tagMCBossRebornAwardItem() + _pos = temAwardItem.ReadData(_lpData, _pos) + self.AwardItem.append(temAwardItem) + return _pos + + def Clear(self): + self.TaskID = 0 + self.TotalTimes = 0 + self.SingleTimes = 0 + self.AwardItemCount = 0 + self.AwardItem = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + length += 1 + for i in range(self.AwardItemCount): + length += self.AwardItem[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.TaskID) + data = CommFunc.WriteBYTE(data, self.TotalTimes) + data = CommFunc.WriteBYTE(data, self.SingleTimes) + 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 = ''' + TaskID:%d, + TotalTimes:%d, + SingleTimes:%d, + AwardItemCount:%d, + AwardItem:%s + '''\ + %( + self.TaskID, + self.TotalTimes, + self.SingleTimes, + self.AwardItemCount, + "..." + ) + return DumpString + + +class tagMCBossRebornInfo(Structure): + 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) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAB + self.Head.SubCmd = 0x04 + 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.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): + temTaskInfo = tagMCBossRebornTaskInfo() + _pos = temTaskInfo.ReadData(_lpData, _pos) + self.TaskInfo.append(temTaskInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAB + self.Head.SubCmd = 0x04 + self.StartDate = "" + self.EndtDate = "" + self.ResetType = 0 + self.LimitLV = 0 + self.TaskCnt = 0 + self.TaskInfo = 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.TaskCnt): + length += self.TaskInfo[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.ResetType) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.TaskCnt) + for i in range(self.TaskCnt): + data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + ResetType:%d, + LimitLV:%d, + TaskCnt:%d, + TaskInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.ResetType, + self.LimitLV, + self.TaskCnt, + "..." + ) + return DumpString + + +m_NAtagMCBossRebornInfo=tagMCBossRebornInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo #------------------------------------------------------ @@ -19657,157 +23265,63 @@ #------------------------------------------------------ -# AB 18 二维码红包 #tagMCQRCodeRedpack +# AB 24 开服红包信息 #tagMCOpenServerRedPacketInfo -class tagMCQRCodeRedpackUrl(Structure): - Head = tagHead() - PackMoneyMark = 0 #(BYTE PackMoneyMark)// 红包金额标识, 1是1元, 2是1.88元, 依次递增 - PackOpenTime = 0 #(DWORD PackOpenTime)// 红包开启时间 - RedpackUrlLen = 0 #(WORD RedpackUrlLen) - RedpackUrl = "" #(String RedpackUrl) - data = None +class tagMCOpenServerRedPacketInfo(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("MoneyNum", c_int), # 累积抢到多少钱 + ("GrabCnt", c_ushort), # 已抢红包次数 + ("StartTime", c_int), # 开始倒计时时间 + ] def __init__(self): self.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x18 + self.Cmd = 0xAB + self.SubCmd = 0x24 return - def ReadData(self, _lpData, _pos=0, _Len=0): + def ReadData(self, stringData, _pos=0, _len=0): self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.PackMoneyMark,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.PackOpenTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RedpackUrlLen,_pos = CommFunc.ReadWORD(_lpData, _pos) - self.RedpackUrl,_pos = CommFunc.ReadString(_lpData, _pos,self.RedpackUrlLen) - return _pos + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x18 - self.PackMoneyMark = 0 - self.PackOpenTime = 0 - self.RedpackUrlLen = 0 - self.RedpackUrl = "" + self.Cmd = 0xAB + self.SubCmd = 0x24 + self.MoneyNum = 0 + self.GrabCnt = 0 + self.StartTime = 0 return def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 4 - length += 2 - length += len(self.RedpackUrl) - - return length + return sizeof(tagMCOpenServerRedPacketInfo) def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.PackMoneyMark) - data = CommFunc.WriteDWORD(data, self.PackOpenTime) - data = CommFunc.WriteWORD(data, self.RedpackUrlLen) - data = CommFunc.WriteString(data, self.RedpackUrlLen, self.RedpackUrl) - return data + return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = ''' - Head:%s, - PackMoneyMark:%d, - PackOpenTime:%d, - RedpackUrlLen:%d, - RedpackUrl:%s + DumpString = '''// AB 24 开服红包信息 //tagMCOpenServerRedPacketInfo: + Cmd:%s, + SubCmd:%s, + MoneyNum:%d, + GrabCnt:%d, + StartTime:%d '''\ %( - self.Head.OutputString(), - self.PackMoneyMark, - self.PackOpenTime, - self.RedpackUrlLen, - self.RedpackUrl + self.Cmd, + self.SubCmd, + self.MoneyNum, + self.GrabCnt, + self.StartTime ) return DumpString -class tagMCQRCodeRedpack(Structure): - Head = tagHead() - CanOpenCnt = 0 #(BYTE CanOpenCnt)//总共可打开红包次数 - TotalOpenCnt = 0 #(BYTE TotalOpenCnt)//总共已打开红包次数 - TodayOpenCnt = 0 #(BYTE TodayOpenCnt)//今日已打开红包次数 - RedpackUrlList = list() #(vector<tagMCQRCodeRedpackUrl> RedpackUrlList)// 红包二维码领取地址 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x18 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.CanOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TotalOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.TodayOpenCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.TotalOpenCnt): - temRedpackUrlList = tagMCQRCodeRedpackUrl() - _pos = temRedpackUrlList.ReadData(_lpData, _pos) - self.RedpackUrlList.append(temRedpackUrlList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x18 - self.CanOpenCnt = 0 - self.TotalOpenCnt = 0 - self.TodayOpenCnt = 0 - self.RedpackUrlList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 1 - length += 1 - for i in range(self.TotalOpenCnt): - length += self.RedpackUrlList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.CanOpenCnt) - data = CommFunc.WriteBYTE(data, self.TotalOpenCnt) - data = CommFunc.WriteBYTE(data, self.TodayOpenCnt) - for i in range(self.TotalOpenCnt): - data = CommFunc.WriteString(data, self.RedpackUrlList[i].GetLength(), self.RedpackUrlList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - CanOpenCnt:%d, - TotalOpenCnt:%d, - TodayOpenCnt:%d, - RedpackUrlList:%s - '''\ - %( - self.Head.OutputString(), - self.CanOpenCnt, - self.TotalOpenCnt, - self.TodayOpenCnt, - "..." - ) - return DumpString - - -m_NAtagMCQRCodeRedpack=tagMCQRCodeRedpack() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCQRCodeRedpack.Head.Cmd,m_NAtagMCQRCodeRedpack.Head.SubCmd))] = m_NAtagMCQRCodeRedpack +m_NAtagMCOpenServerRedPacketInfo=tagMCOpenServerRedPacketInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOpenServerRedPacketInfo.Cmd,m_NAtagMCOpenServerRedPacketInfo.SubCmd))] = m_NAtagMCOpenServerRedPacketInfo #------------------------------------------------------ @@ -19875,191 +23389,6 @@ #------------------------------------------------------ -# AB 16 天神信息 #tagMCSkyGodInfo - -class tagMCSkyGodInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("SkyGodLV", c_ushort), # 天神等级 - ("SkyGodExp", c_int), # 天神经验 - ("SummonNum", c_ushort), # 已召唤次数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAB - 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 = 0xAB - self.SubCmd = 0x16 - self.SkyGodLV = 0 - self.SkyGodExp = 0 - self.SummonNum = 0 - return - - def GetLength(self): - return sizeof(tagMCSkyGodInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AB 16 天神信息 //tagMCSkyGodInfo: - Cmd:%s, - SubCmd:%s, - SkyGodLV:%d, - SkyGodExp:%d, - SummonNum:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.SkyGodLV, - self.SkyGodExp, - self.SummonNum - ) - return DumpString - - -m_NAtagMCSkyGodInfo=tagMCSkyGodInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyGodInfo.Cmd,m_NAtagMCSkyGodInfo.SubCmd))] = m_NAtagMCSkyGodInfo - - -#------------------------------------------------------ -# AB 14 老虎机抽奖结果 #tagMCSlotsTakeResult - -class tagMCSlotsItemInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("RecordType", c_ubyte), # 记录类型 - ("Index", c_ushort), # 物品在老虎机上索引 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAB - self.SubCmd = 0x14 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xAB - self.SubCmd = 0x14 - self.RecordType = 0 - self.Index = 0 - return - - def GetLength(self): - return sizeof(tagMCSlotsItemInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AB 14 老虎机抽奖结果 //tagMCSlotsTakeResult: - Cmd:%s, - SubCmd:%s, - RecordType:%d, - Index:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.RecordType, - self.Index - ) - return DumpString - - -class tagMCSlotsTakeResult(Structure): - Head = tagHead() - Type = 0 #(BYTE Type)// 老虎机类型 - Num = 0 #(WORD Num)// 物品个数 - ItemList = list() #(vector<tagMCSlotsItemInfo> ItemList)// 物品列表 - data = None - - def __init__(self): - self.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x14 - return - - def ReadData(self, _lpData, _pos=0, _Len=0): - self.Clear() - _pos = self.Head.ReadData(_lpData, _pos) - self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.Num,_pos = CommFunc.ReadWORD(_lpData, _pos) - for i in range(self.Num): - temItemList = tagMCSlotsItemInfo() - _pos = temItemList.ReadData(_lpData, _pos) - self.ItemList.append(temItemList) - return _pos - - def Clear(self): - self.Head = tagHead() - self.Head.Clear() - self.Head.Cmd = 0xAB - self.Head.SubCmd = 0x14 - self.Type = 0 - self.Num = 0 - self.ItemList = list() - return - - def GetLength(self): - length = 0 - length += self.Head.GetLength() - length += 1 - length += 2 - for i in range(self.Num): - length += self.ItemList[i].GetLength() - - return length - - def GetBuffer(self): - data = '' - data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.Type) - data = CommFunc.WriteWORD(data, self.Num) - for i in range(self.Num): - data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer()) - return data - - def OutputString(self): - DumpString = ''' - Head:%s, - Type:%d, - Num:%d, - ItemList:%s - '''\ - %( - self.Head.OutputString(), - self.Type, - self.Num, - "..." - ) - return DumpString - - -m_NAtagMCSlotsTakeResult=tagMCSlotsTakeResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSlotsTakeResult.Head.Cmd,m_NAtagMCSlotsTakeResult.Head.SubCmd))] = m_NAtagMCSlotsTakeResult - - -#------------------------------------------------------ # AB 22 摇骰子结果 #tagMCDiceExResult class tagMCDiceExResult(Structure): @@ -20117,58 +23446,6 @@ m_NAtagMCDiceExResult=tagMCDiceExResult() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDiceExResult.Cmd,m_NAtagMCDiceExResult.SubCmd))] = m_NAtagMCDiceExResult - - -#------------------------------------------------------ -# AB 09 许愿值 #tagMCWishTreeValue - -class tagMCWishTreeValue(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("WishValue", c_int), #当前许愿值 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xAB - 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 = 0xAB - self.SubCmd = 0x09 - self.WishValue = 0 - return - - def GetLength(self): - return sizeof(tagMCWishTreeValue) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AB 09 许愿值 //tagMCWishTreeValue: - Cmd:%s, - SubCmd:%s, - WishValue:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.WishValue - ) - return DumpString - - -m_NAtagMCWishTreeValue=tagMCWishTreeValue() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCWishTreeValue.Cmd,m_NAtagMCWishTreeValue.SubCmd))] = m_NAtagMCWishTreeValue #------------------------------------------------------ @@ -20588,170 +23865,6 @@ #------------------------------------------------------ -#B0 06 转转乐盘面信息 #tagGamblingDiskInfo - -class tagGamblingDiskInfo(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MerchantLv", c_ubyte), #商人等级 - ("DiskIndex", c_ubyte), # 盘面索引 - ("DiskItemSequence", c_ushort), #盘面物品顺序 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB0 - self.SubCmd = 0x06 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xB0 - self.SubCmd = 0x06 - self.MerchantLv = 0 - self.DiskIndex = 0 - self.DiskItemSequence = 0 - return - - def GetLength(self): - return sizeof(tagGamblingDiskInfo) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B0 06 转转乐盘面信息 //tagGamblingDiskInfo: - Cmd:%s, - SubCmd:%s, - MerchantLv:%d, - DiskIndex:%d, - DiskItemSequence:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.MerchantLv, - self.DiskIndex, - self.DiskItemSequence - ) - return DumpString - - -m_NAtagGamblingDiskInfo=tagGamblingDiskInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingDiskInfo.Cmd,m_NAtagGamblingDiskInfo.SubCmd))] = m_NAtagGamblingDiskInfo - - -#------------------------------------------------------ -#B0 07 转转乐结果 #tagGamblingResult - -class tagGamblingResult(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("ItemIndex", c_ushort), #物品索引 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB0 - self.SubCmd = 0x07 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xB0 - self.SubCmd = 0x07 - self.ItemIndex = 0 - return - - def GetLength(self): - return sizeof(tagGamblingResult) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B0 07 转转乐结果 //tagGamblingResult: - Cmd:%s, - SubCmd:%s, - ItemIndex:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.ItemIndex - ) - return DumpString - - -m_NAtagGamblingResult=tagGamblingResult() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingResult.Cmd,m_NAtagGamblingResult.SubCmd))] = m_NAtagGamblingResult - - -#------------------------------------------------------ -#B0 08 转转乐次数 #tagGamblingCount - -class tagGamblingCount(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Count", c_ushort), #次数 - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xB0 - 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 = 0xB0 - self.SubCmd = 0x08 - self.Count = 0 - return - - def GetLength(self): - return sizeof(tagGamblingCount) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//B0 08 转转乐次数 //tagGamblingCount: - Cmd:%s, - SubCmd:%s, - Count:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.Count - ) - return DumpString - - -m_NAtagGamblingCount=tagGamblingCount() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGamblingCount.Cmd,m_NAtagGamblingCount.SubCmd))] = m_NAtagGamblingCount - - -#------------------------------------------------------ #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState class tagFamilyArrestAwardReceiveState(Structure): @@ -20978,6 +24091,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 #------------------------------------------------------ @@ -21250,6 +24423,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 #------------------------------------------------------ @@ -21553,6 +24846,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("IsDouble", c_ubyte), #是否双倍 + ("OldDouble", c_ubyte), #是否曾经允许双倍 ] def __init__(self): @@ -21570,6 +24864,7 @@ self.Cmd = 0xB2 self.SubCmd = 0x01 self.IsDouble = 0 + self.OldDouble = 0 return def GetLength(self): @@ -21582,18 +24877,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 #------------------------------------------------------ @@ -21724,6 +25565,77 @@ m_NAtagMCPubFBSweepData=tagMCPubFBSweepData() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPubFBSweepData.Head.Cmd,m_NAtagMCPubFBSweepData.Head.SubCmd))] = m_NAtagMCPubFBSweepData + + +#------------------------------------------------------ +#B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting + +class tagMCPushNotificationsSetting(Structure): + Head = tagHead() + OnoffBit = 0 #(DWORD OnoffBit)// 按位约定开关 + TimeLen = 0 #(BYTE TimeLen) + TimeStr = "" #(String TimeStr)// 时间字符串 01:02-05:00 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x02 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.OnoffBit,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x02 + self.OnoffBit = 0 + self.TimeLen = 0 + self.TimeStr = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 1 + length += len(self.TimeStr) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.OnoffBit) + data = CommFunc.WriteBYTE(data, self.TimeLen) + data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + OnoffBit:%d, + TimeLen:%d, + TimeStr:%s + '''\ + %( + self.Head.OutputString(), + self.OnoffBit, + self.TimeLen, + self.TimeStr + ) + return DumpString + + +m_NAtagMCPushNotificationsSetting=tagMCPushNotificationsSetting() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPushNotificationsSetting.Head.Cmd,m_NAtagMCPushNotificationsSetting.Head.SubCmd))] = m_NAtagMCPushNotificationsSetting #------------------------------------------------------ @@ -22042,6 +25954,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("SkillID", c_int), #技能ID + ("Reason", c_ubyte), #原因 默认0 ] def __init__(self): @@ -22059,6 +25972,7 @@ self.Cmd = 0xB4 self.SubCmd = 0x03 self.SkillID = 0 + self.Reason = 0 return def GetLength(self): @@ -22071,12 +25985,14 @@ DumpString = '''//B4 03 技能攻击失败 //tagMCAttackFail: Cmd:%s, SubCmd:%s, - SkillID:%d + SkillID:%d, + Reason:%d '''\ %( self.Cmd, self.SubCmd, - self.SkillID + self.SkillID, + self.Reason ) return DumpString @@ -22684,23 +26600,15 @@ #------------------------------------------------------ #B4 09 通知脱机挂结果 #tagMCTJGInfo -class tagMCTJGInfo(Structure): +class tagMCTJGItems(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Exp1", c_int), # 经验 - ("Exp2", c_int), # 超亿经验 - ("Times", c_int), # 使用时间秒 - ("PurpleEquip", c_ushort), # 产出紫装数量 - ("OrangeEquip", c_ushort), # 产出橙装数量 - ("EatPurpleEquip", c_ushort), # 吞噬紫装数量 + ("ItemID", c_int), + ("Count", c_ushort), ] def __init__(self): self.Clear() - self.Cmd = 0xB4 - self.SubCmd = 0x09 return def ReadData(self, stringData, _pos=0, _len=0): @@ -22709,67 +26617,351 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xB4 - self.SubCmd = 0x09 - self.Exp1 = 0 - self.Exp2 = 0 - self.Times = 0 - self.PurpleEquip = 0 - self.OrangeEquip = 0 - self.EatPurpleEquip = 0 + self.ItemID = 0 + self.Count = 0 return def GetLength(self): - return sizeof(tagMCTJGInfo) + return sizeof(tagMCTJGItems) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''//B4 09 通知脱机挂结果 //tagMCTJGInfo: - Cmd:%s, - SubCmd:%s, + ItemID:%d, + Count:%d + '''\ + %( + self.ItemID, + self.Count + ) + return DumpString + + +class tagMCTJGInfo(Structure): + Head = tagHead() + Exp1 = 0 #(DWORD Exp1)// 经验 + Exp2 = 0 #(DWORD Exp2)// 超亿经验 + Times = 0 #(DWORD Times)// 使用时间秒 + PurpleEquip = 0 #(WORD PurpleEquip)// 产出紫装数量 + OrangeEquip = 0 #(WORD OrangeEquip)// 产出橙装数量 + EatPurpleEquip = 0 #(WORD EatPurpleEquip)// 吞噬紫装数量 + BeforeLV = 0 #(WORD BeforeLV)//脱机前记录的等级 + GiveCnt = 0 #(WORD GiveCnt)//获得炼丹材料数量 + Cnt = 0 #(BYTE Cnt)//物品类别数量 + Items = list() #(vector<tagMCTJGItems> Items) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x09 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Exp1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Exp2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Times,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.OrangeEquip,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.EatPurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.BeforeLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.GiveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temItems = tagMCTJGItems() + _pos = temItems.ReadData(_lpData, _pos) + self.Items.append(temItems) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x09 + self.Exp1 = 0 + self.Exp2 = 0 + self.Times = 0 + self.PurpleEquip = 0 + self.OrangeEquip = 0 + self.EatPurpleEquip = 0 + self.BeforeLV = 0 + self.GiveCnt = 0 + self.Cnt = 0 + self.Items = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 4 + length += 4 + length += 2 + length += 2 + length += 2 + length += 2 + length += 2 + length += 1 + for i in range(self.Cnt): + length += self.Items[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.Exp1) + data = CommFunc.WriteDWORD(data, self.Exp2) + data = CommFunc.WriteDWORD(data, self.Times) + data = CommFunc.WriteWORD(data, self.PurpleEquip) + data = CommFunc.WriteWORD(data, self.OrangeEquip) + data = CommFunc.WriteWORD(data, self.EatPurpleEquip) + data = CommFunc.WriteWORD(data, self.BeforeLV) + data = CommFunc.WriteWORD(data, self.GiveCnt) + data = CommFunc.WriteBYTE(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, Exp1:%d, Exp2:%d, Times:%d, PurpleEquip:%d, OrangeEquip:%d, - EatPurpleEquip:%d + EatPurpleEquip:%d, + BeforeLV:%d, + GiveCnt:%d, + Cnt:%d, + Items:%s '''\ %( - self.Cmd, - self.SubCmd, + self.Head.OutputString(), self.Exp1, self.Exp2, self.Times, self.PurpleEquip, self.OrangeEquip, - self.EatPurpleEquip + self.EatPurpleEquip, + self.BeforeLV, + self.GiveCnt, + self.Cnt, + "..." ) return DumpString m_NAtagMCTJGInfo=tagMCTJGInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Cmd,m_NAtagMCTJGInfo.SubCmd))] = m_NAtagMCTJGInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Head.Cmd,m_NAtagMCTJGInfo.Head.SubCmd))] = m_NAtagMCTJGInfo #------------------------------------------------------ -# B7 01 宠物等级 #tagMCPetLV +# C1 02 跨服PK玩家奖励记录 #tagMCCrossRealmPKAwardState -class tagMCPetLV(Structure): +class tagMCCrossRealmPKAwardState(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("PetLV", c_ushort), # 等级 - ("PetExp", c_int), # 升级经验 - ("PetClassExp", c_int), # 升阶经验 - ("PetSeting", c_int), # 宠物操作数据记录 + ("DayPKCountAwardState", c_int), # 每日匹配次数奖励记录,二进制位存储是否已领取,按匹配次数升序排序索引代表奖励位 + ("DayWinCountAwardState", c_int), # 每日胜利次数奖励记录,二进制位存储是否已领取,按胜利次数升序排序索引代表奖励位 + ("DanLVAwardState", c_int), # 段位达标奖励记录,二进制位存储是否已领取,按段位代表奖励位 + ("SeasonAwardState", c_ubyte), # 赛季结算奖励是否已领取 ] def __init__(self): self.Clear() - self.Cmd = 0xB7 + 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), # 段位 + ("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.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, + AwardLV:%d + '''\ + %( + self.SeasonID, + self.Order, + self.DanLV, + 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 @@ -22779,323 +26971,51 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xB7 + self.Cmd = 0xC1 self.SubCmd = 0x01 - self.PetLV = 0 - self.PetExp = 0 - self.PetClassExp = 0 - self.PetSeting = 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(tagMCPetLV) + return sizeof(tagMCCrossRealmPKPlayerInfo) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): - DumpString = '''// B7 01 宠物等级 //tagMCPetLV: + DumpString = '''// C1 01 跨服PK玩家信息 //tagMCCrossRealmPKPlayerInfo: Cmd:%s, SubCmd:%s, - PetLV:%d, - PetExp:%d, - PetClassExp:%d, - PetSeting:%d + Score:%d, + DanLV:%d, + PKCount:%d, + WinCount:%d, + CWinCount:%d, + DayPKCount:%d, + DayWinCount:%d, + DayBuyCount:%d '''\ %( self.Cmd, self.SubCmd, - self.PetLV, - self.PetExp, - self.PetClassExp, - self.PetSeting + self.Score, + self.DanLV, + self.PKCount, + self.WinCount, + self.CWinCount, + self.DayPKCount, + self.DayWinCount, + self.DayBuyCount ) return DumpString -m_NAtagMCPetLV=tagMCPetLV() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPetLV.Cmd,m_NAtagMCPetLV.SubCmd))] = m_NAtagMCPetLV - - -#------------------------------------------------------ -#D2 01 跨服赛报名(上传数据)状态 #tagMergeWarRegisterState - -class tagMergeWarRegisterState(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("RegisterState", c_ubyte), - ] - - def __init__(self): - self.Clear() - self.Cmd = 0xD2 - self.SubCmd = 0x01 - return - - def ReadData(self, stringData, _pos=0, _len=0): - self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() - - def Clear(self): - self.Cmd = 0xD2 - self.SubCmd = 0x01 - self.RegisterState = 0 - return - - def GetLength(self): - return sizeof(tagMergeWarRegisterState) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''//D2 01 跨服赛报名(上传数据)状态 //tagMergeWarRegisterState: - Cmd:%s, - SubCmd:%s, - RegisterState:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.RegisterState - ) - return DumpString - - -m_NAtagMergeWarRegisterState=tagMergeWarRegisterState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMergeWarRegisterState.Cmd,m_NAtagMergeWarRegisterState.SubCmd))] = m_NAtagMergeWarRegisterState - - -#------------------------------------------------------ -# D2 09 跨服boss奖励领奖状态 #tagMCMergeBossAwardRecord - -class tagMCMergeBossAwardRecord(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.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 = 0xD2 - self.SubCmd = 0x06 - self.DayPKCnt = 0 - self.DayBuyCnt = 0 - self.UnUsedBuyCnt = 0 - return - - def GetLength(self): - return sizeof(tagMCMergePKCnt) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// D2 06 跨服PK次数通知 //tagMCMergePKCnt: - Cmd:%s, - SubCmd:%s, - DayPKCnt:%d, - DayBuyCnt:%d, - UnUsedBuyCnt:%d - '''\ - %( - self.Cmd, - self.SubCmd, - self.DayPKCnt, - self.DayBuyCnt, - self.UnUsedBuyCnt - ) - 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_NAtagMCCrossRealmPKPlayerInfo=tagMCCrossRealmPKPlayerInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossRealmPKPlayerInfo.Cmd,m_NAtagMCCrossRealmPKPlayerInfo.SubCmd))] = m_NAtagMCCrossRealmPKPlayerInfo \ No newline at end of file -- Gitblit v1.8.0