async def process(self) -> tuple: response = pack( '<2I', Timer.get_ms_time(), 0 ) return WorldOpCode.SMSG_QUERY_TIME_RESPONSE, [response]
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
async def run(self): while True: self.last_update = Timer.get_ms_time() self._register_tasks() await asyncio.sleep(self.heartbeat)
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
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)
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
async def run(self): self._register_tasks() while True: self.last_update = Timer.get_ms_time() await sleep(Config.Realm.Settings.min_timeout)