2025-07-07 23:52:31 +08:00
|
|
|
-- 移动行为
|
|
|
|
|
|
|
|
--> Services
|
|
|
|
local ServerStorage = game:GetService("ServerStorage")
|
|
|
|
|
|
|
|
--> Dependencies
|
2025-07-12 05:06:14 +08:00
|
|
|
local TypeList = require(ServerStorage:WaitForChild("Base").TypeList)
|
|
|
|
local Behaviour = require(ServerStorage:WaitForChild("Base").Behaviour)
|
|
|
|
local MobsProxy = require(ServerStorage:WaitForChild("Proxy").MobsProxy)
|
2025-07-07 23:52:31 +08:00
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
local Move = {}
|
|
|
|
Move.__index = Move
|
2025-07-09 23:59:56 +08:00
|
|
|
setmetatable(Move, {__index = Behaviour})
|
2025-07-07 23:52:31 +08:00
|
|
|
|
2025-07-09 02:01:45 +08:00
|
|
|
function Move:Init(PlayerAI, Character: TypeList.Character, Player: Player)
|
2025-07-12 05:06:14 +08:00
|
|
|
local self = Behaviour:Init(PlayerAI, Character, script.Name)
|
2025-07-07 23:52:31 +08:00
|
|
|
self.Player = Player
|
|
|
|
setmetatable(self, Move)
|
|
|
|
return self
|
|
|
|
end
|
|
|
|
|
|
|
|
function Move:Check(CheckInfo: table)
|
|
|
|
if Behaviour.CheckStat(self) then return -1, self.CheckData end
|
|
|
|
|
|
|
|
local PlayerMobs = MobsProxy:GetPlayerMobs(self.Player)
|
2025-07-09 23:59:56 +08:00
|
|
|
if not PlayerMobs then return end
|
2025-07-07 23:52:31 +08:00
|
|
|
|
|
|
|
local closestMob, minDistance = nil, math.huge
|
|
|
|
for _, Mob in PlayerMobs 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
|
|
|
|
self.CheckData["ClosestCharacter"] = closestMob
|
|
|
|
return 10, self.CheckData
|
|
|
|
end
|
|
|
|
|
|
|
|
-- 返回优先级,执行数据
|
|
|
|
return -1, self.CheckData
|
|
|
|
end
|
|
|
|
|
|
|
|
function Move:Execute()
|
|
|
|
self.ExeTask = task.spawn(function ()
|
|
|
|
self:ChangeExecutingState(true)
|
2025-07-09 23:59:56 +08:00
|
|
|
self.Character.Humanoid:MoveTo(self.CheckData["ClosestCharacter"].Instance:GetPivot().Position)
|
2025-07-07 23:52:31 +08:00
|
|
|
task.wait(0.5)
|
|
|
|
self:ChangeExecutingState(false)
|
|
|
|
end)
|
|
|
|
end
|
|
|
|
|
|
|
|
return Move
|