Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Collection Service only affects the first find?

Asked by 5 years ago

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

Answer this question