Broken/Unexpected Network Ownership Behavior

Hello. Today I was working on a custom character system in which the server only stores information for the Humanoid and the HumanoidRootPart, whereas the client(s) are responsible for all other information (eg. on the server only the Humanoid and HumanoidRootPart exists, whereas on the clients all the limbs are present).

I chose to do this as I wanted to experiment with simulating ragdolls and animations for my upcoming game only on the client, however I came across two roadblocks.

The first of which was Animator behavior. When an Animator is located in Player.Character, it will automatically replicate to the server, however the server does not have the limbs that are being animated present. I believe this impacted how animations played on other clients regardless of that. Non-the-less, this problem isn’t as much of a concern as there have been luau implementation of animations via CFrames and writing to Motor6D transforms.

The bigger of the two roblox came in the form of network ownership replication. When testing my ragdoll in the Local Server Emulator, I came across an issue that could best be described as the Ragdoll working on the Player’s client but not any other players client. The expected behavior is for the Player to reset, and the CollisionConstraints on the fake limbs handle the ragdoll on each players client, however what ends up happening can be seen below.

As can be seen in the images, the server has the RootParts in their expected position, as do the clients. However, on Player1’s client the limbs connected to Player2’s Torso (which itself is welded to Player2’s RootPart) are not following with the ragdoll in a fashion remotely similar to what is seen on Player2’s client.

If anybody has an explanation as to why this may be happening or alternative routes I could explore, I have attached a file to this post showcasing what I believe to be are engine bugs.

Also in the image, Owners are shown is enabled, hence the outlines on the parts and the post title. (since limbs are only rendered on the client).

MAKE SURE TO DISABLE STREAMING ENABLED ALSO

BrokenNetworkOwnership.rbxl (80.0 KB)

3 Likes

Upon lots and lots and lots of trial and error with @Synthlax and @HiddenKaiser, we came to the conclusion that the reason of the issues was a result of a mixture of Assemblies automatically determining the AssemblyRootPart to be the wrong part, as well as some unexpected behavior from the BallSocketConstraints. Upon altering the RootPriorities as well as disabling the BallSocketConstraint Limits, we got expected results from the Ragdoll.

These expected results did not last long however, as upon reopening the file I was struct with the same issue which only dissipated after rewriting to the BallSocketConstraint Limits.

Despite lots of trial and error, we never found a solution and came to the conclusion that constraints should not be used to connect Parts (created on the client) to assemblies created on the server. This should be treated as an engine bug and hopefully this will be solved.

Attached File contains attempts at repairing this issue.
CustomChar.rbxl (79.6 KB)

4 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.