I have a master script for AI handling and I'm trying to implement a basic MoveTo function for all tagged humanoids but it only seems to apply for the first humanoid it finds. I'm not very familiar with collection service so any help is appreciated.

local CollectionService = game:GetService("CollectionService")
local ATTACK_DIST = 1000

for _,zombie in pairs(CollectionService:GetTagged("ZombieHum")) do
	function findPlayerNearestTo(nearestTo)
		local nearestChar, nearestHum, nearestDist
		for _, p in pairs(game.Players:GetPlayers()) do
			if p.Character then
				local hm = p.Character:FindFirstChild("Humanoid")
				if hm and hm.Health > 0 then
					local d = (nearestTo - hm.RootPart.Position).magnitude
					if d <= ATTACK_DIST then
						if nearestDist == nil or d < nearestDist then
							nearestChar = p.Character
							nearestHum = hm
							nearestDist = d
						end
					end
				end
			end
		end
		return nearestChar, nearestHum, nearestDist
	end
	
	local moving = false
	while true do
		local target, tHum, tDist = findPlayerNearestTo(zombie.Parent.HumanoidRootPart.Position)
		if target then
			zombie:MoveTo(tHum.RootPart.Position, tHum.RootPart)
			moving = true
			wait(0.1)
		else
			if moving then
				zombie:MoveTo(zombie.Parent.HumanoidRootPart.Position)
				moving = false
			end
			wait(0.5)
		end
	end
end