def update_surrounding(self): self.send_update_surrounding() GridManager.send_surrounding(NameQueryHandler.get_query_details( self.player), self, include_self=True) players, creatures, gobjects = GridManager.get_surrounding_objects( self, [ ObjectTypes.TYPE_PLAYER, ObjectTypes.TYPE_UNIT, ObjectTypes.TYPE_GAMEOBJECT ]) for guid, player in players.items(): if self.guid != guid: if guid not in self.objects_in_range: update_packet = UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, player.get_update_packet( update_type=UpdateTypes.UPDATE_FULL, is_self=False))) self.session.request.sendall(update_packet) self.session.request.sendall( NameQueryHandler.get_query_details(player.player)) self.objects_in_range[guid] = {'object': player, 'near': True} for guid, creature in creatures.items(): if guid not in self.objects_in_range: update_packet = UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, creature.get_update_packet( update_type=UpdateTypes.UPDATE_FULL, is_self=False))) self.session.request.sendall(update_packet) self.session.request.sendall(creature.query_details()) self.objects_in_range[guid] = {'object': creature, 'near': True} for guid, gobject in gobjects.items(): if guid not in self.objects_in_range: update_packet = UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, gobject.get_update_packet( update_type=UpdateTypes.UPDATE_FULL, is_self=False))) self.session.request.sendall(update_packet) self.session.request.sendall(gobject.query_details()) self.objects_in_range[guid] = {'object': gobject, 'near': True} for guid, object_info in list(self.objects_in_range.items()): if not object_info['near']: self.session.request.sendall( self.objects_in_range[guid]['object'].get_destroy_packet()) del self.objects_in_range[guid] else: self.objects_in_range[guid]['near'] = False
def update_surrounding(self, destroy=False): if destroy: grid = GRIDS[self.current_grid] for guid, player in list(grid.players.items()): if player.guid != self.guid: self.session.request.sendall(player.get_destroy_packet()) update_packet = UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, self.get_update_packet(update_type=UpdateTypes.UPDATE_FULL, is_self=False))) GridManager.send_surrounding(update_packet, self, include_self=False) GridManager.send_surrounding(NameQueryHandler.get_query_details( self.player), self, include_self=True) for guid, player in list( GridManager.get_surrounding_players(self).items()): if self.guid != guid: self.session.request.sendall( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, player.get_update_packet( update_type=UpdateTypes.UPDATE_FULL, is_self=False))) self.session.request.sendall( NameQueryHandler.get_query_details(player.player))
def send_update_surrounding(self, update_type=UpdateTypes.UPDATE_FULL): update_packet = UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, self.get_update_packet(update_type=update_type, is_self=False))) GridManager.send_surrounding(update_packet, self, include_self=False)
def send_update_self(self, is_self=True, update_type=UpdateTypes.UPDATE_FULL): self.session.request.sendall( UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, self.get_update_packet(update_type=update_type.UPDATE_FULL, is_self=is_self))))
def send_single_item_update(self, world_session, item, is_self): update_packet = UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, item.get_full_update_packet(is_self=False))) if is_self: world_session.request.sendall(update_packet) world_session.request.sendall(item.query_details()) else: GridManager.send_surrounding(update_packet, world_session.player_mgr, include_self=False) GridManager.send_surrounding(item.query_details(), world_session.player_mgr, include_self=False)
def handle(world_session, socket, reader): if len(reader.data) < 8: # Avoid handling wrong player login packet return -1 guid = unpack('<Q', reader.data[:8])[0] world_session.player_mgr = PlayerManager( RealmDatabaseManager.character_get_by_guid(guid), world_session) world_session.player_mgr.session = world_session if not world_session.player_mgr.player: Logger.anticheat('Character with wrong guid (%u) tried to login.' % guid) return -1 socket.sendall(PacketWriter.get_packet(OpCode.SMSG_LOGIN_SETTIMESPEED, PlayerLoginHandler._get_login_timespeed())) world_session.player_mgr.load_skills() world_session.player_mgr.load_spells() socket.sendall(world_session.player_mgr.get_tutorial_packet()) socket.sendall(world_session.player_mgr.get_initial_spells()) socket.sendall(world_session.player_mgr.get_action_buttons()) # MotD ChatManager.send_system_message(world_session, config.Server.General.motd) # Clear Who list on login, otherwise the last search will appear PlayerLoginHandler._clear_who_list(socket) world_session.player_mgr.inventory.load_items() update_packet = UpdatePacketFactory.compress_if_needed(PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, world_session.player_mgr.get_update_packet(update_type=UpdateTypes.UPDATE_FULL))) socket.sendall(update_packet) PlayerLoginHandler._send_cinematic(world_session, world_session.player_mgr.player, socket) world_session.player_mgr.complete_login() return 0
def send_update_surrounding(self, is_self=False, include_self=False): update_packet = UpdatePacketFactory.compress_if_needed(PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, self.get_full_update_packet(is_self=is_self))) GridManager.send_surrounding(update_packet, self, include_self=include_self)
def send_update_self(self, is_self=True): self.session.request.sendall(UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, self.get_full_update_packet(is_self=is_self))))