-- sv_spawn_points.lua
-- Положи в lua/autorun/server/sv_spawn_points.lua
-- ============ Точки спавна ============
local SPAWN_POINTS = {
{ pos = Vector( 2282.63, 156.92, 128.03), yaw = -0.15 }, -- 1
{ pos = Vector( 5046.18, 1307.05, 128.03), yaw = 179.97 }, -- 2
{ pos = Vector( 2350.12, 2142.61, 136.03), yaw = -89.88 }, -- 3
{ pos = Vector( 518.04, 1824.21, 136.03), yaw = -0.25 }, -- 4
{ pos = Vector( -749.05, 934.31, 128.03), yaw = -90.99 }, -- 5
{ pos = Vector(-2013.13, -1176.20, 128.03), yaw = -0.32 }, -- 6
{ pos = Vector( 127.96, -2793.39, 136.03), yaw = -0.58 }, -- 7
{ pos = Vector( 2070.42, -2908.08, 128.03), yaw = 90.24 }, -- 8
{ pos = Vector( 2533.03, -570.64, 144.03), yaw = -179.15 }, -- 9
{ pos = Vector( 5075.06, -1735.61, 136.03), yaw = -177.56 }, -- 10
{ pos = Vector( 5335.56, -4027.44, 136.03), yaw = 179.99 }, -- 11
{ pos = Vector( 8867.41, -2711.86, 128.03), yaw = 90.76 }, -- 12
}
-- ============ Рандомный спавн ============
local function TeleportToRandomSpawn(ply)
if not IsValid(ply) then return end
if #SPAWN_POINTS == 0 then return end
local point = SPAWN_POINTS[math.random(#SPAWN_POINTS)]
local pos = point.pos
-- Небольшое случайное смещение, чтобы игроки не спавнились в одной точке
local offset = Vector(math.random(-15, 15), math.random(-15, 15), 0)
ply:SetPos(pos + offset)
ply:SetEyeAngles(Angle(0, point.yaw, 0))
ply:SetLocalVelocity(Vector(0, 0, 0)) -- сбрасываем инерцию
end
-- Основной хук — перехватываем обычный спавн
hook.Add("PlayerSpawn", "RandomSpawnPoints", function(ply)
-- timer.Simple(0) — ждём один тик, чтобы движок/GMod не перезаписал позицию
timer.Simple(0, function()
TeleportToRandomSpawn(ply)
end)
end)
-- На случай, если геймод/DarkRP спавнит игрока по-своему и перезаписывает позицию
hook.Add("PlayerInitialSpawn", "RandomSpawnPoints_First", function(ply)
timer.Simple(0.5, function()
TeleportToRandomSpawn(ply)
end)
end)