Description
(ENG) I recommend enabling the following functions: ESP on the door (green dot), monster notifications, FullBright, NoFog, Loopspeed:50-65, Loopfov 90-120. This script is made entirely by AI, since I am a Russian schoolboy who does not know how to write scripts, I made the script for myself because I could not find scripts on Rooms: Revisited, in the ESP script on the door, notifications on monsters (Sometimes the script shows that the A200 has started sleeping, but this is not the case, listen to the sound of the A200 appearing when the notification arrives), FullBright, NoFog, Noclip, Fly from 1 to 5 (It works Crookedly), Loopspeed from 1 to 100 speeds, Loopfov from 30 to 120, Instant proximity prompt. The script opens/closes on Right Shift; on mobile devices, it opens in the bottom left corner, and the menu closes in the top right corner. (RUS) Рекомендую включать функции: ESP на двери(Зелёная точка), уведомление на монстров, FullBright, NoFog, Loopspeed:50-65, Loopfov 90-120 Данный скрипт сделан полностью ИИ так как я Русский школьник неумеющий писать скрипты, делал скрипт для себя так как скриптов на Rooms: Revisited я не смог найти, в скрипте ESP на двери, уведомления на монстров (Иногда скрипт показывает что А200 заспавнился но это не так, послушайте звук появления А200 когда приходит уведомление), FullBright, NoFog, Noclip, Fly от 1 до 5 (Криво работает), Loopspeed от 1 до 100 скорости, Loopfov от 30 до 120, Мгновенное взаимодействие (Instant proximity prompt). Скрипт открывается\закрывается на Right shift, на мобильных устройствах в нижнем левом углу открывается и сверху справа меню закрыть меню. Have a great game, everyone! ))) Всем приятной игры!)))
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
-- Rooms: Revisited Parody — Cheat Menu (v15)
-- LocalScript → StarterPlayer > StarterPlayerScripts
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local Lighting = game:GetService("Lighting")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- ============================================================
-- НАСТРОЙКИ
-- ============================================================
local CONFIG = {
openKey = Enum.KeyCode.RightShift,
entities = {
["A-60"] = { color = Color3.fromRGB(220, 40, 40), label = "A-60 — Multi Monster" },
["A-60b"] = { color = Color3.fromRGB(255, 80, 20), label = "A-60b — Multi Bounder" },
["A-70"] = { color = Color3.fromRGB(120, 60, 180), label = "A-70 — Locker Mimic" },
["A-90"] = { color = Color3.fromRGB(200, 200, 60), label = "A-90 — Paralysis" },
["A-90b"] = { color = Color3.fromRGB(255, 120, 0), label = "A-90b — Sensation" },
["A-200"] = { color = Color3.fromRGB(240, 240, 255), label = "A-200 — Happy Scribble" },
},
blacklist = {
["A200Fakeout"] = true,
["fakesounda60"] = true,
["fakesounda200"] = true,
["FakeToolViewFlashlight"] = true,
},
spawnFolder = nil,
duration = 4.5,
playSound = true,
soundId = "rbxassetid://4550994248",
volume = 0.6,
doorTargetName = "DoorSign",
doorDotColor = Color3.fromRGB(0, 255, 0),
doorDotSize = 15,
flySpeedMin = 1, flySpeedMax = 5,
loopSpeedMin = 1, loopSpeedMax = 100,
fovMin = 30, fovMax = 120,
}
local SETTINGS = {
doorESP = true, notifications = true,
fly = false, noclip = false,
loopSpeed = false, instantPrompts = false, loopFOV = false,
fullbright = false, nofog = false,
}
local VALUES = { flySpeed = 3, loopSpeed = 16, fov = 70 }
-- Forward declarations
local flyUpBtn, flyDownBtn
local noclipActive = false
local flyActive = false
local flyBV
local function getHumanoid()
local char = player.Character
return char and char:FindFirstChildOfClass("Humanoid")
end
-- ============================================================
-- 1. DOT ESP (зелёная точка на дверях)
-- ============================================================
local dotESP = {}
local function getObjPos(obj)
if obj:IsA("Model") then
return obj:GetPivot().Position
elseif obj:IsA("BasePart") then
return obj.Position
end
return nil
end
local function addDot(obj, color, size)
if dotESP[obj] then return end
local pos = getObjPos(obj)
if not pos then return end
local gui = Instance.new("BillboardGui")
gui.Name = "DotESP"
gui.Size = UDim2.new(0, size, 0, size)
gui.AlwaysOnTop = true
gui.MaxDistance = 9999
gui.Adornee = obj
gui.Parent = obj
local dot = Instance.new("Frame")
dot.Size = UDim2.new(1, 0, 1, 0)
dot.BackgroundColor3 = color
dot.BorderSizePixel = 0
dot.Parent = gui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(1, 0)
corner.Parent = dot
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(0, 0, 0)
stroke.Thickness = 2
stroke.Parent = dot
dotESP[obj] = gui
obj.AncestryChanged:Connect(function(_, parent)
if parent == nil then
if dotESP[obj] then
dotESP[obj]:Destroy()
dotESP[obj] = nil
end
end
end)
end
local function removeDot(obj)
if dotESP[obj] then
dotESP[obj]:Destroy()
dotESP[obj] = nil
end
end
local function clearDoorDots()
for obj, gui in pairs(dotESP) do
if gui then gui:Destroy() end
dotESP[obj] = nil
end
end
local function scanDoorDots()
for _, obj in ipairs(workspace:GetDescendants()) do
if obj.Name == CONFIG.doorTargetName and (obj:IsA("Model") or obj:IsA("BasePart")) then
addDot(obj, CONFIG.doorDotColor, CONFIG.doorDotSize)
end
end
end
-- ============================================================
-- 2. УВЕДОМЛЕНИЯ (V1 стиль, правый нижний угол)
-- ============================================================
local function showNotification(entityName)
local cfg = CONFIG.entities[entityName]
if not cfg then return end
local screen = playerGui:FindFirstChild("RoomsNotifier")
if not screen then
screen = Instance.new("ScreenGui")
screen.Name = "RoomsNotifier"
screen.ResetOnSpawn = false
screen.IgnoreGuiInset = true
screen.Parent = playerGui
end
local panel = Instance.new("Frame")
panel.Name = "Panel"
panel.Size = UDim2.new(0, 360, 0, 64)
panel.Position = UDim2.new(1, -380, 1, 20)
panel.BackgroundColor3 = Color3.fromRGB(10, 10, 14)
panel.BackgroundTransparency = 0.05
panel.BorderSizePixel = 0
panel.Parent = screen
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 6)
corner.Parent = panel
local bar = Instance.new("Frame")
bar.Name = "Bar"
bar.Size = UDim2.new(0, 4, 1, 0)
bar.BackgroundColor3 = cfg.color
bar.BorderSizePixel = 0
bar.Parent = panel
local barCorner = Instance.new("UICorner")
barCorner.CornerRadius = UDim.new(0, 2)
barCorner.Parent = bar
local title = Instance.new("TextLabel")
title.Name = "Title"
title.Size = UDim2.new(1, -20, 0, 30)
title.Position = UDim2.new(0, 14, 0, 6)
title.BackgroundTransparency = 1
title.Text = cfg.label
title.TextColor3 = Color3.fromRGB(235, 235, 240)
title.Font = Enum.Font.GothamBold
title.TextSize = 17
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = panel
local sub = Instance.new("TextLabel")
sub.Name = "Sub"
sub.Size = UDim2.new(1, -20, 0, 20)
sub.Position = UDim2.new(0, 14, 0, 36)
sub.BackgroundTransparency = 1
sub.Text = "Entity has spawned — hide!"
sub.TextColor3 = cfg.color
sub.Font = Enum.Font.Gotham
sub.TextSize = 13
sub.TextXAlignment = Enum.TextXAlignment.Left
sub.Parent = panel
if CONFIG.playSound then
local sfx = Instance.new("Sound")
sfx.SoundId = CONFIG.soundId
sfx.Volume = CONFIG.volume
sfx.Parent = panel
sfx:Play()
end
local inTween = TweenService:Create(
panel,
TweenInfo.new(0.35, Enum.EasingStyle.Quint, Enum.EasingDirection.Out),
{ Position = UDim2.new(1, -380, 1, -84) }
)
inTween:Play()
task.delay(CONFIG.duration, function()
local outTween = TweenService:Create(
panel,
TweenInfo.new(0.45, Enum.EasingStyle.Quad, Enum.EasingDirection.In),
{ Position = UDim2.new(1, -380, 1, 20) }
)
outTween:Play()
outTween.Completed:Connect(function()
panel:Destroy()
end)
end)
end
-- ============================================================
-- 3. FULLBRIGHT / NOFOG
-- ============================================================
local lightOrig = {
Brightness = Lighting.Brightness,
ClockTime = Lighting.ClockTime,
Ambient = Lighting.Ambient,
OutdoorAmbient = Lighting.OutdoorAmbient,
GlobalShadows = Lighting.GlobalShadows,
FogEnd = Lighting.FogEnd,
FogStart = Lighting.FogStart,
}
local function setFullbright(on)
if on then
Lighting.Brightness = 3
Lighting.ClockTime = 14
Lighting.Ambient = Color3.fromRGB(180, 180, 180)
Lighting.OutdoorAmbient = Color3.fromRGB(180, 180, 180)
Lighting.GlobalShadows = false
else
Lighting.Brightness = lightOrig.Brightness
Lighting.ClockTime = lightOrig.ClockTime
Lighting.Ambient = lightOrig.Ambient
Lighting.OutdoorAmbient = lightOrig.OutdoorAmbient
Lighting.GlobalShadows = lightOrig.GlobalShadows
end
end
local function setNoFog(on)
if on then
Lighting.FogEnd = 100000
Lighting.FogStart = 100000
else
Lighting.FogEnd = lightOrig.FogEnd
Lighting.FogStart = lightOrig.FogStart
end
end
-- ============================================================
-- 4. FLY
-- ============================================================
local function startFly()
local char = player.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
flyBV = Instance.new("BodyVelocity")
flyBV.Name = "FlyVelocity"
flyBV.MaxForce = Vector3.new(1e5, 1e5, 1e5)
flyBV.Velocity = Vector3.zero
flyBV.Parent = hrp
flyActive = true
end
local function stopFly()
flyActive = false
if flyBV then flyBV:Destroy() flyBV = nil end
end
local mobileUpHeld, mobileDownHeld = false, false
RunService.RenderStepped:Connect(function()
if not flyActive then return end
local char = player.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
local hum = char and char:FindFirstChildOfClass("Humanoid")
if not (hrp and hum) then return end
if not flyBV or flyBV.Parent ~= hrp then startFly() end
local move = hum.MoveDirection
if UserInputService:IsKeyDown(Enum.KeyCode.Space) or mobileUpHeld then
move += Vector3.new(0, 1, 0)
end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) or mobileDownHeld then
move -= Vector3.new(0, 1, 0)
end
flyBV.Velocity = move * (VALUES.flySpeed * 30)
end)
-- ============================================================
-- 5. NOCLIP
-- ============================================================
local function applyNoclip()
local char = player.Character
if not char then return end
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = false
end
end
end
local function applyClip()
local char = player.Character
if not char then return end
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = true
end
end
end
RunService.Stepped:Connect(function()
if noclipActive then applyNoclip() end
end)
player.CharacterAdded:Connect(function()
if flyActive then task.wait(0.3) startFly() end
if noclipActive then task.wait(0.3) applyNoclip() end
end)
-- ============================================================
-- 6. LOOP SPEED / LOOP FOV
-- ============================================================
local origFOV = workspace.CurrentCamera and workspace.CurrentCamera.FieldOfView or 70
RunService.Heartbeat:Connect(function()
if SETTINGS.loopSpeed then
local hum = getHumanoid()
if hum then hum.WalkSpeed = VALUES.loopSpeed end
end
if SETTINGS.loopFOV then
local cam = workspace.CurrentCamera
if cam then cam.FieldOfView = VALUES.fov end
end
end)
-- ============================================================
-- 7. INSTANT PROXIMITY PROMPTS
-- ============================================================
local function applyInstantPrompts()
for _, p in ipairs(workspace:GetDescendants()) do
if p:IsA("ProximityPrompt") then
if p:GetAttribute("origHold") == nil then
p:SetAttribute("origHold", p.HoldDuration)
p:SetAttribute("origDist", p.MaxActivationDistance)
end
p.HoldDuration = 0
p.MaxActivationDistance = math.max(p.MaxActivationDistance, 20)
end
end
end
local function restorePrompts()
for _, p in ipairs(workspace:GetDescendants()) do
if p:IsA("ProximityPrompt") and p:GetAttribute("origHold") ~= nil then
p.HoldDuration = p:GetAttribute("origHold")
p.MaxActivationDistance = p:GetAttribute("origDist")
end
end
end
-- ============================================================
-- 8. ДЕТЕКТ СУЩНОСТЕЙ + УВЕДОМЛЕНИЯ
-- ============================================================
local seen = {}
local watchRoot = CONFIG.spawnFolder or workspace
local function isFake(obj)
if CONFIG.blacklist[obj.Name] then return true end
if obj.Name:lower():find("fake") then return true end
return false
end
local function checkInstance(obj)
if SETTINGS.doorESP and obj.Name == CONFIG.doorTargetName
and (obj:IsA("Model") or obj:IsA("BasePart")) then
addDot(obj, CONFIG.doorDotColor, CONFIG.doorDotSize)
end
if SETTINGS.instantPrompts and obj:IsA("ProximityPrompt") then
if obj:GetAttribute("origHold") == nil then
obj:SetAttribute("origHold", obj.HoldDuration)
obj:SetAttribute("origDist", obj.MaxActivationDistance)
end
obj.HoldDuration = 0
obj.MaxActivationDistance = math.max(obj.MaxActivationDistance, 20)
end
local name = obj.Name
if isFake(obj) then return end
if CONFIG.entities[name] or (name:match("^A%-%d+") and obj:IsA("Model")) then
if seen[obj] then return end
seen[obj] = true
if not CONFIG.entities[name] then
CONFIG.entities[name] = {
color = Color3.fromRGB(180, 30, 30),
label = name .. " — Unknown Entity",
}
end
if SETTINGS.notifications then
showNotification(name)
end
obj.AncestryChanged:Connect(function(_, parent)
if parent == nil then
seen[obj] = nil
end
end)
end
end
for _, obj in ipairs(workspace:GetDescendants()) do
checkInstance(obj)
end
watchRoot.DescendantAdded:Connect(checkInstance)
-- ============================================================
-- 9. МЕНЮ
-- ============================================================
local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled
local menuGui = Instance.new("ScreenGui")
menuGui.Name = "RoomsCheatMenu"
menuGui.ResetOnSpawn = false
menuGui.IgnoreGuiInset = true
menuGui.Parent = playerGui
local menu = Instance.new("Frame")
menu.Size = UDim2.new(0, 300, 0, 460)
menu.Position = UDim2.new(0.5, -150, 0.5, -230)
menu.BackgroundColor3 = Color3.fromRGB(14, 14, 18)
menu.BackgroundTransparency = 0.05
menu.BorderSizePixel = 0
menu.Visible = false
menu.Parent = menuGui
local menuCorner = Instance.new("UICorner")
menuCorner.CornerRadius = UDim.new(0, 10)
menuCorner.Parent = menu
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(60, 60, 70)
stroke.Thickness = 1
stroke.Parent = menu
local header = Instance.new("Frame")
header.Size = UDim2.new(1, 0, 0, 40)
header.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
header.BorderSizePixel = 0
header.Parent = menu
local headerCorner = Instance.new("UICorner")
headerCorner.CornerRadius = UDim.new(0, 10)
headerCorner.Parent = header
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -50, 1, 0)
title.Position = UDim2.new(0, 14, 0, 0)
title.BackgroundTransparency = 1
title.Text = "Rooms — Cheat Menu"
title.TextColor3 = Color3.fromRGB(235, 235, 240)
title.Font = Enum.Font.GothamBold
title.TextSize = 15
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = header
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 28, 0, 28)
closeBtn.Position = UDim2.new(1, -34, 0, 6)
closeBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 48)
closeBtn.Text = "✕"
closeBtn.TextColor3 = Color3.fromRGB(220, 220, 230)
closeBtn.Font = Enum.Font.GothamBold
closeBtn.TextSize = 14
closeBtn.Parent = header
local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 6)
closeCorner.Parent = closeBtn
local list = Instance.new("ScrollingFrame")
list.Size = UDim2.new(1, -20, 1, -70)
list.Position = UDim2.new(0, 10, 0, 48)
list.BackgroundTransparency = 1
list.BorderSizePixel = 0
list.ScrollBarThickness = 4
list.CanvasSize = UDim2.new(0, 0, 0, 0)
list.AutomaticCanvasSize = Enum.AutomaticSize.Y
list.Parent = menu
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 7)
listLayout.SortOrder = Enum.SortOrder.LayoutOrder
listLayout.Parent = list
local function styleToggle(btn, on)
btn.BackgroundColor3 = on and Color3.fromRGB(28, 58, 44) or Color3.fromRGB(30, 30, 36)
btn.TextColor3 = on and Color3.fromRGB(0, 255, 130) or Color3.fromRGB(150, 150, 160)
btn.Text = (on and " ● " or " ○ ") .. btn:GetAttribute("label")
end
local function makeToggle(label, key, order, onChange)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, 0, 0, 40)
btn.BackgroundColor3 = Color3.fromRGB(30, 30, 36)
btn.BorderSizePixel = 0
btn.TextXAlignment = Enum.TextXAlignment.Left
btn.Font = Enum.Font.GothamSemibold
btn.TextSize = 14
btn.LayoutOrder = order
btn:SetAttribute("label", label)
btn.Parent = list
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, 8)
c.Parent = btn
styleToggle(btn, SETTINGS[key])
btn.MouseButton1Click:Connect(function()
SETTINGS[key] = not SETTINGS[key]
styleToggle(btn, SETTINGS[key])
if onChange then onChange(SETTINGS[key]) end
end)
return btn
end
local function makeSlider(label, minV, maxV, initial, order, onChange)
local holder = Instance.new("Frame")
holder.Size = UDim2.new(1, 0, 0, 52)
holder.BackgroundColor3 = Color3.fromRGB(30, 30, 36)
holder.BorderSizePixel = 0
holder.LayoutOrder = order
holder.Parent = list
local hc = Instance.new("UICorner")
hc.CornerRadius = UDim.new(0, 8)
hc.Parent = holder
local nameLabel = Instance.new("TextLabel")
nameLabel.Size = UDim2.new(1, -60, 0, 20)
nameLabel.Position = UDim2.new(0, 10, 0, 4)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = label
nameLabel.TextColor3 = Color3.fromRGB(210, 210, 225)
nameLabel.Font = Enum.Font.GothamSemibold
nameLabel.TextSize = 13
nameLabel.TextXAlignment = Enum.TextXAlignment.Left
nameLabel.Parent = holder
local valLabel = Instance.new("TextLabel")
valLabel.Size = UDim2.new(0, 50, 0, 20)
valLabel.Position = UDim2.new(1, -60, 0, 4)
valLabel.BackgroundTransparency = 1
valLabel.Text = tostring(initial)
valLabel.TextColor3 = Color3.fromRGB(0, 255, 130)
valLabel.Font = Enum.Font.GothamBold
valLabel.TextSize = 13
valLabel.TextXAlignment = Enum.TextXAlignment.Right
valLabel.Parent = holder
local track = Instance.new("Frame")
track.Size = UDim2.new(1, -20, 0, 8)
track.Position = UDim2.new(0, 10, 0, 32)
track.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
track.BorderSizePixel = 0
track.Parent = holder
local tc = Instance.new("UICorner")
tc.CornerRadius = UDim.new(1, 0)
tc.Parent = track
local startRel = (initial - minV) / (maxV - minV)
local fill = Instance.new("Frame")
fill.Size = UDim2.new(startRel, 0, 1, 0)
fill.BackgroundColor3 = Color3.fromRGB(0, 255, 130)
fill.BorderSizePixel = 0
fill.Parent = track
local fc = Instance.new("UICorner")
fc.CornerRadius = UDim.new(1, 0)
fc.Parent = fill
local knob = Instance.new("Frame")
knob.Size = UDim2.new(0, 16, 0, 16)
knob.Position = UDim2.new(startRel, 0, 0.5, -8)
knob.BackgroundColor3 = Color3.fromRGB(240, 240, 245)
knob.BorderSizePixel = 0
knob.Parent = track
local kc = Instance.new("UICorner")
kc.CornerRadius = UDim.new(1, 0)
kc.Parent = knob
local dragging = false
local function setFromX(x)
local rel = math.clamp((x - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1)
local val = math.floor(minV + rel * (maxV - minV) + 0.5)
rel = (val - minV) / (maxV - minV)
fill.Size = UDim2.new(rel, 0, 1, 0)
knob.Position = UDim2.new(rel, 0, 0.5, -8)
valLabel.Text = tostring(val)
onChange(val)
end
track.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
setFromX(input.Position.X)
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch) then
setFromX(input.Position.X)
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
end
makeToggle("Door ESP (зелёная точка)", "doorESP", 1, function(on)
if on then scanDoorDots() else clearDoorDots() end
end)
makeToggle("Уведомления о сущностях", "notifications", 2)
makeToggle("Fullbright", "fullbright", 3, setFullbright)
makeToggle("NoFog", "nofog", 4, setNoFog)
makeToggle("Fly", "fly", 5, function(on)
if on then startFly() else stopFly() end
if isMobile and flyUpBtn then
flyUpBtn.Visible = on
flyDownBtn.Visible = on
end
end)
makeToggle("Noclip", "noclip", 6, function(on)
noclipActive = on
if not on then applyClip() end
end)
makeToggle("Loop Speed", "loopSpeed", 7)
makeToggle("Instant Prompts", "instantPrompts", 8, function(on)
if on then applyInstantPrompts() else restorePrompts() end
end)
makeToggle("Loop FOV", "loopFOV", 9, function(on)
if not on then
local cam = workspace.CurrentCamera
if cam then cam.FieldOfView = origFOV end
end
end)
makeSlider("Fly Speed (1–5)", CONFIG.flySpeedMin, CONFIG.flySpeedMax, VALUES.flySpeed, 10,
function(v) VALUES.flySpeed = v end)
makeSlider("Loop Speed (1–100)", CONFIG.loopSpeedMin, CONFIG.loopSpeedMax, VALUES.loopSpeed, 11,
function(v) VALUES.loopSpeed = v end)
makeSlider("FOV (30–120)", CONFIG.fovMin, CONFIG.fovMax, VALUES.fov, 12,
function(v) VALUES.fov = v end)
local mobileOpenBtn
local function setMenuVisible(state)
menu.Visible = state
if mobileOpenBtn then mobileOpenBtn.Visible = not state end
end
closeBtn.MouseButton1Click:Connect(function() setMenuVisible(false) end)
UserInputService.InputBegan:Connect(function(input, processed)
if processed then return end
if input.KeyCode == CONFIG.openKey then
setMenuVisible(not menu.Visible)
end
end)
do
local dragging, dragStart, startPos
header.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = menu.Position
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
menu.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
end
-- ============================================================
-- 10. КНОПКИ ДЛЯ ТЕЛЕФОНА
-- ============================================================
if isMobile then
mobileOpenBtn = Instance.new("TextButton")
mobileOpenBtn.Size = UDim2.new(0, 54, 0, 54)
mobileOpenBtn.Position = UDim2.new(0, 14, 1, -68)
mobileOpenBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
mobileOpenBtn.Text = "☰"
mobileOpenBtn.TextColor3 = Color3.fromRGB(0, 255, 130)
mobileOpenBtn.Font = Enum.Font.GothamBold
mobileOpenBtn.TextSize = 22
mobileOpenBtn.Parent = menuGui
local mc = Instance.new("UICorner")
mc.CornerRadius = UDim.new(1, 0)
mc.Parent = mobileOpenBtn
mobileOpenBtn.MouseButton1Click:Connect(function() setMenuVisible(true) end)
local function makeFlyBtn(pos, text)
local b = Instance.new("TextButton")
b.Size = UDim2.new(0, 54, 0, 54)
b.Position = pos
b.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
b.Text = text
b.TextColor3 = Color3.fromRGB(0, 255, 130)
b.Font = Enum.Font.GothamBold
b.TextSize = 22
b.Visible = false
b.Parent = menuGui
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(1, 0)
c.Parent = b
return b
end
flyUpBtn = makeFlyBtn(UDim2.new(1, -68, 1, -130), "▲")
flyDownBtn = makeFlyBtn(UDim2.new(1, -68, 1, -68), "▼")
flyUpBtn.MouseButton1Down:Connect(function() mobileUpHeld = true end)
flyUpBtn.MouseButton1Up:Connect(function() mobileUpHeld = false end)
flyUpBtn.MouseLeave:Connect(function() mobileUpHeld = false end)
flyDownBtn.MouseButton1Down:Connect(function() mobileDownHeld = true end)
flyDownBtn.MouseButton1Up:Connect(function() mobileDownHeld = false end)
flyDownBtn.MouseLeave:Connect(function() mobileDownHeld = false end)
endReview the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.


Your community, in one place