from plomrogue.misc import quote
-from plomrogue.errors import GameError
+from plomrogue.errors import GameError, ArgError
if not t:
raise GameError('thing of ID %s not found' % thing_id)
t.protection = protection_char
- game.changed = True
+ #game.changed = True
cmd_THING_PROTECTION.argtypes = 'int:pos char'
def cmd_SET_MAP_CONTROL_PASSWORD(game, tile_class, password, connection_id):
if tile_class == '.':
raise GameError('tile class "." must remain unprotected')
game.map_control_passwords[tile_class] = password
- game.changed = True
+ #game.changed = True
cmd_SET_MAP_CONTROL_PASSWORD.argtypes = 'char string'
def cmd_NICK(game, nick, connection_id):
cmd_TURN.argtypes = 'int:nonneg'
def cmd_ANNOTATE(game, yx, msg, pw, connection_id):
+ if len(msg) > 500:
+ raise ArgError('annotation text must be <= 500 characters')
player = game.get_player(connection_id)
big_yx, little_yx = player.fov_stencil.source_yxyx(yx)
if not player.fov_test(big_yx, little_yx):
game.changed = True
cmd_GOD_PORTAL.argtypes = 'yx_tuple yx_tuple:nonneg string'
-def cmd_GET_ANNOTATION(game, yx, connection_id):
- player = game.get_player(connection_id)
- big_yx, little_yx = player.fov_stencil.source_yxyx(yx)
- annotation = '(unknown)'
- if player.fov_test(big_yx, little_yx):
- annotation = '(none)'
- if big_yx in game.annotations:
- if little_yx in game.annotations[big_yx]:
- annotation = game.annotations[big_yx][little_yx]
- game.io.send('ANNOTATION %s %s' % (yx, quote(annotation)))
-cmd_GET_ANNOTATION.argtypes = 'yx_tuple:nonneg'
-
def cmd_MAP_LINE(game, big_yx, y, line):
map_ = game.get_map(big_yx)
map_.set_line(y, line)
raise GameError('thing of ID %s not bottle' % thing_id)
t.empty()
cmd_THING_BOTTLE_EMPTY.argtypes = 'int:pos'
+
+def cmd_THING_INSTALLED(game, thing_id):
+ t = game.get_thing(thing_id)
+ if not t:
+ raise GameError('thing of ID %s not found' % thing_id)
+ if not hasattr(t, 'installable'):
+ raise GameError('thing of ID %s not installable' % thing_id)
+ t.install()
+cmd_THING_INSTALLED.argtypes = 'int:pos'