From: Christian Heller 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/process?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),