mirror of
https://github.com/FlightControl-Master/MOOSE_MISSIONS.git
synced 2026-08-26 08:43:53 +00:00
Updated Moose.lua
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
local PlanesClientSet = SET_CLIENT:New():FilterCategories( "plane" ):FilterStart()
|
||||||
|
local AirbasePolice = AIRBASEPOLICE_CAUCASUS:New( PlanesClientSet )
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
local PlanesClientSet = SET_CLIENT:New():FilterCategories( "plane" ):FilterStart()
|
||||||
|
local AirbasePolice = AIRBASEPOLICE_NEVADA:New( PlanesClientSet )
|
||||||
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+163
@@ -0,0 +1,163 @@
|
|||||||
|
-- Name: AIB-007 - AI Balancers For all airports and both coalitions
|
||||||
|
-- Author: Delta99
|
||||||
|
-- Date Created: 11 Feb 2017
|
||||||
|
--
|
||||||
|
-- Originally created to solve issues jg7xman (from Moose Slack group) was having in creating
|
||||||
|
-- AI_BALANCER across multiple airbases.
|
||||||
|
|
||||||
|
-- # Situation:
|
||||||
|
--
|
||||||
|
-- AI_BALANCERS created per airbase for both coalitions. Mutiple patrol zones are created
|
||||||
|
-- for each side. Each flight that is created by AI_BALANCER will pick a random patrol zone
|
||||||
|
-- to patrol.
|
||||||
|
|
||||||
|
-- # Test Cases
|
||||||
|
--
|
||||||
|
-- 1. Observe at least 1 flight spawning and taking off from each airbase.
|
||||||
|
-- 2. Each flight patrols randomly in one of its sides zones.
|
||||||
|
-- 3. AI will respawn after killed.
|
||||||
|
-- 4. Additional client slots are available at Sochi. If players don't take a slot there
|
||||||
|
-- will be more than one AI taking off from Sochi.
|
||||||
|
-- 5. Batumi contains a flight of 3 units rather than just 1 like most of the rest of the airbases.
|
||||||
|
-- 6. Watch the coalition AI clash and kill each other.
|
||||||
|
|
||||||
|
-- Create the Red Patrol Zone Array
|
||||||
|
|
||||||
|
-- This zone array will be used in the AI_BALANCER to randomize the patrol
|
||||||
|
-- zone that each spawned group will patrol
|
||||||
|
|
||||||
|
RedPatrolZone = {}
|
||||||
|
RedPatrolZone[1] = ZONE:New( "RedPatrolZone1" )
|
||||||
|
RedPatrolZone[2] = ZONE:New( "RedPatrolZone2" )
|
||||||
|
RedPatrolZone[3] = ZONE:New( "RedPatrolZone3" )
|
||||||
|
RedPatrolZone[4] = ZONE:New( "RedPatrolZone4" )
|
||||||
|
RedPatrolZone[5] = ZONE:New( "RedPatrolZone5" )
|
||||||
|
RedPatrolZone[6] = ZONE:New( "RedPatrolZone6" )
|
||||||
|
|
||||||
|
-- Russian CAP Aircraft
|
||||||
|
|
||||||
|
-- These are the aircraft created in the mission editor that the AI will spawn
|
||||||
|
-- with replacing any CLIENT created aircraft in the mission that a human
|
||||||
|
-- player does not take.
|
||||||
|
|
||||||
|
RU_PlanesSpawn = {}
|
||||||
|
RU_PlanesSpawn[1] = SPAWN:New( "RU CAP Anapa AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[2] = SPAWN:New( "RU CAP Beslan AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[3] = SPAWN:New( "RU CAP Gelendzhik AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[4] = SPAWN:New( "RU CAP Krasnodar Center AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[5] = SPAWN:New( "RU CAP Krasnodar Pashkovsky AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[6] = SPAWN:New( "RU CAP Krymsk AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[7] = SPAWN:New( "RU CAP Maykop AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[8] = SPAWN:New( "RU CAP Mineralnye Vody AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[9] = SPAWN:New( "RU CAP Mozdok AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[10] = SPAWN:New( "RU CAP Nalchik AB" ):InitCleanUp( 45 )
|
||||||
|
RU_PlanesSpawn[11] = SPAWN:New( "RU CAP Novorossiysk AB" ):InitCleanUp( 45 )
|
||||||
|
|
||||||
|
-- Russian Client Aircraft (via AI_BALANCER, AI will replace these if no human players are in the slot)
|
||||||
|
|
||||||
|
-- If you want more client slots per airbase that you want AI to be able to take control of then
|
||||||
|
-- name them with the prefixes below and they will be picked up automatically by FilterPrevixes.
|
||||||
|
--
|
||||||
|
-- For example, if you want another Client slot available at Anapa name it "RU CLIENT Anapa AB 2".
|
||||||
|
-- The code here does not need to be changed. Only an addition in the mission editor. An example
|
||||||
|
-- of this can be found on the USA side at Sochi AB.
|
||||||
|
|
||||||
|
RU_PlanesClientSet = {}
|
||||||
|
RU_PlanesClientSet[1] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Anapa AB")
|
||||||
|
RU_PlanesClientSet[2] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Beslan AB")
|
||||||
|
RU_PlanesClientSet[3] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Gelendzhik AB")
|
||||||
|
RU_PlanesClientSet[4] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Krasnodar Center AB")
|
||||||
|
RU_PlanesClientSet[5] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Krasnodar Pashkovsky AB")
|
||||||
|
RU_PlanesClientSet[6] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Krymsk AB")
|
||||||
|
RU_PlanesClientSet[7] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Maykop AB")
|
||||||
|
RU_PlanesClientSet[8] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Mineralnye Vody AB")
|
||||||
|
RU_PlanesClientSet[9] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Mozdok AB")
|
||||||
|
RU_PlanesClientSet[10] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Nalchik AB")
|
||||||
|
RU_PlanesClientSet[11] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Novorossiysk AB")
|
||||||
|
|
||||||
|
-- We setup an array to store all the AI_BALANCERS that are going to be created. Basically one
|
||||||
|
-- per airbase. We loop through and create an AI_BALANCER as well as a separate OnAfterSpawned
|
||||||
|
-- function for each. The Patrol Zone is randomized in the first parameter to AI_PATROL_ZONE:New()
|
||||||
|
-- call. This is done for each of the AI_BALANCERS. To add more patrol zones, just define them in
|
||||||
|
-- the mission editor and add into the array above. Code here does not need to be changed. The
|
||||||
|
-- table.getn(RedPatrolZone) gets the number of elements in the RedPatrolZone array so that all
|
||||||
|
-- of them are included to pick randomly.
|
||||||
|
|
||||||
|
|
||||||
|
RU_AI_Balancer = {}
|
||||||
|
for i=1, 11 do
|
||||||
|
RU_AI_Balancer[i] = AI_BALANCER:New(RU_PlanesClientSet[i], RU_PlanesSpawn[i])
|
||||||
|
|
||||||
|
-- We set a local variable within the for loop to the AI_BALANCER that was just created.
|
||||||
|
-- I couldn't get RU_AI_BALANCER[i]:OnAfterSpawn to be recognized so this is just pointing
|
||||||
|
-- curAIBalancer to the relevant RU_AI_BALANCER array item for each loop.
|
||||||
|
|
||||||
|
-- So in this case there are essentially 11 OnAfterSpawned functions defined and handled.
|
||||||
|
|
||||||
|
local curAIBalancer = RU_AI_Balancer[i]
|
||||||
|
function curAIBalancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
|
||||||
|
local Patrol = AI_PATROL_ZONE:New( RedPatrolZone[math.random( 1, table.getn(RedPatrolZone))], 1500, 5500, 700, 1400 )
|
||||||
|
Patrol:ManageFuel( 0.2, 60 )
|
||||||
|
Patrol:SetControllable( AIGroup )
|
||||||
|
Patrol:Start()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- US / Blue side is setup pretty much identically to the RU side above. Same detailed comments
|
||||||
|
-- above apply here. The main difference here is 10 airbases instead of 11.
|
||||||
|
|
||||||
|
-- Another difference is additional client slots at Sochi and a group defined at Batumi with
|
||||||
|
-- more than 1 unit per group (flight of 3 units). This is just to show that you can have more
|
||||||
|
-- client slots per airbase and more units in a single group that the AI will control. I think
|
||||||
|
-- this will also allow you to fly lead with AI on your wing or you can fly wing with an AI
|
||||||
|
-- leader.
|
||||||
|
|
||||||
|
-- Create the Blue Patrol Zone Array
|
||||||
|
BluePatrolZone = {}
|
||||||
|
BluePatrolZone[1] = ZONE:New( "BluePatrolZone1")
|
||||||
|
BluePatrolZone[2] = ZONE:New( "BluePatrolZone2")
|
||||||
|
BluePatrolZone[3] = ZONE:New( "BluePatrolZone3")
|
||||||
|
BluePatrolZone[4] = ZONE:New( "BluePatrolZone4")
|
||||||
|
BluePatrolZone[5] = ZONE:New( "BluePatrolZone5")
|
||||||
|
BluePatrolZone[6] = ZONE:New( "BluePatrolZone6")
|
||||||
|
|
||||||
|
--United States CAP Aircraft (these are used as templates for AI)
|
||||||
|
|
||||||
|
US_PlanesSpawn = {}
|
||||||
|
US_PlanesSpawn[1] = SPAWN:New( "US CAP Batumi AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[2] = SPAWN:New( "US CAP Gudauta AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[3] = SPAWN:New( "US CAP Kobuleti AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[4] = SPAWN:New( "US CAP Kutaisi AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[5] = SPAWN:New( "US CAP Senaki AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[6] = SPAWN:New( "US CAP Sochi AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[7] = SPAWN:New( "US CAP Soganlug AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[8] = SPAWN:New( "US CAP Sukhumi AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[9] = SPAWN:New( "US CAP Vaziani AB" ):InitCleanUp( 45 )
|
||||||
|
US_PlanesSpawn[10] = SPAWN:New( "US CAP Tbilisi AB" ):InitCleanUp( 45 )
|
||||||
|
|
||||||
|
--United States Client Aircraft (via AI_BALANCER, AI will replace these if no human players are in the slot)
|
||||||
|
|
||||||
|
US_PlanesClientSet = {}
|
||||||
|
US_PlanesClientSet[1] = SET_CLIENT:New():FilterPrefixes("US CLIENT Batumi AB")
|
||||||
|
US_PlanesClientSet[2] = SET_CLIENT:New():FilterPrefixes("US CLIENT Gudauta AB")
|
||||||
|
US_PlanesClientSet[3] = SET_CLIENT:New():FilterPrefixes("US CLIENT Kobuleti AB")
|
||||||
|
US_PlanesClientSet[4] = SET_CLIENT:New():FilterPrefixes("US CLIENT Kutaisi AB")
|
||||||
|
US_PlanesClientSet[5] = SET_CLIENT:New():FilterPrefixes("US CLIENT Senaki AB")
|
||||||
|
US_PlanesClientSet[6] = SET_CLIENT:New():FilterPrefixes("US CLIENT Sochi AB")
|
||||||
|
US_PlanesClientSet[7] = SET_CLIENT:New():FilterPrefixes("US CLIENT Soganlug AB")
|
||||||
|
US_PlanesClientSet[8] = SET_CLIENT:New():FilterPrefixes("US CLIENT Sukhumi AB")
|
||||||
|
US_PlanesClientSet[9] = SET_CLIENT:New():FilterPrefixes("US CLIENT Vaziani AB")
|
||||||
|
US_PlanesClientSet[10] = SET_CLIENT:New():FilterPrefixes("US CLIENT Tbilisi AB")
|
||||||
|
|
||||||
|
US_AI_Balancer = {}
|
||||||
|
for i=1, 10 do
|
||||||
|
US_AI_Balancer[i] = AI_BALANCER:New( US_PlanesClientSet[i], US_PlanesSpawn[i] )
|
||||||
|
|
||||||
|
local curAIBalancer = US_AI_Balancer[i]
|
||||||
|
function curAIBalancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
|
||||||
|
local Patrol = AI_PATROL_ZONE:New( BluePatrolZone[math.random( 1, table.getn(BluePatrolZone))], 1500, 5500, 700, 1400 )
|
||||||
|
Patrol:ManageFuel( 0.2, 60 )
|
||||||
|
Patrol:SetControllable( AIGroup )
|
||||||
|
Patrol:Start()
|
||||||
|
end
|
||||||
|
end
|
||||||
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
-1
@@ -3,7 +3,6 @@
|
|||||||
-- Author: FlightControl
|
-- Author: FlightControl
|
||||||
-- Date Created: 07 Apr 2018
|
-- Date Created: 07 Apr 2018
|
||||||
-- Date Checked: 01 Jan 2021
|
-- Date Checked: 01 Jan 2021
|
||||||
-- Not sure what the test case is
|
|
||||||
|
|
||||||
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
|
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
|
||||||
|
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
-- Name: AIC-APC-001 - Troops Relocate APC
|
-- Name: AIC-APC-001 - Troops Relocate APC
|
||||||
-- Author: FlightControl
|
-- Author: FlightControl
|
||||||
-- Date Created: 07 Apr 2018
|
-- Date Created: 07 Apr 2018
|
||||||
-- Date Checked: 01 Jan 2021, working
|
-- Date Checked: 01 Jan 2021
|
||||||
--
|
--
|
||||||
-- Demonstration of troops relocation when carrier is destroyed...
|
-- Demonstration of troops relocation when carrier is destroyed...
|
||||||
-- Carrier will relocate to the rescue carrier.
|
-- Carrier will relocate to the rescue carrier.
|
||||||
|
|||||||
BIN
Binary file not shown.
-1
@@ -2,7 +2,6 @@
|
|||||||
-- Name: AIC-APC-010 - Multiple APC
|
-- Name: AIC-APC-010 - Multiple APC
|
||||||
-- Author: FlightControl
|
-- Author: FlightControl
|
||||||
-- Date Created: 24 Apr 2018
|
-- Date Created: 24 Apr 2018
|
||||||
-- Date Checked: 01 Jan 2021, working
|
|
||||||
--
|
--
|
||||||
|
|
||||||
local InfantrySet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
|
local InfantrySet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
|
||||||
|
|||||||
BIN
Binary file not shown.
-3
@@ -4,9 +4,6 @@
|
|||||||
-- Date Created: 23 Apr 2018
|
-- Date Created: 23 Apr 2018
|
||||||
-- Date Checked: 01 Jan 2021
|
-- Date Checked: 01 Jan 2021
|
||||||
|
|
||||||
BASE:TraceClass("AI_CARGO_APC")
|
|
||||||
BASE:TraceOn()
|
|
||||||
|
|
||||||
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
|
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
|
||||||
|
|
||||||
Cargo_APC = {}
|
Cargo_APC = {}
|
||||||
|
|||||||
BIN
Binary file not shown.
+583
@@ -0,0 +1,583 @@
|
|||||||
|
--- **AI** -- (R2.4) - Models the intelligent transportation of infantry and other cargo.
|
||||||
|
--
|
||||||
|
-- ===
|
||||||
|
--
|
||||||
|
-- ### Author: **FlightControl**
|
||||||
|
--
|
||||||
|
-- ===
|
||||||
|
--
|
||||||
|
-- @module AI.AI_Cargo
|
||||||
|
-- @image Cargo.JPG
|
||||||
|
|
||||||
|
--- @type AI_CARGO
|
||||||
|
-- @extends Core.Fsm#FSM_CONTROLLABLE
|
||||||
|
|
||||||
|
|
||||||
|
--- Base class for the dynamic cargo handling capability for AI groups.
|
||||||
|
--
|
||||||
|
-- Carriers can be mobilized to intelligently transport infantry and other cargo within the simulation.
|
||||||
|
-- The AI_CARGO module uses the @{Cargo.Cargo} capabilities within the MOOSE framework.
|
||||||
|
-- CARGO derived objects must be declared within the mission to make the AI_CARGO object recognize the cargo.
|
||||||
|
-- Please consult the @{Cargo.Cargo} module for more information.
|
||||||
|
--
|
||||||
|
-- The derived classes from this module are:
|
||||||
|
--
|
||||||
|
-- * @{AI.AI_Cargo_APC} - Cargo transportation using APCs and other vehicles between zones.
|
||||||
|
-- * @{AI.AI_Cargo_Helicopter} - Cargo transportation using helicopters between zones.
|
||||||
|
-- * @{AI.AI_Cargo_Airplane} - Cargo transportation using airplanes to and from airbases.
|
||||||
|
--
|
||||||
|
-- @field #AI_CARGO
|
||||||
|
AI_CARGO = {
|
||||||
|
ClassName = "AI_CARGO",
|
||||||
|
Coordinate = nil, -- Core.Point#COORDINATE,
|
||||||
|
Carrier_Cargo = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
--- Creates a new AI_CARGO object.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param Core.Set#SET_CARGO CargoSet
|
||||||
|
-- @param #number CombatRadius
|
||||||
|
-- @return #AI_CARGO
|
||||||
|
function AI_CARGO:New( Carrier, CargoSet )
|
||||||
|
|
||||||
|
local self = BASE:Inherit( self, FSM_CONTROLLABLE:New( Carrier ) ) -- #AI_CARGO
|
||||||
|
|
||||||
|
self.CargoSet = CargoSet -- Core.Set#SET_CARGO
|
||||||
|
self.CargoCarrier = Carrier -- Wrapper.Group#GROUP
|
||||||
|
|
||||||
|
self:SetStartState( "Unloaded" )
|
||||||
|
|
||||||
|
self:AddTransition( "Unloaded", "Pickup", "*" )
|
||||||
|
self:AddTransition( "Loaded", "Deploy", "*" )
|
||||||
|
|
||||||
|
self:AddTransition( "*", "Load", "Boarding" )
|
||||||
|
self:AddTransition( { "Boarding", "Loaded" }, "Board", "Boarding" )
|
||||||
|
self:AddTransition( "Boarding", "Loaded", "Boarding" )
|
||||||
|
self:AddTransition( "Boarding", "PickedUp", "Loaded" )
|
||||||
|
|
||||||
|
self:AddTransition( "Loaded", "Unload", "Unboarding" )
|
||||||
|
self:AddTransition( "Unboarding", "Unboard", "Unboarding" )
|
||||||
|
self:AddTransition( "Unboarding", "Unloaded", "Unboarding" )
|
||||||
|
self:AddTransition( "Unboarding", "Deployed", "Unloaded" )
|
||||||
|
|
||||||
|
--- Pickup Handler OnBefore for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] OnBeforePickup
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
-- @return #boolean
|
||||||
|
|
||||||
|
--- Pickup Handler OnAfter for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] OnAfterPickup
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
|
||||||
|
--- Pickup Trigger for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] Pickup
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
|
||||||
|
--- Pickup Asynchronous Trigger for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] __Pickup
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param #number Delay
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate Pickup place. If not given, loading starts at the current location.
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
|
||||||
|
--- Deploy Handler OnBefore for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] OnBeforeDeploy
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
-- @return #boolean
|
||||||
|
|
||||||
|
--- Deploy Handler OnAfter for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] OnAfterDeploy
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
|
||||||
|
--- Deploy Trigger for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] Deploy
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
|
||||||
|
--- Deploy Asynchronous Trigger for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] __Deploy
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param #number Delay
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate
|
||||||
|
-- @param #number Speed Speed in km/h. Default is 50% of max possible speed the group can do.
|
||||||
|
|
||||||
|
|
||||||
|
--- Loaded Handler OnAfter for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] OnAfterLoaded
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
|
||||||
|
--- Unloaded Handler OnAfter for AI_CARGO
|
||||||
|
-- @function [parent=#AI_CARGO] OnAfterUnloaded
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From
|
||||||
|
-- @param #string Event
|
||||||
|
-- @param #string To
|
||||||
|
|
||||||
|
--- On after Deployed event.
|
||||||
|
-- @function [parent=#AI_CARGO] OnAfterDeployed
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
|
||||||
|
-- @param #boolean Defend Defend for APCs.
|
||||||
|
|
||||||
|
|
||||||
|
for _, CarrierUnit in pairs( Carrier:GetUnits() ) do
|
||||||
|
local CarrierUnit = CarrierUnit -- Wrapper.Unit#UNIT
|
||||||
|
CarrierUnit:SetCargoBayWeightLimit()
|
||||||
|
end
|
||||||
|
|
||||||
|
self.Transporting = false
|
||||||
|
self.Relocating = false
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function AI_CARGO:IsTransporting()
|
||||||
|
|
||||||
|
return self.Transporting == true
|
||||||
|
end
|
||||||
|
|
||||||
|
function AI_CARGO:IsRelocating()
|
||||||
|
|
||||||
|
return self.Relocating == true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- On after Pickup event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP APC
|
||||||
|
-- @param From
|
||||||
|
-- @param Event
|
||||||
|
-- @param To
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate of the pickup point.
|
||||||
|
-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go.
|
||||||
|
-- @param #number Height Height in meters to move to the home coordinate.
|
||||||
|
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
|
||||||
|
function AI_CARGO:onafterPickup( APC, From, Event, To, Coordinate, Speed, Height, PickupZone )
|
||||||
|
|
||||||
|
self.Transporting = false
|
||||||
|
self.Relocating = true
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- On after Deploy event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP APC
|
||||||
|
-- @param From
|
||||||
|
-- @param Event
|
||||||
|
-- @param To
|
||||||
|
-- @param Core.Point#COORDINATE Coordinate Deploy place.
|
||||||
|
-- @param #number Speed Speed in km/h to drive to the depoly coordinate. Default is 50% of max possible speed the unit can go.
|
||||||
|
-- @param #number Height Height in meters to move to the deploy coordinate.
|
||||||
|
-- @param Core.Zone#ZONE DeployZone The zone where the cargo will be deployed.
|
||||||
|
function AI_CARGO:onafterDeploy( APC, From, Event, To, Coordinate, Speed, Height, DeployZone )
|
||||||
|
|
||||||
|
self.Relocating = false
|
||||||
|
self.Transporting = true
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On before Load event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
|
||||||
|
function AI_CARGO:onbeforeLoad( Carrier, From, Event, To, PickupZone )
|
||||||
|
self:F( { Carrier, From, Event, To } )
|
||||||
|
|
||||||
|
local Boarding = false
|
||||||
|
|
||||||
|
local LoadInterval = 2
|
||||||
|
local LoadDelay = 1
|
||||||
|
local Carrier_List = {}
|
||||||
|
local Carrier_Weight = {}
|
||||||
|
|
||||||
|
if Carrier and Carrier:IsAlive() then
|
||||||
|
self.Carrier_Cargo = {}
|
||||||
|
for _, CarrierUnit in pairs( Carrier:GetUnits() ) do
|
||||||
|
local CarrierUnit = CarrierUnit -- Wrapper.Unit#UNIT
|
||||||
|
|
||||||
|
local CargoBayFreeWeight = CarrierUnit:GetCargoBayFreeWeight()
|
||||||
|
self:F({CargoBayFreeWeight=CargoBayFreeWeight})
|
||||||
|
|
||||||
|
Carrier_List[#Carrier_List+1] = CarrierUnit
|
||||||
|
Carrier_Weight[CarrierUnit] = CargoBayFreeWeight
|
||||||
|
end
|
||||||
|
|
||||||
|
local Carrier_Count = #Carrier_List
|
||||||
|
local Carrier_Index = 1
|
||||||
|
|
||||||
|
local Loaded = false
|
||||||
|
|
||||||
|
for _, Cargo in UTILS.spairs( self.CargoSet:GetSet(), function( t, a, b ) return t[a]:GetWeight() > t[b]:GetWeight() end ) do
|
||||||
|
local Cargo = Cargo -- Cargo.Cargo#CARGO
|
||||||
|
|
||||||
|
self:F( { IsUnLoaded = Cargo:IsUnLoaded(), IsDeployed = Cargo:IsDeployed(), Cargo:GetName(), Carrier:GetName() } )
|
||||||
|
|
||||||
|
-- Try all Carriers, but start from the one according the Carrier_Index
|
||||||
|
for Carrier_Loop = 1, #Carrier_List do
|
||||||
|
|
||||||
|
local CarrierUnit = Carrier_List[Carrier_Index] -- Wrapper.Unit#UNIT
|
||||||
|
|
||||||
|
-- This counters loop through the available Carriers.
|
||||||
|
Carrier_Index = Carrier_Index + 1
|
||||||
|
if Carrier_Index > Carrier_Count then
|
||||||
|
Carrier_Index = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if Cargo:IsUnLoaded() and not Cargo:IsDeployed() then
|
||||||
|
if Cargo:IsInLoadRadius( CarrierUnit:GetCoordinate() ) then
|
||||||
|
self:F( { "In radius", CarrierUnit:GetName() } )
|
||||||
|
|
||||||
|
local CargoWeight = Cargo:GetWeight()
|
||||||
|
local CarrierSpace=Carrier_Weight[CarrierUnit]
|
||||||
|
|
||||||
|
-- Only when there is space within the bay to load the next cargo item!
|
||||||
|
if CarrierSpace > CargoWeight then
|
||||||
|
Carrier:RouteStop()
|
||||||
|
--Cargo:Ungroup()
|
||||||
|
Cargo:__Board( -LoadDelay, CarrierUnit )
|
||||||
|
self:__Board( LoadDelay, Cargo, CarrierUnit, PickupZone )
|
||||||
|
|
||||||
|
LoadDelay = LoadDelay + Cargo:GetCount() * LoadInterval
|
||||||
|
|
||||||
|
-- So now this CarrierUnit has Cargo that is being loaded.
|
||||||
|
-- This will be used further in the logic to follow and to check cargo status.
|
||||||
|
self.Carrier_Cargo[Cargo] = CarrierUnit
|
||||||
|
Boarding = true
|
||||||
|
Carrier_Weight[CarrierUnit] = Carrier_Weight[CarrierUnit] - CargoWeight
|
||||||
|
Loaded = true
|
||||||
|
|
||||||
|
-- Ok, we loaded a cargo, now we can stop the loop.
|
||||||
|
break
|
||||||
|
else
|
||||||
|
self:T(string.format("WARNING: Cargo too heavy for carrier %s. Cargo=%.1f > %.1f free space", tostring(CarrierUnit:GetName()), CargoWeight, CarrierSpace))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
if not Loaded == true then
|
||||||
|
-- No loading happened, so we need to pickup something else.
|
||||||
|
self.Relocating = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return Boarding
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- On before Reload event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
|
||||||
|
function AI_CARGO:onbeforeReload( Carrier, From, Event, To )
|
||||||
|
self:F( { Carrier, From, Event, To } )
|
||||||
|
|
||||||
|
local Boarding = false
|
||||||
|
|
||||||
|
local LoadInterval = 2
|
||||||
|
local LoadDelay = 1
|
||||||
|
local Carrier_List = {}
|
||||||
|
local Carrier_Weight = {}
|
||||||
|
|
||||||
|
if Carrier and Carrier:IsAlive() then
|
||||||
|
for _, CarrierUnit in pairs( Carrier:GetUnits() ) do
|
||||||
|
local CarrierUnit = CarrierUnit -- Wrapper.Unit#UNIT
|
||||||
|
|
||||||
|
Carrier_List[#Carrier_List+1] = CarrierUnit
|
||||||
|
end
|
||||||
|
|
||||||
|
local Carrier_Count = #Carrier_List
|
||||||
|
local Carrier_Index = 1
|
||||||
|
|
||||||
|
local Loaded = false
|
||||||
|
|
||||||
|
for Cargo, CarrierUnit in pairs( self.Carrier_Cargo ) do
|
||||||
|
local Cargo = Cargo -- Cargo.Cargo#CARGO
|
||||||
|
|
||||||
|
self:F( { IsUnLoaded = Cargo:IsUnLoaded(), IsDeployed = Cargo:IsDeployed(), Cargo:GetName(), Carrier:GetName() } )
|
||||||
|
|
||||||
|
-- Try all Carriers, but start from the one according the Carrier_Index
|
||||||
|
for Carrier_Loop = 1, #Carrier_List do
|
||||||
|
|
||||||
|
local CarrierUnit = Carrier_List[Carrier_Index] -- Wrapper.Unit#UNIT
|
||||||
|
|
||||||
|
-- This counters loop through the available Carriers.
|
||||||
|
Carrier_Index = Carrier_Index + 1
|
||||||
|
if Carrier_Index > Carrier_Count then
|
||||||
|
Carrier_Index = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if Cargo:IsUnLoaded() and not Cargo:IsDeployed() then
|
||||||
|
Carrier:RouteStop()
|
||||||
|
Cargo:__Board( -LoadDelay, CarrierUnit )
|
||||||
|
self:__Board( LoadDelay, Cargo, CarrierUnit )
|
||||||
|
|
||||||
|
LoadDelay = LoadDelay + Cargo:GetCount() * LoadInterval
|
||||||
|
|
||||||
|
-- So now this CarrierUnit has Cargo that is being loaded.
|
||||||
|
-- This will be used further in the logic to follow and to check cargo status.
|
||||||
|
self.Carrier_Cargo[Cargo] = CarrierUnit
|
||||||
|
Boarding = true
|
||||||
|
Loaded = true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
if not Loaded == true then
|
||||||
|
-- No loading happened, so we need to pickup something else.
|
||||||
|
self.Relocating = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return Boarding
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On after Board event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Cargo.Cargo#CARGO Cargo Cargo object.
|
||||||
|
-- @param Wrapper.Unit#UNIT CarrierUnit
|
||||||
|
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
|
||||||
|
function AI_CARGO:onafterBoard( Carrier, From, Event, To, Cargo, CarrierUnit, PickupZone )
|
||||||
|
self:F( { Carrier, From, Event, To, Cargo, CarrierUnit:GetName() } )
|
||||||
|
|
||||||
|
if Carrier and Carrier:IsAlive() and From == "Boarding" then
|
||||||
|
self:F({ IsLoaded = Cargo:IsLoaded(), Cargo:GetName(), Carrier:GetName() } )
|
||||||
|
if not Cargo:IsLoaded() and not Cargo:IsDestroyed() then
|
||||||
|
self:__Board( -10, Cargo, CarrierUnit, PickupZone )
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self:__Loaded( 0.1, Cargo, CarrierUnit, PickupZone )
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On after Loaded event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @return #boolean Cargo loaded.
|
||||||
|
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
|
||||||
|
function AI_CARGO:onafterLoaded( Carrier, From, Event, To, Cargo, PickupZone )
|
||||||
|
self:F( { Carrier, From, Event, To } )
|
||||||
|
|
||||||
|
local Loaded = true
|
||||||
|
|
||||||
|
if Carrier and Carrier:IsAlive() then
|
||||||
|
for Cargo, CarrierUnit in pairs( self.Carrier_Cargo ) do
|
||||||
|
local Cargo = Cargo -- Cargo.Cargo#CARGO
|
||||||
|
self:F( { IsLoaded = Cargo:IsLoaded(), IsDestroyed = Cargo:IsDestroyed(), Cargo:GetName(), Carrier:GetName() } )
|
||||||
|
if not Cargo:IsLoaded() and not Cargo:IsDestroyed() then
|
||||||
|
Loaded = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if Loaded then
|
||||||
|
self:__PickedUp( 0.1, PickupZone )
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On after PickedUp event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
|
||||||
|
function AI_CARGO:onafterPickedUp( Carrier, From, Event, To, PickupZone )
|
||||||
|
self:F( { Carrier, From, Event, To } )
|
||||||
|
|
||||||
|
Carrier:RouteResume()
|
||||||
|
|
||||||
|
local HasCargo = false
|
||||||
|
if Carrier and Carrier:IsAlive() then
|
||||||
|
for Cargo, CarrierUnit in pairs( self.Carrier_Cargo ) do
|
||||||
|
HasCargo = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self.Relocating = false
|
||||||
|
if HasCargo then
|
||||||
|
self:F( "Transporting" )
|
||||||
|
self.Transporting = true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- On after Unload event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
|
||||||
|
function AI_CARGO:onafterUnload( Carrier, From, Event, To, DeployZone, Defend )
|
||||||
|
self:F( { Carrier, From, Event, To, DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
|
local UnboardInterval = 5
|
||||||
|
local UnboardDelay = 5
|
||||||
|
|
||||||
|
if Carrier and Carrier:IsAlive() then
|
||||||
|
for _, CarrierUnit in pairs( Carrier:GetUnits() ) do
|
||||||
|
local CarrierUnit = CarrierUnit -- Wrapper.Unit#UNIT
|
||||||
|
Carrier:RouteStop()
|
||||||
|
for _, Cargo in pairs( CarrierUnit:GetCargo() ) do
|
||||||
|
self:F( { Cargo = Cargo:GetName(), Isloaded = Cargo:IsLoaded() } )
|
||||||
|
if Cargo:IsLoaded() then
|
||||||
|
Cargo:__UnBoard( UnboardDelay )
|
||||||
|
UnboardDelay = UnboardDelay + Cargo:GetCount() * UnboardInterval
|
||||||
|
self:__Unboard( UnboardDelay, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
|
if not Defend == true then
|
||||||
|
Cargo:SetDeployed( true )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On after Unboard event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param #string Cargo.Cargo#CARGO Cargo Cargo object.
|
||||||
|
-- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
|
||||||
|
function AI_CARGO:onafterUnboard( Carrier, From, Event, To, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
|
self:F( { Carrier, From, Event, To, Cargo:GetName(), DeployZone = DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
|
if Carrier and Carrier:IsAlive() and From == "Unboarding" then
|
||||||
|
if not Cargo:IsUnLoaded() then
|
||||||
|
self:__Unboard( 10, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self:Unloaded( Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On after Unloaded event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param #string Cargo.Cargo#CARGO Cargo Cargo object.
|
||||||
|
-- @param #boolean Deployed Cargo is deployed.
|
||||||
|
-- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
|
||||||
|
function AI_CARGO:onafterUnloaded( Carrier, From, Event, To, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
|
self:F( { Carrier, From, Event, To, Cargo:GetName(), DeployZone = DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
|
local AllUnloaded = true
|
||||||
|
|
||||||
|
--Cargo:Regroup()
|
||||||
|
|
||||||
|
if Carrier and Carrier:IsAlive() then
|
||||||
|
for _, CarrierUnit in pairs( Carrier:GetUnits() ) do
|
||||||
|
local CarrierUnit = CarrierUnit -- Wrapper.Unit#UNIT
|
||||||
|
local IsEmpty = CarrierUnit:IsCargoEmpty()
|
||||||
|
self:I({ IsEmpty = IsEmpty })
|
||||||
|
if not IsEmpty then
|
||||||
|
AllUnloaded = false
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if AllUnloaded == true then
|
||||||
|
if DeployZone == true then
|
||||||
|
self.Carrier_Cargo = {}
|
||||||
|
end
|
||||||
|
self.CargoCarrier = Carrier
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if AllUnloaded == true then
|
||||||
|
self:__Deployed( 5, DeployZone, Defend )
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On after Deployed event.
|
||||||
|
-- @param #AI_CARGO self
|
||||||
|
-- @param Wrapper.Group#GROUP Carrier
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
|
||||||
|
-- @param #boolean Defend Defend for APCs.
|
||||||
|
function AI_CARGO:onafterDeployed( Carrier, From, Event, To, DeployZone, Defend )
|
||||||
|
self:F( { Carrier, From, Event, To, DeployZone = DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
|
if not Defend == true then
|
||||||
|
self.Transporting = false
|
||||||
|
else
|
||||||
|
self:F( "Defending" )
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
Binary file not shown.
+38
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
-- Name: AIC-HEL-000 - Helicopter
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 13 Apr 2018
|
||||||
|
-- Date Checked: 01 Jan 2021
|
||||||
|
-- Updated Moose, needs fix #1417 to work
|
||||||
|
--
|
||||||
|
BASE:TraceClass("AI_CARGO")
|
||||||
|
BASE:TraceClass("AI_CARGO_HELICOPTER")
|
||||||
|
BASE:TraceOn()
|
||||||
|
|
||||||
|
WorkerCargoSet = SET_CARGO:New():FilterTypes( "Workers" ):FilterStart()
|
||||||
|
|
||||||
|
|
||||||
|
for i = 1, 5 do
|
||||||
|
local WorkerGroup = GROUP:FindByName( string.format( "Infantry %03d", i ) )
|
||||||
|
local WorkersCargo = CARGO_GROUP:New( WorkerGroup, "Workers", string.format( "Infantry %d", i ), 750, 35 )
|
||||||
|
end
|
||||||
|
|
||||||
|
local Helicopter = GROUP:FindByName( "Helicopter" )
|
||||||
|
|
||||||
|
CargoHelicopter = AI_CARGO_HELICOPTER:New( Helicopter, WorkerCargoSet )
|
||||||
|
|
||||||
|
|
||||||
|
PickupZone = ZONE:New( "PickupZone" )
|
||||||
|
DeployZones = { ZONE:New( "DeployZone Alpha" ), ZONE:New( "DeployZone Beta" ), ZONE:New( "DeployZone Gamma" ) }
|
||||||
|
|
||||||
|
CargoHelicopter:Pickup( PickupZone:GetRandomCoordinate( 400, 100 ) )
|
||||||
|
|
||||||
|
function CargoHelicopter:OnAfterLoaded( Helicopter, From, Event, To, Cargo )
|
||||||
|
CargoHelicopter:__Deploy(5,DeployZones[math.random( 1, #DeployZones ) ]:GetRandomCoordinate( 500, 100 ), math.random( 50, 250 ) )
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function CargoHelicopter:OnAfterUnloaded( Helicopter, From, Event, To, Cargo )
|
||||||
|
CargoHelicopter:__Pickup( 5,PickupZone:GetRandomCoordinate( 500, 200 ), math.random( 50, 250 ) )
|
||||||
|
end
|
||||||
|
|
||||||
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
+27
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-008 - AI_A2A - CAP Grouping Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 06 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 10, 30, 1 )
|
||||||
|
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
|
||||||
BIN
Binary file not shown.
+30
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-009 - AI_A2A - Border Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 06 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Setup the border zone.
|
||||||
|
-- In this case the border is a POLYGON,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 1000, 1500 )
|
||||||
BIN
Binary file not shown.
+50
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-010 - AI_A2A - RTB and ReEngage
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 May 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
--A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffFromParkingCold()
|
||||||
|
A2ADispatcher:SetDefaultLandingAtEngineShutdown()
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
|
||||||
|
local Frequency = 180
|
||||||
|
|
||||||
|
BlueSpawn2 = SPAWN
|
||||||
|
:New( "RT NATO 2" )
|
||||||
|
:InitLimit( 8, 40 )
|
||||||
|
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
:InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
:InitDelayOn()
|
||||||
|
:SpawnScheduled( Frequency, 0.5 )
|
||||||
|
|
||||||
BIN
Binary file not shown.
+51
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-011 - AI_A2A - RTB Fuel Threshold test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 Jul 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
--A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Set the fuel treshold to 40%. Airplanes will return when only 40% of fuel left in the tank.
|
||||||
|
A2ADispatcher:SetDefaultFuelThreshold( 0.4 )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronOverhead( "Sochi", 1 )
|
||||||
|
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
|
||||||
|
|
||||||
|
-- CAP Squadron execution.
|
||||||
|
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromParkingHot("Sochi")
|
||||||
|
A2ADispatcher:SetSquadronLandingAtEngineShutdown("Sochi")
|
||||||
|
|
||||||
|
|
||||||
BIN
Binary file not shown.
+51
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-012 - AI_A2A - CAP Time Interval Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 Jul 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
--A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultCapLimit( 2 )
|
||||||
|
A2ADispatcher:SetDefaultCapTimeInterval( 300, 300 ) -- Spawn each 5 minutes.
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronOverhead( "Sochi", 1 )
|
||||||
|
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
|
||||||
|
|
||||||
|
-- CAP Squadron execution.
|
||||||
|
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromParkingHot("Sochi")
|
||||||
|
A2ADispatcher:SetSquadronLandingAtEngineShutdown("Sochi")
|
||||||
|
|
||||||
|
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+48
@@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-014 - AI_A2A - DisengageRange Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 31 Jul 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
--A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Test intercept.
|
||||||
|
A2ADispatcher:SetIntercept( 450 )
|
||||||
|
|
||||||
|
-- Test an other disengage radius.
|
||||||
|
A2ADispatcher:SetDisengageRadius( 150000 )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Gelend" )
|
||||||
|
|
||||||
|
|
||||||
BIN
Binary file not shown.
+53
@@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-015 - AI_A2A - Takeoff Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 01 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
--A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Test intercept.
|
||||||
|
A2ADispatcher:SetIntercept( 450 )
|
||||||
|
|
||||||
|
-- Test an other disengage radius.
|
||||||
|
A2ADispatcher:SetDisengageRadius( 20000 )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromRunway( "Gelend" )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Anapa", AIRBASE.Caucasus.Anapa_Vityazevo, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Anapa", 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffInAir( "Anapa" )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Novo", 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" )
|
||||||
BIN
Binary file not shown.
+50
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-016 - AI_A2A - Refuel Tanker Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 01 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Test intercept.
|
||||||
|
A2ADispatcher:SetIntercept( 450 )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-34" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Sochi", ZONE:New( "PatrolZone" ), 4000, 8000, 600, 800, 1000, 1300 )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval("Sochi", 2, 30, 600, 1 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultFuelThreshold( 0.9 )
|
||||||
|
A2ADispatcher:SetDefaultTanker( "Tanker" )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-30" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Gelend", ZONE:New( "PatrolZoneGelend" ), 4000, 8000, 600, 800, 1000, 1300 )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Gelend", 2, 30, 600, 1 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Gelend", 900, 1200 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadronFuelThreshold( "Gelend", 0.8 )
|
||||||
|
A2ADispatcher:SetSquadronTanker( "Gelend", "TankerGelend" )
|
||||||
|
|
||||||
|
|
||||||
BIN
Binary file not shown.
+44
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-017 - AI_A2A - Spawn Altitude Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 05 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Set the default takeoff method in the air.
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
|
||||||
|
-- Set the default takeoff altitude at 2000 meters.
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAirAltitude( 2000 ) -- Takeoff by default at 2000 meters.
|
||||||
|
|
||||||
|
|
||||||
|
-- Spawn for Sochi airbase.
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-34" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Sochi", ZONE:New( "PatrolZone" ), 4000, 8000, 600, 800, 1000, 1300 )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval("Sochi", 2, 30, 600, 1 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
|
||||||
|
|
||||||
|
-- Spawn for Gelend airbase.
|
||||||
|
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-30" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Gelend", ZONE:New( "PatrolZoneGelend" ), 4000, 8000, 600, 800, 1000, 1300 )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Gelend", 2, 30, 600, 1 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Gelend", 900, 1200 )
|
||||||
|
|
||||||
|
-- Let Gelend squadron take off in the air at 4000 meters.
|
||||||
|
A2ADispatcher:SetSquadronTakeoffInAir( "Gelend", 4000 ) -- Takeoff in Gelend at 4000 meters.
|
||||||
|
|
||||||
|
|
||||||
|
-- Run the mission and observe the spawning altitudes.
|
||||||
BIN
Binary file not shown.
+45
@@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-018 - AI_A2A - Unlimited Resources Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 05 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
--A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
-- Unlimited resources, as the Resources parameter of the :SetSquadron method is not given.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromRunway( "Gelend" )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Anapa", AIRBASE.Caucasus.Anapa_Vityazevo, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Anapa", 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromRunway( "Anapa" )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Novo", 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronTakeoffFromRunway( "Novo" )
|
||||||
|
|
||||||
BIN
Binary file not shown.
+31
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-019 - AI_A2A - Engage Range Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 06 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 50km where any airborne friendly
|
||||||
|
-- without an assignment within 50km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 50000 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 10, 30, 1 )
|
||||||
|
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+42
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-021 - AI_A2A - GCI Radius Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 May 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetGciRadius( 100000 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Kras1", 900, 1200 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras2", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Kras2", 900, 1200 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "May", 900, 1200 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingNearAirbase()
|
||||||
|
|
||||||
BIN
Binary file not shown.
+49
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-022 - AI_A2A - GCI Overhead
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 05 Sep 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 200000 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "May", 900, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronOverhead( "May", 0.25 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Kras", 900, 1200 )
|
||||||
|
A2ADispatcher:SetSquadronOverhead( "Kras", 1.5 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingNearAirbase()
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
|
||||||
|
local Frequency = 30
|
||||||
|
|
||||||
|
BlueSpawn2 = SPAWN
|
||||||
|
:New( "RT NATO" )
|
||||||
|
:InitLimit( 1, 40 )
|
||||||
|
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
:InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
:InitDelayOn()
|
||||||
|
:SpawnScheduled( Frequency, 0.5 )
|
||||||
|
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+46
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-032 - AI_A2A - CAP Damage
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 29 Oct 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP MIG-31" }, 20 )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Kras1", 2, 30, 120, 1 )
|
||||||
|
|
||||||
|
--A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
--A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
--A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120, 1 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingAtEngineShutdown()
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
|
||||||
|
local Frequency = 300
|
||||||
|
|
||||||
|
BlueSpawn2 = SPAWN
|
||||||
|
:New( "RT NATO 2" )
|
||||||
|
:InitLimit( 6, 40 )
|
||||||
|
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
:InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
:InitDelayOn()
|
||||||
|
:SpawnScheduled( Frequency, 0.5 )
|
||||||
BIN
Binary file not shown.
+47
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-040 - AI_A2A - CAP Independent Detection in EWR
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetEngageRadius( 90000 )
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120 )
|
||||||
|
|
||||||
|
--A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
--A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
--A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingNearAirbase()
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
|
||||||
|
local Frequency = 180
|
||||||
|
|
||||||
|
BlueSpawn2 = SPAWN
|
||||||
|
:New( "RT NATO" )
|
||||||
|
:InitLimit( 2, 40 )
|
||||||
|
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
:InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
:InitDelayOn()
|
||||||
|
:SpawnScheduled( Frequency, 0.5 )
|
||||||
BIN
Binary file not shown.
+47
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-040 - AI_A2A - CAP Independent Detection in EWR
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 Aug 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetEngageRadius( 90000 )
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120 )
|
||||||
|
|
||||||
|
--A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
--A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
--A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingNearAirbase()
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
|
||||||
|
local Frequency = 180
|
||||||
|
|
||||||
|
BlueSpawn2 = SPAWN
|
||||||
|
:New( "RT NATO" )
|
||||||
|
:InitLimit( 2, 40 )
|
||||||
|
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
:InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
:InitDelayOn()
|
||||||
|
:SpawnScheduled( Frequency, 0.5 )
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-041 - AI_A2A - CAP Independent Detection in EWR with Clients
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 01 Sep 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
Detection:SetRefreshTimeInterval( 10 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
A2ADispatcher:SetRefreshTimeInterval( 10 )
|
||||||
|
|
||||||
|
|
||||||
|
A2ADispatcher:SetEngageRadius( 90000 )
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Kras1", 2, 30, 120 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "May", 2, 30, 120 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingNearAirbase()
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
|
||||||
|
--local Frequency = 600
|
||||||
|
--
|
||||||
|
--BlueSpawn2 = SPAWN
|
||||||
|
-- :New( "RT NATO" )
|
||||||
|
-- :InitLimit( 2, 40 )
|
||||||
|
-- :InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
-- :InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
-- :InitDelayOn()
|
||||||
|
-- :SpawnScheduled( Frequency, 0.5 )
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+67
@@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-060 - AI_A2A - Takeoff From Runway Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 21 Sep 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Enable the tactical display panel.
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
|
-- Any enemy crossing this border will be engaged.
|
||||||
|
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
|
||||||
|
A2ADispatcher:SetBorderZone( CCCPBorderZone )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 250000 )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
|
||||||
|
-- Setup the overhead
|
||||||
|
A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 )
|
||||||
|
|
||||||
|
-- Setup the Grouping
|
||||||
|
A2ADispatcher:SetSquadronGrouping( "Mineralnye", 1 )
|
||||||
|
|
||||||
|
-- Setup the Takeoff methods
|
||||||
|
A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Runway )
|
||||||
|
|
||||||
|
-- Setup the Landing methods
|
||||||
|
A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" )
|
||||||
|
|
||||||
|
|
||||||
|
-- CAP Squadron execution.
|
||||||
|
--CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
|
||||||
|
--A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
|
||||||
|
--A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 )
|
||||||
|
|
||||||
|
-- GCI Squadron execution.
|
||||||
|
A2ADispatcher:SetSquadronGci( "Mineralnye", 900, 1200 )
|
||||||
|
|
||||||
|
CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
|
||||||
|
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
local Frequency = 60
|
||||||
|
|
||||||
|
BlueSpawn1 = SPAWN
|
||||||
|
:New( "RT NATO 1" )
|
||||||
|
:InitLimit( 2, 10 )
|
||||||
|
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
:InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
--:InitDelayOn()
|
||||||
|
:SpawnScheduled( Frequency, 0.4 )
|
||||||
BIN
Binary file not shown.
+61
@@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-061 - AI_A2A - Takeoff From Ship Runway Test
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 21 Sep 2017
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
-- Enable the tactical display panel.
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly
|
||||||
|
-- without an assignment within 100km radius from a detected target, will engage that target.
|
||||||
|
A2ADispatcher:SetEngageRadius( 250000 )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
A2ADispatcher:SetSquadron( "Kuznetsov", "Kuznetsov", { "SQ CCCP SU-33" }, 20 )
|
||||||
|
|
||||||
|
-- Setup the overhead
|
||||||
|
A2ADispatcher:SetSquadronOverhead( "Kuznetsov", 1.2 )
|
||||||
|
|
||||||
|
-- Setup the Grouping
|
||||||
|
A2ADispatcher:SetSquadronGrouping( "Kuznetsov", 1 )
|
||||||
|
|
||||||
|
-- Setup the Takeoff methods
|
||||||
|
A2ADispatcher:SetSquadronTakeoff( "Kuznetsov", AI_A2A_DISPATCHER.Takeoff.Runway )
|
||||||
|
|
||||||
|
-- Setup the Landing methods
|
||||||
|
A2ADispatcher:SetSquadronLandingAtRunway( "Kuznetsov" )
|
||||||
|
|
||||||
|
|
||||||
|
-- CAP Squadron execution.
|
||||||
|
--CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
|
||||||
|
--A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
|
||||||
|
--A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 )
|
||||||
|
|
||||||
|
-- GCI Squadron execution.
|
||||||
|
A2ADispatcher:SetSquadronGci( "Kuznetsov", 900, 1200 )
|
||||||
|
|
||||||
|
CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
|
||||||
|
|
||||||
|
|
||||||
|
-- Blue attack simulation
|
||||||
|
local Frequency = 60
|
||||||
|
|
||||||
|
BlueSpawn1 = SPAWN
|
||||||
|
:New( "RT NATO 1" )
|
||||||
|
:InitLimit( 2, 10 )
|
||||||
|
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } )
|
||||||
|
:InitRandomizeRoute( 0, 0, 30000 )
|
||||||
|
--:InitDelayOn()
|
||||||
|
:SpawnScheduled( Frequency, 0.4 )
|
||||||
BIN
Binary file not shown.
+39
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-070 - AI_A2A - CAP - Player Exit
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 Oct 2017
|
||||||
|
--
|
||||||
|
-- Test Scenario(s):
|
||||||
|
--
|
||||||
|
-- Now take a seat in the client plane as a player.
|
||||||
|
-- Do the following tests after the plane has been spawned.
|
||||||
|
-- 1. Immediately exit the plane.
|
||||||
|
-- 2. Only exit the plane once the defender is engaged.
|
||||||
|
-- 3. Let the defender shoot you.
|
||||||
|
-- In all these scenarios, observe if the defender is continuing its patrol.
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
|
||||||
|
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
|
||||||
|
A2ADispatcher:SetSquadronCapInterval( "Kras1", 1, 30, 120, 1 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingNearAirbase()
|
||||||
|
|
||||||
BIN
Binary file not shown.
+37
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
-- Name: AID-071 - AI_A2A - GCI - Player Exit
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 30 Oct 2017
|
||||||
|
--
|
||||||
|
-- Test Scenario(s):
|
||||||
|
--
|
||||||
|
-- Now take a seat in the client plane as a player.
|
||||||
|
-- Do the following tests after the plane has been spawned.
|
||||||
|
-- 1. Immediately exit the plane.
|
||||||
|
-- 2. Only exit the plane once the defender is engaged.
|
||||||
|
-- 3. Let the defender shoot you.
|
||||||
|
-- In all these scenarios, observe if the defender is returning to base.
|
||||||
|
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
A2ADispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 )
|
||||||
|
A2ADispatcher:SetSquadronGci( "Kras1", 800, 1200 )
|
||||||
|
|
||||||
|
A2ADispatcher:SetDefaultTakeoffInAir()
|
||||||
|
A2ADispatcher:SetDefaultLandingNearAirbase()
|
||||||
|
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+54
@@ -0,0 +1,54 @@
|
|||||||
|
|
||||||
|
|
||||||
|
-- RED
|
||||||
|
|
||||||
|
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
|
||||||
|
A2A_GCICAP_Red = AI_A2A_GCICAP:New( { "RED EWR" }, { "4477th" }, { }, 2 )
|
||||||
|
|
||||||
|
A2A_GCICAP_Red:SetBorderZone( ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) )
|
||||||
|
|
||||||
|
-- Enable the tactical display panel. This is to see what this dispatcher is doing.
|
||||||
|
--A2A_GCICAP_Red:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly
|
||||||
|
-- without an assignment within 150km radius from a detected target, will engage that target.
|
||||||
|
A2A_GCICAP_Red:SetEngageRadius( 150000 )
|
||||||
|
|
||||||
|
-- The default take-off method is planes takeoff right in the air.
|
||||||
|
-- Here we specify to take off from a parking space, with engines already running.
|
||||||
|
A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( AIRBASE.Nevada.Tonopah_Test_Range_Airfield )
|
||||||
|
--A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( "Groom Lake AFB" )
|
||||||
|
|
||||||
|
|
||||||
|
-- BLUE
|
||||||
|
|
||||||
|
|
||||||
|
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
|
||||||
|
-- EWR network groups start with BLUE EWR.
|
||||||
|
-- Squadron templates which are placed above the colored airbase, start with 104th or 105th or 106th.
|
||||||
|
-- Perform CAP in a polygon zone placed near 104th, which is Nellis.
|
||||||
|
-- Perform 2 CAP.
|
||||||
|
A2A_GCICAP_Blue = AI_A2A_GCICAP:New( { "BLUE EWR" }, { "104th", "105th", "106th" }, { "104th CAP" }, 2 )
|
||||||
|
|
||||||
|
A2A_GCICAP_Blue:SetBorderZone( ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) ) )
|
||||||
|
|
||||||
|
-- Enable the tactical display panel. This is to see what this dispatcher is doing.
|
||||||
|
--A2A_GCICAP_Blue:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly
|
||||||
|
-- without an assignment within 150km radius from a detected target, will engage that target.
|
||||||
|
A2A_GCICAP_Blue:SetEngageRadius( 150000 )
|
||||||
|
|
||||||
|
-- The default take-off method is planes takeoff right in the air.
|
||||||
|
-- Here we specify other take off options.
|
||||||
|
A2A_GCICAP_Blue:SetSquadronTakeoffFromRunway( AIRBASE.Nevada.Boulder_City_Airport ) -- Takeoff from the runway.
|
||||||
|
A2A_GCICAP_Blue:SetSquadronTakeoffFromParkingCold( AIRBASE.Nevada.McCarran_International_Airport ) -- Takeoff from parking spot, with engines shut off.
|
||||||
|
--A2A_GCICAP_Blue:SetSquadronTakeoffFromParkingHot( AIRBASE.Nevada.Nellis_AFB ) -- Takaeoff from parking spot, engines running.
|
||||||
|
|
||||||
|
-- The Nellis airbase contains a squadron that flies an F-5... Less modern airplane.
|
||||||
|
-- So it needs a stronger "overhead".
|
||||||
|
A2A_GCICAP_Blue:SetSquadronOverhead( AIRBASE.Nevada.Nellis_AFB, 2 ) -- When 2 airplanes are attacking, we spawn 4 airplanes for defense.
|
||||||
|
A2A_GCICAP_Blue:SetSquadronGrouping( AIRBASE.Nevada.Nellis_AFB, 2 ) -- We group the spawned defence airplanes per 2 units.
|
||||||
|
|
||||||
BIN
Binary file not shown.
+54
@@ -0,0 +1,54 @@
|
|||||||
|
|
||||||
|
|
||||||
|
-- RED
|
||||||
|
|
||||||
|
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
|
||||||
|
A2A_GCICAP_Red = AI_A2A_GCICAP:New( { "RED EWR" }, { "4477th" }, { }, 2 )
|
||||||
|
|
||||||
|
A2A_GCICAP_Red:SetBorderZone( ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) )
|
||||||
|
|
||||||
|
-- Enable the tactical display panel. This is to see what this dispatcher is doing.
|
||||||
|
--A2A_GCICAP_Red:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly
|
||||||
|
-- without an assignment within 150km radius from a detected target, will engage that target.
|
||||||
|
A2A_GCICAP_Red:SetEngageRadius( 150000 )
|
||||||
|
|
||||||
|
-- The default take-off method is planes takeoff right in the air.
|
||||||
|
-- Here we specify to take off from a parking space, with engines already running.
|
||||||
|
A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( AIRBASE.Nevada.Tonopah_Test_Range_Airfield )
|
||||||
|
--A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( "Groom Lake AFB" )
|
||||||
|
|
||||||
|
|
||||||
|
-- BLUE
|
||||||
|
|
||||||
|
|
||||||
|
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
|
||||||
|
-- EWR network groups start with BLUE EWR.
|
||||||
|
-- Squadron templates which are placed above the colored airbase, start with 104th or 105th or 106th.
|
||||||
|
-- Perform CAP in a polygon zone placed near 104th, which is Nellis.
|
||||||
|
-- Perform 2 CAP.
|
||||||
|
A2A_GCICAP_Blue = AI_A2A_GCICAP:New( { "BLUE EWR" }, { "104th", "105th", "106th" }, { "104th CAP" }, 2 )
|
||||||
|
|
||||||
|
A2A_GCICAP_Blue:SetBorderZone( ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) ) )
|
||||||
|
|
||||||
|
-- Enable the tactical display panel. This is to see what this dispatcher is doing.
|
||||||
|
--A2A_GCICAP_Blue:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
|
||||||
|
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly
|
||||||
|
-- without an assignment within 150km radius from a detected target, will engage that target.
|
||||||
|
A2A_GCICAP_Blue:SetEngageRadius( 150000 )
|
||||||
|
|
||||||
|
-- The default take-off method is planes takeoff right in the air.
|
||||||
|
-- Here we specify other take off options.
|
||||||
|
A2A_GCICAP_Blue:SetSquadronTakeoffFromRunway( AIRBASE.Nevada.Boulder_City_Airport ) -- Takeoff from the runway.
|
||||||
|
A2A_GCICAP_Blue:SetSquadronTakeoffFromParkingCold( AIRBASE.Nevada.McCarran_International_Airport ) -- Takeoff from parking spot, with engines shut off.
|
||||||
|
--A2A_GCICAP_Blue:SetSquadronTakeoffFromParkingHot( AIRBASE.Nevada.Nellis_AFB ) -- Takaeoff from parking spot, engines running.
|
||||||
|
|
||||||
|
-- The Nellis airbase contains a squadron that flies an F-5... Less modern airplane.
|
||||||
|
-- So it needs a stronger "overhead".
|
||||||
|
A2A_GCICAP_Blue:SetSquadronOverhead( AIRBASE.Nevada.Nellis_AFB, 2 ) -- When 2 airplanes are attacking, we spawn 4 airplanes for defense.
|
||||||
|
A2A_GCICAP_Blue:SetSquadronGrouping( AIRBASE.Nevada.Nellis_AFB, 2 ) -- We group the spawned defence airplanes per 2 units.
|
||||||
|
|
||||||
+1748
File diff suppressed because it is too large
Load Diff
+27
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
|
||||||
|
-- RED
|
||||||
|
|
||||||
|
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
|
||||||
|
-- EWR network groups start with RED EWR, which are ships and patrols.
|
||||||
|
-- Squadron templates which are placed above the colored airbases, start with TR SQ.
|
||||||
|
-- Perform CAP, the zone for CAP starts with TR CAP, send minimal 10 groups of planes in the air.
|
||||||
|
A2A_GCICAP_Red = AI_A2A_GCICAP:New( { "TR SQ"}, { "TR SQ" }, { "TR CAP" }, 10 )
|
||||||
|
|
||||||
|
A2A_GCICAP_Red:SetBorderZone( ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) )
|
||||||
|
|
||||||
|
-- Enable the tactical display panel. This is to see what this dispatcher is doing.
|
||||||
|
--A2A_GCICAP_Red:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- BLUE
|
||||||
|
|
||||||
|
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
|
||||||
|
-- EWR network groups start with BLUE EWR.
|
||||||
|
-- Squadron templates which are placed above the colored airbases, start with UK SQ.
|
||||||
|
-- Perform no CAP.
|
||||||
|
A2A_GCICAP_Blue = AI_A2A_GCICAP:New( { "BLUE EWR" }, { "UK SQ" }, { }, 2 )
|
||||||
|
|
||||||
|
A2A_GCICAP_Blue:SetBorderZone( ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) ) )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BIN
Binary file not shown.
+1
-1
@@ -37,7 +37,7 @@ A2GDispatcher:SetSquadronCas2( "Maykop CAS", 200, 250, 300, 500, "RADIO" )
|
|||||||
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop CAS" )
|
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop CAS" )
|
||||||
A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 )
|
A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 )
|
||||||
|
|
||||||
A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP MIL-8MTV" }, 10 )
|
A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
|
||||||
A2GDispatcher:SetSquadronBai2( "Maykop BAI", 200, 250, 300, 500, "RADIO" )
|
A2GDispatcher:SetSquadronBai2( "Maykop BAI", 200, 250, 300, 500, "RADIO" )
|
||||||
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
|
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
|
||||||
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
|
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
-- Date Created: 02 Nov 2018
|
-- Date Created: 02 Nov 2018
|
||||||
|
|
||||||
|
|
||||||
CC = COMMANDCENTER:New( GROUP:FindByName( "HQ" ), "HQ" )
|
CC = COMMANDCENTER:New( GROUP:FindByName("HQ"),"HQ")
|
||||||
|
|
||||||
-- Define a SET_GROUP object that builds a collection of groups that define the recce network.
|
-- Define a SET_GROUP object that builds a collection of groups that define the recce network.
|
||||||
-- Here we build the network with all the groups that have a name starting with CCCP Recce.
|
-- Here we build the network with all the groups that have a name starting with CCCP Recce.
|
||||||
|
|||||||
BIN
Binary file not shown.
+52
@@ -0,0 +1,52 @@
|
|||||||
|
--- Detect and attack a set of enemy units using helicopters.
|
||||||
|
-- Name: AID-A2G-001 - Detection and Attack Helicopters
|
||||||
|
-- Author: FlightControl
|
||||||
|
-- Date Created: 02 Nov 2018
|
||||||
|
|
||||||
|
|
||||||
|
CC = COMMANDCENTER:New( GROUP:FindByName("HQ"),"HQ")
|
||||||
|
|
||||||
|
-- Define a SET_GROUP object that builds a collection of groups that define the recce network.
|
||||||
|
-- Here we build the network with all the groups that have a name starting with CCCP Recce.
|
||||||
|
DetectionSetGroup = SET_GROUP:New()
|
||||||
|
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
|
||||||
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
|
||||||
|
|
||||||
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
|
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
|
||||||
|
A2GDispatcher:SetCommandCenter( CC )
|
||||||
|
|
||||||
|
-- Add defense coordinates.
|
||||||
|
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
|
||||||
|
|
||||||
|
A2GDispatcher:SetDefenseReactivityHigh()
|
||||||
|
|
||||||
|
A2GDispatcher:SetDefenseRadius( 200000 )
|
||||||
|
|
||||||
|
A2GDispatcher:SetTacticalDisplay( true )
|
||||||
|
|
||||||
|
-- Setup the squadrons.
|
||||||
|
|
||||||
|
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 )
|
||||||
|
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 )
|
||||||
|
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
|
||||||
|
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 )
|
||||||
|
|
||||||
|
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
|
||||||
|
A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 )
|
||||||
|
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop CAS" )
|
||||||
|
A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 )
|
||||||
|
|
||||||
|
A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
|
||||||
|
A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 )
|
||||||
|
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
|
||||||
|
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
|
||||||
|
|
||||||
|
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
|
||||||
|
-- This to prevent helicopters to clutter.
|
||||||
|
-- Each helicopter group is taking off the FARP in hot start.
|
||||||
|
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
|
||||||
|
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
|
||||||
|
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user