Add armor hud. Correct armor handling in elixirs.

This commit is contained in:
Duane 2016-07-07 21:56:53 -05:00
parent aa9c21bc93
commit c8c107b300
3 changed files with 92 additions and 37 deletions

112
init.lua
View file

@ -179,42 +179,35 @@ minetest.register_on_shutdown(function()
end)
minetest.register_on_joinplayer(function(player)
local player_name = player:get_player_name()
if not fun_caves.db.status[player_name] then
fun_caves.db.status[player_name] = {}
end
end)
local hunger_mod = minetest.get_modpath("hunger")
fun_caves.hunger_id = {}
function fun_caves.hunger_change(player, change)
local name = player:get_player_name()
local player_name = player:get_player_name()
if hunger_mod then
if change < 0 then
hunger.update_hunger(player, hunger.players[name].lvl + change * 4)
hunger.update_hunger(player, hunger.players[player_name].lvl + change * 4)
end
return
end
local hp = player:get_hp()
if change < 0 or hp >= 16 then
fun_caves.db.hunger[name] = math.min(20, math.max(0, fun_caves.db.hunger[name] + change))
player:hud_change(fun_caves.hunger_id[name], 'number', fun_caves.db.hunger[name])
if fun_caves.db.hunger[name] == 0 then
fun_caves.db.hunger[player_name] = math.min(20, math.max(0, fun_caves.db.hunger[player_name] + change))
player:hud_change(fun_caves.hunger_id[player_name], 'number', fun_caves.db.hunger[player_name])
if fun_caves.db.hunger[player_name] == 0 then
player:set_hp(player:get_hp() - 1)
end
end
end
local hunger_hud
if not hunger_mod then
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
hunger_hud = function(player)
local player_name = player:get_player_name()
if not fun_caves.db.hunger[name] then
fun_caves.db.hunger[name] = 20
if not fun_caves.db.hunger[player_name] then
fun_caves.db.hunger[player_name] = 20
end
local hunger_bar = {
@ -223,13 +216,13 @@ if not hunger_mod then
offset = {x = 0, y = -90},
name = "hunger",
text = "farming_bread.png",
number = fun_caves.db.hunger[name],
number = fun_caves.db.hunger[player_name],
direction = 0,
size = { x=24, y=24 },
}
fun_caves.hunger_id[name] = player:hud_add(hunger_bar)
end)
fun_caves.hunger_id[player_name] = player:hud_add(hunger_bar)
end
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing)
if hp_change > 0 then
@ -238,14 +231,85 @@ if not hunger_mod then
end)
minetest.register_on_dieplayer(function(player)
local name = player:get_player_name()
local player_name = player:get_player_name()
local pos = vector.round(player:getpos())
if not hunger_mod then
fun_caves.db.hunger[name] = 20
player:hud_change(fun_caves.hunger_id[name], 'number', 20)
fun_caves.db.hunger[player_name] = 20
player:hud_change(fun_caves.hunger_id[player_name], 'number', 20)
end
minetest.chat_send_player(name, 'Your bones will lie at ('..pos.x..','..pos.y..','..pos.z..'), in ignominy, unless you collect them.')
minetest.chat_send_player(player_name, 'Your bones will lie at ('..pos.x..','..pos.y..','..pos.z..'), in ignominy, unless you collect them.')
end)
end
local armor_mod = minetest.get_modpath("3d_armor")
fun_caves.armor_id = {}
local armor_hud
if armor_mod then
fun_caves.display_armor = function(player)
end
else
armor_hud = function(player)
local player_name = player:get_player_name()
local armor_icon = {
hud_elem_type = 'image',
name = "armor_icon",
text = 'fun_caves_shield.png',
scale = {x=1,y=1},
position = {x=0.8, y=1},
offset = {x = -30, y = -80},
}
local armor_text = {
hud_elem_type = 'text',
name = "armor_text",
text = '0%',
number = 0xFFFFFF,
position = {x=0.8, y=1},
offset = {x = 0, y = -80},
}
fun_caves.armor_id[player_name] = {}
fun_caves.armor_id[player_name].icon = player:hud_add(armor_icon)
fun_caves.armor_id[player_name].text = player:hud_add(armor_text)
end
fun_caves.display_armor = function(player)
local player_name = player:get_player_name()
local armor = player:get_armor_groups()
if not armor or not armor.fleshy then
return
end
player:hud_change(fun_caves.armor_id[player_name].text, 'text', (100 - armor.fleshy)..'%')
end
end
minetest.register_on_joinplayer(function(player)
local player_name = player:get_player_name()
if not fun_caves.db.status[player_name] then
fun_caves.db.status[player_name] = {}
end
if armor_hud then
armor_hud(player)
end
if hunger_hud then
hunger_hud(player)
end
if fun_caves.db.status[player_name] and fun_caves.db.status[player_name].armor_elixir then
local factor = fun_caves.db.status[player_name].armor_elixir.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.after(1, function()
fun_caves.display_armor(player)
end)
end
end)