123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- randspawn = randspawn or {}
- randspawn.modpath = minetest.get_modpath("randspawn")
- local math_random = math.random
- randspawn.min_days = 10
- randspawn.max_days = 90
- function randspawn.check_spawn_reset()
- local meta = randspawn.modstorage
- local stime = meta:get_string("spawn_reset_timer")
-
-
- if not stime or stime == "" then
- local time = os.time()
- local days = 60*60*24*math_random(randspawn.min_days, randspawn.max_days)
- time = time + days
- stime = tostring(time)
- meta:set_string("spawn_reset_timer", stime)
-
- randspawn.find_new_spawn()
- return
- end
- local now = os.time()
- local later = tonumber(stime)
- if now >= later then
- later = later + 60*60*24*math_random(randspawn.min_days, randspawn.max_days)
- stime = tostring(later)
- meta:set_string("spawn_reset_timer", stime)
-
- randspawn.find_new_spawn()
- end
- end
- minetest.after(0, function() randspawn.check_spawn_reset() end)
- function randspawn.get_spawn_reset_timeout()
- local meta = randspawn.modstorage
- local stime = meta:get_string("spawn_reset_timer")
- local later = tonumber(stime)
- local now = os.time()
- local diff = later - now
- if diff < 0 then diff = 0 end
- return diff
- end
- local function callback(blockpos, action, calls_remaining, param)
-
- if calls_remaining ~= 0 then
- return
- end
-
-
-
- if action == core.EMERGE_CANCELLED or action == core.EMERGE_ERRORED then
- return
- end
- local pos = param.pos
- local get_node = minetest.get_node
-
- for y = -10, 200, 1 do
- pos.y = y
- local nu = get_node(pos)
- pos.y = y + 1
- local na = get_node(pos)
-
- if nu.name == "ignore" or na.name == "ignore" then
- break
- end
- if na.name == "air" and (nu.name == "default:snow" or nu.name == "default:ice") then
- pos.y = pos.y + 1
- serveressentials.update_exit_location(pos)
- return
- end
- end
-
- minetest.after(60, function() randspawn.find_new_spawn() end)
- end
- function randspawn.find_new_spawn()
-
- local pos = {x=math_random(-6000, 6000), y=0, z=math_random(-6000, 6000)}
- local minp = vector.add(pos, {x=-7, y=-7, z=-7})
- local maxp = vector.add(pos, {x=7, y=200, z=7})
- minetest.emerge_area(minp, maxp, callback, {pos=table.copy(pos)})
- end
- local function get_respawn_position(invoke_pos, pname)
-
-
-
- return rc.static_spawn("abyss")
- end
- randspawn.get_respawn_pos = get_respawn_position
- randspawn.reposition_player = function(pname, death_pos)
- local player = minetest.get_player_by_name(pname)
- if player then
-
- local pos = get_respawn_position(death_pos, pname)
- pos = vector.add(pos, {x=math_random(-2, 2), y=0, z=math_random(-2, 2)})
- preload_tp.execute({
- player_name = pname,
- target_position = pos,
- emerge_radius = 32,
- post_teleport_callback = function()
- ambiance.sound_play("respawn", pos, 0.5, 10)
- end,
- force_teleport = true,
- send_blocks = false,
- particle_effects = true,
- })
- end
- end
- function randspawn.get_spawn_name()
- local s = serveressentials.get_current_exit_location()
- local p = minetest.string_to_pos(s)
- if p then
- return rc.pos_to_namestr(p)
- end
- return "Unknown Location"
- end
- if not randspawn.run_once then
-
- local file = randspawn.modpath .. "/init.lua"
- local name = "randspawn:core"
- reload.register_file(name, file, false)
- randspawn.modstorage = minetest.get_mod_storage()
- randspawn.run_once = true
- end
|