Client sided events

How do i make it so if i fire an event from a local script from the client it changes (for example) the music for the client only.

idk if i should use remote events, bindable events or other stuff.

local script:

local rep = game.ReplicatedStorage
rep:WaitForChild("NormalMus"):FireServer()

serverscriptservice =

local rep = game.ReplicatedStorage


rep.NormalMus.OnServerEvent:Connect(function()
	local sound = game.Workspace:WaitForChild("Sound")
	local sound2 = game.Workspace:WaitForChild("Sound2")
	sound:Play()
	sound2:Stop()
	
	rep.NormalMus:FireClient()
	
end)

sorry if i kinda suck at explaining my problem, im kinda new to using events and stuff.

Local scripts affect only the client. So you should ensure it’s on a local script, which will make the effect only aplly to that player. If you need one script to trigger another you would use a bindable event (a remote event is for client/server communication. Bindables are for same side communication)

If you are trying to change music only for the client, you don’t actually need to use remote events. You can just play musics on Local Script.

Local Script:

local Sound = game.Workspace:WaitForChild("Sound")

Sound:Play()

If you want to fire an event from the client and handle it on the client, you should use BindableEvents.

Additionally, avoid placing LocalScripts in ServerScriptService, as they won’t function there.

However, your logic for playing music on the server by firing an event from the client works as intended.

oh. what about normal scripts with the run context set to client

That is effectively a local script. It just lets you run it in workspace. The difference between a server and local script is purely what machine it runs on. Bindables are for the same machine, and remote events are for different machines.