From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 14 Sep 2015 03:08:38 +0000 (+0200)
Subject: Add basic plugin infrastructure.
X-Git-Tag: tce~276
X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/%7B%7B%20web_path%20%7D%7D/static/%7B%7Bdb.prefix%7D%7D/balance?a=commitdiff_plain;h=7ee118744cf696348c17805bf7b7d27f98e67153;p=plomrogue

Add basic plugin infrastructure.
---

diff --git a/SERVER_COMMANDS b/SERVER_COMMANDS
index f030d29..bc69c2a 100644
--- a/SERVER_COMMANDS
+++ b/SERVER_COMMANDS
@@ -51,6 +51,10 @@ game world is set active.
 Meta commands
 -------------
 
+PLUGIN [string]
+Run plugin code in ./plugins/[argument], with argument only consisting of
+alphanumeric characters and underscores.
+
 PING
 Write "PONG" line to ./server/out file.
 
diff --git a/roguelike-server b/roguelike-server
index 9d53bd0..2f3480a 100755
--- a/roguelike-server
+++ b/roguelike-server
@@ -1140,6 +1140,15 @@ def id_setter(id, category, id_store=False, start_at_1=False):
     return id
 
 
+def command_plugin(str_plugin):
+    """Run code in plugins/[str_plugin]."""
+    if (str_plugin.replace("_", "").isalnum()
+        and os.access("plugins/" + str_plugin, os.F_OK)):
+        exec(open("plugins/" + str_plugin).read())
+        return
+    print("Bad plugin name:", str_plugin)
+
+
 def command_ping():
     """Send PONG line to server output file."""
     strong_write(io_db["file_out"], "PONG\n")
@@ -1664,6 +1673,7 @@ be ignored in replay mode if read from server input file), and ([2]) a function
 to be called on it.
 """
 commands_db = {
+    "PLUGIN": (1, True, command_plugin),
     "QUIT": (0, True, command_quit),
     "PING": (0, True, command_ping),
     "THINGS_HERE": (2, True, command_thingshere),