Generalize status effects.

This commit is contained in:
Duane 2016-06-30 17:54:33 -05:00
parent e5005dd8d6
commit b486af8627
5 changed files with 76 additions and 24 deletions

View file

@ -158,6 +158,35 @@ minetest.register_globalstep(function(dtime)
local minp = vector.subtract(pos, 0.5)
local maxp = vector.add(pos, 0.5)
-- Remove status effects.
local status = fun_caves.db.status[player_name]
for name, stat in pairs(status) do
local def = fun_caves.registered_status[name]
if not def then
print('Fun Caves: Error - unregistered status ' .. name)
break
end
local remove
if type(stat.remove) == 'number' then
if stat.remove < time then
remove = true
end
elseif def.remove then
remove = def.remove(player)
else
print('Fun Caves: Error in status remove for ' .. name)
end
if remove then
if def and def.terminate then
fun_caves.db.status[player_name][name] = def.terminate(player)
else
fun_caves.db.status[player_name][name] = nil
end
end
end
-- ... from standing on or near hot objects.
local counts = minetest_find_nodes_in_area(minp, maxp, hot_stuff)
if #counts > 1 then
@ -176,17 +205,6 @@ minetest.register_globalstep(function(dtime)
if #counts > 1 then
player:set_hp(player:get_hp() - 1)
end
-- Check for elixirs. This doesn't have to be precise.
local armor_expire = fun_caves.db.armor_expire
if fun_caves.elixir_armor and armor_expire and armor_expire[player_name] and armor_expire[player_name].time < time then
local factor = armor_expire[player_name].factor
local armor = player:get_armor_groups()
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
player:set_armor_groups(armor)
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...'))
armor_expire[player_name] = nil
end
end
-- ... from hunger (even less often).