home · contact · privacy
Server, plugin: Refactor play_pickup plugin hooking.
authorChristian Heller <c.heller@plomlompom.de>
Mon, 29 Feb 2016 01:24:47 +0000 (02:24 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 29 Feb 2016 01:24:47 +0000 (02:24 +0100)
plugins/server/PleaseTheIslandGod.py
server/commands.py
server/config/commands.py

index 0159f661930d89633b8db688faefde55266ed906..fba17fc6a6325c0008206072d7892ec5397a5402 100644 (file)
@@ -388,6 +388,12 @@ def play_use_attempt_hook(t, tt):
     elif type == world_db["SLIPPERS"]:
         return True
 
     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)
 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
 
         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):
 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["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
 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
 
 import server.config.misc
 server.config.misc.make_map_func = make_map
index 493fb761d46058b4751e643b93417566c893e1a3..7755f880fdb78d1489894c8212466fdac958d3a8 100644 (file)
@@ -440,13 +440,14 @@ def play_pickup():
     """Try "pickup" as player's T_COMMAND"."""
     if action_exists("pickup"):
         t = world_db["Things"][0]
     """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.")
         if not len(ids):
              log("NOTHING to pick up.")
-        else:
+        elif play_pickup_attempt_hook(t):
             set_command("pickup")
 
 
             set_command("pickup")
 
 
index 60b77fc2344fe9ae27e551f816a0ba89a0b35aee..ec5583a353a871da18fc9babdfae1d523735bd26 100644 (file)
@@ -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
 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