Hmm, that would make sense about cloning the character and changing the camera. Not really sure about the camera changing since I have never really manipulated the camera’s position. Thank you for replying though!
Also, if anyone never knew, “executable” meant as in ragdolling when it is commanded to ragdoll.
Generally, the Head, and the HumanoidRootPart motors. In addition, this method is also effective for custom NPCs, as long as you add ball sockets. The ballsockets keep the player in place when the motor6Ds are disabled so they don’t fall through the map, hence killing the player.
Edit: I forgot to mention that you have to disable BreakJointsOnDeath.
I’ve tried testing this, but it doesn’t seem to ragdoll. I have a health detector and a disabler. How would you disable Motor6Ds?
I’ve tried doing this:
for i, v in pairs(character:GetDescendants()) do
if v:IsA("Motor6D") and not v.Name == "Neck" and not v.Name == "RootJoint" then
v.Enabled = false
end
end
The reason why it’s not working is because you have not applied Attachments to the Character’s parts.
--Ragdoll insert
for _, v in pairs(character:GetDescendants()) do
if v:IsA("Motor6D") then
local a0,a1 = Instance.new("Attachment"),Instance.new("Attachment")
a0.CFrame = v.C0
a1.CFrame = v.C1
a0.Parent = v.Part0
a1.Parent = v.Part1
local b = Instance.new("BallSocketConstraint")
b.Attachment0 = a0
b.Attachment1 = a1
b.Parent = v.Part0
v:Destroy() --Destroys Motor6D parts, so you might want to save them instead of destroying them.
end
end
I followed a tutorial online that was similar to this but with event listeners. However, it doesn’t work, even though no error shows up.
Code
-- [[ Services ]] --
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
local playerHumanoid = character:WaitForChild("Humanoid")
playerHumanoid.Died:Connect(function()
playerHumanoid.BreakJointsOnDeath = false
for _, v in pairs(character:GetDescendants()) do
if v:IsA("Motor6D") then
local attachment0,attachment1 = Instance.new("Attachment"), Instance.new("Attachment")
attachment0.CFrame = v.C0
attachment1.CFrame = v.C1
attachment0.Parent = v.Part0
attachment1.Parent = v.Part1
local ballConstraint = Instance.new("BallSocketConstraint")
ballConstraint.Attatchment0 = attachment0
ballConstraint.Attatchment1 = attachment1
ballConstraint.Parent = v.Part0
v:Destroy()
end
end
character.HumanoidRootPart.CanCollide = false
end)
end)
end)
OP, I am not too sure of how to approach making that kind of system as I am struggling to make a ragdoll myself. However, once you make a successful ragdoll function, you could place it anywhere else and it won’t have to be placed inside of an event when the player dies.
As for bringing the player back to a normal state, maybe you can mess around with player states and force them to stand up again, destroy the ball constraints and re-enable the Motor6D. That’s what I’ve heard around the forum.
I have tried this, it works. I just disable the motor6ds, and create ballsocket joints. (I also added a revive system where you get up after a certain amount of time), but everytime the humanoid root part gets teleported, when you ragdoll again, your humanoid root part falls out of position and swings around
I think your best bet would be to find one of the R to Ragdoll scripts floating around the forum, and modify it to fire the ragdoll and unragdoll based on your health. You’ll need a script to monitor the health and fire the events. I assume you’d have to have a script regenerating health as well, I don’t know if health goes back up by itself or not.