mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
134 lines
3.2 KiB
Lua
134 lines
3.2 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
-- Serverside only.
|
|
if ( CLIENT ) then return end
|
|
|
|
local setmetatable = setmetatable
|
|
--local table = table
|
|
local ai = ai
|
|
|
|
module( "ai_task" )
|
|
|
|
--[[---------------------------------------------------------
|
|
ENUMs for which kind of task it is.
|
|
-----------------------------------------------------------]]
|
|
local TYPE_ENGINE = 1
|
|
local TYPE_FNAME = 2
|
|
|
|
--[[---------------------------------------------------------
|
|
Keep track of created tasks
|
|
UNDONE: There's no need for this right now.
|
|
-----------------------------------------------------------]]
|
|
--local Task_Index = {}
|
|
|
|
--[[---------------------------------------------------------
|
|
Task metatable
|
|
-----------------------------------------------------------]]
|
|
local Task = {}
|
|
Task.__index = Task
|
|
|
|
function Task:Init()
|
|
self.Type = nil
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Creates an engine based task
|
|
-----------------------------------------------------------]]
|
|
function Task:InitEngine( _taskname_, _taskdata_ )
|
|
|
|
self.TaskName = _taskname_
|
|
self.TaskID = nil
|
|
self.TaskData = _taskdata_
|
|
self.Type = TYPE_ENGINE
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Creates an engine based task
|
|
-----------------------------------------------------------]]
|
|
function Task:InitFunctionName( _start, _end, _taskdata_ )
|
|
self.StartFunctionName = _start
|
|
self.FunctionName = _end
|
|
self.TaskData = _taskdata_
|
|
self.Type = TYPE_FNAME
|
|
end
|
|
|
|
function Task:IsEngineType()
|
|
return ( self.Type == TYPE_ENGINE )
|
|
end
|
|
|
|
function Task:IsFNameType()
|
|
return ( self.Type == TYPE_FNAME )
|
|
end
|
|
|
|
function Task:Start( npc )
|
|
|
|
if ( self:IsFNameType() ) then self:Start_FName( npc ) return end
|
|
|
|
if ( self:IsEngineType() ) then
|
|
|
|
if ( !self.TaskID ) then self.TaskID = ai.GetTaskID( self.TaskName ) end
|
|
|
|
npc:StartEngineTask( self.TaskID, self.TaskData )
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Start_FName (called from Task:Start)
|
|
-----------------------------------------------------------]]
|
|
function Task:Start_FName( npc )
|
|
|
|
if ( !self.StartFunctionName ) then return end
|
|
--if ( !npc[ self.StartFunctionName ] ) then return end
|
|
|
|
-- Run the start function. Safely.
|
|
npc[ self.StartFunctionName ]( npc, self.TaskData )
|
|
|
|
end
|
|
|
|
function Task:Run( npc )
|
|
|
|
if ( self:IsFNameType() ) then self:Run_FName( npc ) return end
|
|
|
|
if ( self:IsEngineType() ) then
|
|
npc:RunEngineTask( self.TaskID, self.TaskData )
|
|
end
|
|
|
|
end
|
|
|
|
function Task:Run_FName( npc )
|
|
|
|
if ( !self.FunctionName ) then return end
|
|
--if (!npc[ self.StartFunctionName ]) then return end
|
|
|
|
-- Run the start function. Safely.
|
|
npc[ self.FunctionName ]( npc, self.TaskData )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Create a new empty task (this is ai_task.New )
|
|
-----------------------------------------------------------]]
|
|
function New()
|
|
|
|
local pNewTask = {}
|
|
setmetatable( pNewTask, Task )
|
|
|
|
pNewTask:Init()
|
|
|
|
--table.insert( Task_Index, pNewTask )
|
|
|
|
return pNewTask
|
|
|
|
end
|