I am making a zombie staff that summons zombies that will attack players but not you, currently I got the answer but I don't know where I should place the scripts:
Pathfinding (My Script):
local NPC = script.Parent
local Pathfinding = game:GetService("PathfindingService")
local player
game.Players.PlayerAdded:Connect(function(client)
player = client
end)
repeat wait() until player ~= nil
while wait() do
local path = Pathfinding:CreatePath()
path:ComputeAsync(NPC.Torso.Position, player.Character.PrimaryPart.Position)
if path.Status == Enum.PathStatus.Success then
local Positions = path:GetWaypoints()
for i,v in pairs(Positions) do
local position = Instance.new("Part")
position.Parent = game.Workspace
position.Size = Vector3.new(1,1,1)
position.Position = v.Position
position.Transparency = 1
NPC.Humanoid:MoveTo(position.Position)
NPC.Humanoid.MoveToFinished:Wait(2)
position:Destroy()
end
end
end
Script 1:
if torso == thisplayerstorso then return end
Script 2:
local Creator = script.Parent.Creator
function GetPlayerNames()
local players = game:GetService('Players'):GetChildren()
local name = nil
for _, v in pairs(players) do
if v:IsA'Player' then
name = tostring(v.Name)
end
end
return name
end
function GetTorso(part)
local chars = game.Workspace:GetChildren()
local torso = nil
for _, v in pairs(chars) do
if v:IsA'Model' and v ~= script.Parent and v.Name == GetPlayerNames() and not v.Name == Creator.Value then
local charRoot = v:FindFirstChild'HumanoidRootPart'
if (charRoot.Position - part).magnitude < SearchDistance then
torso = charRoot
end
end
end
return torso
end
while wait() do
local path = Pathfinding:CreatePath()
path:ComputeAsync(NPC.Torso.Position, GetTorso(NPC.Torso.Position))
if path.Status == Enum.PathStatus.Success then
local Positions = path:GetWaypoints()
for i,v in pairs(Positions) do
local position = Instance.new("Part")
position.Parent = game.Workspace
position.Size = Vector3.new(1,1,1)
position.Position = v.Position
position.Transparency = 1
NPC.Humanoid:MoveTo(position.Position)
NPC.Humanoid.MoveToFinished:Wait(2)
position:Destroy()
end
end
end
