X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=roguelike-client;h=4514946f7da145f44b4cae9680f289e34e7dc9a2;hb=a88fab7f404b3f2a09b8002935e6f80b7bdbc845;hp=8e18515354b05267c441b9349d9fff36ec4a41cc;hpb=9bcbd39430580783f9ec32a30d4998fca7309a20;p=plomrogue
diff --git a/roguelike-client b/roguelike-client
index 8e18515..4514946 100755
--- a/roguelike-client
+++ b/roguelike-client
@@ -1,11 +1,15 @@
#!/usr/bin/python3
+# This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3
+# or any later version. For details on its copyright, license, and warranties,
+# see the file NOTICE in the root directory of the PlomRogue source package.
+
+
import curses
import os
import signal
import time
-
from client.config.world_data import world_data
from client.config.io import io
from client.config.commands import commands
@@ -36,30 +40,30 @@ def read_worldstate():
read_worldstate.last_checked_mtime = mtime
read_anew = True
if read_anew:
+ # TODO: Hardcode order of necessary fields, ensure order dependencies.
redraw_windows = True
world_data["turn"] = int(turn_string)
- world_data["lifepoints"] = int(worldstate_file.readline())
- world_data["satiation"] = int(worldstate_file.readline())
- world_data["inventory"] = []
- while True:
- line = worldstate_file.readline().replace("\n", "")
- if line == '%':
- break
- world_data["inventory"] += [line]
- world_data["avatar_position"][0] = int(worldstate_file.readline())
- world_data["avatar_position"][1] = int(worldstate_file.readline())
+ for entry in io["worldstate_read_order"]:
+ if entry[1] == "int":
+ if 2 == len(entry):
+ world_data[entry[0]] = int(worldstate_file.readline())
+ elif 3 == len(entry):
+ world_data[entry[0]][entry[2]] = \
+ int(worldstate_file.readline())
+ elif entry[1] == "lines":
+ world_data[entry[0]] = []
+ while True:
+ line = worldstate_file.readline().replace("\n", "")
+ if line == '%':
+ break
+ world_data[entry[0]] += [line]
+ elif entry[1] == "map":
+ world_data[entry[0]] = ""
+ for i in range(world_data["map_size"]):
+ line = worldstate_file.readline().replace("\n", "")
+ world_data[entry[0]] += line
if not world_data["look_mode"]:
- world_data["map_center"][0] = world_data["avatar_position"][0]
- world_data["map_center"][1] = world_data["avatar_position"][1]
- world_data["map_size"] = int(worldstate_file.readline())
- world_data["fov_map"] = ""
- for i in range(world_data["map_size"]):
- line = worldstate_file.readline().replace("\n", "")
- world_data["fov_map"] += line
- world_data["mem_map"] = ""
- for i in range(world_data["map_size"]):
- line = worldstate_file.readline().replace("\n", "")
- world_data["mem_map"] += line
+ world_data["map_center"] = world_data["avatar_position"][:]
worldstate_file.close()
read_worldstate.last_checked_mtime = -1
@@ -85,6 +89,14 @@ def read_message_queue():
redraw_windows = True
elif message == "WORLD_UPDATED":
query_mapcell()
+ elif message[:6] == "PLUGIN":
+ str_plugin = message[7:]
+ if (str_plugin.replace("_", "").isalnum()
+ and os.access("plugins/client/" + str_plugin + ".py",
+ os.F_OK)):
+ exec(open("plugins/client/" + str_plugin + ".py").read())
+ return
+ raise SystemExit("Invalid plugin load path in message: " + message)
read_message_queue.parse_thingshere = False