В вашем скрипте есть несколько ошибок. Вот исправленная версия скрипта для NPC (Максвелла), который должен следовать за игроком:
local npc = script.Parent -- НПС (Максвелл)
local humanoid = npc:WaitForChild("Humanoid") -- Получаем компонент Humanoid
game:GetService("RunService").Heartbeat:Connect(function()
local nearestPlayer = nil
local shortestDistance = math.huge
-- Находим ближайшего игрока
for _, player in pairs(game.Players:GetPlayers()) do
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local distance = (player.Character.HumanoidRootPart.Position - npc.HumanoidRootPart.Position).Magnitude
if distance < shortestDistance then
shortestDistance = distance
nearestPlayer = player
end
end
end
-- Если нашли игрока, двигаемся к нему
if nearestPlayer and nearestPlayer.Character then
humanoid:MoveTo(nearestPlayer.Character.HumanoidRootPart.Position)
end
end)
Основные исправления и пояснения:
1. Используем RunService.Heartbeat вместо бесконечного цикла while true
2. Правильно обращаемся к методу MoveTo через компонент Humanoid
3. Добавлена проверка на существование ближайшего игрока
4. Скрипт будет искать ближайшего игрока и двигаться к нему
Чтобы скрипт работал:
1. Убедитесь, что у вашего NPC есть компоненты Humanoid и HumanoidRootPart
2. Поместите скрипт внутрь NPC (можно в папку Scripts внутри модели)
3. Установите параметры Humanoid (скорость, здоровье и т.д.) по вашему усмотрению
Если вы хотите добавить дополнительную функциональность, например:
- Максимальное расстояние преследования
- Анимации при движении
- Атаку при приближении
Дайте знать, и я помогу дополнить скрипт этими функциями.
Скрипт: