home · contact · privacy
Use temporary SpawnPoints to store logged-out players' positions for up to ten minutes.
[plomrogue2] / plomrogue / game.py
index 4b5c3372eba5b2d96fccfb72ec0d7e8250645b37..088db9d739a0eb7854608613758c28ff76cc2f0e 100755 (executable)
@@ -351,7 +351,9 @@ class Game(GameBase):
         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):
 
@@ -367,6 +369,9 @@ class Game(GameBase):
                 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:
@@ -568,6 +573,20 @@ class Game(GameBase):
                 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]))