mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2025-04-01 10:10:36 +02:00
improve doors mod
double doors (3 panels only) are now synchronous open the left door also opens the right door and vice versa
This commit is contained in:
parent
69e721c08b
commit
52e5c6f4f0
@ -1,5 +1,58 @@
|
|||||||
doors3 = {}
|
doors3 = {}
|
||||||
|
|
||||||
|
|
||||||
|
function doors3.get_pos(pos, dir, p1, b)
|
||||||
|
local pos2 = {x=pos.x, y=pos.y, z=pos.z}
|
||||||
|
if b == 0 then
|
||||||
|
if p1 == 1 then
|
||||||
|
if dir == 1 then
|
||||||
|
pos2.z=pos2.z-1
|
||||||
|
elseif dir == 2 then
|
||||||
|
pos2.x=pos2.x-1
|
||||||
|
elseif dir == 3 then
|
||||||
|
pos2.z=pos2.z+1
|
||||||
|
else
|
||||||
|
pos2.x=pos2.x+1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if dir == 1 then
|
||||||
|
pos2.x=pos2.x+1
|
||||||
|
elseif dir == 2 then
|
||||||
|
pos2.z=pos2.z-1
|
||||||
|
elseif dir == 3 then
|
||||||
|
pos2.x=pos2.x-1
|
||||||
|
else
|
||||||
|
pos2.z=pos2.z+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if p1 == 1 then
|
||||||
|
if dir == 1 then
|
||||||
|
pos2.x=pos2.x+1--ok
|
||||||
|
elseif dir == 2 then
|
||||||
|
pos2.z=pos2.z-1
|
||||||
|
elseif dir == 3 then
|
||||||
|
pos2.x=pos2.x-1
|
||||||
|
else
|
||||||
|
pos2.z=pos2.z+1--ok
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if dir == 1 then
|
||||||
|
pos2.z=pos2.z+1
|
||||||
|
elseif dir == 2 then
|
||||||
|
pos2.x=pos2.x+1--ok
|
||||||
|
elseif dir == 3 then
|
||||||
|
pos2.z=pos2.z-1
|
||||||
|
else
|
||||||
|
pos2.x=pos2.x-1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return pos2
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Registers a door
|
-- Registers a door
|
||||||
function doors3.register_door(name, def)
|
function doors3.register_door(name, def)
|
||||||
def.groups.not_in_creative_inventory = 1
|
def.groups.not_in_creative_inventory = 1
|
||||||
@ -61,8 +114,7 @@ function doors3.register_door(name, def)
|
|||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
if minetest.is_protected(pt, placer:get_player_name()) or
|
if minetest.is_protected(pt, placer:get_player_name()) or minetest.is_protected(pt2, placer:get_player_name()) then
|
||||||
minetest.is_protected(pt2, placer:get_player_name()) then
|
|
||||||
minetest.record_protection_violation(pt, placer:get_player_name())
|
minetest.record_protection_violation(pt, placer:get_player_name())
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
@ -115,11 +167,11 @@ function doors3.register_door(name, def)
|
|||||||
local tm = def.tiles_middle
|
local tm = def.tiles_middle
|
||||||
local tb = def.tiles_bottom
|
local tb = def.tiles_bottom
|
||||||
|
|
||||||
local function after_dig_node(pos, dir, name, num, digger)
|
local function after_dig_node(pos, letter, name, num, digger)
|
||||||
local p
|
local p
|
||||||
if dir == 0 then -- bottom
|
if letter == "b" then -- bottom
|
||||||
p = { {y=1, l="m"}, {y=2, l="t"} }
|
p = { {y=1, l="m"}, {y=2, l="t"} }
|
||||||
elseif dir == 1 then -- middle
|
elseif letter == "m" then -- middle
|
||||||
p = { {y=-1, l="b"}, {y=1, l="t"} }
|
p = { {y=-1, l="b"}, {y=1, l="t"} }
|
||||||
else -- top
|
else -- top
|
||||||
p = { {y=-2, l="b"}, {y=-1, l="m"} }
|
p = { {y=-2, l="b"}, {y=-1, l="m"} }
|
||||||
@ -140,15 +192,15 @@ function doors3.register_door(name, def)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function make_on_blast(base_name, dir, num)
|
local function make_on_blast(base_name, letter, num)
|
||||||
if def.only_placer_can_open then
|
if def.only_placer_can_open then
|
||||||
return function() end
|
return function() end
|
||||||
else
|
else
|
||||||
return function(pos, intensity)
|
return function(pos, intensity)
|
||||||
local p
|
local p
|
||||||
if dir == 0 then -- bottom
|
if letter == "b" then -- bottom
|
||||||
p = { {y=1, l="m"}, {y=2, l="t"} }
|
p = { {y=1, l="m"}, {y=2, l="t"} }
|
||||||
elseif dir == 1 then -- middle
|
elseif letter == "m" then -- middle
|
||||||
p = { {y=-1, l="b"}, {y=1, l="t"} }
|
p = { {y=-1, l="b"}, {y=1, l="t"} }
|
||||||
else -- top
|
else -- top
|
||||||
p = { {y=-2, l="b"}, {y=-1, l="m"} }
|
p = { {y=-2, l="b"}, {y=-1, l="m"} }
|
||||||
@ -161,11 +213,11 @@ function doors3.register_door(name, def)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function on_rightclick(pos, dir, name, oldnum, params)
|
local function on_rightclick(pos, letter, name, oldnum, params, clicker, oldparam2)
|
||||||
local p
|
local p
|
||||||
if dir == 0 then -- bottom
|
if letter == "b" then -- bottom
|
||||||
p = { {y=0, l="b"}, {y=1, l="m"}, {y=2, l="t"} }
|
p = { {y=0, l="b"}, {y=1, l="m"}, {y=2, l="t"} }
|
||||||
elseif dir == 1 then -- middle
|
elseif letter == "m" then -- middle
|
||||||
p = { {y=-1, l="b"}, {y=0, l="m"}, {y=1, l="t"} }
|
p = { {y=-1, l="b"}, {y=0, l="m"}, {y=1, l="t"} }
|
||||||
else -- top
|
else -- top
|
||||||
p = { {y=-2, l="b"}, {y=-1, l="m"}, {y=0, l="t"} }
|
p = { {y=-2, l="b"}, {y=-1, l="m"}, {y=0, l="t"} }
|
||||||
@ -177,6 +229,7 @@ function doors3.register_door(name, def)
|
|||||||
else
|
else
|
||||||
newnum = 1
|
newnum = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
for _,t in pairs(p) do
|
for _,t in pairs(p) do
|
||||||
local pos1 = {x=pos.x, y=pos.y+t["y"], z=pos.z}
|
local pos1 = {x=pos.x, y=pos.y+t["y"], z=pos.z}
|
||||||
if minetest.get_node(pos1).name == name.."_"..t["l"].."_"..oldnum then
|
if minetest.get_node(pos1).name == name.."_"..t["l"].."_"..oldnum then
|
||||||
@ -192,11 +245,22 @@ function doors3.register_door(name, def)
|
|||||||
snd_1 = def.sound_open_door
|
snd_1 = def.sound_open_door
|
||||||
snd_2 = def.sound_close_door
|
snd_2 = def.sound_close_door
|
||||||
end
|
end
|
||||||
if minetest.get_meta(pos):get_int("right") ~= 0 then
|
local b = minetest.get_meta(pos):get_int("right")
|
||||||
|
if b ~= 0 then
|
||||||
minetest.sound_play(snd_1, {pos = pos, gain = 0.3, max_hear_distance = 10})
|
minetest.sound_play(snd_1, {pos = pos, gain = 0.3, max_hear_distance = 10})
|
||||||
else
|
else
|
||||||
minetest.sound_play(snd_2, {pos = pos, gain = 0.3, max_hear_distance = 10})
|
minetest.sound_play(snd_2, {pos = pos, gain = 0.3, max_hear_distance = 10})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local pos2 = doors3.get_pos(pos, oldparam2, params[1], b)
|
||||||
|
local node = minetest.get_node_or_nil(pos2)
|
||||||
|
if node and node.name and node.name == name.."_"..letter.."_"..newnum then
|
||||||
|
if minetest.get_meta(pos2):get_int("right") ~= b then
|
||||||
|
if minetest.registered_nodes[node.name].on_rightclick then
|
||||||
|
return minetest.registered_nodes[node.name].on_rightclick(pos2, node, clicker)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -209,7 +273,7 @@ function doors3.register_door(name, def)
|
|||||||
return meta:get_string("doors_owner") == pn
|
return meta:get_string("doors_owner") == pn
|
||||||
end
|
end
|
||||||
|
|
||||||
--on_rotate(pos, node, 1, user, name.."_t_1", mode)
|
|
||||||
local function on_rotate(pos, node, dir, user, name, num, mode, new_param2)
|
local function on_rotate(pos, node, dir, user, name, num, mode, new_param2)
|
||||||
if not check_player_priv(pos, user) then
|
if not check_player_priv(pos, user) then
|
||||||
return false
|
return false
|
||||||
@ -266,12 +330,12 @@ function doors3.register_door(name, def)
|
|||||||
groups = def.groups,
|
groups = def.groups,
|
||||||
|
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
after_dig_node(pos, 0, name, 1, digger)
|
after_dig_node(pos, "b", name, 1, digger)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
if check_player_priv(pos, clicker) then
|
if check_player_priv(pos, clicker) then
|
||||||
on_rightclick(pos, 0, name, 1, {1,2,3,0})
|
on_rightclick(pos, "b", name, 1, {1,2,3,0}, clicker, node.param2)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -282,7 +346,7 @@ function doors3.register_door(name, def)
|
|||||||
can_dig = check_player_priv,
|
can_dig = check_player_priv,
|
||||||
sounds = def.sounds,
|
sounds = def.sounds,
|
||||||
sunlight_propagates = def.sunlight,
|
sunlight_propagates = def.sunlight,
|
||||||
on_blast = make_on_blast(name, 0, 1)
|
on_blast = make_on_blast(name, "b", 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -304,12 +368,12 @@ function doors3.register_door(name, def)
|
|||||||
groups = def.groups,
|
groups = def.groups,
|
||||||
|
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
after_dig_node(pos, 1, name, 1, digger)
|
after_dig_node(pos, "m", name, 1, digger)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
if check_player_priv(pos, clicker) then
|
if check_player_priv(pos, clicker) then
|
||||||
on_rightclick(pos, 1, name, 1, {1,2,3,0})
|
on_rightclick(pos, "m", name, 1, {1,2,3,0}, clicker, node.param2)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -320,7 +384,7 @@ function doors3.register_door(name, def)
|
|||||||
can_dig = check_player_priv,
|
can_dig = check_player_priv,
|
||||||
sounds = def.sounds,
|
sounds = def.sounds,
|
||||||
sunlight_propagates = def.sunlight,
|
sunlight_propagates = def.sunlight,
|
||||||
on_blast = make_on_blast(name, 1, 1)
|
on_blast = make_on_blast(name, "m", 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -343,12 +407,12 @@ function doors3.register_door(name, def)
|
|||||||
groups = def.groups,
|
groups = def.groups,
|
||||||
|
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
after_dig_node(pos, 2, name, 1, digger)
|
after_dig_node(pos, "t", name, 1, digger)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
if check_player_priv(pos, clicker) then
|
if check_player_priv(pos, clicker) then
|
||||||
on_rightclick(pos, 2, name, 1, {1,2,3,0})
|
on_rightclick(pos, "t", name, 1, {1,2,3,0}, clicker, node.param2)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -359,14 +423,11 @@ function doors3.register_door(name, def)
|
|||||||
can_dig = check_player_priv,
|
can_dig = check_player_priv,
|
||||||
sounds = def.sounds,
|
sounds = def.sounds,
|
||||||
sunlight_propagates = def.sunlight,
|
sunlight_propagates = def.sunlight,
|
||||||
on_blast = make_on_blast(name, 2, 1)
|
on_blast = make_on_blast(name, "t", 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node(name.."_b_2", {
|
minetest.register_node(name.."_b_2", {
|
||||||
tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]},
|
tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
@ -385,12 +446,12 @@ function doors3.register_door(name, def)
|
|||||||
groups = def.groups,
|
groups = def.groups,
|
||||||
|
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
after_dig_node(pos, 0, name, 2, digger)
|
after_dig_node(pos, "b", name, 2, digger)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
if check_player_priv(pos, clicker) then
|
if check_player_priv(pos, clicker) then
|
||||||
on_rightclick(pos, 0, name, 2, {3,0,1,2})
|
on_rightclick(pos, "b", name, 2, {3,0,1,2}, clicker, node.param2)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -401,7 +462,7 @@ function doors3.register_door(name, def)
|
|||||||
can_dig = check_player_priv,
|
can_dig = check_player_priv,
|
||||||
sounds = def.sounds,
|
sounds = def.sounds,
|
||||||
sunlight_propagates = def.sunlight,
|
sunlight_propagates = def.sunlight,
|
||||||
on_blast = make_on_blast(name, 0, 2)
|
on_blast = make_on_blast(name, "b", 2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -423,12 +484,12 @@ function doors3.register_door(name, def)
|
|||||||
groups = def.groups,
|
groups = def.groups,
|
||||||
|
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
after_dig_node(pos, 1, name, 2, digger)
|
after_dig_node(pos, "m", name, 2, digger)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
if check_player_priv(pos, clicker) then
|
if check_player_priv(pos, clicker) then
|
||||||
on_rightclick(pos, 1, name, 2, {3,0,1,2})
|
on_rightclick(pos, "m", name, 2, {3,0,1,2}, clicker, node.param2)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -439,7 +500,7 @@ function doors3.register_door(name, def)
|
|||||||
can_dig = check_player_priv,
|
can_dig = check_player_priv,
|
||||||
sounds = def.sounds,
|
sounds = def.sounds,
|
||||||
sunlight_propagates = def.sunlight,
|
sunlight_propagates = def.sunlight,
|
||||||
on_blast = make_on_blast(name, 1, 2)
|
on_blast = make_on_blast(name, "m", 2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -462,12 +523,12 @@ function doors3.register_door(name, def)
|
|||||||
groups = def.groups,
|
groups = def.groups,
|
||||||
|
|
||||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
after_dig_node(pos, 2, name, 2, digger)
|
after_dig_node(pos, "t", name, 2, digger)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_rightclick = function(pos, node, clicker)
|
on_rightclick = function(pos, node, clicker)
|
||||||
if check_player_priv(pos, clicker) then
|
if check_player_priv(pos, clicker) then
|
||||||
on_rightclick(pos, 2, name, 2, {3,0,1,2})
|
on_rightclick(pos, "t", name, 2, {3,0,1,2}, clicker, node.param2)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
@ -478,7 +539,7 @@ function doors3.register_door(name, def)
|
|||||||
can_dig = check_player_priv,
|
can_dig = check_player_priv,
|
||||||
sounds = def.sounds,
|
sounds = def.sounds,
|
||||||
sunlight_propagates = def.sunlight,
|
sunlight_propagates = def.sunlight,
|
||||||
on_blast = make_on_blast(name, 2, 2)
|
on_blast = make_on_blast(name, "t", 2)
|
||||||
})
|
})
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -566,7 +627,6 @@ minetest.register_craft({
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- From BFD: Cherry planks doors
|
-- From BFD: Cherry planks doors
|
||||||
|
|
||||||
doors3.register_door("doors:door3_cherry", {
|
doors3.register_door("doors:door3_cherry", {
|
||||||
description = "Cherry Door 3",
|
description = "Cherry Door 3",
|
||||||
inventory_image = "doors3_wood_cherry_inv.png",
|
inventory_image = "doors3_wood_cherry_inv.png",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user