Write default functions.

master
Sullome 2014-03-31 16:20:35 +04:00
parent e1da38d952
commit 2b0654364c
2 changed files with 109 additions and 304 deletions

View File

@ -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")

View File

@ -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