From 2651262fa3134415f349f63840c89486fabd9063 Mon Sep 17 00:00:00 2001 From: fluxionary <25628292+fluxionary@users.noreply.github.com> Date: Sun, 13 Feb 2022 06:54:41 -0800 Subject: rework mesecons debug to be more flexible (#7) * add proper settings (untested) * more constants -> settings * normalize whitespace between code files * refactor globalsteps in order to simplify logic * minor refactoring * rename file * use mod_storage for persistent data; optimize context initialization * refactoring (moving files around) * rewrite penalty * add settings; document; allow changing while game is running * add command to update settings * update init after splitting commands into files * fix bugs; add debugging tools; too much for one commit... * fix whitelist conversion * add adjustable blinky plant to timer overrides * add some more mesecons nodes with repeating timers * resolve luacheck warnings * tweak hud * Update documentation; parameterize more things; refactor some logic for readability --- commands/admin_commands.lua | 122 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 commands/admin_commands.lua (limited to 'commands/admin_commands.lua') diff --git a/commands/admin_commands.lua b/commands/admin_commands.lua new file mode 100644 index 0000000..19a7cb6 --- /dev/null +++ b/commands/admin_commands.lua @@ -0,0 +1,122 @@ +minetest.register_chatcommand("mesecons_enable", { + description = "enables the mesecons globlastep", + privs = { mesecons_debug = true }, + func = function() + -- flush actions, while we are on it + mesecon.queue.actions = {} + mesecons_debug.mesecons_enabled = true + return true, "mesecons enabled" + end +}) + +minetest.register_chatcommand("mesecons_disable", { + description = "disables the mesecons globlastep", + privs = { mesecons_debug = true }, + func = function() + mesecons_debug.mesecons_enabled = false + return true, "mesecons disabled" + end +}) + +minetest.register_chatcommand("mesecons_whitelist_get", { + description = "shows the current mapblock whitelist", + privs = { mesecons_debug = true }, + func = function() + local count = 0 + local list = {} + for hash, _ in pairs(mesecons_debug.storage:to_table().fields) do + table.insert(list, minetest.pos_to_string(minetest.get_position_from_hash(hash))) + count = count + 1 + end + + return true, ( + "mesecons whitelist:\n" .. + "%s\n" .. + "%i mapblocks whitelisted" + ):format( + table.concat(list, "\n"), + count + ) + end +}) + +minetest.register_chatcommand("mesecons_whitelist_add", { + description = "adds the current mapblock to the whitelist", + privs = { mesecons_debug = true }, + func = function(name) + local player = minetest.get_player_by_name(name) + if not player then + return + end + + local hash = mesecons_debug.hashpos(player:get_pos()) + local ctx = mesecons_debug.get_context(hash) + ctx.whitelisted = true + mesecons_debug.storage:set_string(hash, "1") + + return true, "mapblock whitlisted" + end +}) + +minetest.register_chatcommand("mesecons_whitelist_remove", { + description = "removes the current mapblock from the whitelist", + privs = { mesecons_debug = true }, + func = function(name) + local player = minetest.get_player_by_name(name) + if not player then + return + end + + local hash = mesecons_debug.hashpos(player:get_pos()) + local ctx = mesecons_debug.get_context(hash) + ctx.whitelisted = false + mesecons_debug.storage:set_string(hash, "") + + return true, "mapblock removed from whitelist" + end +}) + +minetest.register_chatcommand("mesecons_debug_set", { + description = "modify mesecons_debug settings", + params = " ", + privs = { mesecons_debug = true }, + func = function(name, params) + local player = minetest.get_player_by_name(name) + if not player or not params then + return false + end + + local setting, value = params:match('^([a-zA-Z0-9_-]+)%s+(.*)$') + value = tonumber(value) + if not setting or not value then + return false + end + + if not mesecons_debug.settings[setting] then + return false, "unknown setting" + end + + mesecons_debug.settings.modify_setting(setting, value) + + return true, "setting updated" + end +}) + +minetest.register_chatcommand("mesecons_debug_get", { + description = "get mesecons_debug settings", + params = "", + privs = { mesecons_debug = true }, + func = function(name, setting) + local player = minetest.get_player_by_name(name) + if not player or not setting then + return false + end + + local value = mesecons_debug.settings[setting] + if value then + return true, tostring(value) + else + return false, "unknown setting" + end + end +}) -- cgit v1.2.3