diff options
| author | Cerapter <cerap@protonmail.com> | 2018-09-15 02:33:18 +0200 |
|---|---|---|
| committer | Cerapter <cerap@protonmail.com> | 2018-09-15 02:33:18 +0200 |
| commit | fcd8f5b5abb2329aded120007319d581908c8a69 (patch) | |
| tree | 5a3530435821555b51555768725bde1e267bd9a0 /server/area_manager.py | |
| parent | 86f91ba3e862b683becbc2d35539bc06a636c925 (diff) | |
Areas can now be spectatable, too.
- Makes it so that people can join, but can't type IC unless invited.
- The CM can set it with `/area_spectate`.
Diffstat (limited to 'server/area_manager.py')
| -rw-r--r-- | server/area_manager.py | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/server/area_manager.py b/server/area_manager.py index 23c43397..d8e60d0b 100644 --- a/server/area_manager.py +++ b/server/area_manager.py @@ -22,6 +22,7 @@ import yaml from server.exceptions import AreaError from server.evidence import EvidenceList +from enum import Enum class AreaManager: @@ -63,13 +64,18 @@ class AreaManager: self.evidence_list.append(Evidence("weeeeeew", "desc3", "3.png")) """ - self.is_locked = False + self.is_locked = self.Locked.FREE self.blankposting_allowed = True self.non_int_pres_only = non_int_pres_only self.jukebox = jukebox self.jukebox_votes = [] self.jukebox_prev_char_id = -1 + class Locked(Enum): + FREE = 1, + SPECTATABLE = 2, + LOCKED = 3 + def new_client(self, client): self.clients.add(client) self.server.area_manager.send_arup_players() @@ -80,15 +86,29 @@ class AreaManager: client.is_cm = False self.owned = False self.server.area_manager.send_arup_cms() - if self.is_locked: + if self.is_locked != self.Locked.FREE: self.unlock() def unlock(self): - self.is_locked = False + self.is_locked = self.Locked.FREE self.blankposting_allowed = True self.invite_list = {} self.server.area_manager.send_arup_lock() self.send_host_message('This area is open now.') + + def spectator(self): + self.is_locked = self.Locked.SPECTATABLE + for i in self.clients: + self.invite_list[i.id] = None + self.server.area_manager.send_arup_lock() + self.send_host_message('This area is spectatable now.') + + def lock(self): + self.is_locked = self.Locked.LOCKED + for i in self.clients: + self.invite_list[i.id] = None + self.server.area_manager.send_arup_lock() + self.send_host_message('This area is locked now.') def is_char_available(self, char_id): return char_id not in [x.char_id for x in self.clients] @@ -215,7 +235,7 @@ class AreaManager: def can_send_message(self, client): - if self.is_locked and not client.is_mod and not client.id in self.invite_list: + if self.is_locked != self.Locked.FREE and not client.is_mod and not client.id in self.invite_list: client.send_host_message('This is a locked area - ask the CM to speak.') return False return (time.time() * 1000.0 - self.next_message_time) > 0 @@ -366,5 +386,5 @@ class AreaManager: def send_arup_lock(self): lock_list = [3] for area in self.areas: - lock_list.append(area.is_locked) + lock_list.append(area.is_locked.name) self.server.send_arup(lock_list) |
