From 6366979426fccd97c0cb0bd384ada3a8b9843a24 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 25 十月 2018 14:37:22 +0800 Subject: [PATCH] 2198 【主干】仙盟盟主5天没上线,盟主没有主动传位 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 2332 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 2,224 insertions(+), 108 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index 35c9502..0915012 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -318,6 +318,14 @@ ("Day", c_ushort), # 已开服天数,从0开始 ("IsMixServer", c_ubyte), #是否是合服服务器 ("MixDay", c_ushort), # 已合服天数,从0开始 + ("OpenWeekday", c_ubyte), #开服是周几,1代表周一 + ("NowYear", c_ushort), #服务器当前时间 - 年 + ("NowMonth", c_ubyte), + ("NowDay", c_ubyte), + ("NowHour", c_ubyte), + ("NowMinute", c_ubyte), + ("NowSecond", c_ubyte), + ("NowMicSecond", c_int), ] def __init__(self): @@ -337,6 +345,14 @@ self.Day = 0 self.IsMixServer = 0 self.MixDay = 0 + self.OpenWeekday = 0 + self.NowYear = 0 + self.NowMonth = 0 + self.NowDay = 0 + self.NowHour = 0 + self.NowMinute = 0 + self.NowSecond = 0 + self.NowMicSecond = 0 return def GetLength(self): @@ -351,14 +367,30 @@ SubCmd:%s, Day:%d, IsMixServer:%d, - MixDay:%d + MixDay:%d, + OpenWeekday:%d, + NowYear:%d, + NowMonth:%d, + NowDay:%d, + NowHour:%d, + NowMinute:%d, + NowSecond:%d, + NowMicSecond:%d '''\ %( self.Cmd, self.SubCmd, self.Day, self.IsMixServer, - self.MixDay + self.MixDay, + self.OpenWeekday, + self.NowYear, + self.NowMonth, + self.NowDay, + self.NowHour, + self.NowMinute, + self.NowSecond, + self.NowMicSecond ) return DumpString @@ -2285,8 +2317,9 @@ class tagGCBossShuntLineState(Structure): BossID = 0 #(DWORD BossID)// bossID - DeadLineCount = 0 #(BYTE DeadLineCount) - DeadLineList = list() #(vector<BYTE> DeadLineList)// 已死亡的线路列表 + LineCount = 0 #(BYTE LineCount) + LineIDList = list() #(vector<BYTE> LineIDList)// 线路ID列表 + StateList = list() #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着 data = None def __init__(self): @@ -2296,43 +2329,52 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.DeadLineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) - for i in range(self.DeadLineCount): + self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.LineCount): value,_pos=CommFunc.ReadBYTE(_lpData,_pos) - self.DeadLineList.append(value) + self.LineIDList.append(value) + for i in range(self.LineCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.StateList.append(value) return _pos def Clear(self): self.BossID = 0 - self.DeadLineCount = 0 - self.DeadLineList = list() + self.LineCount = 0 + self.LineIDList = list() + self.StateList = list() return def GetLength(self): length = 0 length += 4 length += 1 - length += 1 * self.DeadLineCount + length += 1 * self.LineCount + length += 1 * self.LineCount return length def GetBuffer(self): data = '' data = CommFunc.WriteDWORD(data, self.BossID) - data = CommFunc.WriteBYTE(data, self.DeadLineCount) - for i in range(self.DeadLineCount): - data = CommFunc.WriteBYTE(data, self.DeadLineList[i]) + data = CommFunc.WriteBYTE(data, self.LineCount) + for i in range(self.LineCount): + data = CommFunc.WriteBYTE(data, self.LineIDList[i]) + for i in range(self.LineCount): + data = CommFunc.WriteBYTE(data, self.StateList[i]) return data def OutputString(self): DumpString = ''' BossID:%d, - DeadLineCount:%d, - DeadLineList:%s + LineCount:%d, + LineIDList:%s, + StateList:%s '''\ %( self.BossID, - self.DeadLineCount, + self.LineCount, + "...", "..." ) return DumpString @@ -2667,6 +2709,114 @@ #------------------------------------------------------ +# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime + +class tagDogzTimeInfoObj(Structure): + _pack_ = 1 + _fields_ = [ + ("NPCID", c_int), # npcid + ("RefreshSecond", 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.RefreshSecond = 0 + return + + def GetLength(self): + return sizeof(tagDogzTimeInfoObj) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime: + NPCID:%d, + RefreshSecond:%d + '''\ + %( + self.NPCID, + self.RefreshSecond + ) + return DumpString + + +class tagGCDogzNPCRefreshTime(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)//信息个数 + InfoList = list() #(vector<tagDogzTimeInfoObj> InfoList)//信息列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA9 + 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): + 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 = 0x04 + 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_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime + + +#------------------------------------------------------ # A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo class tagGCFriendSendEnergyInfo(Structure): @@ -2760,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): @@ -2773,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): @@ -2781,6 +2933,7 @@ self.RecordLen = 0 self.KillRecord = "" self.RefreshSecond = 0 + self.RefreshCD = 0 return def GetLength(self): @@ -2789,6 +2942,7 @@ length += 1 length += 2 length += len(self.KillRecord) + length += 4 length += 4 return length @@ -2800,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): @@ -2808,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 @@ -4077,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): @@ -4129,81 +4394,159 @@ #------------------------------------------------------ -# AC 07 BOSS复活活动信息 #tagGCBossRebornInfo +# AC 10 仙盟抢Boss所有Boss伤血进度信息 #tagGCAllFamilyBossHurtInfoList -class tagGCBossRebornInfo(Structure): +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() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + 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.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): + 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): + 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 = ''' + NPCID:%d, + CurHP:%d, + CurHPEx:%d, + MaxHP:%d, + MaxHPEx:%d, + FamilyID:%d, + NameLen:%d, + FamilyName:%s + '''\ + %( + self.NPCID, + self.CurHP, + self.CurHPEx, + self.MaxHP, + self.MaxHPEx, + self.FamilyID, + self.NameLen, + self.FamilyName + ) + return DumpString + + +class tagGCAllFamilyBossHurtInfoList(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)// 限制等级 + NPCCount = 0 #(BYTE NPCCount)// 个数 + NPCHurtInfo = list() #(vector<tagGCFamilyBossHurtInfo> NPCHurtInfo)// NPC伤血信息列表 data = None def __init__(self): self.Clear() self.Head.Cmd = 0xAC - self.Head.SubCmd = 0x07 + self.Head.SubCmd = 0x10 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.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 = 0x07 - self.StartDate = "" - self.EndtDate = "" - self.WorldLV = 0 - self.LimitLV = 0 + self.Head.SubCmd = 0x10 + self.NPCCount = 0 + self.NPCHurtInfo = list() return def GetLength(self): length = 0 length += self.Head.GetLength() - length += 10 - length += 10 - length += 2 - length += 2 + length += 1 + 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.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.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, - StartDate:%s, - EndtDate:%s, - WorldLV:%d, - LimitLV:%d + NPCCount:%d, + NPCHurtInfo:%s '''\ %( self.Head.OutputString(), - self.StartDate, - self.EndtDate, - self.WorldLV, - self.LimitLV + self.NPCCount, + "..." ) return DumpString -m_NAtagGCBossRebornInfo=tagGCBossRebornInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornInfo.Head.Cmd,m_NAtagGCBossRebornInfo.Head.SubCmd))] = m_NAtagGCBossRebornInfo +m_NAtagGCAllFamilyBossHurtInfoList=tagGCAllFamilyBossHurtInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAllFamilyBossHurtInfoList.Head.Cmd,m_NAtagGCAllFamilyBossHurtInfoList.Head.SubCmd))] = m_NAtagGCAllFamilyBossHurtInfoList #------------------------------------------------------ @@ -4215,6 +4558,8 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("Point", c_int), # 复活点数 + ("TotalPoint", c_int), # 复活总点数 + ("RebornCnt", c_ushort), # 复活次数 ] def __init__(self): @@ -4232,6 +4577,8 @@ self.Cmd = 0xAC self.SubCmd = 0x08 self.Point = 0 + self.TotalPoint = 0 + self.RebornCnt = 0 return def GetLength(self): @@ -4244,12 +4591,16 @@ DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint: Cmd:%s, SubCmd:%s, - Point:%d + Point:%d, + TotalPoint:%d, + RebornCnt:%d '''\ %( self.Cmd, self.SubCmd, - self.Point + self.Point, + self.TotalPoint, + self.RebornCnt ) return DumpString @@ -4267,6 +4618,7 @@ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d WorldLV = 0 #(WORD WorldLV)// 世界等级 LimitLV = 0 #(WORD LimitLV)// 限制等级 + ResetType = 0 #(BYTE ResetType)// 重置类型 0-0点重置 1-5点重置 data = None def __init__(self): @@ -4282,6 +4634,7 @@ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos) return _pos def Clear(self): @@ -4293,6 +4646,7 @@ self.EndtDate = "" self.WorldLV = 0 self.LimitLV = 0 + self.ResetType = 0 return def GetLength(self): @@ -4302,6 +4656,7 @@ length += 10 length += 2 length += 2 + length += 1 return length @@ -4312,6 +4667,7 @@ data = CommFunc.WriteString(data, 10, self.EndtDate) data = CommFunc.WriteWORD(data, self.WorldLV) data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ResetType) return data def OutputString(self): @@ -4320,14 +4676,16 @@ StartDate:%s, EndtDate:%s, WorldLV:%d, - LimitLV:%d + LimitLV:%d, + ResetType:%d '''\ %( self.Head.OutputString(), self.StartDate, self.EndtDate, self.WorldLV, - self.LimitLV + self.LimitLV, + self.ResetType ) return DumpString @@ -10026,6 +10384,62 @@ #------------------------------------------------------ +# A3 24 通知绑玉转盘结果 #tagMCBindJadeWheelResult + +class tagMCBindJadeWheelResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Index", c_ubyte), # 格子 + ("Cnt", c_ubyte), #今日已转次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x24 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA3 + self.SubCmd = 0x24 + self.Index = 0 + self.Cnt = 0 + return + + def GetLength(self): + return sizeof(tagMCBindJadeWheelResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 24 通知绑玉转盘结果 //tagMCBindJadeWheelResult: + Cmd:%s, + SubCmd:%s, + Index:%d, + Cnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Index, + self.Cnt + ) + return DumpString + + +m_NAtagMCBindJadeWheelResult=tagMCBindJadeWheelResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBindJadeWheelResult.Cmd,m_NAtagMCBindJadeWheelResult.SubCmd))] = m_NAtagMCBindJadeWheelResult + + +#------------------------------------------------------ #A3 B7 当日累计攻击boss次数 #tagMCBOSSAttactCnt class tagMCBossCntInfo(Structure): @@ -10736,6 +11150,114 @@ #------------------------------------------------------ +# A3 C1 神兽助战状态刷新 #tagMCDogzHelpbattleState + +class tagMCDogzHelpbattleState(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("DogzID", c_ubyte), # 神兽ID + ("BatteState", c_ubyte), #是否已助战, 0否1是 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0xC1 + return + + def 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 = 0xC1 + self.DogzID = 0 + self.BatteState = 0 + return + + def GetLength(self): + return sizeof(tagMCDogzHelpbattleState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 C1 神兽助战状态刷新 //tagMCDogzHelpbattleState: + Cmd:%s, + SubCmd:%s, + DogzID:%d, + BatteState:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.DogzID, + self.BatteState + ) + return DumpString + + +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): @@ -11238,19 +11760,15 @@ #------------------------------------------------------ #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo -class tagMCFBEncourageInfo(Structure): +class tagMCFBEncourageCnt(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("Cnt1", c_ubyte), # 当前铜钱鼓舞次数 - ("Cnt2", c_ubyte), # 当前仙玉鼓舞次数 + ("MoneyType", c_ubyte), # 金钱类型 + ("EncourageCnt", c_ubyte), # 当前鼓舞次数 ] def __init__(self): self.Clear() - self.Cmd = 0xA3 - self.SubCmd = 0x0A return def ReadData(self, stringData, _pos=0, _len=0): @@ -11259,36 +11777,92 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x0A - self.Cnt1 = 0 - self.Cnt2 = 0 + self.MoneyType = 0 + self.EncourageCnt = 0 return def GetLength(self): - return sizeof(tagMCFBEncourageInfo) + return sizeof(tagMCFBEncourageCnt) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''//A3 0A 副本鼓舞信息通知 //tagMCFBEncourageInfo: - Cmd:%s, - SubCmd:%s, - Cnt1:%d, - Cnt2:%d + MoneyType:%d, + EncourageCnt:%d '''\ %( - self.Cmd, - self.SubCmd, - self.Cnt1, - self.Cnt2 + self.MoneyType, + self.EncourageCnt + ) + return DumpString + + +class tagMCFBEncourageInfo(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)// + InfoList = list() #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x0A + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temInfoList = tagMCFBEncourageCnt() + _pos = temInfoList.ReadData(_lpData, _pos) + self.InfoList.append(temInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x0A + self.Cnt = 0 + self.InfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Cnt): + length += self.InfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + InfoList:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." ) return DumpString m_NAtagMCFBEncourageInfo=tagMCFBEncourageInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Cmd,m_NAtagMCFBEncourageInfo.SubCmd))] = m_NAtagMCFBEncourageInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Head.Cmd,m_NAtagMCFBEncourageInfo.Head.SubCmd))] = m_NAtagMCFBEncourageInfo #------------------------------------------------------ @@ -12703,6 +13277,7 @@ _pack_ = 1 _fields_ = [ ("PriID", c_int), # 特权ID + ("State", c_ubyte), #激活状态 ("CurValue", c_int), #当前总进度 ("GotValue", c_int), #已领取进度 ("ItemAwardState", c_ubyte), #物品奖励是否已领取 @@ -12719,6 +13294,7 @@ def Clear(self): self.PriID = 0 + self.State = 0 self.CurValue = 0 self.GotValue = 0 self.ItemAwardState = 0 @@ -12733,12 +13309,14 @@ 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 @@ -12818,16 +13396,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): @@ -12836,8 +13410,6 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA3 - self.SubCmd = 0x26 self.NPCID = 0 self.CollectionCnt = 0 return @@ -12850,14 +13422,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 ) @@ -13513,6 +14081,62 @@ #------------------------------------------------------ +# A3 21 祈福丹药结果 #tagMCPrayElixirResult + +class tagMCPrayElixirResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ItemID", c_int), # 物品ID + ("PrayCnt", c_ubyte), # 今日祈福次数 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA3 + self.SubCmd = 0x21 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xA3 + self.SubCmd = 0x21 + self.ItemID = 0 + self.PrayCnt = 0 + return + + def GetLength(self): + return sizeof(tagMCPrayElixirResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A3 21 祈福丹药结果 //tagMCPrayElixirResult: + Cmd:%s, + SubCmd:%s, + ItemID:%d, + PrayCnt:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ItemID, + self.PrayCnt + ) + return DumpString + + +m_NAtagMCPrayElixirResult=tagMCPrayElixirResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPrayElixirResult.Cmd,m_NAtagMCPrayElixirResult.SubCmd))] = m_NAtagMCPrayElixirResult + + +#------------------------------------------------------ # A3 49 资源找回次数 #tagMCRecoverNum class tagMCRecoverNumInfo(Structure): @@ -13521,7 +14145,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): @@ -13538,6 +14163,7 @@ self.RecoverCnt = 0 self.ExtraCnt = 0 self.ExtraData = 0 + self.ExtraData2 = 0 return def GetLength(self): @@ -13551,13 +14177,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 @@ -16209,6 +16837,183 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # A7 03 通知进入副本时间 #tagMCFBEnterTickList class tagMCFBEnterTick(Structure): @@ -16384,6 +17189,121 @@ #------------------------------------------------------ +# 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): @@ -16449,8 +17369,6 @@ class tagMCNPCInfo(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), ("ObjID", c_int), ("NPCID", c_int), ("NPCHP", c_int), @@ -16463,8 +17381,6 @@ def __init__(self): self.Clear() - self.Cmd = 0xA7 - self.SubCmd = 0x06 return def ReadData(self, stringData, _pos=0, _len=0): @@ -16473,8 +17389,6 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xA7 - self.SubCmd = 0x06 self.ObjID = 0 self.NPCID = 0 self.NPCHP = 0 @@ -16493,8 +17407,6 @@ def OutputString(self): DumpString = '''// A7 06 通知查询的NPC信息 //tagMCNPCInfoList: - Cmd:%s, - SubCmd:%s, ObjID:%d, NPCID:%d, NPCHP:%d, @@ -16505,8 +17417,6 @@ RefreshSecond:%d '''\ %( - self.Cmd, - self.SubCmd, self.ObjID, self.NPCID, self.NPCHP, @@ -18136,6 +19046,449 @@ #------------------------------------------------------ +# 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), # 排序标识 + ] + + 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 + 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 + '''\ + %( + self.ItemID, + self.ItemCnt, + self.IsBind, + self.Mark + ) + 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): @@ -18810,6 +20163,7 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("FirstGoldRewardState", c_ubyte), #首充奖励是否已领奖 + ("FirstGoldTry", c_ubyte), #首充试用状态0-不可试用 1-可试用 2-已试用 ] def __init__(self): @@ -18827,6 +20181,7 @@ self.Cmd = 0xAA self.SubCmd = 0x02 self.FirstGoldRewardState = 0 + self.FirstGoldTry = 0 return def GetLength(self): @@ -18839,12 +20194,14 @@ DumpString = '''// AA 02 首充信息 //tagMCFirstGoldInfo: Cmd:%s, SubCmd:%s, - FirstGoldRewardState:%d + FirstGoldRewardState:%d, + FirstGoldTry:%d '''\ %( self.Cmd, self.SubCmd, - self.FirstGoldRewardState + self.FirstGoldRewardState, + self.FirstGoldTry ) return DumpString @@ -18862,7 +20219,6 @@ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), ("FirstGoldRemainTime", c_int), #首充提示剩余时间 - ("FirstGoldTry", c_ubyte), #首充试用状态0-不可试用 1-可试用 2-已试用 ] def __init__(self): @@ -18880,7 +20236,6 @@ self.Cmd = 0xAA self.SubCmd = 0x08 self.FirstGoldRemainTime = 0 - self.FirstGoldTry = 0 return def GetLength(self): @@ -18893,14 +20248,12 @@ DumpString = '''// AA 08 首充提示剩余时间 //tagMCFirstGoldTime: Cmd:%s, SubCmd:%s, - FirstGoldRemainTime:%d, - FirstGoldTry:%d + FirstGoldRemainTime:%d '''\ %( self.Cmd, self.SubCmd, - self.FirstGoldRemainTime, - self.FirstGoldTry + self.FirstGoldRemainTime ) return DumpString @@ -19150,6 +20503,7 @@ Head = tagHead() StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 ActivityTimeCount = 0 #(BYTE ActivityTimeCount) ActivityTime = list() #(vector<tagMCFlashGiftbagTime> ActivityTime)//活动时间 IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 @@ -19169,6 +20523,7 @@ _pos = self.Head.ReadData(_lpData, _pos) self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.ActivityTimeCount): temActivityTime = tagMCFlashGiftbagTime() @@ -19190,6 +20545,7 @@ self.Head.SubCmd = 0x12 self.StartDate = "" self.EndtDate = "" + self.AdvanceMinutes = 0 self.ActivityTimeCount = 0 self.ActivityTime = list() self.IsDayReset = 0 @@ -19203,6 +20559,7 @@ length += self.Head.GetLength() length += 10 length += 10 + length += 2 length += 1 for i in range(self.ActivityTimeCount): length += self.ActivityTime[i].GetLength() @@ -19219,6 +20576,7 @@ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.AdvanceMinutes) data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) for i in range(self.ActivityTimeCount): data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) @@ -19234,6 +20592,7 @@ Head:%s, StartDate:%s, EndtDate:%s, + AdvanceMinutes:%d, ActivityTimeCount:%d, ActivityTime:%s, IsDayReset:%d, @@ -19245,6 +20604,7 @@ self.Head.OutputString(), self.StartDate, self.EndtDate, + self.AdvanceMinutes, self.ActivityTimeCount, "...", self.IsDayReset, @@ -19365,6 +20725,420 @@ m_NAtagMCFlashGiftbagPlayerInfo=tagMCFlashGiftbagPlayerInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashGiftbagPlayerInfo.Head.Cmd,m_NAtagMCFlashGiftbagPlayerInfo.Head.SubCmd))] = m_NAtagMCFlashGiftbagPlayerInfo + + +#------------------------------------------------------ +# AA 18 限时抢购活动玩家预约信息 #tagMCFlashSaleAppointmentInfo + +class tagMCFlashSaleAppointmentState(Structure): + _pack_ = 1 + _fields_ = [ + ("GoodsMark", c_int), # 商品标识 + ("State", c_ubyte), # 是否预约 + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.GoodsMark = 0 + self.State = 0 + return + + def GetLength(self): + return sizeof(tagMCFlashSaleAppointmentState) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 18 限时抢购活动玩家预约信息 //tagMCFlashSaleAppointmentInfo: + GoodsMark:%d, + State:%d + '''\ + %( + self.GoodsMark, + self.State + ) + return DumpString + + +class tagMCFlashSaleAppointmentInfo(Structure): + Head = tagHead() + IsAll = 0 #(BYTE IsAll)// 是否全部 + GoodsCount = 0 #(WORD GoodsCount)// 商品数 + GoodsList = list() #(vector<tagMCFlashSaleAppointmentState> GoodsList)// 预约的商品 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x18 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.IsAll,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GoodsCount,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.GoodsCount): + temGoodsList = tagMCFlashSaleAppointmentState() + _pos = temGoodsList.ReadData(_lpData, _pos) + self.GoodsList.append(temGoodsList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x18 + self.IsAll = 0 + self.GoodsCount = 0 + self.GoodsList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + for i in range(self.GoodsCount): + length += self.GoodsList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IsAll) + data = CommFunc.WriteWORD(data, self.GoodsCount) + for i in range(self.GoodsCount): + data = CommFunc.WriteString(data, self.GoodsList[i].GetLength(), self.GoodsList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + IsAll:%d, + GoodsCount:%d, + GoodsList:%s + '''\ + %( + self.Head.OutputString(), + self.IsAll, + self.GoodsCount, + "..." + ) + return DumpString + + +m_NAtagMCFlashSaleAppointmentInfo=tagMCFlashSaleAppointmentInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleAppointmentInfo.Head.Cmd,m_NAtagMCFlashSaleAppointmentInfo.Head.SubCmd))] = m_NAtagMCFlashSaleAppointmentInfo + + +#------------------------------------------------------ +# AA 17 限时抢购活动信息 #tagMCFlashSaleInfo + +class tagMCFlashSaleGiftbag(Structure): + _pack_ = 1 + _fields_ = [ + ("GiftID", c_int), #商城表的物品ID + ("BuyCountLimit", c_ubyte), #限购数 + ("ServerBuyCountLimit", c_ushort), #全服限购数 + ("MoneyType", c_ubyte), #消耗货币类型 + ("MoneyNumber", c_int), #消耗货币数量 + ("MoneyOriginal", c_int), #原价 + ("ItemID", c_int), + ("ItemCount", c_ushort), + ("IsBind", c_ubyte), + ] + + def __init__(self): + self.Clear() + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.GiftID = 0 + self.BuyCountLimit = 0 + self.ServerBuyCountLimit = 0 + self.MoneyType = 0 + self.MoneyNumber = 0 + self.MoneyOriginal = 0 + self.ItemID = 0 + self.ItemCount = 0 + self.IsBind = 0 + return + + def GetLength(self): + return sizeof(tagMCFlashSaleGiftbag) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// AA 17 限时抢购活动信息 //tagMCFlashSaleInfo: + GiftID:%d, + BuyCountLimit:%d, + ServerBuyCountLimit:%d, + MoneyType:%d, + MoneyNumber:%d, + MoneyOriginal:%d, + ItemID:%d, + ItemCount:%d, + IsBind:%d + '''\ + %( + self.GiftID, + self.BuyCountLimit, + self.ServerBuyCountLimit, + self.MoneyType, + self.MoneyNumber, + self.MoneyOriginal, + self.ItemID, + self.ItemCount, + self.IsBind + ) + return DumpString + + +class tagMCFlashSaleShop(Structure): + DayIndex = 0 #(BYTE DayIndex)// 活动第几天 + TimeIndex = 0 #(BYTE TimeIndex)// 第几个时间段 + GiftbagCount = 0 #(BYTE GiftbagCount)// 商店礼包数 + GiftbagInfo = list() #(vector<tagMCFlashSaleGiftbag> GiftbagInfo)// 礼包信息 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.DayIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TimeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.GiftbagCount): + temGiftbagInfo = tagMCFlashSaleGiftbag() + _pos = temGiftbagInfo.ReadData(_lpData, _pos) + self.GiftbagInfo.append(temGiftbagInfo) + return _pos + + def Clear(self): + self.DayIndex = 0 + self.TimeIndex = 0 + self.GiftbagCount = 0 + self.GiftbagInfo = list() + return + + def GetLength(self): + length = 0 + length += 1 + length += 1 + length += 1 + for i in range(self.GiftbagCount): + length += self.GiftbagInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.DayIndex) + data = CommFunc.WriteBYTE(data, self.TimeIndex) + data = CommFunc.WriteBYTE(data, self.GiftbagCount) + for i in range(self.GiftbagCount): + data = CommFunc.WriteString(data, self.GiftbagInfo[i].GetLength(), self.GiftbagInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + DayIndex:%d, + TimeIndex:%d, + GiftbagCount:%d, + GiftbagInfo:%s + '''\ + %( + self.DayIndex, + self.TimeIndex, + self.GiftbagCount, + "..." + ) + return DumpString + + +class tagMCFlashSaleTime(Structure): + StartTime = "" #(char StartTime[5])// 开始时间 H:M + EndtTime = "" #(char EndtTime[5])// 结束时间 H:M + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.StartTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + self.EndtTime,_pos = CommFunc.ReadString(_lpData, _pos,5) + return _pos + + def Clear(self): + self.StartTime = "" + self.EndtTime = "" + return + + def GetLength(self): + length = 0 + length += 5 + length += 5 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, 5, self.StartTime) + data = CommFunc.WriteString(data, 5, self.EndtTime) + return data + + def OutputString(self): + DumpString = ''' + StartTime:%s, + EndtTime:%s + '''\ + %( + self.StartTime, + self.EndtTime + ) + return DumpString + + +class tagMCFlashSaleInfo(Structure): + Head = tagHead() + StartDate = "" #(char StartDate[10])// 开始日期 y-m-d + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 + ActivityTimeCount = 0 #(BYTE ActivityTimeCount) + ActivityTime = list() #(vector<tagMCFlashSaleTime> ActivityTime)//活动时间 + IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 + LimitLV = 0 #(WORD LimitLV)// 限制等级 + ShopCount = 0 #(BYTE ShopCount)// 商店数 + ShopInfo = list() #(vector<tagMCFlashSaleShop> ShopInfo)// 商店信息, 当有多个商店且有多个活动时间段时则每个时间段对应一个商店; + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x17 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ActivityTimeCount): + temActivityTime = tagMCFlashSaleTime() + _pos = temActivityTime.ReadData(_lpData, _pos) + self.ActivityTime.append(temActivityTime) + self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.ShopCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ShopCount): + temShopInfo = tagMCFlashSaleShop() + _pos = temShopInfo.ReadData(_lpData, _pos) + self.ShopInfo.append(temShopInfo) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x17 + self.StartDate = "" + self.EndtDate = "" + self.AdvanceMinutes = 0 + self.ActivityTimeCount = 0 + self.ActivityTime = list() + self.IsDayReset = 0 + self.LimitLV = 0 + self.ShopCount = 0 + self.ShopInfo = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 10 + length += 10 + length += 2 + length += 1 + for i in range(self.ActivityTimeCount): + length += self.ActivityTime[i].GetLength() + length += 1 + length += 2 + length += 1 + for i in range(self.ShopCount): + length += self.ShopInfo[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteString(data, 10, self.StartDate) + data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.AdvanceMinutes) + data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) + for i in range(self.ActivityTimeCount): + data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IsDayReset) + data = CommFunc.WriteWORD(data, self.LimitLV) + data = CommFunc.WriteBYTE(data, self.ShopCount) + for i in range(self.ShopCount): + data = CommFunc.WriteString(data, self.ShopInfo[i].GetLength(), self.ShopInfo[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + StartDate:%s, + EndtDate:%s, + AdvanceMinutes:%d, + ActivityTimeCount:%d, + ActivityTime:%s, + IsDayReset:%d, + LimitLV:%d, + ShopCount:%d, + ShopInfo:%s + '''\ + %( + self.Head.OutputString(), + self.StartDate, + self.EndtDate, + self.AdvanceMinutes, + self.ActivityTimeCount, + "...", + self.IsDayReset, + self.LimitLV, + self.ShopCount, + "..." + ) + return DumpString + + +m_NAtagMCFlashSaleInfo=tagMCFlashSaleInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFlashSaleInfo.Head.Cmd,m_NAtagMCFlashSaleInfo.Head.SubCmd))] = m_NAtagMCFlashSaleInfo #------------------------------------------------------ @@ -19793,6 +21567,7 @@ Head = tagHead() StartDate = "" #(char StartDate[10])// 开始日期 y-m-d EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + AdvanceMinutes = 0 #(WORD AdvanceMinutes)// 提前显示分钟 ActivityTimeCount = 0 #(BYTE ActivityTimeCount) ActivityTime = list() #(vector<tagMCSpringSaleTime> ActivityTime)//活动时间 IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置 @@ -19812,6 +21587,7 @@ _pos = self.Head.ReadData(_lpData, _pos) self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10) self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + self.AdvanceMinutes,_pos = CommFunc.ReadWORD(_lpData, _pos) self.ActivityTimeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.ActivityTimeCount): temActivityTime = tagMCSpringSaleTime() @@ -19833,6 +21609,7 @@ self.Head.SubCmd = 0x11 self.StartDate = "" self.EndtDate = "" + self.AdvanceMinutes = 0 self.ActivityTimeCount = 0 self.ActivityTime = list() self.IsDayReset = 0 @@ -19846,6 +21623,7 @@ length += self.Head.GetLength() length += 10 length += 10 + length += 2 length += 1 for i in range(self.ActivityTimeCount): length += self.ActivityTime[i].GetLength() @@ -19862,6 +21640,7 @@ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteString(data, 10, self.StartDate) data = CommFunc.WriteString(data, 10, self.EndtDate) + data = CommFunc.WriteWORD(data, self.AdvanceMinutes) data = CommFunc.WriteBYTE(data, self.ActivityTimeCount) for i in range(self.ActivityTimeCount): data = CommFunc.WriteString(data, self.ActivityTime[i].GetLength(), self.ActivityTime[i].GetBuffer()) @@ -19877,6 +21656,7 @@ Head:%s, StartDate:%s, EndtDate:%s, + AdvanceMinutes:%d, ActivityTimeCount:%d, ActivityTime:%s, IsDayReset:%d, @@ -19888,6 +21668,7 @@ self.Head.OutputString(), self.StartDate, self.EndtDate, + self.AdvanceMinutes, self.ActivityTimeCount, "...", self.IsDayReset, @@ -19900,6 +21681,70 @@ m_NAtagMCSpringSaleInfo=tagMCSpringSaleInfo() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSpringSaleInfo.Head.Cmd,m_NAtagMCSpringSaleInfo.Head.SubCmd))] = m_NAtagMCSpringSaleInfo + + +#------------------------------------------------------ +# AA 16 通知超值礼包信息 #tagMCSuperGiftInfo + +class tagMCSuperGiftInfo(Structure): + Head = tagHead() + GiftID = 0 #(DWORD GiftID)//商品ID + EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xAA + self.Head.SubCmd = 0x16 + self.GiftID = 0 + self.EndtDate = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 4 + length += 10 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.GiftID) + data = CommFunc.WriteString(data, 10, self.EndtDate) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + GiftID:%d, + EndtDate:%s + '''\ + %( + self.Head.OutputString(), + self.GiftID, + self.EndtDate + ) + return DumpString + + +m_NAtagMCSuperGiftInfo=tagMCSuperGiftInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Head.Cmd,m_NAtagMCSuperGiftInfo.Head.SubCmd))] = m_NAtagMCSuperGiftInfo #------------------------------------------------------ @@ -20424,6 +22269,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 #------------------------------------------------------ @@ -21424,6 +23480,66 @@ #------------------------------------------------------ +# 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 + + +#------------------------------------------------------ # B1 03 通知玩家死亡时间 #tagMCPlayerDeadTime class tagMCPlayerDeadTime(Structure): -- Gitblit v1.8.0