Пример #1
0
    def __init__(self, packet: bytes, **kwargs):
        self.packet = packet
        self.opcode = int.from_bytes(packet[2:6], 'little')
        self.move_flags = None
        self.move_flags2 = None
        self.time = 0
        self.position = Position()
        self.transport_guid = None
        self.transport_position = Position()
        self.transport_time = 0
        self.s_pitch = 0
        self.fall_time = 0

        self.temp_ref = kwargs.pop('temp_ref', None)
        if self.temp_ref is None:
            raise Exception('[Movement Handler]: temp_ref does not exists')
Пример #2
0
    def __init__(self, **kwargs):
        self.opcode: WorldOpCode = kwargs.pop('opcode')
        self.data: bytes = kwargs.pop('data', bytes())
        self.connection: Connection = kwargs.pop('connection')

        self.movement_flags: int = MovementFlags.NONE.value
        self.movement_flags2 = 0
        self.time = 0
        self.position: Position = Position()
        self.transport_guid = 0
        self.transport_position = Position()
        self.transport_time = 0
        self.swim_pitch = float(0)
        self.fall_time = 0
        self.jump_velocity = float(0)
        self.jump_sin_angle = float(0)
        self.jump_cos_angle = float(0)
        self.jump_x_y_speed = float(0)
Пример #3
0
 def init_movement(self):
     super(UnitManager, self).init_movement()
     position = Position(x=self.world_object.x,
                         y=self.world_object.y,
                         z=self.world_object.z,
                         orientation=self.world_object.orientation,
                         map_id=self.world_object.map_id,
                         region_id=self.world_object.region.id)
     self.movement.position = position
Пример #4
0
    def __init__(self, packet: bytes, **kwargs):
        self.packet = packet
        self.opcode = WorldOpCode(int.from_bytes(packet[2:6], 'little'))

        self.movement_flags = MovementFlags.NONE.value
        self.movement_flags2 = 0
        self.time = 0
        self.position = Position()
        self.transport_guid = 0
        self.transport_position = Position()
        self.transport_time = 0
        self.swim_pitch = float(0)
        self.fall_time = 0
        self.jump_velocity = float(0)
        self.jump_sin_angle = float(0)
        self.jump_cos_angle = float(0)
        self.jump_x_y_speed = float(0)

        self.temp_ref = kwargs.pop('temp_ref', None)
        if self.temp_ref is None:
            raise Exception('[Movement Handler]: temp_ref does not exists')
Пример #5
0
    def __init__(self):
        self.update_flags = (
            UpdateObjectFlags.UPDATEFLAG_LIVING.value |
            UpdateObjectFlags.UPDATEFLAG_HAS_POSITION.value |
            UpdateObjectFlags.UPDATEFLAG_HIGHGUID.value |
            UpdateObjectFlags.UPDATEFLAG_SELF.value
        )

        self.object_type = None

        self.time = 0
        self.position = Position()
        self.transport_guid = 0
        self.transport_position = Position()
        self.swim_pitch = float(0)
        self.jump_data = JumpData()
        self.spline_elevation_unk = float(0)

        # guids
        self.low_guid = None
        self.high_guid = None
Пример #6
0
 def position(self):
     return Position(x=self.x,
                     y=self.y,
                     z=self.z,
                     orientation=self.orientation)
Пример #7
0
class Movement(object):

    def __init__(self):
        self.update_flags = (
            UpdateObjectFlags.UPDATEFLAG_LIVING.value |
            UpdateObjectFlags.UPDATEFLAG_HAS_POSITION.value |
            UpdateObjectFlags.UPDATEFLAG_HIGHGUID.value |
            UpdateObjectFlags.UPDATEFLAG_SELF.value
        )

        self.object_type = None

        self.time = 0
        self.position = Position()
        self.transport_guid = 0
        self.transport_position = Position()
        self.swim_pitch = float(0)
        self.jump_data = JumpData()
        self.spline_elevation_unk = float(0)

        # guids
        self.low_guid = None
        self.high_guid = None

    def set_update_flags(self, update_flags: int):
        self.update_flags = update_flags

    def set_object_type(self, object_type):
        self.object_type = object_type

    def set_guids(self, low_guid, high_guid):
        self.low_guid = low_guid
        self.high_guid = high_guid

    def to_bytes(self):
        data = bytes()

        move_flags = MovementFlags.NONE.value

        data += pack('<B', self.update_flags)

        if self.update_flags & UpdateObjectFlags.UPDATEFLAG_LIVING.value:
            # TODO: get actual movement flags
            if self.object_type == ObjectType.PLAYER.value:
                # TODO: check for transport
                move_flags &= ~MovementFlags.ONTRANSPORT.value
            elif self.object_type == ObjectType.UNIT.value:
                move_flags &= ~MovementFlags.ONTRANSPORT.value

            data += pack(
                '<IBI',
                move_flags,
                0,
                Timer.get_ms_time()
            )

        if self.update_flags & UpdateObjectFlags.UPDATEFLAG_HAS_POSITION.value:
            # TODO: check if transport
            data += self.position.to_bytes()

        if self.update_flags & UpdateObjectFlags.UPDATEFLAG_LIVING.value:
            # TODO: check transport, swimming and flying
            data += pack('<I', 0)               # last fall time

            movement = Config.World.Object.Unit.Player.Defaults.Movement

            data += pack(
                '<8f',
                movement.speed_walk,
                movement.speed_run,
                movement.speed_run_back,
                movement.speed_swim,
                movement.speed_swim_back,
                movement.speed_flight,
                movement.speed_flight_back,
                movement.speed_turn
            )

        if self.update_flags & UpdateObjectFlags.UPDATEFLAG_LOWGUID.value:
            if self.object_type == ObjectType.ITEM.value:
                data += pack('<I', self.low_guid)
            elif self.object_type == ObjectType.UNIT.value:
                data += pack('<I', 0x0000000B)
            elif self.object_type == ObjectType.PLAYER.value:
                if self.update_flags & UpdateObjectFlags.UPDATEFLAG_SELF.value:
                    data += ('<I', 0x00000015)
                else:
                    data += ('<I', 0x00000008)
            else:
                data += ('<I', 0x00000000)

        if self.update_flags & UpdateObjectFlags.UPDATEFLAG_HIGHGUID.value:
            # TODO: get high guid for another object types
            if self.object_type == ObjectType.ITEM.value:
                data += pack('<I', self.high_guid)
            else:
                data += pack('<I', 0x00000000) # high guid for unit or player

        return data