summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.lua36
-rw-r--r--spawns.lua47
2 files changed, 76 insertions, 7 deletions
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