О скрипте
Скачать скрипт
Код скрипта
Скопируйте loader-код, если используете совместимую среду.
-- OneRoblox FTAP ESP + Camera Aim 1.0.0
-- Copyright (c) 2026 OneRoblox. MIT License.
-- Permission is granted, free of charge, to any person obtaining a copy of
-- this software and associated documentation files (the "Software"), to deal
-- in the Software without restriction, including without limitation the rights
-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-- copies of the Software, and to permit persons to whom the Software is
-- furnished to do so, subject to the following conditions:
-- The above copyright notice and this permission notice shall be included in
-- all copies or substantial portions of the Software.
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-- THE SOFTWARE.
-- Not tested in Roblox. Third-party executors can risk your account.
-- No HTTP, external libraries, key system, file access or server remote calls.
if game.GameId ~= 2668101271 then
warn("OneRoblox FTAP: wrong game")
return
end
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local player = Players.LocalPlayer
if not player then return end
local playerGui = player:WaitForChild("PlayerGui", 10)
if not playerGui then return end
local name = "OneRobloxFTAP"
local previous = playerGui:FindFirstChild(name)
if previous then
local stop = previous:FindFirstChild("Stop")
if stop and stop:IsA("BindableEvent") then stop:Fire() else previous:Destroy() end
end
local gui = Instance.new("ScreenGui")
gui.Name = name
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = playerGui
local stop = Instance.new("BindableEvent")
stop.Name = "Stop"
stop.Parent = gui
local highlights = Instance.new("Folder")
highlights.Name = name .. "Marks"
highlights.Parent = Workspace
local panel = Instance.new("Frame")
panel.Size = UDim2.new(0, 264, 0, 170)
panel.Position = UDim2.new(0, 12, 0, 72)
panel.BackgroundColor3 = Color3.fromRGB(23, 26, 29)
panel.BorderSizePixel = 0
panel.Parent = gui
local function text(class, value, x, y, width, height)
local item = Instance.new(class)
item.Size = UDim2.new(0, width, 0, height)
item.Position = UDim2.new(0, x, 0, y)
item.Text = value
item.TextSize = 12
item.TextWrapped = true
item.TextColor3 = Color3.fromRGB(242, 245, 249)
item.Font = Enum.Font.Gotham
item.BackgroundColor3 = Color3.fromRGB(45, 51, 57)
item.BorderSizePixel = 0
if class == "TextLabel" then item.BackgroundTransparency = 1 end
item.Parent = panel
return item
end
text("TextLabel", "OneRoblox | FTAP", 8, 6, 204, 24)
local close = text("TextButton", "X", 224, 6, 32, 28)
local espButton = text("TextButton", "ESP: OFF", 8, 42, 120, 34)
local aimButton = text("TextButton", "Aim: OFF", 136, 42, 120, 34)
text("TextLabel", "Aim: 120 px from screen centre; 400 studs; visible targets only", 8, 82, 248, 40)
local status = text("TextLabel", "Both functions are off", 8, 126, 248, 36)
local esp, aim, disposed = false, false, false
local marks, connections = {}, {}
local color = Color3.fromRGB(90, 210, 220)
local function clearMark(other)
local mark = marks[other]
if not mark then return end
mark.highlight:Destroy()
mark.label:Destroy()
marks[other] = nil
end
local function clearMarks()
local remove = {}
for other in pairs(marks) do table.insert(remove, other) end
for _, other in ipairs(remove) do clearMark(other) end
end
local function body(other)
local character = other.Character
if not character or not character.Parent then return end
local humanoid = character:FindFirstChildOfClass("Humanoid")
local root = character:FindFirstChild("HumanoidRootPart")
local head = character:FindFirstChild("Head")
if not humanoid or humanoid.Health <= 0 or not root or not root:IsA("BasePart") or not head or not head:IsA("BasePart") then return end
return character, root, head
end
local function makeMark(other, character, head)
local highlight = Instance.new("Highlight")
highlight.Adornee = character
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.FillTransparency = 0.9
highlight.OutlineTransparency = 0
highlight.FillColor = color
highlight.OutlineColor = color
highlight.Parent = highlights
local label = Instance.new("BillboardGui")
label.Size = UDim2.new(0, 180, 0, 32)
label.Adornee = head
label.AlwaysOnTop = true
label.StudsOffset = Vector3.new(0, 2.5, 0)
label.Parent = gui
local caption = Instance.new("TextLabel")
caption.Size = UDim2.new(1, 0, 1, 0)
caption.BackgroundTransparency = 1
caption.TextSize = 12
caption.TextWrapped = true
caption.TextColor3 = color
caption.TextStrokeTransparency = 0.3
caption.Font = Enum.Font.Gotham
caption.Parent = label
local mark = {character = character, highlight = highlight, label = label, caption = caption}
marks[other] = mark
return mark
end
local function updateESP()
local camera = Workspace.CurrentCamera
if not esp or not camera then clearMarks(); return end
local live = {}
for index, other in ipairs(Players:GetPlayers()) do
if index > 64 then break end
if other ~= player then
local character, root, head = body(other)
if character then
live[other] = true
if marks[other] and marks[other].character ~= character then clearMark(other) end
local mark = marks[other] or makeMark(other, character, head)
mark.label.Adornee = head
mark.caption.Text = string.sub(other.DisplayName, 1, 40) .. " | " .. math.floor((camera.CFrame.Position - root.Position).Magnitude) .. " studs"
end
end
end
local remove = {}
for other in pairs(marks) do if not live[other] then table.insert(remove, other) end end
for _, other in ipairs(remove) do clearMark(other) end
end
local ray = RaycastParams.new()
ray.FilterType = Enum.RaycastFilterType.Exclude
local function updateAim(delta)
if disposed or not aim then return end
local camera = Workspace.CurrentCamera
local own = body(player)
if not camera or not own then status.Text = "Aim: waiting for camera / character"; return end
if camera.CameraType == Enum.CameraType.Scriptable then status.Text = "Aim paused: scripted camera"; return end
local centre = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2)
local nearest, target, best = 120, nil, nil
ray.FilterDescendantsInstances = {own}
for index, other in ipairs(Players:GetPlayers()) do
if index > 64 then break end
if other ~= player then
local character, _, head = body(other)
if character then
local direction = head.Position - camera.CFrame.Position
local point, onScreen = camera:WorldToViewportPoint(head.Position)
local distance = (Vector2.new(point.X, point.Y) - centre).Magnitude
if onScreen and point.Z > 0 and direction.Magnitude > 0.01 and direction.Magnitude <= 400 and distance <= nearest then
local hit = Workspace:Raycast(camera.CFrame.Position, direction, ray)
if not hit or hit.Instance:IsDescendantOf(character) then
nearest, target, best = distance, head.Position, other.DisplayName
end
end
end
end
end
if target then
local desired = CFrame.lookAt(camera.CFrame.Position, target)
camera.CFrame = camera.CFrame:Lerp(desired, 1 - math.exp(-10 * math.min(delta, 0.1)))
status.Text = "Camera aim: " .. string.sub(best, 1, 40)
else status.Text = "Aim: no visible target in 120 px" end
end
local function cleanup()
if disposed then return end
disposed = true
RunService:UnbindFromRenderStep(name)
for _, connection in ipairs(connections) do connection:Disconnect() end
clearMarks()
highlights:Destroy()
gui:Destroy()
end
table.insert(connections, espButton.Activated:Connect(function()
esp = not esp
espButton.Text = esp and "ESP: ON" or "ESP: OFF"
if not esp then clearMarks() end
status.Text = esp and "ESP enabled" or "ESP disabled"
end))
table.insert(connections, aimButton.Activated:Connect(function()
aim = not aim
aimButton.Text = aim and "Aim: ON" or "Aim: OFF"
status.Text = aim and "Aim enabled" or "Aim disabled"
end))
table.insert(connections, close.Activated:Connect(cleanup))
table.insert(connections, stop.Event:Connect(cleanup))
table.insert(connections, gui.Destroying:Connect(cleanup))
local elapsed = 0
table.insert(connections, RunService.Heartbeat:Connect(function(delta)
elapsed = elapsed + delta
if elapsed < 0.2 or disposed then return end
elapsed = 0
if not pcall(updateESP) then
esp = false; clearMarks(); espButton.Text = "ESP: OFF"
status.Text = "ESP stopped: unsupported character"
end
end))
RunService:BindToRenderStep(name, Enum.RenderPriority.Camera.Value + 1, function(delta)
if not pcall(updateAim, delta) then
aim = false; aimButton.Text = "Aim: OFF"
status.Text = "Aim stopped: unsupported camera"
end
end)Описание скрипта
FTAP: открытый Lua-код с ESP, расстоянием и аимом камеры. Без ключа и внешних библиотек. Статус запуска в Roblox не подтверждён.
Скрипт на «Сбросить вещи и людей» (Fling Things and People, FTAP) добавляет ESP-метки игроков и отдельный аим камеры. Здесь можно скачать текстовый Lua-файл или скопировать полный исходник OneRoblox. Key System, внешнего загрузчика и платного ключа в коде нет.
Статус: запуск в Roblox не проверен. Исходник проверяется отдельно от его работы в игре. Совместимость с Delta, Xeno и мобильными средами не подтверждена. Сторонние скрипты могут привести к санкциям для аккаунта.
Что делает скрипт FTAP
- ESP: контур персонажа, имя и расстояние от камеры в studs.
- Camera Aim: плавный поворот камеры к видимой голове другого игрока рядом с центром экрана.
- Два независимых переключателя. При запуске обе функции выключены.
- Кнопка X отключает обработчики и удаляет панель вместе с метками.
- Повторный запуск закрывает предыдущую копию именно этого исходника.

