Tweak and optimize medkits
This commit is contained in:
parent
82c2477d70
commit
92c5600d7e
3 changed files with 19 additions and 15 deletions
|
@ -23,5 +23,5 @@ function ctf_treasure.register_default_treasures()
|
||||||
treasurer.register_treasure("shooter:arrow_white",0.5,2,{2,18})
|
treasurer.register_treasure("shooter:arrow_white",0.5,2,{2,18})
|
||||||
|
|
||||||
treasurer.register_treasure("ctf_bandages:bandage",0.3,5,{1,6})
|
treasurer.register_treasure("ctf_bandages:bandage",0.3,5,{1,6})
|
||||||
treasurer.register_treasure("medkits:medkit",0.8,5,{2,4})
|
treasurer.register_treasure("medkits:medkit",0.8,5,2)
|
||||||
end
|
end
|
||||||
|
|
|
@ -47,7 +47,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
-- ##1## replace info.sprintRequested with info.sprinting
|
-- ##1## replace info.sprintRequested with info.sprinting
|
||||||
if sprintRequested ~= info.sprintRequested then
|
if sprintRequested ~= info.sprintRequested then
|
||||||
if sprintRequested and info.stamina > MIN_SPRINT
|
if sprintRequested and info.stamina > MIN_SPRINT
|
||||||
and not is_healing(player:get_player_name()) then
|
and not medkits.is_healing(player:get_player_name()) then
|
||||||
setSprinting(player, info, true)
|
setSprinting(player, info, true)
|
||||||
elseif not sprintRequested then
|
elseif not sprintRequested then
|
||||||
setSprinting(player, info, false)
|
setSprinting(player, info, false)
|
||||||
|
|
|
@ -1,16 +1,19 @@
|
||||||
-- Table of tables indexed by player names, each having three fields:
|
-- Table of tables indexed by player names, each having three fields:
|
||||||
-- * HP at time of left-click + regen_max,
|
-- {
|
||||||
-- * Max HP of player (generally 20)
|
-- hp: HP at time of left-click + regen_max,
|
||||||
-- * ID of "healing effect" HUD element
|
-- pos: Position of player while initiating the healing process
|
||||||
|
-- hud: ID of "healing effect" HUD element
|
||||||
|
-- }
|
||||||
local players = {}
|
local players = {}
|
||||||
|
|
||||||
local regen_max = 20 -- Max HP provided by one medkit
|
local regen_max = 20 -- Max HP provided by one medkit
|
||||||
local regen_interval = 0.3 -- Time in seconds between each iteration
|
local regen_interval = 0.5 -- Time in seconds between each iteration
|
||||||
local regen_timer = 0 -- Timer to keep track of regen_interval
|
local regen_timer = 0 -- Timer to keep track of regen_interval
|
||||||
local regen_step = 1 -- Number of HP added every iteration
|
local regen_step = 1 -- Number of HP added every iteration
|
||||||
|
|
||||||
-- Boolean function for use by other mods to check if a player is healing
|
-- Boolean function for use by other mods to check if a player is healing
|
||||||
function is_healing(name)
|
medkits = {}
|
||||||
|
function medkits.is_healing(name)
|
||||||
return players[name] and true or false
|
return players[name] and true or false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,14 +25,14 @@ local function start_healing(stack, player)
|
||||||
end
|
end
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
|
|
||||||
if players[name] or player:get_hp() >= 20 then
|
if players[name] or player:get_hp() >= regen_max then
|
||||||
return stack
|
return stack
|
||||||
end
|
end
|
||||||
|
|
||||||
players[name] = {
|
players[name] = {
|
||||||
pos = player:get_pos(),
|
hp = player:get_hp(),
|
||||||
target = player:get_hp() + regen_max,
|
pos = player:get_pos(),
|
||||||
hud = player:hud_add({
|
hud = player:hud_add({
|
||||||
hud_elem_type = "image",
|
hud_elem_type = "image",
|
||||||
position = {x = 0.5, y = 0.5},
|
position = {x = 0.5, y = 0.5},
|
||||||
scale = {x = -100, y = -100},
|
scale = {x = -100, y = -100},
|
||||||
|
@ -50,8 +53,8 @@ local function stop_healing(player, interrupted)
|
||||||
players[name] = nil
|
players[name] = nil
|
||||||
if interrupted then
|
if interrupted then
|
||||||
minetest.chat_send_player(name, minetest.colorize("#FF4444",
|
minetest.chat_send_player(name, minetest.colorize("#FF4444",
|
||||||
"Your healing was interrupted!"))
|
"Your healing was interrupted!"))
|
||||||
player:set_hp(info.target - regen_max)
|
player:set_hp(info.hp)
|
||||||
player:get_inventory():add_item("main", ItemStack("medkits:medkit 1"))
|
player:get_inventory():add_item("main", ItemStack("medkits:medkit 1"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -80,9 +83,10 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
-- Stop healing if target reached
|
-- Stop healing if target reached
|
||||||
local hp = player:get_hp()
|
local hp = player:get_hp()
|
||||||
if hp < info.target and hp < 20 then
|
if hp < regen_max then
|
||||||
player:set_hp(hp + regen_step)
|
player:set_hp(hp + regen_step)
|
||||||
else
|
else
|
||||||
|
player:set_hp(regen_max)
|
||||||
stop_healing(player)
|
stop_healing(player)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue