aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorCerapter <cerap@protonmail.com>2018-09-03 15:55:34 +0200
committerCerapter <cerap@protonmail.com>2018-09-03 15:55:34 +0200
commitbecf58dd4f9432364a64dc7af006b3938245127b (patch)
tree90eea8f6e0cf4da3a3cf3fb2d9285b065e31d7b4 /server
parente45e138fb5c8856e3047b5c60c957782a90f5598 (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.py32
-rw-r--r--server/client_manager.py6
-rw-r--r--server/commands.py3
-rw-r--r--server/tsuserver.py34
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')