aboutsummaryrefslogtreecommitdiff
path: root/commands/admin_commands.lua
diff options
context:
space:
mode:
authorfluxionary <25628292+fluxionary@users.noreply.github.com>2022-02-13 06:54:41 -0800
committerGitHub <noreply@github.com>2022-02-13 15:54:41 +0100
commit2651262fa3134415f349f63840c89486fabd9063 (patch)
tree3fa7f2ac228e662b4e9bc8071acc2f0650c44e65 /commands/admin_commands.lua
parent1a41379e1d7ae69347f0e6ee6a997234f7590793 (diff)
downloadmesecons_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.lua122
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
+})