In our game, Aftermath, we are noticing that sometimes when a player is driving a vehicle, and drives in to your streaming radius, there is no SeatWeld replicated to your client. This results in their character (which gets streamed in) falling out of the vehicle, as there’s nothing holding them together.
My friend and I were using an in-game explorer and while playing, someone drove towards us and had this issue. On my client, the VehicleSeat did have a SeatWeld which welded his character to the vehicle. On my friends client, there was no such SeatWeld in the VehicleSeat, so the character was not attached.
As you can see, he is experiencing some-kind of desync with the server, and the Weld is not being replicated to his client. We have no way to reliable recreate this, it is entirely random and only happens on online play. The SeatWeld is created with VehicleSeat#Sit() function, so nothing about this is custom. We have tried testing this with a team test but have never been able to reproduce after hours.
Expected behavior
I expect that all objects that exist on the server are replicated to all clients when they are supposed to be streamed in
How frequently does this occur? More often on some platforms than others?
I assume if you just put the vehicle on a baseplate it doesn’t repro? Is the driver seated well before they are streamed to the clients? If they drive away and come back does it behave the same?
We have tried every possible way we can think of to reproduce this. Never happens on a baseplate. Never happens in studio (Even on our giant 16k x 16k map via team test). Once it happens, even if they drive out of radius (for our game its 3000 studs to stream out), the weld does not seem to get streamed in upon re-entering the streaming radius
Online, scenarios like:
(Clients A,B,C)
Client A joins game and locates C, then Client C gets in a car
Client B joins afterwards, and locates client C
Client A and Client B join game at same time, and locate Client C
Client A and B join game at same time
Client C gets out of car, then back in car, then drives in to streaming distance of both A and B
We have never, not once, reproduced this by ourselves. We have only ever experienced it just after playing the game for awhile. Sometimes it happens pretty quick (~5/10 minutes), sometimes after hours of play, sometimes never at all.
We have no custom logic that touches the seat weld beyond setting the cframe of it for positioning (On the server)
Here’s a video someone took in our discord earlier:
This was determined to be the result of client scripts changing the state of the humanoid on the client. This is resulting in the welds being deleted on the client if the humanoid is modified after the weld has been streamed to the client.
This is expected behavior resulting from client state changes being made.