diff options
author | orwell96 <orwell@bleipb.de> | 2017-10-19 13:37:46 +0200 |
---|---|---|
committer | orwell96 <orwell@bleipb.de> | 2017-10-19 13:40:19 +0200 |
commit | a06627f23b052207d3fc23d786c525f2cd26096c (patch) | |
tree | f8365faa71abbd2e531a54124d459deac06de4ab | |
parent | a755607f7d9a84daff679f706f10a5b90743aa5a (diff) |
Add sign macro functionality
Allow to replace certain keywords on signs by defining a single string globally
-rw-r--r-- | init.lua | 3 | ||||
-rw-r--r-- | macro.lua | 48 |
2 files changed, 51 insertions, 0 deletions
@@ -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 |