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 /settings.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 'settings.lua')
-rw-r--r-- | settings.lua | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/settings.lua b/settings.lua new file mode 100644 index 0000000..fa1254a --- /dev/null +++ b/settings.lua @@ -0,0 +1,67 @@ +mesecons_debug.settings = { + -- in seconds + hud_refresh_interval = tonumber(minetest.settings:get("mesecons_debug.hud_refresh_interval")) or 1, + + -- max penalty in seconds + max_penalty = tonumber(minetest.settings:get("mesecons_debug.max_penalty")) or 120, + + -- everything above this threshold will disable the mesecons in that mapblock entirely + penalty_mapblock_disabled = tonumber(minetest.settings:get("mesecons_debug.penalty_mapblock_disabled")) or 110, + + -- time between /mesecons_clear_penalty commands, in seconds + penalty_clear_cooldown = tonumber(minetest.settings:get("mesecons_debug.penalty_clear_cooldown")) or 120, + + -- remove unmodified penalty data for a mapblock from memory after this many seconds + gc_interval = tonumber(minetest.settings:get("mesecons_debug.gc_interval")) or 61, + + -- steps between updating penalties + penalty_check_steps = tonumber(minetest.settings:get("mesecons_debug.penalty_check_steps")) or 50, + + -- ratio of actual to expected duration of server steps + moderate_lag_ratio = tonumber(minetest.settings:get("mesecons_debug.moderate_lag_ratio")) or 3, + + -- ratio of actual to expected duration of server steps + high_lag_ratio = tonumber(minetest.settings:get("mesecons_debug.high_lag_ratio")) or 10, + + -- percentage of total server load due to mesecons + high_load_threshold = tonumber(minetest.settings:get("mesecons_debug.high_load_threshold")) or 0.33, + + -- scale of penalty during high load + high_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.high_penalty_scale")) or 0.5, + + -- offset of penalty during high load + high_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.high_penalty_offset")) or -0.5, + + -- scale of penalty during medium load + medium_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_scale")) or 0.2, + + -- offset of penalty during medium load + medium_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_offset")) or -0.67, + + -- scale of penalty during low load + low_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.low_penalty_scale")) or 0.1, + + -- offset of penalty during low load + low_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.low_penalty_offset")) or -1, + + -- forces (1 / clamp) <= relative load <= clamp + relative_load_clamp = tonumber(minetest.settings:get("mesecons_debug.relative_load_clamp")) or 10, + + -- coefficient used in calculating an exponential moving average of values across penalty checks + averaging_coefficient = tonumber(minetest.settings:get("mesecons_debug.averaging_coefficient")) or 0.2, + + _listeners = {}, + _subscribe_for_modification = function(name, func) + local listeners = mesecons_debug.settings._listeners[name] or {} + table.insert(listeners, func) + mesecons_debug.settings._listeners[name] = listeners + end, + + modify_setting = function(name, value) + value = tonumber(value) + mesecons_debug.settings[name] = value + for _, func in ipairs(mesecons_debug.settings._listeners[name] or {}) do + func(value) + end + end, +} |