i finally found a perfect ragdoll script (im too stupid to make my own) only to find that the nut job who made it decided they were not gonna make it work server side and only the dude who died can see his own body
game.Players.PlayerAdded:connect(function(player)
player.CharacterAdded:connect(function(character)
local ragdollV3 = script.RagdollV3:Clone()
ragdollV3.Parent = character
ragdollV3.Disabled = false
end)
end)
this is in a server script just cloning its child (the ragdoll script) into the starter character scripts
brace yourself
--make this work on the server
repeat wait() until workspace.CurrentCamera ~= nil
wait(0.001)
local cleanUpTime = 1000000000 -- change this to whatever you want
local function NewHingePart()
local B = Instance.new("Part")
B.TopSurface = 0 B.BottomSurface = 0
B.Shape = "Ball"
B.Size = Vector3.new(1, 1, 1)
B.Transparency = 1 B.CanCollide = true
return B
end
local function CreateJoint(j_type, p0, p1, c0, c1)
local nj = Instance.new(j_type)
nj.Part0 = p0 nj.part1 = p1
if c0 ~= nil then nj.C0 = c0 end
if c1 ~= nil then nj.C1 = c1 end
nj.Parent = p0
end
local AttactmentData = { --Limb socket attaching to Torso
--["AttachmentTag"] = {part_name, part_attachment, torso_attachment, relative_position}
["RA"] = {"Right Arm", CFrame.new(0, 0.5, 0), CFrame.new(1.5, 0.5, 0), CFrame.new(1.5, 0, 0)},
["LA"] = {"Left Arm", CFrame.new(0, 0.5, 0), CFrame.new(-1.5, 0.5, 0), CFrame.new(-1.5, 0, 0)},
["RL"] = {"Right Leg", CFrame.new(0, 0.5, 0), CFrame.new(0.5, -1.5, 0), CFrame.new(0.5, -2, 0)},
["LL"] = {"Left Leg", CFrame.new(0, 0.5, 0), CFrame.new(-0.5, -1.5, 0), CFrame.new(-0.5, -2, 0)},
}
local collision_part = Instance.new("Part")
collision_part.Name = "CP"
collision_part.TopSurface = Enum.SurfaceType.Smooth
collision_part.BottomSurface = Enum.SurfaceType.Smooth
collision_part.Size = Vector3.new(1, 1.5, 1)
collision_part.Transparency = 1
local camera = workspace.CurrentCamera
local char = script.Parent
function RagdollV3()
char.Archivable = true
local ragdoll = char:clone()
char.Archivable = false
local hdv = ragdoll:FindFirstChild("Head")
--Clears the real character from everything but humanoid
for _, obj in pairs(char:GetChildren()) do
if not obj:IsA("Humanoid") then
obj:destroy()
end
end
--set up the ragdoll
local function scan(ch)
for i = 1, #ch do
scan(ch[i]:GetChildren())
if (ch[i]:IsA("ForceField") or ch[i].Name == "HumanoidRootPart") or ((ch[i]:IsA("Weld") or ch[i]:IsA("Motor6D")) and ch[i].Name ~= "HeadWeld" and ch[i].Name ~= "AttachementWeld") then
ch[i]:destroy()
end
end
end
scan(ragdoll:GetChildren())
local function scanc(ch)
for _, obj in pairs(ch:GetChildren()) do
scanc(obj)
if obj:IsA("Script") or obj:IsA("LocalScript") or ((obj:IsA("Weld") or obj:IsA("Motor6D")) and obj.Name ~= "AttachementWeld") or obj:IsA("ForceField") or (obj:IsA("Snap") and obj.Parent.Name == "Torso")
or obj:IsA("ParticleEmitter")then
obj:destroy()
elseif obj:IsA("BasePart") then
obj.Velocity = Vector3.new(0, 0, 0)
obj.RotVelocity = Vector3.new(0, 0, 0)
if obj.Parent:IsA("Accessory") then
obj.CanCollide = false
end
end
end
end
scanc(ragdoll)
local f_head
local fhum = ragdoll:FindFirstChild("Humanoid")
fhum.HealthDisplayType = Enum.HumanoidHealthDisplayType.AlwaysOff
fhum.PlatformStand = true
fhum.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
fhum.Name = "RagdollHumanoid"
local Torso = ragdoll:FindFirstChild("Torso")
if Torso then
Torso.Velocity = Vector3.new(math.random(), 0.0000001, math.random()).unit * 5 + (Vector3.new(0, 0.15, 0))
local Head = ragdoll:FindFirstChild("Head")
if Head then
camera.CameraSubject = Head
CreateJoint("Weld", Torso, Head, CFrame.new(0, 1.5, 0))
end
for att_tag, att_data in pairs(AttactmentData) do
local get_limb = ragdoll:FindFirstChild(att_data[1])
if get_limb ~= nil then
local att1 = Instance.new("Attachment")
att1.Name = att_tag
att1.CFrame = att_data[2]
att1.Parent = get_limb
local att2 = Instance.new("Attachment")
att2.Name = att_tag
att2.CFrame = att_data[3]
att2.Parent = Torso
local socket = Instance.new("BallSocketConstraint")
socket.Name = att_tag .. "_SOCKET"
socket.Attachment0 = att2
socket.Attachment1 = att1
socket.Radius = 0
socket.Parent = Torso
get_limb.CanCollide = false
local cp = collision_part:Clone()
local cp_weld = Instance.new("Weld")
cp_weld.C0 = CFrame.new(0, -0.25, 0)
cp_weld.Part0 = get_limb
cp_weld.Part1 = cp
cp_weld.Parent = cp
cp.Parent = ragdoll
end
end
end
ragdoll.Name = char.Name.."'s Body"
ragdoll.Parent = workspace.Bodies
game:GetService("Debris"):AddItem(ragdoll, cleanUpTime)
fhum.MaxHealth = 100
fhum.Health = fhum.MaxHealth
end
char.Humanoid.Died:connect(RagdollV3)
thats the ragdoll script (a local script, duh)
you probably dont need all of it to explain how to make it work on the server but just in case you wanted it
ive been trying to do this all day and im sick of it and want to move on to the fun part of scripting my game