Загрузка данных


-- 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)