Files
SoaFE/DATA/SCRIPTS/AI/SPACEMODE/MOVETOLOCATIONRUSH.LUA
2026-02-28 14:00:45 -06:00

167 lines
5.7 KiB
Lua

-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/AI/SpaceMode/MoveToLocationRush.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/MoveToLocationRush.lua $
--
-- Original Author: Steve Copeland
--
-- $Author: Brian_Hayes $
--
-- $Change: 637819 $
--
-- $DateTime: 2017/03/22 10:16:16 $
--
-- $Revision: #1 $
--
--/////////////////////////////////////////////////////////////////////////////////////////////////
require("pgevents")
function Definitions()
Category = "Secure_Build_Pad_Space"
IgnoreTarget = false
TaskForce =
{
{
"MainForce"
,"Fighter | Corvette = 1"
},
{
"EscortForce"
,"Fighter | Corvette | Frigate = 0,4"
,"EscortForce"
}
}
AllowEngagedUnits = false
wait_for_build_time = 30
end
function MainForce_Thread()
BlockOnCommand(MainForce.Produce_Force())
QuickReinforce(PlayerObject, AITarget, MainForce, EscortForce)
Try_Ability(MainForce, "Turbo")
Try_Ability(MainForce, "SPOILER_LOCK")
Try_Ability(MainForce, "STEALTH")
-- Move the target to the desired location, with low tolerance threat avoidance.
BlockOnCommand(MainForce.Move_To(AITarget, MainForce.Get_Self_Threat_Max()))
MainForce.Activate_Ability("SPOILER_LOCK", false)
if TestValid(Target) then
if (EvaluatePerception("Is_Build_Pad", PlayerObject, Target) == 1) then
-- Build pads may have an existing enemy structure than needs to be removed
-- Note that the enemy player can build structures late or rebuild destroyed structures, thus the need to repeat.
structure = Target.Get_Build_Pad_Contents()
if (structure == nil) or
(TestValid(structure) and PlayerObject.Get_Faction_Name() ~= structure.Get_Owner().Get_Faction_Name()) then
-- Attack any structure that might be there
if TestValid(structure) then
BlockOnCommand(MainForce.Attack_Target(AITarget))
end
--Wait for control to transition
BlockOnCommand(MainForce.Guard_Target(AITarget), 60, Target_Has_Structure)
--It's been a minute. If we still don't have control then give up
if Target.Get_Owner() ~= PlayerObject then
ScriptExit()
end
-- Guard the spot to give another plan the chance to can something here
-- Wait indefinately, if this is a refinery pad and we have no refineries.
if EvaluatePerception("Is_Refinery_Pad_Space", PlayerObject, Target) == 1 then
wait_for_build_time = -1
end
--MessageBox("%s, %s--Guarding for %d", tostring(Script), tostring(Target), wait_for_build_time)
-- Guard the spot until another plan can build something here
BlockOnCommand(MainForce.Guard_Target(AITarget), wait_for_build_time, Target_Has_Structure)
end
else
-- Stand guard so that we can retain usage of this structure
MainForce.Guard_Target(AITarget)
Sleep(10)
end
end
MainForce.Set_Plan_Result(true)
ScriptExit()
end
-- Does the plan's original Target have a friendlystructure on it?
function Target_Has_Structure()
if TestValid(Target) then
structure = Target.Get_Build_Pad_Contents()
return TestValid(structure)
end
return false
end
-- Override default handling, which will kill the plan
function MainForce_Original_Target_Owner_Changed(tf, old_player, new_player)
DebugMessage("%s -- Original target ownership changed.", tostring(Script))
end
function MainForce_Original_Target_Destroyed(tf)
ScriptExit()
end
function EscortForce_Thread()
BlockOnCommand(EscortForce.Produce_Force())
QuickReinforce(PlayerObject, AITarget, EscortForce, MainForce)
-- Give an initial order to put the escorts in a state that the Escort function expects
EscortForce.Guard_Target(MainForce)
EscortAlive = true
while EscortAlive do
Escort(EscortForce, MainForce)
end
end
function EscortForce_No_Units_Remaining()
EscortAlive = false
end
-- Override default handling, which will kill the plan
function EscortForce_Original_Target_Owner_Changed(tf, old_player, new_player)
DebugMessage("%s -- Original target ownership changed.", tostring(Script))
end