Hey there! In roblox, ragdoll is made via looping through the character’s Motor6Ds, and disabling them. (via for loop). Motor6Ds have C0, Part0, C1, and Part1 attributes. Make 2 Attachments via script and parent the first Attachment to Part0, and the second Attachment to Part1. Then, set the CFrame attribute for Attachment 1 to C0, and set Attachment 2s CFrame to, you guessed it… C1. Then, make a BallSocketConstraint. Set attachment0 to our first Attachment and attachment1 to our second Attachment. Then set LimitsEnabled and TwistLimitsEnabled to true, and parent the BallSocketConstraint to the parent of the Motor6D.
To disable ragdoll, you would need to destroy all Attachments and BallSocketConstraints that do our ragdoll, enabling all Motor6Ds in the process.
A handy module for this would look somewhat like the following…
local ragdollHandler = {}
function ragdollHandler:ragdoll(character, duration)
for index, joint in pairs(character:GetDescendants()) do -- Loop Through Every Descendant of the Character
if joint:IsA("Motor6D") then -- Is the Joint a Motor6D?
local attachment1 = Instance.new("Attachment") -- Attachment 1
attachment1.Name = "Ragdoll Attachment"
attachment1.CFrame = joint.C0
attachment1.Parent = joint.Part0
local attachment2 = Instance.new("Attachment") -- Attachment 2
attachment2.Name = "Ragdoll Attachment"
attachment2.CFrame = joint.C1
attachment2.Parent = joint.Part1
local socket = Instance.new("BallSocketConstraint") -- Make a BallSocketConstraint
socket.Name = "Ragdoll BallSocketConstraint"
socket.Attachment0 = attachment1 -- Set "attachment0" to the first attachment we made
socket.Attachment1 = attachment2 -- Set "attachment1" to the second attachment we made
socket.LimitsEnabled = true
socket.TwistLimitsEnabled = true
socket.Parent = joint.parent -- Parent the BallSocketConstraint to Motor6Ds parent
joint.Enabled = false
task.delay(duration, function() -- In a separate thread, after our duration, disable ragdoll
socket:Destroy()
attachment1:Destroy()
attachment2:Destroy()
joint.Enabled = true
end)
end
end
end
return ragdollHandler