diff options
| author | Cerapter <cerap@protonmail.com> | 2018-09-03 15:55:34 +0200 |
|---|---|---|
| committer | Cerapter <cerap@protonmail.com> | 2018-09-03 15:55:34 +0200 |
| commit | becf58dd4f9432364a64dc7af006b3938245127b (patch) | |
| tree | 90eea8f6e0cf4da3a3cf3fb2d9285b065e31d7b4 /server | |
| parent | e45e138fb5c8856e3047b5c60c957782a90f5598 (diff) | |
Area list added.
- Accessible with the ingame A/M button, or by `/switch_am`.
- The music list now only lists music.
- The area list lists the areas.
- It describes general area properties (playercount, status, CM,
locked).
- Automatically updates as these change.
- Clicking on an area behaves the same way as clicking on an area in the
music list previously did.
Diffstat (limited to 'server')
| -rw-r--r-- | server/area_manager.py | 32 | ||||
| -rw-r--r-- | server/client_manager.py | 6 | ||||
| -rw-r--r-- | server/commands.py | 3 | ||||
| -rw-r--r-- | server/tsuserver.py | 34 |
4 files changed, 75 insertions, 0 deletions
diff --git a/server/area_manager.py b/server/area_manager.py index ad36362d..6e024f6d 100644 --- a/server/area_manager.py +++ b/server/area_manager.py @@ -71,12 +71,14 @@ class AreaManager: def new_client(self, client): self.clients.add(client) + self.server.area_manager.send_arup_players() def remove_client(self, client): self.clients.remove(client) if client.is_cm: client.is_cm = False self.owned = False + self.server.area_manager.send_arup_cms() if self.is_locked: self.unlock() @@ -84,6 +86,7 @@ class AreaManager: self.is_locked = False self.blankposting_allowed = True self.invite_list = {} + self.server.area_manager.send_arup_lock() self.send_host_message('This area is open now.') def is_char_available(self, char_id): @@ -240,6 +243,7 @@ class AreaManager: if value.lower() == 'lfp': value = 'looking-for-players' self.status = value.upper() + self.server.area_manager.send_arup_status() def change_doc(self, doc='No document.'): self.doc = doc @@ -333,3 +337,31 @@ class AreaManager: return name[:3].upper() else: return name.upper() + + def send_arup_players(self): + players_list = [0] + for area in self.areas: + players_list.append(len(area.clients)) + self.server.send_arup(players_list) + + def send_arup_status(self): + status_list = [1] + for area in self.areas: + status_list.append(area.status) + self.server.send_arup(status_list) + + def send_arup_cms(self): + cms_list = [2] + for area in self.areas: + cm = 'FREE' + for client in area.clients: + if client.is_cm: + cm = client.get_char_name() + cms_list.append(cm) + self.server.send_arup(cms_list) + + def send_arup_lock(self): + lock_list = [3] + for area in self.areas: + lock_list.append(area.is_locked) + self.server.send_arup(lock_list) diff --git a/server/client_manager.py b/server/client_manager.py index bb2bcd92..b1f87850 100644 --- a/server/client_manager.py +++ b/server/client_manager.py @@ -299,6 +299,12 @@ class ClientManager: self.send_command('BN', self.area.background) self.send_command('LE', *self.area.get_evidence_list(self)) self.send_command('MM', 1) + + self.server.area_manager.send_arup_players() + self.server.area_manager.send_arup_status() + self.server.area_manager.send_arup_cms() + self.server.area_manager.send_arup_lock() + self.send_command('DONE') def char_select(self): diff --git a/server/commands.py b/server/commands.py index 0bd9c556..134b685a 100644 --- a/server/commands.py +++ b/server/commands.py @@ -691,6 +691,7 @@ def ooc_cmd_cm(client, arg): client.is_cm = True if client.area.evidence_mod == 'HiddenCM': client.area.broadcast_evidence_list() + client.server.area_manager.send_arup_cms() client.area.send_host_message('{} is CM in this area now.'.format(client.get_char_name())) def ooc_cmd_uncm(client, arg): @@ -700,6 +701,7 @@ def ooc_cmd_uncm(client, arg): client.area.blankposting_allowed = True if client.area.is_locked: client.area.unlock() + client.server.area_manager.send_arup_cms() client.area.send_host_message('{} is no longer CM in this area.'.format(client.get_char_name())) else: raise ClientError('You cannot give up being the CM when you are not one') @@ -718,6 +720,7 @@ def ooc_cmd_area_lock(client, arg): client.send_host_message('Area is already locked.') if client.is_cm: client.area.is_locked = True + client.server.area_manager.send_arup_lock() client.area.send_host_message('Area is locked.') for i in client.area.clients: client.area.invite_list[i.id] = None diff --git a/server/tsuserver.py b/server/tsuserver.py index 97b4b905..8f5bf859 100644 --- a/server/tsuserver.py +++ b/server/tsuserver.py @@ -258,6 +258,40 @@ class TsuServer3: if self.config['use_district']: self.district_client.send_raw_message('NEED#{}#{}#{}#{}'.format(char_name, area_name, area_id, msg)) + def send_arup(self, args): + """ Updates the area properties on the Case Café Custom Client. + + Playercount: + ARUP#0#<area1_p: int>#<area2_p: int>#... + Status: + ARUP#1##<area1_s: string>##<area2_s: string>#... + CM: + ARUP#2##<area1_cm: string>##<area2_cm: string>#... + Lockedness: + ARUP#3##<area1_l: bool>##<area2_l: bool>#... + + """ + if len(args) < 2: + # An argument count smaller than 2 means we only got the identifier of ARUP. + return + if args[0] not in (0,1,2,3): + return + + if args[0] in (0, 3): + for part_arg in args[1:]: + try: + sanitised = int(part_arg) + except: + return + elif args[0] in (1, 2): + for part_arg in args[1:]: + try: + sanitised = str(part_arg) + except: + return + + self.send_all_cmd_pred('ARUP', *args, pred=lambda x: True) + def refresh(self): with open('config/config.yaml', 'r') as cfg: self.config['motd'] = yaml.load(cfg)['motd'].replace('\\n', ' \n') |
