
KeylessUniversal

-- Speed Loop GUI Script (Touchscreen + Persistent + FOV + AutoRespawn)
-- Put this in StarterGui > LocalScript
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local defaultFOV = 70 -- Roblox default FOV
-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "SpeedLoopGui"
screenGui.ResetOnSpawn = false -- GUI stays after respawn
screenGui.Parent = player:WaitForChild("PlayerGui")
-- Main Frame
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 200, 0, 120)
frame.Position = UDim2.new(0.3, 0, 0.3, 0)
frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
frame.BorderSizePixel = 2
frame.Active = true
frame.Parent = screenGui
-- Rounded corners
local uiCorner = Instance.new("UICorner")
uiCorner.CornerRadius = UDim.new(0, 12)
uiCorner.Parent = frame
-- Title
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 30)
title.BackgroundTransparency = 1
title.Text = "Speed Loop GUI"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Font = Enum.Font.SourceSansBold
title.TextSize = 18
title.Parent = frame
-- Start Button
local startBtn = Instance.new("TextButton")
startBtn.Size = UDim2.new(1, -20, 0, 30)
startBtn.Position = UDim2.new(0, 10, 0, 40)
startBtn.Text = "Start"
startBtn.BackgroundColor3 = Color3.fromRGB(50, 170, 50)
startBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
startBtn.Font = Enum.Font.SourceSansBold
startBtn.TextSize = 16
startBtn.Parent = frame
-- Pause Button
local pauseBtn = Instance.new("TextButton")
pauseBtn.Size = UDim2.new(1, -20, 0, 30)
pauseBtn.Position = UDim2.new(0, 10, 0, 75)
pauseBtn.Text = "Pause"
pauseBtn.BackgroundColor3 = Color3.fromRGB(200, 120, 50)
pauseBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
pauseBtn.Font = Enum.Font.SourceSansBold
pauseBtn.TextSize = 16
pauseBtn.Parent = frame
-- Close Button
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 25, 0, 25)
closeBtn.Position = UDim2.new(1, -30, 0, 5)
closeBtn.Text = "X"
closeBtn.BackgroundColor3 = Color3.fromRGB(170, 50, 50)
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.Font = Enum.Font.SourceSansBold
closeBtn.TextSize = 14
closeBtn.Parent = frame
-- Dragging (works for mouse + touch)
local dragging, dragInput, dragStart, startPos
local function update(input)
local delta = input.Position - dragStart
frame.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
frame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
update(input)
end
end)
-- Speed loop logic
local running = false
local paused = false
local function getHumanoid()
local character = player.Character or player.CharacterAdded:Wait()
return character:FindFirstChildOfClass("Humanoid")
end
local function speedLoop()
running = true
while running do
if not paused then
local humanoid = getHumanoid()
if humanoid then
humanoid.WalkSpeed = 64
end
end
task.wait(0.2)
end
end
-- Auto-restore after respawn
player.CharacterAdded:Connect(function()
if running and not paused then
task.wait(1) -- small delay so character loads
local humanoid = getHumanoid()
if humanoid then
humanoid.WalkSpeed = 64
end
camera.FieldOfView = 120
end
end)
-- Buttons
startBtn.MouseButton1Click:Connect(function()
if not running then
paused = false
camera.FieldOfView = 120
coroutine.wrap(speedLoop)()
else
-- if already running but paused, pressing start will force resume
paused = false
pauseBtn.Text = "Pause"
camera.FieldOfView = 120
end
end)
pauseBtn.MouseButton1Click:Connect(function()
paused = not paused
if paused then
pauseBtn.Text = "Resume"
camera.FieldOfView = defaultFOV
else
pauseBtn.Text = "Pause"
camera.FieldOfView = 120
end
end)
closeBtn.MouseButton1Click:Connect(function()
running = false
camera.FieldOfView = defaultFOV
screenGui:Destroy()
end)
![[KEYLESS] Moondiety Script | 17+ supported Games](https://scriptblox.com/images/sb/0-1753093706828.png)


It is made by chatGPT, don't rage on me
u didnt even delete the comments of chatgpt crazy
how am i supossed to put a exploit on StarterGui > LocalScript from roblox studio :sobv: