Compare commits
6 Commits
4a643afeba
...
38f74c8451
Author | SHA1 | Date |
---|---|---|
taikedz | 38f74c8451 | |
Tai Kedzierski | 677442f7f8 | |
mckaygerhard | 92d4d85ab4 | |
taikedz | f666465cdf | |
Tai Kedzierski | 60795a69e5 | |
mckaygerhard | 4cb2b7a457 |
46
init.lua
46
init.lua
|
@ -21,7 +21,7 @@ rspawn.kick_on_fail = minetest.settings:get_bool("rspawn.kick_on_fail") == true
|
|||
rspawn.max_pregen_spawns = tonumber(minetest.settings:get("rspawn.max_pregen") or 5)
|
||||
rspawn.search_radius = tonumber(minetest.settings:get("rspawn.search_radius") or 32)
|
||||
rspawn.gen_frequency = tonumber(minetest.settings:get("rspawn.gen_frequency") or 30)
|
||||
rspawn.spawn_block = minetest.settings:get("rspawn.spawn_block")
|
||||
rspawn.spawn_block = minetest.settings:get("rspawn.spawn_block") or "default:dirt_with_grass"
|
||||
|
||||
rspawn.min_x = tonumber(minetest.settings:get("rspawn.min_x") or -31000)
|
||||
rspawn.max_x = tonumber(minetest.settings:get("rspawn.max_x") or 31000)
|
||||
|
@ -35,6 +35,11 @@ dofile(mpath.."/lua/forceload.lua")
|
|||
dofile(mpath.."/lua/debugging.lua")
|
||||
|
||||
|
||||
minetest.after(0,function()
|
||||
if not minetest.registered_items[rspawn.spawn_block] then
|
||||
rspawn.spawn_block = "default:dirt_with_grass"
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
rspawn:spawnload()
|
||||
|
@ -52,7 +57,11 @@ end
|
|||
|
||||
function rspawn:get_positions_for(pos, radius)
|
||||
local breadth = radius
|
||||
local altitude = radius*2
|
||||
local altitude = water_level + radius
|
||||
|
||||
if rspawn.spawnanywhere then
|
||||
altitude = radius
|
||||
end
|
||||
|
||||
local pos1 = {x=pos.x-breadth, y=pos.y, z=pos.z-breadth}
|
||||
local pos2 = {x=pos.x+breadth, y=pos.y+altitude, z=pos.z+breadth}
|
||||
|
@ -81,15 +90,22 @@ function rspawn:newspawn(pos, radius)
|
|||
under = minetest.registered_nodes[under]
|
||||
over = minetest.registered_nodes[over]
|
||||
|
||||
if under.walkable
|
||||
and not over.walkable
|
||||
and not minetest.is_protected(anode, "")
|
||||
and not (under.groups and under.groups.leaves ) -- no spawning on treetops!
|
||||
and daylight_above(7, anode) then
|
||||
if under.buildable_to then
|
||||
validnodes[#validnodes+1] = {x=anode.x, y=anode.y-1, z=anode.z}
|
||||
else
|
||||
validnodes[#validnodes+1] = anode
|
||||
if under == nil or over == nil then
|
||||
-- `under` or `over` could be nil if a mod that defined that node was removed.
|
||||
-- Not something this mod can resolve, and so we just ignore it.
|
||||
rspawn:debug("Found an undefined node around "..minetest.pos_to_string(anode))
|
||||
|
||||
else
|
||||
if under.walkable
|
||||
and not over.walkable
|
||||
and not minetest.is_protected(anode, "")
|
||||
and not (under.groups and under.groups.leaves ) -- no spawning on treetops!
|
||||
and daylight_above(7, anode) then
|
||||
if under.buildable_to then
|
||||
validnodes[#validnodes+1] = {x=anode.x, y=anode.y-1, z=anode.z}
|
||||
else
|
||||
validnodes[#validnodes+1] = anode
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -141,7 +157,7 @@ function rspawn:set_player_spawn(name, newpos)
|
|||
return true
|
||||
end
|
||||
|
||||
function rspawn:set_newplayer_spawn(player)
|
||||
function rspawn:set_newplayer_spawn(player, attempts)
|
||||
-- only use for new players / players who have never had a randomized spawn
|
||||
if not player then return end
|
||||
|
||||
|
@ -158,7 +174,7 @@ function rspawn:set_newplayer_spawn(player)
|
|||
else
|
||||
-- We did not get a new position
|
||||
|
||||
if rspawn.kick_on_fail then
|
||||
if rspawn.kick_on_fail or attempts <= 0 then
|
||||
minetest.kick_player(playername, "No personalized spawn points available - please try again later.")
|
||||
|
||||
else
|
||||
|
@ -167,7 +183,7 @@ function rspawn:set_newplayer_spawn(player)
|
|||
minetest.log("warning", "rspawn -- Exhausted spawns! Could not spawn "..playername)
|
||||
|
||||
minetest.after(rspawn.gen_frequency, function()
|
||||
rspawn:set_newplayer_spawn(player)
|
||||
rspawn:set_newplayer_spawn(player, attempts-1)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
@ -192,7 +208,7 @@ function rspawn:renew_player_spawn(playername)
|
|||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
rspawn:set_newplayer_spawn(player)
|
||||
rspawn:set_newplayer_spawn(player, 5)
|
||||
end)
|
||||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
|
|
Loading…
Reference in New Issue