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

132 lines
4.9 KiB
Lua

-- $Id: //depot/Projects/StarWars_Steam/FOC/Run/Data/Scripts/AI/LandMode/BurnUnitsLand.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/LandMode/BurnUnitsLand.lua $
--
-- Original Author: Steve_Copeland
--
-- $Author: Brian_Hayes $
--
-- $Change: 637819 $
--
-- $DateTime: 2017/03/22 10:16:16 $
--
-- $Revision: #1 $
--
--/////////////////////////////////////////////////////////////////////////////////////////////////
require("pgevents")
function Definitions()
AllowEngagedUnits = true
IgnoreTarget = true
Category = "Burn_Units_Land"
TaskForce = {
{
"MainForce"
, "TaskForceRequired"
, "DenySpecialWeaponAttach"
}
}
end
function MainForce_Thread()
-- Cheat to wrap the game up if this is a firesale
if (EvaluatePerception("Should_Firesale_Land", PlayerObject) > 0) then
reveal_ai = FogOfWar.Reveal_All(PlayerObject)
MainForce.Set_As_Goal_System_Removable(false)
-- We're now also revealing FOW here for the human player (was previously handled by a hard-coded system)
-- Make sure that there isn't a scripted scenario underway that doesn't want automatic FOW reveals
if Is_Multiplayer_Mode() == false and ((EvaluatePerception("Is_Skirmish_Mode", PlayerObject) == 1) or
(GlobalValue.Get("Allow_AI_Controlled_Fog_Reveal") == 1)) then
reveal_human = FogOfWar.Reveal_All(Find_Player("local"))
end
end
-- Do this at least once (it may just be an attempt to burn off extra units, rather than a firesale)
repeat
-- Cancel all goals
Purge_Goals(PlayerObject)
--Eject garrisons from structures so they can be burned along with everything else.
garrison_table = Find_All_Objects_Of_Type("CanContainGarrison", PlayerObject)
if garrison_table then
for i,unit in pairs(garrison_table) do
if not unit.Is_Category("Vehicle") then
unit.Eject_Garrison()
end
end
Sleep(1)
end
Sleep(1)
-- Use all idle units, mapwide
MainForce.Collect_All_Free_Units()
-- form up any spread out infantry
MainForce.Activate_Ability("SPREAD_OUT", false)
Set_Land_AI_Targeting_Priorities(MainForce)
-- Have each unit attack its nearest enemy structure until success or death
nearest_enemy = Find_Nearest(MainForce, "InBase", PlayerObject, false)
if not TestValid(nearest_enemy) then
nearest_enemy = Find_Nearest(MainForce, PlayerObject, false)
end
while TestValid(nearest_enemy) do
MainForce.Collect_All_Free_Units()
BlockOnCommand(MainForce.Attack_Move(nearest_enemy), 20)
end
-- Only let this happen every so often
Sleep(5)
MainForce.Set_Plan_Result(true)
-- If this is a firesale condition, continue to burn off units
-- This must be done within the same plan because we don't want to destroy the
-- reveal objects turning FOW back on (which would result in the FOW being toggled repeatedly).
until (EvaluatePerception("Should_Firesale_Land", PlayerObject) == 0)
MainForce.Release_Forces(1.0)
Sleep(30)
end
-- Override default event to prevent plan from ending under firesale conditions
-- We want the fog of war reveal for the player to persist.
function MainForce_No_Units_Remaining()
end
function MainForce_Unit_Damaged(tf, unit, attacker, deliberate)
--Override self preservation behavior - the whole purpose of this plan is to kill or be killed
end