130 lines
3.9 KiB
Lua
130 lines
3.9 KiB
Lua
local elixir_duration = 3600
|
|
|
|
|
|
fun_caves.register_status({
|
|
name = 'armor_elixir',
|
|
terminate = function(player)
|
|
local player_name = player:get_player_name()
|
|
local armor_elixir = fun_caves.db.status[player_name].armor_elixir
|
|
local factor = 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.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...'))
|
|
fun_caves.db.status[player_name].armor_elixir = nil
|
|
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()
|
|
if 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)
|
|
fun_caves.db.status[player_name].armor_elixir = nil
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
local function armor(user, factor)
|
|
local player_name = user:get_player_name()
|
|
local armor = user:get_armor_groups()
|
|
|
|
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)))
|
|
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.db.status[player_name].armor_elixir = {
|
|
remove = minetest.get_gametime() + elixir_duration,
|
|
factor = factor,
|
|
}
|
|
end
|
|
|
|
local descs = {
|
|
{'wood', 0.95, 'group:wood'},
|
|
{'stone', 0.9, 'group:stone'},
|
|
{'steel', 0.8, 'default:steel_ingot'},
|
|
{'copper', 0.85, 'default:copper_ingot'},
|
|
{'bronze', 0.7, 'default:bronze_ingot'},
|
|
{'gold', 0.6, 'default:gold_ingot'},
|
|
{'diamond', 0.5, 'default:diamond'},
|
|
{'silver', 0.4, 'fun_caves:silver_ingot'},
|
|
{'mese', 0.3, 'default:mese_crystal'},
|
|
--{'', 0.2, ''},
|
|
--{'adamant', 0.1, 'fun_caves:adamant'},
|
|
}
|
|
|
|
if fun_caves.elixir_armor then
|
|
for _, desc in pairs(descs) do
|
|
local name = desc[1]
|
|
local value = desc[2]
|
|
local cap = name:gsub('^%l', string.upper)
|
|
minetest.register_craftitem("fun_caves:liquid_"..name, {
|
|
description = 'Dr Robertson\'s Patented Liquid '..cap..' Elixir',
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
tiles = {'fun_caves_liquid_'..name..'.png'},
|
|
inventory_image = 'fun_caves_liquid_'..name..'.png',
|
|
groups = {dig_immediate = 3, vessel = 1},
|
|
sounds = default.node_sound_glass_defaults(),
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
armor(user, value)
|
|
itemstack:take_item()
|
|
return itemstack
|
|
end,
|
|
})
|
|
|
|
for _, solvent in pairs({'mobs_slimes:green_slimeball', 'fun_caves:bucket_sap'}) do
|
|
minetest.register_craft({
|
|
type = "shapeless",
|
|
output = 'fun_caves:liquid_'..name,
|
|
recipe = {
|
|
solvent,
|
|
desc[3],
|
|
"vessels:glass_bottle",
|
|
},
|
|
})
|
|
end
|
|
end
|
|
|
|
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
|
local name = itemstack:get_name()
|
|
if not (name and name:find('^fun_caves:liquid_')) then
|
|
return
|
|
end
|
|
|
|
local bucket
|
|
local index
|
|
for i = 1, player:get_inventory():get_size("craft") do
|
|
if (old_craft_grid[i]:get_name()):find('^fun_caves:bucket') then
|
|
bucket = old_craft_grid[i]
|
|
index = i
|
|
end
|
|
end
|
|
if not bucket then
|
|
return
|
|
end
|
|
|
|
craft_inv:set_stack("craft", index, 'bucket:bucket_empty')
|
|
end)
|
|
end
|