| | |
| | | ("ObjID", c_int),
|
| | | ("AttackType", c_ubyte), #爆击, miss
|
| | | ("HurtHP", c_int),
|
| | | ("HurtHPEx", c_int), |
| | | ("CurHP", c_int),
|
| | | ("CurHPEx", c_int),
|
| | | ]
|
| | |
| | | self.ObjID = 0
|
| | | self.AttackType = 0
|
| | | self.HurtHP = 0
|
| | | self.HurtHPEx = 0
|
| | | self.CurHP = 0
|
| | | self.CurHPEx = 0
|
| | | return
|
| | |
| | | ObjID:%d,
|
| | | AttackType:%d,
|
| | | HurtHP:%d,
|
| | | HurtHPEx:%d,
|
| | | CurHP:%d,
|
| | | CurHPEx:%d
|
| | | '''\
|
| | |
| | | self.ObjID,
|
| | | self.AttackType,
|
| | | self.HurtHP,
|
| | | self.HurtHPEx,
|
| | | self.CurHP,
|
| | | self.CurHPEx
|
| | | )
|
| | |
| | | ("SubCmd", c_ubyte),
|
| | | ("ObjID", c_int),
|
| | | ("ObjType", c_ubyte),
|
| | | ("RefreshType", c_ubyte), |
| | | ("RefreshType", c_ushort), |
| | | ("Value", c_int),
|
| | | ("ValueEx", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.ObjType = 0
|
| | | self.RefreshType = 0
|
| | | self.Value = 0
|
| | | self.ValueEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | ObjID:%d,
|
| | | ObjType:%d,
|
| | | RefreshType:%d,
|
| | | Value:%d
|
| | | Value:%d,
|
| | | ValueEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | |
| | | self.ObjID,
|
| | | self.ObjType,
|
| | | self.RefreshType,
|
| | | self.Value
|
| | | self.Value,
|
| | | self.ValueEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | | m_NAtagNPCDie=tagNPCDie()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagNPCDie.Cmd,m_NAtagNPCDie.SubCmd))] = m_NAtagNPCDie
|
| | |
|
| | | #04 06 NPC出现#tagNPCAppear
|
| | |
|
| | | class tagNPCAppear(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ObjID", c_int), |
| | | ("NPCID", c_int), |
| | | ("NPCHP", c_int), |
| | | ("NPCHPEx", c_int), #扩展超过20E血量
|
| | | ("MaxHP", c_int), #成长型NPC需要通知
|
| | | ("MaxHPEx", c_int), #超过20E血量
|
| | | ("CurLV", c_ushort), #成长型NPC
|
| | | ("PosX", c_ushort), |
| | | ("PosY", c_ushort), |
| | | ("Speed", c_ushort), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0x04
|
| | | 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 = 0x04
|
| | | self.SubCmd = 0x06
|
| | | self.ObjID = 0
|
| | | self.NPCID = 0
|
| | | self.NPCHP = 0
|
| | | self.NPCHPEx = 0
|
| | | self.MaxHP = 0
|
| | | self.MaxHPEx = 0
|
| | | self.CurLV = 0
|
| | | self.PosX = 0
|
| | | self.PosY = 0
|
| | | self.Speed = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagNPCAppear)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//04 06 NPC出现//tagNPCAppear:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ObjID:%d,
|
| | | NPCID:%d,
|
| | | NPCHP:%d,
|
| | | NPCHPEx:%d,
|
| | | MaxHP:%d,
|
| | | MaxHPEx:%d,
|
| | | CurLV:%d,
|
| | | PosX:%d,
|
| | | PosY:%d,
|
| | | Speed:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ObjID,
|
| | | self.NPCID,
|
| | | self.NPCHP,
|
| | | self.NPCHPEx,
|
| | | self.MaxHP,
|
| | | self.MaxHPEx,
|
| | | self.CurLV,
|
| | | self.PosX,
|
| | | self.PosY,
|
| | | self.Speed
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagNPCAppear=tagNPCAppear()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagNPCAppear.Cmd,m_NAtagNPCAppear.SubCmd))] = m_NAtagNPCAppear
|
| | |
|
| | | #04 07 NPC消失#tagNPCDisappear
|
| | |
|
| | | class tagNPCDisappear(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(WORD Count)
|
| | | NPCID = list() #(vector<DWORD> NPCID)//size = Count
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0x04
|
| | | self.Head.SubCmd = 0x07
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.NPCID.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0x04
|
| | | self.Head.SubCmd = 0x07
|
| | | self.Count = 0
|
| | | self.NPCID = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 2
|
| | | length += 4 * self.Count
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteDWORD(data, self.NPCID[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | NPCID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagNPCDisappear=tagNPCDisappear()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagNPCDisappear.Head.Cmd,m_NAtagNPCDisappear.Head.SubCmd))] = m_NAtagNPCDisappear
|
| | |
|
| | | #04 23 对象状态刷新通知(只显示)#tagObjPropertyRefreshView
|
| | |
|
| | | class tagObjPropertyRefreshView(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ObjID", c_int), #对象ID
|
| | | ("ObjType", c_ubyte), #对象类型
|
| | | ("SkillID", c_int), #技能ID
|
| | | ("DiffValue", c_int), #ֵ
|
| | | ("DiffValueEx", c_int), #超亿值
|
| | | ("AttackType", c_ubyte), #攻击类型
|
| | | ("SrcObjID", c_int), #飘血来源
|
| | | ("SrcObjType", c_ubyte), |
| | | ("HP", c_int), #剩余血量
|
| | | ("HPEx", c_int), #剩余血量 亿
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0x04
|
| | | 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 = 0x04
|
| | | self.SubCmd = 0x23
|
| | | self.ObjID = 0
|
| | | self.ObjType = 0
|
| | | self.SkillID = 0
|
| | | self.DiffValue = 0
|
| | | self.DiffValueEx = 0
|
| | | self.AttackType = 0
|
| | | self.SrcObjID = 0
|
| | | self.SrcObjType = 0
|
| | | self.HP = 0
|
| | | self.HPEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagObjPropertyRefreshView)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//04 23 对象状态刷新通知(只显示)//tagObjPropertyRefreshView:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ObjID:%d,
|
| | | ObjType:%d,
|
| | | SkillID:%d,
|
| | | DiffValue:%d,
|
| | | DiffValueEx:%d,
|
| | | AttackType:%d,
|
| | | SrcObjID:%d,
|
| | | SrcObjType:%d,
|
| | | HP:%d,
|
| | | HPEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ObjID,
|
| | | self.ObjType,
|
| | | self.SkillID,
|
| | | self.DiffValue,
|
| | | self.DiffValueEx,
|
| | | self.AttackType,
|
| | | self.SrcObjID,
|
| | | self.SrcObjType,
|
| | | self.HP,
|
| | | self.HPEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagObjPropertyRefreshView=tagObjPropertyRefreshView()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagObjPropertyRefreshView.Cmd,m_NAtagObjPropertyRefreshView.SubCmd))] = m_NAtagObjPropertyRefreshView
|
| | |
|
| | | #06 02 普通攻击#tagObjBaseAttack
|
| | |
|
| | | class tagObjBaseAttack(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("AttackerID", c_int), |
| | | ("AttackerObjType", c_ubyte), |
| | | ("BattleType", c_ubyte), #攻击类型 物理/魔法
|
| | | ("ObjID", c_int), #对象ID
|
| | | ("ObjType", c_ubyte), #对象类型
|
| | | ("AttackType", c_ubyte), #普攻, 闪躲, 致命 类型
|
| | | ("Value", c_int), |
| | | ("ValueEx", c_int), |
| | | ("RemainHP", c_int), #对方剩余的血
|
| | | ("RemainHPEx", c_int), #对方剩余的血, 超亿支持
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0x06
|
| | | self.SubCmd = 0x02
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0x06
|
| | | self.SubCmd = 0x02
|
| | | self.AttackerID = 0
|
| | | self.AttackerObjType = 0
|
| | | self.BattleType = 0
|
| | | self.ObjID = 0
|
| | | self.ObjType = 0
|
| | | self.AttackType = 0
|
| | | self.Value = 0
|
| | | self.ValueEx = 0
|
| | | self.RemainHP = 0
|
| | | self.RemainHPEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagObjBaseAttack)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//06 02 普通攻击//tagObjBaseAttack:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | AttackerID:%d,
|
| | | AttackerObjType:%d,
|
| | | BattleType:%d,
|
| | | ObjID:%d,
|
| | | ObjType:%d,
|
| | | AttackType:%d,
|
| | | Value:%d,
|
| | | ValueEx:%d,
|
| | | RemainHP:%d,
|
| | | RemainHPEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.AttackerID,
|
| | | self.AttackerObjType,
|
| | | self.BattleType,
|
| | | self.ObjID,
|
| | | self.ObjType,
|
| | | self.AttackType,
|
| | | self.Value,
|
| | | self.ValueEx,
|
| | | self.RemainHP,
|
| | | self.RemainHPEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagObjBaseAttack=tagObjBaseAttack()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagObjBaseAttack.Cmd,m_NAtagObjBaseAttack.SubCmd))] = m_NAtagObjBaseAttack |