Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How do I make music specific to location and so only the player in that location hears it?

ok here's what I tried : I tried using a local script that connects to a part and when it is touched, it changes the music. The problem with this is that it changes the music for everyone, not just the person that touches it.

1 answer

✓ Accepted answer

Try placing the sound into their head. Put the following script in a regular script, and read the 2 comments at the top of the script.

sounds = {} -- Don't touch this, it'll generate itself.
-- Create a new model in Lighting called 'Sounds' and put all your sounds in there.

function generateSoundsTbl()
	for _, child in pairs(game.Lighting.Sounds) do
		table.insert(sounds, child.Name)
	end
end

function getNextSound(prevSound)
	local nextSound
	for key, value in pairs(sounds) do
		if(value == prevSound) then
			if(key < #sounds) then
				nextSound = sounds[key + 1]
			else
				nextSound = sounds[1]
			end
		end
	end
	return nextSound
end

function removeSounds(parent) 
	local oldSound
	for _, child in pairs(parent:GetChildren()) do
		if(child:IsA("Sound")) then
			oldSound = child.Name
			child:Destroy()
		end
	end
	return oldSound
end

debounce = false
script.Parent.Touched:connect(function(hit)
	humanoid = hit.Parent:findFirstChild("Humanoid")
	if(debounce == false) then
		debounce = true
		if(humanoid ~= nil) then
			oldSound = removeSounds(hit.Parent.Head)
			nextSound = getNextSound(oldSound)
			sound = game.Lighting.Sounds:findFirstChild(nextSound)
			if(sound ~= nil) then
				sound:clone().Parent = hit.Parent.Head
			end
		end
		wait(0.2)
		debounce = false
	end
end)
generateSoundsTbl()

This discussion is preserved as it was. New answers, comments, and votes are closed.