home · contact · privacy
Disallow picking up thing already carried by other player.
[plomrogue2] / plomrogue / things.py
index 23f66ad4a5bb25b5fe297554992116a338879556..4f802db6e25a9f340a9da02074b219d80502b0ab 100644 (file)
@@ -22,6 +22,7 @@ class Thing(ThingBase):
     portable = False
     protection = '.'
     commandable = False
+    carried = False
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -96,11 +97,8 @@ class ThingSpawner(Thing):
         for t in [t for t in self.game.things
                   if t != self and t.position == self.position]:
             return
-        t = self.game.thing_types[self.child_type](self.game,
-                                                   position=self.position)
-        self.game.things += [t]
+        self.game.add_thing(self.child_type, self.position)
         self.game.changed = True
-        self.game.changed_fovs = True
 
 
 
@@ -302,8 +300,7 @@ class Thing_BottleDeposit(Thing):
         if self.bottle_counter >= 3:
             self.bottle_counter = 0
             choice = random.choice(['MusicPlayer', 'Hat'])
-            t = self.game.thing_types[choice](self.game, position=self.position)
-            self.game.things += [t]
+            self.game.add_thing(choice, self.position)
             msg = 'here is a gift as a reward for ecological consciousness –'
             if choice == 'MusicPlayer':
                 msg += 'pick it up and then use "command thing" on it!'
@@ -311,7 +308,6 @@ class Thing_BottleDeposit(Thing):
                 msg += 'pick it up and then use "(un-)wear" on it!'
             self.sound('BOTTLE DEPOSITOR', msg)
             self.game.changed = True
-            self.game.changed_fovs = True
 
     def accept(self):
         self.bottle_counter += 1
@@ -356,7 +352,7 @@ class ThingAnimate(Thing):
                     # TODO: refactor with self.send_msg
                     self.game.io.send('DEFAULT_COLORS', c_id)
                     self.game.io.send('CHAT "You sober up."', c_id)
-                    self.game.changed_fovs = True
+                    self.invalidate_map_view()
                     break
             self.game.changed = True
         if self.task is None:
@@ -441,3 +437,9 @@ class Thing_Player(ThingAnimate):
             if self.game.sessions[c_id]['thing_id'] == self.id_:
                 self.game.io.send(msg, c_id)
                 break
+
+    def uncarry(self):
+        t = self.carrying
+        t.carried = False
+        self.carrying = None
+        return t