home · contact · privacy
In pick_up selection view, use list indexes instead of internal .id_.
[plomrogue2] / rogue_chat_curses.py
index db5f9933640aa92081b0797ed5d7518ab9aee4dd..1f93dd808b690d488b0cf9f93fd3ed80a72fa50e 100755 (executable)
@@ -625,14 +625,15 @@ class TUI:
         elif self.mode.name == 'take_thing':
             self.log_msg('selectable things:')
             player = self.game.get_thing(self.game.player_id)
-            selectables = [t for t in self.game.things
-                           if t != player and t.type_ != 'Player'
-                           and t.position == player.position]
-            if len(selectables) == 0:
+            self.selectables = [t for t in self.game.things
+                                if t != player and t.type_ != 'Player'
+                                and t.position == player.position]
+            if len(self.selectables) == 0:
                 self.log_msg('none')
             else:
-                for t in selectables:
-                    self.log_msg(str(t.id_) + ' ' + self.get_thing_info(t))
+                for i in range(len(self.selectables)):
+                    t = self.selectables[i]
+                    self.log_msg(str(i) + ': ' + self.get_thing_info(t))
         elif self.mode.name == 'command_thing':
             self.send('TASK:COMMAND ' + quote('HELP'))
         elif self.mode.name == 'control_pw_pw':
@@ -1013,7 +1014,14 @@ class TUI:
                 if self.input_ == '':
                     self.log_msg('@ aborted')
                 else:
-                    self.send('TASK:PICK_UP ' + quote(self.input_))
+                    try:
+                        i = int(self.input_)
+                        if i < 0 or i >= len(self.selectables):
+                            self.log_msg('? invalid index, aborted')
+                        else:
+                            self.send('TASK:PICK_UP %s' % self.selectables[i].id_)
+                    except ValueError:
+                        self.log_msg('? invalid index, aborted')
                 self.input_ = ''
                 self.switch_mode('play')
             elif self.mode.name == 'command_thing' and key == '\n':