fun_caves/elixir.lua
2016-07-12 22:36:14 -05:00

308 lines
7.9 KiB
Lua

local elixir_duration = 3600
local elixir_ingredients = {
'default:acacia_leaves',
'default:acacia_sapling',
'default:acacia_tree',
'default:acacia_wood',
'default:apple',
'default:aspen_leaves',
'default:aspen_sapling',
'default:aspen_tree',
'default:aspen_wood',
'default:cactus',
'default:clay_lump',
'default:cloud',
'default:coal_lump',
'default:copper_lump',
'default:desert_sand',
'default:desert_stone',
'default:diamond',
'default:dirt',
'default:dry_shrub',
'default:gold_lump',
'default:gravel',
'default:ice',
'default:iron_lump',
'default:junglegrass',
'default:jungleleaves',
'default:junglesapling',
'default:jungletree',
'default:junglewood',
'default:leaves',
'default:pine_needles',
'default:pine_sapling',
'default:pine_tree',
'default:pine_wood',
'default:sand',
'default:sandstone',
'default:sapling',
'default:snow',
'default:stone',
'default:tree',
'default:wood',
'farming:seed_cotton',
'farming:seed_wheat',
'flowers:dandelion_white',
'flowers:dandelion_yellow',
'flowers:geranium',
'flowers:mushroom_brown',
'flowers:mushroom_red',
'flowers:rose',
'flowers:tulip',
'flowers:viola',
'flowers:waterlily',
'fun_caves:amber',
'fun_caves:bark',
'fun_caves:bird_of_paradise',
'fun_caves:black_sand',
'fun_caves:brain_coral',
'fun_caves:diamondwood',
'fun_caves:dragon_eye',
'fun_caves:dry_fiber',
'fun_caves:gerbera',
'fun_caves:giant_mushroom_cap',
'fun_caves:giant_mushroom_stem',
'fun_caves:hibiscus',
'fun_caves:huge_mushroom_cap',
'fun_caves:icicle_down',
'fun_caves:icicle_up',
'fun_caves:ironwood',
'fun_caves:leaves',
'fun_caves:onion',
'fun_caves:orchid',
'fun_caves:petrified_wood',
'fun_caves:pillar_coral',
'fun_caves:small_rocks',
'fun_caves:staghorn_coral',
'fun_caves:stalactite',
'fun_caves:stalactite_mossy',
'fun_caves:stalactite_slimy',
'fun_caves:stalagmite',
'fun_caves:stalagmite_mossy',
'fun_caves:stalagmite_slimy',
'fun_caves:thin_ice',
'fun_caves:tree',
'wool:white',
'wool:black',
}
local count = 0
for _, name in pairs(elixir_ingredients) do
local item = minetest.registered_items[name]
if not item then
item = minetest.registered_nodes[name]
end
if item then
if item.groups then
groups = table.copy(item.groups)
else
groups = {}
end
groups.elixir_ingredient = 1
minetest.override_item(name, {groups = groups})
count = count + 1
else
--print(name)
end
end
if count > 15 then
--for _, list in pairs({'registered_items', 'registered_nodes', 'registered_craftitems'}) do
-- for _, item in pairs(minetest[list]) do
-- if item and item.groups.elixir_ingredient then
-- print(item.name)
-- end
-- end
--end
local elixirs = {}
minetest.register_craftitem("fun_caves:elixir", {
description = "unknown elixir",
inventory_image = "fun_caves_elixir.png",
on_use = minetest.item_eat(-2),
})
minetest.register_craft({
type = "shapeless",
output = 'fun_caves:elixir',
recipe = {
'mobs_slimes:green_slimeball',
'group:elixir_ingredient',
'group:elixir_ingredient',
'group:elixir_ingredient',
"vessels:glass_bottle",
},
})
minetest.register_craft({
type = "shapeless",
output = 'fun_caves:elixir',
recipe = {
'fun_caves:syrup',
'group:elixir_ingredient',
'group:elixir_ingredient',
'group:elixir_ingredient',
},
})
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
if itemstack:get_name() ~= "fun_caves:elixir" then
return
end
local ingredients = {}
for i = 1, player:get_inventory():get_size("craft") do
local name = old_craft_grid[i]:get_name()
if name ~= '' and name ~= 'fun_caves:syrup' and not name:find('green_slimeball$') then
ingredients[#ingredients+1] = name
print(name)
end
end
end)
end
fun_caves.register_status({
name = 'breathe',
terminate = function(player)
local player_name = player:get_player_name()
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your breathing becomes more difficult...'))
end,
})
minetest.register_craftitem("fun_caves:elixir_breathe", {
description = 'Dr Robertson\'s Patented Easy Breathing Elixir',
inventory_image = "fun_caves_elixir_breathe.png",
on_use = function(itemstack, user, pointed_thing)
local player_name = user:get_player_name()
fun_caves.set_status(user:get_player_name(), 'breathe', elixir_duration)
minetest.chat_send_player(player_name, 'Your breathing becomes easier...')
itemstack:take_item()
return itemstack
end,
})
minetest.register_craft({
type = "shapeless",
output = 'fun_caves:elixir_breathe',
recipe = {
'mobs_slimes:green_slimeball',
'fun_caves:coral_gem',
"vessels:glass_bottle",
},
})
minetest.register_craft({
type = "shapeless",
output = 'fun_caves:elixir_breathe',
recipe = {
'fun_caves:syrup',
'fun_caves:coral_gem',
},
})
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
fun_caves.display_armor(player)
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
fun_caves.display_armor(player)
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 / 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 = {
{'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