ROOMS REVISITED SCRIPT
Key Required

ROOMS REVISITED SCRIPT

ROOMS: REVISITED 📦Y280Y280 835 views 1.7K executesUpdated Oct 5, 2026
Unrated
00
Lua Script•770 lines (23803 chars)
-- [[ Rscripts Risk Notice ]]
-- This script is not verified by rscripts.net. 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 Rscripts 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)
end

Features & Information

(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! ))) Всем приятной игры!)))
#Rooms#Revisited#Rooms Revisited#Doors

Community Comments (6)

ZkxrZkxrOct 11, 2026

complete ur script bro

Replying to @Zkxr
Y280Y280Oct 11, 2026

@Zkxr I don't know what else to add, and I'm also not sure that AI can do what I ask.

Replying to @Y280
ChaosDevChaosDevOct 12, 2026

@Y280 which ai ur using?

Replying to @ChaosDev
Y280Y280Oct 12, 2026

@ChaosDev Alice ai

Replying to @Y280
ChaosDevChaosDevOct 12, 2026

@Y280 я обязан помыть свои глаза после того как прочитал это...

Replying to @ChaosDev
Y280Y280Oct 12, 2026

@ChaosDev ну хуй знает, единственная бесплатная иишка с которой я смог договорится