local player = game.Players.LocalPlayer
local char, hrp, humanoid
local flying = false
local speed = 50
local walkSpeed = 16
local bv, bg
-- Character setup
local function setupCharacter(character)
char = character
hrp = char:WaitForChild("HumanoidRootPart")
humanoid = char:WaitForChild("Humanoid")
humanoid.WalkSpeed = walkSpeed
flying = false
if bv then bv:Destroy() bv = nil end
if bg then bg:Destroy() bg = nil end
end
if player.Character then
setupCharacter(player.Character)
end
player.CharacterAdded:Connect(setupCharacter)
local uis = game:GetService("UserInputService")
local run = game:GetService("RunService")
local CAS = game:GetService("ContextActionService")
-- UI
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "keyth"
screenGui.ResetOnSpawn = false
screenGui.Parent = player:WaitForChild("PlayerGui")
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 260, 0, 260)
frame.Position = UDim2.new(0, 10, 0, 10)
frame.BackgroundColor3 = Color3.fromRGB(20,20,20)
frame.BorderSizePixel = 0
frame.Parent = screenGui
Instance.new("UICorner", frame).CornerRadius = UDim.new(0,10)
-- Top bar
local topBar = Instance.new("Frame")
topBar.Size = UDim2.new(1,0,0,30)
topBar.BackgroundColor3 = Color3.fromRGB(30,30,30)
topBar.Parent = frame
Instance.new("UICorner", topBar).CornerRadius = UDim.new(0,10)
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1,0,1,0)
title.BackgroundTransparency = 1
title.Text = "keyth"
title.Font = Enum.Font.GothamBold
title.TextSize = 18
title.Parent = topBar
-- Rainbow title
task.spawn(function()
while true do
for i = 0,1,0.01 do
title.TextColor3 = Color3.fromHSV(i,1,1)
task.wait(0.05)
end
end
end)
-- Tabs bar
local tabBar = Instance.new("Frame")
tabBar.Size = UDim2.new(1,0,0,30)
tabBar.Position = UDim2.new(0,0,0,30)
tabBar.BackgroundTransparency = 1
tabBar.Parent = frame
-- Container
local container = Instance.new("Frame")
container.Size = UDim2.new(1,0,1,-60)
container.Position = UDim2.new(0,0,0,60)
container.BackgroundTransparency = 1
container.Parent = frame
-- Style
local function style(obj)
obj.BackgroundColor3 = Color3.fromRGB(35,35,35)
obj.TextColor3 = Color3.new(1,1,1)
obj.BorderSizePixel = 0
obj.TextSize = 14
obj.Font = Enum.Font.Gotham
Instance.new("UICorner", obj).CornerRadius = UDim.new(0,6)
end
-- Tabs
local flyingTab = Instance.new("TextButton")
flyingTab.Size = UDim2.new(0.5, -5, 1, 0)
flyingTab.Position = UDim2.new(0, 5, 0, 0)
flyingTab.Text = "Flying"
flyingTab.Parent = tabBar
style(flyingTab)
local walkTab = Instance.new("TextButton")
walkTab.Size = UDim2.new(0.5, -5, 1, 0)
walkTab.Position = UDim2.new(0.5, 0, 0, 0)
walkTab.Text = "WalkSpeed"
walkTab.Parent = tabBar
style(walkTab)
-- Pages
local flyingPage = Instance.new("Frame")
flyingPage.Size = UDim2.new(1,0,1,0)
flyingPage.BackgroundTransparency = 1
flyingPage.Parent = container
local walkPage = Instance.new("Frame")
walkPage.Size = UDim2.new(1,0,1,0)
walkPage.BackgroundTransparency = 1
walkPage.Visible = false
walkPage.Parent = container
-- Switching
flyingTab.MouseButton1Click:Connect(function()
flyingPage.Visible = true
walkPage.Visible = false
end)
walkTab.MouseButton1Click:Connect(function()
flyingPage.Visible = false
walkPage.Visible = true
end)
-- ===== FLYING =====
local toggleBtn = Instance.new("TextButton")
toggleBtn.Size = UDim2.new(1,-20,0,35)
toggleBtn.Position = UDim2.new(0,10,0,35)
toggleBtn.Parent = flyingPage
style(toggleBtn)
local function updateFlyUI()
if flying then
toggleBtn.Text = "Fly: ON (F)"
toggleBtn.BackgroundColor3 = Color3.fromRGB(40,120,40)
else
toggleBtn.Text = "Fly: OFF (F)"
toggleBtn.BackgroundColor3 = Color3.fromRGB(35,35,35)
end
end
local function toggleFly()
flying = not flying
if flying and hrp then
bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(1e5,1e5,1e5)
bv.Parent = hrp
bg = Instance.new("BodyGyro")
bg.MaxTorque = Vector3.new(1e5,1e5,1e5)
bg.CFrame = hrp.CFrame
bg.Parent = hrp
else
if bv then bv:Destroy() bv = nil end
if bg then bg:Destroy() bg = nil end
end
updateFlyUI()
end
toggleBtn.MouseButton1Click:Connect(toggleFly)
uis.InputBegan:Connect(function(input, gp)
if gp then return end
if input.KeyCode == Enum.KeyCode.F then
toggleFly()
end
end)
-- Controller toggle (A / Cross)
CAS:BindAction("ToggleFlyController", function(_, state)
if state == Enum.UserInputState.Begin then
toggleFly()
end
end, false, Enum.KeyCode.ButtonA)
-- Fly Speed UI
local speedLabel = Instance.new("TextLabel")
speedLabel.Size = UDim2.new(1, -20, 0, 20)
speedLabel.Position = UDim2.new(0, 10, 0, 75)
speedLabel.BackgroundTransparency = 1
speedLabel.Text = "Fly Speed"
speedLabel.TextColor3 = Color3.new(1,1,1)
speedLabel.Parent = flyingPage
local speedFrame = Instance.new("Frame")
speedFrame.Size = UDim2.new(1,-20,0,30)
speedFrame.Position = UDim2.new(0,10,0,95)
speedFrame.BackgroundTransparency = 1
speedFrame.Parent = flyingPage
local minusBtn = Instance.new("TextButton")
minusBtn.Size = UDim2.new(0.3,0,1,0)
minusBtn.Text = "-"
minusBtn.Parent = speedFrame
style(minusBtn)
local speedDisplay = Instance.new("TextLabel")
speedDisplay.Size = UDim2.new(0.4,0,1,0)
speedDisplay.Position = UDim2.new(0.3,0,0,0)
speedDisplay.BackgroundColor3 = Color3.fromRGB(25,25,25)
speedDisplay.TextColor3 = Color3.new(1,1,1)
speedDisplay.Parent = speedFrame
Instance.new("UICorner", speedDisplay)
local plusBtn = Instance.new("TextButton")
plusBtn.Size = UDim2.new(0.3,0,1,0)
plusBtn.Position = UDim2.new(0.7,0,0,0)
plusBtn.Text = "+"
plusBtn.Parent = speedFrame
style(plusBtn)
local function updateSpeedUI()
speedDisplay.Text = tostring(speed)
end
minusBtn.MouseButton1Click:Connect(function()
speed = math.max(10, speed - 5)
updateSpeedUI()
end)
plusBtn.MouseButton1Click:Connect(function()
speed = math.min(200, speed + 5)
updateSpeedUI()
end)
updateSpeedUI()
-- ===== WALK SPEED =====
local wsFrame = Instance.new("Frame")
wsFrame.Size = UDim2.new(1,-20,0,30)
wsFrame.Position = UDim2.new(0,10,0,40)
wsFrame.BackgroundTransparency = 1
wsFrame.Parent = walkPage
local wsMinus = Instance.new("TextButton")
wsMinus.Size = UDim2.new(0.3,0,1,0)
wsMinus.Text = "-"
wsMinus.Parent = wsFrame
style(wsMinus)
local wsDisplay = Instance.new("TextLabel")
wsDisplay.Size = UDim2.new(0.4,0,1,0)
wsDisplay.Position = UDim2.new(0.3,0,0,0)
wsDisplay.BackgroundColor3 = Color3.fromRGB(25,25,25)
wsDisplay.TextColor3 = Color3.new(1,1,1)
wsDisplay.Parent = wsFrame
Instance.new("UICorner", wsDisplay)
local wsPlus = Instance.new("TextButton")
wsPlus.Size = UDim2.new(0.3,0,1,0)
wsPlus.Position = UDim2.new(0.7,0,0,0)
wsPlus.Text = "+"
wsPlus.Parent = wsFrame
style(wsPlus)
local function updateWS()
wsDisplay.Text = tostring(walkSpeed)
if humanoid then
humanoid.WalkSpeed = walkSpeed
end
end
wsMinus.MouseButton1Click:Connect(function()
walkSpeed = math.max(8, walkSpeed - 2)
updateWS()
end)
wsPlus.MouseButton1Click:Connect(function()
walkSpeed = math.min(200, walkSpeed + 2)
updateWS()
end)
updateWS()
-- ===== FLY MOVEMENT =====
run.RenderStepped:Connect(function()
if flying and bv and bg and hrp then
local cam = workspace.CurrentCamera
bg.CFrame = cam.CFrame
local moveDir = Vector3.zero
-- Keyboard
if uis:IsKeyDown(Enum.KeyCode.W) then moveDir += cam.CFrame.LookVector end
if uis:IsKeyDown(Enum.KeyCode.S) then moveDir -= cam.CFrame.LookVector end
if uis:IsKeyDown(Enum.KeyCode.A) then moveDir -= cam.CFrame.RightVector end
if uis:IsKeyDown(Enum.KeyCode.D) then moveDir += cam.CFrame.RightVector end
-- Controller (FIXED Y AXIS)
local thumbstick = uis:GetGamepadState(Enum.UserInputType.Gamepad1)
for _, input in ipairs(thumbstick) do
if input.KeyCode == Enum.KeyCode.Thumbstick1 then
local x = input.Position.X
local y = input.Position.Y
moveDir += cam.CFrame.LookVector * y
moveDir += cam.CFrame.RightVector * x
end
end
bv.Velocity = moveDir * speed
end
end)
updateFlyUI()
-- ===== DRAGGING =====
local dragging = false
local dragInput, mousePos, framePos
topBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
mousePos = input.Position
framePos = frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
topBar.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement then
dragInput = input
end
end)
uis.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - mousePos
frame.Position = UDim2.new(
framePos.X.Scale,
framePos.X.Offset + delta.X,
framePos.Y.Scale,
framePos.Y.Offset + delta.Y
)
end
end)
Comments
⚠️ MODERATION NOTICE Your script for my friend has been warned again.Your title is not proper and informational enough for people coming to rscripts looking for these types of scripts for this game. Please change it to something else.
⚠️ MODERATION NOTICE Your script description is too short, unclear, or unhelpful. Quality descriptions help users understand what they're downloading. Action Required: - Explain what your script does in detail - List the main features and functionality - Include any requirements or instructions for use - Minimum 2-3 sentences of actual descriptive content You have 24 hours to improve your description. Low-effort posts that don't help users will be removed. Repeated low-quality submissions will result in warnings.