| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | OnlineType = 0 #(BYTE OnlineType)//在线状态, 0 不在线 1在线
|
| | | IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍
|
| | | ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.OnlineType = 0
|
| | | self.IsInTeam = 0
|
| | | self.ServerGroupID = 0
|
| | | self.Face = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 2
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.OnlineType)
|
| | | data = CommFunc.WriteBYTE(data, self.IsInTeam)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerGroupID)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | RealmLV:%d,
|
| | | OnlineType:%d,
|
| | | IsInTeam:%d,
|
| | | ServerGroupID:%d
|
| | | ServerGroupID:%d,
|
| | | Face:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.RealmLV,
|
| | | self.OnlineType,
|
| | | self.IsInTeam,
|
| | | self.ServerGroupID
|
| | | self.ServerGroupID,
|
| | | self.Face
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(WORD RealmLV)//境界
|
| | | OnlineType = 0 #(BYTE OnlineType)//0不在线 1在线 2脱机在线
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.OnlineType = 0
|
| | | self.Face = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 2
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteBYTE(data, self.OnlineType)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | OnlineType:%d
|
| | | OnlineType:%d,
|
| | | Face:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | |
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.OnlineType
|
| | | self.OnlineType,
|
| | | self.Face
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | class tagMCCoinToGoldCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RecordID", c_ubyte), |
| | | ("RecordID", c_ushort), |
| | | ("TodayPayCount", c_ushort), # 今日已购买次数
|
| | | ("TotalPayCount", c_int), # 累计总购买次数
|
| | | ("WeekPayCount", c_ushort), # 周总购买次数
|
| | |
| | |
|
| | | class tagMCCoinToGoldCountInfo(Structure):
|
| | | Head = tagHead()
|
| | | RecordCount = 0 #(BYTE RecordCount)
|
| | | RecordCount = 0 #(WORD RecordCount)
|
| | | CTGCountInfoList = list() #(vector<tagMCCoinToGoldCount> CTGCountInfoList)
|
| | | data = None
|
| | |
|
| | |
| | | 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)
|
| | |
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 2
|
| | | for i in range(self.RecordCount):
|
| | | length += self.CTGCountInfoList[i].GetLength()
|
| | |
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | | length += 1
|
| | | length += len(self.OrderID)
|
| | | length += 4
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += len(self.OrderInfo)
|
| | |
|
| | |
| | | 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
|
| | |
| | | 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):
|
| | |
| | | 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):
|
| | |
| | | self.ExAttr19 = 0
|
| | | self.ExAttr20 = 0
|
| | | self.HPEx = 0
|
| | | self.Face = 0
|
| | | self.RoleType = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 4
|
| | | length += 4
|
| | | length += 15
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
| | | 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):
|
| | |
| | | ExAttr18:%d,
|
| | | ExAttr19:%d,
|
| | | ExAttr20:%d,
|
| | | HPEx:%d
|
| | | HPEx:%d,
|
| | | Face:%d,
|
| | | RoleType:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.ExAttr18,
|
| | | self.ExAttr19,
|
| | | self.ExAttr20,
|
| | | self.HPEx
|
| | | self.HPEx,
|
| | | self.Face,
|
| | | self.RoleType
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ("SubCmd", c_ubyte),
|
| | | ("IsPass", c_ubyte), #是否通关副本
|
| | | ("XXZLAwardState", c_int), #修仙之路领奖状态;按二进制位存储每个任务ID是否已领取
|
| | | ("RealmLVUpAwardState", c_int), #渡劫条件领奖状态;按二进制位存储是否已领取,0-等级;1-副本关卡;2-仙树等级;3-砍树次数
|
| | | ("RealmLVUpCutTreeCnt", c_int), #渡劫条件已砍树次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.SubCmd = 0x11
|
| | | self.IsPass = 0
|
| | | self.XXZLAwardState = 0
|
| | | self.RealmLVUpAwardState = 0
|
| | | self.RealmLVUpCutTreeCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | 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
|
| | |
|
| | |
| | | class tagRefreshType(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RefreshType", c_ubyte), |
| | | ("RefreshType", c_ushort), |
| | | ("Value", c_int),
|
| | | ("ValueEx", c_int),
|
| | | ]
|
| | |
| | |
|
| | |
|
| | | 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
|
| | |
| | |
|
| | | 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()
|
| | |
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.GainItemCount):
|
| | | length += self.GainItemList[i].GetLength()
|
| | |
| | |
|
| | | 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())
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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
|
| | | 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)
|
| | | 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()
|
| | | 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
|
| | |
|
| | | 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])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | WorkerCount:%d,
|
| | | EnergyUsed:%d,
|
| | | RefreshCount:%d,
|
| | | RefreshCountSuper:%d,
|
| | | TreasureCount:%d,
|
| | | TreasureState:%s,
|
| | | TreasureAward:%s,
|
| | | TreasureProgress:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.WorkerCount,
|
| | | self.EnergyUsed,
|
| | | self.RefreshCount,
|
| | | self.RefreshCountSuper,
|
| | | self.TreasureCount,
|
| | | "...",
|
| | | "...",
|
| | | "..."
|
| | | )
|
| | | 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):
|
| | |
| | |
|
| | | m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 10 当前任务信息 #tagMCTaskInfo
|
| | |
|
| | | class tagMCTaskInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("TaskID", c_int), # 任务ID
|
| | | ("CurValue", c_int), # 当前进度值
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x10
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x10
|
| | | self.TaskID = 0
|
| | | self.CurValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCTaskInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 10 当前任务信息 //tagMCTaskInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | TaskID:%d,
|
| | | CurValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.TaskID,
|
| | | self.CurValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCTaskInfo=tagMCTaskInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Cmd,m_NAtagMCTaskInfo.SubCmd))] = m_NAtagMCTaskInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|