From 4f88b914763e1a8e3ab8889d4affc6205b158e9b Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 29 Feb 2016 02:24:47 +0100
Subject: [PATCH] Server, plugin: Refactor play_pickup plugin hooking.

---
 plugins/server/PleaseTheIslandGod.py | 24 +++++++-----------------
 server/commands.py                   | 11 ++++++-----
 server/config/commands.py            |  1 +
 3 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/plugins/server/PleaseTheIslandGod.py b/plugins/server/PleaseTheIslandGod.py
index 0159f66..fba17fc 100644
--- a/plugins/server/PleaseTheIslandGod.py
+++ b/plugins/server/PleaseTheIslandGod.py
@@ -388,6 +388,12 @@ def play_use_attempt_hook(t, tt):
     elif type == world_db["SLIPPERS"]:
         return True
 
+def play_pickup_attempt_hook(t):
+    if len(t["T_CARRIES"]) >= world_db["ThingTypes"][t["T_TYPE"]]["TT_STORAGE"]:
+        log("CAN'T pick up: No storage room to carry anything more.")
+        return False
+    return True
+
 def specialtypesetter(name):
     def helper(str_int):
         val = integer_test(str_int, 0)
@@ -463,22 +469,6 @@ def calc_effort(thing_action, thing):
         effort = 1 if effort == 0 else effort
     return effort
 
-def play_pickup():
-    """Try "pickup" as player's T_COMMAND"."""
-    if action_exists("pickup"):
-        t = world_db["Things"][0]
-        ids = [id for id in world_db["Things"] if id
-               if not world_db["Things"][id]["carried"]
-               if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
-               if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]
-        if not len(ids):
-            log("NOTHING to pick up.")
-        elif len(t["T_CARRIES"]) >= world_db["ThingTypes"][t["T_TYPE"]] \
-                ["TT_STORAGE"]:
-            log("CAN'T pick up: No storage room to carry anything more.")
-        else:
-            set_command("pickup")
-
 strong_write(io_db["file_out"], "PLUGIN PleaseTheIslandGod\n")
 
 def set_zero_if_undefined(key):
@@ -529,12 +519,12 @@ commands_db["PLANT_0"] = (1, False, specialtypesetter("PLANT_0"))
 commands_db["PLANT_1"] = (1, False, specialtypesetter("PLANT_1"))
 commands_db["LUMBER"] = (1, False, specialtypesetter("LUMBER"))
 commands_db["EMPATHY"] = (1, False, setter(None, "EMPATHY", 0, 1))
-commands_db["pickup"] = (0, False, play_pickup)
 import server.config.commands
 server.config.commands.command_worldactive_test_hook = \
     command_worldactive_test_hook
 server.config.commands.play_move_attempt_hook = play_move_attempt_hook
 server.config.commands.play_use_attempt_hook = play_use_attempt_hook
+server.config.commands.play_pickup_attempt_hook = play_pickup_attempt_hook
 
 import server.config.misc
 server.config.misc.make_map_func = make_map
diff --git a/server/commands.py b/server/commands.py
index 493fb76..7755f88 100644
--- a/server/commands.py
+++ b/server/commands.py
@@ -440,13 +440,14 @@ def play_pickup():
     """Try "pickup" as player's T_COMMAND"."""
     if action_exists("pickup"):
         t = world_db["Things"][0]
-        ids = [id for id in world_db["Things"] if id
-               if not world_db["Things"][id]["carried"]
-               if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
-               if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]
+        ids = [tid for tid in world_db["Things"] if tid
+               if not world_db["Things"][tid]["carried"]
+               if world_db["Things"][tid]["T_POSY"] == t["T_POSY"]
+               if world_db["Things"][tid]["T_POSX"] == t["T_POSX"]]
+        from server.config.commands import play_pickup_attempt_hook
         if not len(ids):
              log("NOTHING to pick up.")
-        else:
+        elif play_pickup_attempt_hook(t):
             set_command("pickup")
 
 
diff --git a/server/config/commands.py b/server/config/commands.py
index 60b77fc..ec5583a 100644
--- a/server/config/commands.py
+++ b/server/config/commands.py
@@ -70,3 +70,4 @@ commands_db = {
 command_worldactive_test_hook = lambda: True
 play_move_attempt_hook = lambda x, y, z: False
 play_use_attempt_hook = lambda x, y: None
+play_pickup_attempt_hook = lambda x: True
-- 
2.30.2