So since I started my game one year ago, there has been one issue I couldn’t really fix:
When the player falls off the map, he doesn’t respawn !
It’s really problematic and I don’t think it’s because of any scripts in the game because it has been an issue since I started the game.
The issue in video:
The method :GetPropertyChangedSignal isn’t firing aswell.
The alternative method I’ve been using for over a year now is that a local script kills the player before he reaches the fallen parts destroy height, allowing him to reset, but it would be cool if it could work normally…
So does anyone have any ideas why it doesn’t works ?
Thanks for reading !
I found an alternative: checking if the parent of a child of the player’s character has changed using :GetPropertyChangedSignal() (yeh I previously tried with the character) then use :LoadCharacter()
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.
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.
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.
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
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.
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.
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.
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