I have a script inside an NPC zombie where limbs will de-attach when shot, but it doesn't work in the actual game. I tried local script, WaitForChild variables, but nothing. No output errors are in either test mode or the real game. What's going on here?

local NPC = script.Parent
local Humanoid = script.Parent.Humanoid
local HumanoidClone = script:WaitForChild("HClone")
local Weld = script:WaitForChild("Welding")
local ready = true

local function Deattach(upper,lower,extremity)
	local hc = HumanoidClone:Clone()
if upper ~= nil then
	local c1 = upper:Clone()
	c1.CanCollide = true c1.CFrame = upper.CFrame
		upper:remove()
for i,v in pairs(c1:GetChildren()) do
	v:remove()
end
	c1.Parent = hc
end
if lower ~= nil then
	local c2 = lower:Clone()
	c2.CanCollide = true c2.CFrame = lower.CFrame
		lower:remove()
if upper == nil then
for i,v in pairs(c2:GetChildren()) do
	v:remove()
end end
	c2.Parent = hc
end
if extremity ~= nil then
	local c3 = extremity:Clone()
	c3.CanCollide = true c3.CFrame = extremity.CFrame
		extremity:remove()
if lower == nil then
for i,v in pairs(c3:GetChildren()) do
	v:remove()
end end
	c3.Parent = hc
end
	local wc = Weld:Clone()
		wc.Parent = hc
		wc.Disabled = false
		hc.Parent = workspace
end

Humanoid.Touched:connect(function(hit,limb)
local leftupperarm = NPC:FindFirstChild("LeftUpperArm")
local leftlowerarm = NPC:FindFirstChild("LeftLowerArm")
local lefthand = NPC:FindFirstChild("LeftHand")

local rightupperarm = NPC:FindFirstChild("RightUpperArm")
local rightlowerarm = NPC:FindFirstChild("RightLowerArm")
local righthand = NPC:FindFirstChild("RightHand")

local leftupperleg = NPC:FindFirstChild("LeftUpperLeg")
local leftlowerleg = NPC:FindFirstChild("LeftLowerLeg")
local leftfoot = NPC:FindFirstChild("LeftFoot")

local rightupperleg = NPC:FindFirstChild("RightUpperLeg")
local rightlowerleg = NPC:FindFirstChild("RightLowerLeg")
local rightfoot = NPC:FindFirstChild("RightFoot")
	if ready == true then
		ready = false
	if hit.Name == "Baseplate" then return end
		print(hit,limb)
	if hit.Name == "BulletTexture" then
		if string.sub(limb.Name,1,4) == "Left" or string.sub(limb.Name,1,5) == "Right" then
			if limb.Name == "LeftUpperArm" then
				Deattach(limb,leftlowerarm,lefthand)
			elseif limb.Name == "LeftLowerArm" then
				Deattach(nil,limb,lefthand)
			elseif limb.Name == "LeftHand" then
				Deattach(nil,nil,limb)
			elseif limb.Name == "RightUpperArm" then
				Deattach(limb,rightlowerarm,righthand)
			elseif limb.Name == "RightLowerArm" then
				Deattach(nil,limb,righthand)
			elseif limb.Name == "RightHand" then
				Deattach(nil,nil,limb)
				elseif limb.Name == "LeftUpperLeg" then
					Deattach(limb,leftlowerleg,leftfoot)
				elseif limb.Name == "LeftLowerLeg" then
					Deattach(nil,limb,leftfoot)
				elseif limb.Name == "LeftFoot" then
					Deattach(nil,nil,limb)
				elseif limb.Name == "RightUpperLeg" then
					Deattach(limb,rightlowerleg,rightfoot)
				elseif limb.Name == "RightLowerLeg" then
					Deattach(nil,limb,rightfoot)
				elseif limb.Name == "RightFoot" then
					Deattach(nil,nil,limb)
			end		
		end
	hit:remove()
	end
	if hit.Parent:FindFirstChild("Humanoid") and game.Players:FindFirstChild(hit.Parent.Name) then
		hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - 5
	end
	end
wait()
ready = true
end)

1 comment

0

Bruh just breakjoints() if it's a limb.. too much code for anyone to sort through.