Exemplo n.º 1
0
 async def process(self) -> tuple:
     response = pack(
         '<2I',
         Timer.get_ms_time(),
         0
     )
     return WorldOpCode.SMSG_QUERY_TIME_RESPONSE, [response]
Exemplo n.º 2
0
    async def process(self):
        if self.opcode == WorldOpCode.CMSG_NAME_QUERY:
            # we send this to show player info for another players; to allow chat
            guid = int.from_bytes(self.packet[6:14], 'little')

            await QueuesRegistry.name_query_queue.put((self.player, guid))

            name_bytes = self.player.name.encode('utf-8') + b'\x00'
            response = pack(
                '<Q{name_len}sB3IB'.format(name_len=len(name_bytes)),
                self.player.guid,
                name_bytes,
                0,
                self.player.race,
                self.player.gender,
                self.player.char_class,
                0
            )
            return WorldOpCode.SMSG_NAME_QUERY_RESPONSE, response

        elif self.opcode == WorldOpCode.CMSG_QUERY_TIME:
            response = pack(
                '<2I',
                Timer.get_ms_time(),
                0
            )
            return WorldOpCode.SMSG_QUERY_TIME_RESPONSE, response

        else:
            return None, None
Exemplo n.º 3
0
    async def run(self):
        while True:
            self.last_update = Timer.get_ms_time()

            self._register_tasks()

            await asyncio.sleep(self.heartbeat)
Exemplo n.º 4
0
    async def process(self):
        self._parse_packet()

        player = self.temp_ref.player

        response = player.packed_guid + pack(
            '<IBI4ff',
            self.move_flags,  # unit movement flags
            self.move_flags2,  # extra move flags
            Timer.get_ms_time(),
            self.position.x,
            self.position.y,
            self.position.z,
            self.position.orientation,
            0)

        player.position = self.position

        # await web_data_queue.put(json.dumps({
        #     'x': self.position.x,
        #     'y': self.position.y,
        #     'z': self.position.z,
        #     'orientation': self.position.orientation,
        # }))

        # await players_queue.put(player)

        await asyncio.sleep(0)

        # should return nothing
        return None, None
Exemplo n.º 5
0
    async def run(self):
        while True:
            self.last_update = Timer.get_ms_time()

            try:
                await asyncio.wait_for(self.update(), timeout=1.0)
            except TimeoutError:
                Logger.warning('[World Manager]: Timeout...')
            finally:
                await asyncio.sleep(self.heartbeat)
Exemplo n.º 6
0
    def _get_movement_info(self) -> bytes:
        data = bytes()

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

        if self.update_flags & UpdateObjectFlags.UPDATEFLAG_LIVING.value:
            if self.object_type == ObjectType.PLAYER.value:
                # TODO: check for transport
                self.movement_flags &= ~MovementFlags.ONTRANSPORT.value
            elif self.object_type == ObjectType.UNIT.value:
                self.movement_flags &= ~MovementFlags.ONTRANSPORT.value

            data += pack('<IBI', self.movement_flags, self.movement_flags2,
                         Timer.get_ms_time())

        if self.update_flags & UpdateObjectFlags.UPDATEFLAG_HAS_POSITION.value:
            # TODO: check if transport
            data += self.update_object.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.update_object.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.update_object.high_guid)
            else:
                data += pack('<I', 0x00000000)  # high guid for unit or player

        return data
Exemplo n.º 7
0
    async def run(self):
        self._register_tasks()

        while True:
            self.last_update = Timer.get_ms_time()
            await sleep(Config.Realm.Settings.min_timeout)