
Key Required
Literally FNF autoplayer
Lua Script•263 lines (8929 chars)
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)Features & Information
Just a basic autoplayer, open source, don't care, made it cause i searched and didn't find any so i had to make one
any issues tell me or fix it yourself since it's open source lol
also use ASKL as keybinds or change them in the script
Also don't play expurgation or any songs with death notes cause i was too lazy to make a death note detection
it works perfectly with notespeed set to 3.5, Dist 50 and MS 15, i haven't tested any other way than that.
MS is basically how long it'll stay holding down the note (the lower the better for jacks so it doesn't miss) and Dist is just when it'll press, anything other lower or too high than 50 will get you misses

how does it work omg
@voidhates you just execute it then enable it and play a song, how else would it work?
@Milkzx idk not sure
I'm on mobile So. Is this only for PC?
@wsemajwliliams692 Yeah, probably, but you can try if you want to. It needs ASKL keybinds to work, if u cannot set them somehow it prob wouldn't work, so changing the script to WASD should work the best.
how do I do this