Hi! The topic is quite self explanatory. I want to know the easiest way to make a character ragdoll. I have searched several posts but most don’t work. I also tried using an external module but it gets complicated and interferes with other things.
Place in StarterCharacter
--> LOCAL VARIABLES
local Humanoid = script.Parent:WaitForChild("Humanoid")
--> CODE
Humanoid .BreakJointsOnDeath = false
--> FUNCTIONS
Humanoid.Died:Connect(function()
for index,joint in pairs(script.Parent:GetDescendants()) do
if joint:IsA("Motor6D") then
local socket = Instance.new("BallSocketConstraint")
local a1 = Instance.new("Attachment")
local a2 = Instance.new("Attachment")
a1.Parent = joint.Part0
a2.Parent = joint.Part1
socket.Parent = joint.Parent
socket.Attachment0 = a1
socket.Attachment1 = a2
a1.CFrame = joint.C0
a2.CFrame = joint.C1
socket.LimitsEnabled = true
socket.TwistLimitsEnabled = true
joint:Destroy()
end
end
end)
27 Likes
local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
Humanoid.BreakJointsOnDeath = false
local function OnHumanoidDied()
for _, Part in ipairs(Character:GetChildren()) do
if Part:IsA("BasePart") then
local Motor6D = Part:FindFirstChildWhichIsA("Motor6D")
if Motor6D then
if Part.Name ~= "Head" then
local BallSocket = Instance.new("BallSocketConstraint")
local Attachment1 = Instance.new("Attachment")
local Attachment2 = Instance.new("Attachment")
Attachment1.CFrame = Motor6D.C0
Attachment2.CFrame = Motor6D.C1
Attachment1.Parent = Motor6D.Part0
Attachment2.Parent = Motor6D.Part1
BallSocket.Attachment0 = Attachment1
BallSocket.Attachment1 = Attachment2
BallSocket.Parent = Motor6D.Parent
Motor6D:Destroy()
elseif Part.Name == "Head" then
local WeldConstraint = Instance.new("WeldConstraint")
WeldConstraint.Part0 = Motor6D.Part0
WeldConstraint.Part1 = Motor6D.Part1
WeldConstraint.Parent = Motor6D.Parent
end
end
end
end
end
Humanoid.Died:Connect(OnHumanoidDied)
Just a slight improvement with the head fixed.
14 Likes
I’d recommend :Once() instead of :Connect() in this case.
7 Likes
I love bumping old threads
also, every time a player respawns, Player.Character will always have a different Humanoid than last time, so you cannot re-use the same Humanoid including the Connect function
7 Likes
its a different script each character bro
5 Likes
Doesn’t make a difference in this case since all signals of an Instance are disconnected auto when the Instance is destroyed
The Humanoid instance is not destroyed immedietly. There are rare cases when .Died can fire multiple times. There are several devforum posts about this issue.