home · contact · privacy
Also inhibit FLATTEN_SURROUNDINGS with terrain passwording.
authorChristian Heller <c.heller@plomlompom.de>
Tue, 10 Nov 2020 02:44:40 +0000 (03:44 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Tue, 10 Nov 2020 02:44:40 +0000 (03:44 +0100)
plomrogue/game.py
plomrogue/tasks.py
plomrogue/things.py
rogue_chat_curses.py

index accf35deebc2c3b41947f7503b44c9c635874dec..a6bc2a3fe6f5956769718623f4b651520260eaf7 100755 (executable)
@@ -73,6 +73,14 @@ class Game(GameBase):
                 print("FILE INPUT LINE %5s: %s" % (i, line), end='')
                 self.io.handle_input(line, god_mode=True)
 
+    def can_do_tile_with_pw(self, yx, pw):
+        tile_class = self.map_control[yx]
+        if tile_class in self.map_control_passwords:
+            tile_pw = self.map_control_passwords[tile_class]
+            if pw != tile_pw:
+                return False
+        return True
+
     def get_string_options(self, string_option_type):
         import string
         if string_option_type == 'direction':
index 55669eccb85e6f4ae738f566d8c96b9761debe03..2c0c3fce395c05011a114b3227e01843f58640f2 100644 (file)
@@ -51,11 +51,9 @@ class Task_WRITE(Task):
     argtypes = 'string:char string'
 
     def check(self):
-        tile_class = self.thing.game.map_control[self.thing.position]
-        if tile_class in self.thing.game.map_control_passwords:
-            tile_pw = self.thing.game.map_control_passwords[tile_class]
-            if self.args[1] != tile_pw:
-                raise GameError('wrong password for tile')
+        if not self.thing.game.can_do_tile_with_pw(self.thing.position,
+                                                   self.args[1]):
+            raise GameError('wrong password for tile')
 
     def do(self):
         self.thing.game.map[self.thing.position] = self.args[0]
@@ -64,12 +62,15 @@ class Task_WRITE(Task):
 
 class Task_FLATTEN_SURROUNDINGS(Task):
     todo = 10
+    argtypes = 'string'
 
     def check(self):
         pass
 
     def do(self):
-        self.thing.game.map[self.thing.position] = '.'
-        for yx in self.thing.game.map_geometry.get_neighbors(self.thing.position).values():
+        for yx in[self.thing.position] + \
+            list(self.thing.game.map_geometry.get_neighbors(self.thing.position).values()):
             if yx is not None:
+                if not self.thing.game.can_do_tile_with_pw(yx, self.args[0]):
+                    continue
                 self.thing.game.map[yx] = '.'
index 0e4af344e5cc9bcfc6af4e0e6fb88cbd07054e96..f066ae660f685a0a8ba05503b1c75e6b4eb25de4 100644 (file)
@@ -74,5 +74,5 @@ class ThingPlayer(ThingAnimate):
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.nickname = 'undefined' 
+        self.nickname = 'undefined'
 
index bf5ad1f65fcb103d7dbad0e5b4a84a913e2a5b55..7ce1496756505878132edc4d643cf92e12b09332 100755 (executable)
@@ -649,7 +649,7 @@ class TUI:
                     self.switch_mode('edit')
                 elif key == self.keys['flatten'] and\
                      'FLATTEN_SURROUNDINGS' in self.game.tasks:
-                    self.send('TASK:FLATTEN_SURROUNDINGS')
+                    self.send('TASK:FLATTEN_SURROUNDINGS ' + quote(self.password))
                 elif key in self.movement_keys and 'MOVE' in self.game.tasks:
                     self.send('TASK:MOVE ' + self.movement_keys[key])
             elif self.mode == self.mode_edit: