Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. from engines.server import server
  2. from players import PlayerGenerator
  3. from entities.helpers import index_from_edict
  4. from core import AutoUnload
  5. from listeners import on_client_active_listener_manager
  6. from listeners import on_client_disconnect_listener_manager
  7.  
  8. from .entity import Player
  9.  
  10. class PlayerDictionary(AutoUnload, dict):
  11.     def __init__(self):
  12.  
  13.         # Plugin was loaded.
  14.         on_client_active_listener_manager.register_listener(
  15.             self._on_client_active
  16.         )
  17.         on_client_disconnect_listener_manager.register_listener(
  18.             self._on_client_disconnect
  19.         )
  20.  
  21.         # Init the dictionary.
  22.         super().__init__()
  23.  
  24.         # If plugin was loaded during the game.
  25.         if server.is_active():
  26.  
  27.             # Init players.
  28.             for edict in PlayerGenerator():
  29.                 index = index_from_edict(edict)
  30.                 self[index] = Player(index)
  31.  
  32.     # Player fully loaded.
  33.     def _on_client_active(self, index):
  34.         self[index] = Player(index)
  35.  
  36.     # Player disconnected.
  37.     def _on_client_disconnect(self, index):
  38.  
  39.         # Was player fully loaded?
  40.         if index in self:
  41.  
  42.             # Remove the player from the dictionary.
  43.             del self[index]
  44.  
  45.     # Get spectators for specific player.
  46.     def get_spectators(self, target):
  47.         return [player for player in self.values() if player is not target and player.dead and player.observer_target == target.inthandle and player.observer_mode != 7]
  48.  
  49.     # Plugin was unloaded.
  50.     def _unload_instance(self):
  51.         on_client_active_listener_manager.unregister_listener(
  52.             self._on_client_active
  53.         )
  54.         on_client_disconnect_listener_manager.unregister_listener(
  55.             self._on_client_disconnect
  56.         )