1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
require "attackers"
function IsAttacker(unit)
for i,name in ipairs(attackerlist) do
if name == unit:Internal():Name() then
return true
end
end
return false
end
AttackerBehaviour = class(Behaviour)
function AttackerBehaviour:Init()
--game:SendToConsole("attacker!")
self.dead = false
end
function AttackerBehaviour:UnitBuilt(unit)
if unit.engineID == self.unit.engineID then
self:SetInitialState()
self.attacking = false
ai.attackhandler:AddRecruit(self)
end
end
function AttackerBehaviour:UnitDead(unit)
--
end
function AttackerBehaviour:UnitIdle(unit)
if unit.engineID == self.unit.engineID then
self.attacking = false
ai.attackhandler:AddRecruit(self)
end
end
function AttackerBehaviour:AttackCell(cell)
p = api.Position()
p.x = cell.posx
p.z = cell.posz
p.y = 0
self.target = p
self.attacking = true
if self.active then
local u = self.unit:Internal()
u:MoveAndFire(self.target)
else
self.unit:ElectBehaviour()
end
end
function AttackerBehaviour:Priority()
if not self.attacking then
return 0
else
return 100
end
end
function AttackerBehaviour:Activate()
self.active = true
if self.target then
self.unit:Internal():MoveAndFire(self.target)
self.target = nil
else
--ai.attackhandler:AddRecruit(self)
end
end
function AttackerBehaviour:SetInitialState()
local CMD_FIRE_STATE = 45
local CMD_MOVE_STATE = 50
local CMD_RETREAT = 34223
local thisUnit = self.unit
if thisUnit then
local floats = api.vectorFloat()
floats:push_back(2)
thisUnit:Internal():ExecuteCustomCommand(CMD_MOVE_STATE, floats)
thisUnit:Internal():ExecuteCustomCommand(CMD_FIRE_STATE, floats)
local isHeavy = thisUnit:Internal():GetMaxHealth() >= 1250
if (isHeavy) then
thisUnit:Internal():ExecuteCustomCommand(CMD_RETREAT, floats)
end
end
end
function AttackerBehaviour:OwnerDead()
ai.attackhandler:RemoveRecruit(self)
self.attacking = nil
self.active = nil
self.unit = nil
end
|