From 9d2998d9dddec1da01097b5f0634dc393d97a3d3 Mon Sep 17 00:00:00 2001 From: Tai Kedzierski Date: Sun, 13 Jan 2019 13:19:18 +0000 Subject: [PATCH] add warning information to notify of problems, fix respawn with no spawn --- init.lua | 17 ++++++++++++++++- src/forceload.lua | 4 +++- src/pregeneration.lua | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/init.lua b/init.lua index dd4ef95..1840865 100644 --- a/init.lua +++ b/init.lua @@ -17,6 +17,7 @@ local radial_step = 16 -- Setting with no namespace for interoperability local static_spawnpoint = minetest.setting_get_pos("static_spawnpoint") or {x=0, y=0, z=0} +local rspawn.admin = minetest.setting_get_pos("name") or "" -- For messagin only -- Setting from beds mod rspawn.bedspawn = minetest.setting_getbool("enable_bed_respawn", true) -- from beds mod @@ -153,8 +154,12 @@ end function rspawn:set_newplayer_spawn(player) -- only use for new players / players who have never had a randomized spawn + if not player then return end + local playername = player:get_player_name() + if playername == "" then return end + if not rspawn.playerspawns[playername] then local newpos = rspawn:get_next_spawn() @@ -170,6 +175,8 @@ function rspawn:set_newplayer_spawn(player) else minetest.chat_send_player(playername, "Could not get custom spawn! Retrying in "..rspawn.gen_frequency.." seconds") + minetest.chat_send_player(rspawn.admin, "Exhausted spawns! Could not spawn "..playername) + minetest.log("warning", "rspawn -- Exhausted spawns! Could not spawn "..playername) minetest.after(rspawn.gen_frequency, function() rspawn:set_newplayer_spawn(player) @@ -210,8 +217,16 @@ minetest.register_on_respawnplayer(function(player) end end + minetest.debug("Respawning "..name) + local pos = rspawn.playerspawns[name] + -- And if no bed, nor bed spwawning not active: - player:setpos(rspawn.playerspawns[name]) + if pos then + player:setpos(pos) + else + minetest.chat_send_player(name, "Failed to find your spawn point!") + minetest.log("warning", "rspawn --Could not find spawn point for "..name) + end return true end) diff --git a/src/forceload.lua b/src/forceload.lua index afff4d3..2708ad2 100644 --- a/src/forceload.lua +++ b/src/forceload.lua @@ -29,7 +29,9 @@ end function rspawn:forceload_free_blocks_in(pos1, pos2) rspawn:debug("Freeing forceloaded blocks ____/", {pos1=minetest.pos_to_string(pos1),pos2=minetest.pos_to_string(pos2)}) - forceload_operate(pos1, pos2, minetest.forceload_free_block, true) + -- free both cases - take no chances + forceload_operate(pos1, pos2, minetest.forceload_free_block) -- free if persistent + forceload_operate(pos1, pos2, minetest.forceload_free_block, true) -- free if transient forceloading_happening = false end diff --git a/src/pregeneration.lua b/src/pregeneration.lua index b6c4488..141738f 100644 --- a/src/pregeneration.lua +++ b/src/pregeneration.lua @@ -36,6 +36,7 @@ local function push_new_spawn() set_pgen(len_pgen()+1, newpos ) else rspawn:debug("Failed to generate new spawn point to push") + minetest.chat_send_player(rspawn.admin, "Failed to generate new spawn") end rspawn:forceload_free_blocks_in(pos1, pos2)