X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=plomrogue%2Fcommands.py;h=aed5830b5d64c6ea1615fdb57210f8229b3ab50d;hb=aab94ffb12aa0dedc240d7b29001699b95c49249;hp=026f99603de4b90562c1d4f1d639481a3b3bddaf;hpb=7fc75c298c5e54159bc86d5841ee9feab2fc64d0;p=plomrogue2 diff --git a/plomrogue/commands.py b/plomrogue/commands.py index 026f996..aed5830 100644 --- a/plomrogue/commands.py +++ b/plomrogue/commands.py @@ -1,5 +1,6 @@ from plomrogue.misc import quote from plomrogue.errors import GameError, ArgError +from plomrogue.misc import Terrain @@ -16,11 +17,17 @@ def cmd_THING_TYPES(game, connection_id): cmd_THING_TYPES.argtypes = '' def cmd_TERRAINS(game, connection_id): - for t in game.terrains.keys(): - game.io.send('TERRAIN %s %s' % (quote(t), quote(game.terrains[t])), - connection_id) + for t in game.terrains.values(): + game.io.send('TERRAIN %s %s' % (quote(t.character), + quote(t.description)), connection_id) cmd_TERRAINS.argtypes = '' +def cmd_TERRAIN(game, character, description, + blocks_light, blocks_sound, blocks_movement): + game.terrains[character] = Terrain(character, description, blocks_light, + blocks_sound, blocks_movement) +cmd_TERRAIN.argtypes = 'char string bool bool bool' + def cmd_ALL(game, msg, connection_id): speaker = game.get_player(connection_id) if not speaker: @@ -226,6 +233,7 @@ def cmd_MAP(game, geometry, size): if geometry == 'Hex': map_geometry_class = MapGeometryHex game.new_world(map_geometry_class(size)) + game.terrains = {} cmd_MAP.argtypes = 'string:map_geometry yx_tuple:pos' def cmd_MAP_CONTROL_LINE(game, big_yx, y, line): @@ -339,6 +347,26 @@ def cmd_PLAYER_FACE(game, face, connection_id): game.record_fov_change(t.position) cmd_PLAYER_FACE.argtypes = 'string' +def cmd_PLAYER_HAT(game, hat, connection_id): + t = game.get_player(connection_id) + if not t: + raise GameError('can only edit hat when already logged in') + if not t.name in game.hats: + raise GameError('not currently wearing an editable hat') + if len(hat) != 18: + raise GameError('wrong hat string length') + legal_chars = t.get_cookie_chars() + for c in hat: + if c not in legal_chars: + raise GameError('used illegal character: "%s" – ' + 'allowed characters: %s' + % (c, legal_chars)) + game.hats[t.name] = hat + game.changed = True + # FIXME: pseudo-FOV-change actually + game.record_fov_change(t.position) +cmd_PLAYER_HAT.argtypes = 'string' + def cmd_GOD_PLAYER_FACE(game, name, face): if len(face) != 18: raise GameError('wrong face string length') @@ -351,6 +379,10 @@ def cmd_GOD_PLAYER_HAT(game, name, hat): game.hats[name] = hat cmd_GOD_PLAYER_HAT.argtypes = 'string string' +def cmd_GOD_PLAYERS_HAT_CHARS(game, name, hat_chars): + game.players_hat_chars[name] = hat_chars +cmd_GOD_PLAYERS_HAT_CHARS.argtypes = 'string string' + def cmd_THING_HAT_DESIGN(game, thing_id, design): if len(design) != 18: raise GameError('hat design of wrong length')