Как работает аим
После включения Aim код ищет голову живого персонажа не дальше 400 studs от камеры и в пределах 120 пикселей от центра экрана. Из подходящих целей выбирается ближайшая к центру. Проверяется линия видимости: объект между камерой и персонажем может исключить цель. При отсутствии подходящей цели камера не поворачивается.
Это аим камеры, а не Silent Aim и не автоматический захват. Код не вызывает игровую команду броска, не меняет направление серверного попадания и не гарантирует попадание предметом. Движение цели, физика и задержка остаются отдельными факторами. Во время программной камеры CameraType.Scriptable наведение приостанавливается.
ESP и управление панелью
ESP: OFF включает подсветку и подписи. Повторное нажатие убирает их. Aim: OFF отдельно включает наведение; отключение ESP не выключает Aim. Метки обновляются пять раз в секунду, наведение обрабатывается после обновления камеры. Умершие, вышедшие и отсутствующие персонажи не должны оставаться в списке меток.
Здесь нет фильтра команд: FTAP не рассматривается как командный матч BloxStrike. Выбираются другие живые игроки, кроме вашего персонажа. Подпись сообщает расстояние в единицах Roblox, не в метрах. При отсутствии камеры или собственного живого персонажа наведение ожидает их появления.
Скачать скрипт или скопировать Lua
Кнопка «Скачать .lua» выдаёт исходник ftap-esp-aim-oneroblox.lua, а «Скопировать скрипт» помещает тот же код в буфер обмена. Файл можно прочитать до любого запуска. Это не APK, EXE, клиент Roblox или архив с исполнителем. Условия рекламного перехода возле кнопок отделены от содержимого файла; оплачивать Lua-код или ключ не требуется.
Delta, Xeno и телефон
Наличие кнопок, реагирующих на нажатие, само по себе не подтверждает совместимость со смартфоном. Для Delta и Xeno нужен отдельный тест актуальных версий, которого мы не проводили. Разбор ключей, формата файла и сообщений об ошибках находится в гайде по ошибкам скриптов FTAP.
Чего в файле нет
- Auto Grab, Super Fling, Black Hole, Tornado и управления чужими предметами.
- Выдачи бесплатных gamepass, денег или прав администратора.
- HTTP-запросов, удалённых библиотек, чтения файлов и вызовов RemoteEvent.
- Обхода античита, обещания отсутствия бана или бессмертия.
Если скрипт не работает
Проверьте, что открыта оригинальная Fling Things and People, а не копия с похожим названием. Оба переключателя изначально стоят в OFF. Для аима нужна видимая цель рядом с центром, а собственный персонаж должен быть жив. Если ошибка возникает до появления меню, сохраните её текст и не считайте повторную загрузку доказательством исправления.
Весь исходник доступен ниже. Другие материалы находятся в разделе скриптов Fling Things and People, а ссылка для входа в оригинальный плейс — в карточке игры «Бросать вещи и людей».