from engines.server import server
from players import PlayerGenerator
from entities.helpers import index_from_edict
from core import AutoUnload
from listeners import on_client_active_listener_manager
from listeners import on_client_disconnect_listener_manager
from .entity import Player
class PlayerDictionary(AutoUnload, dict):
def __init__(self):
# Plugin was loaded.
on_client_active_listener_manager.register_listener(
self._on_client_active
)
on_client_disconnect_listener_manager.register_listener(
self._on_client_disconnect
)
# Init the dictionary.
super().__init__()
# If plugin was loaded during the game.
if server.is_active():
# Init players.
for edict in PlayerGenerator():
index = index_from_edict(edict)
self[index] = Player(index)
# Player fully loaded.
def _on_client_active(self, index):
self[index] = Player(index)
# Player disconnected.
def _on_client_disconnect(self, index):
# Was player fully loaded?
if index in self:
# Remove the player from the dictionary.
del self[index]
# Get spectators for specific player.
def get_spectators(self, target):
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]
# Plugin was unloaded.
def _unload_instance(self):
on_client_active_listener_manager.unregister_listener(
self._on_client_active
)
on_client_disconnect_listener_manager.unregister_listener(
self._on_client_disconnect
)