diff options
Diffstat (limited to '')
-rw-r--r-- | .github/workflows/luacheck.yml | 17 | ||||
-rw-r--r-- | .github/workflows/pre-commit.yml | 31 | ||||
-rw-r--r-- | .luacheckrc | 667 | ||||
-rw-r--r-- | .pre-commit-config.yaml | 25 | ||||
-rw-r--r-- | .stylua.toml | 1 | ||||
-rw-r--r-- | README.md | 43 | ||||
-rw-r--r-- | commands/admin_commands.lua | 26 | ||||
-rw-r--r-- | commands/clear_penalty.lua | 6 | ||||
-rw-r--r-- | commands/create_lag.lua | 3 | ||||
-rw-r--r-- | commands/flush.lua | 2 | ||||
-rw-r--r-- | commands/user_commands.lua | 25 | ||||
-rw-r--r-- | context.lua | 2 | ||||
-rw-r--r-- | hud.lua | 79 | ||||
-rw-r--r-- | init.lua | 6 | ||||
-rw-r--r-- | mod.conf | 15 | ||||
-rw-r--r-- | nodes/mesecons_lagger.lua | 15 | ||||
-rw-r--r-- | nodes/penalty_controller.lua | 12 | ||||
-rw-r--r-- | overrides/mesecons_queue.lua | 17 | ||||
-rw-r--r-- | overrides/node_timers.lua | 1 | ||||
-rw-r--r-- | penalty.lua | 56 | ||||
-rw-r--r-- | privs.lua | 2 | ||||
-rw-r--r-- | settings.lua | 12 | ||||
-rw-r--r-- | settingtypes.txt | 12 | ||||
-rw-r--r-- | util.lua | 12 |
24 files changed, 901 insertions, 186 deletions
diff --git a/.github/workflows/luacheck.yml b/.github/workflows/luacheck.yml deleted file mode 100644 index 1d24ecc..0000000 --- a/.github/workflows/luacheck.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: luacheck - -on: [pull_request, push] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v1 - - name: apt - run: sudo apt-get install -y luarocks - - name: luacheck install - run: luarocks install --local luacheck - - name: luacheck run - run: $HOME/.luarocks/bin/luacheck ./ diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000..37221d7 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,31 @@ +name: pre-commit +on: [push, pull_request, workflow_dispatch] + +jobs: + check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@master + - uses: actions/setup-python@master + + - name: install luarocks + run: sudo apt-get install -y luarocks + + - name: add luarocks path + run: echo "$HOME/.luarocks/bin" >> $GITHUB_PATH + + - name: luacheck install + run: luarocks install --local luacheck + + - name: install cargo + run: sudo apt-get install -y cargo + + - name: install stylua + run: cargo install stylua + + - name: Install pre-commit + run: pip3 install pre-commit + + - name: Run pre-commit + run: pre-commit run --all-files diff --git a/.luacheckrc b/.luacheckrc index 61bc753..ae77756 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,21 +1,658 @@ +std = "lua51+luajit+minetest+mesecons_debug" +unused_args = false +max_line_length = 120 -ignore = {"212/_.*"} +stds.minetest = { + read_globals = { + "DIR_DELIM", + "dump", + "dump2", -globals = { - "mesecons_debug", - "mesecon", - "minetest" -} + math = { + fields = { + abs = {}, + acos = {}, + asin = {}, + atan = {}, + atan2 = {}, + ceil = {}, + cos = {}, + cosh = {}, + deg = {}, + exp = {}, + factorial = {}, + floor = {}, + fmod = {}, + frexp = {}, + huge = {}, + hypot = {}, + ldexp = {}, + log = {}, + log10 = {}, + max = {}, + min = {}, + modf = {}, + pi = {}, + pow = {}, + rad = {}, + random = {}, + randomseed = {}, + round = {}, + sign = {}, + sin = {}, + sinh = {}, + sqrt = {}, + tan = {}, + tanh = {}, + }, + }, + table = { + fields = { + copy = {}, + concat = {}, + foreach = {}, + foreachi = {}, + getn = {}, + indexof = {}, + insert = {}, + insert_all = {}, + key_value_swap = {}, + maxn = {}, + move = {}, + remove = {}, + shuffle = {}, + sort = {}, + }, + }, + string = { + fields = { + byte = {}, + char = {}, + dump = {}, + find = {}, + format = {}, + gmatch = {}, + len = {}, + lower = {}, + match = {}, + rep = {}, + reverse = {}, + split = {}, + sub = {}, + trim = {}, + upper = {}, + }, + }, + vector = { + fields = { + add = {}, + angle = {}, + apply = {}, + check = {}, + combine = {}, + copy = {}, + cross = {}, + dir_to_rotation = {}, + direction = {}, + distance = {}, + divide = {}, + dot = {}, + equals = {}, + floor = {}, + from_string = {}, + length = {}, + metatable = {}, + multiply = {}, + new = {}, + normalize = {}, + offset = {}, + rotate = {}, + rotate_around_axis = {}, + round = {}, + sort = {}, + subtract = {}, + to_string = {}, + zero = {}, + }, + }, -read_globals = { - -- Stdlib - string = {fields = {"split"}}, - table = {fields = {"copy", "getn"}}, + ItemStack = { + fields = { + add_item = {}, + add_wear = {}, + add_wear_by_uses = {}, + clear = {}, + get_count = {}, + get_definition = {}, + get_description = {}, + get_free_space = {}, + get_meta = {}, + get_metadata = {}, + get_name = {}, + get_short_description = {}, + get_stack_max = {}, + get_tool_capabilities = {}, + get_wear = {}, + is_empty = {}, + is_known = {}, + item_fits = {}, + peek_item = {}, + replace = {}, + set_count = {}, + set_metadata = {}, + set_name = {}, + set_wear = {}, + take_item = {}, + to_string = {}, + to_table = {}, + }, + }, + PerlinNoise = { + fields = { + get_2d = {}, + get_3d = {}, + }, + }, + PerlinNoiseMap = { + fields = { + calc_2d_map = {}, + calc_3d_map = {}, + get_2d_map = {}, + get_2d_map_flat = {}, + get_3d_map = {}, + get_3d_map_flat = {}, + get_map_slice = {}, + }, + }, + PseudoRandom = { + fields = { + next = {}, + }, + }, + PcgRandom = { + fields = { + next = {}, + rand_normal_dist = {}, + }, + }, + SecureRandom = { + fields = { + next_bytes = {}, + }, + }, + Settings = { + fields = { + get = {}, + get_bool = {}, + get_flags = {}, + get_names = {}, + get_np_group = {}, + remove = {}, + set = {}, + set_bool = {}, + set_np_group = {}, + to_table = {}, + write = {}, + }, + }, + VoxelArea = { + fields = { + MaxEdge = {}, + MinEdge = {}, + contains = {}, + containsi = {}, + containsp = {}, + getExtent = {}, + getVolume = {}, + index = {}, + indexp = {}, + iter = {}, + iterp = {}, + new = {}, + position = {}, + ystride = {}, + zstride = {}, + }, + }, + VoxelManip = { + fields = { + calc_lighting = {}, + get_data = {}, + get_emerged_area = {}, + get_light_data = {}, + get_node_at = {}, + get_param2_data = {}, + read_from_map = {}, + set_data = {}, + set_light_data = {}, + set_lighting = {}, + set_node_at = {}, + set_param2_data = {}, + update_liquids = {}, + update_map = {}, + was_modified = {}, + write_to_map = {}, + }, + }, - -- Minetest - "vector", "ItemStack", - "dump", + minetest = { + fields = { + CONTENT_AIR = {}, + CONTENT_IGNORE = {}, + CONTENT_UNKNOWN = {}, + EMERGE_CANCELLED = {}, + EMERGE_ERRORED = {}, + EMERGE_FROM_DISK = {}, + EMERGE_FROM_MEMORY = {}, + EMERGE_GENERATED = {}, + LIGHT_MAX = {}, + MAP_BLOCKSIZE = {}, + PLAYER_MAX_BREATH_DEFAULT = {}, + PLAYER_MAX_HP_DEFAULT = {}, + add_entity = {}, + add_item = {}, + add_node = {}, + add_node_level = {}, + add_particle = {}, + add_particlespawner = {}, + after = {}, + async_event_handler = {}, + async_jobs = {}, + auth_reload = {}, + ban_player = {}, + builtin_auth_handler = {}, + bulk_set_node = {}, + calculate_knockback = {}, + callback_origins = {}, + cancel_shutdown_requests = {}, + chat_send_all = {}, + chat_send_player = {}, + chatcommands = {}, + check_for_falling = {}, + check_password_entry = {}, + check_player_privs = {}, + check_single_for_falling = {}, + clear_craft = {}, + clear_objects = {}, + clear_registered_biomes = {}, + clear_registered_decorations = {}, + clear_registered_ores = {}, + clear_registered_schematics = {}, + close_formspec = {}, + colorize = {}, + colorspec_to_bytes = {}, + colorspec_to_colorstring = {}, + compare_block_status = {}, + compress = {}, + cpdir = {}, + craft_predict = {}, + craftitemdef_default = {}, + create_detached_inventory = {}, + create_detached_inventory_raw = {}, + create_schematic = {}, + debug = {}, + decode_base64 = {}, + decompress = {}, + delete_area = {}, + delete_particlespawner = {}, + deserialize = {}, + detached_inventories = {}, + dig_node = {}, + dir_to_facedir = {}, + dir_to_wallmounted = {}, + dir_to_yaw = {}, + disconnect_player = {}, + do_async_callback = {}, + do_item_eat = {}, + dynamic_add_media = {}, + dynamic_media_callbacks = {}, + emerge_area = {}, + encode_base64 = {}, + encode_png = {}, + env = {}, + explode_scrollbar_event = {}, + explode_table_event = {}, + explode_textlist_event = {}, + facedir_to_dir = {}, + features = {}, + find_node_near = {}, + find_nodes_in_area = {}, + find_nodes_in_area_under_air = {}, + find_nodes_with_meta = {}, + find_path = {}, + fix_light = {}, + forceload_block = {}, + forceload_free_block = {}, + format_chat_message = {}, + formspec_escape = {}, + generate_decorations = {}, + generate_ores = {}, + get_all_craft_recipes = {}, + get_artificial_light = {}, + get_auth_handler = {}, + get_background_escape_sequence = {}, + get_ban_description = {}, + get_ban_list = {}, + get_biome_data = {}, + get_biome_id = {}, + get_biome_name = {}, + get_builtin_path = {}, + get_color_escape_sequence = {}, + get_connected_players = {}, + get_content_id = {}, + get_craft_recipe = {}, + get_craft_result = {}, + get_current_modname = {}, + get_day_count = {}, + get_decoration_id = {}, + get_dig_params = {}, + get_dir_list = {}, + get_gametime = {}, + get_gen_notify = {}, + get_heat = {}, + get_hit_params = {}, + get_humidity = {}, + get_inventory = {}, + get_item_group = {}, + get_last_run_mod = {}, + get_mapgen_object = {}, + get_mapgen_params = {}, + get_mapgen_setting = {}, + get_mapgen_setting_noiseparams = {}, + get_meta = {}, + get_mod_storage = {}, + get_modnames = {}, + get_modpath = {}, + get_name_from_content_id = {}, + get_natural_light = {}, + get_node = {}, + get_node_drops = {}, + get_node_group = {}, + get_node_level = {}, + get_node_light = {}, + get_node_max_level = {}, + get_node_or_nil = {}, + get_node_timer = {}, + get_noiseparams = {}, + get_objects_in_area = {}, + get_objects_inside_radius = {}, + get_password_hash = {}, + get_perlin = {}, + get_perlin_map = {}, + get_player_by_name = {}, + get_player_information = {}, + get_player_ip = {}, + get_player_privs = {}, + get_player_radius_area = {}, + get_pointed_thing_position = {}, + get_position_from_hash = {}, + get_server_max_lag = {}, + get_server_status = {}, + get_server_uptime = {}, + get_spawn_level = {}, + get_timeofday = {}, + get_tool_wear_after_use = {}, + get_translated_string = {}, + get_translator = {}, + get_us_time = {}, + get_user_path = {}, + get_version = {}, + get_voxel_manip = {}, + get_worldpath = {}, + global_exists = {}, + handle_async = {}, + handle_node_drops = {}, + has_feature = {}, + hash_node_position = {}, + hud_replace_builtin = {}, + inventorycube = {}, + is_area_protected = {}, + is_colored_paramtype = {}, + is_creative_enabled = {}, + is_nan = {}, + is_player = {}, + is_protected = {}, + is_singleplayer = {}, + is_yes = {}, + item_drop = {}, + item_eat = {}, + item_place = {}, + item_place_node = {}, + item_place_object = {}, + item_secondary_use = {}, + itemstring_with_color = {}, + itemstring_with_palette = {}, + kick_player = {}, + line_of_sight = {}, + load_area = {}, + log = {}, + luaentities = {}, + mkdir = {}, + mod_channel_join = {}, + mvdir = {}, + node_dig = {}, + node_punch = {}, + nodedef_default = {}, + noneitemdef_default = {}, + notify_authentication_modified = {}, + object_refs = {}, + on_craft = {}, + override_chatcommand = {}, + override_item = {}, + parse_coordinates = {}, + parse_json = {}, + parse_relative_number = {}, + place_node = {}, + place_schematic = {}, + place_schematic_on_vmanip = {}, + player_exists = {}, + pointed_thing_to_face_pos = {}, + pos_to_string = {}, + print = {}, + privs_to_string = {}, + punch_node = {}, + raillike_group = {}, + raycast = {}, + read_schematic = {}, + record_protection_violation = {}, + register_abm = {}, + register_alias = {}, + register_alias_force = {}, + register_allow_player_inventory_action = {}, + register_async_dofile = {}, + register_authentication_handler = {}, + register_biome = {}, + register_can_bypass_userlimit = {}, + register_chatcommand = {}, + register_craft = {}, + register_craft_predict = {}, + register_craftitem = {}, + register_decoration = {}, + register_entity = {}, + register_globalstep = {}, + register_item = {}, + register_lbm = {}, + register_node = {}, + register_on_auth_fail = {}, + register_on_authplayer = {}, + register_on_chat_message = {}, + register_on_chatcommand = {}, + register_on_cheat = {}, + register_on_craft = {}, + register_on_dieplayer = {}, + register_on_dignode = {}, + register_on_generated = {}, + register_on_item_eat = {}, + register_on_joinplayer = {}, + register_on_leaveplayer = {}, + register_on_liquid_transformed = {}, + register_on_mapgen_init = {}, + register_on_modchannel_message = {}, + register_on_mods_loaded = {}, + register_on_newplayer = {}, + register_on_placenode = {}, + register_on_player_hpchange = {}, + register_on_player_inventory_action = {}, + register_on_player_receive_fields = {}, + register_on_prejoinplayer = {}, + register_on_priv_grant = {}, + register_on_priv_revoke = {}, + register_on_protection_violation = {}, + register_on_punchnode = {}, + register_on_punchplayer = {}, + register_on_respawnplayer = {}, + register_on_rightclickplayer = {}, + register_on_shutdown = {}, + register_ore = {}, + register_playerevent = {}, + register_privilege = {}, + register_schematic = {}, + register_tool = {}, + registered_abms = {other_fields = true}, + registered_aliases = {other_fields = true}, + registered_allow_player_inventory_actions = {other_fields = true}, + registered_biomes = {other_fields = true}, + registered_can_bypass_userlimit = {other_fields = true}, + registered_chatcommands = {other_fields = true}, + registered_craft_predicts = {other_fields = true}, + registered_craftitems = {other_fields = true}, + registered_decorations = {other_fields = true}, + registered_entities = {other_fields = true}, + registered_globalsteps = {other_fields = true}, + registered_items = {other_fields = true}, + registered_lbms = {other_fields = true}, + registered_nodes = {other_fields = true}, + registered_on_authplayers = {other_fields = true}, + registered_on_chat_messages = {other_fields = true}, + registered_on_chatcommands = {other_fields = true}, + registered_on_cheats = {other_fields = true}, + registered_on_crafts = {other_fields = true}, + registered_on_dieplayers = {other_fields = true}, + registered_on_dignodes = {other_fields = true}, + registered_on_generateds = {other_fields = true}, + registered_on_item_eats = {other_fields = true}, + registered_on_joinplayers = {other_fields = true}, + registered_on_leaveplayers = {other_fields = true}, + registered_on_liquid_transformed = {other_fields = true}, + registered_on_modchannel_message = {other_fields = true}, + registered_on_mods_loaded = {other_fields = true}, + registered_on_newplayers = {other_fields = true}, + registered_on_placenodes = {other_fields = true}, + registered_on_player_hpchange = {other_fields = true}, + registered_on_player_hpchanges = {other_fields = true}, + registered_on_player_inventory_actions = {other_fields = true}, + registered_on_player_receive_fields = {other_fields = true}, + registered_on_prejoinplayers = {other_fields = true}, + registered_on_priv_grant = {other_fields = true}, + registered_on_priv_revoke = {other_fields = true}, + registered_on_protection_violation = {other_fields = true}, + registered_on_punchnodes = {other_fields = true}, + registered_on_punchplayers = {other_fields = true}, + registered_on_respawnplayers = {other_fields = true}, + registered_on_rightclickplayers = {other_fields = true}, + registered_on_shutdown = {other_fields = true}, + registered_ores = {other_fields = true}, + registered_playerevents = {other_fields = true}, + registered_privileges = {other_fields = true}, + registered_tools = {other_fields = true}, + remove_detached_inventory = {}, + remove_detached_inventory_raw = {}, + remove_node = {}, + remove_player = {}, + remove_player_auth = {}, + request_http_api = {}, + request_insecure_environment = {}, + request_shutdown = {}, + rgba = {}, + rmdir = {}, + rollback_get_last_node_actor = {}, + rollback_get_node_actions = {}, + rollback_punch_callbacks = {}, + rollback_revert_actions_by = {}, + rotate_and_place = {}, + rotate_node = {}, + run_callbacks = {}, + run_priv_callbacks = {}, + safe_file_write = {}, + send_join_message = {}, + send_leave_message = {}, + serialize = {}, + serialize_roundtrip = {}, + serialize_schematic = {}, + set_gen_notify = {}, + set_last_run_mod = {}, + set_mapgen_params = {}, + set_mapgen_setting = {}, + set_mapgen_setting_noiseparams = {}, + set_node = {}, + set_node_level = {}, + set_noiseparams = {}, + set_player_password = {}, + set_player_privs = {}, + set_timeofday = {}, + setting_get = {}, + setting_get_pos = {}, + setting_getbool = {}, + setting_save = {}, + setting_set = {}, + setting_setbool = {}, + settings = { + fields = { + get = {}, + get_bool = {}, + get_np_group = {}, + get_flags = {}, + set = {}, + set_bool = {}, + set_np_group = {}, + remove = {}, + get_names = {}, + write = {}, + to_table = {}, + }, + }, + sha1 = {}, + show_formspec = {}, + show_general_help_formspec = {}, + show_privs_help_formspec = {}, + sound_fade = {}, + sound_play = {}, + sound_stop = {}, + spawn_falling_node = {}, + spawn_item = {}, + spawn_tree = {}, + string_to_area = {}, + string_to_pos = {}, + string_to_privs = {}, + strip_background_colors = {}, + strip_colors = {}, + strip_foreground_colors = {}, + strip_param2_color = {}, + swap_node = {}, + tooldef_default = {}, + transforming_liquid_add = {}, + translate = {}, + unban_player_or_ip = {}, + unregister_biome = {}, + unregister_chatcommand = {}, + unregister_item = {}, + wallmounted_to_dir = {}, + wrap_text = {}, + write_json = {}, + yaw_to_dir = {}, + }, + }, + } +} - "monitoring", - "digiline" +stds.mesecons_debug = { + globals = { + "mesecons_debug", + "mesecon", + "minetest", + }, + read_globals = { + "monitoring", + "digiline" + }, } diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..3d311a8 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,25 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.3.0 + hooks: + - id: fix-byte-order-marker + - id: end-of-file-fixer + - id: trailing-whitespace + - id: mixed-line-ending + args: [ --fix=lf ] + + - repo: local + hooks: + - id: luacheck + name: luacheck + language: system + entry: luacheck + pass_filenames: true + types: [ file, lua ] + args: [ -q ] + - id: stylua + name: stylua + language: system + entry: stylua + pass_filenames: true + types: [ file, lua ] diff --git a/.stylua.toml b/.stylua.toml new file mode 100644 index 0000000..394e884 --- /dev/null +++ b/.stylua.toml @@ -0,0 +1 @@ +indent_type = "Spaces" @@ -1,61 +1,61 @@ # Mesecons Debug Collection -Throttles mesecons if the server is lagging, in particular when mesecons is causing the lag. +Throttles mesecons if the server is lagging, in particular when mesecons is causing the lag. # Overview This mod can penalizes mesecons activity on a per-mapblock basis, which can help laggy or machine-heavy servers -to be less laggy overall. Penalties are implemented as delays on various events. +to be less laggy overall. Penalties are implemented as delays on various events. Lag and per-mapblock mesecons usage are tracked over time, in order to calculate how much to penalize each -mapblock, or whether to reduce the penalty. +mapblock, or whether to reduce the penalty. -The mod defines 3 regimes of lag, with different scales of penalties. +The mod defines 3 regimes of lag, with different scales of penalties. * If the server steps are not taking much longer than the time allotted for them, the "low penalty" regime will apply. -* If the server steps are taking too long on average, and mesecons usage isn't particularly high, the "medium penalty" +* If the server steps are taking too long on average, and mesecons usage isn't particularly high, the "medium penalty" regime will apply. * If the server steps are taking too long on average and mesecons usage is high, or the server steps are taking much too - long to execute, the "high penalty" regime will apply. + long to execute, the "high penalty" regime will apply. -Each of these regimes has an associated "scale" and "offset". Every time the penalties are re-evaluated, +Each of these regimes has an associated "scale" and "offset". Every time the penalties are re-evaluated, they are changed according to this formula: ```lua new_penalty = old_penalty + (relative_load * penalty_scale) + penalty_offset ``` -Here, relative_load is the ratio of how much time the current mapblock spends doing mesecons, to the mean time +Here, relative_load is the ratio of how much time the current mapblock spends doing mesecons, to the mean time (spent doing mesecons) across all mapblocks currently running mesecons. This value is currently clamped between 0.1 -and 10, to prevent certain edge cases from being penalized too rapidly. A value of 10 would mean that the mapblock +and 10, to prevent certain edge cases from being penalized too rapidly. A value of 10 would mean that the mapblock under consideration is using 10x as much mesecons as the average mapblock. Note that, depending on the values of `penalty_scale` and `penalty_offset`, the new penalty may be *less* than the old penalty. This is to allow penalties to reach equilibrium under a constant load, and to taper off over time if the -usage in the mapblock declines, or the regime changes. +usage in the mapblock declines, or the regime changes. ## Settings * `penalty_clear_cooldown = 120` Seconds that a player has to wait between using the `mesecons_clear_penalty` command * `max_penalty = 120` Upper limit of the per-mapblock penalty -* `penalty_mapblock_disabled = 110` +* `penalty_mapblock_disabled = 110` Completely disable mesecons in a mapblock, if the penalty exceeds this value. - Set above `max_penalty` to disable this feature. + Set above `max_penalty` to disable this feature. * `penalty_check_steps = 50` # of server steps between updating the penalties -* `gc_interval = 61` Seconds after which data about unloaded mapblocks is removed from memory. +* `gc_interval = 61` Seconds after which data about unloaded mapblocks is removed from memory. * `hud_refresh_interval = 1` Seconds between updating the client's HUD * `moderate_lag_ratio = 3` Ratio between actual and expected length of a server step at which lag is considered "moderate" * `high_lag_ratio = 9` Ratio between actual and expected length of a server step at which lag is considered "high" -* `high_load_threshold = 0.33` +* `high_load_threshold = 0.33` % of processing a server spends on mesecons at which the mescons load is considered "high". * `low_penalty_offset = -1` Offset of the penalty in the low-lag regime. -* `low_penalty_scale = 0.1` +* `low_penalty_scale = 0.1` Scale of the penalty in the low-lag regime. The default values ensure that nothing is penalized in the low-lag regime. * `medium_penalty_offset = -0.8` Offset of the penalty in the moderate-lag regime. * `medium_penalty_scale = 0.2` Scale of the penalty in the moderate-lag regime. * `high_penalty_offset = -0.5` Offset of the penalty in the high-lag regime. -* `high_penalty_scale = 0.5` Scale of the penalty in the high-lag regime. +* `high_penalty_scale = 0.5` Scale of the penalty in the high-lag regime. ## Privs @@ -63,7 +63,7 @@ usage in the mapblock declines, or the regime changes. ## Commands -* `/mesecons_clear_penalty` +* `/mesecons_clear_penalty` Clears the penalty for the current mapblock. Users can only execute this every `penalty_clear_cooldown` seconds * `/mesecons_global_stats` shows the mapblock with the most prominent usage of mesecons activity * `/mesecons_hud` toggles the hud @@ -74,10 +74,10 @@ usage in the mapblock declines, or the regime changes. All of these commands require the `mesecons_debug` privilege. -* `/create_lag <microseconds> <chance>` +* `/create_lag <microseconds> <chance>` Artificially slow down the server by `microseconds` every `chance` server steps. Useful for debugging this mod. * `/mesecons_debug_get <setting>` Inspect the current value of a setting. -* `/mesecons_debug_set <setting> <value>` Change a setting value. This does *not* save the value between reboots! +* `/mesecons_debug_set <setting> <value>` Change a setting value. This does *not* save the value between reboots! * `/mesecons_disable` Disables mesecons entirely * `/mesecons_enable` Undoes the above command * `/mesecons_flush` Flushes the mesecons action queue @@ -89,7 +89,7 @@ All of these commands require the `mesecons_debug` privilege. ### Mesecons Lagger -A node which can create `n` microseconds of lag once every `chance` server steps. Useful for debugging this mod. +A node which can create `n` microseconds of lag once every `chance` server steps. Useful for debugging this mod. ### Penalty Controller @@ -118,5 +118,8 @@ end # License +* CODE: + * ??????????? + * textures/penalty_controller_top.png * CC BY-SA 3.0 https://cheapiesystems.com/git/digistuff diff --git a/commands/admin_commands.lua b/commands/admin_commands.lua index 19a7cb6..56b9e05 100644 --- a/commands/admin_commands.lua +++ b/commands/admin_commands.lua @@ -6,7 +6,7 @@ minetest.register_chatcommand("mesecons_enable", { mesecon.queue.actions = {} mesecons_debug.mesecons_enabled = true return true, "mesecons enabled" - end + end, }) minetest.register_chatcommand("mesecons_disable", { @@ -15,7 +15,7 @@ minetest.register_chatcommand("mesecons_disable", { func = function() mesecons_debug.mesecons_enabled = false return true, "mesecons disabled" - end + end, }) minetest.register_chatcommand("mesecons_whitelist_get", { @@ -29,15 +29,9 @@ minetest.register_chatcommand("mesecons_whitelist_get", { count = count + 1 end - return true, ( - "mesecons whitelist:\n" .. - "%s\n" .. - "%i mapblocks whitelisted" - ):format( - table.concat(list, "\n"), - count - ) - end + return true, + ("mesecons whitelist:\n" .. "%s\n" .. "%i mapblocks whitelisted"):format(table.concat(list, "\n"), count) + end, }) minetest.register_chatcommand("mesecons_whitelist_add", { @@ -55,7 +49,7 @@ minetest.register_chatcommand("mesecons_whitelist_add", { mesecons_debug.storage:set_string(hash, "1") return true, "mapblock whitlisted" - end + end, }) minetest.register_chatcommand("mesecons_whitelist_remove", { @@ -73,7 +67,7 @@ minetest.register_chatcommand("mesecons_whitelist_remove", { mesecons_debug.storage:set_string(hash, "") return true, "mapblock removed from whitelist" - end + end, }) minetest.register_chatcommand("mesecons_debug_set", { @@ -86,7 +80,7 @@ minetest.register_chatcommand("mesecons_debug_set", { return false end - local setting, value = params:match('^([a-zA-Z0-9_-]+)%s+(.*)$') + local setting, value = params:match("^([a-zA-Z0-9_-]+)%s+(.*)$") value = tonumber(value) if not setting or not value then return false @@ -99,7 +93,7 @@ minetest.register_chatcommand("mesecons_debug_set", { mesecons_debug.settings.modify_setting(setting, value) return true, "setting updated" - end + end, }) minetest.register_chatcommand("mesecons_debug_get", { @@ -118,5 +112,5 @@ minetest.register_chatcommand("mesecons_debug_get", { else return false, "unknown setting" end - end + end, }) diff --git a/commands/clear_penalty.lua b/commands/clear_penalty.lua index cf64103..e887ed9 100644 --- a/commands/clear_penalty.lua +++ b/commands/clear_penalty.lua @@ -3,10 +3,8 @@ local penalty_clear_cooldown = mesecons_debug.settings.penalty_clear_cooldown -- playername => time-of-last-cooldown local cooldown_expiry_by_name = {} - minetest.register_chatcommand("mesecons_clear_penalty", { - description = "clears the penalty in the current mapblock " .. - "(cooldown: " .. penalty_clear_cooldown .. ")", + description = "clears the penalty in the current mapblock " .. "(cooldown: " .. penalty_clear_cooldown .. ")", func = function(name) local player = minetest.get_player_by_name(name) if not player then @@ -29,5 +27,5 @@ minetest.register_chatcommand("mesecons_clear_penalty", { ctx.penalty = 0 return true, "penalty reset" - end + end, }) diff --git a/commands/create_lag.lua b/commands/create_lag.lua index 6598910..9f095da 100644 --- a/commands/create_lag.lua +++ b/commands/create_lag.lua @@ -3,13 +3,12 @@ local lag_chance = 0 local wait = mesecons_debug.wait - minetest.register_chatcommand("create_lag", { description = "foce a wait of <duration> us for 1 / <chance> server steps", params = "<duration> <chance>", privs = { mesecons_debug = true }, func = function(_name, setting) - local lag, chance = setting:match('^(%S+)%s+(%S+)$') + local lag, chance = setting:match("^(%S+)%s+(%S+)$") lag = tonumber(lag) chance = tonumber(chance) if not (lag and chance) then diff --git a/commands/flush.lua b/commands/flush.lua index ba3f3cd..2988691 100644 --- a/commands/flush.lua +++ b/commands/flush.lua @@ -4,5 +4,5 @@ minetest.register_chatcommand("mesecons_flush", { func = function(name) minetest.log("warning", "Player " .. name .. " flushes mesecon actionqueue") mesecon.queue.actions = {} - end + end, }) diff --git a/commands/user_commands.lua b/commands/user_commands.lua index 5836373..b0e3c14 100644 --- a/commands/user_commands.lua +++ b/commands/user_commands.lua @@ -1,3 +1,5 @@ +local f = string.format + minetest.register_chatcommand("mesecons_hud", { description = "mesecons_hud toggle", func = function(name) @@ -8,7 +10,7 @@ minetest.register_chatcommand("mesecons_hud", { else return true, "mesecons hud disabled" end - end + end, }) minetest.register_chatcommand("mesecons_global_stats", { @@ -26,10 +28,8 @@ minetest.register_chatcommand("mesecons_global_stats", { local txt if top_ctx then - txt = ( - "Most prominent mesecons usage at mapblock %s" .. - " with %f seconds penalty and %i us average use" - ):format( + txt = f( + "Most prominent mesecons usage at mapblock %s" .. " with %f seconds penalty and %i us average use", minetest.pos_to_string(minetest.get_position_from_hash(top_hash)), top_ctx.penalty, top_ctx.avg_micros_per_second @@ -39,7 +39,7 @@ minetest.register_chatcommand("mesecons_global_stats", { end return true, txt - end + end, }) minetest.register_chatcommand("mesecons_stats", { @@ -51,10 +51,11 @@ minetest.register_chatcommand("mesecons_stats", { end local ctx = mesecons_debug.get_context(player:get_pos()) - return true, ("Mapblock usage: %i us/s (across %i mapblocks)"):format( - ctx.avg_micros_per_second, - mesecons_debug.context_store_size - ) - end + return true, + f( + "Mapblock usage: %i us/s (across %i mapblocks)", + ctx.avg_micros_per_second, + mesecons_debug.context_store_size + ) + end, }) - diff --git a/context.lua b/context.lua index 5f22100..511cf5c 100644 --- a/context.lua +++ b/context.lua @@ -17,7 +17,7 @@ mesecons_debug.get_context = function(pos) -- modification time mtime = minetest.get_us_time(), -- whitelist status - whitelisted = storage:contains(hash) + whitelisted = storage:contains(hash), } mesecons_debug.context_store[hash] = ctx mesecons_debug.context_store_size = mesecons_debug.context_store_size + 1 @@ -1,10 +1,7 @@ - local hud_refresh_interval = mesecons_debug.settings.hud_refresh_interval -mesecons_debug.settings._subscribe_for_modification("hud_refresh_interval", - function(value) hud_refresh_interval = value end) - -local HUD_POSITION = { x = 0.1, y = 0.8 } -local HUD_ALIGNMENT = { x = 1, y = 0 } +mesecons_debug.settings._subscribe_for_modification("hud_refresh_interval", function(value) + hud_refresh_interval = value +end) local hudid_by_playername = {} @@ -18,40 +15,34 @@ local function get_info(player) local ctx = mesecons_debug.get_context(pos) local total = mesecons_debug.avg_total_micros_per_second - if total == 0 then total = 1 end + if total == 0 then + total = 1 + end local percent = ctx.avg_micros_per_second * 100 / total - local txt = ("mesecons @ %s\n"):format( - minetest.pos_to_string(blockpos) - ) + local txt = ("mesecons @ %s\n"):format(minetest.pos_to_string(blockpos)) if ctx.whitelisted then txt = txt .. "whitelisted, no limits" return txt, 0x00FFFF end - txt = txt .. ("usage: %.0f us/s .. (%.1f%%) penalty: %.2fs"):format( - ctx.avg_micros_per_second, - percent, - ctx.penalty - ) - txt = txt .. ("\nlag: %.2f (%s); mesecons load = %s"):format( - mesecons_debug.avg_lag, - mesecons_debug.lag_level, - mesecons_debug.load_level - ) - if minetest.get_server_max_lag then - txt = txt .. ("; max_lag: %.2f"):format( - minetest.get_server_max_lag() + txt = txt .. ("usage: %.0f us/s .. (%.1f%%) penalty: %.2fs"):format(ctx.avg_micros_per_second, percent, ctx.penalty) + txt = txt + .. ("\nlag: %.2f (%s); mesecons load = %s"):format( + mesecons_debug.avg_lag, + mesecons_debug.lag_level, + mesecons_debug.load_level ) + if minetest.get_server_max_lag then + txt = txt .. ("; max_lag: %.2f"):format(minetest.get_server_max_lag()) end - txt = txt .. ("; #players = %i"):format( - #minetest.get_connected_players() - ) - txt = txt .. ("\npenalties enabled = %s; mesecons enabled = %s"):format( - mesecons_debug.enabled, - mesecons_debug.mesecons_enabled - ) + txt = txt .. ("; #players = %i"):format(#minetest.get_connected_players()) + txt = txt + .. ("\npenalties enabled = %s; mesecons enabled = %s"):format( + mesecons_debug.enabled, + mesecons_debug.mesecons_enabled + ) if ctx.penalty <= 1 then return txt, 0x00FF00 @@ -78,24 +69,36 @@ minetest.register_globalstep(function(dtime) if hud_enabled then local text, color = get_info(player) if hudid then - player:hud_change(hudid, "text", text) - player:hud_change(hudid, "number", color) - + local hud_def = player:hud_get(hudid) + if hud_def and hud_def.name == "mesecons_debug:hud" then + player:hud_change(hudid, "text", text) + player:hud_change(hudid, "number", color) + else + minetest.chat_send_player( + playername, + "[mesecons_debug] another mod removed your hud, you must re-enable it or possibly relog" + ) + hudid_by_playername[playername] = nil + mesecons_debug.hud_enabled_by_playername[playername] = nil + end else hudid_by_playername[playername] = player:hud_add({ + name = "mesecons_debug:hud", hud_elem_type = "text", - position = HUD_POSITION, + position = { x = 0.5, y = 0.8 }, + alignment = { x = 0, y = 0 }, offset = { x = 0, y = 0 }, + scale = { x = 100, y = 100 }, text = text, number = color, - alignment = HUD_ALIGNMENT, - scale = { x = 100, y = 100 }, }) end - else if hudid then - player:hud_remove(hudid) + local hud_def = player:hud_get(hudid) + if hud_def.name == "mesecons_debug:hud" then + player:hud_remove(hudid) + end hudid_by_playername[playername] = nil end end @@ -23,8 +23,8 @@ mesecons_debug = { -- average lag avg_lag = 1, - lag_level = 'none', - load_level = 'none', + lag_level = "none", + load_level = "none", -- playername => true hud_enabled_by_playername = {}, @@ -37,7 +37,7 @@ mesecons_debug = { log = function(level, message_fmt, ...) minetest.log(level, ("[%s] "):format(modname) .. message_fmt:format(...)) - end + end, } dofile(modpath .. "/settings.lua") @@ -1,3 +1,16 @@ name = mesecons_debug +title = mesecons debug +description = throttles mesecons if the server is lagging, in particular when mesecons is causing the lag. +license = ????? +media_license = CC-BY-SA 3.0 depends = mesecons -optional_depends = digilines, digistuff, mesecons_blinkyplant, mesecons_luacontroller, moremesecons_adjustable_blinkyplant, moremesecons_injector_controller, monitoring, pipeworks +optional_depends = """ +digilines, +digistuff, +mesecons_blinkyplant, +mesecons_luacontroller, +moremesecons_adjustable_blinkyplant, +moremesecons_injector_controller, +monitoring, +pipeworks +""" diff --git a/nodes/mesecons_lagger.lua b/nodes/mesecons_lagger.lua index e4d966e..7aa53aa 100644 --- a/nodes/mesecons_lagger.lua +++ b/nodes/mesecons_lagger.lua @@ -1,18 +1,16 @@ - local wait = mesecons_debug.wait mesecon.queue:add_function("create_lag", function(_pos, duration) wait(duration) end) - minetest.register_node("mesecons_debug:mesecons_lagger", { description = "machine for adding artificial mesecons lag", group = { not_in_creative_inventory = 1, unbreakable = 1, }, - tiles = {"default_mese_block.png^[colorize:#F00:128"}, + tiles = { "default_mese_block.png^[colorize:#F00:128" }, on_blast = function() end, drop = "", @@ -20,8 +18,7 @@ minetest.register_node("mesecons_debug:mesecons_lagger", { local meta = minetest.get_meta(pos) meta:set_float("lag", 0.0) meta:set_float("chance", 0.0) - meta:set_string("formspec", - ("field[lag;Lag (in us);%s]field[chance;Chance;%s]"):format(0.0, 0.0)) + meta:set_string("formspec", ("field[lag;Lag (in us);%s]field[chance;Chance;%s]"):format(0.0, 0.0)) local timer = minetest.get_node_timer(pos) timer:start(0) @@ -38,10 +35,10 @@ minetest.register_node("mesecons_debug:mesecons_lagger", { if fields.chance then meta:set_float("chance", fields.chance) end - meta:set_string("formspec", - ("field[lag;Lag (in us);%s]field[chance;Chance;%s]"):format( - meta:get_float("lag"), meta:get_float("chance"))) - + meta:set_string( + "formspec", + ("field[lag;Lag (in us);%s]field[chance;Chance;%s]"):format(meta:get_float("lag"), meta:get_float("chance")) + ) end, on_timer = function(pos, _elapsed) diff --git a/nodes/penalty_controller.lua b/nodes/penalty_controller.lua index 6e160c1..13f8e3e 100644 --- a/nodes/penalty_controller.lua +++ b/nodes/penalty_controller.lua @@ -16,7 +16,7 @@ minetest.register_node("mesecons_debug:penalty_controller", { "jeija_microcontroller_sides.png", "jeija_microcontroller_sides.png", "jeija_microcontroller_sides.png", - "jeija_microcontroller_sides.png" + "jeija_microcontroller_sides.png", }, inventory_image = "penalty_controller_top.png", @@ -33,7 +33,7 @@ minetest.register_node("mesecons_debug:penalty_controller", { { -8 / 16, -8 / 16, -8 / 16, 8 / 16, -7 / 16, 8 / 16 }, -- Bottom slab { -5 / 16, -7 / 16, -5 / 16, 5 / 16, -6 / 16, 5 / 16 }, -- Circuit board { -3 / 16, -6 / 16, -3 / 16, 3 / 16, -5 / 16, 3 / 16 }, -- IC - } + }, }, paramtype = "light", @@ -66,10 +66,10 @@ minetest.register_node("mesecons_debug:penalty_controller", { micros = ctx.micros, avg_micros = ctx.avg_micros_per_second, penalty = ctx.penalty, - whitelisted = ctx.whitelisted + whitelisted = ctx.whitelisted, }) end - end - } - } + end, + }, + }, }) diff --git a/overrides/mesecons_queue.lua b/overrides/mesecons_queue.lua index 4375d7d..d14b30c 100644 --- a/overrides/mesecons_queue.lua +++ b/overrides/mesecons_queue.lua @@ -1,8 +1,10 @@ local penalty_mapblock_disabled = mesecons_debug.settings.penalty_mapblock_disabled -mesecons_debug.settings._subscribe_for_modification("penalty_mapblock_disabled", - function(value) penalty_mapblock_disabled = value end) +mesecons_debug.settings._subscribe_for_modification("penalty_mapblock_disabled", function(value) + penalty_mapblock_disabled = value +end) + +local check_pos = mesecons_debug.check_pos --- execute() local old_execute = mesecon.queue.execute mesecon.queue.execute = function(self, action) if not mesecons_debug.enabled then @@ -11,6 +13,11 @@ mesecon.queue.execute = function(self, action) return end + if not check_pos(action.pos) then + mesecons_debug.log("error", "mesecons action has an invalid position and cannot be processed %s", dump(action)) + return + end + local ctx = mesecons_debug.get_context(action.pos) if ctx.whitelisted then return old_execute(self, action) @@ -22,18 +29,16 @@ mesecon.queue.execute = function(self, action) mesecons_debug.total_micros = mesecons_debug.total_micros + micros ctx.micros = ctx.micros + micros - ctx.mtime = t0 -- modification time + ctx.mtime = t0 -- modification time return rv end - -- add_action() local old_add_action = mesecon.queue.add_action mesecon.queue.add_action = function(self, pos, func, params, time, overwritecheck, priority) if not mesecons_debug.enabled then return old_add_action(self, pos, func, params, time, overwritecheck, priority) - elseif not mesecons_debug.mesecons_enabled then return end diff --git a/overrides/node_timers.lua b/overrides/node_timers.lua index ea37d6a..8f8043d 100644 --- a/overrides/node_timers.lua +++ b/overrides/node_timers.lua @@ -4,7 +4,6 @@ local function override_node_timer(node_name) on_timer = function(pos, elapsed) if not mesecons_debug.enabled then return old_node_timer(pos, elapsed) - elseif not mesecons_debug.mesecons_enabled then return true end diff --git a/penalty.lua b/penalty.lua index 23f3e2f..beeaeac 100644 --- a/penalty.lua +++ b/penalty.lua @@ -2,9 +2,13 @@ local expected_dtime = tonumber(minetest.settings:get("dedicated_server_step")) local subscribe_for_modification = mesecons_debug.settings._subscribe_for_modification local max_penalty = mesecons_debug.settings.max_penalty -subscribe_for_modification("max_penalty", function(value) max_penalty = value end) +subscribe_for_modification("max_penalty", function(value) + max_penalty = value +end) local moderate_lag_ratio = mesecons_debug.settings.moderate_lag_ratio -subscribe_for_modification("moderate_lag_ratio", function(value) moderate_lag_ratio = value end) +subscribe_for_modification("moderate_lag_ratio", function(value) + moderate_lag_ratio = value +end) local high_lag_ratio = mesecons_debug.settings.high_lag_ratio local high_lag_dtime = expected_dtime * high_lag_ratio subscribe_for_modification("high_lag_ratio", function(value) @@ -12,21 +16,37 @@ subscribe_for_modification("high_lag_ratio", function(value) high_lag_dtime = expected_dtime * value end) local high_load_threshold = mesecons_debug.settings.high_load_threshold -subscribe_for_modification("high_load_threshold", function(value) high_load_threshold = value end) +subscribe_for_modification("high_load_threshold", function(value) + high_load_threshold = value +end) local penalty_check_steps = mesecons_debug.settings.penalty_check_steps -subscribe_for_modification("penalty_check_steps", function(value) penalty_check_steps = value end) +subscribe_for_modification("penalty_check_steps", function(value) + penalty_check_steps = value +end) local high_penalty_scale = mesecons_debug.settings.high_penalty_scale -subscribe_for_modification("high_penalty_scale", function(value) high_penalty_scale = value end) +subscribe_for_modification("high_penalty_scale", function(value) + high_penalty_scale = value +end) local high_penalty_offset = mesecons_debug.settings.high_penalty_offset -subscribe_for_modification("high_penalty_offset", function(value) high_penalty_offset = value end) +subscribe_for_modification("high_penalty_offset", function(value) + high_penalty_offset = value +end) local medium_penalty_scale = mesecons_debug.settings.medium_penalty_scale -subscribe_for_modification("medium_penalty_scale", function(value) medium_penalty_scale = value end) +subscribe_for_modification("medium_penalty_scale", function(value) + medium_penalty_scale = value +end) local medium_penalty_offset = mesecons_debug.settings.medium_penalty_offset -subscribe_for_modification("medium_penalty_offset", function(value) medium_penalty_offset = value end) +subscribe_for_modification("medium_penalty_offset", function(value) + medium_penalty_offset = value +end) local low_penalty_scale = mesecons_debug.settings.low_penalty_scale -subscribe_for_modification("low_penalty_scale", function(value) low_penalty_scale = value end) +subscribe_for_modification("low_penalty_scale", function(value) + low_penalty_scale = value +end) local low_penalty_offset = mesecons_debug.settings.low_penalty_offset -subscribe_for_modification("low_penalty_offset", function(value) low_penalty_offset = value end) +subscribe_for_modification("low_penalty_offset", function(value) + low_penalty_offset = value +end) local relative_load_max = mesecons_debug.settings.relative_load_clamp local relative_load_min = 1 / mesecons_debug.settings.relative_load_clamp subscribe_for_modification("relative_load_clamp", function(value) @@ -35,7 +55,9 @@ subscribe_for_modification("relative_load_clamp", function(value) end) -- see https://en.wikipedia.org/w/index.php?title=Moving_average&oldid=1069105690#Exponential_moving_average local averaging_coefficient = mesecons_debug.settings.averaging_coefficient -subscribe_for_modification("averaging_coefficient", function(value) averaging_coefficient = value end) +subscribe_for_modification("averaging_coefficient", function(value) + averaging_coefficient = value +end) local max = math.max local min = math.min @@ -56,8 +78,8 @@ local has_monitoring = mesecons_debug.has.monitoring local mapblock_count, penalized_mapblock_count if has_monitoring then mapblock_count = monitoring.gauge("mesecons_debug_mapblock_count", "count of tracked mapblocks") - penalized_mapblock_count = monitoring.gauge("mesecons_debug_penalized_mapblock_count", - "count of penalized mapblocks") + penalized_mapblock_count = + monitoring.gauge("mesecons_debug_penalized_mapblock_count", "count of penalized mapblocks") end local elapsed_steps = 0 @@ -76,11 +98,11 @@ minetest.register_globalstep(function(dtime) return end - local context_store_size = mesecons_debug.context_store_size -- # of blocks w/ active mesecons + local context_store_size = mesecons_debug.context_store_size -- # of blocks w/ active mesecons local total_micros = mesecons_debug.total_micros local total_micros_per_second = total_micros / elapsed - local avg_total_micros_per_second = update_average(total_micros_per_second, - mesecons_debug.avg_total_micros_per_second) + local avg_total_micros_per_second = + update_average(total_micros_per_second, mesecons_debug.avg_total_micros_per_second) mesecons_debug.avg_total_micros_per_second = avg_total_micros_per_second -- how much lag is there? @@ -134,7 +156,7 @@ minetest.register_globalstep(function(dtime) -- avg load per active context local avg_avg_micros_per_second = avg_total_micros_per_second / context_store_size - local penalized_count = 0 -- for monitoring + local penalized_count = 0 -- for monitoring for _, ctx in pairs(mesecons_debug.context_store) do if not ctx.whitelisted then -- moving avg @@ -1,3 +1,3 @@ minetest.register_privilege("mesecons_debug", { - description = "Allows execution of mesecon debug chatcommands" + description = "Allows execution of mesecon debug chatcommands", }) diff --git a/settings.lua b/settings.lua index fa1254a..f877572 100644 --- a/settings.lua +++ b/settings.lua @@ -27,22 +27,22 @@ mesecons_debug.settings = { 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, + high_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.high_penalty_scale")) or 0.05, -- offset of penalty during high load - high_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.high_penalty_offset")) or -0.5, + high_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.high_penalty_offset")) or -0.05, -- scale of penalty during medium load - medium_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_scale")) or 0.2, + medium_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_scale")) or 0.05, -- offset of penalty during medium load - medium_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_offset")) or -0.67, + medium_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.medium_penalty_offset")) or -0.1, -- scale of penalty during low load - low_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.low_penalty_scale")) or 0.1, + low_penalty_scale = tonumber(minetest.settings:get("mesecons_debug.low_penalty_scale")) or 0.05, -- offset of penalty during low load - low_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.low_penalty_offset")) or -1, + low_penalty_offset = tonumber(minetest.settings:get("mesecons_debug.low_penalty_offset")) or -0.5, -- forces (1 / clamp) <= relative load <= clamp relative_load_clamp = tonumber(minetest.settings:get("mesecons_debug.relative_load_clamp")) or 10, diff --git a/settingtypes.txt b/settingtypes.txt index 23cbbf5..1cdb655 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -26,22 +26,22 @@ mesecons_debug.high_load_threshold (high load threshold) float 0.33 0 1 mesecons_debug.penalty_check_steps (steps between penalty updates) float 50 1 10000 # scale of penalty during high load -mesecons_debug.high_penalty_scale (high penalty scale) float 0.5 0.01 1 +mesecons_debug.high_penalty_scale (high penalty scale) float 0.05 0.01 1 # offset of penalty during high load -mesecons_debug.high_penalty_offset (high penalty offset) float -0.5 -1 0 +mesecons_debug.high_penalty_offset (high penalty offset) float -0.05 -1 0 # scale of penalty during medium load -mesecons_debug.medium_penalty_scale (medium penalty scale) float 0.2 0.01 1 +mesecons_debug.medium_penalty_scale (medium penalty scale) float 0.05 0.01 1 # offset of penalty during medium load -mesecons_debug.medium_penalty_offset (medium penalty offset) float -0.8 -1 0 +mesecons_debug.medium_penalty_offset (medium penalty offset) float -0.1 -1 0 # scale of penalty during low load -mesecons_debug.low_penalty_scale (low penalty scale) float 0.1 0.01 1 +mesecons_debug.low_penalty_scale (low penalty scale) float 0.05 0.01 1 # offset of penalty during low load -mesecons_debug.low_penalty_offset (low penalty offset) float -1 -1 0 +mesecons_debug.low_penalty_offset (low penalty offset) float -0.5 -1 0 # forces (1 / clamp) <= relative load <= clamp mesecons_debug.relative_load_clamp (clamp of relative load value) float 10 1 100 @@ -1,8 +1,12 @@ +function mesecons_debug.check_pos(pos) + return type(pos) == "table" and type(pos.x) == "number" and type(pos.y) == "number" and type(pos.z) == "number" +end + function mesecons_debug.get_blockpos(pos) return { x = math.floor(pos.x / 16), y = math.floor(pos.y / 16), - z = math.floor(pos.z / 16) + z = math.floor(pos.z / 16), } end @@ -10,12 +14,12 @@ function mesecons_debug.hashpos(pos) return minetest.hash_node_position({ x = math.floor(pos.x / 16), y = math.floor(pos.y / 16), - z = math.floor(pos.z / 16) + z = math.floor(pos.z / 16), }) end - function mesecons_debug.wait(n) local wait_until = minetest.get_us_time() + n - while minetest.get_us_time() < wait_until do end + while minetest.get_us_time() < wait_until do + end end |