From a69d18e72e05eb39e5423896ba060b2463c043c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20P=C3=A9rez-Cerezo?= Date: Sun, 29 May 2016 20:01:08 +0200 Subject: Fixed spawning --- init.lua | 36 +++++++++++++++++++++++++++++------- spawns.lua | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 spawns.lua diff --git a/init.lua b/init.lua index f62c2d4..cb71414 100644 --- a/init.lua +++ b/init.lua @@ -8,6 +8,10 @@ local spawn_spawnpos = minetest.setting_get_pos("static_spawnpoint") local banish_pos = {x=5000, y=2, z=5000} +banish = {} +banish.spawn = {} +local modpath = minetest.get_modpath("banish") + minetest.register_chatcommand("spawn", { params = "", privs = {teleport=true}, @@ -26,14 +30,18 @@ minetest.register_chatcommand("spawn", { end, }) -function revert (player) +local function revert (player) local privs = minetest.get_player_privs(player); privs.teleport = true; minetest.set_player_privs(player, privs) minetest.chat_send_player(player, "You recovered your teleport privilege. Use /spawn to return to the spawn point") - minetest.register_on_respawnplayer(function(player) - player:setpos(spawn_spawnpos) - end) + if banish.spawn[player] then + beds.spawn[player] = banish.spawn[player] + end + beds.save_spawns() +-- minetest.register_on_respawnplayer(function(player) +-- player:setpos(spawn_spawnpos) +-- end) end minetest.register_chatcommand("banish", { @@ -46,14 +54,28 @@ minetest.register_chatcommand("banish", { return false, "Player not found" end player:setpos(banish_pos) + if beds.spawn[param] then + banish.spawn[param] = beds.spawn[param] + else + banish.spawn[param] = spawn_spawnpos + end + banish.save_spawns() + beds.spawn[param] = banish_pos + beds.save_spawns() local privs = minetest.get_player_privs(param) privs.teleport = false; minetest.set_player_privs(param, {interact=true, shout=true}) - minetest.register_on_respawnplayer(function(player) - player:setpos(banish_pos) - end) +-- minetest.register_on_respawnplayer(function(player) +-- player:setpos(banish_pos) +-- end) minetest.chat_send_player(name, "Banished player " .. param) minetest.chat_send_player(param, "You were banished! You can try to walk back. You will be able to return to spawn in 5 minutes using the /spawn command.") minetest.after(300, revert, param) end, }) + +minetest.register_on_joinplayer(function(player) + banish.read_spawns() +end) + +dofile(modpath .. "/spawns.lua") diff --git a/spawns.lua b/spawns.lua new file mode 100644 index 0000000..a05891b --- /dev/null +++ b/spawns.lua @@ -0,0 +1,47 @@ +local world_path = minetest.get_worldpath() +local org_file = world_path .. "/banish_spawns" +local file = world_path .. "/banish_spawns" +local bkwd = false + + +function banish.read_spawns() + local spawns = banish.spawn + local input = io.open(file, "r") + if input then + repeat + local x = input:read("*n") + if x == nil then + break + end + local y = input:read("*n") + local z = input:read("*n") + local name = input:read("*l") + spawns[name:sub(2)] = {x = x, y = y, z = z} + until input:read(0) == nil + io.close(input) + else + spawns = {} + end +end + +function banish.save_spawns() + if not banish.spawn then + return + end + local data = {} + local output = io.open(org_file, "w") + for k, v in pairs(banish.spawn) do + table.insert(data, string.format("%.1f %.1f %.1f %s\n", v.x, v.y, v.z, k)) + end + output:write(table.concat(data)) + io.close(output) +end + +function banish.set_spawns() + for name,_ in pairs(banish.player) do + local player = minetest.get_player_by_name(name) + local p = beds.spawn[name] + banish.spawn[name] = p + end + banish.save_spawns() +end -- cgit v1.2.3