This commit is contained in:
commit
2dfc96ee15
22 changed files with 1268 additions and 0 deletions
61
hooks.lua
Normal file
61
hooks.lua
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
|
||||
-- Globalstep timer.
|
||||
local time = 0
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
-- Don't want to run this too often.
|
||||
time = time + dtime
|
||||
if time < 0.5 then
|
||||
return
|
||||
end
|
||||
time = 0
|
||||
-- Only count riders who are still logged in.
|
||||
local newriding = {}
|
||||
for _,p in ipairs(minetest.get_connected_players()) do
|
||||
local pos = p:get_pos()
|
||||
local name = p:get_player_name()
|
||||
newriding[name] = elevator.riding[name]
|
||||
-- If the player is indeed riding, update their position.
|
||||
if newriding[name] then
|
||||
newriding[name].pos = pos
|
||||
end
|
||||
end
|
||||
elevator.riding = newriding
|
||||
for name,r in pairs(elevator.riding) do
|
||||
-- If the box is no longer loaded or existent, create another.
|
||||
local ok = r.box and r.box.get_pos and r.box:get_pos() and r.box:get_luaentity() and r.box:get_luaentity().attached == name
|
||||
if not ok then
|
||||
minetest.log("action", "[elevator] "..minetest.pos_to_string(r.pos).." created due to lost rider.")
|
||||
minetest.after(0, elevator.create_box, r.motor, r.pos, r.target, minetest.get_player_by_name(name))
|
||||
end
|
||||
end
|
||||
-- Ensure boxes are deleted after <PTIMEOUT> seconds if there are no players nearby.
|
||||
for motor,obj in pairs(elevator.boxes) do
|
||||
if type(obj) ~= "table" then
|
||||
return
|
||||
end
|
||||
elevator.lastboxes[motor] = elevator.lastboxes[motor] and math.min(elevator.lastboxes[motor], elevator.PTIMEOUT) or elevator.PTIMEOUT
|
||||
elevator.lastboxes[motor] = math.max(elevator.lastboxes[motor] - 1, 0)
|
||||
local pos = obj:get_pos()
|
||||
if pos then
|
||||
for _,object in ipairs(minetest.get_objects_inside_radius(pos, 5)) do
|
||||
if object.is_player and object:is_player() then
|
||||
elevator.lastboxes[motor] = elevator.PTIMEOUT
|
||||
break
|
||||
end
|
||||
end
|
||||
if elevator.lastboxes[motor] < 1 then
|
||||
minetest.log("action", "[elevator] "..minetest.pos_to_string(pos).." broke due to lack of players.")
|
||||
elevator.boxes[motor] = false
|
||||
end
|
||||
else
|
||||
minetest.log("action", "[elevator] "..minetest.pos_to_string(pos).." broke due to lack of position during player check.")
|
||||
elevator.boxes[motor] = false
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
-- We don't want players potentially logging into open elevators.
|
||||
elevator.teleport_player_from_elevator(player)
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue