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)