Explosions Not Destroying Character Joints on Server

When nearby to a small explosion there’s a desynchronisation in joints broken on a client vs the server.

For example if a character walks over a small explosive, the client will see their legs have been destroyed, however on the server they are still there. The client has destroyed the leg Motors but the server has not. Sometimes this can even result in the HumanoidRootPart detaching from the rest of the character locally as seen in the video below.

This will often cause a glitch where a player see’s their legs and other parts floating destroyed in the air and sometimes their character physics might start floating upwards or in weird directions.

I don’t know when this bug first started occurring, I only came across it a few days ago.


ExplosionBugRepro.rbxl (55.6 KB)

Expected behavior

During a server-side explosion the character joints destroyed should be consistent between server and client.

I’m not sure why there’s this difference, surely a server-side explosion should determine joints destroyed.

EDIT:
Seems the behaviour I’m experienced is impacted by the “RejectCharacterDeletions” property in Workspace. When this is switched from Default to Disabled joints are destroyed equally again.

However I’m still frequently getting the issue where the HumanoidRootPart is disconnected from the character and can continue to walk around with the character left on the floor. (I believe this is because the “Root” Motor in the LowerTorso doesn’t trigger a character death when destroyed like it probably should do, only the “Neck” motor will kill a humanoid when destroyed (this is likely a separate issue).

4 Likes

Glad to see someone else experiencing this—it’s definitely an issue I’m having in my admin game too. Try seeing if breaking the joints or removing the player’s head on touch fixes the problem.

2 Likes

Try turning off “RejectCharacterDeletions” in Workspace. This partially fixes the issue in that there’s no de-sync between client and server, but the HumanoidRootPart will still become disconnected from the rest of the body and walk around as shown in the video.

2 Likes

Yeah, it can even freeze the avatar in place

2 Likes

This is a bug i long time experienced past then, just use Character:BreakJoints() solved the following as workaround.

I upvote the following issue as game breaking.

2 Likes

BreakJoints is deprecated, right? Can we use a better method?

local function breakJointsRecursive(model)
    for _, part in ipairs(model:GetDescendants()) do
        if part:IsA("BasePart") then
            for _, joint in ipairs(part:GetJoints()) do
                joint:Destroy()
            end
        end
    end
end
3 Likes

This is a known issue with Explosion instances, and we will look into a fix.

Otherwise, I’d advise against disabling “RejectCharacterDeletions” since this would be opening you up to various client exploits. Just adding some script for now that destroys character joints on the server within the explosion radius would be safer.

2 Likes