local CoreGui = game:GetService("CoreGui") local Players = game:GetService("Players") local RunService = game:GetService("RunService") local VirtualInputManager = game:GetService("VirtualInputManager") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local fnfScreen = playerGui:WaitForChild("FNF"):WaitForChild("Screen"):WaitForChild("UI"):WaitForChild("Arrows") local incomingArrowsFolder = fnfScreen:WaitForChild("IncomingArrows") local binds = { Left = Enum.KeyCode.A, Down = Enum.KeyCode.S, Up = Enum.KeyCode.K, Right = Enum.KeyCode.L } local hitNotes = setmetatable({}, {__mode = "k"}) local activeHolds = {} local isOn = false local HIT_THRESHOLD = 50 local RELEASE_DELAY_MS = 15 local GUI_NAME = "FNF_Autoplayer_GUI" local existingGui = CoreGui:FindFirstChild(GUI_NAME) or playerGui:FindFirstChild(GUI_NAME) if existingGui then existingGui:Destroy() end local gui = Instance.new("ScreenGui") gui.Name = GUI_NAME gui.ResetOnSpawn = false local success, _ = pcall(function() gui.Parent = CoreGui end) if not success then gui.Parent = playerGui end local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 220, 0, 150) mainFrame.Position = UDim2.new(0.5, -110, 0.8, -75) mainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.Draggable = true mainFrame.Parent = gui local uiCorner = Instance.new("UICorner") uiCorner.CornerRadius = UDim.new(0, 8) uiCorner.Parent = mainFrame local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, 0, 0, 25) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "LFNF Autoplayer" titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) titleLabel.Font = Enum.Font.GothamBold titleLabel.TextSize = 14 titleLabel.Parent = mainFrame local toggleBtn = Instance.new("TextButton") toggleBtn.Size = UDim2.new(0, 180, 0, 30) toggleBtn.Position = UDim2.new(0.5, -90, 0, 30) toggleBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) toggleBtn.Text = "Status: OFF" toggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255) toggleBtn.Font = Enum.Font.GothamBold toggleBtn.TextSize = 14 toggleBtn.Parent = mainFrame local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0, 6) toggleCorner.Parent = toggleBtn local minusDistBtn = Instance.new("TextButton") minusDistBtn.Size = UDim2.new(0, 40, 0, 30) minusDistBtn.Position = UDim2.new(0.5, -90, 0, 70) minusDistBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) minusDistBtn.Text = "-" minusDistBtn.TextColor3 = Color3.fromRGB(255, 255, 255) minusDistBtn.Font = Enum.Font.GothamBold minusDistBtn.TextSize = 18 minusDistBtn.Parent = mainFrame local minusDistCorner = Instance.new("UICorner") minusDistCorner.CornerRadius = UDim.new(0, 6) minusDistCorner.Parent = minusDistBtn local thresholdDisplay = Instance.new("TextLabel") thresholdDisplay.Size = UDim2.new(0, 90, 0, 30) thresholdDisplay.Position = UDim2.new(0.5, -45, 0, 70) thresholdDisplay.BackgroundTransparency = 1 thresholdDisplay.Text = "Dist: " .. HIT_THRESHOLD thresholdDisplay.TextColor3 = Color3.fromRGB(200, 200, 200) thresholdDisplay.Font = Enum.Font.Gotham thresholdDisplay.TextSize = 14 thresholdDisplay.Parent = mainFrame local plusDistBtn = Instance.new("TextButton") plusDistBtn.Size = UDim2.new(0, 40, 0, 30) plusDistBtn.Position = UDim2.new(0.5, 50, 0, 70) plusDistBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) plusDistBtn.Text = "+" plusDistBtn.TextColor3 = Color3.fromRGB(255, 255, 255) plusDistBtn.Font = Enum.Font.GothamBold plusDistBtn.TextSize = 18 plusDistBtn.Parent = mainFrame local plusDistCorner = Instance.new("UICorner") plusDistCorner.CornerRadius = UDim.new(0, 6) plusDistCorner.Parent = plusDistBtn local minusMsBtn = Instance.new("TextButton") minusMsBtn.Size = UDim2.new(0, 40, 0, 30) minusMsBtn.Position = UDim2.new(0.5, -90, 0, 110) minusMsBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) minusMsBtn.Text = "-" minusMsBtn.TextColor3 = Color3.fromRGB(255, 255, 255) minusMsBtn.Font = Enum.Font.GothamBold minusMsBtn.TextSize = 18 minusMsBtn.Parent = mainFrame local minusMsCorner = Instance.new("UICorner") minusMsCorner.CornerRadius = UDim.new(0, 6) minusMsCorner.Parent = minusMsBtn local msDisplay = Instance.new("TextLabel") msDisplay.Size = UDim2.new(0, 90, 0, 30) msDisplay.Position = UDim2.new(0.5, -45, 0, 110) msDisplay.BackgroundTransparency = 1 msDisplay.Text = "MS: " .. RELEASE_DELAY_MS msDisplay.TextColor3 = Color3.fromRGB(200, 200, 200) msDisplay.Font = Enum.Font.Gotham msDisplay.TextSize = 14 msDisplay.Parent = mainFrame local plusMsBtn = Instance.new("TextButton") plusMsBtn.Size = UDim2.new(0, 40, 0, 30) plusMsBtn.Position = UDim2.new(0.5, 50, 0, 110) plusMsBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) plusMsBtn.Text = "+" plusMsBtn.TextColor3 = Color3.fromRGB(255, 255, 255) plusMsBtn.Font = Enum.Font.GothamBold plusMsBtn.TextSize = 18 plusMsBtn.Parent = mainFrame local plusMsCorner = Instance.new("UICorner") plusMsCorner.CornerRadius = UDim.new(0, 6) plusMsCorner.Parent = plusMsBtn toggleBtn.MouseButton1Click:Connect(function() isOn = not isOn if isOn then toggleBtn.BackgroundColor3 = Color3.fromRGB(50, 200, 50) toggleBtn.Text = "Status: ON" else toggleBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) toggleBtn.Text = "Status: OFF" for keycode, _ in pairs(activeHolds) do VirtualInputManager:SendKeyEvent(false, keycode, false, game) end table.clear(activeHolds) end end) local function getIncrement() if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.RightControl) then return 10 end return 1 end minusDistBtn.MouseButton1Click:Connect(function() HIT_THRESHOLD = math.max(1, HIT_THRESHOLD - getIncrement()) thresholdDisplay.Text = "Dist: " .. HIT_THRESHOLD end) plusDistBtn.MouseButton1Click:Connect(function() HIT_THRESHOLD = HIT_THRESHOLD + getIncrement() thresholdDisplay.Text = "Dist: " .. HIT_THRESHOLD end) minusMsBtn.MouseButton1Click:Connect(function() RELEASE_DELAY_MS = RELEASE_DELAY_MS - getIncrement() msDisplay.Text = "MS: " .. RELEASE_DELAY_MS end) plusMsBtn.MouseButton1Click:Connect(function() RELEASE_DELAY_MS = RELEASE_DELAY_MS + getIncrement() msDisplay.Text = "MS: " .. RELEASE_DELAY_MS end) local function getSusFrame(note) local frame = note:FindFirstChild("Frame") if frame then return frame:FindFirstChild("Sus") or frame:FindFirstChild("sus") end return nil end RunService.RenderStepped:Connect(function() if not isOn then return end for keycode, note in pairs(activeHolds) do local releaseKey = false if not note or not note.Parent then releaseKey = true else local sus = getSusFrame(note) if not sus or sus.AbsoluteSize.Y <= 1 then releaseKey = true end end if releaseKey then VirtualInputManager:SendKeyEvent(false, keycode, false, game) activeHolds[keycode] = nil end end for directionName, keycode in pairs(binds) do local receptor = fnfScreen:FindFirstChild(directionName) local incomingDirFolder = incomingArrowsFolder:FindFirstChild(directionName) if receptor and incomingDirFolder then local receptorPos = receptor.AbsolutePosition local bestNote = nil local minDistance = HIT_THRESHOLD for _, note in ipairs(incomingDirFolder:GetChildren()) do if note:IsA("GuiObject") and note.Visible and not hitNotes[note] then local notePos = note.AbsolutePosition local distance = (notePos - receptorPos).Magnitude if distance <= minDistance then minDistance = distance bestNote = note end end end if bestNote then hitNotes[bestNote] = true VirtualInputManager:SendKeyEvent(false, keycode, false, game) VirtualInputManager:SendKeyEvent(true, keycode, false, game) local sus = getSusFrame(bestNote) if sus and sus.AbsoluteSize.Y > 1 then activeHolds[keycode] = bestNote else task.delay(RELEASE_DELAY_MS / 1000, function() if activeHolds[keycode] == nil then VirtualInputManager:SendKeyEvent(false, keycode, false, game) end end) end end end end end)