diff --git a/engine.lua b/engine.lua index f42a214..303f7f7 100644 --- a/engine.lua +++ b/engine.lua @@ -23,6 +23,13 @@ if storage:contains("dig_penalty") then ) end +local speed_factor_storage = {} +if storage:contains("speed_factor") then + speed_factor_storage = minetest.deserialize( + storage:get_string("speed_factor") + ) +end + ---@param dig_penalty number local function set_dig_penalty(player, dig_penalty) @@ -120,3 +127,33 @@ minetest.register_on_player_inventory_action( end ) + +---@param speed_factor number +local function set_speed(player, speed_factor) + local pname = player:get_player_name() + local prev_speed_factor = speed_factor_storage[pname] or 1 + if speed_factor == prev_speed_factor then + return + end + if speed_factor < 0 then + speed_factor = prev_speed_factor + end + speed_factor_storage[pname] = speed_factor + storage:set_string( + "speed_factor", + minetest.serialize( + speed_factor_storage + ) + ) + + player_monoids.speed:del_change(player, "medical") + player_monoids.speed:add_change(player, speed_factor, "medical") +end + + +minetest.register_on_joinplayer( + function(player, last_login) + set_speed(player, -1) + end +) + diff --git a/mod.conf b/mod.conf index 1cadb01..fb27a6e 100644 --- a/mod.conf +++ b/mod.conf @@ -1,3 +1,3 @@ name = medical description = Health and nutrition -depends = unified_inventory, toolcap_monoids, hand_monoid \ No newline at end of file +depends = unified_inventory, player_monoids, toolcap_monoids, hand_monoid \ No newline at end of file