В вашем коде есть несколько ошибок, которые могут вызывать проблемы в его работе. Давайте рассмотрим их по порядку:
Неправильное объявление переменной
targetPlayer: Вы объявили переменную какnillocal, что является синтаксической ошибкой. Правильный способ объявления переменной — это просто использоватьlocal. Исправьте строку на:local targetPlayer = nilОтсутствие проверки на наличие
HumanoidRootPartдляRig: Убедитесь, чтоRigимеетHumanoidRootPart, перед тем как пытаться работать с его позицией. Можно добавить условие:if Rig and Rig:FindFirstChild("HumanoidRootPart") thenПробелы и отступы: В вашем коде отступы местами нарушены. Это может затруднить чтение и понимание кода. Например:
local function updateTarget() local newTarget = findClosestPlayer() if newTarget and newTarget ~= targetPlayer then targetPlayer = newTarget path:Run(targetPlayer) elseif targetPlayer and (Rig.HumanoidRootPart.Position - targetPlayer.Position).magnitude > targetDistanceThreshold then targetPlayer = nil path:Stop() end endОбработка ошибок в функции: Рекомендуется обрабатывать ситуацию, когда
targetPlayerравенnil, перед обращением к его свойствам. Например, перед строчкой:if targetPlayer and (Rig.HumanoidRootPart.Position - targetPlayer.Position).magnitude > targetDistanceThreshold thenДобавьте проверку:
if targetPlayer and targetPlayer.Position thenЦиклы и задержки: Использование
wait(0.1)в цикле может вызвать замедление работы, когда много игроков. Если количество обновлений не критично, попробуйте увеличить интервал.Проверка на
nilдляclosestPlayer: В функцииfindClosestPlayer()также важно убедиться, что переменнаяcharacterи егоHumanoidRootPartсуществуют, перед тем как использовать их свойства.
После внесения этих изменений, вы сможете лучше видеть, как работает ваш код, и устранить существующие ошибки. Удачи в программировании!
