From fd569f371890909dc35c09d1275d9204b39d77f9 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 19 四月 2024 11:41:09 +0800 Subject: [PATCH] 10054 【后端】任务系统(支持功能开启任务条件;支持任务分组如主线、支线等;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 1094 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 1,042 insertions(+), 52 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 604bd86..f880c1f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -7722,6 +7722,566 @@ #------------------------------------------------------ +# B0 34 福地结算奖励信息 #tagGCMineAreaAwardInfo + +class tagGCMineAreaAwardInfo(Structure): + Head = tagHead() + AwardType = 0 #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知 + AwardLen = 0 #(BYTE AwardLen) + AwardInfo = "" #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...] + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x34 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x34 + self.AwardType = 0 + self.AwardLen = 0 + self.AwardInfo = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 + length += len(self.AwardInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AwardType) + data = CommFunc.WriteBYTE(data, self.AwardLen) + data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AwardType:%d, + AwardLen:%d, + AwardInfo:%s + '''\ + %( + self.Head.OutputString(), + self.AwardType, + self.AwardLen, + self.AwardInfo + ) + return DumpString + + +m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo + + +#------------------------------------------------------ +# B0 33 福地详细信息 #tagGCMineAreaInfo + +class tagGCMineItem(Structure): + Index = 0 #(BYTE Index)// 矿物所在福地位置索引,0~n + MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物 + MineType = 0 #(BYTE MineType)// 矿物类型:0-常规;1-超级 + UpdTime = 0 #(DWORD UpdTime)// 最后一次更新时间戳 + PosLen = 0 #(BYTE PosLen) + Position = "" #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒 + SpeedLen = 0 #(BYTE SpeedLen) + MoveSpeed = "" #(String MoveSpeed)// 移动速度,x格/秒,支持小数 + EndTime = 0 #(DWORD EndTime)// 拉取结束时间戳 + WorkerCount = 0 #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回 + RobPlayerID = 0 #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺 + RobWorkerCount = 0 #(BYTE RobWorkerCount)// 抢夺工人个数 + RobPlayerName = "" #(char RobPlayerName[33]) + RobFace = 0 #(DWORD RobFace) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen) + self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen) + self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.Index = 0 + self.MineID = 0 + self.MineType = 0 + self.UpdTime = 0 + self.PosLen = 0 + self.Position = "" + self.SpeedLen = 0 + self.MoveSpeed = "" + self.EndTime = 0 + self.WorkerCount = 0 + self.RobPlayerID = 0 + self.RobWorkerCount = 0 + self.RobPlayerName = "" + self.RobFace = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 2 + length += 1 + length += 4 + length += 1 + length += len(self.Position) + length += 1 + length += len(self.MoveSpeed) + length += 4 + length += 1 + length += 4 + length += 1 + length += 33 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.Index) + data = CommFunc.WriteWORD(data, self.MineID) + data = CommFunc.WriteBYTE(data, self.MineType) + data = CommFunc.WriteDWORD(data, self.UpdTime) + data = CommFunc.WriteBYTE(data, self.PosLen) + data = CommFunc.WriteString(data, self.PosLen, self.Position) + data = CommFunc.WriteBYTE(data, self.SpeedLen) + data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed) + data = CommFunc.WriteDWORD(data, self.EndTime) + data = CommFunc.WriteBYTE(data, self.WorkerCount) + data = CommFunc.WriteDWORD(data, self.RobPlayerID) + data = CommFunc.WriteBYTE(data, self.RobWorkerCount) + data = CommFunc.WriteString(data, 33, self.RobPlayerName) + data = CommFunc.WriteDWORD(data, self.RobFace) + return data + + def OutputString(self): + DumpString = ''' + Index:%d, + MineID:%d, + MineType:%d, + UpdTime:%d, + PosLen:%d, + Position:%s, + SpeedLen:%d, + MoveSpeed:%s, + EndTime:%d, + WorkerCount:%d, + RobPlayerID:%d, + RobWorkerCount:%d, + RobPlayerName:%s, + RobFace:%d + '''\ + %( + self.Index, + self.MineID, + self.MineType, + self.UpdTime, + self.PosLen, + self.Position, + self.SpeedLen, + self.MoveSpeed, + self.EndTime, + self.WorkerCount, + self.RobPlayerID, + self.RobWorkerCount, + self.RobPlayerName, + self.RobFace + ) + return DumpString + + +class tagGCMineArea(Structure): + PlayerID = 0 #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人 + PlayerName = "" #(char PlayerName[33])// 可能为空,如自己或假人 + Face = 0 #(DWORD Face) + MineCount = 0 #(BYTE MineCount) + MineItemList = list() #(vector<tagGCMineItem> MineItemList)// 矿物列表 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.MineCount): + temMineItemList = tagGCMineItem() + _pos = temMineItemList.ReadData(_lpData, _pos) + self.MineItemList.append(temMineItemList) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.PlayerName = "" + self.Face = 0 + self.MineCount = 0 + self.MineItemList = list() + return + + def GetLength(self): + length = 0 + length += 4 + length += 33 + length += 4 + length += 1 + for i in range(self.MineCount): + length += self.MineItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteString(data, 33, self.PlayerName) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteBYTE(data, self.MineCount) + for i in range(self.MineCount): + data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + PlayerName:%s, + Face:%d, + MineCount:%d, + MineItemList:%s + '''\ + %( + self.PlayerID, + self.PlayerName, + self.Face, + self.MineCount, + "..." + ) + return DumpString + + +class tagGCMineAreaInfo(Structure): + Head = tagHead() + QueryType = 0 #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表 + QueryValue = 0 #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机 + AreaCount = 0 #(BYTE AreaCount) + AreaList = list() #(vector<tagGCMineArea> AreaList)// 福地列表 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x33 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.AreaCount): + temAreaList = tagGCMineArea() + _pos = temAreaList.ReadData(_lpData, _pos) + self.AreaList.append(temAreaList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x33 + self.QueryType = 0 + self.QueryValue = 0 + self.AreaCount = 0 + self.AreaList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 4 + length += 1 + for i in range(self.AreaCount): + length += self.AreaList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.QueryType) + data = CommFunc.WriteDWORD(data, self.QueryValue) + data = CommFunc.WriteBYTE(data, self.AreaCount) + for i in range(self.AreaCount): + data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + QueryType:%d, + QueryValue:%d, + AreaCount:%d, + AreaList:%s + '''\ + %( + self.Head.OutputString(), + self.QueryType, + self.QueryValue, + self.AreaCount, + "..." + ) + return DumpString + + +m_NAtagGCMineAreaInfo=tagGCMineAreaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo + + +#------------------------------------------------------ +# B0 35 福地记录信息 #tagGCMineAreaRecordInfo + +class tagGCMineAreaRecord(Structure): + RecordType = 0 #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢 + TagPlayerID = 0 #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的 + RecordTime = 0 #(DWORD RecordTime)// 记录时间戳 + MineID = 0 #(WORD MineID)// 矿物ID,对应福地采集表中ID + TagPlayerName = "" #(char TagPlayerName[33]) + TagFace = 0 #(DWORD TagFace) + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33) + self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos) + return _pos + + def Clear(self): + self.RecordType = 0 + self.TagPlayerID = 0 + self.RecordTime = 0 + self.MineID = 0 + self.TagPlayerName = "" + self.TagFace = 0 + return + + def GetLength(self): + length = 0 + length += 1 + length += 4 + length += 4 + length += 2 + length += 33 + length += 4 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteBYTE(data, self.RecordType) + data = CommFunc.WriteDWORD(data, self.TagPlayerID) + data = CommFunc.WriteDWORD(data, self.RecordTime) + data = CommFunc.WriteWORD(data, self.MineID) + data = CommFunc.WriteString(data, 33, self.TagPlayerName) + data = CommFunc.WriteDWORD(data, self.TagFace) + return data + + def OutputString(self): + DumpString = ''' + RecordType:%d, + TagPlayerID:%d, + RecordTime:%d, + MineID:%d, + TagPlayerName:%s, + TagFace:%d + '''\ + %( + self.RecordType, + self.TagPlayerID, + self.RecordTime, + self.MineID, + self.TagPlayerName, + self.TagFace + ) + return DumpString + + +class tagGCMineAreaRecordInfo(Structure): + Head = tagHead() + RecordCount = 0 #(BYTE RecordCount) + AreaRecordList = list() #(vector<tagGCMineAreaRecord> AreaRecordList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x35 + 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): + temAreaRecordList = tagGCMineAreaRecord() + _pos = temAreaRecordList.ReadData(_lpData, _pos) + self.AreaRecordList.append(temAreaRecordList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x35 + self.RecordCount = 0 + self.AreaRecordList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.RecordCount): + length += self.AreaRecordList[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.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + RecordCount:%d, + AreaRecordList:%s + '''\ + %( + self.Head.OutputString(), + self.RecordCount, + "..." + ) + return DumpString + + +m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo + + +#------------------------------------------------------ +# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet + +class tagGCMineItemPullPreviewRet(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 福地所属玩家ID,0默认自己 + ("ItemIndex", c_ubyte), # 物品所在位置索引0~n + ("WorkerCount", c_ubyte), # 上工人人数 + ("NeedSeconds", c_int), # 预计需要时间,秒 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x32 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB0 + self.SubCmd = 0x32 + self.PlayerID = 0 + self.ItemIndex = 0 + self.WorkerCount = 0 + self.NeedSeconds = 0 + return + + def GetLength(self): + return sizeof(tagGCMineItemPullPreviewRet) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + ItemIndex:%d, + WorkerCount:%d, + NeedSeconds:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.ItemIndex, + self.WorkerCount, + self.NeedSeconds + ) + return DumpString + + +m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet + + +#------------------------------------------------------ # B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview class tagGCAssistPlayerInfo(Structure): @@ -16338,7 +16898,7 @@ class tagMCCoinToGoldCount(Structure): _pack_ = 1 _fields_ = [ - ("RecordID", c_ubyte), + ("RecordID", c_ushort), ("TodayPayCount", c_ushort), # 今日已购买次数 ("TotalPayCount", c_int), # 累计总购买次数 ("WeekPayCount", c_ushort), # 周总购买次数 @@ -16388,7 +16948,7 @@ class tagMCCoinToGoldCountInfo(Structure): Head = tagHead() - RecordCount = 0 #(BYTE RecordCount) + RecordCount = 0 #(WORD RecordCount) CTGCountInfoList = list() #(vector<tagMCCoinToGoldCount> CTGCountInfoList) data = None @@ -16401,7 +16961,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordCount,_pos = CommFunc.ReadWORD(_lpData, _pos) for i in range(self.RecordCount): temCTGCountInfoList = tagMCCoinToGoldCount() _pos = temCTGCountInfoList.ReadData(_lpData, _pos) @@ -16420,7 +16980,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 + length += 2 for i in range(self.RecordCount): length += self.CTGCountInfoList[i].GetLength() @@ -16429,7 +16989,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.RecordCount) + data = CommFunc.WriteWORD(data, self.RecordCount) for i in range(self.RecordCount): data = CommFunc.WriteString(data, self.CTGCountInfoList[i].GetLength(), self.CTGCountInfoList[i].GetBuffer()) return data @@ -16460,7 +17020,7 @@ OrderLen = 0 #(BYTE OrderLen) OrderID = "" #(String OrderID)// 订单id Coin = 0 #(DWORD Coin)// 充值的点卷 - RecordID = 0 #(BYTE RecordID)// ctgID + RecordID = 0 #(WORD RecordID)// ctgID OrderInfoLen = 0 #(BYTE OrderInfoLen) OrderInfo = "" #(String OrderInfo) data = None @@ -16477,7 +17037,7 @@ self.OrderLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.OrderID,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderLen) self.Coin,_pos = CommFunc.ReadDWORD(_lpData, _pos) - self.RecordID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.RecordID,_pos = CommFunc.ReadWORD(_lpData, _pos) self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) return _pos @@ -16501,7 +17061,7 @@ length += 1 length += len(self.OrderID) length += 4 - length += 1 + length += 2 length += 1 length += len(self.OrderInfo) @@ -16513,7 +17073,7 @@ data = CommFunc.WriteBYTE(data, self.OrderLen) data = CommFunc.WriteString(data, self.OrderLen, self.OrderID) data = CommFunc.WriteDWORD(data, self.Coin) - data = CommFunc.WriteBYTE(data, self.RecordID) + data = CommFunc.WriteWORD(data, self.RecordID) data = CommFunc.WriteBYTE(data, self.OrderInfoLen) data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) return data @@ -16644,6 +17204,8 @@ ExAttr19 = 0 #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性 ExAttr20 = 0 #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性 HPEx = 0 #(DWORD HPEx)//当前血量 超过E的记录 + Face = 0 #(DWORD Face)//基本脸型 + RoleType = 0 #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分) data = None def __init__(self): @@ -16750,6 +17312,8 @@ self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos) return _pos def Clear(self): @@ -16852,6 +17416,8 @@ self.ExAttr19 = 0 self.ExAttr20 = 0 self.HPEx = 0 + self.Face = 0 + self.RoleType = 0 return def GetLength(self): @@ -16944,6 +17510,8 @@ length += 4 length += 4 length += 15 + length += 4 + length += 4 length += 4 length += 4 length += 4 @@ -17053,6 +17621,8 @@ data = CommFunc.WriteDWORD(data, self.ExAttr19) data = CommFunc.WriteDWORD(data, self.ExAttr20) data = CommFunc.WriteDWORD(data, self.HPEx) + data = CommFunc.WriteDWORD(data, self.Face) + data = CommFunc.WriteDWORD(data, self.RoleType) return data def OutputString(self): @@ -17152,7 +17722,9 @@ ExAttr18:%d, ExAttr19:%d, ExAttr20:%d, - HPEx:%d + HPEx:%d, + Face:%d, + RoleType:%d '''\ %( self.Head.OutputString(), @@ -17250,7 +17822,9 @@ self.ExAttr18, self.ExAttr19, self.ExAttr20, - self.HPEx + self.HPEx, + self.Face, + self.RoleType ) return DumpString @@ -25232,6 +25806,8 @@ ("SubCmd", c_ubyte), ("IsPass", c_ubyte), #是否通关副本 ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取 + ("RealmLVUpAwardState", c_int), #渡劫条件领奖状态;按二进制位存储是否已领取,0-等级;1-副本关卡;2-仙树等级;3-砍树次数 + ("RealmLVUpCutTreeCnt", c_int), #渡劫条件已砍树次数 ] def __init__(self): @@ -25250,6 +25826,8 @@ self.SubCmd = 0x11 self.IsPass = 0 self.XXZLAwardState = 0 + self.RealmLVUpAwardState = 0 + self.RealmLVUpCutTreeCnt = 0 return def GetLength(self): @@ -25263,13 +25841,17 @@ Cmd:%s, SubCmd:%s, IsPass:%d, - XXZLAwardState:%d + XXZLAwardState:%d, + RealmLVUpAwardState:%d, + RealmLVUpCutTreeCnt:%d '''\ %( self.Cmd, self.SubCmd, self.IsPass, - self.XXZLAwardState + self.XXZLAwardState, + self.RealmLVUpAwardState, + self.RealmLVUpCutTreeCnt ) return DumpString @@ -32454,7 +33036,7 @@ class tagMCActGrowupBuyCTGInfo(Structure): - CTGID = 0 #(BYTE CTGID)// 充值表ID + CTGID = 0 #(WORD CTGID)// 充值表ID GainItemCount = 0 #(BYTE GainItemCount)// 获得物品数 GainItemList = list() #(vector<tagMCActGrowupBuyCTGItem> GainItemList)// 获得物品列表,替换充值表中的 GainItemList 字段信息 data = None @@ -32465,7 +33047,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - self.CTGID,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.CTGID,_pos = CommFunc.ReadWORD(_lpData, _pos) self.GainItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.GainItemCount): temGainItemList = tagMCActGrowupBuyCTGItem() @@ -32481,7 +33063,7 @@ def GetLength(self): length = 0 - length += 1 + length += 2 length += 1 for i in range(self.GainItemCount): length += self.GainItemList[i].GetLength() @@ -32490,7 +33072,7 @@ def GetBuffer(self): data = '' - data = CommFunc.WriteBYTE(data, self.CTGID) + data = CommFunc.WriteWORD(data, self.CTGID) data = CommFunc.WriteBYTE(data, self.GainItemCount) for i in range(self.GainItemCount): data = CommFunc.WriteString(data, self.GainItemList[i].GetLength(), self.GainItemList[i].GetBuffer()) @@ -43018,6 +43600,128 @@ #------------------------------------------------------ +# B0 30 玩家福地相关信息 #tagMCPlayerMineAreaInfo + +class tagMCPlayerMineAreaInfo(Structure): + Head = tagHead() + WorkerCount = 0 #(BYTE WorkerCount)// 已雇佣工人数 + EnergyUsed = 0 #(WORD EnergyUsed)// 今日已消耗体力 + RefreshCount = 0 #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新 + RefreshCountSuper = 0 #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新 + TreasureCount = 0 #(BYTE TreasureCount)// 聚宝盆类型个数,对应类型 0~n + TreasureState = list() #(vector<BYTE> TreasureState)// 聚宝盆是否已激活列表,[类型0是否已激活, ...] + TreasureAward = list() #(vector<BYTE> TreasureAward)// 聚宝盆奖励是否已领取列表,[类型0是否已领取, ...] + TreasureProgress = list() #(vector<BYTE> TreasureProgress)// 聚宝盆进度值列表,[类型0进度值, ...],满进度100 + HelpAwardCount = 0 #(BYTE HelpAwardCount)// 今日已帮助别人奖励次数 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x30 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TreasureCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.TreasureState.append(value) + for i in range(self.TreasureCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.TreasureAward.append(value) + for i in range(self.TreasureCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.TreasureProgress.append(value) + self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x30 + self.WorkerCount = 0 + self.EnergyUsed = 0 + self.RefreshCount = 0 + self.RefreshCountSuper = 0 + self.TreasureCount = 0 + self.TreasureState = list() + self.TreasureAward = list() + self.TreasureProgress = list() + self.HelpAwardCount = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + length += 4 + length += 1 + length += 1 + length += 1 * self.TreasureCount + length += 1 * self.TreasureCount + length += 1 * self.TreasureCount + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.WorkerCount) + data = CommFunc.WriteWORD(data, self.EnergyUsed) + data = CommFunc.WriteDWORD(data, self.RefreshCount) + data = CommFunc.WriteBYTE(data, self.RefreshCountSuper) + data = CommFunc.WriteBYTE(data, self.TreasureCount) + for i in range(self.TreasureCount): + data = CommFunc.WriteBYTE(data, self.TreasureState[i]) + for i in range(self.TreasureCount): + data = CommFunc.WriteBYTE(data, self.TreasureAward[i]) + for i in range(self.TreasureCount): + data = CommFunc.WriteBYTE(data, self.TreasureProgress[i]) + data = CommFunc.WriteBYTE(data, self.HelpAwardCount) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + WorkerCount:%d, + EnergyUsed:%d, + RefreshCount:%d, + RefreshCountSuper:%d, + TreasureCount:%d, + TreasureState:%s, + TreasureAward:%s, + TreasureProgress:%s, + HelpAwardCount:%d + '''\ + %( + self.Head.OutputString(), + self.WorkerCount, + self.EnergyUsed, + self.RefreshCount, + self.RefreshCountSuper, + self.TreasureCount, + "...", + "...", + "...", + self.HelpAwardCount + ) + return DumpString + + +m_NAtagMCPlayerMineAreaInfo=tagMCPlayerMineAreaInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerMineAreaInfo.Head.Cmd,m_NAtagMCPlayerMineAreaInfo.Head.SubCmd))] = m_NAtagMCPlayerMineAreaInfo + + +#------------------------------------------------------ # B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo class tagMCTodayAssistMoneyInfo(Structure): @@ -43956,19 +44660,17 @@ #------------------------------------------------------ # B1 10 当前任务信息 #tagMCTaskInfo -class tagMCTaskInfo(Structure): +class tagMCTask(Structure): _pack_ = 1 _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("TaskID", c_int), # 任务ID + ("TaskGroup", c_ubyte), # 任务组,0-主线 + ("TaskID", c_int), # 当前任务ID,可能为0,表示该分组暂时没有任务 ("CurValue", c_int), # 当前进度值 + ("State", c_ubyte), # 任务状态 1-进行中 2-已完成 ] def __init__(self): self.Clear() - self.Cmd = 0xB1 - self.SubCmd = 0x10 return def ReadData(self, stringData, _pos=0, _len=0): @@ -43977,36 +44679,98 @@ return _pos + self.GetLength() def Clear(self): - self.Cmd = 0xB1 - self.SubCmd = 0x10 + self.TaskGroup = 0 self.TaskID = 0 self.CurValue = 0 + self.State = 0 return def GetLength(self): - return sizeof(tagMCTaskInfo) + return sizeof(tagMCTask) def GetBuffer(self): return string_at(addressof(self), self.GetLength()) def OutputString(self): DumpString = '''// B1 10 当前任务信息 //tagMCTaskInfo: - Cmd:%s, - SubCmd:%s, + TaskGroup:%d, TaskID:%d, - CurValue:%d + CurValue:%d, + State:%d '''\ %( - self.Cmd, - self.SubCmd, + self.TaskGroup, self.TaskID, - self.CurValue + self.CurValue, + self.State + ) + return DumpString + + +class tagMCTaskInfo(Structure): + Head = tagHead() + TaskCount = 0 #(BYTE TaskCount) + TaskList = list() #(vector<tagMCTask> TaskList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x10 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.TaskCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.TaskCount): + temTaskList = tagMCTask() + _pos = temTaskList.ReadData(_lpData, _pos) + self.TaskList.append(temTaskList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB1 + self.Head.SubCmd = 0x10 + self.TaskCount = 0 + self.TaskList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.TaskCount): + length += self.TaskList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.TaskCount) + for i in range(self.TaskCount): + data = CommFunc.WriteString(data, self.TaskList[i].GetLength(), self.TaskList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + TaskCount:%d, + TaskList:%s + '''\ + %( + self.Head.OutputString(), + self.TaskCount, + "..." ) return DumpString m_NAtagMCTaskInfo=tagMCTaskInfo() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Cmd,m_NAtagMCTaskInfo.SubCmd))] = m_NAtagMCTaskInfo +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Head.Cmd,m_NAtagMCTaskInfo.Head.SubCmd))] = m_NAtagMCTaskInfo #------------------------------------------------------ @@ -47494,25 +48258,22 @@ #------------------------------------------------------ -# B4 20 回合制战斗状态 #tagMCTurnFightState +# B4 21 回合战斗对象开始行动 #tagMCTurnFightObjAction -class tagMCTurnFightState(Structure): +class tagMCTurnFightObjAction(Structure): _pack_ = 1 _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("MapID", c_int), # 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) - ("FuncLineID", c_ushort), - ("PlayerID", c_int), # 对应玩家ID,可为0,某些功能可能有用,如竞技场 - ("State", c_ubyte), # 0-开始;1-战斗中;2-胜利;3-失败;4-结束 ("TurnNum", c_ubyte), # 当前轮次 - ("TurnMax", c_ubyte), # 最大轮次 + ("ObjID", c_int), + ("ObjType", c_ubyte), ] def __init__(self): self.Clear() self.Cmd = 0xB4 - self.SubCmd = 0x20 + self.SubCmd = 0x21 return def ReadData(self, stringData, _pos=0, _len=0): @@ -47522,47 +48283,276 @@ def Clear(self): self.Cmd = 0xB4 - self.SubCmd = 0x20 + self.SubCmd = 0x21 + self.TurnNum = 0 + self.ObjID = 0 + self.ObjType = 0 + return + + def GetLength(self): + return sizeof(tagMCTurnFightObjAction) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 21 回合战斗对象开始行动 //tagMCTurnFightObjAction: + Cmd:%s, + SubCmd:%s, + TurnNum:%d, + ObjID:%d, + ObjType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.TurnNum, + self.ObjID, + self.ObjType + ) + return DumpString + + +m_NAtagMCTurnFightObjAction=tagMCTurnFightObjAction() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightObjAction.Cmd,m_NAtagMCTurnFightObjAction.SubCmd))] = m_NAtagMCTurnFightObjAction + + +#------------------------------------------------------ +# B4 22 回合战斗角色死亡 #tagMCTurnFightObjDead + +class tagMCTurnFightObjDead(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ObjID", c_int), + ("ObjType", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + self.SubCmd = 0x22 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB4 + self.SubCmd = 0x22 + self.ObjID = 0 + self.ObjType = 0 + return + + def GetLength(self): + return sizeof(tagMCTurnFightObjDead) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 22 回合战斗角色死亡 //tagMCTurnFightObjDead: + Cmd:%s, + SubCmd:%s, + ObjID:%d, + ObjType:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ObjID, + self.ObjType + ) + return DumpString + + +m_NAtagMCTurnFightObjDead=tagMCTurnFightObjDead() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightObjDead.Cmd,m_NAtagMCTurnFightObjDead.SubCmd))] = m_NAtagMCTurnFightObjDead + + +#------------------------------------------------------ +# B4 23 回合战斗角色复活 #tagMCTurnFightObjReborn + +class tagMCTurnFightObjReborn(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("ObjID", c_int), + ("ObjType", c_ubyte), + ("HP", c_int), # 复活后血量,求余亿部分 + ("HPEx", c_int), # 复活后血量,整除亿部分 + ("RebornType", c_ubyte), # 复活方式:1-灵宠技能复活;2-待扩展 + ("RebornValue1", c_int), # 复活方式对应值1,由复活方式决定其值意义 + ("RebornValue2", c_int), # 复活方式对应值2 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB4 + self.SubCmd = 0x23 + return + + def ReadData(self, stringData, _pos=0, _len=0): + self.Clear() + memmove(addressof(self), stringData[_pos:], self.GetLength()) + return _pos + self.GetLength() + + def Clear(self): + self.Cmd = 0xB4 + self.SubCmd = 0x23 + self.ObjID = 0 + self.ObjType = 0 + self.HP = 0 + self.HPEx = 0 + self.RebornType = 0 + self.RebornValue1 = 0 + self.RebornValue2 = 0 + return + + def GetLength(self): + return sizeof(tagMCTurnFightObjReborn) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B4 23 回合战斗角色复活 //tagMCTurnFightObjReborn: + Cmd:%s, + SubCmd:%s, + ObjID:%d, + ObjType:%d, + HP:%d, + HPEx:%d, + RebornType:%d, + RebornValue1:%d, + RebornValue2:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.ObjID, + self.ObjType, + self.HP, + self.HPEx, + self.RebornType, + self.RebornValue1, + self.RebornValue2 + ) + return DumpString + + +m_NAtagMCTurnFightObjReborn=tagMCTurnFightObjReborn() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightObjReborn.Cmd,m_NAtagMCTurnFightObjReborn.SubCmd))] = m_NAtagMCTurnFightObjReborn + + +#------------------------------------------------------ +# B4 20 回合制战斗状态 #tagMCTurnFightState + +class tagMCTurnFightState(Structure): + Head = tagHead() + MapID = 0 #(DWORD MapID)// 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) + FuncLineID = 0 #(WORD FuncLineID) + PlayerID = 0 #(DWORD PlayerID)// 对应玩家ID,可为0,某些功能可能有用,如竞技场 + State = 0 #(BYTE State)// 0-起始状态标记;1-准备完毕;2-战斗中;3-战斗结束;4-结算奖励;5-结束状态标记 + TurnNum = 0 #(BYTE TurnNum)// 当前轮次 + TurnMax = 0 #(BYTE TurnMax)// 最大轮次 + Len = 0 #(WORD Len) + Msg = "" #(String Msg)//size = Len + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TurnNum,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TurnMax,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.Msg,_pos = CommFunc.ReadString(_lpData, _pos,self.Len) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x20 self.MapID = 0 self.FuncLineID = 0 self.PlayerID = 0 self.State = 0 self.TurnNum = 0 self.TurnMax = 0 + self.Len = 0 + self.Msg = "" return def GetLength(self): - return sizeof(tagMCTurnFightState) + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 4 + length += 1 + length += 1 + length += 1 + length += 2 + length += len(self.Msg) + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteWORD(data, self.FuncLineID) + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.State) + data = CommFunc.WriteBYTE(data, self.TurnNum) + data = CommFunc.WriteBYTE(data, self.TurnMax) + data = CommFunc.WriteWORD(data, self.Len) + data = CommFunc.WriteString(data, self.Len, self.Msg) + return data def OutputString(self): - DumpString = '''// B4 20 回合制战斗状态 //tagMCTurnFightState: - Cmd:%s, - SubCmd:%s, + DumpString = ''' + Head:%s, MapID:%d, FuncLineID:%d, PlayerID:%d, State:%d, TurnNum:%d, - TurnMax:%d + TurnMax:%d, + Len:%d, + Msg:%s '''\ %( - self.Cmd, - self.SubCmd, + self.Head.OutputString(), self.MapID, self.FuncLineID, self.PlayerID, self.State, self.TurnNum, - self.TurnMax + self.TurnMax, + self.Len, + self.Msg ) return DumpString m_NAtagMCTurnFightState=tagMCTurnFightState() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightState.Cmd,m_NAtagMCTurnFightState.SubCmd))] = m_NAtagMCTurnFightState +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTurnFightState.Head.Cmd,m_NAtagMCTurnFightState.Head.SubCmd))] = m_NAtagMCTurnFightState #------------------------------------------------------ -- Gitblit v1.8.0