Need help fixing up Garry's old fighter NPC

This is from the mirror of the old wiki:



ENT.Base = "base_ai" 
ENT.Type = "ai"
 
ENT.PrintName        = ""
ENT.Author            = ""
ENT.Contact            = ""  //fill in these if you want it to be in the spawn menu
ENT.Purpose            = ""
ENT.Instructions    = ""
 
ENT.AutomaticFrameAdvance = true
 
 
/*---------------------------------------------------------
   Name: OnRemove
   Desc: Called just before entity is deleted
---------------------------------------------------------*/
function ENT:OnRemove()
end
 
 
/*---------------------------------------------------------
   Name: PhysicsCollide
   Desc: Called when physics collides. The table contains 
            data on the collision
---------------------------------------------------------*/
function ENT:PhysicsCollide( data, physobj )
end
 
 
/*---------------------------------------------------------
   Name: PhysicsUpdate
   Desc: Called to update the physics .. or something.
---------------------------------------------------------*/
function ENT:PhysicsUpdate( physobj )
end
 
/*---------------------------------------------------------
   Name: SetAutomaticFrameAdvance
   Desc: If you're not using animation you should turn this 
    off - it will save lots of bandwidth.
---------------------------------------------------------*/
function ENT:SetAutomaticFrameAdvance( bUsingAnim )
 
    self.AutomaticFrameAdvance = bUsingAnim
 
end

if SERVER then

local schdChase = ai_schedule.New( "AIFighter Chase" ) //creates the schedule used for this npc
 
 
    // Run away randomly (first objective in task)
    schdChase:EngTask( "TASK_GET_PATH_TO_RANDOM_NODE",     128 )
    schdChase:EngTask( "TASK_RUN_PATH",                 0 )
    schdChase:EngTask( "TASK_WAIT_FOR_MOVEMENT",     0 )
    schdChase:AddTask( "PlaySequence",                 { Name = "cheer1", Speed = 1 } )
 
    // Find an enemy and run to it (second objectives in task)
    schdChase:AddTask( "FindEnemy",         { Class = "player", Radius = 2000 } )
    schdChase:EngTask( "TASK_GET_PATH_TO_RANGE_ENEMY_LKP_LOS",     0 )
    schdChase:EngTask( "TASK_RUN_PATH",                 0 )
    schdChase:EngTask( "TASK_WAIT_FOR_MOVEMENT",     0 )
 
    // Shoot it (third objective in task)
    schdChase:EngTask( "TASK_STOP_MOVING",             0 )
    schdChase:EngTask( "TASK_FACE_ENEMY",             0 )
    schdChase:EngTask( "TASK_ANNOUNCE_ATTACK",         0 )
    schdChase:EngTask( "TASK_RANGE_ATTACK1",         0 )
    schdChase:EngTask( "TASK_RELOAD",                 0 )
    //schedule is looped till you give it a different schedule
 
 
function ENT:Initialize()
 
    self:SetModel( "models/Humans/Group01/Female_01.mdl" )
 
    self:SetHullType( HULL_HUMAN );
    self:SetHullSizeNormal();
 
    self:SetSolid( SOLID_BBOX ) 
    self:SetMoveType( MOVETYPE_STEP )
 
    self:CapabilitiesAdd( CAP_MOVE_GROUND | CAP_OPEN_DOORS | CAP_ANIMATEDFACE | CAP_TURN_HEAD | CAP_USE_SHOT_REGULATOR | CAP_AIM_GUN )
 
    self:SetMaxYawSpeed( 5000 )
 
    //don't touch stuff above here
    self:SetHealth(100)
    self:Give( "weapon_ak47" ) //Can be given sweps.
 
end
 
 function ENT:OnTakeDamage(dmg)
  self:SetHealth(self:Health() - dmg:GetDamage())
  if self:Health() <= 0 then //run on death
  self:SetSchedule( SCHED_FALL_TO_GROUND ) //because it's given a new schedule, the old one will end.
  end
 end 
 
 
/*---------------------------------------------------------
   Name: SelectSchedule
---------------------------------------------------------*/
function ENT:SelectSchedule()
 
    self:StartSchedule( schdChase ) //run the schedule we created earlier
 
end

end

if CLIENT then

ENT.RenderGroup = RENDERGROUP_BOTH
 
/*---------------------------------------------------------
   Name: Draw
   Desc: Draw it!
---------------------------------------------------------*/
function ENT:Draw()
    self:DrawModel()
end
 
/*---------------------------------------------------------
   Name: DrawTranslucent
   Desc: Draw translucent
---------------------------------------------------------*/
function ENT:DrawTranslucent()
 
    // This is here just to make it backwards compatible.
    // You shouldn't really be drawing your model here unless it's translucent
 
    self:Draw()
 
end
 
/*---------------------------------------------------------
   Name: BuildBonePositions
   Desc: 
---------------------------------------------------------*/
function ENT:BuildBonePositions( NumBones, NumPhysBones )
 
    // You can use this section to position the bones of
    // any animated model using self:SetBonePosition( BoneNum, Pos, Angle )
 
    // This will override any animation data and isn't meant as a 
    // replacement for animations. We're using this to position the limbs
    // of ragdolls.
 
end
 
 
 
/*---------------------------------------------------------
   Name: SetRagdollBones
   Desc: 
---------------------------------------------------------*/
function ENT:SetRagdollBones( bIn )
 
    // If this is set to true then the engine will call 
    // DoRagdollBone (below) for each ragdoll bone.
    // It will then automatically fill in the rest of the bones
 
    self.m_bRagdollSetup = bIn
 
end
 
 
/*---------------------------------------------------------
   Name: DoRagdollBone
   Desc: 
---------------------------------------------------------*/
function ENT:DoRagdollBone( PhysBoneNum, BoneNum )
 
    // self:SetBonePosition( BoneNum, Pos, Angle )
 
end


I get an error regarding engine tasks upon trying to use this bot. What went wrong?

[editline]22nd July 2015[/editline]

[ERROR] lua/includes/modules/ai_task.lua:117: bad argument #1 to ‘RunEngineTask’ (number expected, got nil)

  1. RunEngineTask - [C]:-1
  2. Run - lua/includes/modules/ai_task.lua:117
    3. RunTask - gamemodes/base/entities/entities/base_ai/schedules.lua:148
    4. DoSchedule - gamemodes/base/entities/entities/base_ai/schedules.lua:71
    5. unknown - gamemodes/base/entities/entities/base_ai/schedules.lua:22

[editline]22nd July 2015[/editline]

NOTE: Sorry for forgetting an end in the code, I quickly put it together due to how impatient I am right now >_<, but in the actual code there’s the necessary end. I can’t edit it due to the text not showing up in the edit mode, too. Sucks.

[editline]22nd July 2015[/editline]

EXTRA NOTE: For some reason the | operator doesn’t work in the CapabilitiesAdd func, after I replaced them with “or” they worked fine, but I still get the error revolving around engine tasks on the bot being spawned.

Oh god… There is just so many things wrong. For a start, you need to recreate the animation system which is ran from the task.

You shouldn’t have replaced | with “or”. That was a binary operator. Use bit.bor(arg1,arg2) instead.
As for your other issues… Good luck, man.