Arbuinia_Essentials/spawn.lua

46 lines
1.8 KiB
Lua

local function spawn_player(player)
if minetest.setting_get("static_spawnpoint") then return end
for bx = -20, 20 do
for bz = -20, 20 do
local minp = {x = -32 + 3 * bx, y = -32, z = -32 + 3 * bz}
local pos = {x = math.random(minp.x, minp.x + 79), y = minp.y, z = math.random(minp.z, minp.z + 79)}
for u = 300, 0, -1 do
pos.y = u
local node = minetest.get_node({x = pos.x, y = pos.y, z = pos.z})
local under = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z})
minetest.chat_send_player(player:get_player_name(), "Checking position X = " .. dump(pos.x) .. " Y = " .. dump(pos.y) .. " Z = " .. dump(pos.z) .. " Found node: " .. under.name)
player:set_hp(20, nil)
if node.name == "air" and under.name ~= "ignore" and under.name ~= "water_source" and under.name ~= "air" then
player:setpos({x = pos.x, y = pos.y, z = pos.z})
minetest.chat_send_player(player:get_player_name(), "Spawn point found and player has been spawned!")
player:set_hp(20, nil)
return
end
end
end
end
minetest.chat_send_player(player:get_player_name(), "No spawn position could be found. Please try generating a new world...Sorry :/")
end
minetest.register_on_newplayer(function (player)
local spawnpos1 = {x = -100, y = 0, z = -100}
local spawnpos2 = {x = 100, y = 300, z = 100}
minetest.emerge_area(spawnpos1, spawnpos2)
minetest.chat_send_player(player:get_player_name(), "Waiting 10 seconds before trying to find a spawnpoint to let map pre-generate...")
player:set_hp(20, nil)
minetest.after(10, spawn_player,player)
return true
end)
minetest.register_on_respawnplayer(function (player)
local spawnpos1 = {x = -100, y = 0, z = -100}
local spawnpos2 = {x = 100, y = 300, z = 100}
minetest.emerge_area(spawnpos1, spawnpos2)
spawn_player(player)
return true
end)