2022-05-05 09:27:41 -05:00

179 lines
5.1 KiB
Lua

--lockpicks v0.8 by HeroOfTheWinds
--Adds a variety of lockpicks and redefines most locked objects to allow them to be 'picked' and unlocked.
local breakexp = .66 --exponent for tools to determine
local has_moreores = false
if minetest.get_modpath("moreores") ~= nil then
has_moreores = true
end
minetest.register_privilege("lockpick", {
description = "Can lockpick items",
give_to_singleplayer = false
})
--lockpick definitions
--[[minetest.register_tool("lockpicks:lockpick_wood", {
description="Wooden Lockpick",
inventory_image = "wooden_lockpick.png",
tool_capabilities = {
max_drop_level = 1,
groupcaps = {locked={maxlevel=1, uses=10, times={[3]=5.00}}}
}
})--]]
minetest.register_tool("lockpicks:lockpick_steel", {
description="Steel Lockpick",
inventory_image = "steel_lockpick.png",
tool_capabilities = {
max_drop_level = 2,
groupcaps = {locked={maxlevel=1, uses=20, times={[1]=6.00}}}
}
})
minetest.register_tool("lockpicks:lockpick_copper", {
description="Copper Lockpick",
inventory_image = "copper_lockpick.png",
tool_capabilities = {
max_drop_level = 3,
groupcaps = {locked={maxlevel=1, uses=30, times={[1]=5.50}}}
}
})
if has_moreores then
minetest.register_tool("lockpicks:lockpick_silver", {
description="Silver Lockpick",
inventory_image = "silver_lockpick.png",
tool_capabilities = {
max_drop_level = 4,
groupcaps = {locked={maxlevel=1, uses=40, times={[1]=3.00}}}
}
})
end
minetest.register_tool("lockpicks:lockpick_gold", {
description="Gold Lockpick",
inventory_image = "gold_lockpick.png",
tool_capabilities = {
max_drop_level = 5,
groupcaps = {locked={maxlevel=2, uses=50, times={[2]=12.00,[1]=2.00}}}
}
})
if has_moreores then
minetest.register_tool("lockpicks:lockpick_mithril", {
description="Mithril Lockpick",
inventory_image = "mithril_lockpick.png",
tool_capabilities = {
max_drop_level = 6,
groupcaps = {locked={maxlevel=3, uses=50, times={[3]=20.00,[2]=8.00,[1]=1.00}}}
}
})
end
--self-explanatory - taken from original locked chest code
function has_locked_chest_privilege(meta, player)
if player:get_player_name() ~= meta:get_string("owner") then
return false
end
return true
end
function get_chest_formspec(pos)
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
local formspec =
"size[8,9]" ..
default.gui_bg ..
default.gui_bg_img ..
default.gui_slots ..
"list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
"list[current_player;main;0,4.85;8,1;]" ..
"list[current_player;main;0,6.08;8,3;8]" ..
"listring[nodemeta:" .. spos .. ";main]" ..
"listring[current_player;main]" ..
default.get_hotbar_bg(0,4.85)
return formspec
end
local newchestrightclick = function(pos, node, clicker, itemstack, pointed_thing)
local wield = clicker:get_wielded_item():get_name()
local def = minetest.registered_tools[wield]
if not default.can_interact_with_node(clicker, pos)
and not (def and def.tool_capabilities and def.tool_capabilities.groupcaps and def.tool_capabilities.groupcaps.locked) then
return itemstack
end
name = "default:chest_locked"
sound_open = "default_chest_open"
sound_close = "default_chest_close"
minetest.sound_play(sound_open, {gain = 0.3,
pos = pos, max_hear_distance = 10}, true)
if not default.chest.chest_lid_obstructed(pos) then
minetest.swap_node(pos,
{ name = name .. "_open",
param2 = node.param2 })
end
minetest.after(0.2, minetest.show_formspec,
clicker:get_player_name(),
"default:chest", default.chest.get_chest_formspec(pos))
default.chest.open_chests[clicker:get_player_name()] = { pos = pos,
sound = sound_close, swap = name }
end
minetest.override_item("default:chest_locked", {on_rightclick = newchestrightclick})
minetest.override_item("default:chest_locked_open", {on_rightclick = newchestrightclick})
--locked node definitions
--load technic chests
modpath=minetest.get_modpath("lockpicks")
dofile(modpath.."/defaults.lua")
--pick recipe definitions
minetest.register_craft({
output = "lockpicks:lockpick_wood",
recipe = {
{"", "default:stick", "default:stick"},
{"", "default:stick", ""},
{"", "default:wood", ""}
}
})
minetest.register_craft({
output = "lockpicks:lockpick_steel",
recipe = {
{"", "default:steel_ingot", "default:steel_ingot"},
{"", "default:steel_ingot", ""},
{"", "default:wood", ""}
}
})
minetest.register_craft({
output = "lockpicks:lockpick_copper",
recipe = {
{"", "default:copper_ingot", "default:copper_ingot"},
{"", "default:copper_ingot", ""},
{"", "default:steel_ingot", ""}
}
})
if has_moreores then
minetest.register_craft({
output = "lockpicks:lockpick_silver",
recipe = {
{"", "moreores:silver_ingot", "moreores:silver_ingot"},
{"", "moreores:silver_ingot", ""},
{"", "default:steel_ingot", ""}
}
})
end
minetest.register_craft({
output = "lockpicks:lockpick_gold",
recipe = {
{"", "default:gold_ingot", "default:gold_ingot"},
{"", "default:gold_ingot", ""},
{"", "default:steel_ingot", ""}
}
})
if has_moreores then
minetest.register_craft({
output = "lockpicks:lockpick_mithril",
recipe = {
{"", "moreores:mithril_ingot", "moreores:mithril_ingot"},
{"", "moreores:mithril_ingot", ""},
{"", "default:steel_ingot", ""}
}
})
end