Player characters with BreakJointsOnDeath disabled don't die while standing on unanchored BaseParts

This has been mentioned before, but the original topic didn’t get enough attention. Hopefully this one might do.

This bug occurs when you reset through the menu with BreakJointsOnDeath set to false, while standing on any BasePart that is unanchored.

I mainly used a chassis model of mine to reproduce the bug, since that’s how I first found it. But i’ve tried with other types of parts and got it to happen too, both in studio and the game client.

Humanoid events such as .Died and even .HealthChanged are not fired, and RespawnTime is completely ignored, meanwhile, the character is dead on the client, but it is actually still (somewhat) alive on the server. Changing Health to 0 or moving the character far enough from the part in the server will actually kill the character.

This is a quite serious issue for me, since I am working on a game with vehicles in it, and BreakJointsOnDeath is disabled in favor of a ragdoll module use in the game. (i. e. a player is sitting or standing on a vehicle, and they decide to reset, chances are they will remain ‘dead’ there until they managed to somehow be moved away from the vehicle, get actually killed or by leaving the game.)

My thoughts on this bug is that it might be related to the network ownership change that happens automically with nearby players, considering the fact that characters die normally when far enough from the BasePart they were standing on.

12 Likes

I’ll have a look into this. Do you have a place file which can be used to repro the issue?

3 Likes

Surely. I made a quick place to test it and go it to reproduce very simply!

BreakJointsBug.rbxl (20.7 KB)

A server script in ServerScriptService on the place disables BreakJointsOnDeath automatically for every player character that is added.

I was thinking about uploading the place I am developing, but I am paranoid that someone may steal it…

2 Likes

maybe use a remote to kill the player if they die on the client

4 Likes

I have been thinking about doing something like that (Changing the reset button callback). I currently haven’t tried that, might aswell try that later.

1 Like

Late reply and kind of a bump, but @LuaShoe’s method works effectively. Setting up a RemoteEvent and firing it on the client when the player’s character dies, and if the character is still alive server-side, the event will kill it, here’s a quick example:

--local script
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")

local Player = Players.LocalPlayer

Player.Character.Humanoid.Died:Connect(function()
	RemoteEvent:FireServer()
end)

--server script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RemoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")

RemoteEvent.OnServerEvent:Connect(function(Player) 
	if Player.Character.Humanoid.Health == 0 then return end
	Player.Character.Humanoid.Health = 0
end)

I guess I will be using this workaround until the bug is fixed.

3 Likes

This is still not fixed. Users are experiencing “infinite deaths” in my game since we use a custom character spawning method, meaning CharacterAutoLoads is disabled. Because of this bug, the .Died event never fires and players get permanently stuck. This is an extremely annoying bug and deters the experience of a lot of players.

5 Likes

Not sure if it’s related, but I got the same issue while I was working on some custom characters, expect that the Died event doesn’t fire on the server even when standing on any kind of part, anchored or not.

However, I noticed that if I go in first person after the death on client, the event then fires. More generally, I noticed that the event doesn’t fire on the server if the character is not moving (so typically when we reset from the Roblox menu), so I have a quick workaround consisting of applying an impulse through the AppyImpulse method on all parts of the character when Died event fires on the client, and now it works.

I hope this gets fixed. I already have some workarounds for other issues too in my games and it is becoming annoying not to do things intuitively.

1 Like

I noticed the same thing while playing in vr, they also used a custom spawning method. I ended up dying repeatedly.
This might be a different bug with similar appearance since it’s vr, but it’s similar enough that it warrants posting here.
This needs to be fixed.

this is 2022 and the bug has not been fixed yet!

1 Like

2023 and the issue hasn’t been fixed yet!

1 Like

has this not been fixed yet or am i doing something wrong, sorry for bumping

I can confirm that this bug is still happening. When Humanoid.BreakJointsOnDeath is set to false, the Humanoid.Died event will 100% of the time fire on the client and not on the server. This bug impacts any game where Player.CharacterAutoLoads is set to false. One can only fix this by setting up a RemoteEvent and making it fire whenever the local player’s character dies.

I made a ragdoll script today and found this issue as well. Similarly to what OP said, this happens whenever I am standing on an unanchored part or near the object (e.g. touching).

I have performed some new tests today regarding the inconsistent triggering of the Humanoid.Died event on the server when Humanoid.BreakJointsOnDeath = false; and my preliminary results suggest that the bug is fixed now.