Implement spawn checker
Implement a checker to prevent player from spawning in water or inside nodes.
This commit is contained in:
parent
267e001609
commit
f5975c98f2
5
init.lua
5
init.lua
|
@ -16,4 +16,9 @@ minetest.register_item(":", {
|
|||
}
|
||||
})
|
||||
|
||||
local path = minetest.get_modpath("arbuinia_essentials")
|
||||
|
||||
dofile(path.."/spawn.lua")
|
||||
|
||||
|
||||
print("[Arbuinia Essentials] Successfully loaded Arbuinia Essentials!")
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
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)
|
||||
|
Loading…
Reference in New Issue