46 lines
1.8 KiB
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)
|
|
|