Fallen Parts Destroy Height is not respawning character!

This would have been an option, but Humanoid.Died isn’t firing when the player fall in the void: the humanoid acts as it was still alive, without setting its state to dead.
I think the issue might be the fallen parts destroy height not firing to kill the player, which is linked to character respawn.

1 Like

well I find out that if you have ragdoll systems they can interfere with some stuff because of the constraints but I can tell a ragdoll system is needed for your game. So I guess the only solution is to use your alternative.

1 Like

Check if the humanoid state changed then check if it changed to state called “Dead” then load the character using :LoadCharacter()

1 Like

Yes, the game does have ragdoll systems. And I probably think that’s the problem. I think it could works if I remove the Motor6Ds when the player falls in the void, allowing him to reset if the humanoid state is firing.

As said above, the humanoid state isn’t switching to Enum.HumanoidStateType.Dead which doesn’t make the player respawn.

When you fall to the void, you dont die but Iyour body parts do, so ye i mesnt to manually check if the Humanoid state switched to Dead then load the charscter

1 Like

you could just put a kill brick under the map

1 Like

Yes, but the “Dead” state isn’t firing, since the humanoid is still regenerating health points, meaning it’s still on a running state and ultimatly didn’t changed its state.

Check if any body parts of the body became nil, then reload the player again

1 Like

I could but this would be inefficient. The whole map does ~16384 studs meaning I would have to place ~8 blocks of a size of 2048 studs, and if the player goes fast enough, he can get through this brick.

so add a check for if the humanoidrootpart Y position is low enough, load character

Okay so i got this:

local voidHeight = workspace.FallenPartsDestroyHeight
local players = game:GetService("Players")
local player = players.LocalPlayer or players.PlayerAdded:Wait()
local character = player.Character or player.CharacterAdded:Wait()
local hmr = character:WaitForChild("HumanoidRootPart")

hmr:GetPropertyChangedSignal("Position"):Connect(function()
	if hmr.Position.Y <= voidHeight then
		print("Player died from falling into the void!")
	else
		print("Player died but did not fall into the void!")
	end
end)

Same here, if the player goes fast enough, this can be problemtic.
I used it before. And if the player goes atleast at -1500 studs (Y velocity) he can get through this condition, allowing him to touch the fallen parts destroying height.

I think you’re thinking a little too deep. How would the player get that fast? You should just ensure theres no way for the player to even end up falling into the void.

PropertyChangedSignal for Position or AssemblyLinearVelocity isn’t firing properly. It’s better to use it in a condition in a RenderStep. But I also tried that. This isn’t really efficient because the player can go faster than the delta time between each frame that check the condition
Thanks for the time though.

I gave u a basic outline of what u can do, u can edit the script to work for u as u want

1 Like

Yes but this would kill the “Roblox” aspect for the game. But it’s fine I just use the PropertyChangedSignal method for the “Parent” of the HumanoidRootPart to check if its parent has been changed to nil using :Destroy

I don’t think the void will trigger any destroy events.

It does. Since it destroys any parts that goes beyond this height, the Parent of each part is set to nil which leads to the part deletion.

I have noticed alot of people had this problem tho.
but i found an old solution of mine, maybe check it

1 Like