-- 移动行为 --> Services local ServerStorage = game:GetService("ServerStorage") --> Dependencies local TypeList = require(ServerStorage:WaitForChild("Base").TypeList) local Behaviour = require(ServerStorage:WaitForChild("Base").Behaviour) local MobsProxy = require(ServerStorage:WaitForChild("Proxy").MobsProxy) -------------------------------------------------------------------------------- local Move = {} Move.__index = Move setmetatable(Move, {__index = Behaviour}) local ATTACK_DISTANCE = 8 function Move:Init(PlayerAI, Character: TypeList.Character, Player: Player) local self = Behaviour:Init(PlayerAI, Character, script.Name) self.Player = Player self.Mobs = nil setmetatable(self, Move) return self end function Move:Check(CheckInfo: table) if Behaviour.CheckStat(self) then return -1, self.CheckData end self:CheckClean() self.Mobs = MobsProxy:GetPlayerMobs(self.Player) local closestMob, minDistance = nil, math.huge for _, Mob in self.Mobs do if Mob.Instance and Mob.Instance.PrimaryPart then local dist = (Mob.Instance.PrimaryPart.Position - self.Character.Instance.PrimaryPart.Position).Magnitude if dist < minDistance then minDistance = dist closestMob = Mob end end end self.CheckData = {} if closestMob then local distance = (closestMob.Instance.PrimaryPart.Position - self.Character.Instance.PrimaryPart.Position).Magnitude if distance > ATTACK_DISTANCE then self.CheckData["ClosestCharacter"] = closestMob return 10, self.CheckData end end -- 返回优先级,执行数据 return -1, self.CheckData end function Move:Execute() if self.ExeTask then task.cancel(self.ExeTask) end self.ExeTask = task.spawn(function () self:ChangeExecutingState(true) -- 新移动朝向 local TargetCharacter = self.CheckData["ClosestCharacter"].Instance local TargetPosition = TargetCharacter:GetPivot().Position local CharacterPosition = self.Character.Instance:GetPivot().Position local Direction = (TargetPosition - CharacterPosition).Unit local MoveToPosition = TargetPosition - (Direction * ATTACK_DISTANCE) self.Character.Humanoid:MoveTo(MoveToPosition) -- 旧内容 -- self.Character.Humanoid:MoveTo(self.CheckData["ClosestCharacter"].Instance:GetPivot().Position) task.wait(0.2) self:ChangeExecutingState(false) end) end return Move