'short': 'name thing',
'long': 'Give name to/change name of thing here.'
},
+ 'admin_thing_protect': {
+ 'short': 'change thing protection',
+ 'long': 'Change protection character for thing here.'
+ },
'write': {
'short': 'change terrain',
'long': 'This mode allows you to change the map tile you currently stand on (if your map editing password authorizes you so). Just enter any printable ASCII character to imprint it on the ground below you.'
game.player_id = player_id
cmd_PLAYER_ID.argtypes = 'int:nonneg'
-def cmd_THING(game, yx, thing_type, thing_id):
+def cmd_THING(game, yx, thing_type, protection, thing_id):
t = game.get_thing(thing_id)
if not t:
t = ThingBase(game, thing_id)
game.things += [t]
t.position = yx
t.type_ = thing_type
-cmd_THING.argtypes = 'yx_tuple:nonneg string:thing_type int:nonneg'
+ t.protection = protection
+cmd_THING.argtypes = 'yx_tuple:nonneg string:thing_type char int:nonneg'
def cmd_THING_NAME(game, thing_id, name):
t = game.get_thing(thing_id)
mode_control_pw_pw = Mode('control_pw_pw', has_input_prompt=True)
mode_control_tile_type = Mode('control_tile_type', has_input_prompt=True)
mode_control_tile_draw = Mode('control_tile_draw')
+ mode_admin_thing_protect = Mode('admin_thing_protect', has_input_prompt=True)
mode_annotate = Mode('annotate', has_input_prompt=True, shows_info=True)
mode_portal = Mode('portal', has_input_prompt=True, shows_info=True)
mode_chat = Mode('chat', has_input_prompt=True)
import json
self.mode_play.available_modes = ["chat", "study", "edit", "admin_enter"]
self.mode_study.available_modes = ["chat", "play", "admin_enter", "edit"]
- self.mode_admin.available_modes = ["control_pw_type",
+ self.mode_admin.available_modes = ["admin_thing_protect", "control_pw_type",
"control_tile_type", "chat",
"study", "play", "edit"]
self.mode_control_tile_draw.available_modes = ["admin_enter"]
'switch_to_admin_enter': 'A',
'switch_to_control_pw_type': 'C',
'switch_to_control_tile_type': 'Q',
+ 'switch_to_admin_thing_protect': 'T',
'flatten': 'F',
'take_thing': 'z',
'drop_thing': 'u',
elif self.mode.name == 'name_thing':
if hasattr(self.thing_selected, 'name'):
self.input_ = self.thing_selected.name
+ elif self.mode.name == 'admin_thing_protect':
+ if hasattr(self.thing_selected, 'protection'):
+ self.input_ = self.thing_selected.protection
def send_tile_control_command(self):
self.send('SET_TILE_CONTROL %s %s' %
self.tile_draw = False
if mode_name == 'admin_enter' and self.is_admin:
mode_name = 'admin'
- elif mode_name == 'name_thing':
+ elif mode_name in {'name_thing', 'admin_thing_protect'}:
player = self.game.get_thing(self.game.player_id)
thing = None
for t in [t for t in self.game.things if t.position == player.position
self.log_msg('@ enter tile protection character for which you want to change the password:')
elif self.mode.name == 'control_tile_type':
self.log_msg('@ enter tile protection character which you want to draw:')
+ elif self.mode.name == 'admin_thing_protect':
+ self.log_msg('@ enter thing protection character:')
elif self.mode.name == 'control_pw_pw':
self.log_msg('@ enter tile protection password for "%s":' % self.tile_control_char)
elif self.mode.name == 'control_tile_draw':
info += 'PROTECTION: %s\n' % protection
for t in self.game.things:
if t.position == self.explorer:
- info += 'THING: %s / %s' % (t.type_,
- self.game.thing_types[t.type_])
+ protection = t.protection
+ if protection == '.':
+ protection = 'unprotected'
+ info += 'THING: %s / protection: %s / %s' %\
+ (t.type_, protection, self.game.thing_types[t.type_])
if hasattr(t, 'player_char'):
info += t.player_char
if hasattr(t, 'name'):
content += '/%s or /study – switch to study mode\n' % self.keys['switch_to_study']
content += '/%s or /edit – switch to map edit mode\n' % self.keys['switch_to_edit']
content += '/%s or /admin – switch to admin mode\n' % self.keys['switch_to_admin_enter']
+ elif self.mode.name == 'admin':
+ content += "Available actions:\n"
+ if 'MOVE' in self.game.tasks:
+ content += "[%s] – move player\n" % ','.join(self.movement_keys)
+ content += '\n'
content += self.mode.list_available_modes(self)
for i in range(self.size.y):
safe_addstr(i,
else:
self.tile_control_char = self.input_
self.switch_mode('control_pw_pw')
+ elif self.mode.name == 'admin_thing_protect' and key == '\n':
+ if len(self.input_) != 1:
+ self.log_msg('@ entered non-single-char, therefore aborted')
+ else:
+ self.send('THING_PROTECTION %s %s' % (self.thing_selected.id_,
+ quote(self.input_)))
+ self.log_msg('@ sent new protection character for thing')
+ self.switch_mode('admin')
elif self.mode.name == 'control_tile_type' and key == '\n':
if len(self.input_) != 1:
self.log_msg('@ entered non-single-char, therefore aborted')
elif self.mode.name == 'name_thing' and key == '\n':
if self.input_ == '':
self.input_ = ' '
- self.send('THING_NAME %s %s' % (self.thing_selected.id_,
- quote(self.input_)))
+ self.send('THING_NAME %s %s %s' % (self.thing_selected.id_,
+ quote(self.input_),
+ quote(self.password)))
self.switch_mode('edit')
elif self.mode.name == 'annotate' and key == '\n':
if self.input_ == '':
elif self.mode.name == 'admin':
if self.mode.mode_switch_on_key(self, key):
continue
+ elif key in self.movement_keys and 'MOVE' in self.game.tasks:
+ self.send('TASK:MOVE ' + self.movement_keys[key])
elif self.mode.name == 'edit':
if self.mode.mode_switch_on_key(self, key):
continue