72 lines
1.8 KiB
Lua
72 lines
1.8 KiB
Lua
local players = {}
|
|
|
|
local function vdistance(a, b)
|
|
local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z
|
|
return x*x + y*y + z*z
|
|
end
|
|
|
|
local function set_checkpoint(player, pos)
|
|
local name = player:get_player_name()
|
|
local ppos = player:getpos()
|
|
|
|
--print(tostring(vdistance(pos, ppos)))
|
|
if vdistance(pos, ppos) <= 10 then
|
|
players[name] = ppos
|
|
minetest.sound_play({name="checkpoint_checkpoint", gain=0.75},
|
|
{to_player=name})
|
|
minetest.chat_send_player(name, "Checkpoint saved")
|
|
else
|
|
minetest.chat_send_player(name, "Out of range!")
|
|
end
|
|
end
|
|
|
|
minetest.register_node("checkpoint:checkpoint", {
|
|
description = "Checkpoint",
|
|
tiles = {"checkpoint_teleporter.png"},
|
|
inventory_image = "checkpoint_teleporter.png",
|
|
drawtype = "plantlike",
|
|
sunlight_propagates = true,
|
|
light_source = 8,
|
|
paramtype = "light",
|
|
groups = {cracky = 1, choppy = 1, crumbly = 1, snappy = 1},
|
|
on_rightclick = function(pos, _, clicker)
|
|
set_checkpoint(clicker, pos)
|
|
end,
|
|
on_punch = function(pos, _, puncher)
|
|
set_checkpoint(puncher, pos)
|
|
end
|
|
})
|
|
|
|
minetest.register_craftitem("checkpoint:teleporter", {
|
|
description = "Checkpoint Teleporter",
|
|
inventory_image = "checkpoint_teleporter.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
local name = user:get_player_name()
|
|
local pos = players[name]
|
|
if pos then
|
|
user:setpos(pos)
|
|
else
|
|
minetest.chat_send_player(name, "No checkpoint saved")
|
|
end
|
|
end
|
|
})
|
|
|
|
minetest.register_chatcommand("checkpoint", {
|
|
description = "Restore saved checkpoint",
|
|
func = function(name, param)
|
|
local pos = players[name]
|
|
if pos then
|
|
local player = minetest.get_player_by_name(name)
|
|
player:setpos(pos)
|
|
else
|
|
minetest.chat_send_player(name, "No checkpoint saved")
|
|
--return "No checkpoint saved"
|
|
end
|
|
end
|
|
})
|
|
|
|
minetest.register_on_leaveplayer(function(player)
|
|
local name = player:get_player_name()
|
|
players[name] = nil
|
|
end)
|