--[[
	Project : RUSHER - Autoplay (open source)
	Place: https://www.roblox.com/games/106809703371658
	Handles every note type: taps, holds (ln), catch (yellow), releases, and avoids bombs.
	UI: Rayfield Gen2 (https://sirius.menu/gen2)
	Requires an executor with getgc/filtergc + debug upvalue access (all modern ones).
]]

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local genv = getgenv()
if genv.__pr_auto_conn then
	pcall(function()
		genv.__pr_auto_conn:Disconnect()
	end)
	genv.__pr_auto_conn = nil
end
if genv.__pr_auto_win then
	pcall(function()
		genv.__pr_auto_win:Unload()
	end)
	genv.__pr_auto_win = nil
end

local function findByClosureName(name)
	if type(filtergc) == "function" then
		return filtergc("function", { Name = name })
	end
	local found = {}
	for _, f in getgc(true) do
		if type(f) == "function" and debug.getinfo(f).name == name then
			table.insert(found, f)
		end
	end
	return found
end

local inputFn
for _, f in findByClosureName("input") do
	if debug.getinfo(f).nups == 18 then
		inputFn = f
	end
end
local releaseFn
for _, f in findByClosureName("release") do
	if debug.getinfo(f).nups == 9 then
		releaseFn = f
		break
	end
end
assert(inputFn, "gameplay input closure not found (join the game first)")
assert(releaseFn, "gameplay release closure not found (join the game first)")

local env = getsenv(Players.LocalPlayer.PlayerGui.gameplay_script)
assert(type(env) == "table", "gameplay_script environment not found")

local function resetHeld()
	-- u471 (idx 7) and u469 (idx 8) hold virtual press entries; playing()
	-- re-derives the any-key-held flags from them every frame, so they must
	-- be emptied when autoplay turns off or catch notes keep auto-hitting.
	pcall(debug.setupvalue, inputFn, 7, {})
	pcall(debug.setupvalue, inputFn, 8, {})
	pcall(debug.setupvalue, inputFn, 9, false)
	pcall(debug.setupvalue, inputFn, 11, false)
end
resetHeld()

local Rayfield = loadstring(game:HttpGet("https://sirius.menu/gen2"))()
local window = Rayfield:CreateWindow({
	name = "Project : RUSHER",
	subtitle = "Autoplay",
})
local tab = window:CreateTab({ name = "Main" })

local stats = { pressed = 0, released = 0, frames = 0 }
genv.__pr_auto_stats = stats
genv.__pr_auto_win = window
genv.__pr_auto_on = false

tab:CreateToggle({
	name = "Autoplay",
	description = "Plays all note types: tap, hold, catch, release",
	value = false,
	callback = function(value)
		genv.__pr_auto_on = value
		if value then
			stats.pressed = 0
			stats.released = 0
		end
	end,
})

local fakePress = { KeyCode = Enum.KeyCode.D, UserInputType = Enum.UserInputType.Keyboard }
local fakeRel = { KeyCode = Enum.KeyCode.F, UserInputType = Enum.UserInputType.Keyboard }
local LEAD = 0.005
local wasOn = false

local conn = RunService.Heartbeat:Connect(function()
	if not genv.__pr_auto_on then
		if wasOn then
			wasOn = false
			resetHeld()
		end
		return
	end
	wasOn = true

	local t = debug.getupvalue(inputFn, 16)
	local w = debug.getupvalue(inputFn, 15)
	local paused = debug.getupvalue(inputFn, 2)
	local failed = debug.getupvalue(inputFn, 12)
	local retry = debug.getupvalue(inputFn, 1)
	local studioAuto = debug.getupvalue(inputFn, 10)
	local bombs = debug.getupvalue(inputFn, 13)
	local taps = debug.getupvalue(inputFn, 14)
	local rels = debug.getupvalue(releaseFn, 8)

	debug.setupvalue(inputFn, 9, true)
	debug.setupvalue(inputFn, 11, true)

	if paused or failed or retry or studioAuto then
		return
	end
	if type(taps) ~= "table" or #taps == 0 then
		return
	end
	if type(t) ~= "number" or type(w) ~= "number" then
		return
	end

	stats.frames = stats.frames + 1

	local cfg = _G.CONFIGURATIONS
	local off = cfg and (tonumber(cfg.offsetvisual) or 0) / 1000 or 0

	local ci = env.currentrel
	if ci and type(rels) == "table" then
		local rel = rels[ci]
		if rel and not rel.hitted and not rel.miss and type(rel.real_stime) == "number"
			and t >= rel.real_stime + LEAD - off then
			releaseFn(fakeRel, false)
			stats.released = stats.released + 1
			debug.setupvalue(inputFn, 9, true)
			debug.setupvalue(inputFn, 11, true)
		end
	end

	local ni = env.currentnote
	if not ni or type(bombs) ~= "table" then
		return
	end
	local tap = taps[ni]
	if not tap or tap.hitted or tap.miss or type(tap.real_stime) ~= "number" then
		return
	end

	local bi = env.currentbomb
	if bi then
		local bomb = bombs[bi]
		if bomb and not bomb.hitted and type(bomb.real_stime) == "number" then
			local routeBomb = true
			if tap.real_stime - 1.5 * w <= bomb.real_stime then
				routeBomb = false
			end
			if routeBomb then
				return
			end
		end
	end

	if t >= tap.real_stime + LEAD - off then
		inputFn(fakePress, false)
		stats.pressed = stats.pressed + 1
		debug.setupvalue(inputFn, 9, true)
		debug.setupvalue(inputFn, 11, true)
	end
end)

genv.__pr_auto_conn = conn
print("[autoplay] loaded | toggle in the menu")
[🎡] Project : RUSHER autoplay
141 views
5 hours ago

autoplay

WORKING
Free

Description

project rusher autoplay. uses ui. and keyless!

Related Scripts

Roblox [🎡] Project : RUSHER Script - autoplay | HaxHell