from plomrogue.misc import quote
from plomrogue.errors import GameError, ArgError
+from plomrogue.misc import Terrain
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:
cmd_SPAWN_POINT.argtypes = 'yx_tuple yx_tuple:nonneg'
def cmd_LOGIN(game, nick, connection_id):
+ nick = nick.strip()
+ if len(nick) == 0:
+ raise GameError('empty name')
for t in [t for t in game.things if t.type_ == 'Player' and t.name == nick]:
raise GameError('name already in use')
if game.get_player(connection_id):
raise GameError('cannot log in twice')
t = game.add_thing('Player', game.spawn_point)
+ t.name = nick
t.thing_char = game.get_next_player_char()
game.sessions[connection_id] = {
'thing_id': t.id_,
}
game.io.send('PLAYER_ID %s' % t.id_, connection_id)
game.io.send('LOGIN_OK', connection_id)
- t.name = nick
game.io.send('CHAT ' + quote(t.name + ' entered the map.'))
for s in [s for s in game.things
if s.type_ == 'SpawnPoint' and s.name == t.name]:
cmd_SET_MAP_CONTROL_PASSWORD.argtypes = 'char string'
def cmd_NICK(game, nick, connection_id):
+ nick = nick.strip()
+ if len(nick) == 0:
+ raise GameError('empty name')
for t in [t for t in game.things if t.type_ == 'Player' and t.name == nick]:
raise GameError('name already in use')
t = game.get_player(connection_id)
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):
raise GameError('thing of ID %s not found' % thing_id)
if not game.can_do_thing_with_pw(t, pw):
raise GameError('wrong password for thing')
- t.name = name
+ if name == ' ':
+ if hasattr(t.__class__, 'name'):
+ raise GameError('cannot un-name things of this type')
+ if hasattr(t, 'name'):
+ del t.name
+ else:
+ t.name = name
game.changed = True
# FIXME: pseudo-FOV-change actually
game.record_fov_change(t.position)