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)
|
player:set_armor_groups(armor)
|
||||||
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...'))
|
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...'))
|
||||||
fun_caves.db.status[player_name].armor_elixir = nil
|
fun_caves.db.status[player_name].armor_elixir = nil
|
||||||
|
fun_caves.display_armor(player)
|
||||||
end,
|
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
|
if fun_caves.expire_elixir_on_death then
|
||||||
minetest.register_on_dieplayer(function(player)
|
minetest.register_on_dieplayer(function(player)
|
||||||
local player_name = player:get_player_name()
|
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)))
|
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
|
||||||
player:set_armor_groups(armor)
|
player:set_armor_groups(armor)
|
||||||
fun_caves.db.status[player_name].armor_elixir = nil
|
fun_caves.db.status[player_name].armor_elixir = nil
|
||||||
|
fun_caves.display_armor(player)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
@ -48,13 +38,14 @@ local function armor(user, factor)
|
||||||
|
|
||||||
if fun_caves.db.status[player_name].armor_elixir then
|
if fun_caves.db.status[player_name].armor_elixir then
|
||||||
local old_factor = fun_caves.db.status[player_name].armor_elixir.factor
|
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
|
end
|
||||||
|
|
||||||
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 * factor)))
|
||||||
user:set_armor_groups(armor)
|
user:set_armor_groups(armor)
|
||||||
minetest.chat_send_player(player_name, 'Your skin feels harder...')
|
minetest.chat_send_player(player_name, 'Your skin feels harder...')
|
||||||
fun_caves.set_status(player_name, 'armor_elixir', elixir_duration, {factor = factor})
|
fun_caves.set_status(player_name, 'armor_elixir', elixir_duration, {factor = factor})
|
||||||
|
fun_caves.display_armor(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
local descs = {
|
local descs = {
|
||||||
|
|
112
init.lua
112
init.lua
|
@ -179,42 +179,35 @@ minetest.register_on_shutdown(function()
|
||||||
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
|
|
||||||
end)
|
|
||||||
|
|
||||||
|
|
||||||
local hunger_mod = minetest.get_modpath("hunger")
|
local hunger_mod = minetest.get_modpath("hunger")
|
||||||
fun_caves.hunger_id = {}
|
fun_caves.hunger_id = {}
|
||||||
|
|
||||||
function fun_caves.hunger_change(player, change)
|
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 hunger_mod then
|
||||||
if change < 0 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
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local hp = player:get_hp()
|
local hp = player:get_hp()
|
||||||
if change < 0 or hp >= 16 then
|
if change < 0 or hp >= 16 then
|
||||||
fun_caves.db.hunger[name] = math.min(20, math.max(0, fun_caves.db.hunger[name] + change))
|
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[name], 'number', fun_caves.db.hunger[name])
|
player:hud_change(fun_caves.hunger_id[player_name], 'number', fun_caves.db.hunger[player_name])
|
||||||
if fun_caves.db.hunger[name] == 0 then
|
if fun_caves.db.hunger[player_name] == 0 then
|
||||||
player:set_hp(player:get_hp() - 1)
|
player:set_hp(player:get_hp() - 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local hunger_hud
|
||||||
if not hunger_mod then
|
if not hunger_mod then
|
||||||
minetest.register_on_joinplayer(function(player)
|
hunger_hud = function(player)
|
||||||
local name = player:get_player_name()
|
local player_name = player:get_player_name()
|
||||||
|
|
||||||
if not fun_caves.db.hunger[name] then
|
if not fun_caves.db.hunger[player_name] then
|
||||||
fun_caves.db.hunger[name] = 20
|
fun_caves.db.hunger[player_name] = 20
|
||||||
end
|
end
|
||||||
|
|
||||||
local hunger_bar = {
|
local hunger_bar = {
|
||||||
|
@ -223,13 +216,13 @@ if not hunger_mod then
|
||||||
offset = {x = 0, y = -90},
|
offset = {x = 0, y = -90},
|
||||||
name = "hunger",
|
name = "hunger",
|
||||||
text = "farming_bread.png",
|
text = "farming_bread.png",
|
||||||
number = fun_caves.db.hunger[name],
|
number = fun_caves.db.hunger[player_name],
|
||||||
direction = 0,
|
direction = 0,
|
||||||
size = { x=24, y=24 },
|
size = { x=24, y=24 },
|
||||||
}
|
}
|
||||||
|
|
||||||
fun_caves.hunger_id[name] = player:hud_add(hunger_bar)
|
fun_caves.hunger_id[player_name] = player:hud_add(hunger_bar)
|
||||||
end)
|
end
|
||||||
|
|
||||||
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||||
if hp_change > 0 then
|
if hp_change > 0 then
|
||||||
|
@ -238,14 +231,85 @@ if not hunger_mod then
|
||||||
end)
|
end)
|
||||||
|
|
||||||
minetest.register_on_dieplayer(function(player)
|
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())
|
local pos = vector.round(player:getpos())
|
||||||
|
|
||||||
if not hunger_mod then
|
if not hunger_mod then
|
||||||
fun_caves.db.hunger[name] = 20
|
fun_caves.db.hunger[player_name] = 20
|
||||||
player:hud_change(fun_caves.hunger_id[name], 'number', 20)
|
player:hud_change(fun_caves.hunger_id[player_name], 'number', 20)
|
||||||
end
|
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)
|
||||||
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