As you all know, if you fire a remote event from the client to handle an animation (so it replicates), there will be a delay, and the client who fired the event won’t animate on that client immediately. To solve this, I have a separate set of welds – one for the client, and one from the server. To do this, I destroy the welds placed by the server from a local script when the character spawns and create welds from that same local script. That way, I can modify the client welds, and they’ll be smooth/instant, and when that event finally gets through, the server animates the character, but doesn’t overwrite the smooth animations of the client.
Calling :Destroy() on anything located in the character replicates to the server, completely ignoring FilteringEnabled. I’ve had to create the welds in a separate model in the workspace called “Player1Joints” so that when I delete them locally, the change does not replicate to the server and delete the server welds. This is very ugly and probably is causing headaches for people who aren’t aware of this when they try to attempt something like this – I know it was a nightmare for me until I found out what the issue was.