home · contact · privacy
Server/py: Undummify actor_pick_up(), plus some stylistic fixes.
[plomrogue] / plomrogue-server.py
index c3600aa558cc9eaa844feded252a16b62cac53b4..cb7f9b0cbb31b81d006330528971d99ec56a7151 100755 (executable)
@@ -449,9 +449,9 @@ def build_fov_map(t):
     # DUMMY so far. Just builds an all-visible map.
 
 
-def actor_wait(Thing):
-    """Do nothing (but loudly, if by player)."""
-    if Thing == world_db["Things"][0]:
+def actor_wait(t):
+    """Make t do nothing (but loudly, if player avatar)."""
+    if t == world_db["Things"][0]:
         strong_write(io_db["file_out"], "LOG You wait.\n")
 
 
@@ -459,12 +459,34 @@ def actor_move(Thing):
     pass
 
 
-def actor_pick_up(Thing):
-    pass
-
-
-def actor_drop(Thing):
-    pass
+def actor_pick_up(t):
+    """Make t pick up (topmost?) Thing from ground into inventory."""
+    # Topmostness is actually not defined so far.
+    ids = [id for id in world_db["Things"] if world_db["Things"][id] != t
+           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 len(ids):
+        world_db["Things"][ids[0]]["carried"] = True
+        t["T_CARRIES"].append(ids[0])
+        if t == world_db["Things"][0]:
+            strong_write(io_db["file_out"], "LOG You pick up an object.\n")
+    elif t == world_db["Things"][0]:
+        err = "You try to pick up an object, but there is none."
+        strong_write(io_db["file_out"], "LOG " + err + "\n")
+
+
+def actor_drop(t):
+    """Make t rop Thing from inventory to ground indexed by T_ARGUMENT."""
+    # TODO: Handle case where T_ARGUMENT matches nothing.
+    if len(t["T_CARRIES"]):
+        id = t["T_CARRIES"][t["T_ARGUMENT"]]
+        t["T_CARRIES"].remove(id)
+        world_db["Things"][id]["carried"] = False
+        if t == world_db["Things"][0]:
+            print("You drop an object.")
+    elif t == world_db["Things"][0]:
+        print("You try to drop an object, but you own none.")
 
 
 def actor_use(Thing):
@@ -477,8 +499,7 @@ def turn_over():
     whilebreaker = False
     while world_db["Things"][0]["T_LIFEPOINTS"]:
         for id in [id for id in world_db["Things"]
-                      if not world_db["Things"][id]["carried"]
-                      if world_db["Things"][id]["T_LIFEPOINTS"]]:
+                   if world_db["Things"][id]["T_LIFEPOINTS"]]:
             Thing = world_db["Things"][id]
             if Thing["T_LIFEPOINTS"]:
                 if not Thing["T_COMMAND"]:
@@ -576,7 +597,8 @@ def command_thingshere(str_y, str_x):
     """Write to out file list of Things known to player at coordinate y, x."""
     def write_thing_if_here():
         if y == world_db["Things"][id]["T_POSY"] \
-           and x == world_db["Things"][id]["T_POSX"]:
+           and x == world_db["Things"][id]["T_POSX"] \
+           and not world_db["Things"][id]["carried"]:
             type = world_db["Things"][id]["T_TYPE"]
             name = world_db["ThingTypes"][type]["TT_NAME"]
             strong_write(io_db["file_out"], name + "\n")