When streaming enabled is turned on, a weld’s C0 that have changed outside of a player’s radius (specifically accessorywelds) are not replicated to a player that then streams then in.
This image shows a hat that has had the C0 on the weld modified. This is what Player1 would see on their client.
Player2 then joins the server. Player1 is outside of Player2’s streaming radius. Player2 walks towards Player1.
To replicate the bug:
Start a server.
Click the “Change Weld” button.
Walk out of streaming radius (past purple part until you can’t see the spawn.)
Load another player into the server.
Using Legacy or Improved ModelStreamingBehavior does not affect this bug. Neither does setting the models containing welds to be Atomic, NonAtomic or Persistent. EDIT: This issue seems to only affect when the player model (or model containing the welds) is set to Persistent streaming, at least from my findings.
In the repro place you are setting a weld using a LocalScript, which means the changes are not replicated to anyone and only the player that runs the script sees them.
When I ran your test place in Roblox Studio in Play mode, I could see the desync immediately as you press the “Change Weld” button. Which is the behavior I would expect.
What about motor6ds locally for your own character? I’ve been seeing this occur with animations in one of our games Glacier Rebirth, despite this never having been an issue before until around last week. It’s quite inconsistent and hard to test, but if you join a big server through the server browser in the menu you might be able to experience it.
You can get guns as a Roblox Admin by typing !guns in the chat, in case it’s needed for investigating.
It’s hard to get a proper repro for this since it’s been inconsistent… some times when you spawn in, your animations are broken, some times it’s the other players’, but it does seem to be different per player.
For example, while your own animations look broken for yourself, other players will see them just fine. Or the opposite some times, where you see the other player with broken animations, but they see their own animations just fine…
Motor6Ds have specialized replication logic that allows Client → Server → Other Clients depending on NetworkOwnership.
But it uses a complex legacy mechanism that is reserved for replicating Client-Authoritative Physics Simulation. This mechanism doesn’t have the same “eventual consistency” guarantees our regular replication path has, and I can imagine there being a desync if you stream something in that was manually animating Motor6Ds.
If you have a repro with Motor6Ds, especially for something that worked before or is inconsistent, I can take a look. I’m currently working on a system to replace the legacy replication system that should address some of these “eventually consistency” bugs, but would want to verify before I promise that.
Well, theres actually an even larger issue with motor6ds. If you have an accessory manually (via code) changed to another limb by altering its Attachment name and Weld.Part1, when the character is streamed in, an extra Motor6d is copied from the limb in question and placed inside the accessory, and will break limb appearances as it disables the actual motor6d in that limb. Yet on the server, nothing is wrong.
In my own game (in fact OP had published this at my request, thanks Dare), its most certainly a streaming issue with the c0/c1. The server can set the welds to whatever you want, but the moment the character is streamed in, the welds will be client-sidedly (as in on the client of the person observing the other person streaming in) reverted back to defaults or other values. It’s caused a lot of annoyance with my character customizer.
I have found other issues with the accessory system and streaming enabled if you’re willing to hear it as well.
My mistake - I’m not really sure how I forgot to communicate between server and client for the repro. Oops.
I can confirm that this is still a present issue, as I’ve seen it happen in live games. As @InfiniteYield mentioned this is a problem that the two of us have found affecting both of our games.
The motor6d issues mentioned by both @MetatableIndex and @InfiniteYield seem to be an existing issue as well, but I’ve been unable to create a reliable enough repro to demonstrate it.
I’ve attached below an amended version of a reproduction for the weld bug that communicates the change between client and server properly. As you’ll see, the desync is still present.
Server view
Player1 view
Player2 view
This issue still affects both the C0 and C1 values. However, this only seems to be present with persistent streaming enabled for the player character.
I’ll also update my original post with these changes.
I’m not sure what exactly causes this but it’s been happening since around the time this post was made…
Animations have a chance of breaking upon spawning in resulting in weird situations where guns stick to the right side of the hand, legs seem “broken”, people clip into the ground, etc.
I am having this issue too.
Lots of players are pretty much broken and stretching in really weird ways. This specifically happens when the player walks out of the streaming zone after loading new (inserted) accessories 'n whatnot.