Player loses network ownership when falling too fast during ragdoll

How do I prevent this? There is no event for network ownership changing, so even if I hook up setnetworkownership to play on stepped, I get some gross limb detachment.

BfQ4FweWSH

A character’s network owner is always its client.

No need to set network ownership.

And even if there were, you don’t need to set network ownership on Stepped - it won’t change if you set it once.

In other words, your problem is somewhere else.

But the output is quite literally showing :GetNetworkOwner() on the player’s humanoid root part and I am not setting it anywhere else.

Edit: I ended up circumventing this problem entirely by cloning the player’s rig on every client, making the original rig completely invisible and non-collideable, setting the player’s camera subject to be that rig’s head and applying the rig physics on this “decoy rig”.

Although you have a fix, you should still keep in mind that @nicemike40 is right. The client always has network ownership of your original character.

What’s happening here is actually that the joints that are being created are changing network ownership from the client to the server because your character is moving so quickly that the server thinks you’re far away from the joints.

When the server thinks you aren’t near the joints anymore then it changes the network ownership.
But there’s a cool fix I think you can do.
I may be mistaken but I believe that you can add those joints locally and it will still show the ragdoll on the server because of the way Roblox automatically sends your avatar.
If you create the joints locally then their network owner never changes, it will always be the client.

Oh I should also add that I’m saying joints here, but it could be anything that wasn’t specifically created by your automatic character initialization, or has been severely altered.

In this case it’s the HumanoidRootPart right? Perhaps you’re messing with it too much.

1 Like

That can’t possibly be right either, because I tried generating the joints on the client as well, and it still happened. In fact that was the method being used in the gif on the original post.
How can the server get in cahoots over ownership of something that it doesn’t even know exists? lol

Humanoidrootpart was left completely untouched, as well. I only messed with the torso’s joints.
What’s far more likely is that the humanoidstatetype “Physics” (which is the state type I used in this case) converts your character into a plain, basic roblox physics object, joints and automatic network ownership rules included. Which is very odd and probably should be optional behavior, considering physics usually need to be done on a player client anyway (and should in most cases always default to the character’s player).
I hope at some point they add an alternative physics state type with this in mind, although it might cause problems since it’s basically functionally identical to the Died state, minus the default respawn logic.

Edit: For clarification, you need to use the “Physics” or “Dead” state as it is the only way to make bodyparts collideable without some janky workaround of setting it back every frame. We wouldn’t want our parts to clip through the floor, now would we? HOWEVER, an alternative method may be to clone each bodypart, make it invisible and weld it in every part. Therefore the limbs remain collisionless, but the fake bodyparts will remain able to collide freely. I haven’t tested this, not am I certain that it works, but it may work.

2 Likes