breath_sprint/init.lua

38 lines
1.1 KiB
Lua

local update_interval = 0.5
local sprint_length = 6
local timer = 0
minetest.register_globalstep(function(dtime)
timer = timer + dtime
if timer >= update_interval then
for _,player in ipairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local breath = player:get_breath()
local privs = minetest.get_player_privs(name)
local old_breath = player:get_attribute("old_breath") or 11
local sprint_time = player:get_attribute("sprint_time") or 0
local controls = player:get_player_control()
if controls["aux1"] and
( controls["up"] or controls["down"] or controls["left"] or controls["right"] ) and privs.fast then
sprint_time = sprint_time + timer
breath = old_breath - ( sprint_time * (11 / sprint_length) )
else
player:set_attribute("old_breath", breath)
sprint_time = 0
end
if breath == 11 then
privs.fast = true
elseif breath < 1 then
privs.fast = nil
end
minetest.set_player_privs(name, privs)
player:set_attribute("sprint_time", sprint_time)
player:set_breath(breath)
end
timer = 0
end
end)