diff options
author | fluxionary <25628292+fluxionary@users.noreply.github.com> | 2022-02-13 06:54:41 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-13 15:54:41 +0100 |
commit | 2651262fa3134415f349f63840c89486fabd9063 (patch) | |
tree | 3fa7f2ac228e662b4e9bc8071acc2f0650c44e65 /commands/admin_commands.lua | |
parent | 1a41379e1d7ae69347f0e6ee6a997234f7590793 (diff) | |
download | mesecons_debug-2651262fa3134415f349f63840c89486fabd9063.tar.gz mesecons_debug-2651262fa3134415f349f63840c89486fabd9063.zip |
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
Diffstat (limited to 'commands/admin_commands.lua')
-rw-r--r-- | commands/admin_commands.lua | 122 |
1 files changed, 122 insertions, 0 deletions
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 = "<setting> <value>", + 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 = "<setting>", + 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 +}) |