195 lines
6.1 KiB
Lua
195 lines
6.1 KiB
Lua
-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/AI/SpaceMode/BombingRun.lua#1 $
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
--
|
|
-- (C) Petroglyph Games, Inc.
|
|
--
|
|
--
|
|
-- ***** ** * *
|
|
-- * ** * * *
|
|
-- * * * * *
|
|
-- * * * * * * * *
|
|
-- * * *** ****** * ** **** *** * * * ***** * ***
|
|
-- * ** * * * ** * ** ** * * * * ** ** ** *
|
|
-- *** ***** * * * * * * * * ** * * * *
|
|
-- * * * * * * * * * * * * * * *
|
|
-- * * * * * * * * * * ** * * * *
|
|
-- * ** * * ** * ** * * ** * * * *
|
|
-- ** **** ** * **** ***** * ** *** * *
|
|
-- * * *
|
|
-- * * *
|
|
-- * * *
|
|
-- * * * *
|
|
-- **** * *
|
|
--
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
-- C O N F I D E N T I A L S O U R C E C O D E -- D O N O T D I S T R I B U T E
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
--
|
|
-- $File: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/AI/SpaceMode/BombingRun.lua $
|
|
--
|
|
-- Original Author: Steve_Copeland
|
|
--
|
|
-- $Author: Brian_Hayes $
|
|
--
|
|
-- $Change: 637819 $
|
|
--
|
|
-- $DateTime: 2017/03/22 10:16:16 $
|
|
--
|
|
-- $Revision: #1 $
|
|
--
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
require("pgevents")
|
|
|
|
function Definitions()
|
|
|
|
AllowEngagedUnits = false
|
|
IgnoreTarget = true
|
|
Category = "Bomb_Unit"
|
|
TaskForce = {
|
|
{
|
|
"BomberForce"
|
|
,"Bomber = 3,10"
|
|
},
|
|
{
|
|
"FighterForce"
|
|
,"Fighter = 1,4"
|
|
}
|
|
}
|
|
|
|
direction_table = {
|
|
"back"
|
|
,"left"
|
|
,"right"
|
|
}
|
|
|
|
convenient_space_field_range = 2000
|
|
path_through = "ASTEROID | NEBULA" -- "ASTEROID | NEBULA | ION_FIELD"
|
|
time_to_drop_bombs = 2
|
|
bombers_reinforced = false
|
|
rallied = false
|
|
send_fighters = false
|
|
|
|
end
|
|
|
|
function BomberForce_Thread()
|
|
|
|
BlockOnCommand(BomberForce.Produce_Force())
|
|
BomberForce.Set_As_Goal_System_Removable(false)
|
|
|
|
QuickReinforce(PlayerObject, AITarget, BomberForce, FighterForce)
|
|
bombers_reinforced = true
|
|
|
|
-- Do some setup if the bombers arent' already too close
|
|
-- Also, don't bother with this setup if the tactical game is well underway
|
|
if (BomberForce.Get_Distance(AITarget) > 1000) and (EvaluatePerception("Game_Age", PlayerObject) < 360) then
|
|
|
|
BomberForce.Set_Targeting_Priorities("Bomber_Hit_And_Run", "Bomber")
|
|
send_fighters = true
|
|
|
|
BomberForce.Activate_Ability("SPOILER_LOCK", true)
|
|
|
|
-- Try to let the fighters get ahead of the bombers
|
|
while not Fighters_Closer_To_Target() and not Fighters_Engaged_Target() do
|
|
Obscure(BomberForce, 1000, true, "ASTEROID | NEBULA")
|
|
Sleep(1)
|
|
end
|
|
|
|
end
|
|
|
|
DebugMessage("bomber force target: %s", tostring(AITarget))
|
|
BlockOnCommand(BomberForce.Attack_Target(AITarget, BomberForce.Get_Self_Threat_Max()))
|
|
|
|
ScriptExit()
|
|
end
|
|
|
|
|
|
function Fighters_Closer_To_Target()
|
|
if BomberForce.Get_Force_Count == 0 or (not TestValid(FighterForce)) or FighterForce.Get_Force_Count == 0 then
|
|
return false
|
|
elseif FighterForce.Get_Distance(AITarget) < BomberForce.Get_Distance(AITarget) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
|
|
function Fighters_Engaged_Target()
|
|
return TestValid(FighterForce) and (FindDeadlyEnemy(FighterForce) == AITarget)
|
|
end
|
|
|
|
|
|
-- Handle a hardpoint achieving range on the attack target
|
|
function BomberForce_Hardpoint_Target_In_Range(tf, unit, target)
|
|
|
|
BomberForce.Activate_Ability("SPOILER_LOCK", false)
|
|
|
|
-- Create a timer for this squadron to flee after it's had a chance to drop the rest of it's bombs
|
|
--Register_Timer(Repeat_Attack, time_to_drop_bombs, unit)
|
|
end
|
|
|
|
|
|
function Repeat_Attack(unit)
|
|
run_target = FindTarget(BomberForce, "Good_Space_Artillery_Area", "Tactical_Location", 0.8, 3000.0)
|
|
if run_target then
|
|
MessageBox("%s %.3f -- Bomber squad fleeing to %s.", tostring(Script), GetCurrentTime(), tostring(run_target))
|
|
GoKite(BomberForce, unit, run_target, false)
|
|
Sleep(4)
|
|
end
|
|
|
|
unit.Attack_Target(AITarget)
|
|
|
|
-- Once one attack is done, we'll let desirability drops end the plan
|
|
BomberForce.Set_As_Goal_System_Removable(true)
|
|
end
|
|
|
|
|
|
function FighterForce_Thread()
|
|
BlockOnCommand(FighterForce.Produce_Force())
|
|
|
|
QuickReinforce(PlayerObject, AITarget, FighterForce, BomberForce)
|
|
|
|
SetClassPriorities(FighterForce, "Attack_Move")
|
|
|
|
Try_Ability(FighterForce, "STEALTH")
|
|
|
|
if (EvaluatePerception("Game_Age", PlayerObject) < 360) then
|
|
while not bombers_reinforced do
|
|
reinforce_target = FindTarget(FighterForce, "Space_Area_Is_Hidden", "Tactical_Location", 0.8, 3000.0)
|
|
if reinforce_target then
|
|
BlockOnCommand(FighterForce.Move_To(reinforce_target), -1, Bombers_Have_Reinforced)
|
|
else
|
|
Sleep(1)
|
|
end
|
|
end
|
|
|
|
-- BlockOnCommand(FighterForce.Move_To(BomberForce, FighterForce.Get_Self_Threat_Max()))
|
|
rallied = true
|
|
|
|
while not send_fighters do
|
|
Escort(FighterForce, BomberForce)
|
|
end
|
|
end
|
|
|
|
BlockOnCommand(FighterForce.Attack_Target(AITarget))
|
|
|
|
end
|
|
|
|
function Bombers_Have_Reinforced()
|
|
return bombers_reinforced
|
|
end
|
|
|
|
--function Fighters_Have_Rallied()
|
|
-- return rallied
|
|
--end
|
|
|
|
|
|
function BomberForce_Original_Target_Destroyed()
|
|
DebugMessage("%s-- killed plan because original target destroyed", tostring(Script))
|
|
ScriptExit()
|
|
end
|
|
|
|
function FighterForce_Original_Target_Destroyed()
|
|
DebugMessage("%s-- killed plan because original target destroyed", tostring(Script))
|
|
ScriptExit()
|
|
end
|