From ea5ddf2c37571f3fb0ed486cd4a4294b82c54b54 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Mon, 7 Dec 2020 03:27:13 +0100 Subject: [PATCH] Fix broken MusicPlayer handling. --- plomrogue/parser.py | 2 +- plomrogue/tasks.py | 14 +++++------- plomrogue/things.py | 54 +++++++++++++++++++++++++-------------------- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/plomrogue/parser.py b/plomrogue/parser.py index 22e9059..05c830f 100644 --- a/plomrogue/parser.py +++ b/plomrogue/parser.py @@ -84,7 +84,7 @@ class Parser: import string msg = msg.replace('\n', ' ') # Inserted by some tablet keyboards. legal_chars = string.digits + string.ascii_letters +\ - string.punctuation + ' ' + 'ÄäÖöÜüߧ' + 'éèáàô' + string.punctuation + ' ' + 'ÄäÖöÜüߧ' + 'éèáàô' + '–' for c in msg: if not c in legal_chars: raise ArgError('Command/message contains illegal character(s), ' diff --git a/plomrogue/tasks.py b/plomrogue/tasks.py index 1204001..f3945c2 100644 --- a/plomrogue/tasks.py +++ b/plomrogue/tasks.py @@ -154,11 +154,8 @@ class Task_INTOXICATE(Task): def do(self): self.thing.carrying.full = False self.thing.carrying.empty() - for c_id in self.thing.game.sessions: - if self.thing.game.sessions[c_id]['thing_id'] == self.thing.id_: - self.thing.game.io.send('RANDOM_COLORS', c_id) - self.thing.game.io.send('CHAT "You are drunk now."', c_id) - break + self.thing.send_msg('RANDOM_COLORS') + self.thing.send_msg('CHAT "You are drunk now."') self.thing.drunk = 10000 @@ -174,10 +171,9 @@ class Task_COMMAND(Task): def do(self): from plomrogue.misc import quote - reply = self.thing.carrying.interpret(self.args[0]) - for c_id in self.thing.game.sessions: - if self.thing.game.sessions[c_id]['thing_id'] == self.thing.id_: - self.thing.game.io.send('REPLY ' + quote(reply), c_id) + reply_lines = self.thing.carrying.interpret(self.args[0]) + for line in reply_lines: + self.thing.send_msg('REPLY ' + quote(line)) diff --git a/plomrogue/things.py b/plomrogue/things.py index d348e84..720adc0 100644 --- a/plomrogue/things.py +++ b/plomrogue/things.py @@ -194,69 +194,69 @@ class Thing_MusicPlayer(Thing): self.game.changed = True def interpret(self, command): + msg_lines = [] if command == 'HELP': - msg = 'available commands:\n' - msg += 'HELP – show this help\n' - msg += 'PLAY – toggle playback on/off\n' - msg += 'REWIND – return to start of playlist\n' - msg += 'LIST – list programmed songs, durations\n' - msg += 'SKIP – to skip to next song\n' - msg += 'REPEAT – toggle playlist repeat on/off\n' - msg += 'ADD LENGTH SONG – add SONG to playlist, with LENGTH in format "minutes:seconds", i.e. something like "0:47" or "11:02"' - return msg + msg_lines += ['available commands:'] + msg_lines += ['HELP – show this help'] + msg_lines += ['PLAY – toggle playback on/off'] + msg_lines += ['REWIND – return to start of playlist'] + msg_lines += ['LIST – list programmed songs, durations'] + msg_lines += ['SKIP – to skip to next song'] + msg_lines += ['REPEAT – toggle playlist repeat on/off'] + msg_lines += ['ADD LENGTH SONG – add SONG to playlist, with LENGTH in format "minutes:seconds", i.e. something like "0:47" or "11:02"'] + return msg_lines elif command == 'LIST': - msg = 'playlist:' + msg_lines += ['playlist:'] i = 0 for entry in self.playlist: - msg += '\n' minutes = entry[1] // 60 seconds = entry[1] % 60 if seconds < 10: seconds = '0%s' % seconds selector = 'next:' if i == self.playlist_index else ' ' - msg += '%s %s:%s – %s' % (selector, minutes, seconds, entry[0]) + msg_lines += ['%s %s:%s – %s' % (selector, minutes, seconds, entry[0])] i += 1 - return msg + return msg_lines elif command == 'PLAY': self.playing = False if self.playing else True self.game.changed = True if self.playing: - return 'playing' + return ['playing'] else: - return 'paused' + return ['paused'] elif command == 'REWIND': self.playlist_index = 0 self.next_song_start = datetime.datetime.now() self.game.changed = True - return 'back at start of playlist' + return ['back at start of playlist'] elif command == 'SKIP': self.next_song_start = datetime.datetime.now() self.game.changed = True - return 'skipped' + return ['skipped'] elif command == 'REPEAT': self.repeat = False if self.repeat else True self.game.changed = True if self.repeat: - return 'playlist repeat turned on' + return ['playlist repeat turned on'] else: - return 'playlist repeat turned off' + return ['playlist repeat turned off'] elif command.startswith('ADD '): tokens = command.split(' ', 2) if len(tokens) != 3: - return 'wrong syntax, see HELP' + return ['wrong syntax, see HELP'] length = tokens[1].split(':') if len(length) != 2: - return 'wrong syntax, see HELP' + return ['wrong syntax, see HELP'] try: minutes = int(length[0]) seconds = int(length[1]) except ValueError: - return 'wrong syntax, see HELP' + return ['wrong syntax, see HELP'] self.playlist += [(tokens[2], minutes * 60 + seconds)] self.game.changed = True - return 'added' + return ['added'] else: - return 'cannot understand command' + return ['cannot understand command'] @@ -377,3 +377,9 @@ class Thing_Player(ThingAnimate): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.carrying = None + + def send_msg(self, msg): + for c_id in self.game.sessions: + if self.game.sessions[c_id]['thing_id'] == self.id_: + self.game.io.send(msg, c_id) + break -- 2.30.2