def cmd_MAP_CONTROL_PRESETS(game, draw_control_presets):
game.draw_control_presets = draw_control_presets
cmd_MAP_CONTROL_PRESETS.argtypes = 'bool'
+
+def cmd_THING_SPAWNPOINT_CREATED(game, spawnpoint_id, timestamp):
+ import datetime
+ spawnpoint = game.get_thing(spawnpoint_id)
+ if not spawnpoint:
+ raise GameError('thing of ID %s not found' % spawnpoint_id)
+ if spawnpoint.type_ != 'SpawnPoint':
+ raise GameError('thing of ID %s not a SpawnPoint' % spawnpoint_id)
+ if timestamp == 0:
+ spawnpoint.temporary = False
+ else:
+ spawnpoint.temporary = True
+ spawnpoint.created_at = datetime.datetime.fromtimestamp(timestamp)
+cmd_THING_SPAWNPOINT_CREATED.argtypes = 'int:pos int:nonneg'
for s in [s for s in self.things
if s.type_ == 'SpawnPoint' and s.name == t.name]:
t.position = s.position
- break
+ if s.temporary:
+ self.remove_thing(s)
+ break
def run_tick(self):
t = self.get_player(connection_id)
if hasattr(t, 'name'):
self.io.send('CHAT ' + quote(t.name + ' left the map.'))
+ spawn_point = self.add_thing('SpawnPoint', t.position)
+ spawn_point.temporary = True
+ spawn_point.name = t.name
self.remove_thing(t)
to_delete += [connection_id]
for connection_id in to_delete:
elif t.type_ == 'Crate':
for item in t.content:
write(f, 'THING_CRATE_ITEM %s %s' % (t.id_, item.id_))
+ elif t.type_ == 'SpawnPoint':
+ timestamp = 0
+ if t.temporary:
+ timestamp = int(t.created_at.timestamp())
+ write(f, 'THING_SPAWNPOINT_CREATED %s %s' % (t.id_,
+ timestamp))
+ next_thing_id = self.new_thing_id()
+ for t in [t for t in self.things if t.type_ == 'Player']:
+ write(f, 'THING %s %s SpawnPoint %s'
+ % (t.position[0], t.position[1], next_thing_id))
+ write(f, 'GOD_THING_NAME %s %s' % (next_thing_id, t.name))
+ write(f, 'THING_SPAWNPOINT_CREATED %s %s'
+ % (next_thing_id, int(datetime.datetime.now().timestamp())))
+ next_thing_id += 1
write(f, 'SPAWN_POINT %s %s' % (self.spawn_point[0],
self.spawn_point[1]))
symbol_hint = 's'
portable = True
name = 'username'
+ temporary = False
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.created_at = datetime.datetime.now()
+
+ def proceed(self):
+ super().proceed()
+ if self.temporary and datetime.datetime.now() >\
+ self.created_at + datetime.timedelta(minutes=10):
+ self.game.remove_thing(self)
cmd_GOD_PLAYER_FACE, cmd_GOD_PLAYER_HAT,
cmd_GOD_PLAYERS_HAT_CHARS, cmd_PLAYER_HAT,
cmd_TERRAIN_TAG, cmd_THING_DOOR_KEY,
- cmd_THING_CRATE_ITEM, cmd_MAP_CONTROL_PRESETS)
+ cmd_THING_CRATE_ITEM, cmd_MAP_CONTROL_PRESETS,
+ cmd_THING_SPAWNPOINT_CREATED)
from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_WRITE, Task_PICK_UP,
Task_DROP, Task_FLATTEN_SURROUNDINGS, Task_DOOR,
Task_INTOXICATE, Task_COMMAND, Task_INSTALL,
game.register_command(cmd_THING_DOOR_KEY)
game.register_command(cmd_THING_CRATE_ITEM)
game.register_command(cmd_MAP_CONTROL_PRESETS)
+game.register_command(cmd_THING_SPAWNPOINT_CREATED)
game.register_task(Task_WAIT)
game.register_task(Task_MOVE)
game.register_task(Task_WRITE)