X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=roguelike-client;h=fb6c070f804d926bcc1e39346be6befe709e8103;hb=366322b999ecfeea0b1a2c0d6f8d43795ae3e918;hp=7bb862272caac1bce5949efef6eadb237d011c45;hpb=cdf875d1b67cfced25569caccc74f4c45417dc96;p=plomrogue
diff --git a/roguelike-client b/roguelike-client
index 7bb8622..fb6c070 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,7 +40,9 @@ 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
+ old_inventory_size = len(world_data["inventory"])
world_data["turn"] = int(turn_string)
for entry in io["worldstate_read_order"]:
if entry[1] == "int":
@@ -59,6 +65,9 @@ def read_worldstate():
world_data[entry[0]] += line
if not world_data["look_mode"]:
world_data["map_center"] = world_data["avatar_position"][:]
+ if world_data["inventory_selection"] > 0 and \
+ len(world_data["inventory"]) < old_inventory_size:
+ world_data["inventory_selection"] -= 1
worldstate_file.close()
read_worldstate.last_checked_mtime = -1
@@ -84,6 +93,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
@@ -118,10 +135,13 @@ def cursed_main(stdscr):
if new_open_end:
message_queue["open_end"] = True
+ def set_and_redraw_windows(*ignore):
+ set_windows()
+ draw_screen()
+
curses.noecho()
curses.curs_set(False)
- signal.signal(signal.SIGWINCH,
- lambda ignore_1, ignore_2: set_windows())
+ signal.signal(signal.SIGWINCH, set_and_redraw_windows)
set_windows()
delay = 1
while True: