| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("BeginTime", c_int), #开始计时时间
|
| | | ("BuffTime", c_int), #buff剩余时间
|
| | | ("BuffAddRate", c_int), #buff加成万分率
|
| | | ("CurExp", c_int), #当前总经验
|
| | | ("CurExpPoint", c_int), #当前总经验点
|
| | | ]
|
| | |
| | | self.Cmd = 0xA3
|
| | | self.SubCmd = 0x27
|
| | | self.BeginTime = 0
|
| | | self.BuffTime = 0
|
| | | self.BuffAddRate = 0
|
| | | self.CurExp = 0
|
| | | self.CurExpPoint = 0
|
| | | return
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | BeginTime:%d,
|
| | | BuffTime:%d,
|
| | | BuffAddRate:%d,
|
| | | CurExp:%d,
|
| | | CurExpPoint:%d
|
| | | '''\
|
| | |
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.BeginTime,
|
| | | self.BuffTime,
|
| | | self.BuffAddRate,
|
| | | self.CurExp,
|
| | | self.CurExpPoint
|
| | | )
|
| | |
| | | #------------------------------------------------------
|
| | | # A3 09 技能五行专精信息 #tagMCSkillElementInfo
|
| | |
|
| | | class tagMCSkillElementData(Structure):
|
| | | class tagMCSkillElementActiveData(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MainSkillID", c_int), # 主技能ID
|
| | | ("ElementSkillID", c_int), # 专精技能ID
|
| | | ("SkillID", c_int), # 技能ID
|
| | | ("ActiveLV", c_ubyte), # 激活等级
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.MainSkillID = 0
|
| | | self.ElementSkillID = 0
|
| | | self.SkillID = 0
|
| | | self.ActiveLV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCSkillElementData)
|
| | | return sizeof(tagMCSkillElementActiveData)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 09 技能五行专精信息 //tagMCSkillElementInfo:
|
| | | SkillID:%d,
|
| | | ActiveLV:%d
|
| | | '''\
|
| | | %(
|
| | | self.SkillID,
|
| | | self.ActiveLV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCSkillElementData(Structure):
|
| | | MainSkillID = 0 #(DWORD MainSkillID)// 主技能ID
|
| | | ElementSkillID = 0 #(DWORD ElementSkillID)// 选择的专精技能ID
|
| | | SkillCnt = 0 #(BYTE SkillCnt)// 数量
|
| | | ActiveSkill = list() #(vector<tagMCSkillElementActiveData> ActiveSkill)// 激活的技能ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.MainSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ElementSkillID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.SkillCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.SkillCnt):
|
| | | temActiveSkill = tagMCSkillElementActiveData()
|
| | | _pos = temActiveSkill.ReadData(_lpData, _pos)
|
| | | self.ActiveSkill.append(temActiveSkill)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.MainSkillID = 0
|
| | | self.ElementSkillID = 0
|
| | | self.SkillCnt = 0
|
| | | self.ActiveSkill = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | for i in range(self.SkillCnt):
|
| | | length += self.ActiveSkill[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.MainSkillID)
|
| | | data = CommFunc.WriteDWORD(data, self.ElementSkillID)
|
| | | data = CommFunc.WriteBYTE(data, self.SkillCnt)
|
| | | for i in range(self.SkillCnt):
|
| | | data = CommFunc.WriteString(data, self.ActiveSkill[i].GetLength(), self.ActiveSkill[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | MainSkillID:%d,
|
| | | ElementSkillID:%d
|
| | | ElementSkillID:%d,
|
| | | SkillCnt:%d,
|
| | | ActiveSkill:%s
|
| | | '''\
|
| | | %(
|
| | | self.MainSkillID,
|
| | | self.ElementSkillID
|
| | | self.ElementSkillID,
|
| | | self.SkillCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | | m_NAtagMCNPCShow=tagMCNPCShow()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCNPCShow.Cmd,m_NAtagMCNPCShow.SubCmd))] = m_NAtagMCNPCShow
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A7 19 查询玩家境界阶装备信息结果 #tagSCPlayerEquipCacheResult
|
| | |
|
| | | class tagSCPlayerEquipCacheResult(Structure):
|
| | | Head = tagHead()
|
| | | PlayerID = 0 #(DWORD PlayerID)//玩家ID
|
| | | EquipClassLV = 0 #(BYTE EquipClassLV)
|
| | | ItemDataSize = 0 #(WORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA7
|
| | | self.Head.SubCmd = 0x19
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EquipClassLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ItemDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA7
|
| | | self.Head.SubCmd = 0x19
|
| | | self.PlayerID = 0
|
| | | self.EquipClassLV = 0
|
| | | self.ItemDataSize = 0
|
| | | self.ItemData = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | length += 2
|
| | | length += len(self.ItemData)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteBYTE(data, self.EquipClassLV)
|
| | | data = CommFunc.WriteWORD(data, self.ItemDataSize)
|
| | | data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | PlayerID:%d,
|
| | | EquipClassLV:%d,
|
| | | ItemDataSize:%d,
|
| | | ItemData:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.PlayerID,
|
| | | self.EquipClassLV,
|
| | | self.ItemDataSize,
|
| | | self.ItemData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagSCPlayerEquipCacheResult=tagSCPlayerEquipCacheResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCPlayerEquipCacheResult.Head.Cmd,m_NAtagSCPlayerEquipCacheResult.Head.SubCmd))] = m_NAtagSCPlayerEquipCacheResult
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B1 08 开始印记流失时间 #tagMCYinjiStartTime
|
| | |
|
| | | class tagMCYinjiStartTime(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x08
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x08
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCYinjiStartTime)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
|
| | |
|
| | | class tagMCAddXianyuanCoinMsg(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 13 天星塔通关层数 #tagMCSkyTowerInfo
|
| | |
|
| | | class tagMCSkyTowerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Floor", c_int), # 已通关层
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | self.Floor = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCSkyTowerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 13 天星塔通关层数 //tagMCSkyTowerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Floor:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Floor
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSkyTowerInfo=tagMCSkyTowerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSkyTowerInfo.Cmd,m_NAtagMCSkyTowerInfo.SubCmd))] = m_NAtagMCSkyTowerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B2 02 推送提醒设置通知 #tagMCPushNotificationsSetting
|
| | |
|
| | | class tagMCPushNotificationsSetting(Structure):
|
| | |
| | |
|
| | | m_NAtagMCZhuXianBossCnt=tagMCZhuXianBossCnt()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianBossCnt.Cmd,m_NAtagMCZhuXianBossCnt.SubCmd))] = m_NAtagMCZhuXianBossCnt
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 13 诛仙塔通关层数 #tagMCZhuXianTowerInfo
|
| | |
|
| | | class tagMCZhuXianTowerInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Floor", c_int), # 已通关层
|
| | | ("LastFloor", c_int), # 上次挑战层
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x13
|
| | | self.Floor = 0
|
| | | self.LastFloor = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCZhuXianTowerInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 13 诛仙塔通关层数 //tagMCZhuXianTowerInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Floor:%d,
|
| | | LastFloor:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Floor,
|
| | | self.LastFloor
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCZhuXianTowerInfo=tagMCZhuXianTowerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianTowerInfo.Cmd,m_NAtagMCZhuXianTowerInfo.SubCmd))] = m_NAtagMCZhuXianTowerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|