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] 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) 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.set_status(player_name, 'armor_elixir', 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, }) minetest.register_craft({ type = "shapeless", output = 'fun_caves:liquid_'..name, recipe = { 'mobs_slimes:green_slimeball', desc[3], "vessels:glass_bottle", }, }) minetest.register_craft({ type = "shapeless", output = 'fun_caves:liquid_'..name, recipe = { 'fun_caves:syrup', desc[3], }, }) end end