diff --git a/init.lua b/init.lua index 9b86c29..e6dd181 100644 --- a/init.lua +++ b/init.lua @@ -8,11 +8,12 @@ pova = {debug = false} local pova_list = {} local min, max = math.min, math.max --- time each override loop runs, 0 to disable +-- override loop interval, 0 to disable local pova_loop = minetest.settings:get_bool("pova_loop") or 1.0 --- if enabled activate main loop that totals override list on timer +-- when higher than 0, activate main loop that totals override list on a timer, +-- incase we have any rogue mods that don't play well with player physics. if pova_loop > 0 then @@ -27,7 +28,7 @@ if pova_loop > 0 then timer = 0 -- loop through players and apply overrides - for _,player in ipairs(minetest.get_connected_players()) do + for _,player in pairs(minetest.get_connected_players()) do pova.do_override(player) end end) @@ -35,7 +36,7 @@ end -- global functions -pova.add_override = function(name, item, def) +function pova.add_override(name, item, def) if not name or not item then return end @@ -51,65 +52,68 @@ pova.add_override = function(name, item, def) pova_list[name][item] = def end -pova.get_override = function(name, item) +function pova.get_override(name, item) return pova_list[name][item] end -pova.del_override = function(name, item) +function pova.del_override(name, item) if name and item and pova_list[name] then pova_list[name][item] = nil end end -pova.do_override = function(player) +function pova.do_override(player) local name = player and player:get_player_name() -- somehow player is missing on list if not name or not pova_list[name] then return end + -- store player override list + local list = pova_list[name] + -- set base defaults local speed, jump, gravity = 1, 1, 1 -- check for new defaults - if pova_list[name]["default"] then - speed = pova_list[name]["default"].speed or 1 - jump = pova_list[name]["default"].jump or 1 - gravity = pova_list[name]["default"].gravity or 1 + if list["default"] then + speed = list["default"].speed or 1 + jump = list["default"].jump or 1 + gravity = list["default"].gravity or 1 end -- loop through list of named overrides - for id, var in pairs(pova_list[name]) do + for id, var in pairs(list) do -- skip any custom names if var and id ~= "default" and id ~= "min" and id ~= "max" and id ~= "force" then -- add any additional changes - speed = speed + (pova_list[name][id].speed or 0) - jump = jump + (pova_list[name][id].jump or 0) - gravity = gravity + (pova_list[name][id].gravity or 0) + speed = speed + (list[id].speed or 0) + jump = jump + (list[id].jump or 0) + gravity = gravity + (list[id].gravity or 0) end end -- make sure total doesn't go below minimum values - if pova_list[name]["min"] then - speed = max(pova_list[name]["min"].speed or 0, speed) - jump = max(pova_list[name]["min"].jump or 0, jump) - gravity = max(pova_list[name]["min"].gravity or 0, gravity) + if list["min"] then + speed = max(list["min"].speed or 0, speed) + jump = max(list["min"].jump or 0, jump) + gravity = max(list["min"].gravity or 0, gravity) end -- make sure total doesn't go above maximum values - if pova_list[name]["max"] then - speed = min(pova_list[name]["max"].speed or speed, speed) - jump = min(pova_list[name]["max"].jump or jump, jump) - gravity = min(pova_list[name]["max"].gravity or gravity, gravity) + if list["max"] then + speed = min(list["max"].speed or speed, speed) + jump = min(list["max"].jump or jump, jump) + gravity = min(list["max"].gravity or gravity, gravity) end -- force values (for things like sleeping in bed when speed is 0) - if pova_list[name]["force"] then - speed = pova_list[name]["force"].speed or speed - jump = pova_list[name]["force"].jump or jump - gravity = pova_list[name]["force"].gravity or gravity + if list["force"] then + speed = list["force"].speed or speed + jump = list["force"].jump or jump + gravity = list["force"].gravity or gravity end -- for testing only