What do you want to achieve?
The Bullet to land onto the wall (which it does on the server) for both the server and client.
What is the issue?
For some reason, on client view, it stops close (or in the actual roblox client, the middle of nowhere), doesn’t play a sound, at all, and, claims it’s hit something. However, It actually is fine on the sever (it runs normally)
You are disabling the script? This should not be done from within the script that is running. You should do this externally so it can be disabled/enabled without halting the scripts execution half way through the logic contained in the script. i.e. the sound wont play because you halted the execution and script.Parent.Touched:Connect(function()) wont return.
Okay, so when the player touches the musketball you anchor it and then disable it’s linear velocity on the server? I don’t understand what you are doing here. Disabling of the velocity on the server is halting the movement before it completes on the client. Comment out these two lines:
Do that part on the client when you know the server script has finished. That is a cosmetic effect which is a graphics thing, and those should always be handled locally. The timing and position of the strike is handled by the server, nice funky effects are done on the client.
As a side note, if you want every client to hear the sound you will have to broadcast the sound by sending a message to all clients to play the sound (locally). But make sure you set the position of the Sound, i.e. put it in the bullet hole (which is local) and the volume will change for each client depending on the distance from the vicinity of the strike.