home · contact · privacy
Replace hard-coded client login welcome messages with optional server login messages.
[plomrogue2] / plomrogue / game.py
index 415c3e8002e7178d374c38efdf9c1bec843fc582..8784007d8ddeed69e8611a7510e24266c7954dd9 100755 (executable)
@@ -130,8 +130,9 @@ class Game(GameBase):
         self.map_controls = {}
         self.map_control_passwords = {}
         self.annotations = {}
-        self.spawn_point = YX(0, 0), YX(0, 0)
+        self.spawn_points = []
         self.portals = {}
+        self.intro_messages = []
         self.player_chars = string.digits + string.ascii_letters
         self.players_hat_chars = {}
         self.player_char_i = -1
@@ -195,6 +196,12 @@ class Game(GameBase):
             return self.thing_types.keys()
         return None
 
+    def get_default_spawn_point(self):
+        import random
+        if len(self.spawn_points) == 0:
+            return (YX(0, 0), YX(0, 0))
+        return random.choice(self.spawn_points)
+
     def get_map_geometry_shape(self):
         return self.map_geometry.__class__.__name__[len('MapGeometry'):]
 
@@ -339,15 +346,18 @@ class Game(GameBase):
             self.io.send('GAME_ERROR ' + quote('name already in use'),
                          connection_id)
             return
-        t = self.add_thing('Player', self.spawn_point)
+        t = self.add_thing('Player', self.get_default_spawn_point())
         t.name = nick
         t.thing_char = self.get_next_player_char()
         self.sessions[connection_id] = {
             'thing_id': t.id_,
             'status': 'player'
         }
+        print('DEBUG LOGIN', t.name, len(self.sessions))
         self.io.send('PLAYER_ID %s' % t.id_, connection_id)
         self.io.send('LOGIN_OK', connection_id)
+        for msg in self.intro_messages:
+            self.io.send('CHAT ' + quote(msg))
         self.io.send('CHAT ' + quote(t.name + ' entered the map.'))
         for s in [s for s in self.things
                   if s.type_ == 'SpawnPoint' and s.name == t.name]:
@@ -355,6 +365,7 @@ class Game(GameBase):
             if s.temporary:
                 self.remove_thing(s)
                 break
+        t.try_to_sit()
 
     def run_tick(self):
 
@@ -373,6 +384,7 @@ class Game(GameBase):
                 spawn_point = self.add_thing('SpawnPoint', t.position)
                 spawn_point.temporary = True
                 spawn_point.name = t.name
+                print('DEBUG LEFT MAP', t.name)
                 self.remove_thing(t)
                 to_delete += [connection_id]
         for connection_id in to_delete:
@@ -590,8 +602,10 @@ class Game(GameBase):
                 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]))
+            for s in self.spawn_points:
+                write(f, 'SPAWN_POINT %s %s' % (s[0], s[1]))
+            for msg in self.intro_messages:
+                write(f, 'INTRO_MSG %s' % quote(msg))
 
 
 
@@ -612,7 +626,6 @@ class Game(GameBase):
         self.annotations = {}
         self.portals = {}
         self.admin_passwords = []
-        self.spawn_point = YX(0, 0), YX(0, 0)
         self.map_geometry = map_geometry
         self.map_control_passwords = {'X': 'secret'}
         self.get_map(YX(0, 0))