From a06627f23b052207d3fc23d786c525f2cd26096c Mon Sep 17 00:00:00 2001 From: orwell96 Date: Thu, 19 Oct 2017 13:37:46 +0200 Subject: Add sign macro functionality Allow to replace certain keywords on signs by defining a single string globally --- init.lua | 3 +++ macro.lua | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 macro.lua 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 | clear ", + 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 | clear " + end + }) +-- replace_macros(text) +return function(text) + for k, v in pairs(macros) do + text=string.gsub(text, "@"..k, v) + end + return text +end -- cgit v1.2.3