sunday morning rappin
Key RequiredUniversal

sunday morning rappin

Universal Scriptmakinbandsmakinbands 117 views 280 executesUpdated Aug 16, 2026
Unrated
00
Lua Script•140 lines (2713 chars)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer

local HitEvent = ReplicatedStorage:WaitForChild("NoteHit")

local AUTO_PLAY = true

-- Maximum timing difference allowed
local HIT_WINDOW = 0.12

local alreadyHit = {}

local validDirections = {
	Left = true,
	Down = true,
	Up = true,
	Right = true
}

local function hit(note)
	if alreadyHit[note] then
		return
	end

	if not note or not note.Parent then
		return
	end

	local direction = note:GetAttribute("Direction")

	if not validDirections[direction] then
		warn("Invalid note direction:", direction)
		return
	end

	alreadyHit[note] = true

	-- Send the hit to your game's normal scoring system
	HitEvent:FireServer(note, direction)

	-- Cleanup
	task.delay(1, function()
		alreadyHit[note] = nil
	end)
end

local function checkNotes()
	if not AUTO_PLAY then
		return
	end

	local now = workspace:GetServerTimeNow()

	for _, note in ipairs(CollectionService:GetTagged("RhythmNote")) do

		if note.Parent then

			local hitTime = note:GetAttribute("HitTime")

			if typeof(hitTime) == "number" then

				local difference = hitTime - now

				-- Hit when the note reaches the hit time
				if math.abs(difference) <= HIT_WINDOW then
					hit(note)
				end

			end
		end
	end
end

RunService.Heartbeat:Connect(checkNotes) 
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CollectionService = game:GetService("CollectionService")

local HitEvent = ReplicatedStorage:WaitForChild("NoteHit")

local VALID_DIRECTIONS = {
	Left = true,
	Down = true,
	Up = true,
	Right = true
}

local HIT_WINDOW = 0.2

HitEvent.OnServerEvent:Connect(function(player, note, direction)

	if not note then
		return
	end

	if not note:IsDescendantOf(game) then
		return
	end

	-- Make sure this is actually one of our rhythm notes
	if not CollectionService:HasTag(note, "RhythmNote") then
		return
	end

	if not VALID_DIRECTIONS[direction] then
		return
	end

	local noteDirection = note:GetAttribute("Direction")
	local hitTime = note:GetAttribute("HitTime")

	if noteDirection ~= direction then
		return
	end

	if typeof(hitTime) ~= "number" then
		return
	end

	local currentTime = workspace:GetServerTimeNow()

	if math.abs(currentTime - hitTime) > HIT_WINDOW then
		return
	end

	------------------------------------------------
	-- YOUR SCORING CODE GOES HERE
	------------------------------------------------

	print(player.Name .. " AUTO HIT:", direction)

	-- Example:
	-- player.leaderstats.Score.Value += 100

	-- Remove the note
	note:Destroy()
end)

Features & Information

In testing so try it out

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts