Issue with Ballsocket Constraints and PivotTo/CFrame on character ragdolls

So I’ve seen many run into this issue before, and I know a few workaround solutions, but that’s not what I’m trying to achieve with this post, if at all possible.

I’m trying to see if a direct solution can be found to Ballsocket constraints not properly processing/updating in certain scenarios.

The limbs of a character who is ragdolled will hang behind until the root part stops being CFrame’d/Pivoted.
The reason the character is being pivoted is because I have a Client > Server > Client replicator script also running, by the way.

Solutions like having a local copy of the ragdoll, networking every limb’s position (ew), and turning off the faster replicator don’t really appeal to me, but I will resort to them if needed. Since I know these work. (except that second one)

Here’s a snippet of the replicator client script that handles moving the root part of the character:

local function MoveRoot(Elapsed: number)
	for Player: Player, Frames in pairs(playerRoots) do
		
		local angDiff = Frames.current:AngleBetween(Frames.target)
		local posDiff = (Frames.current.Position - Frames.target.Position).Magnitude

		if angDiff > 1.6 or posDiff > 10 then
			Frames.current = Frames.target
		else
			Frames.current = Frames.current:Lerp(Frames.target, 30*Elapsed)
		end
		
		if not Player.Character --[[or Player.Character:HasTag("Ragdolled") commented out for demonstration purposes]] then continue end
		local rootPart: BasePart = Player.Character:FindFirstChild("HumanoidRootPart")
		if not rootPart then continue end
		
		rootPart:PivotTo(Frames.current)
	end
end

The ragdoll script, while custom is functionally run-of-the-mill. Using ballsocket constraints for it’s joints.

demonstration

1 Like

You can just disconnect player from character or remove network ownership:

Disconnecting:

local char = plr.Character
plr.Character=nil
char.Parent=workspace

Removing network ownership:

plr.Character.HumanoidRootPart:SetNetworkOwner(nil)

Sorry if I was unclear, but I don’t think that helps in what I’m trying to get an answer to here.
To put my question bluntly and shortly:

Are ballsocket constraints just scuffed when the thing it’s attached to is being pivoted each frame, and is it anything I can do something about directly.

It looks as if the player still has network ownership of the limbs, and you are updating the server with the torso’s position using the custom replication faster than the client is updating the server with the limb’s position through the built-in replication

Maybe, although I’m not updating any positions on the server. Since it’s Client > Server > Client, but it is probably still about the custom replication being faster than it should be here.

I bit the bullet and made a workaround solution I’m happy with since I dug deeper through posts and found no proper solutions. Since it’s likely just an issue with doing things unintended by the physics engine.