1
0
mirror of https://github.com/Sokomine/locks.git synced 2025-06-29 21:40:24 +02:00

13 Commits

7 changed files with 195 additions and 189 deletions

View File

@ -1,2 +1,3 @@
default default
pipeworks? pipeworks?
basic_materials?

View File

@ -46,7 +46,7 @@ minetest.register_privilege("diglocks", { description = "allows to open/use and
locks.config_button = [[ locks.config_button = [[
image_button[%d,%d;1,1;locks_lock16.png;locks_config;Config image_button[%s,%s;1,1;locks_lock16.png;locks_config;Config
Locks] Locks]
tooltip[locks_config;Configure the players or set the password to grant access to other players.] tooltip[locks_config;Configure the players or set the password to grant access to other players.]
]] ]]
@ -56,7 +56,7 @@ function locks.get_config_button(x,y)
end end
locks.authorize_button = [[ locks.authorize_button = [[
image_button[%d,%d;1,1;locks_key16.png;locks_authorize;Autho- image_button[%s,%s;1,1;locks_key16.png;locks_authorize;Autho-
rize] rize]
tooltip[locks_authorize;Opens a password prompt to grant you access to this object.] tooltip[locks_authorize;Opens a password prompt to grant you access to this object.]
]] ]]
@ -181,6 +181,7 @@ function locks:lock_init( pos, default_formspec )
meta:set_string("allowed_users",""); meta:set_string("allowed_users","");
-- objects can be unlocked by passwords as well (if it is set) -- objects can be unlocked by passwords as well (if it is set)
meta:set_string("password",""); meta:set_string("password","");
meta:mark_as_private("password")
-- the last player who entered the right password (to save space this is not a list) -- the last player who entered the right password (to save space this is not a list)
meta:set_string("pw_user",""); meta:set_string("pw_user","");
-- this formspec is presented on right-click for every user -- this formspec is presented on right-click for every user
@ -228,6 +229,7 @@ function locks:set_lockdata( pos, data )
meta:set_string("owner", (data.owner or "")); meta:set_string("owner", (data.owner or ""));
meta:set_string("allowed_users",(data.allowed_users or "")); meta:set_string("allowed_users",(data.allowed_users or ""));
meta:set_string("password", (data.password or "")); meta:set_string("password", (data.password or ""));
meta:mark_as_private("password")
meta:set_string("pw_user", (data.pw_user or "")); meta:set_string("pw_user", (data.pw_user or ""));
meta:set_string("formspec", (data.formspec or "")); meta:set_string("formspec", (data.formspec or ""));
end end
@ -598,6 +600,7 @@ function locks:lock_handle_input( pos, formname, fields, player )
meta:set_string( "password", help[2]); meta:set_string( "password", help[2]);
meta:mark_as_private("password")
-- reset the list of users who typed the right password -- reset the list of users who typed the right password
meta:set_string("pw_users",""); meta:set_string("pw_users","");
@ -747,14 +750,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
return false; return false;
end) end)
-- craftitem; that can be used to craft shared locked objects if minetest.get_modpath("basic_materials") then
minetest.register_craftitem("locks:lock", { minetest.register_alias("locks:lock", "basic_materials:padlock")
else
-- craftitem; that can be used to craft shared locked objects
minetest.register_craftitem("locks:lock", {
description = "Lock to lock and share objects", description = "Lock to lock and share objects",
image = "locks_lock16.png", image = "locks_lock16.png",
}); });
minetest.register_craft({ minetest.register_craft({
output = "locks:lock 2", output = "locks:lock 2",
recipe = { recipe = {
{'default:steel_ingot', 'default:steel_ingot','default:steel_ingot'}, {'default:steel_ingot', 'default:steel_ingot','default:steel_ingot'},
@ -762,7 +768,7 @@ minetest.register_craft({
{'', 'default:steel_ingot',''}, {'', 'default:steel_ingot',''},
} }
}); });
end
-- a key allowes to open your own shared locked objects -- a key allowes to open your own shared locked objects
minetest.register_craftitem("locks:key", { minetest.register_craftitem("locks:key", {
@ -798,3 +804,5 @@ dofile(minetest.get_modpath("locks").."/shared_locked_chest.lua");
dofile(minetest.get_modpath("locks").."/shared_locked_sign_wall.lua"); dofile(minetest.get_modpath("locks").."/shared_locked_sign_wall.lua");
dofile(minetest.get_modpath("locks").."/shared_locked_xdoors2.lua"); dofile(minetest.get_modpath("locks").."/shared_locked_xdoors2.lua");
dofile(minetest.get_modpath("locks").."/shared_locked_furnace.lua"); dofile(minetest.get_modpath("locks").."/shared_locked_furnace.lua");
minetest.log("action", "[locks] loaded.")

4
mod.conf Normal file
View File

@ -0,0 +1,4 @@
name = locks
description = This Mod for Minetest adds objects that can be locked and shared.
depends=default
optional_depends = pipeworks,basic_materials

View File

@ -140,7 +140,7 @@ minetest.register_node("locks:shared_locked_chest", {
minetest.register_craft({ minetest.register_craft({
output = 'locks:shared_locked_chest', output = 'locks:shared_locked_chest',
recipe = { recipe = {
{ 'default:chest', 'locks:lock', '' }, { 'locks:lock', 'default:chest', minetest.get_modpath("basic_materials") and 'basic_materials:ic' or ''},
}, },
}) })

View File

@ -428,7 +428,7 @@ minetest.register_abm({
minetest.register_craft({ minetest.register_craft({
output = 'locks:shared_locked_furnace', output = 'locks:shared_locked_furnace',
recipe = { recipe = {
{ 'default:furnace', 'locks:lock', '' }, { 'locks:lock', 'default:furnace', minetest.get_modpath("basic_materials") and 'basic_materials:ic' or ''},
}, },
}) })

View File

@ -71,7 +71,7 @@ minetest.register_node("locks:shared_locked_sign_wall", {
minetest.register_craft({ minetest.register_craft({
output = 'locks:shared_locked_sign_wall', output = 'locks:shared_locked_sign_wall',
recipe = { recipe = {
{ 'default:sign_wall', 'locks:lock', '' }, { 'locks:lock', 'default:sign_wall', minetest.get_modpath("basic_materials") and 'basic_materials:ic' or ''},
}, },
}) })

View File

@ -22,14 +22,15 @@ end
local xdoors2_transform = function(pos, node, puncher) local xdoors2_transform = function(pos, node, puncher)
if( not( locks:lock_allow_use( pos, puncher ))) then
minetest.chat_send_player( puncher:get_player_name(), "This door is locked. It can only be opened by its owner or people with a key that fits.");
return;
end
if is_top(node.name) then if is_top(node.name) then
pos = {x = pos.x, y = pos.y - 1, z = pos.z} pos = {x = pos.x, y = pos.y - 1, z = pos.z}
end end
if( not( locks:lock_allow_use( pos, puncher ))) then
minetest.chat_send_player( puncher:get_player_name(), "This door is locked. It can only be opened by its owner or people with a key that fits.")
return
end
local t = 3 - node.name:sub(-1) local t = 3 - node.name:sub(-1)
local p2 = 0 local p2 = 0
if t == 2 then if t == 2 then
@ -40,13 +41,10 @@ local xdoors2_transform = function(pos, node, puncher)
minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10}) minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10})
end end
local olddata = locks:get_lockdata( pos ); -- No need to remember who owns the door, what passwords are set etc.
minetest.add_node(pos, {name = "locks:door_bottom_"..t, param2 = p2}) -- because minetest.swap_node() keeps metadata at pos
minetest.add_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "locks:door_top_"..t, param2 = p2}) minetest.swap_node(pos, {name = "locks:door_bottom_"..t, param2 = p2})
minetest.swap_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "locks:door_top_"..t, param2 = p2})
-- remember who owns the door, what passwords are set etc.
locks:set_lockdata( pos, olddata );
locks:set_lockdata( {x = pos.x, y = pos.y + 1, z = pos.z}, olddata );
end end
@ -79,17 +77,16 @@ for i = 1, 2 do
on_construct = function(pos) on_construct = function(pos)
locks:lock_init( pos, locks:lock_init( pos,
"size[8,2]".. "size[8,2]"..locks.uniform_background..
locks.uniform_background.. "button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" )
"button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" );
end, end,
on_receive_fields = function(pos, formname, fields, sender) on_receive_fields = function(pos, formname, fields, sender)
locks:lock_handle_input( pos, formname, fields, sender ); locks:lock_handle_input( {x=pos.x, y=pos.y-1, z=pos.z}, formname, fields, sender )
end, end,
can_dig = function(pos,player) can_dig = function(pos,player)
return locks:lock_allow_dig( pos, player ); return locks:lock_allow_dig( {x=pos.x, y=pos.y-1, z=pos.z}, player )
end end
}) })
minetest.register_node("locks:door_bottom_"..i, { minetest.register_node("locks:door_bottom_"..i, {
@ -112,17 +109,16 @@ for i = 1, 2 do
on_construct = function(pos) on_construct = function(pos)
locks:lock_init( pos, locks:lock_init( pos,
"size[8,2]".. "size[8,2]"..locks.uniform_background..
locks.uniform_background.. "button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" )
"button_exit[6.3,1.2;1.7,1;locks_sent_input;Proceed]" );
end, end,
on_receive_fields = function(pos, formname, fields, sender) on_receive_fields = function(pos, formname, fields, sender)
locks:lock_handle_input( pos, formname, fields, sender ); locks:lock_handle_input( pos, formname, fields, sender )
end, end,
can_dig = function(pos,player) can_dig = function(pos,player)
return locks:lock_allow_dig( pos, player ); return locks:lock_allow_dig( pos, player )
end end
}) })
end end
@ -138,15 +134,16 @@ minetest.register_node("locks:door", {
description = "Shared locked Wooden Door", description = "Shared locked Wooden Door",
node_placement_prediction = "", node_placement_prediction = "",
inventory_image = 'locks_xdoors2_door.png', inventory_image = 'locks_xdoors2_door.png',
wield_image = 'xdoors2_door.png', wield_image = 'locks_xdoors2_door.png',
stack_max = 1, stack_max = 1,
sunlight_propogates = true, sunlight_propogates = true,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
local pname = placer:get_player_name()
local above = pointed_thing.above local above = pointed_thing.above
local above1 = {x = above.x, y = above.y + 1, z = above.z}; local above1 = {x = above.x, y = above.y + 1, z = above.z}
if (minetest.is_protected(above, placer:get_player_name()) if (minetest.is_protected(above, pname)
or minetest.is_protected(above1, placer:get_player_name())) then or minetest.is_protected(above1, pname)) then
minetest.chat_send_player(placer:get_player_name(), "This area is protected!") minetest.chat_send_player(pname, "This area is protected!")
return itemstack return itemstack
else else
-- there should be 2 empty nodes -- there should be 2 empty nodes
@ -155,14 +152,13 @@ minetest.register_node("locks:door", {
end end
local fdir = 0 local fdir = 0
local placer_pos = placer:getpos() local placer_pos = placer:get_pos()
if placer_pos then if placer_pos then
dir = { fdir = minetest.dir_to_facedir({
x = above.x - placer_pos.x, x = above.x - placer_pos.x,
y = above.y - placer_pos.y, y = above.y - placer_pos.y,
z = above.z - placer_pos.z z = above.z - placer_pos.z
} })
fdir = minetest.dir_to_facedir(dir)
end end
local t = 1 local t = 1
@ -173,50 +169,47 @@ minetest.register_node("locks:door", {
end end
minetest.add_node(above, {name = "locks:door_bottom_"..t, param2 = fdir}) minetest.add_node(above, {name = "locks:door_bottom_"..t, param2 = fdir})
minetest.add_node({x = above.x, y = above.y + 1, z = above.z}, {name = "locks:door_top_"..t, param2 = fdir}) minetest.add_node(above1, {name = "locks:door_top_"..t, param2 = fdir})
-- store who owns the door; the other data can be default for now -- store who owns the door; the other data can be default for now
locks:lock_set_owner( above, placer:get_player_name() or "", "Shared locked door"); locks:lock_set_owner( above, pname or "", "Shared locked door")
locks:lock_set_owner( {x = above.x, y = above.y + 1, z = above.z}, placer:get_player_name() or "", "Shared locked door"); locks:lock_set_owner( above1, pname or "", "Shared locked door")
return ItemStack("") return ItemStack("")
end end
end end
}) })
local ing = minetest.get_modpath("basic_materials") and 'basic_materials:ic' or ''
-- if xdoors2 is installed -- if xdoors2 is installed
if( minetest.get_modpath("xdoors2") ~= nil ) then if( minetest.get_modpath("xdoors2") ~= nil ) then
minetest.register_craft({ minetest.register_craft({
output = 'locks:door', output = 'locks:door',
recipe = { recipe = {
{ 'xdoors2:door', 'locks:lock', '' }, { 'locks: lock', 'xdoors2:door', ing},
}, },
}); })
-- if the normal doors are installed -- if the normal doors are installed
else if( minetest.get_modpath("doors") ~= nil ) then elseif( minetest.get_modpath("doors") ~= nil ) then
minetest.register_craft({ minetest.register_craft({
output = 'locks:door', output = 'locks:door',
recipe = { recipe = {
{ 'doors:door_wood', 'locks:lock', '' }, { 'locks:lock', 'doors:door_wood', ing},
}, },
}) })
-- fallback if no doors can be found -- fallback if no doors can be found
else else
minetest.register_craft({ minetest.register_craft({
output = 'locks:door', output = 'locks:door',
recipe = { recipe = {
{ 'default:wood', 'default:wood', '' }, { 'default:wood', 'default:wood', '' },
{ 'default:wood', 'default:wood', 'locks:lock' }, { 'default:wood', 'default:wood', 'locks:lock' },
{ 'default:wood', 'default:wood', '' }, { 'default:wood', 'default:wood', ing },
}, },
}); })
end end
end -- of previous else
print( "[Mod] locks: loading locks:door")
print( "[Mod] locks: loading locks:door");