home · contact · privacy
Plugin, server: Refactor command_worldactive plugin hooking.
[plomrogue] / plugins / server / PleaseTheIslandGod.py
index e989d539d5f790d392d2e6f3f633d449f03ea9c4..7f785ddfd2f02e144af122a2841f3487fd34be17 100644 (file)
@@ -323,68 +323,20 @@ def decrement_lifepoints(t):
                     "at the altar.")
     return test
 
-def command_ttid(id_string):
-    id = id_setter(id_string, "ThingTypes", command_ttid)
-    if None != id:
-        world_db["ThingTypes"][id] = {
-            "TT_NAME": "(none)",
-            "TT_TOOLPOWER": 0,
-            "TT_LIFEPOINTS": 0,
-            "TT_PROLIFERATE": 0,
-            "TT_START_NUMBER": 0,
-            "TT_STORAGE": 0,
-            "TT_SYMBOL": "?",
-            "TT_CORPSE_ID": id,
-            "TT_TOOL": ""
-        }
-
-def command_worldactive(worldactive_string):
-    val = integer_test(worldactive_string, 0, 1)
-    if None != val:
-        if 0 != world_db["WORLD_ACTIVE"]:
-            if 0 == val:
-                set_world_inactive()
-            else:
-                print("World already active.")
-        elif 0 == world_db["WORLD_ACTIVE"]:
-            for ThingAction in world_db["ThingActions"]:
-                if "wait" == world_db["ThingActions"][ThingAction]["TA_NAME"]:
-                    break
-            else:
-                print("Ignored: No wait action defined for world to activate.")
-                return
-            for Thing in world_db["Things"]:
-                if 0 == Thing:
-                    break
-            else:
-                print("Ignored: No player defined for world to activate.")
-                return
-            if world_db["MAP"]:
-                pos = world_db["MAP"].find(b'_')
-                if pos > 0:
-                    y = int(pos / world_db["MAP_LENGTH"])
-                    x = pos % world_db["MAP_LENGTH"]
-                    world_db["altar"] = (y, x)
-                else:
-                    print("Ignored: No altar defined for world to activate.")
-                    return
-            else:
-                print("Ignored: No map defined for world to activate.")
-                return
-            for name in world_db["specials"]:
-                if world_db[name] not in world_db["ThingTypes"]:
-                    print("Ignored: Not all specials set for world to "
-                          "activate.")
-                    return
-            for id in world_db["Things"]:
-                if world_db["Things"][id]["T_LIFEPOINTS"]:
-                    build_fov_map(world_db["Things"][id])
-                    if 0 == id:
-                        update_map_memory(world_db["Things"][id], False)
-            if not world_db["Things"][0]["T_LIFEPOINTS"]:
-                empty_fovmap = bytearray(b" " * world_db["MAP_LENGTH"] ** 2)
-                world_db["Things"][0]["fovmap"] = empty_fovmap
-            world_db["WORLD_ACTIVE"] = 1
+def command_worldactive_test_hook():
+    pos = world_db["MAP"].find(b'_')
+    if pos > 0:
+        y = int(pos / world_db["MAP_LENGTH"])
+        x = pos % world_db["MAP_LENGTH"]
+        world_db["altar"] = (y, x)
+    else:
+        print("Ignored: No altar defined for world to activate.")
+        return False
+    for name in world_db["specials"]:
+        if world_db[name] not in world_db["ThingTypes"]:
+            print("Ignored: Not all specials set for world to activate.")
+            return False
+    return True
 
 def play_move(str_arg):
     if action_exists("move"):
@@ -588,8 +540,9 @@ io_db["worldstate_write_order"] += [[write_metamap_B, "func"]]
 import server.config.world_data
 server.config.world_data.symbols_passable += ":_"
 
-from server.config.world_data import thing_defaults
+from server.config.world_data import thing_defaults, thingtype_defaults
 thing_defaults["T_PLAYERDROP"] = 0
+thingtype_defaults["TT_STORAGE"] = 0
 
 import server.config.actions
 server.config.actions.action_db["actor_move"] = actor_move
@@ -600,11 +553,9 @@ server.config.actions.actor_use_attempts_hook = actor_use_attempts_hook
 server.config.actions.actor_move_attempts_hook = actor_move_attempts_hook
 
 from server.config.commands import commands_db
-commands_db["TT_ID"] = (1, False, command_ttid)
 commands_db["GOD_FAVOR"] = (1, False, setter(None, "GOD_FAVOR", -32768, 32767))
 commands_db["TT_STORAGE"] = (1, False, setter("ThingType", "TT_STORAGE", 0, 255))
 commands_db["T_PLAYERDROP"] = (1, False, setter("Thing", "T_PLAYERDROP", 0, 1))
-commands_db["WORLD_ACTIVE"] = (1, False, command_worldactive)
 commands_db["FAVOR_STAGE"] = (1, False, setter(None, "FAVOR_STAGE", 0, 1))
 commands_db["SLIPPERS"] = (1, False, specialtypesetter("SLIPPERS"))
 commands_db["TOOL_0"] = (1, False, specialtypesetter("TOOL_0"))
@@ -618,6 +569,9 @@ commands_db["EMPATHY"] = (1, False, setter(None, "EMPATHY", 0, 1))
 commands_db["use"] = (1, False, play_use)
 commands_db["move"] = (1, False, play_move)
 commands_db["pickup"] = (0, False, play_pickup)
+import server.config.commands
+server.config.commands.command_worldactive_test_hook = \
+    command_worldactive_test_hook
 
 import server.config.misc
 server.config.misc.make_map_func = make_map