Add armor hud. Correct armor handling in elixirs.
This commit is contained in:
parent
aa9c21bc93
commit
c8c107b300
3 changed files with 92 additions and 37 deletions
17
elixir.lua
17
elixir.lua
|
@ -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
112
init.lua
|
@ -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)
|
||||
|
|
BIN
textures/fun_caves_shield.png
Normal file
BIN
textures/fun_caves_shield.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 754 B |
Loading…
Add table
Add a link
Reference in a new issue