M
Description
my first ever script! pretty easy key
GAME[VS TABI] Friday Night Partying
UPDATEDOct 10, 2026
ACCESSKey System
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
-- ============================================================================
-- UNIVERSAL GHOST SCRIPT TERMINATOR
-- Forcefully disconnects all old executor loops running in the background
-- ============================================================================
if getconnections then
pcall(function()
for _, conn in ipairs(getconnections(game:GetService("RunService").RenderStepped)) do
local fn = conn.Function
if fn then
local src = debug.info(fn, "s")
-- Kills any previous executor scripts running from [string ""]
if src == "" or src == '[string ""]' or tostring(src):find("string") then
pcall(function() conn:Disable() end)
pcall(function() conn:Disconnect() end)
end
end
end
end)
end
if getgenv().FNP_AutoPlayConnection then
pcall(function() getgenv().FNP_AutoPlayConnection:Disconnect() end)
getgenv().FNP_AutoPlayConnection = nil
end
if getgenv().FNP_Rayfield then
pcall(function() getgenv().FNP_Rayfield:Destroy() end)
getgenv().FNP_Rayfield = nil
end
local Rayfield = loadstring(game:HttpGet('https://raw.githubusercontent.com/SiriusSoftwareLtd/Rayfield/main/source.lua'))()
getgenv().FNP_Rayfield = Rayfield
local Window = Rayfield:CreateWindow({
Name = "Friday Night Partying | VS Tabi",
Icon = "smile",
LoadingTitle = "Friday Night Partying",
LoadingSubtitle = "by Acruise82",
ShowText = "H",
Theme = "Default",
ToggleUIKeybind = Enum.KeyCode.Insert,
DisableRayfieldPrompts = true,
DisableBuildWarnings = true,
ConfigurationSaving = {
Enabled = false
},
Discord = {
Enabled = true, -- Prompt the user to join your Discord server if their executor supports it
Invite = "https://9P8H28hKs", -- The Discord invite code, do not include Discord.gg/. E.g. Discord.gg/ABCD would be ABCD
RememberJoins = true
},
KeySystem = true,
KeySettings = {
Title = "Friday Night Partying",
Subtitle = "Key System",
Note = "Join discord for key : https://discord.gg/9P8H28hKs",
FileName = "Key",
SaveKey = true,
GrabKeyFromSite = false,
Key = {"mamababy"}
}
})
Rayfield:Notify({
Title = "Autoplayer Ready",
Content = "Ghost scripts killed! Press INSERT for menu.",
Duration = 5,
Image = "smile",
})
--------------------------------------------------------------------------------
-- SERVICES & WASD CONTROLS
--------------------------------------------------------------------------------
local RunService = game:GetService("RunService")
local VirtualInputManager = game:GetService("VirtualInputManager")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
-- WASD Controls: Left (A), Down (S), Up (W), Right (D)
local LaneBinds = {
[1] = Enum.KeyCode.A,
[2] = Enum.KeyCode.S,
[3] = Enum.KeyCode.W,
[4] = Enum.KeyCode.D
}
local UserInputBindables = nil
local GoodhitFunc = nil
pcall(function()
local Modules = ReplicatedStorage:WaitForChild("Modules", 2)
if Modules then
UserInputBindables = require(Modules:WaitForChild("UserInputBindables", 2))
end
end)
pcall(function()
if getgc then
for _, obj in ipairs(getgc(true)) do
if type(obj) == "function" then
local name = debug.info and debug.info(obj, "n")
if name == "Goodhit" then
GoodhitFunc = obj
break
end
end
end
end
end)
local function sendLaneInput(lane, isDown)
local key = LaneBinds[lane]
if not key then return end
if firesignal and UserInputBindables and UserInputBindables.InputEvents then
local signal = isDown and UserInputBindables.InputEvents.Began or UserInputBindables.InputEvents.Ended
if signal then
pcall(firesignal, signal, "Direction" .. lane, nil, false)
end
end
if setthreadidentity then pcall(setthreadidentity, 8) end
pcall(function()
VirtualInputManager:SendKeyEvent(isDown, key, false, game)
end)
end
--------------------------------------------------------------------------------
-- FNP ENGINE HOOK (2X SPEED OPTIMIZED)
--------------------------------------------------------------------------------
local activeNotes = {}
local NoteModule, Conductor
pcall(function()
local Modules = ReplicatedStorage:WaitForChild("Modules", 5)
if Modules then
NoteModule = require(Modules:WaitForChild("Note", 5))
Conductor = require(Modules:WaitForChild("Conductor", 5))
end
end)
if NoteModule and type(NoteModule.SpawnNote) == "function" then
local oldSpawn = NoteModule.SpawnNote
NoteModule.SpawnNote = function(note)
local result = oldSpawn(note)
if type(note) == "table" and note.MustPress then
if note.shouldPress ~= false then
table.insert(activeNotes, note)
end
end
return result
end
end
--------------------------------------------------------------------------------
-- AUTO PLAY TAB
--------------------------------------------------------------------------------
local AutoPlayTab = Window:CreateTab("Auto Play", "smile")
AutoPlayTab:CreateSection("Autoplayer Controls (WASD)")
local autoPlayConnection = nil
local targetAccuracy = 100
local imperfectMode = false
local triggeredNotes = {}
local heldLanes = {}
local releaseAt = {}
-- Live Accuracy & Mode Resolver
local function getLiveAccuracy()
if Rayfield and Rayfield.Flags and Rayfield.Flags["AccuracySlider"] then
local val = Rayfield.Flags["AccuracySlider"].CurrentValue
if type(val) == "number" then return val end
if tonumber(val) then return tonumber(val) end
end
return tonumber(targetAccuracy) or 100
end
local function getLiveImperfectMode()
if Rayfield and Rayfield.Flags and Rayfield.Flags["ImperfectHitsToggle"] ~= nil then
return Rayfield.Flags["ImperfectHitsToggle"].CurrentValue == true
end
return imperfectMode == true
end
local function triggerPhysicalHit(lane, isSustain)
local now = os.clock()
if heldLanes[lane] then
sendLaneInput(lane, false)
end
sendLaneInput(lane, true)
heldLanes[lane] = true
releaseAt[lane] = now + (isSustain and 0.16 or 0.014)
end
local function getActiveNoteContainer()
for _, name in ipairs({"BFNotes", "DadNotes"}) do
for _, desc in ipairs(PlayerGui:GetDescendants()) do
if desc:IsA("GuiObject") and desc.Name == name and desc.Visible then
if #desc:GetChildren() >= 4 then
return desc
end
end
end
end
return nil
end
-- Toggle Auto Play
local Toggle = AutoPlayTab:CreateToggle({
Name = "auto play",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
if Value then
if autoPlayConnection then autoPlayConnection:Disconnect() end
table.clear(triggeredNotes)
table.clear(heldLanes)
table.clear(releaseAt)
autoPlayConnection = RunService.RenderStepped:Connect(function()
local now = os.clock()
-- Key releases
for lane = 1, 4 do
if releaseAt[lane] and now >= releaseAt[lane] then
sendLaneInput(lane, false)
heldLanes[lane] = nil
releaseAt[lane] = nil
end
end
local liveAcc = getLiveAccuracy()
local liveImperfect = getLiveImperfectMode()
-- =============================================================
-- METHOD 1: Direct Conductor Engine (Chronologically Sorted)
-- =============================================================
if Conductor and type(Conductor.SongPos) == "number" and #activeNotes > 0 then
local songPos = Conductor.SongPos
local dueNotes = {}
for i = #activeNotes, 1, -1 do
local note = activeNotes[i]
local strumTime = tonumber(note.StrumTime) or 0
if note.GoodHit or note.TooLate or (songPos > strumTime + 450) then
triggeredNotes[note] = nil
table.remove(activeNotes, i)
elseif note.MustPress and not triggeredNotes[note] and not note.GoodHit and not note.TooLate then
local isReady = (songPos >= strumTime - 35) or (note.CanBeHit and songPos >= strumTime - 50)
if isReady then
table.insert(dueNotes, note)
end
end
end
table.sort(dueNotes, function(a, b)
local aTime = tonumber(a.StrumTime) or 0
local bTime = tonumber(b.StrumTime) or 0
if aTime ~= bTime then
return aTime < bTime
end
return (not a.IsSustain) and b.IsSustain
end)
for _, note in ipairs(dueNotes) do
if not triggeredNotes[note] then
triggeredNotes[note] = true
local roll = math.random(1, 100)
local isSick = (liveAcc >= 100) or (roll <= liveAcc)
local lane = (tonumber(note.NoteData) or 0) + 1
local isSustain = note.IsSustain or (note.SustainLength and note.SustainLength > 0)
if isSick then
if GoodhitFunc then pcall(GoodhitFunc, note) end
triggerPhysicalHit(lane, isSustain)
elseif liveImperfect then
-- Imperfect hit delayed for Good/Bad
task.delay(0.06, function()
if GoodhitFunc then pcall(GoodhitFunc, note) end
triggerPhysicalHit(lane, isSustain)
end)
else
-- Complete Miss
end
end
end
return
end
-- =============================================================
-- METHOD 2: Visual Fallback
-- =============================================================
local container = getActiveNoteContainer()
if not container or not container.Parent then
for lane = 1, 4 do
if heldLanes[lane] then
sendLaneInput(lane, false)
heldLanes[lane] = nil
end
end
return
end
local receptors = {}
local notes = {}
for _, child in ipairs(container:GetChildren()) do
if (child:IsA("ImageLabel") or child:IsA("ImageButton") or child:IsA("GuiObject")) and child.Visible and child.ImageTransparency < 0.95 then
local name = tostring(child.Name or ""):gsub("%z", ""):gsub("%s+", "")
if name == "" or name == "0" or name == "1" or name == "2" or name == "3" then
table.insert(receptors, child)
else
table.insert(notes, child)
end
end
end
if #receptors < 4 then
table.clear(receptors)
table.clear(notes)
for _, child in ipairs(container:GetChildren()) do
if child:IsA("GuiObject") and child.Visible and child.ImageTransparency < 0.95 then
if child.ZIndex == 1 and child.AbsoluteSize.X > 20 then
table.insert(receptors, child)
else
table.insert(notes, child)
end
end
end
end
table.sort(receptors, function(a, b)
return a.AbsolutePosition.X < b.AbsolutePosition.X
end)
if #receptors < 4 then return end
local targetRecY = receptors[1].AbsolutePosition.Y + (receptors[1].AbsoluteSize.Y / 2)
table.sort(notes, function(a, b)
local aCenter = a.AbsolutePosition.Y + (a.AbsoluteSize.Y / 2)
local bCenter = b.AbsolutePosition.Y + (b.AbsoluteSize.Y / 2)
return math.abs(aCenter - targetRecY) < math.abs(bCenter - targetRecY)
end)
for _, note in ipairs(notes) do
if not triggeredNotes[note] and note.Visible and note.ImageTransparency < 0.9 then
local noteName = note.Name:lower()
if noteName:find("mine") or noteName:find("hurt") or noteName:find("kill") or noteName:find("bomb") or noteName:find("death") or noteName:find("poison") then
triggeredNotes[note] = true
else
local noteCenterX = note.AbsolutePosition.X + (note.AbsoluteSize.X / 2)
local currentCenterY = note.AbsolutePosition.Y + (note.AbsoluteSize.Y / 2)
local lane = 1
local minDiffX = math.huge
for i = 1, 4 do
local recX = receptors[i].AbsolutePosition.X + (receptors[i].AbsoluteSize.X / 2)
local diff = math.abs(noteCenterX - recX)
if diff < minDiffX then
minDiffX = diff
lane = i
end
end
local rec = receptors[lane]
local recY = rec.AbsolutePosition.Y + (rec.AbsoluteSize.Y / 2)
local distanceY = math.abs(currentCenterY - recY)
if distanceY <= 55 and minDiffX <= rec.AbsoluteSize.X then
triggeredNotes[note] = true
local roll = math.random(1, 100)
local isSick = (liveAcc >= 100) or (roll <= liveAcc)
local isSustain = note.AbsoluteSize.Y > rec.AbsoluteSize.Y * 1.3
if isSick then
triggerPhysicalHit(lane, isSustain)
elseif liveImperfect then
task.delay(0.06, function()
triggerPhysicalHit(lane, isSustain)
end)
else
-- Complete Miss
end
end
end
end
end
end)
getgenv().FNP_AutoPlayConnection = autoPlayConnection
else
if autoPlayConnection then
autoPlayConnection:Disconnect()
autoPlayConnection = nil
getgenv().FNP_AutoPlayConnection = nil
end
for lane = 1, 4 do
sendLaneInput(lane, false)
end
table.clear(heldLanes)
table.clear(releaseAt)
end
end,
})
-- Accuracy Slider (0% to 100%)
AutoPlayTab:CreateSlider({
Name = "Accuracy",
Range = {0, 100},
Increment = 1,
Suffix = "%",
CurrentValue = 100,
Flag = "AccuracySlider",
Callback = function(Value)
targetAccuracy = tonumber(Value) or 100
end,
})
-- Miss Behavior Toggle
AutoPlayTab:CreateToggle({
Name = "Imperfect Hits (Good/Bad instead of Miss)",
CurrentValue = false,
Flag = "ImperfectHitsToggle",
Callback = function(Value)
imperfectMode = Value
end,
})
--------------------------------------------------------------------------------
-- SETTINGS TAB & UNLOAD BUTTON
--------------------------------------------------------------------------------
local SettingsTab = Window:CreateTab("Settings", "settings")
SettingsTab:CreateSection("Script Management")
SettingsTab:CreateButton({
Name = "Unload Script",
Callback = function()
if autoPlayConnection then
autoPlayConnection:Disconnect()
autoPlayConnection = nil
end
getgenv().FNP_AutoPlayConnection = nil
for lane = 1, 4 do
sendLaneInput(lane, false)
end
table.clear(heldLanes)
table.clear(activeNotes)
table.clear(triggeredNotes)
table.clear(releaseAt)
Rayfield:Destroy()
getgenv().FNP_Rayfield = nil
end,
})
LocalPlayer.CharacterRemoving:Connect(function()
for lane = 1, 4 do
sendLaneInput(lane, false)
end
table.clear(heldLanes)
table.clear(releaseAt)
end)Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place