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)
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.
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.
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. 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 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.
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?
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.
i am having this issue. i have an npc that is anchored and it dies if i kill it with a tool that does less damage than its health, but if i use a tool that damages >= than its health, the health goes negative and doesnt fire death event.
You guys can set BreakJointsOnDeath to true when character is anchored and false when unanchoring, the solution is that easy. If your rigs have specific behaviour, just do 2 functions that handle anchor, the solution can be extended.
Humanoid bugs donât seem to get fixed that often.