summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authororwell96 <orwell@bleipb.de>2017-10-19 13:37:46 +0200
committerorwell96 <orwell@bleipb.de>2017-10-19 13:40:19 +0200
commita06627f23b052207d3fc23d786c525f2cd26096c (patch)
treef8365faa71abbd2e531a54124d459deac06de4ab
parenta755607f7d9a84daff679f706f10a5b90743aa5a (diff)
downloadsigns_lib-a06627f23b052207d3fc23d786c525f2cd26096c.tar.gz
signs_lib-a06627f23b052207d3fc23d786c525f2cd26096c.tar.bz2
signs_lib-a06627f23b052207d3fc23d786c525f2cd26096c.zip
Add sign macro functionality
Allow to replace certain keywords on signs by defining a single string globally
-rw-r--r--init.lua3
-rw-r--r--macro.lua48
2 files changed, 51 insertions, 0 deletions
diff --git a/init.lua b/init.lua
index 804a720..5c18308 100644
--- a/init.lua
+++ b/init.lua
@@ -15,6 +15,8 @@ local enable_colored_metal_signs = true
-- CWz's keyword interact mod uses this setting.
local current_keyword = minetest.settings:get("interact_keyword") or "iaccept"
+local replace_macros = dofile(minetest.get_modpath(minetest.get_current_modname())..DIR_DELIM.."macro.lua")
+
signs_lib = {}
screwdriver = screwdriver or {}
@@ -290,6 +292,7 @@ end
local function split_lines_and_words(text)
if not text then return end
text = string.gsub(text, "@KEYWORD", current_keyword)
+ text = replace_macros(text)
local lines = { }
for _, line in ipairs(text:split("\n")) do
table.insert(lines, line:split(" "))
diff --git a/macro.lua b/macro.lua
new file mode 100644
index 0000000..1a6bfa3
--- /dev/null
+++ b/macro.lua
@@ -0,0 +1,48 @@
+-- signs_lib text macros
+-- by orwell96
+
+local mstore=minetest.get_mod_storage()
+
+local macros = minetest.deserialize(mstore:get_string("macros")) or {}
+
+local function save_macros()
+ mstore:set_string("macros", minetest.serialize(macros))
+end
+
+minetest.register_privilege("signs_macro", { description = "May edit sign macros", give_to_singleplayer = true, default = false })
+
+minetest.register_chatcommand("signs_macro", {
+ params = "list | set <macro> <string> | clear <macro>",
+ description = "List or edit sign macros",
+ privs = {signs_macros},
+ func = function(name, param)
+ if param=="list" then
+ local c=0
+ for k,v in pairs(macros) do
+ minetest.chat_send_player(name, "@"..k.." -> "..v)
+ c=c+1
+ end
+ return true, "Listed "..c.." sign macros."
+ end
+ local macro, strg = string.match(param, "^set%s@?([^@%s]+)%s?(.*)$")
+ if macro and strg then
+ macros[macro]=strg
+ save_macros()
+ return true, "Set macro '@"..macro.."'."
+ end
+ macro = string.match(param, "^clear%s@?(%S+)$")
+ if macro then
+ macros[macro]=nil
+ save_macros()
+ return true, "Cleared macro '@"..macro.."'."
+ end
+ return false, "Incorrect usage! Syntax: list | set <macro> <string> | clear <macro>"
+ end
+ })
+-- replace_macros(text)
+return function(text)
+ for k, v in pairs(macros) do
+ text=string.gsub(text, "@"..k, v)
+ end
+ return text
+end