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_on_me(self): players, creatures, gobjects = GridManager.get_surrounding_objects( self, [ ObjectTypes.TYPE_PLAYER, ObjectTypes.TYPE_UNIT, ObjectTypes.TYPE_GAMEOBJECT ]) # At this point, all objects aren't synced unless proven otherwise for guid, object_info in list(self.objects_in_range.items()): self.objects_in_range[guid]['synced'] = False for guid, player in players.items(): if self.guid != guid: if guid not in self.objects_in_range: update_packet = player.generate_proper_update_packet( create=True) self.session.request.sendall(update_packet) self.session.request.sendall( NameQueryHandler.get_query_details(player.player)) self.objects_in_range[guid] = { 'object': player, 'synced': True } for guid, creature in creatures.items(): if creature.is_spawned: if guid not in self.objects_in_range: update_packet = UpdatePacketFactory.compress_if_needed( PacketWriter.get_packet( OpCode.SMSG_UPDATE_OBJECT, creature.get_full_update_packet(is_self=False))) self.session.request.sendall(update_packet) self.session.request.sendall(creature.query_details()) self.objects_in_range[guid] = {'object': creature, 'synced': 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_full_update_packet(is_self=False))) self.session.request.sendall(update_packet) self.session.request.sendall(gobject.query_details()) self.objects_in_range[guid] = {'object': gobject, 'synced': True} for guid, object_info in list(self.objects_in_range.items()): if not object_info['synced']: self.destroy_near_object(guid, skip_check=True)