home · contact · privacy
Server, plugin: Refactor actor_pickup plugin hooking.
[plomrogue] / server / actions.py
index 302c36d7c8c00d801b6ad61d8f31f9e21d703677..5492dbe97b2f9bbcb62cb79b5cbe4b852b9ba181 100644 (file)
@@ -16,7 +16,7 @@ def actor_wait(t):
 def actor_move(t):
     """If passable, move/collide(=attack) thing into T_ARGUMENT's direction."""
     from server.build_fov_map import build_fov_map
 def actor_move(t):
     """If passable, move/collide(=attack) thing into T_ARGUMENT's direction."""
     from server.build_fov_map import build_fov_map
-    from server.world import decrement_lifepoints
+    from server.config.misc import decrement_lifepoints_func
     from server.utils import mv_yx_in_dir_legal
     from server.config.world_data import directions_db, symbols_passable
     passable = False
     from server.utils import mv_yx_in_dir_legal
     from server.config.world_data import directions_db, symbols_passable
     passable = False
@@ -38,7 +38,7 @@ def actor_move(t):
             elif 0 == hit_id:
                 hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"]
                 log(hitter_name +" WOUNDS you.")
             elif 0 == hit_id:
                 hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"]
                 log(hitter_name +" WOUNDS you.")
-            decrement_lifepoints(world_db["Things"][hit_id])
+            decrement_lifepoints_func(world_db["Things"][hit_id])
             return
         passable = chr(world_db["MAP"][pos]) in symbols_passable
     dir = [dir for dir in directions_db
             return
         passable = chr(world_db["MAP"][pos]) in symbols_passable
     dir = [dir for dir in directions_db
@@ -55,7 +55,7 @@ def actor_move(t):
 
 
 def actor_pickup(t):
 
 
 def actor_pickup(t):
-    """Make t pick up (topmost?) Thing from ground into inventory.
+    """Make t pick up (topmost?) Thing from ground into inventory. Return it.
 
     Define topmostness by how low the thing's type ID is.
     """
 
     Define topmostness by how low the thing's type ID is.
     """
@@ -67,14 +67,16 @@ def actor_pickup(t):
         lowest_tid = -1
         for iid in ids:
             tid = world_db["Things"][iid]["T_TYPE"]
         lowest_tid = -1
         for iid in ids:
             tid = world_db["Things"][iid]["T_TYPE"]
-            if lowest_tid == -1 or tid < lowest_tid:
+            from server.config.actions import actor_pickup_test_hook
+            if (lowest_tid == -1 or tid < lowest_tid) and \
+                    actor_pickup_test_hook(t, tid):
                 id = iid
                 lowest_tid = tid
         world_db["Things"][id]["carried"] = True
         t["T_CARRIES"].append(id)
         if t == world_db["Things"][0]:
                 log("You PICK UP an object.")
                 id = iid
                 lowest_tid = tid
         world_db["Things"][id]["carried"] = True
         t["T_CARRIES"].append(id)
         if t == world_db["Things"][0]:
                 log("You PICK UP an object.")
-
+        return world_db["Things"][id]
 
 def actor_drop(t):
     """Make t rop Thing from inventory to ground indexed by T_ARGUMENT."""
 
 def actor_drop(t):
     """Make t rop Thing from inventory to ground indexed by T_ARGUMENT."""
@@ -98,6 +100,6 @@ def actor_use(t):
             del world_db["Things"][id]
             t["T_SATIATION"] += world_db["ThingTypes"][type]["TT_TOOLPOWER"]
             if t == world_db["Things"][0]:
             del world_db["Things"][id]
             t["T_SATIATION"] += world_db["ThingTypes"][type]["TT_TOOLPOWER"]
             if t == world_db["Things"][0]:
-                log("You CONSUME this object.")
+                log("You CONSUME this thing.")
         elif t == world_db["Things"][0]:
             log("You try to use this object, but FAIL.")
         elif t == world_db["Things"][0]:
             log("You try to use this object, but FAIL.")