X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/decks/%7B%7Bdeck_id%7D%7D/cards/%7B%7Bcard_id%7D%7D/static/git-favicon.png?a=blobdiff_plain;f=rogue_chat_curses.py;h=3cd5914c217f2ea4a710413f587292592f63fc7f;hb=1f65215b70d2a8a255aa9327497b88b94c4b1f17;hp=2362d99f8dd29a5030f44d62777c78637e8d4a27;hpb=f4e55ffc4ae34874d57f087894b73934eaebd383;p=plomrogue2 diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index 2362d99..3cd5914 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -67,9 +67,13 @@ mode_helps = { 'short': 'map edit password', 'long': 'This mode allows you to change the password that you send to authorize yourself for editing password-protected map tiles. Hit return to confirm and leave.' }, - 'admin': { + 'admin_enter': { 'short': 'become admin', 'long': 'This mode allows you to become admin if you know an admin password.' + }, + 'admin': { + 'short': 'admin', + 'long': 'This mode allows you access to actions limited to administrators.' } } @@ -128,6 +132,13 @@ def cmd_LOGIN_OK(game): game.tui.log_msg('@ welcome') cmd_LOGIN_OK.argtypes = '' +def cmd_ADMIN_OK(game): + game.tui.is_admin = True + game.tui.log_msg('@ you now have admin rights') + game.tui.switch_mode('admin') + game.tui.do_refresh = True +cmd_ADMIN_OK.argtypes = '' + def cmd_CHAT(game, msg): game.tui.log_msg('# ' + msg) game.tui.do_refresh = True @@ -253,6 +264,7 @@ class Game(GameBase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.register_command(cmd_LOGIN_OK) + self.register_command(cmd_ADMIN_OK) self.register_command(cmd_PONG) self.register_command(cmd_CHAT) self.register_command(cmd_PLAYER_ID) @@ -331,7 +343,8 @@ class Mode: return False class TUI: - mode_admin = Mode('admin', has_input_prompt=True) + mode_admin_enter = Mode('admin_enter', has_input_prompt=True) + mode_admin = Mode('admin') mode_play = Mode('play') mode_study = Mode('study', shows_info=True) mode_edit = Mode('edit', is_single_char_entry=True) @@ -346,17 +359,19 @@ class TUI: mode_login = Mode('login', has_input_prompt=True, is_intro=True) mode_post_login_wait = Mode('post_login_wait', is_intro=True) mode_password = Mode('password', has_input_prompt=True) + is_admin = False def __init__(self, host): import os import json self.mode_play.available_modes = ["chat", "study", "edit", "annotate", "portal", - "password", "admin", - "control_pw_type", - "control_tile_type"] - self.mode_study.available_modes = ["chat", "play"] - self.mode_control_tile_draw.available_modes = ["play"] + "password", "admin_enter"] + self.mode_study.available_modes = ["chat", "play", "admin_enter"] + self.mode_admin.available_modes = ["chat", "play", "study", + "control_pw_type", + "control_tile_type"] + self.mode_control_tile_draw.available_modes = ["admin"] self.host = host self.game = Game() self.game.tui = self @@ -376,7 +391,7 @@ class TUI: 'switch_to_portal': 'T', 'switch_to_study': '?', 'switch_to_edit': 'm', - 'switch_to_admin': 'A', + 'switch_to_admin_enter': 'A', 'switch_to_control_pw_type': 'C', 'switch_to_control_tile_type': 'Q', 'flatten': 'F', @@ -481,6 +496,8 @@ class TUI: def switch_mode(self, mode_name): self.map_mode = 'terrain' + if mode_name == 'admin_enter' and self.is_admin: + mode_name = 'admin' self.mode = getattr(self, 'mode_' + mode_name) if self.mode.shows_info or self.mode.name == 'control_tile_draw': player = self.game.get_thing(self.game.player_id) @@ -499,7 +516,7 @@ class TUI: self.send('LOGIN ' + quote(self.login_name)) else: self.log_msg('@ enter username') - elif self.mode.name == 'admin': + elif self.mode.name == 'admin_enter': self.log_msg('@ enter admin password:') elif self.mode.name == 'control_pw_pw': self.log_msg('@ enter tile control password for "%s":' % self.tile_control_char) @@ -716,6 +733,7 @@ class TUI: content += '/nick NAME – re-name yourself to NAME\n' content += '/%s or /play – switch to play mode\n' % self.keys['switch_to_play'] content += '/%s or /study – switch to study mode\n' % self.keys['switch_to_study'] + content += '/%s or /admin – switch to admin mode\n' % self.keys['switch_to_admin_enter'] content += self.mode.list_available_modes(self) for i in range(self.size.y): safe_addstr(i, @@ -810,14 +828,14 @@ class TUI: else: self.send('SET_MAP_CONTROL_PASSWORD ' + quote(self.tile_control_char) + ' ' + quote(self.input_)) self.input_ = "" - self.switch_mode('play') + self.switch_mode('admin') elif self.mode.name == 'password' and key == '\n': if self.input_ == '': self.input_ = ' ' self.password = self.input_ self.input_ = "" self.switch_mode('play') - elif self.mode.name == 'admin' and key == '\n': + elif self.mode.name == 'admin_enter' and key == '\n': self.send('BECOME_ADMIN ' + quote(self.input_)) self.input_ = "" self.switch_mode('play') @@ -829,6 +847,8 @@ class TUI: self.switch_mode('play') elif self.input_ in {'/' + self.keys['switch_to_study'], '/study'}: self.switch_mode('study') + elif self.input_ in {'/' + self.keys['switch_to_admin_enter'], '/admin'}: + self.switch_mode('admin_enter') elif self.input_.startswith('/nick'): tokens = self.input_.split(maxsplit=1) if len(tokens) == 2: @@ -900,6 +920,9 @@ class TUI: continue elif key in self.movement_keys: move_explorer(self.movement_keys[key]) + elif self.mode.name == 'admin': + if self.mode.mode_switch_on_key(self, key): + continue if len(sys.argv) != 2: raise ArgError('wrong number of arguments, need game host')