diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 99106e00b..0cacb5288 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -795,6 +795,15 @@ sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2 # Length of a server tick and the interval at which objects are generally updated over network. dedicated_server_step (Dedicated server step) float 0.1 +# Time in between active block management cycles +active_block_mgmt_interval (Active Block Management interval) float 2.0 + +# Length of time between ABM execution cycles +abm_interval (Active Block Modifier interval) float 1.0 + +# Length of time between NodeTimer execution cycles +nodetimer_interval (NodeTimer interval) float 1.0 + # If enabled, invalid world data won't cause the server to shut down. # Only enable this if you know what you are doing. ignore_world_load_errors (Ignore world errors) bool false diff --git a/minetest.conf.example b/minetest.conf.example index 6a9dc5ce3..65b1f19e5 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -980,6 +980,18 @@ # type: float # dedicated_server_step = 0.1 +# Length of time between Active Block Management execution cycles +# type: float +# active_block_mgmt_interval = 2.0 + +# Length of time between ABM execution cycles +# type: float +# abm_interval = 1.0 + +# Length of time between NodeTimer execution cycles +# type: float +# nodetimer_interval = 1.0 + # If enabled, invalid world data won't cause the server to shut down. # Only enable this if you know what you are doing. # type: bool diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 84098e3d5..e00ff1489 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -280,6 +280,9 @@ void set_default_settings(Settings *settings) settings->setDefault("sqlite_synchronous", "2"); settings->setDefault("full_block_send_enable_min_time_from_building", "2.0"); settings->setDefault("dedicated_server_step", "0.1"); + settings->setDefault("active_block_mgmt_interval", "2.0"); + settings->setDefault("abm_interval", "1.0"); + settings->setDefault("nodetimer_interval", "1.0"); settings->setDefault("ignore_world_load_errors", "false"); settings->setDefault("remote_media", ""); settings->setDefault("debug_log_level", "action"); diff --git a/src/environment.cpp b/src/environment.cpp index 1de44e755..902e2bda4 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -59,6 +59,9 @@ Environment::Environment(): m_day_night_ratio_override(0.0f) { m_cache_enable_shaders = g_settings->getBool("enable_shaders"); + m_cache_active_block_mgmt_interval = g_settings->getFloat("active_block_mgmt_interval"); + m_cache_abm_interval = g_settings->getFloat("abm_interval"); + m_cache_nodetimer_interval = g_settings->getFloat("nodetimer_interval"); } Environment::~Environment() @@ -1322,9 +1325,8 @@ void ServerEnvironment::step(float dtime) /* Manage active block list */ - if(m_active_blocks_management_interval.step(dtime, 2.0)) - { - ScopeProfiler sp(g_profiler, "SEnv: manage act. block list avg /2s", SPT_AVG); + if (m_active_blocks_management_interval.step(dtime, m_cache_active_block_mgmt_interval)) { + ScopeProfiler sp(g_profiler, "SEnv: manage act. block list avg per interval", SPT_AVG); /* Get player block positions */ @@ -1399,11 +1401,10 @@ void ServerEnvironment::step(float dtime) /* Mess around in active blocks */ - if(m_active_blocks_nodemetadata_interval.step(dtime, 1.0)) - { - ScopeProfiler sp(g_profiler, "SEnv: mess in act. blocks avg /1s", SPT_AVG); + if (m_active_blocks_nodemetadata_interval.step(dtime, m_cache_nodetimer_interval)) { + ScopeProfiler sp(g_profiler, "SEnv: mess in act. blocks avg per interval", SPT_AVG); - float dtime = 1.0; + float dtime = m_cache_nodetimer_interval; for(std::set::iterator i = m_active_blocks.m_list.begin(); @@ -1446,19 +1447,18 @@ void ServerEnvironment::step(float dtime) } } - const float abm_interval = 1.0; - if(m_active_block_modifier_interval.step(dtime, abm_interval)) + if (m_active_block_modifier_interval.step(dtime, m_cache_abm_interval)) do{ // breakable if(m_active_block_interval_overload_skip > 0){ ScopeProfiler sp(g_profiler, "SEnv: ABM overload skips"); m_active_block_interval_overload_skip--; break; } - ScopeProfiler sp(g_profiler, "SEnv: modify in blocks avg /1s", SPT_AVG); - TimeTaker timer("modify in active blocks"); + ScopeProfiler sp(g_profiler, "SEnv: modify in blocks avg per interval", SPT_AVG); + TimeTaker timer("modify in active blocks per interval"); // Initialize handling of ActiveBlockModifiers - ABMHandler abmhandler(m_abms, abm_interval, this, true); + ABMHandler abmhandler(m_abms, m_cache_abm_interval, this, true); for(std::set::iterator i = m_active_blocks.m_list.begin(); diff --git a/src/environment.h b/src/environment.h index 9b91a0928..660c6f1bc 100644 --- a/src/environment.h +++ b/src/environment.h @@ -136,6 +136,9 @@ protected: * a later release. */ bool m_cache_enable_shaders; + float m_cache_active_block_mgmt_interval; + float m_cache_abm_interval; + float m_cache_nodetimer_interval; private: Mutex m_time_lock; diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp index 0e0c3acc0..77fd6c682 100644 --- a/src/settings_translation_file.cpp +++ b/src/settings_translation_file.cpp @@ -409,6 +409,12 @@ fake_function() { gettext("See http://www.sqlite.org/pragma.html#pragma_synchronous"); gettext("Dedicated server step"); gettext("Length of a server tick and the interval at which objects are generally updated over network."); + gettext("Active Block Management interval"); + gettext("Time in between active block management cycles"); + gettext("ABM modifier interval"); + gettext("Length of time between ABM execution cycles"); + gettext("NodeTimer interval"); + gettext("Length of time between NodeTimer execution cycles"); gettext("Ignore world errors"); gettext("If enabled, invalid world data won't cause the server to shut down.\nOnly enable this if you know what you are doing."); gettext("Liquid loop max");