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

Why is HumanoidRootPart attempt index nil?

i've been using bodyGyro to point my Tower to Enemy using HumanoidRootPart but it index nil. it was working before bodyGyro so I'm guessing it's something in the bodyGyro part. I can't seem to find where the error originated. The Debugger said the error is in the "local distance = (target.HumanoidRootPart.Position - newTower.HumanoidRootPart.Position).Magnitude" part


function FindNearestTarget(newTower)
	local maxDistance = 5
	local nearestTarget = nil

	for i, target in ipairs(workspace.Mobs:GetChildren()) do
		local distance = (target.HumanoidRootPart.Position - newTower.HumanoidRootPart.Position).Magnitude
		if distance < maxDistance then
			nearestTarget = target
			maxDistance = distance
		end
	end

	return nearestTarget
end

function tower.Attack(newTower)
	local target = FindNearestTarget(newTower)
	
	if target and target:FindFirstChild("Humanoid") and target.Humanoid.Health > 0 then
		animateTowerEvent:FireAllClients(newTower, "Attack")

		local targetCFrame = CFrame.lookAt(newTower.HumanoidRootPart.Position, target.HumanoidRootPart.Position)
		newTower.HumanoidRootPart.BodyGyro.CFrame = targetCFrame
		
		target.Humanoid:TakeDamage(25)
	end

	task.wait(1)
	
	
	tower.Attack(newTower)
end

function tower.Spawn(player, name, cframe)
	local towerExists = ReplicatedStorage.Towers:FindFirstChild(name)
	
	if towerExists then
		local newTower = towerExists:Clone()
		newTower.HumanoidRootPart.CFrame = cframe
		newTower.Parent = workspace
		newTower.HumanoidRootPart:SetNetworkOwner(nil)
		
		local bodyGyro = Instance.new("BodyGyro")
		bodyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
		bodyGyro.D = 0
		bodyGyro.CFrame = newTower.HumanoidRootPart.CFrame
		bodyGyro.Parent = newTower.HumanoidRootPart

		for i, object in ipairs(newTower:GetDescendants()) do
			if object:IsA("BasePart") then
				PhysicsService:SetPartCollisionGroup(object, "Tower")
			end
		end
		
		coroutine.wrap(tower.Attack())(newTower)
	else
		warn("Resquested Tower does not exist:", name)
	end
end

return tower

1 answer

Try changing:

local distance = (target.HumanoidRootPart.Position - newTower.HumanoidRootPart.Position).Magnitude

to this:

local distance = (target:WaitForChild("HumanoidRootPart").Position - newTower:WaitForChild("HumanoidRootPart").Position).Magnitude

If this works, PLEASE mark this answer as accepted :)

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