Write default functions.
parent
e1da38d952
commit
2b0654364c
399
doors/init.lua
399
doors/init.lua
|
@ -1,5 +1,93 @@
|
|||
doors = {}
|
||||
|
||||
--{{{ Functions
|
||||
|
||||
--{{{ can_open for door with bolt
|
||||
doors.can_open_bolted = function (pos, node, clicker)
|
||||
if string.find(node.name, "_1") then
|
||||
local door_facedir = node.param2
|
||||
local clicker_facedir = minetest.dir_to_facedir(vector.direction(clicker:getpos(),pos))
|
||||
if door_facedir ~= clicker_facedir then return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ swap_door
|
||||
doors.swap_door = function (pos, dir, check_name, replace, replace_dir, meta)
|
||||
pos.y = pos.y+dir
|
||||
if not minetest.get_node(pos).name == check_name then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.swap_node(pos, {name=replace_dir})
|
||||
|
||||
pos.y = pos.y-dir
|
||||
minetest.swap_node(pos, {name=replace})
|
||||
|
||||
if meta ~= nil then
|
||||
local metadata = minetest.get_meta(pos)
|
||||
metadata:set_string(meta[1], meta[2])
|
||||
|
||||
pos.y = pos.y+dir
|
||||
|
||||
metadata = minetest.get_meta(pos)
|
||||
meta:set_string(meta[1], meta[2])
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ open_door
|
||||
doors.open_door = function (pos, part)
|
||||
if part == "t_1" then
|
||||
doors.swap_door(pos,-1, name.."_b_1", name.."_t_2", name.."_b_2")
|
||||
elseif part == "b_1" then
|
||||
doors.swap_door(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2")
|
||||
elseif part == "t_2" then
|
||||
doors.swap_door(pos,-1, name.."_b_2", name.."_t_1", name.."_b_1")
|
||||
elseif part == "b_2" then
|
||||
doors.swap_door(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1")
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ rightclick_on_locked
|
||||
doors.rightclick_on_locked = function(pos, node, clicker, wield_item)
|
||||
if real_locks.can_open_locked (pos, wield_item) then
|
||||
doors.open_door(pos, node.name:sub(-3))
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ rightclock_on_bolted
|
||||
doors.rightclick_on_bolted = function(pos, node, clicker)
|
||||
if doors.can_open_bolted(pos, node, clicker) then
|
||||
doors.open_door(pos, node.name:sub(-3))
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ rightclick_on_lockable
|
||||
doors.rightclick_on_lockable = function (pos, node, clicker, wield_item)
|
||||
if wield_item:get_name() == "real_locks:lock" then
|
||||
doors.swap_door(pos, 1, name.."_t_1",
|
||||
name.."locked_b_1", name.."locked_t_1",
|
||||
{"lock_pass", wield_item:get_metadata()}
|
||||
)
|
||||
wield_item:take_item()
|
||||
else
|
||||
doors.open_door(pos, node.name:sub(-3))
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ rightclick_on_not_lockable
|
||||
doors.rightclick_on_not_lockable = function (pos, node)
|
||||
doors.open_door(pos, node.name:sub(-3))
|
||||
end
|
||||
--}}}
|
||||
--}}}
|
||||
|
||||
--{{{ doors:register_door
|
||||
function doors:register_door(name, def)
|
||||
def.groups.not_in_creative_inventory = 1
|
||||
|
@ -68,8 +156,8 @@ function doors:register_door(name, def)
|
|||
minetest.set_node(pt2, {name=name.."_t_2", param2=p2})
|
||||
end
|
||||
|
||||
if def.with_lock then
|
||||
local passwd = itemstack:get_metadata()
|
||||
local passwd = itemstack:get_metadata()
|
||||
if passwd ~= nil then
|
||||
local meta = minetest.get_meta(pt)
|
||||
meta:set_string("lock_pass", passwd)
|
||||
meta:set_string("infotext", def.infotext)
|
||||
|
@ -94,169 +182,12 @@ function doors:register_door(name, def)
|
|||
minetest.remove_node(pos)
|
||||
end
|
||||
end
|
||||
|
||||
--{{{ On rightclick
|
||||
local function swapDoor(pos, dir, check_name, replace, replace_dir, lock)
|
||||
pos.y = pos.y+dir
|
||||
if not minetest.get_node(pos).name == check_name then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.swap_node(pos, {name=replace_dir})
|
||||
|
||||
pos.y = pos.y-dir
|
||||
minetest.swap_node(pos, {name=replace})
|
||||
|
||||
if lock ~= nil then
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("lock_pass", lock)
|
||||
|
||||
pos.y = pos.y+dir
|
||||
|
||||
meta = minetest.get_meta(pos)
|
||||
meta:set_string("lock_pass", lock)
|
||||
end
|
||||
end
|
||||
|
||||
if not def.can_open then
|
||||
def.can_open = function (pos, clicker)
|
||||
local wield_item = clicker:get_wielded_item()
|
||||
if wield_item:get_name() == "real_locks:key" then
|
||||
local lock_pass = minetest.get_meta(pos):get_string("lock_pass")
|
||||
local key_pass = wield_item:get_metadata()
|
||||
|
||||
return lock_pass == key_pass
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
if def.rightclick == nil then
|
||||
def.rightclick = doors.rightclick_on_not_lockable
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{ Node registration
|
||||
if def.with_lock then
|
||||
|
||||
--{{{ b_1
|
||||
minetest.register_node(name.."_b_1_locked", {
|
||||
tiles = {tb[1], tb[3], tb[2], tb[2].."^[transformr180", tb[1], tb[1].."^[transformfx"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
drop = name,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = def.node_box_bottom
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = def.selection_box_bottom
|
||||
},
|
||||
groups = def.groups,
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
pos.y = pos.y+1
|
||||
after_dig_node(pos, name.."_t_1_locked")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
if def.can_open(pos, clicker) then
|
||||
openDoor(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2")
|
||||
end
|
||||
end,
|
||||
})
|
||||
--}}}
|
||||
|
||||
--{{{ t_1
|
||||
minetest.register_node(name.."_t_1_locked", {
|
||||
tiles = {tt[3].."^[transformr180", tt[2], tt[2], tt[2].."^[transformr180", tt[1], tt[1].."^[transformfx"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
drop = name,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = def.node_box_top
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = def.selection_box_top
|
||||
},
|
||||
groups = def.groups,
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
pos.y = pos.y-1
|
||||
after_dig_node(pos, name.."_b_1_locked")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
if def.can_open(pos, clicker) then
|
||||
openDoor(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2")
|
||||
end
|
||||
end,
|
||||
})
|
||||
--}}}
|
||||
|
||||
--{{{ b_2
|
||||
minetest.register_node(name.."_b_2_locked", {
|
||||
tiles = {tb[1], tb[3].."^[transformfy", tb[2].."^[transformfx", tb[2], tb[1].."^[transformfx", tb[1]},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
drop = name,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = def.node_box_bottom
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = def.selection_box_bottom
|
||||
},
|
||||
groups = def.groups,
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
pos.y = pos.y+1
|
||||
after_dig_node(pos, name.."_t_2_locked")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
if def.can_open(pos, clicker) then
|
||||
openDoor(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1")
|
||||
end
|
||||
end,
|
||||
})
|
||||
--}}}
|
||||
|
||||
--{{{ t_2
|
||||
minetest.register_node(name.."_t_2_locked", {
|
||||
tiles = {tt[3], tt[2], tt[2].."^[transformfx", tt[2], tt[1].."^[transformfx", tt[1]},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
drop = name,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = def.node_box_top
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = def.selection_box_top
|
||||
},
|
||||
groups = def.groups,
|
||||
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
pos.y = pos.y-1
|
||||
after_dig_node(pos, name.."_b_2_locked")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
if def.can_open(pos, clicker) then
|
||||
openDoor(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1")
|
||||
end
|
||||
end,
|
||||
})
|
||||
--}}}
|
||||
|
||||
else
|
||||
|
||||
--{{{ b_1
|
||||
minetest.register_node(name.."_b_1", {
|
||||
|
@ -280,18 +211,7 @@ function doors:register_door(name, def)
|
|||
after_dig_node(pos, name.."_t_1")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
wield_item = clicker:get_wielded_item()
|
||||
if wield_item:get_name() == "real_locks:lock" then
|
||||
swapDoor(pos, 1, name.."_t_1",
|
||||
name.."_b_1_locked", name.."_t_1_locked",
|
||||
wield_item:get_metadata()
|
||||
)
|
||||
wield_item:take_item()
|
||||
else
|
||||
openDoor(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2")
|
||||
end
|
||||
end,
|
||||
on_rightclick = def.rightclick,
|
||||
})
|
||||
--}}}
|
||||
|
||||
|
@ -317,18 +237,7 @@ function doors:register_door(name, def)
|
|||
after_dig_node(pos, name.."_b_1")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local wield_item = clicker:get_wielded_item():get_name()
|
||||
if wield_item == "real_locks:lock" then
|
||||
swapDoor(pos, 1, name.."_b_1",
|
||||
name.."_t_1_locked", name.."_b_1_locked",
|
||||
wield_item:get_metadata()
|
||||
)
|
||||
wield_item:take_item()
|
||||
else
|
||||
openDoor(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2")
|
||||
end
|
||||
end,
|
||||
on_rightclick = def.rightclick,
|
||||
})
|
||||
--}}}
|
||||
|
||||
|
@ -354,18 +263,7 @@ function doors:register_door(name, def)
|
|||
after_dig_node(pos, name.."_t_2")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local wield_item = clicker:get_wielded_item():get_name()
|
||||
if wield_item == "real_locks:lock" then
|
||||
swapDoor(pos, 1, name.."_t_2",
|
||||
name.."_b_2_locked", name.."_t_2_locked",
|
||||
wield_item:get_metadata()
|
||||
)
|
||||
wield_item:take_item()
|
||||
else
|
||||
openDoor(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1")
|
||||
end
|
||||
end,
|
||||
on_rightclick = def.rightclick,
|
||||
})
|
||||
--}}}
|
||||
|
||||
|
@ -391,22 +289,10 @@ function doors:register_door(name, def)
|
|||
after_dig_node(pos, name.."_b_2")
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local wield_item = clicker:get_wielded_item():get_name()
|
||||
if wield_item == "real_locks:lock" then
|
||||
swapDoor(pos, 1, name.."_b_2",
|
||||
name.."_t_2_locked", name.."_b_2_locked",
|
||||
wield_item:get_metadata()
|
||||
)
|
||||
wield_item:take_item()
|
||||
else
|
||||
openDoor(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1")
|
||||
end
|
||||
end
|
||||
on_rightclick = def.rightclick,
|
||||
})
|
||||
--}}}
|
||||
|
||||
end
|
||||
--}}}
|
||||
end
|
||||
--}}}
|
||||
|
@ -430,99 +316,6 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
-- Strong wooden door
|
||||
doors:register_door("doors:door_wood_iron_frame", {
|
||||
description = "Strong wooden Door with iron frame",
|
||||
inventory_image = "door_wood_if.png",
|
||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2,door=1},
|
||||
tiles_bottom = {"door_wood_if_b.png", "door_wood_if_c.png","door_wood_if_d.png"},
|
||||
tiles_top = {"door_wood_if_a.png", "door_wood_if_c.png","door_wood_if_d.png"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "doors:door_wood_iron_frame",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "default:steel_ingot"},
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
-- Weak wooden door
|
||||
doors:register_door("doors:door_wood_weak", {
|
||||
description = "Weak wooden door",
|
||||
inventory_image = "door_wood_weak.png",
|
||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2,door=1},
|
||||
tiles_bottom = {"door_wood_weak_b.png", "door_wood_weak_c.png","door_wood_weak_d.png"},
|
||||
tiles_top = {"door_wood_weak_a.png", "door_wood_weak_c.png","door_wood_weak_d.png"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "doors:door_wood_weak",
|
||||
recipe = {
|
||||
{"group:wood", ""},
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- Ordinary steel door
|
||||
doors:register_door("doors:door_steel", {
|
||||
description = "Steel door",
|
||||
inventory_image = "door_steel.png",
|
||||
groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1},
|
||||
tiles_bottom = {"door_steel_b.png", "door_steel_c.png", "door_steel_d.png"},
|
||||
tiles_top = {"door_steel_a.png", "door_steel_c.png", "door_steel_d.png"},
|
||||
only_placer_can_open = true,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "doors:door_steel",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
-- Jail door
|
||||
doors:register_door("doors:door_steel_jail", {
|
||||
description = "Jail steel door",
|
||||
inventory_image = "door_steel_jail.png",
|
||||
groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1},
|
||||
tiles_bottom = {"door_steel_jail_b.png", "door_steel_jail_c.png", "door_steel_jail_d.png"},
|
||||
tiles_top = {"door_steel_jail_a.png", "door_steel_jail_c.png", "door_steel_jail_d.png"},
|
||||
only_placer_can_open = true,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "doors:door_steel_jail",
|
||||
recipe = {
|
||||
{"default:steel_ingot", ""},
|
||||
{"default:steel_ingot", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot"}
|
||||
}
|
||||
})
|
||||
|
||||
-- Beautiful steel door
|
||||
doors:register_door("doors:door_steel_bl", {
|
||||
description = "Beautiful steel door",
|
||||
inventory_image = "door_steel_bl.png",
|
||||
groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1},
|
||||
tiles_bottom = {"door_steel_bl_b.png", "door_steel_bl_c.png", "door_steel_bl_d.png"},
|
||||
tiles_top = {"door_steel_bl_a.png", "door_steel_bl_c.png", "door_steel_bl_d.png"},
|
||||
only_placer_can_open = true,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "doors:door_steel_bl",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot"},
|
||||
{"default:steel_ingot", ""}
|
||||
}
|
||||
})
|
||||
--}}}
|
||||
|
||||
minetest.register_alias("doors:door_wood_a_c", "doors:door_wood_t_1")
|
||||
|
|
|
@ -1,5 +1,17 @@
|
|||
real_locks = {}
|
||||
local NODEMETA_STR="lock_pass"
|
||||
|
||||
--{{{ Defaul can_open() for locked object
|
||||
real_locks.can_open_locked = function (pos, wield)
|
||||
if wield:get_name() == "real_locks:key" then
|
||||
local lock_pass = minetest.get_meta(pos):get_string("lock_pass")
|
||||
local key_pass = wield_item:get_metadata()
|
||||
|
||||
return lock_pass == key_pass
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
--}}}
|
||||
|
||||
--{{{Set metadata
|
||||
|
||||
|
|
Loading…
Reference in New Issue