Humanoid cannot die when the HumanoidRootPart is anchored and BreakJointsOnDeath is false

Reproduction Steps

1. Open an empty baseplate template in Roblox Studio
2. Start Play Solo with character
3. Using explorer, anchor your HumanoidRootPart
4. Using explorer, set Humanoid.BreakJointsOnDeath to false
5. Try and reset your character.

Expected Behavior

I expect the humanoid health to be set to 0, the Died event to fire, and the player to respawn. None of these things happen, except on the client.

Actual Behavior

When you reset, the client health moves to zero, all animations stop playing, and the client Died event is fired, but the character never respawns. If you move to server view and select the humanoid, the server health is still at 100. If you manually set the server health to 0, the Died event will still not fire and the humanoid will begin healing from the default health script. If you then un-anchor the HumanoidRootPart, the server will finally ‘catch up’ and the humanoid will die.

Workaround

For me, the bug occurred when I tried to anchor the character for a death animation. My workaround was anchoring the RootPart on the server when Died fires, instead of on the client. Since the bug is triggered by the client anchoring the RootPart before the server receives the death event, waiting until after the event is received to anchor resolved the issue. This workaround is specific to what I was trying to do though, there are other possible problem cases this may not apply to.

Issue Area: Engine
Issue Type: Other
Impact: Moderate
Frequency: Constantly
Date First Experienced: 2022-09-08 00:09:00 (-07:00)

19 Likes

I ran into this a while back. It gets in the way of death animations.

Interestingly, if you weld an unanchored HRP to an anchored part (with the same Humanoid conditions), you can sometimes have a character not die too.

3 Likes

Thanks for the report! We’ll follow up when we have an update for you.

8 Likes

To add to this, I can replicate this bug in my game by having the player standing inside an object (like a tent) that the object isn’t technically anchored, but if you die in the tent wall, the body becomes stuck in the tent as described here, the die event won’t fire. When I encountered it, chalked it up to engine weirdness, but I can reproduce it. The same setup is, the “BreakJoinsOnDeath” is false on my players (for ragdoll stuff later on in the game) and oddly enough, if you destroy the tent the player got stuck in, the event will then fire properly. Until then, the player is laying on the ground like they died and from another player’s perspective, the player is stuck on the floor, spinning around, lol.

1 Like

Any update on this? Still on-going & causing issues for my game as it relies on such mechanic.

1 Like

I litterally just experienced this lol. The character refused to die

I’ve been able to track down at least what happens, not sure of the root issue. When this happens and the player Humanoid health is 0 on the player screen, the Health is still good on the server side (it still registers positive health), so the server never fires the death event. Going to try an experiment to see if the Client side code would be able to detect zero health and send that info to the server to properly “kill” the player if they become stuck. :sweat_smile:

A quick test confirmed. I had the server print out what it thinks the player Humanoid health is and then ran the script on the Client that prints out the same info, so I get a reading side by side from the server side and client side at the same time. When the bug happens, the client shows 0 health and the server still shows 100 (when doing a menu reset for example). So at least there is a workaround for this bug, but hopefully it will get some more dev attention to not need a workaround the issue. :grinning: My guess is, when the player does a reset from the menu or dies in some other way, that info never makes it to the server to fire the death event. Just a guess…

I just encountered this issue when making a detain system for a group. Hopefully this can be resolved soon!

I have a ragdoll script that runs in server and my character just refuses to play the death animation and then do a ragdoll. I think it’s worth using Humanoid.Died from the client, and then sending it to the server using Remote Event. But I haven’t tested it yet.

1 Like

this is still happening as of today

1 Like

Adding a reproduction file to this bug report since it is still relevant today, and quite a significant core bug honestly. Humanoids are the essence of Roblox, they have to work flawlessly in any situation. Unsure why this is taking so long to be fixed, especially with all the avatar focus this year?

Anchored assembly humanoid died bug.rbxl (56.0 KB)

5 Likes

Can confirm this is still happening. It’s very annoying that an anchored HumanoidRootPart makes it impossible to kill the Humanoid.

BreakJointsOnDeath False + HumanoidRootPart Anchored results in the Humanoid.Health change not registering if the Humanoid dies and subsequently Humanoid.Died does not run until HumanoidRootPart is unanchored. Has anyone got an idea for a workaround?

I came up with a hacky way of monitoring the health on the client with a client script and if the health remained at 0 for too long (never re-spawns properly), it fires an event to the server and the server kills the humanoid (on the server side) to move along character respawning in a proper way. :worried:

I got an idea. Just gotta make a custom health stat and force respawning :+1:

1 Like

yeah, I believe I just ran Player:LoadCharacter whenever I needed to respawn and the HRP was anchored