I have this ragdoll death script, and it randomly started creating an extra Dummy with a Humanoid only. What is causing this?
Summary
repeat wait() until workspace.CurrentCamera ~= nil
wait(0.001)
local cleanUpTime = 180
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 = {
["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 Ragdoll()
char.Archivable = true
local ragdoll = char:clone()
char.Archivable = false
local hdv = ragdoll:FindFirstChild("Head")
for _, obj in pairs(char:GetChildren()) do
if not obj:IsA("Humanoid") then
obj:destroy()
end
end
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.Parent = workspace
game:GetService("Debris"):AddItem(ragdoll, cleanUpTime)
fhum.MaxHealth = math.huge
fhum.Health = fhum.MaxHealth
end
char.Humanoid.Died:connect(Ragdoll)