Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How do I make the ragdoll visible to other Players?

I've found this code that works perfectly and did exactly what I wanted it to do, but on closer inspection I realised that the ragdoll only is visible on your screen...

How the script works is that when the player dies or resets it ragdolls the player and clones the player so it can still be seen after the player has re-spawned, (until it gets cleaned up.)

The problem is that it's only visible to your player how can I fix this?

Script, Named "Ragdoll"

game.Players.PlayerAdded:connect(function(player)
	player.CharacterAdded:connect(function(character)
		local ragdollV3 = script.RagdollV3:Clone()
		ragdollV3.Parent = character
		ragdollV3.Disabled = false
	end)
end)

Script > LocalScript, Named "RagdollV3"

repeat wait() until workspace.CurrentCamera ~= nil
wait(0.001)

local cleanUpTime = 15

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
			Head.face.Texture = "http://www.roblox.com/asset/?id=145854465"
			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 = 100
	fhum.Health = fhum.MaxHealth
end

char.Humanoid.Died:connect(RagdollV3)

Any help is appreciated, :)

This script is for R6...

1 comment

0

The local script is for the client only. Your codes too long for me to read. So if you had your code that changes the player into a ragdoll, and whatever else, only that player would be able to see it. Otherwise, you would have to use a normal script, or remote events.

1 answer

To start off your initial server script makes no sense at all. That's why StarterCharacterScripts exists.

Other than that it's much easier to separate this into two scripts. Your current script can go entirely to the server minus the camera related stuff. Additionally if you need it you can use a second localscript which changes up your camera related settings on death.

This discussion is preserved as it was. New answers, comments, and votes are closed.