mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-22 10:31:06 +01:00
Added food poisoning and saturation effects
This commit is contained in:
parent
fce73ab2bf
commit
007500613a
3 changed files with 59 additions and 14 deletions
|
@ -525,6 +525,50 @@ mcl_potions.register_effect({
|
||||||
timer_uses_factor = true,
|
timer_uses_factor = true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
mcl_potions.register_effect({
|
||||||
|
name = "food_poisoning",
|
||||||
|
description = S("Food Poisoning"),
|
||||||
|
get_tt = function(factor)
|
||||||
|
return S("exhausts by @1 per second", factor)
|
||||||
|
end,
|
||||||
|
res_condition = function(object)
|
||||||
|
return (not object:is_player())
|
||||||
|
end,
|
||||||
|
on_start = function(object, factor)
|
||||||
|
hb.change_hudbar(object, "hunger", nil, nil, "mcl_hunger_icon_foodpoison.png", nil, "mcl_hunger_bar_foodpoison.png")
|
||||||
|
if mcl_hunger.debug then
|
||||||
|
hb.change_hudbar(object, "exhaustion", nil, nil, nil, nil, "mcl_hunger_bar_foodpoison.png")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
on_step = function(dtime, object, factor, duration)
|
||||||
|
mcl_hunger.exhaust(object:get_player_name(), dtime*factor)
|
||||||
|
end,
|
||||||
|
on_end = function(object)
|
||||||
|
mcl_hunger.reset_bars_poison_hunger(object)
|
||||||
|
end,
|
||||||
|
particle_color = "#83A061",
|
||||||
|
uses_factor = true,
|
||||||
|
lvl1_factor = 100,
|
||||||
|
lvl2_factor = 200,
|
||||||
|
})
|
||||||
|
|
||||||
|
mcl_potions.register_effect({
|
||||||
|
name = "saturation",
|
||||||
|
description = S("Saturation"),
|
||||||
|
get_tt = function(factor)
|
||||||
|
return S("saturates by @1 per second", factor)
|
||||||
|
end,
|
||||||
|
res_condition = function(object)
|
||||||
|
return (not object:is_player())
|
||||||
|
end,
|
||||||
|
on_step = function(dtime, object, factor, duration)
|
||||||
|
mcl_hunger.set_hunger(object, math.min(mcl_hunger.get_hunger(object)+dtime*factor, 20))
|
||||||
|
mcl_hunger.saturate(object:get_player_name(), dtime*factor)
|
||||||
|
end,
|
||||||
|
particle_color = "#CEAE29",
|
||||||
|
uses_factor = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
-- ██╗░░░██╗██████╗░██████╗░░█████╗░████████╗███████╗
|
-- ██╗░░░██╗██████╗░██████╗░░█████╗░████████╗███████╗
|
||||||
-- ██║░░░██║██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔════╝
|
-- ██║░░░██║██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔════╝
|
||||||
|
@ -841,6 +885,14 @@ function mcl_potions.player_get_effect(player, effect_name)
|
||||||
return EF[effect_name][player]
|
return EF[effect_name][player]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function mcl_potions.player_get_effect_level(player, effect_name)
|
||||||
|
if not EF[effect_name] then return end
|
||||||
|
local effect = EF[effect_name][player]
|
||||||
|
if not effect then return 0 end
|
||||||
|
if not registered_effects[effect_name].uses_factor then return 1 end
|
||||||
|
return registered_effects[effect_name].factor_to_level(effect.factor)
|
||||||
|
end
|
||||||
|
|
||||||
function mcl_potions.player_clear_effect(player,effect)
|
function mcl_potions.player_clear_effect(player,effect)
|
||||||
EF[effect][player] = nil
|
EF[effect][player] = nil
|
||||||
potions_set_hud(player)
|
potions_set_hud(player)
|
||||||
|
|
|
@ -99,7 +99,7 @@ function mcl_hunger.reset_bars_poison_hunger(player)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Poison player
|
-- Poison player TODO remove this function
|
||||||
local function poisonp(tick, time, time_left, damage, exhaustion, name)
|
local function poisonp(tick, time, time_left, damage, exhaustion, name)
|
||||||
if not mcl_hunger.active then
|
if not mcl_hunger.active then
|
||||||
return
|
return
|
||||||
|
@ -186,15 +186,8 @@ function mcl_hunger.item_eat(hunger_change, replace_with_item, poisontime, poiso
|
||||||
do_poison = true
|
do_poison = true
|
||||||
end
|
end
|
||||||
if do_poison then
|
if do_poison then
|
||||||
-- Set food poison bars
|
local level = mcl_potions.player_get_effect_level(user, "food_poisoning")
|
||||||
if exhaust and exhaust > 0 then
|
mcl_potions.give_effect_by_level("food_poisoning", user, level+exhaust, poisontime)
|
||||||
hb.change_hudbar(user, "hunger", nil, nil, "mcl_hunger_icon_foodpoison.png", nil, "mcl_hunger_bar_foodpoison.png")
|
|
||||||
if mcl_hunger.debug then
|
|
||||||
hb.change_hudbar(user, "exhaustion", nil, nil, nil, nil, "mcl_hunger_bar_foodpoison.png")
|
|
||||||
end
|
|
||||||
mcl_hunger.poison_hunger[name] = mcl_hunger.poison_hunger[name] + 1
|
|
||||||
end
|
|
||||||
poisonp(1, poisontime, 0, poison, exhaust, user:get_player_name())
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
-- Apply food poisoning effect as long there are no real status effect.
|
-- Apply food poisoning effect as long there are no real status effect.
|
||||||
-- TODO: Remove this when food poisoning a status effect in mcl_potions.
|
-- TODO: Sanitize this now that Food Poisoning is now an effect in mcl_potions
|
||||||
-- Normal poison damage is set to 0 because it's handled elsewhere.
|
-- Normal poison damage is set to 0 because it's handled elsewhere.
|
||||||
|
|
||||||
mcl_hunger.register_food("mcl_mobitems:rotten_flesh", 4, "", 30, 0, 100, 80)
|
mcl_hunger.register_food("mcl_mobitems:rotten_flesh", 4, "", 30, 0, 1, 80)
|
||||||
mcl_hunger.register_food("mcl_mobitems:chicken", 2, "", 30, 0, 100, 30)
|
mcl_hunger.register_food("mcl_mobitems:chicken", 2, "", 30, 0, 1, 30)
|
||||||
mcl_hunger.register_food("mcl_fishing:pufferfish_raw", 1, "", 15, 0, 300)
|
mcl_hunger.register_food("mcl_fishing:pufferfish_raw", 1, "", 15, 0, 3)
|
||||||
|
|
Loading…
Reference in a new issue