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

Why is the HumanoidRootPart following me instead of the entire zombie?

Asked by 7 years ago
Edited 7 years ago

I am making a game where I need zombies. So I decided I would start on the zombie. I created the model and currently scripting functionality for it. So I am stuck on the part where I need to make the whole entire zombie move to my location. I got that working, but not how I wanted. The problem is only the HumanoidRootPart is following me instead of the whole zombie model. So is there any reason why this is happening? Do I need to set a PrimaryPart to my zombie model in order for this to work? If I do need to set a primary part what part should I set it to and what in my code do I need to change?

ZombieScript

local self = {}

local maxDistance = 25

local function FindClosestPlayer(zombie)
    local players = game:GetService("Players"):GetPlayers()
    if #players ~= 0 then
        for _, player in ipairs(players) do
            if player.Character then
                local distance = (zombie.HumanoidRootPart.Position - player.Character.HumanoidRootPart.Position).magnitude
                return player
            end
        end
    end
end

local function AttachAiToZombie(zombie)
    spawn(function()
        while wait() do
            local player = FindClosestPlayer(zombie)
            local zombieHumanoid = zombie:FindFirstChild("Humanoid")
            if zombieHumanoid and player then
                zombieHumanoid:MoveTo(player.Character.HumanoidRootPart.Position)
            end
            wait(0.1)
        end
    end)
end

function self:CreateZombie(position)
    local zombie = game.ReplicatedStorage.Assets.ZombiePrefab:Clone()
    zombie.Parent = workspace.Map.Enemies
    zombie:SetPrimaryPartCFrame(CFrame.new(position))
    AttachAiToZombie(zombie)
end

return self

Testing script

local zombieScript = require(game.ServerScriptService.Modules.ZombieScript)

zombieScript:CreateZombie(Vector3.new(0, 10, 0))

EDIT: I found the answer to my question. I had to set the PrimaryPart to my torso then use the SetPrimaryPartCFrame function.

Answer this question