import queue
import threading
import time
+import sys
from plomrogue.game import GameBase
from plomrogue.parser import Parser
from plomrogue.mapping import YX, MapGeometrySquare, MapGeometryHex
'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.'
}
}
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
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)
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)
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
'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',
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)
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)
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,
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')
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:
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
-#TUI('localhost:5000')
-TUI('wss://plomlompom.com/rogue_chat/')
+if len(sys.argv) != 2:
+ raise ArgError('wrong number of arguments, need game host')
+host = sys.argv[1]
+TUI(host)