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

View file

@ -12,22 +12,11 @@ fun_caves.register_status({
player:set_armor_groups(armor)
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...'))
fun_caves.db.status[player_name].armor_elixir = nil
fun_caves.display_armor(player)
end,
})
minetest.register_on_joinplayer(function(player)
local player_name = player:get_player_name()
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)
end
end)
if fun_caves.expire_elixir_on_death then
minetest.register_on_dieplayer(function(player)
local player_name = player:get_player_name()
@ -37,6 +26,7 @@ if fun_caves.expire_elixir_on_death then
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
player:set_armor_groups(armor)
fun_caves.db.status[player_name].armor_elixir = nil
fun_caves.display_armor(player)
end
end)
end
@ -48,13 +38,14 @@ local function armor(user, factor)
if fun_caves.db.status[player_name].armor_elixir then
local old_factor = fun_caves.db.status[player_name].armor_elixir.factor
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / old_factor)))
end
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy * factor)))
user:set_armor_groups(armor)
minetest.chat_send_player(player_name, 'Your skin feels harder...')
fun_caves.set_status(player_name, 'armor_elixir', elixir_duration, {factor = factor})
fun_caves.display_armor(user)
end
local descs = {

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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 B