diff --git a/init.lua b/init.lua index 7767f86..64ce5db 100644 --- a/init.lua +++ b/init.lua @@ -70,11 +70,6 @@ function mana.setmax(playername, value) end function mana.setregen(playername, value) - if value < 0 then - value = 0 - minetest.log("info", "[mana] Warning: mana.setregen was called with negative value!") - end - value = mana.round(value) mana.playerlist[playername].regen = value end @@ -223,6 +218,7 @@ minetest.register_on_joinplayer(function(player) mana.playerlist[playername].mana = 0 mana.playerlist[playername].maxmana = mana.settings.default_max mana.playerlist[playername].regen = mana.settings.default_regen + mana.playerlist[playername].remainder = 0 end if minetest.get_modpath("hudbars") ~= nil then @@ -248,7 +244,19 @@ minetest.register_globalstep(function(dtime) local name = players[i]:get_player_name() if mana.playerlist[name] ~= nil then if players[i]:get_hp() > 0 then - mana.add_up_to(name, mana.playerlist[name].regen * factor) + local plus = mana.playerlist[name].regen * factor + -- Compability check for version <= 1.0.2 which did not have the remainder field + if mana.playerlist[name].remainder ~= nil then + plus = plus + mana.playerlist[name].remainder + end + local plus_now = math.floor(plus) + local floor = plus - plus_now + if plus_now > 0 then + mana.add_up_to(name, plus_now) + else + mana.subtract_up_to(name, math.abs(plus_now)) + end + mana.playerlist[name].remainder = floor end end end