Stop people from falling though lifts when they get out...
This commit is contained in:
parent
0e779204f8
commit
da42d34dde
84
init.lua
84
init.lua
@ -36,7 +36,13 @@ local function fetch_lift(pos, node, clicker, rel, i, open_door, plus)
|
|||||||
if wnode.name ~= "air" and snode.name ~= "air" and
|
if wnode.name ~= "air" and snode.name ~= "air" and
|
||||||
anode.name ~= "air" and dnode.name ~= "air" and
|
anode.name ~= "air" and dnode.name ~= "air" and
|
||||||
wnode.name ~= "bones:bones" and snode.name ~= "bones:bones" and
|
wnode.name ~= "bones:bones" and snode.name ~= "bones:bones" and
|
||||||
anode.name ~= "bones:bones" and dnode.name ~= "bones:bones"then
|
anode.name ~= "bones:bones" and dnode.name ~= "bones:bones" and
|
||||||
|
|
||||||
|
wnode.name ~= "default:torch" and snode.name ~= "default:torch" and
|
||||||
|
anode.name ~= "default:torch" and dnode.name ~= "default:torch" and
|
||||||
|
|
||||||
|
wnode.name ~= "lifter:block" and snode.name ~= "lifter:block" and
|
||||||
|
anode.name ~= "lifter:block" and dnode.name ~= "lifter:block" then
|
||||||
print("lift not found, no air")
|
print("lift not found, no air")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -53,11 +59,13 @@ local function fetch_lift(pos, node, clicker, rel, i, open_door, plus)
|
|||||||
fetch_lift(pos, node, clicker, rel, i+plus, open_door, plus)
|
fetch_lift(pos, node, clicker, rel, i+plus, open_door, plus)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
local foundpos
|
||||||
if wnode.name == "lifter:lift" then
|
if wnode.name == "lifter:lift" then
|
||||||
local name = minetest.get_node({x=pos.x+1, y=pos.y+rel, z=pos.z}).name
|
local name = minetest.get_node({x=pos.x+1, y=pos.y+rel, z=pos.z}).name
|
||||||
if name == "air" or name == "ignore" or name == "bones:bones" then
|
if name == "air" or name == "ignore" or name == "bones:bones" then
|
||||||
minetest.remove_node({x=pos.x+1, y=pos.y+i, z=pos.z})
|
minetest.remove_node({x=pos.x+1, y=pos.y+i, z=pos.z})
|
||||||
minetest.add_node({x=pos.x+1, y=pos.y+rel, z=pos.z}, {name="lifter:lift"})
|
minetest.add_node({x=pos.x+1, y=pos.y+rel, z=pos.z}, {name="lifter:lift"})
|
||||||
|
foundpos = {x=pos.x+1, y=pos.y+i, z=pos.z}
|
||||||
else
|
else
|
||||||
print("lift blocked")
|
print("lift blocked")
|
||||||
end
|
end
|
||||||
@ -67,6 +75,7 @@ local function fetch_lift(pos, node, clicker, rel, i, open_door, plus)
|
|||||||
if name == "air" or name == "ignore" or name == "bones:bones" then
|
if name == "air" or name == "ignore" or name == "bones:bones" then
|
||||||
minetest.remove_node({x=pos.x-1, y=pos.y+i, z=pos.z})
|
minetest.remove_node({x=pos.x-1, y=pos.y+i, z=pos.z})
|
||||||
minetest.add_node({x=pos.x-1, y=pos.y+rel, z=pos.z}, {name="lifter:lift"})
|
minetest.add_node({x=pos.x-1, y=pos.y+rel, z=pos.z}, {name="lifter:lift"})
|
||||||
|
foundpos = {x=pos.x-1, y=pos.y+i, z=pos.z}
|
||||||
else
|
else
|
||||||
print("lift blocked")
|
print("lift blocked")
|
||||||
end
|
end
|
||||||
@ -76,6 +85,7 @@ local function fetch_lift(pos, node, clicker, rel, i, open_door, plus)
|
|||||||
if name == "air" or name == "ignore" or name == "bones:bones" then
|
if name == "air" or name == "ignore" or name == "bones:bones" then
|
||||||
minetest.remove_node({x=pos.x, y=pos.y+i, z=pos.z+1})
|
minetest.remove_node({x=pos.x, y=pos.y+i, z=pos.z+1})
|
||||||
minetest.add_node({x=pos.x, y=pos.y+rel, z=pos.z+1}, {name="lifter:lift"})
|
minetest.add_node({x=pos.x, y=pos.y+rel, z=pos.z+1}, {name="lifter:lift"})
|
||||||
|
foundpos = {x=pos.x, y=pos.y+i, z=pos.z+1}
|
||||||
else
|
else
|
||||||
print("lift blocked")
|
print("lift blocked")
|
||||||
end
|
end
|
||||||
@ -85,10 +95,20 @@ local function fetch_lift(pos, node, clicker, rel, i, open_door, plus)
|
|||||||
if name == "air" or name == "ignore" or name == "bones:bones" then
|
if name == "air" or name == "ignore" or name == "bones:bones" then
|
||||||
minetest.remove_node({x=pos.x, y=pos.y+i, z=pos.z-1})
|
minetest.remove_node({x=pos.x, y=pos.y+i, z=pos.z-1})
|
||||||
minetest.add_node({x=pos.x, y=pos.y+rel, z=pos.z-1}, {name="lifter:lift"})
|
minetest.add_node({x=pos.x, y=pos.y+rel, z=pos.z-1}, {name="lifter:lift"})
|
||||||
|
foundpos = {x=pos.x, y=pos.y+i, z=pos.z-1}
|
||||||
else
|
else
|
||||||
print("lift blocked")
|
print("lift blocked")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if foundpos ~= nil then
|
||||||
|
foundpos.y = foundpos.y-1
|
||||||
|
local name = minetest.get_node(foundpos).name
|
||||||
|
if name == "lifter:block" then
|
||||||
|
minetest.remove_node(foundpos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
open_door(pos,node,clicker)
|
open_door(pos,node,clicker)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -121,15 +141,6 @@ minetest.register_abm({
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
--minetest.override_item("lifter:door_b_2", {
|
|
||||||
--on_rightclick = hijack_click(b2rc)
|
|
||||||
--})
|
|
||||||
|
|
||||||
|
|
||||||
--minetest.override_item("lifter:door_t_2", {
|
|
||||||
--on_rightclick = hijack_click(t2rc)
|
|
||||||
--})
|
|
||||||
|
|
||||||
local b2rc = minetest.registered_nodes["lifter:door_b"].on_rightclick
|
local b2rc = minetest.registered_nodes["lifter:door_b"].on_rightclick
|
||||||
|
|
||||||
minetest.register_node("lifter:lift", {
|
minetest.register_node("lifter:lift", {
|
||||||
@ -155,9 +166,23 @@ minetest.register_node("lifter:lift", {
|
|||||||
if door then
|
if door then
|
||||||
b2rc(door, minetest.get_node(door), player)
|
b2rc(door, minetest.get_node(door), player)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local support = minetest.find_node_near(pos, 2, "lifter:block")
|
||||||
|
if support then
|
||||||
|
minetest.set_node(support, {name="air"})
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_node("lifter:block", {
|
||||||
|
tiles = {"default_wood.png"},
|
||||||
|
description = "Lift Support",
|
||||||
|
drawtype = "normal",
|
||||||
|
paramtype = "light",
|
||||||
|
groups = {crumbly=3},
|
||||||
|
drop = "",
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_entity("lifter:travelling_lift", {
|
minetest.register_entity("lifter:travelling_lift", {
|
||||||
physical = true,
|
physical = true,
|
||||||
collide_with_objects = true,
|
collide_with_objects = true,
|
||||||
@ -168,6 +193,7 @@ minetest.register_entity("lifter:travelling_lift", {
|
|||||||
|
|
||||||
driver = nil,
|
driver = nil,
|
||||||
direction = 0,
|
direction = 0,
|
||||||
|
exiting = false,
|
||||||
|
|
||||||
on_punch = function(self, dtime)
|
on_punch = function(self, dtime)
|
||||||
end,
|
end,
|
||||||
@ -184,6 +210,7 @@ minetest.register_entity("lifter:travelling_lift", {
|
|||||||
local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
|
local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
|
||||||
|
|
||||||
if not self.driver then
|
if not self.driver then
|
||||||
|
print("lost driver!")
|
||||||
minetest.add_node(np, {name="lifter:lift"})
|
minetest.add_node(np, {name="lifter:lift"})
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
nodeupdate(np)
|
nodeupdate(np)
|
||||||
@ -263,7 +290,8 @@ minetest.register_entity("lifter:travelling_lift", {
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if exit then
|
if exit and not self.exiting then
|
||||||
|
|
||||||
local door = minetest.find_node_near(np, 2, "lifter:door_a")
|
local door = minetest.find_node_near(np, 2, "lifter:door_a")
|
||||||
if door then
|
if door then
|
||||||
b1rc(door, minetest.get_node(door), self.driver)
|
b1rc(door, minetest.get_node(door), self.driver)
|
||||||
@ -271,15 +299,26 @@ minetest.register_entity("lifter:travelling_lift", {
|
|||||||
|
|
||||||
-- Create node and remove entity
|
-- Create node and remove entity
|
||||||
minetest.add_node(np, {name="lifter:lift"})
|
minetest.add_node(np, {name="lifter:lift"})
|
||||||
self.object:remove()
|
|
||||||
nodeupdate(np)
|
nodeupdate(np)
|
||||||
|
np.y = np.y-1
|
||||||
if self.driver then
|
if minetest.get_node(np).name == "air" then
|
||||||
self.driver:set_detach()
|
minetest.add_node(np, {name="lifter:block"})
|
||||||
self.driver:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
|
|
||||||
pos.y = pos.y
|
|
||||||
self.driver:setpos(pos)
|
|
||||||
end
|
end
|
||||||
|
self.exiting = true
|
||||||
|
|
||||||
|
minetest.after(0.2, function(self)
|
||||||
|
if self.driver then
|
||||||
|
|
||||||
|
self.exiting = false
|
||||||
|
|
||||||
|
self.driver:set_detach()
|
||||||
|
self.driver:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
|
||||||
|
pos.y = pos.y
|
||||||
|
self.driver:setpos(pos)
|
||||||
|
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end, self)
|
||||||
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -302,12 +341,3 @@ minetest.register_craft({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "lifter:door",
|
|
||||||
recipe = {
|
|
||||||
{"group:stick", "group:stick", "group:stick"},
|
|
||||||
{"group:stick", "doors:door_wood", "group:stick"},
|
|
||||||
{"group:stick", "group:stick", "group:stick"},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user