Updated Moose.lua

This commit is contained in:
funkyfranky
2024-01-01 10:48:03 +00:00
parent 08c03ceceb
commit 05cec43639
106 changed files with 7510 additions and 7510 deletions
@@ -1,27 +1,27 @@
--- ---
-- Name: AID-008 - AI_A2A - CAP Grouping Test -- Name: AID-008 - AI_A2A - CAP Grouping Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 06 Aug 2017 -- Date Created: 06 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200 ) A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200 )
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 10, 30, 1 ) A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 10, 30, 1 )
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 ) A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
@@ -1,30 +1,30 @@
--- ---
-- Name: AID-009 - AI_A2A - Border Test -- Name: AID-009 - AI_A2A - Border Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 06 Aug 2017 -- Date Created: 06 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Setup the border zone. -- Setup the border zone.
-- In this case the border is a POLYGON, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Sochi", 1000, 1500 ) A2ADispatcher:SetSquadronGci( "Sochi", 1000, 1500 )
@@ -1,50 +1,50 @@
--- ---
-- Name: AID-010 - AI_A2A - RTB and ReEngage -- Name: AID-010 - AI_A2A - RTB and ReEngage
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 May 2017 -- Date Created: 30 May 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetDefaultTakeoffFromParkingCold() A2ADispatcher:SetDefaultTakeoffFromParkingCold()
A2ADispatcher:SetDefaultLandingAtEngineShutdown() A2ADispatcher:SetDefaultLandingAtEngineShutdown()
-- Blue attack simulation -- Blue attack simulation
local Frequency = 180 local Frequency = 180
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 8, 40 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
:InitDelayOn() :InitDelayOn()
:SpawnScheduled( Frequency, 0.5 ) :SpawnScheduled( Frequency, 0.5 )
@@ -1,51 +1,51 @@
--- ---
-- Name: AID-011 - AI_A2A - RTB Fuel Threshold test -- Name: AID-011 - AI_A2A - RTB Fuel Threshold test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 Jul 2017 -- Date Created: 30 Jul 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Set the fuel treshold to 40%. Airplanes will return when only 40% of fuel left in the tank. -- Set the fuel treshold to 40%. Airplanes will return when only 40% of fuel left in the tank.
A2ADispatcher:SetDefaultFuelThreshold( 0.4 ) A2ADispatcher:SetDefaultFuelThreshold( 0.4 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronOverhead( "Sochi", 1 ) A2ADispatcher:SetSquadronOverhead( "Sochi", 1 )
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 ) A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
-- CAP Squadron execution. -- CAP Squadron execution.
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingHot("Sochi") A2ADispatcher:SetSquadronTakeoffFromParkingHot("Sochi")
A2ADispatcher:SetSquadronLandingAtEngineShutdown("Sochi") A2ADispatcher:SetSquadronLandingAtEngineShutdown("Sochi")
@@ -1,51 +1,51 @@
--- ---
-- Name: AID-012 - AI_A2A - CAP Time Interval Test -- Name: AID-012 - AI_A2A - CAP Time Interval Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 Jul 2017 -- Date Created: 30 Jul 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
A2ADispatcher:SetDefaultCapLimit( 2 ) A2ADispatcher:SetDefaultCapLimit( 2 )
A2ADispatcher:SetDefaultCapTimeInterval( 300, 300 ) -- Spawn each 5 minutes. A2ADispatcher:SetDefaultCapTimeInterval( 300, 300 ) -- Spawn each 5 minutes.
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronOverhead( "Sochi", 1 ) A2ADispatcher:SetSquadronOverhead( "Sochi", 1 )
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 ) A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
-- CAP Squadron execution. -- CAP Squadron execution.
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingHot("Sochi") A2ADispatcher:SetSquadronTakeoffFromParkingHot("Sochi")
A2ADispatcher:SetSquadronLandingAtEngineShutdown("Sochi") A2ADispatcher:SetSquadronLandingAtEngineShutdown("Sochi")
@@ -1,47 +1,47 @@
--- ---
-- Name: AID-A2A-013 - Intercept Test -- Name: AID-A2A-013 - Intercept Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 31 Jul 2017 -- Date Created: 31 Jul 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Test intercept. -- Test intercept.
A2ADispatcher:SetIntercept( 450 ) A2ADispatcher:SetIntercept( 450 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" )
A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Sochi" ) A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Sochi" )
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Gelend" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Gelend" )
A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Gelend" ) A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Gelend" )
A2ADispatcher:Start() A2ADispatcher:Start()
@@ -1,48 +1,48 @@
--- ---
-- Name: AID-014 - AI_A2A - DisengageRange Test -- Name: AID-014 - AI_A2A - DisengageRange Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 31 Jul 2017 -- Date Created: 31 Jul 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Test intercept. -- Test intercept.
A2ADispatcher:SetIntercept( 450 ) A2ADispatcher:SetIntercept( 450 )
-- Test an other disengage radius. -- Test an other disengage radius.
A2ADispatcher:SetDisengageRadius( 150000 ) A2ADispatcher:SetDisengageRadius( 150000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" )
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Gelend" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Gelend" )
@@ -1,53 +1,53 @@
--- ---
-- Name: AID-015 - AI_A2A - Takeoff Test -- Name: AID-015 - AI_A2A - Takeoff Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 01 Aug 2017 -- Date Created: 01 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Test intercept. -- Test intercept.
A2ADispatcher:SetIntercept( 450 ) A2ADispatcher:SetIntercept( 450 )
-- Test an other disengage radius. -- Test an other disengage radius.
A2ADispatcher:SetDisengageRadius( 20000 ) A2ADispatcher:SetDisengageRadius( 20000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" }, 20 )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" )
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffFromRunway( "Gelend" ) A2ADispatcher:SetSquadronTakeoffFromRunway( "Gelend" )
A2ADispatcher:SetSquadron( "Anapa", AIRBASE.Caucasus.Anapa_Vityazevo, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Anapa", AIRBASE.Caucasus.Anapa_Vityazevo, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronGci( "Anapa", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Anapa", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffInAir( "Anapa" ) A2ADispatcher:SetSquadronTakeoffInAir( "Anapa" )
A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronGci( "Novo", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Novo", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" ) A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" )
@@ -1,50 +1,50 @@
--- ---
-- Name: AID-016 - AI_A2A - Refuel Tanker Test -- Name: AID-016 - AI_A2A - Refuel Tanker Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 01 Aug 2017 -- Date Created: 01 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Test intercept. -- Test intercept.
A2ADispatcher:SetIntercept( 450 ) A2ADispatcher:SetIntercept( 450 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-34" }, 20 ) 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:SetSquadronCap( "Sochi", ZONE:New( "PatrolZone" ), 4000, 8000, 600, 800, 1000, 1300 )
A2ADispatcher:SetSquadronCapInterval("Sochi", 2, 30, 600, 1 ) A2ADispatcher:SetSquadronCapInterval("Sochi", 2, 30, 600, 1 )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetDefaultFuelThreshold( 0.9 ) A2ADispatcher:SetDefaultFuelThreshold( 0.9 )
A2ADispatcher:SetDefaultTanker( "Tanker" ) A2ADispatcher:SetDefaultTanker( "Tanker" )
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-30" }, 20 ) A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-30" }, 20 )
A2ADispatcher:SetSquadronCap( "Gelend", ZONE:New( "PatrolZoneGelend" ), 4000, 8000, 600, 800, 1000, 1300 ) A2ADispatcher:SetSquadronCap( "Gelend", ZONE:New( "PatrolZoneGelend" ), 4000, 8000, 600, 800, 1000, 1300 )
A2ADispatcher:SetSquadronCapInterval( "Gelend", 2, 30, 600, 1 ) A2ADispatcher:SetSquadronCapInterval( "Gelend", 2, 30, 600, 1 )
A2ADispatcher:SetSquadronGci( "Gelend", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Gelend", 900, 1200 )
A2ADispatcher:SetSquadronFuelThreshold( "Gelend", 0.8 ) A2ADispatcher:SetSquadronFuelThreshold( "Gelend", 0.8 )
A2ADispatcher:SetSquadronTanker( "Gelend", "TankerGelend" ) A2ADispatcher:SetSquadronTanker( "Gelend", "TankerGelend" )
@@ -1,44 +1,44 @@
--- ---
-- Name: AID-017 - AI_A2A - Spawn Altitude Test -- Name: AID-017 - AI_A2A - Spawn Altitude Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 05 Aug 2017 -- Date Created: 05 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Set the default takeoff method in the air. -- Set the default takeoff method in the air.
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
-- Set the default takeoff altitude at 2000 meters. -- Set the default takeoff altitude at 2000 meters.
A2ADispatcher:SetDefaultTakeoffInAirAltitude( 2000 ) -- Takeoff by default at 2000 meters. A2ADispatcher:SetDefaultTakeoffInAirAltitude( 2000 ) -- Takeoff by default at 2000 meters.
-- Spawn for Sochi airbase. -- Spawn for Sochi airbase.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-34" }, 20 ) 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:SetSquadronCap( "Sochi", ZONE:New( "PatrolZone" ), 4000, 8000, 600, 800, 1000, 1300 )
A2ADispatcher:SetSquadronCapInterval("Sochi", 2, 30, 600, 1 ) A2ADispatcher:SetSquadronCapInterval("Sochi", 2, 30, 600, 1 )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
-- Spawn for Gelend airbase. -- Spawn for Gelend airbase.
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-30" }, 20 ) A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-30" }, 20 )
A2ADispatcher:SetSquadronCap( "Gelend", ZONE:New( "PatrolZoneGelend" ), 4000, 8000, 600, 800, 1000, 1300 ) A2ADispatcher:SetSquadronCap( "Gelend", ZONE:New( "PatrolZoneGelend" ), 4000, 8000, 600, 800, 1000, 1300 )
A2ADispatcher:SetSquadronCapInterval( "Gelend", 2, 30, 600, 1 ) A2ADispatcher:SetSquadronCapInterval( "Gelend", 2, 30, 600, 1 )
A2ADispatcher:SetSquadronGci( "Gelend", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Gelend", 900, 1200 )
-- Let Gelend squadron take off in the air at 4000 meters. -- Let Gelend squadron take off in the air at 4000 meters.
A2ADispatcher:SetSquadronTakeoffInAir( "Gelend", 4000 ) -- Takeoff in Gelend at 4000 meters. A2ADispatcher:SetSquadronTakeoffInAir( "Gelend", 4000 ) -- Takeoff in Gelend at 4000 meters.
-- Run the mission and observe the spawning altitudes. -- Run the mission and observe the spawning altitudes.
@@ -1,45 +1,45 @@
--- ---
-- Name: AID-018 - AI_A2A - Unlimited Resources Test -- Name: AID-018 - AI_A2A - Unlimited Resources Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 05 Aug 2017 -- Date Created: 05 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
-- Unlimited resources, as the Resources parameter of the :SetSquadron method is not given. -- 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:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP MIG-31" } )
A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Sochi", 900, 1200 )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Sochi" )
A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Gelend", AIRBASE.Caucasus.Gelendzhik, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Gelend", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffFromRunway( "Gelend" ) A2ADispatcher:SetSquadronTakeoffFromRunway( "Gelend" )
A2ADispatcher:SetSquadron( "Anapa", AIRBASE.Caucasus.Anapa_Vityazevo, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Anapa", AIRBASE.Caucasus.Anapa_Vityazevo, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Anapa", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Anapa", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffFromRunway( "Anapa" ) A2ADispatcher:SetSquadronTakeoffFromRunway( "Anapa" )
A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Novo", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Novo", 800, 1200 )
A2ADispatcher:SetSquadronTakeoffFromRunway( "Novo" ) A2ADispatcher:SetSquadronTakeoffFromRunway( "Novo" )
@@ -1,31 +1,31 @@
--- ---
-- Name: AID-019 - AI_A2A - Engage Range Test -- Name: AID-019 - AI_A2A - Engage Range Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 06 Aug 2017 -- Date Created: 06 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a radius of 50km where any airborne friendly -- 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. -- without an assignment within 50km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 50000 ) A2ADispatcher:SetEngageRadius( 50000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27" } )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200 ) A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200 )
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 10, 30, 1 ) A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 10, 30, 1 )
@@ -1,60 +1,60 @@
--- ---
-- Name: AID-A2A-020 - GCI RTB and ReEngage -- Name: AID-A2A-020 - GCI RTB and ReEngage
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 May 2017 -- Date Created: 30 May 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
--A2ADispatcher:SetBorderZone( CCCPBorderZone ) --A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Kras1", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Kras1", 900, 1200 )
A2ADispatcher:SetSquadron( "Kras2", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras2", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Kras2", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Kras2", 900, 1200 )
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "May", 900, 1200 ) A2ADispatcher:SetSquadronGci( "May", 900, 1200 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
A2ADispatcher:Start() A2ADispatcher:Start()
-- Blue attack simulation -- Blue attack simulation
local Frequency = 300 local Frequency = 300
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 8, 40 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
:InitDelayOn() :InitDelayOn()
:SpawnScheduled( Frequency, 0.5 ) :SpawnScheduled( Frequency, 0.5 )
@@ -1,42 +1,42 @@
--- ---
-- Name: AID-021 - AI_A2A - GCI Radius Test -- Name: AID-021 - AI_A2A - GCI Radius Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 May 2017 -- Date Created: 30 May 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetGciRadius( 100000 ) A2ADispatcher:SetGciRadius( 100000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Kras1", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Kras1", 900, 1200 )
A2ADispatcher:SetSquadron( "Kras2", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras2", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Kras2", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Kras2", 900, 1200 )
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "May", 900, 1200 ) A2ADispatcher:SetSquadronGci( "May", 900, 1200 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
@@ -1,49 +1,49 @@
--- ---
-- Name: AID-022 - AI_A2A - GCI Overhead -- Name: AID-022 - AI_A2A - GCI Overhead
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 05 Sep 2017 -- Date Created: 05 Sep 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "May", 900, 1200 ) A2ADispatcher:SetSquadronGci( "May", 900, 1200 )
A2ADispatcher:SetSquadronOverhead( "May", 0.25 ) A2ADispatcher:SetSquadronOverhead( "May", 0.25 )
A2ADispatcher:SetSquadron( "Kras", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras", AIRBASE.Caucasus.Krasnodar_Center, { "SQ CCCP SU-27" } )
A2ADispatcher:SetSquadronGci( "Kras", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Kras", 900, 1200 )
A2ADispatcher:SetSquadronOverhead( "Kras", 1.5 ) A2ADispatcher:SetSquadronOverhead( "Kras", 1.5 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
-- Blue attack simulation -- Blue attack simulation
local Frequency = 30 local Frequency = 30
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO" ) :New( "RT NATO" )
:InitLimit( 1, 40 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
:InitDelayOn() :InitDelayOn()
:SpawnScheduled( Frequency, 0.5 ) :SpawnScheduled( Frequency, 0.5 )
@@ -1,54 +1,54 @@
--- ---
-- Name: AID-A2A-030 - CAP RTB and ReEngage -- Name: AID-A2A-030 - CAP RTB and ReEngage
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 May 2017 -- Date Created: 30 May 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
--Detection:BoundDetectedZones() --Detection:BoundDetectedZones()
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 200000 ) A2ADispatcher:SetEngageRadius( 200000 )
A2ADispatcher:SetDisengageRadius( 200000 ) A2ADispatcher:SetDisengageRadius( 200000 )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Kras1", 800, 1200, 4000, 8000, CAPZoneWest, 600, 800, 4000, 8000, "BARO" ) A2ADispatcher:SetSquadronCap( "Kras1", 800, 1200, 4000, 8000, CAPZoneWest, 600, 800, 4000, 8000, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120, 1 )
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCapV2( "May", 800, 1200, 400, 500, "RADIO", CAPZoneWest, 600, 800, 4000, 8000, "BARO" ) A2ADispatcher:SetSquadronCapV2( "May", 800, 1200, 400, 500, "RADIO", CAPZoneWest, 600, 800, 4000, 8000, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120, 1 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
-- Blue attack simulation -- Blue attack simulation
local Frequency = 150 local Frequency = 150
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 6, 40 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
:InitDelayOn() :InitDelayOn()
:SpawnScheduled( Frequency, 0.5 ) :SpawnScheduled( Frequency, 0.5 )
@@ -1,35 +1,35 @@
--- ---
-- Name: AID-A2A-031 - CAP out of fuel -- Name: AID-A2A-031 - CAP out of fuel
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 Aug 2017 -- Date Created: 30 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Kras1", 1, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "Kras1", 1, 30, 120, 1 )
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCapV2( "May", 1000, 1200, 30, 30, "RADIO", CAPZoneWest, 600, 800, 4000, 8000, "BARO" ) A2ADispatcher:SetSquadronCapV2( "May", 1000, 1200, 30, 30, "RADIO", CAPZoneWest, 600, 800, 4000, 8000, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120, 1 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
@@ -1,46 +1,46 @@
--- ---
-- Name: AID-032 - AI_A2A - CAP Damage -- Name: AID-032 - AI_A2A - CAP Damage
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 29 Oct 2017 -- Date Created: 29 Oct 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP MIG-31" }, 20 ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP MIG-31" }, 20 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Kras1", 2, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "Kras1", 2, 30, 120, 1 )
--A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 ) --A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) --CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
--A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) --A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
--A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120, 1 ) --A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120, 1 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingAtEngineShutdown() A2ADispatcher:SetDefaultLandingAtEngineShutdown()
-- Blue attack simulation -- Blue attack simulation
local Frequency = 300 local Frequency = 300
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 6, 40 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
:InitDelayOn() :InitDelayOn()
:SpawnScheduled( Frequency, 0.5 ) :SpawnScheduled( Frequency, 0.5 )
@@ -1,47 +1,47 @@
--- ---
-- Name: AID-040 - AI_A2A - CAP Independent Detection in EWR -- Name: AID-040 - AI_A2A - CAP Independent Detection in EWR
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 Aug 2017 -- Date Created: 30 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
A2ADispatcher:SetEngageRadius( 90000 ) A2ADispatcher:SetEngageRadius( 90000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120 ) A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120 )
--A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 ) --A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) --CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
--A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) --A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
--A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120 ) --A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
-- Blue attack simulation -- Blue attack simulation
local Frequency = 180 local Frequency = 180
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO" ) :New( "RT NATO" )
:InitLimit( 2, 40 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
:InitDelayOn() :InitDelayOn()
:SpawnScheduled( Frequency, 0.5 ) :SpawnScheduled( Frequency, 0.5 )
@@ -1,47 +1,47 @@
--- ---
-- Name: AID-040 - AI_A2A - CAP Independent Detection in EWR -- Name: AID-040 - AI_A2A - CAP Independent Detection in EWR
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 Aug 2017 -- Date Created: 30 Aug 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
A2ADispatcher:SetEngageRadius( 90000 ) A2ADispatcher:SetEngageRadius( 90000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120 ) A2ADispatcher:SetSquadronCapInterval( "Kras1", 4, 30, 120 )
--A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 ) --A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) --CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
--A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) --A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
--A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120 ) --A2ADispatcher:SetSquadronCapInterval( "May", 1, 30, 120 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
-- Blue attack simulation -- Blue attack simulation
local Frequency = 180 local Frequency = 180
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO" ) :New( "RT NATO" )
:InitLimit( 2, 40 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
:InitDelayOn() :InitDelayOn()
:SpawnScheduled( Frequency, 0.5 ) :SpawnScheduled( Frequency, 0.5 )
@@ -1,49 +1,49 @@
--- ---
-- Name: AID-041 - AI_A2A - CAP Independent Detection in EWR with Clients -- Name: AID-041 - AI_A2A - CAP Independent Detection in EWR with Clients
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 01 Sep 2017 -- Date Created: 01 Sep 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
Detection:SetRefreshTimeInterval( 10 ) Detection:SetRefreshTimeInterval( 10 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
A2ADispatcher:SetRefreshTimeInterval( 10 ) A2ADispatcher:SetRefreshTimeInterval( 10 )
A2ADispatcher:SetEngageRadius( 90000 ) A2ADispatcher:SetEngageRadius( 90000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" } )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Kras1", 2, 30, 120 ) A2ADispatcher:SetSquadronCapInterval( "Kras1", 2, 30, 120 )
A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "May", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP SU-27" }, 20 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "May", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "May", 2, 30, 120 ) A2ADispatcher:SetSquadronCapInterval( "May", 2, 30, 120 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
-- Blue attack simulation -- Blue attack simulation
--local Frequency = 600 --local Frequency = 600
-- --
--BlueSpawn2 = SPAWN --BlueSpawn2 = SPAWN
-- :New( "RT NATO" ) -- :New( "RT NATO" )
-- :InitLimit( 2, 40 ) -- :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" } ) -- :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 ) -- :InitRandomizeRoute( 0, 0, 30000 )
-- :InitDelayOn() -- :InitDelayOn()
-- :SpawnScheduled( Frequency, 0.5 ) -- :SpawnScheduled( Frequency, 0.5 )
@@ -1,68 +1,68 @@
--- ---
-- Name: AID-A2A-050 - Resources -- Name: AID-A2A-050 - Resources
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 21 Sep 2017 -- Date Created: 21 Sep 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 250000 ) A2ADispatcher:SetEngageRadius( 250000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27" }, 6 ) A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27" }, 6 )
-- Setup the overhead -- Setup the overhead
A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 ) A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 )
-- Setup the Grouping -- Setup the Grouping
A2ADispatcher:SetSquadronGrouping( "Mineralnye", 1 ) A2ADispatcher:SetSquadronGrouping( "Mineralnye", 1 )
-- Setup the Takeoff methods -- Setup the Takeoff methods
A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot ) A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot )
-- Setup the Landing methods -- Setup the Landing methods
A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mineralnye" ) A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mineralnye" )
-- Setup the visibility before start. -- Setup the visibility before start.
A2ADispatcher:SetSquadronVisible( "Mineralnye" ) A2ADispatcher:SetSquadronVisible( "Mineralnye" )
-- CAP Squadron execution. -- CAP Squadron execution.
CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) ) CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 ) A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 1, 30, 60, 1 ) A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 1, 30, 60, 1 )
A2ADispatcher:SetSquadronFuelThreshold( "Mineralnye", 0.20 ) A2ADispatcher:SetSquadronFuelThreshold( "Mineralnye", 0.20 )
-- GCI Squadron execution. -- GCI Squadron execution.
--A2ADispatcher:SetSquadronGci( "Mineralnye", 900, 1200 ) --A2ADispatcher:SetSquadronGci( "Mineralnye", 900, 1200 )
-- Blue attack simulation -- Blue attack simulation
local Frequency = 60 local Frequency = 60
--BlueSpawn1 = SPAWN --BlueSpawn1 = SPAWN
-- :New( "RT NATO 1" ) -- :New( "RT NATO 1" )
-- :InitLimit( 2, 10 ) -- :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" } ) -- :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 ) -- :InitRandomizeRoute( 0, 0, 30000 )
-- --:InitDelayOn() -- --:InitDelayOn()
-- :SpawnScheduled( Frequency, 0.4 ) -- :SpawnScheduled( Frequency, 0.4 )
@@ -1,67 +1,67 @@
--- ---
-- Name: AID-A2A-050 - Resources -- Name: AID-A2A-050 - Resources
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 21 Sep 2017 -- Date Created: 21 Sep 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 250000 ) A2ADispatcher:SetEngageRadius( 250000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27" }, 30 ) A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27" }, 30 )
-- Setup the overhead -- Setup the overhead
A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 ) A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 )
-- Setup the Grouping -- Setup the Grouping
A2ADispatcher:SetSquadronGrouping( "Mineralnye", 1 ) A2ADispatcher:SetSquadronGrouping( "Mineralnye", 1 )
-- Setup the Takeoff methods -- Setup the Takeoff methods
A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Air ) A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Air )
-- Setup the Landing methods -- Setup the Landing methods
A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" ) A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" )
-- CAP Squadron execution. -- CAP Squadron execution.
--CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) ) --CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
--A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 ) --A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
--A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 )
-- GCI Squadron execution. -- GCI Squadron execution.
A2ADispatcher:SetSquadronGci( "Mineralnye", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Mineralnye", 900, 1200 )
CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } ) CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
-- Blue attack simulation -- Blue attack simulation
local Frequency = 60 local Frequency = 60
BlueSpawn1 = SPAWN BlueSpawn1 = SPAWN
:New( "RT NATO 1" ) :New( "RT NATO 1" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
@@ -1,67 +1,67 @@
--- ---
-- Name: AID-060 - AI_A2A - Takeoff From Runway Test -- Name: AID-060 - AI_A2A - Takeoff From Runway Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 21 Sep 2017 -- Date Created: 21 Sep 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 250000 ) A2ADispatcher:SetEngageRadius( 250000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27" }, 20 )
-- Setup the overhead -- Setup the overhead
A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 ) A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 )
-- Setup the Grouping -- Setup the Grouping
A2ADispatcher:SetSquadronGrouping( "Mineralnye", 1 ) A2ADispatcher:SetSquadronGrouping( "Mineralnye", 1 )
-- Setup the Takeoff methods -- Setup the Takeoff methods
A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Runway ) A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Runway )
-- Setup the Landing methods -- Setup the Landing methods
A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" ) A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" )
-- CAP Squadron execution. -- CAP Squadron execution.
--CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) ) --CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
--A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 ) --A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
--A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 )
-- GCI Squadron execution. -- GCI Squadron execution.
A2ADispatcher:SetSquadronGci( "Mineralnye", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Mineralnye", 900, 1200 )
CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } ) CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
-- Blue attack simulation -- Blue attack simulation
local Frequency = 60 local Frequency = 60
BlueSpawn1 = SPAWN BlueSpawn1 = SPAWN
:New( "RT NATO 1" ) :New( "RT NATO 1" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
@@ -1,61 +1,61 @@
--- ---
-- Name: AID-061 - AI_A2A - Takeoff From Ship Runway Test -- Name: AID-061 - AI_A2A - Takeoff From Ship Runway Test
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 21 Sep 2017 -- Date Created: 21 Sep 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 250000 ) A2ADispatcher:SetEngageRadius( 250000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kuznetsov", "Kuznetsov", { "SQ CCCP SU-33" }, 20 ) A2ADispatcher:SetSquadron( "Kuznetsov", "Kuznetsov", { "SQ CCCP SU-33" }, 20 )
-- Setup the overhead -- Setup the overhead
A2ADispatcher:SetSquadronOverhead( "Kuznetsov", 1.2 ) A2ADispatcher:SetSquadronOverhead( "Kuznetsov", 1.2 )
-- Setup the Grouping -- Setup the Grouping
A2ADispatcher:SetSquadronGrouping( "Kuznetsov", 1 ) A2ADispatcher:SetSquadronGrouping( "Kuznetsov", 1 )
-- Setup the Takeoff methods -- Setup the Takeoff methods
A2ADispatcher:SetSquadronTakeoff( "Kuznetsov", AI_A2A_DISPATCHER.Takeoff.Runway ) A2ADispatcher:SetSquadronTakeoff( "Kuznetsov", AI_A2A_DISPATCHER.Takeoff.Runway )
-- Setup the Landing methods -- Setup the Landing methods
A2ADispatcher:SetSquadronLandingAtRunway( "Kuznetsov" ) A2ADispatcher:SetSquadronLandingAtRunway( "Kuznetsov" )
-- CAP Squadron execution. -- CAP Squadron execution.
--CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) ) --CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
--A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 ) --A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
--A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 2, 30, 60, 1 )
-- GCI Squadron execution. -- GCI Squadron execution.
A2ADispatcher:SetSquadronGci( "Kuznetsov", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Kuznetsov", 900, 1200 )
CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } ) CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
-- Blue attack simulation -- Blue attack simulation
local Frequency = 60 local Frequency = 60
BlueSpawn1 = SPAWN BlueSpawn1 = SPAWN
:New( "RT NATO 1" ) :New( "RT NATO 1" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
@@ -1,39 +1,39 @@
--- ---
-- Name: AID-070 - AI_A2A - CAP - Player Exit -- Name: AID-070 - AI_A2A - CAP - Player Exit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 Oct 2017 -- Date Created: 30 Oct 2017
-- --
-- Test Scenario(s): -- Test Scenario(s):
-- --
-- Now take a seat in the client plane as a player. -- Now take a seat in the client plane as a player.
-- Do the following tests after the plane has been spawned. -- Do the following tests after the plane has been spawned.
-- 1. Immediately exit the plane. -- 1. Immediately exit the plane.
-- 2. Only exit the plane once the defender is engaged. -- 2. Only exit the plane once the defender is engaged.
-- 3. Let the defender shoot you. -- 3. Let the defender shoot you.
-- In all these scenarios, observe if the defender is continuing its patrol. -- 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. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Kras1", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Kras1", 1, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "Kras1", 1, 30, 120, 1 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
@@ -1,37 +1,37 @@
--- ---
-- Name: AID-071 - AI_A2A - GCI - Player Exit -- Name: AID-071 - AI_A2A - GCI - Player Exit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 Oct 2017 -- Date Created: 30 Oct 2017
-- --
-- Test Scenario(s): -- Test Scenario(s):
-- --
-- Now take a seat in the client plane as a player. -- Now take a seat in the client plane as a player.
-- Do the following tests after the plane has been spawned. -- Do the following tests after the plane has been spawned.
-- 1. Immediately exit the plane. -- 1. Immediately exit the plane.
-- 2. Only exit the plane once the defender is engaged. -- 2. Only exit the plane once the defender is engaged.
-- 3. Let the defender shoot you. -- 3. Let the defender shoot you.
-- In all these scenarios, observe if the defender is returning to base. -- 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. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 ) A2ADispatcher:SetSquadron( "Kras1", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "SQ CCCP SU-27" }, 20 )
A2ADispatcher:SetSquadronGci( "Kras1", 800, 1200 ) A2ADispatcher:SetSquadronGci( "Kras1", 800, 1200 )
A2ADispatcher:SetDefaultTakeoffInAir() A2ADispatcher:SetDefaultTakeoffInAir()
A2ADispatcher:SetDefaultLandingNearAirbase() A2ADispatcher:SetDefaultLandingNearAirbase()
@@ -1,128 +1,128 @@
--- ---
-- Name: AID-A2A-100 - Demonstration -- Name: AID-A2A-100 - Demonstration
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 May 2017 -- Date Created: 30 May 2017
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 120000 ) A2ADispatcher:SetEngageRadius( 120000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD" }, 16 ) A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD" }, 16 )
A2ADispatcher:SetSquadron( "Maykop", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP MIG-31" }, 20 ) A2ADispatcher:SetSquadron( "Maykop", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP MIG-31" }, 20 )
A2ADispatcher:SetSquadron( "Mozdok", AIRBASE.Caucasus.Mozdok, { "SQ CCCP MIG-31" }, 16 ) A2ADispatcher:SetSquadron( "Mozdok", AIRBASE.Caucasus.Mozdok, { "SQ CCCP MIG-31" }, 16 )
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD", "SQ CCCP SU-34", "SQ CCCP MIG-31", "SQ CCCP MIG-29S" }, 40 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD", "SQ CCCP SU-34", "SQ CCCP MIG-31", "SQ CCCP MIG-29S" }, 40 )
A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 16 ) A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 16 )
-- Setup the overhead -- Setup the overhead
A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 ) A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 )
A2ADispatcher:SetSquadronOverhead( "Maykop", 1 ) A2ADispatcher:SetSquadronOverhead( "Maykop", 1 )
A2ADispatcher:SetSquadronOverhead( "Mozdok", 1 ) A2ADispatcher:SetSquadronOverhead( "Mozdok", 1 )
A2ADispatcher:SetSquadronOverhead( "Sochi", 2 ) A2ADispatcher:SetSquadronOverhead( "Sochi", 2 )
A2ADispatcher:SetSquadronOverhead( "Novo", 1.5 ) A2ADispatcher:SetSquadronOverhead( "Novo", 1.5 )
-- Setup the Grouping -- Setup the Grouping
A2ADispatcher:SetSquadronGrouping( "Mineralnye", 4 ) A2ADispatcher:SetSquadronGrouping( "Mineralnye", 4 )
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 ) A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
A2ADispatcher:SetSquadronGrouping( "Novo", 3 ) A2ADispatcher:SetSquadronGrouping( "Novo", 3 )
-- Setup the Takeoff methods -- Setup the Takeoff methods
A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot ) A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot )
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Sochi" ) A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Sochi" )
A2ADispatcher:SetSquadronTakeoffFromRunway( "Mozdok" ) A2ADispatcher:SetSquadronTakeoffFromRunway( "Mozdok" )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Maykop" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Maykop" )
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" ) A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" )
-- Setup the Landing methods -- Setup the Landing methods
A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" ) A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" )
A2ADispatcher:SetSquadronLandingNearAirbase( "Sochi" ) A2ADispatcher:SetSquadronLandingNearAirbase( "Sochi" )
A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mozdok" ) A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mozdok" )
A2ADispatcher:SetSquadronLandingNearAirbase( "Maykop" ) A2ADispatcher:SetSquadronLandingNearAirbase( "Maykop" )
A2ADispatcher:SetSquadronLanding( "Novo", AI_A2A_DISPATCHER.Landing.AtRunway ) A2ADispatcher:SetSquadronLanding( "Novo", AI_A2A_DISPATCHER.Landing.AtRunway )
-- CAP Squadron execution. -- CAP Squadron execution.
CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) ) CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 ) A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 6, 30, 60, 1 ) A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 6, 30, 60, 1 )
CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
CAPZoneMiddle = ZONE:New( "CAP Zone Middle") CAPZoneMiddle = ZONE:New( "CAP Zone Middle")
A2ADispatcher:SetSquadronCap( "Maykop", CAPZoneMiddle, 4000, 8000, 600, 800, 800, 1200, "RADIO" ) A2ADispatcher:SetSquadronCap( "Maykop", CAPZoneMiddle, 4000, 8000, 600, 800, 800, 1200, "RADIO" )
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 ) A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
-- GCI Squadron execution. -- GCI Squadron execution.
A2ADispatcher:SetSquadronGci( "Mozdok", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Mozdok", 900, 1200 )
A2ADispatcher:SetSquadronGci( "Novo", 900, 2100 ) A2ADispatcher:SetSquadronGci( "Novo", 900, 2100 )
A2ADispatcher:SetSquadronGci( "Maykop", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Maykop", 900, 1200 )
-- Set the squadrons visible before startup. -- Set the squadrons visible before startup.
A2ADispatcher:SetSquadronVisible( "Mineralnye" ) A2ADispatcher:SetSquadronVisible( "Mineralnye" )
A2ADispatcher:SetSquadronVisible( "Sochi" ) A2ADispatcher:SetSquadronVisible( "Sochi" )
A2ADispatcher:SetSquadronVisible( "Mozdok" ) A2ADispatcher:SetSquadronVisible( "Mozdok" )
A2ADispatcher:SetSquadronVisible( "Maykop" ) A2ADispatcher:SetSquadronVisible( "Maykop" )
--A2ADispatcher:SetSquadronVisible( "Novo" ) --A2ADispatcher:SetSquadronVisible( "Novo" )
--CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } ) --CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
-- Blue attack simulation -- Blue attack simulation
local Frequency = 300 local Frequency = 300
BlueSpawn1 = SPAWN BlueSpawn1 = SPAWN
:New( "RT NATO 1" ) :New( "RT NATO 1" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn3 = SPAWN BlueSpawn3 = SPAWN
:New( "RT NATO 3" ) :New( "RT NATO 3" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn4 = SPAWN BlueSpawn4 = SPAWN
:New( "RT NATO 4" ) :New( "RT NATO 4" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
@@ -1,131 +1,131 @@
--- ---
-- Name: AID-A2A-100 - Demonstration -- Name: AID-A2A-100 - Demonstration
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 May 2017 -- Date Created: 30 May 2017
local CommandCenter = COMMANDCENTER:New( GROUP:FindByName( "HQ" ), "HQ" ) local CommandCenter = COMMANDCENTER:New( GROUP:FindByName( "HQ" ), "HQ" )
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- 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 = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetCommandCenter(CommandCenter) A2ADispatcher:SetCommandCenter(CommandCenter)
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 120000 ) A2ADispatcher:SetEngageRadius( 120000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD" }, 16 ) A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD" }, 16 )
A2ADispatcher:SetSquadron( "Maykop", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP MIG-31" }, 20 ) A2ADispatcher:SetSquadron( "Maykop", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP MIG-31" }, 20 )
A2ADispatcher:SetSquadron( "Mozdok", AIRBASE.Caucasus.Mozdok, { "SQ CCCP MIG-31" }, 16 ) A2ADispatcher:SetSquadron( "Mozdok", AIRBASE.Caucasus.Mozdok, { "SQ CCCP MIG-31" }, 16 )
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD", "SQ CCCP SU-34", "SQ CCCP MIG-31", "SQ CCCP MIG-29S" }, 40 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD", "SQ CCCP SU-34", "SQ CCCP MIG-31", "SQ CCCP MIG-29S" }, 40 )
A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 16 ) A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 16 )
-- Setup the overhead -- Setup the overhead
A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 ) A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 )
A2ADispatcher:SetSquadronOverhead( "Maykop", 1 ) A2ADispatcher:SetSquadronOverhead( "Maykop", 1 )
A2ADispatcher:SetSquadronOverhead( "Mozdok", 1 ) A2ADispatcher:SetSquadronOverhead( "Mozdok", 1 )
A2ADispatcher:SetSquadronOverhead( "Sochi", 2 ) A2ADispatcher:SetSquadronOverhead( "Sochi", 2 )
A2ADispatcher:SetSquadronOverhead( "Novo", 1.5 ) A2ADispatcher:SetSquadronOverhead( "Novo", 1.5 )
-- Setup the Grouping -- Setup the Grouping
A2ADispatcher:SetSquadronGrouping( "Mineralnye", 4 ) A2ADispatcher:SetSquadronGrouping( "Mineralnye", 4 )
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 ) A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
A2ADispatcher:SetSquadronGrouping( "Novo", 3 ) A2ADispatcher:SetSquadronGrouping( "Novo", 3 )
-- Setup the Takeoff methods -- Setup the Takeoff methods
A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot ) A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot )
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Sochi" ) A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Sochi" )
A2ADispatcher:SetSquadronTakeoffFromRunway( "Mozdok" ) A2ADispatcher:SetSquadronTakeoffFromRunway( "Mozdok" )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Maykop" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Maykop" )
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" ) A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" )
-- Setup the Landing methods -- Setup the Landing methods
A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" ) A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" )
A2ADispatcher:SetSquadronLandingNearAirbase( "Sochi" ) A2ADispatcher:SetSquadronLandingNearAirbase( "Sochi" )
A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mozdok" ) A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mozdok" )
A2ADispatcher:SetSquadronLandingNearAirbase( "Maykop" ) A2ADispatcher:SetSquadronLandingNearAirbase( "Maykop" )
A2ADispatcher:SetSquadronLanding( "Novo", AI_A2A_DISPATCHER.Landing.AtRunway ) A2ADispatcher:SetSquadronLanding( "Novo", AI_A2A_DISPATCHER.Landing.AtRunway )
-- CAP Squadron execution. -- CAP Squadron execution.
--CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) ) --CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
--A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 ) --A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
--A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 6, 30, 60, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 6, 30, 60, 1 )
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) --CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
--A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) --A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
--A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
--CAPZoneMiddle = ZONE:New( "CAP Zone Middle") --CAPZoneMiddle = ZONE:New( "CAP Zone Middle")
--A2ADispatcher:SetSquadronCap( "Maykop", CAPZoneMiddle, 4000, 8000, 600, 800, 800, 1200, "RADIO" ) --A2ADispatcher:SetSquadronCap( "Maykop", CAPZoneMiddle, 4000, 8000, 600, 800, 800, 1200, "RADIO" )
--A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
-- GCI Squadron execution. -- GCI Squadron execution.
A2ADispatcher:SetSquadronGci( "Mozdok", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Mozdok", 900, 1200 )
A2ADispatcher:SetSquadronGci( "Novo", 900, 2100 ) A2ADispatcher:SetSquadronGci( "Novo", 900, 2100 )
A2ADispatcher:SetSquadronGci( "Maykop", 900, 1200 ) A2ADispatcher:SetSquadronGci( "Maykop", 900, 1200 )
-- Set the squadrons visible before startup. -- Set the squadrons visible before startup.
--A2ADispatcher:SetSquadronVisible( "Mineralnye" ) --A2ADispatcher:SetSquadronVisible( "Mineralnye" )
--A2ADispatcher:SetSquadronVisible( "Sochi" ) --A2ADispatcher:SetSquadronVisible( "Sochi" )
--A2ADispatcher:SetSquadronVisible( "Mozdok" ) --A2ADispatcher:SetSquadronVisible( "Mozdok" )
--A2ADispatcher:SetSquadronVisible( "Maykop" ) --A2ADispatcher:SetSquadronVisible( "Maykop" )
--A2ADispatcher:SetSquadronVisible( "Novo" ) --A2ADispatcher:SetSquadronVisible( "Novo" )
--CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } ) --CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
-- Blue attack simulation -- Blue attack simulation
local Frequency = 300 local Frequency = 300
BlueSpawn1 = SPAWN BlueSpawn1 = SPAWN
:New( "RT NATO 1" ) :New( "RT NATO 1" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn3 = SPAWN BlueSpawn3 = SPAWN
:New( "RT NATO 3" ) :New( "RT NATO 3" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn4 = SPAWN BlueSpawn4 = SPAWN
:New( "RT NATO 4" ) :New( "RT NATO 4" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
@@ -1,75 +1,75 @@
--- ---
-- Name: AID-A2A-200 - GCICAP Demonstration -- Name: AID-A2A-200 - GCICAP Demonstration
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 05 July 2017 -- Date Created: 05 July 2017
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_GCICAP:New( { "DF CCCP" }, { "SQ CCCP" }, { "CAP Zone" }, 2 ) A2ADispatcher = AI_A2A_GCICAP:New( { "DF CCCP" }, { "SQ CCCP" }, { "CAP Zone" }, 2 )
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( true ) A2ADispatcher:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
A2ADispatcher:SetDefaultTakeoffFromParkingCold() A2ADispatcher:SetDefaultTakeoffFromParkingCold()
A2ADispatcher:SetDefaultLandingAtEngineShutdown() A2ADispatcher:SetDefaultLandingAtEngineShutdown()
A2ADispatcher:SetDefaultFuelThreshold( 0.20 ) A2ADispatcher:SetDefaultFuelThreshold( 0.20 )
A2ADispatcher:SetIntercept( 100 ) A2ADispatcher:SetIntercept( 100 )
A2ADispatcher:SetDisengageRadius( 100000 ) A2ADispatcher:SetDisengageRadius( 100000 )
A2ADispatcher:SetEngageRadius( 50000 ) A2ADispatcher:SetEngageRadius( 50000 )
A2ADispatcher:SetGciRadius( 100000 ) A2ADispatcher:SetGciRadius( 100000 )
A2ADispatcher:Start() A2ADispatcher:Start()
------------------------------- -------------------------------
-- Blue attack simulation -- Blue attack simulation
local Frequency = 600 local Frequency = 600
BlueSpawn1 = SPAWN BlueSpawn1 = SPAWN
:New( "RT NATO 1" ) :New( "RT NATO 1" )
:InitLimit( 2, 3 ) :InitLimit( 2, 3 )
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 2, 3 ) :InitLimit( 2, 3 )
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn3 = SPAWN BlueSpawn3 = SPAWN
:New( "RT NATO 3" ) :New( "RT NATO 3" )
:InitLimit( 2, 3 ) :InitLimit( 2, 3 )
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn4 = SPAWN BlueSpawn4 = SPAWN
:New( "RT NATO 4" ) :New( "RT NATO 4" )
:InitLimit( 2, 3 ) :InitLimit( 2, 3 )
:InitRandomizeTemplate( { "SQ NATO A-10C", "SQ NATO F-15C", "SQ NATO F-16A", "SQ NATO F/A-18", "SQ NATO F-16C" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
@@ -1,54 +1,54 @@
-- RED -- RED
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it. --- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
A2A_GCICAP_Red = AI_A2A_GCICAP:New( { "RED EWR" }, { "4477th" }, { }, 2 ) A2A_GCICAP_Red = AI_A2A_GCICAP:New( { "RED EWR" }, { "4477th" }, { }, 2 )
A2A_GCICAP_Red:SetBorderZone( ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) ) 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. -- Enable the tactical display panel. This is to see what this dispatcher is doing.
--A2A_GCICAP_Red:SetTacticalDisplay( true ) --A2A_GCICAP_Red:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly -- 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. -- without an assignment within 150km radius from a detected target, will engage that target.
A2A_GCICAP_Red:SetEngageRadius( 150000 ) A2A_GCICAP_Red:SetEngageRadius( 150000 )
-- The default take-off method is planes takeoff right in the air. -- 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. -- 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( AIRBASE.Nevada.Tonopah_Test_Range_Airfield )
--A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( "Groom Lake AFB" ) --A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( "Groom Lake AFB" )
-- BLUE -- BLUE
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it. --- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
-- EWR network groups start with BLUE EWR. -- EWR network groups start with BLUE EWR.
-- Squadron templates which are placed above the colored airbase, start with 104th or 105th or 106th. -- 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 CAP in a polygon zone placed near 104th, which is Nellis.
-- Perform 2 CAP. -- Perform 2 CAP.
A2A_GCICAP_Blue = AI_A2A_GCICAP:New( { "BLUE EWR" }, { "104th", "105th", "106th" }, { "104th CAP" }, 2 ) 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" ) ) ) 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. -- Enable the tactical display panel. This is to see what this dispatcher is doing.
--A2A_GCICAP_Blue:SetTacticalDisplay( true ) --A2A_GCICAP_Blue:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly -- 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. -- without an assignment within 150km radius from a detected target, will engage that target.
A2A_GCICAP_Blue:SetEngageRadius( 150000 ) A2A_GCICAP_Blue:SetEngageRadius( 150000 )
-- The default take-off method is planes takeoff right in the air. -- The default take-off method is planes takeoff right in the air.
-- Here we specify other take off options. -- Here we specify other take off options.
A2A_GCICAP_Blue:SetSquadronTakeoffFromRunway( AIRBASE.Nevada.Boulder_City_Airport ) -- Takeoff from the runway. 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: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. --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. -- The Nellis airbase contains a squadron that flies an F-5... Less modern airplane.
-- So it needs a stronger "overhead". -- 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: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. A2A_GCICAP_Blue:SetSquadronGrouping( AIRBASE.Nevada.Nellis_AFB, 2 ) -- We group the spawned defence airplanes per 2 units.
@@ -1,54 +1,54 @@
-- RED -- RED
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it. --- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
A2A_GCICAP_Red = AI_A2A_GCICAP:New( { "RED EWR" }, { "4477th" }, { }, 2 ) A2A_GCICAP_Red = AI_A2A_GCICAP:New( { "RED EWR" }, { "4477th" }, { }, 2 )
A2A_GCICAP_Red:SetBorderZone( ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) ) 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. -- Enable the tactical display panel. This is to see what this dispatcher is doing.
--A2A_GCICAP_Red:SetTacticalDisplay( true ) --A2A_GCICAP_Red:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly -- 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. -- without an assignment within 150km radius from a detected target, will engage that target.
A2A_GCICAP_Red:SetEngageRadius( 150000 ) A2A_GCICAP_Red:SetEngageRadius( 150000 )
-- The default take-off method is planes takeoff right in the air. -- 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. -- 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( AIRBASE.Nevada.Tonopah_Test_Range_Airfield )
--A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( "Groom Lake AFB" ) --A2A_GCICAP_Red:SetSquadronTakeoffFromParkingHot( "Groom Lake AFB" )
-- BLUE -- BLUE
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it. --- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
-- EWR network groups start with BLUE EWR. -- EWR network groups start with BLUE EWR.
-- Squadron templates which are placed above the colored airbase, start with 104th or 105th or 106th. -- 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 CAP in a polygon zone placed near 104th, which is Nellis.
-- Perform 2 CAP. -- Perform 2 CAP.
A2A_GCICAP_Blue = AI_A2A_GCICAP:New( { "BLUE EWR" }, { "104th", "105th", "106th" }, { "104th CAP" }, 2 ) 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" ) ) ) 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. -- Enable the tactical display panel. This is to see what this dispatcher is doing.
--A2A_GCICAP_Blue:SetTacticalDisplay( true ) --A2A_GCICAP_Blue:SetTacticalDisplay( true )
-- Initialize the dispatcher, setting up a radius of 150km where any airborne friendly -- 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. -- without an assignment within 150km radius from a detected target, will engage that target.
A2A_GCICAP_Blue:SetEngageRadius( 150000 ) A2A_GCICAP_Blue:SetEngageRadius( 150000 )
-- The default take-off method is planes takeoff right in the air. -- The default take-off method is planes takeoff right in the air.
-- Here we specify other take off options. -- Here we specify other take off options.
A2A_GCICAP_Blue:SetSquadronTakeoffFromRunway( AIRBASE.Nevada.Boulder_City_Airport ) -- Takeoff from the runway. 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: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. --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. -- The Nellis airbase contains a squadron that flies an F-5... Less modern airplane.
-- So it needs a stronger "overhead". -- 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: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. A2A_GCICAP_Blue:SetSquadronGrouping( AIRBASE.Nevada.Nellis_AFB, 2 ) -- We group the spawned defence airplanes per 2 units.
File diff suppressed because it is too large Load Diff
@@ -1,27 +1,27 @@
-- RED -- RED
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it. --- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
-- EWR network groups start with RED EWR, which are ships and patrols. -- 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. -- 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. -- 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 = AI_A2A_GCICAP:New( { "TR SQ"}, { "TR SQ" }, { "TR CAP" }, 10 )
A2A_GCICAP_Red:SetBorderZone( ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) ) 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. -- Enable the tactical display panel. This is to see what this dispatcher is doing.
--A2A_GCICAP_Red:SetTacticalDisplay( true ) --A2A_GCICAP_Red:SetTacticalDisplay( true )
-- BLUE -- BLUE
--- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it. --- Setup the Red Coalition A2A GCICAP dispatcher, and initialize it.
-- EWR network groups start with BLUE EWR. -- EWR network groups start with BLUE EWR.
-- Squadron templates which are placed above the colored airbases, start with UK SQ. -- Squadron templates which are placed above the colored airbases, start with UK SQ.
-- Perform no CAP. -- Perform no CAP.
A2A_GCICAP_Blue = AI_A2A_GCICAP:New( { "BLUE EWR" }, { "UK SQ" }, { }, 2 ) 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" ) ) ) A2A_GCICAP_Blue:SetBorderZone( ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) ) )
@@ -1,142 +1,142 @@
--- ---
-- Name: AID-A2A-100 - Demonstration -- Name: AID-A2A-100 - Demonstration
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 30 May 2017 -- Date Created: 30 May 2017
local HQ_Group = GROUP:FindByName( "HQ" ) local HQ_Group = GROUP:FindByName( "HQ" )
local HQ_CC = COMMANDCENTER:New( HQ_Group, "HQ" ) local HQ_CC = COMMANDCENTER:New( HQ_Group, "HQ" )
-- Define a SET_GROUP object that builds a collection of groups that define the EWR network. -- 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. -- Here we build the network with all the groups that have a name starting with DF CCCP AWACS and DF CCCP EWR.
local DetectionSetGroup = SET_GROUP:New() local DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } ) DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
local Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 ) local Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection ) A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
A2ADispatcher:SetCommandCenter( HQ_CC ) A2ADispatcher:SetCommandCenter( HQ_CC )
-- Enable the tactical display panel. -- Enable the tactical display panel.
A2ADispatcher:SetTacticalDisplay( false ) A2ADispatcher:SetTacticalDisplay( false )
A2ADispatcher:SetTacticalMenu( "Dispatchers", "A2A" ) A2ADispatcher:SetTacticalMenu( "Dispatchers", "A2A" )
-- Initialize the dispatcher, setting up a border zone. This is a polygon, -- 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. -- 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. -- Any enemy crossing this border will be engaged.
CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) ) CCCPBorderZone = ZONE_POLYGON:New( "CCCP Border", GROUP:FindByName( "CCCP Border" ) )
A2ADispatcher:SetBorderZone( CCCPBorderZone ) A2ADispatcher:SetBorderZone( CCCPBorderZone )
-- Initialize the dispatcher, setting up a radius of 100km where any airborne friendly -- 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. -- without an assignment within 100km radius from a detected target, will engage that target.
A2ADispatcher:SetEngageRadius( 120000 ) A2ADispatcher:SetEngageRadius( 120000 )
-- Setup the squadrons. -- Setup the squadrons.
A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD" }, 16 ) A2ADispatcher:SetSquadron( "Mineralnye", AIRBASE.Caucasus.Mineralnye_Vody, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD" }, 16 )
A2ADispatcher:SetSquadron( "Maykop", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP MIG-31" }, 20 ) A2ADispatcher:SetSquadron( "Maykop", AIRBASE.Caucasus.Maykop_Khanskaya, { "SQ CCCP MIG-31" }, 20 )
A2ADispatcher:SetSquadron( "Mozdok", AIRBASE.Caucasus.Mozdok, { "SQ CCCP MIG-31" }, 16 ) A2ADispatcher:SetSquadron( "Mozdok", AIRBASE.Caucasus.Mozdok, { "SQ CCCP MIG-31" }, 16 )
A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD", "SQ CCCP SU-34", "SQ CCCP MIG-31", "SQ CCCP MIG-29S" }, 40 ) A2ADispatcher:SetSquadron( "Sochi", AIRBASE.Caucasus.Sochi_Adler, { "SQ CCCP SU-27", "SQ CCCP SU-33", "SQ CCCP MIG-23MLD", "SQ CCCP MIG-25PD", "SQ CCCP SU-34", "SQ CCCP MIG-31", "SQ CCCP MIG-29S" }, 40 )
A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 16 ) A2ADispatcher:SetSquadron( "Novo", AIRBASE.Caucasus.Novorossiysk, { "SQ CCCP SU-27" }, 16 )
-- Setup the overhead -- Setup the overhead
A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 ) A2ADispatcher:SetSquadronOverhead( "Mineralnye", 1.2 )
A2ADispatcher:SetSquadronOverhead( "Maykop", 1 ) A2ADispatcher:SetSquadronOverhead( "Maykop", 1 )
A2ADispatcher:SetSquadronOverhead( "Mozdok", 1 ) A2ADispatcher:SetSquadronOverhead( "Mozdok", 1 )
A2ADispatcher:SetSquadronOverhead( "Sochi", 2 ) A2ADispatcher:SetSquadronOverhead( "Sochi", 2 )
A2ADispatcher:SetSquadronOverhead( "Novo", 1.5 ) A2ADispatcher:SetSquadronOverhead( "Novo", 1.5 )
-- Setup the Grouping -- Setup the Grouping
A2ADispatcher:SetSquadronGrouping( "Mineralnye", 4 ) A2ADispatcher:SetSquadronGrouping( "Mineralnye", 4 )
A2ADispatcher:SetSquadronGrouping( "Sochi", 2 ) A2ADispatcher:SetSquadronGrouping( "Sochi", 2 )
A2ADispatcher:SetSquadronGrouping( "Novo", 3 ) A2ADispatcher:SetSquadronGrouping( "Novo", 3 )
-- Setup the Takeoff methods -- Setup the Takeoff methods
A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot ) A2ADispatcher:SetSquadronTakeoff( "Mineralnye", AI_A2A_DISPATCHER.Takeoff.Hot )
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Sochi" ) A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Sochi" )
A2ADispatcher:SetSquadronTakeoffFromRunway( "Mozdok" ) A2ADispatcher:SetSquadronTakeoffFromRunway( "Mozdok" )
A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Maykop" ) A2ADispatcher:SetSquadronTakeoffFromParkingCold( "Maykop" )
A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" ) A2ADispatcher:SetSquadronTakeoffFromParkingHot( "Novo" )
-- Setup the Landing methods -- Setup the Landing methods
A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" ) A2ADispatcher:SetSquadronLandingAtRunway( "Mineralnye" )
A2ADispatcher:SetSquadronLandingNearAirbase( "Sochi" ) A2ADispatcher:SetSquadronLandingNearAirbase( "Sochi" )
A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mozdok" ) A2ADispatcher:SetSquadronLandingAtEngineShutdown( "Mozdok" )
A2ADispatcher:SetSquadronLandingNearAirbase( "Maykop" ) A2ADispatcher:SetSquadronLandingNearAirbase( "Maykop" )
A2ADispatcher:SetSquadronLanding( "Novo", AI_A2A_DISPATCHER.Landing.AtRunway ) A2ADispatcher:SetSquadronLanding( "Novo", AI_A2A_DISPATCHER.Landing.AtRunway )
-- CAP Squadron execution. -- CAP Squadron execution.
--CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) ) --CAPZoneEast = ZONE_POLYGON:New( "CAP Zone East", GROUP:FindByName( "CAP Zone East" ) )
--A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 ) --A2ADispatcher:SetSquadronCap( "Mineralnye", CAPZoneEast, 4000, 10000, 500, 600, 800, 900 )
--A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 6, 30, 60, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Mineralnye", 6, 30, 60, 1 )
--CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) ) --CAPZoneWest = ZONE_POLYGON:New( "CAP Zone West", GROUP:FindByName( "CAP Zone West" ) )
--A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" ) --A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
--A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
--CAPZoneMiddle = ZONE:New( "CAP Zone Middle") --CAPZoneMiddle = ZONE:New( "CAP Zone Middle")
--A2ADispatcher:SetSquadronCap( "Maykop", CAPZoneMiddle, 4000, 8000, 600, 800, 800, 1200, "RADIO" ) --A2ADispatcher:SetSquadronCap( "Maykop", CAPZoneMiddle, 4000, 8000, 600, 800, 800, 1200, "RADIO" )
--A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 ) --A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )
-- GCI Squadron execution. -- GCI Squadron execution.
A2ADispatcher:SetSquadronGci2( "Mozdok", 900, 1200, 100, 100, "RADIO" ) A2ADispatcher:SetSquadronGci2( "Mozdok", 900, 1200, 100, 100, "RADIO" )
A2ADispatcher:SetSquadronGci2( "Novo", 900, 2100, 100, 100, "RADIO" ) A2ADispatcher:SetSquadronGci2( "Novo", 900, 2100, 100, 100, "RADIO" )
A2ADispatcher:SetSquadronGci2( "Maykop", 900, 1200, 200, 200, "RADIO" ) A2ADispatcher:SetSquadronGci2( "Maykop", 900, 1200, 200, 200, "RADIO" )
-- Set the language of the squadrons to Russian. -- Set the language of the squadrons to Russian.
A2ADispatcher:SetSquadronLanguage( "Mozdok", "RU" ) A2ADispatcher:SetSquadronLanguage( "Mozdok", "RU" )
A2ADispatcher:SetSquadronLanguage( "Novo", "RU" ) A2ADispatcher:SetSquadronLanguage( "Novo", "RU" )
A2ADispatcher:SetSquadronLanguage( "Maykop", "RU" ) A2ADispatcher:SetSquadronLanguage( "Maykop", "RU" )
A2ADispatcher:SetSquadronRadioFrequency( "Mozdok", 127.5 ) A2ADispatcher:SetSquadronRadioFrequency( "Mozdok", 127.5 )
A2ADispatcher:SetSquadronRadioFrequency( "Novo", 127.5 ) A2ADispatcher:SetSquadronRadioFrequency( "Novo", 127.5 )
A2ADispatcher:SetSquadronRadioFrequency( "Maykop", 127.5 ) A2ADispatcher:SetSquadronRadioFrequency( "Maykop", 127.5 )
-- Set the squadrons visible before startup. -- Set the squadrons visible before startup.
--A2ADispatcher:SetSquadronVisible( "Mineralnye" ) --A2ADispatcher:SetSquadronVisible( "Mineralnye" )
--A2ADispatcher:SetSquadronVisible( "Sochi" ) --A2ADispatcher:SetSquadronVisible( "Sochi" )
--A2ADispatcher:SetSquadronVisible( "Mozdok" ) --A2ADispatcher:SetSquadronVisible( "Mozdok" )
--A2ADispatcher:SetSquadronVisible( "Maykop" ) --A2ADispatcher:SetSquadronVisible( "Maykop" )
--A2ADispatcher:SetSquadronVisible( "Novo" ) --A2ADispatcher:SetSquadronVisible( "Novo" )
--CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } ) --CleanUp = CLEANUP_AIRBASE:New( { AIRBASE.Caucasus.Novorossiysk } )
-- Blue attack simulation -- Blue attack simulation
local Frequency = 300 local Frequency = 300
BlueSpawn1 = SPAWN BlueSpawn1 = SPAWN
:New( "RT NATO 1" ) :New( "RT NATO 1" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn2 = SPAWN BlueSpawn2 = SPAWN
:New( "RT NATO 2" ) :New( "RT NATO 2" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn3 = SPAWN BlueSpawn3 = SPAWN
:New( "RT NATO 3" ) :New( "RT NATO 3" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
BlueSpawn4 = SPAWN BlueSpawn4 = SPAWN
:New( "RT NATO 4" ) :New( "RT NATO 4" )
:InitLimit( 2, 10 ) :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" } ) :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 ) :InitRandomizeRoute( 0, 0, 30000 )
--:InitDelayOn() --:InitDelayOn()
:SpawnScheduled( Frequency, 0.4 ) :SpawnScheduled( Frequency, 0.4 )
@@ -1,48 +1,48 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 5000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 5000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 200000 ) A2GDispatcher:SetDefenseRadius( 200000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 )
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 ) A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 )
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 KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 ) A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,52 +1,52 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", "SEAD", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", "SEAD", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 300, 500, 50, 80, 250, 300 ) A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 300, 500, 50, 80, 250, 300 )
A2GDispatcher:SetSquadronPatrolInterval( "Maykop SEAD", 2, 30, 60, 1, "SEAD" ) A2GDispatcher:SetSquadronPatrolInterval( "Maykop SEAD", 2, 30, 60, 1, "SEAD" )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCasPatrol( "Maykop CAS", PatrolZone, 600, 700, 50, 80, 250, 300 ) A2GDispatcher:SetSquadronCasPatrol( "Maykop CAS", PatrolZone, 600, 700, 50, 80, 250, 300 )
A2GDispatcher:SetSquadronPatrolInterval( "Maykop CAS", 2, 30, 60, 1, "CAS" ) A2GDispatcher:SetSquadronPatrolInterval( "Maykop CAS", 2, 30, 60, 1, "CAS" )
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 KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronBaiPatrol( "Maykop BAI", PatrolZone, 800, 900, 50, 80, 250, 300 ) A2GDispatcher:SetSquadronBaiPatrol( "Maykop BAI", PatrolZone, 800, 900, 50, 80, 250, 300 )
A2GDispatcher:SetSquadronPatrolInterval( "Maykop BAI", 2, 30, 60, 1, "BAI" ) A2GDispatcher:SetSquadronPatrolInterval( "Maykop BAI", 2, 30, 60, 1, "BAI" )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,52 +1,52 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
A2GDispatcher:SetCommandCenter( CC ) A2GDispatcher:SetCommandCenter( CC )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 200000 ) A2GDispatcher:SetDefenseRadius( 200000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 )
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 ) A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 )
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 KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 ) A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,52 +1,52 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
A2GDispatcher:SetCommandCenter( CC ) A2GDispatcher:SetCommandCenter( CC )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 200000 ) A2GDispatcher:SetDefenseRadius( 200000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 )
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 ) A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 )
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 KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 ) A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,50 +1,50 @@
--- Test the defense radius. --- Test the defense radius.
-- Defenses should pickup targets within the defense radius, but not outside of it! -- Defenses should pickup targets within the defense radius, but not outside of it!
-- Defenses should engage targets closer to the HQ with higher probability than targets at longer distance from the HQ. -- Defenses should engage targets closer to the HQ with higher probability than targets at longer distance from the HQ.
-- The tests are with SEAD only. -- The tests are with SEAD only.
-- Name: AID-A2G-003 - DefenseRadius -- Name: AID-A2G-003 - DefenseRadius
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 11 Nov 2018 -- Date Created: 11 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the SEAD squadrons. -- Setup the SEAD squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 )
A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 1, 30, 60, 1 ) A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 1, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffInAir( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffInAir( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
-- Setup the CAS squadrons. -- Setup the CAS squadrons.
A2GDispatcher:SetSquadron( "Maykop CAS", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T CAS" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T CAS" }, 10 )
A2GDispatcher:SetSquadronCasPatrol( "Maykop CAS", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) A2GDispatcher:SetSquadronCasPatrol( "Maykop CAS", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
A2GDispatcher:SetSquadronCasPatrolInterval( "Maykop CAS", 1, 30, 60, 1 ) A2GDispatcher:SetSquadronCasPatrolInterval( "Maykop CAS", 1, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffInAir( "Maykop CAS" ) A2GDispatcher:SetSquadronTakeoffInAir( "Maykop CAS" )
A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 )
@@ -1,45 +1,45 @@
--- Test the default engage limit. --- Test the default engage limit.
-- Defenses should engage enemy units, but not more defenses than the defense limit! -- Defenses should engage enemy units, but not more defenses than the defense limit!
-- Name: AID-A2G-110 - Default DefenseLimit -- Name: AID-A2G-110 - Default DefenseLimit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 Nov 2018 -- Date Created: 15 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
-- This is the test, not more than 4 defenses in total should engage! -- This is the test, not more than 4 defenses in total should engage!
A2GDispatcher:SetDefaultEngageLimit( 6 ) A2GDispatcher:SetDefaultEngageLimit( 6 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 )
--A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) --A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
--A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 ) --A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffInAir( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffInAir( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
@@ -1,80 +1,80 @@
--- Test the communication system to other players. --- Test the communication system to other players.
-- A command center will facilitate the A2G defenses communication to the players, who reporting to the same command center. -- A command center will facilitate the A2G defenses communication to the players, who reporting to the same command center.
-- The task system needs to be used to have this reporting facilitated. -- The task system needs to be used to have this reporting facilitated.
-- Name: AID-A2G-190 - Communication -- Name: AID-A2G-190 - Communication
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 11 Jan 2019 -- Date Created: 11 Jan 2019
-- Define a command center that will communicate with the players. -- Define a command center that will communicate with the players.
CC_Red = COMMANDCENTER:New( GROUP:FindByName( "HQ" ), "Command" ) CC_Red = COMMANDCENTER:New( GROUP:FindByName( "HQ" ), "Command" )
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection_Red = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection_Red = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
AI_A2G_Dispatcher_Red = AI_A2G_DISPATCHER:New( Detection_Red ) AI_A2G_Dispatcher_Red = AI_A2G_DISPATCHER:New( Detection_Red )
-- Add defense coordinates. -- Add defense coordinates.
AI_A2G_Dispatcher_Red:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) AI_A2G_Dispatcher_Red:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
AI_A2G_Dispatcher_Red:SetDefenseReactivityHigh() AI_A2G_Dispatcher_Red:SetDefenseReactivityHigh()
AI_A2G_Dispatcher_Red:SetDefenseRadius( 100000 ) AI_A2G_Dispatcher_Red:SetDefenseRadius( 100000 )
-- This is the test, not more than 4 defenses in total should engage! -- This is the test, not more than 4 defenses in total should engage!
AI_A2G_Dispatcher_Red:SetDefaultEngageLimit( 6 ) AI_A2G_Dispatcher_Red:SetDefaultEngageLimit( 6 )
AI_A2G_Dispatcher_Red:SetTacticalDisplay( true ) AI_A2G_Dispatcher_Red:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
-- SEAD -- SEAD
AI_A2G_Dispatcher_Red:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T SEAD #001", "CCCP AI SU-25T SEAD #002", "CCCP AI SU-25T SEAD #003" }, 10 ) AI_A2G_Dispatcher_Red:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T SEAD #001", "CCCP AI SU-25T SEAD #002", "CCCP AI SU-25T SEAD #003" }, 10 )
AI_A2G_Dispatcher_Red:SetSquadronSead( "Maykop SEAD", 600, 800 ) AI_A2G_Dispatcher_Red:SetSquadronSead( "Maykop SEAD", 600, 800 )
AI_A2G_Dispatcher_Red:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) AI_A2G_Dispatcher_Red:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop SEAD", 0.2 ) AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop SEAD", 0.2 )
AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
-- CAS -- CAS
AI_A2G_Dispatcher_Red:SetSquadron( "Maykop CAS", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T CAS" }, 10 ) AI_A2G_Dispatcher_Red:SetSquadron( "Maykop CAS", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T CAS" }, 10 )
AI_A2G_Dispatcher_Red:SetSquadronCas( "Maykop CAS", 600, 800 ) AI_A2G_Dispatcher_Red:SetSquadronCas( "Maykop CAS", 600, 800 )
AI_A2G_Dispatcher_Red:SetSquadronTakeoffFromParkingHot( "Maykop CAS" ) AI_A2G_Dispatcher_Red:SetSquadronTakeoffFromParkingHot( "Maykop CAS" )
AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop CAS", 0.25 ) AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop CAS", 0.25 )
AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
-- BAI -- BAI
AI_A2G_Dispatcher_Red:SetSquadron( "Maykop BAI", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T BAI" }, 10 ) AI_A2G_Dispatcher_Red:SetSquadron( "Maykop BAI", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T BAI" }, 10 )
AI_A2G_Dispatcher_Red:SetSquadronBai( "Maykop BAI", 600, 800 ) AI_A2G_Dispatcher_Red:SetSquadronBai( "Maykop BAI", 600, 800 )
AI_A2G_Dispatcher_Red:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) AI_A2G_Dispatcher_Red:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop BAI", 0.25 ) AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop BAI", 0.25 )
AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
-- Now we setup the TASK A2G dispatcher, that will use the same detection system, as the AI A2G dispatcher! -- Now we setup the TASK A2G dispatcher, that will use the same detection system, as the AI A2G dispatcher!
Mission_Red = MISSION:New( CC_Red, "Comms Demo", "Example", "This mission demonstrates the communications between the AI A2G dispatcher and the TASK A2G dispatcher to the involved players.", coalition.side.RED ) Mission_Red = MISSION:New( CC_Red, "Comms Demo", "Example", "This mission demonstrates the communications between the AI A2G dispatcher and the TASK A2G dispatcher to the involved players.", coalition.side.RED )
Players_Red = SET_GROUP:New():FilterPrefixes( "CCCP Player" ):FilterStart() Players_Red = SET_GROUP:New():FilterPrefixes( "CCCP Player" ):FilterStart()
Task_A2G_Dispatcher_Red = TASK_A2G_DISPATCHER:New( Mission_Red, Players_Red, Detection_Red ) Task_A2G_Dispatcher_Red = TASK_A2G_DISPATCHER:New( Mission_Red, Players_Red, Detection_Red )
Task_A2G_Dispatcher_Red:Start() Task_A2G_Dispatcher_Red:Start()
-- Here we set the command center, which will faciliate the communication to the Players_Red, using the same Detection_Red. -- Here we set the command center, which will faciliate the communication to the Players_Red, using the same Detection_Red.
AI_A2G_Dispatcher_Red:SetCommandCenter( CC_Red ) AI_A2G_Dispatcher_Red:SetCommandCenter( CC_Red )
@@ -1,63 +1,63 @@
--- Test the communication system to other players. --- Test the communication system to other players.
-- A command center will facilitate the A2G defenses communication to the players, who reporting to the same command center. -- A command center will facilitate the A2G defenses communication to the players, who reporting to the same command center.
-- The task system needs to be used to have this reporting facilitated. -- The task system needs to be used to have this reporting facilitated.
-- --
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 20 Jan 2019 -- Date Created: 20 Jan 2019
-- Define a command center that will communicate with the players. -- Define a command center that will communicate with the players.
CC_Red = COMMANDCENTER:New( GROUP:FindByName( "HQ" ), "Command" ) CC_Red = COMMANDCENTER:New( GROUP:FindByName( "HQ" ), "Command" )
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection_Red = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection_Red = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
AI_A2G_Dispatcher_Red = AI_A2G_DISPATCHER:New( Detection_Red ) AI_A2G_Dispatcher_Red = AI_A2G_DISPATCHER:New( Detection_Red )
-- Add defense coordinates. -- Add defense coordinates.
AI_A2G_Dispatcher_Red:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) AI_A2G_Dispatcher_Red:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
AI_A2G_Dispatcher_Red:SetDefenseReactivityHigh() AI_A2G_Dispatcher_Red:SetDefenseReactivityHigh()
AI_A2G_Dispatcher_Red:SetDefenseRadius( 100000 ) AI_A2G_Dispatcher_Red:SetDefenseRadius( 100000 )
-- This is the test, not more than 4 defenses in total should engage! -- This is the test, not more than 4 defenses in total should engage!
AI_A2G_Dispatcher_Red:SetDefaultEngageLimit( 6 ) AI_A2G_Dispatcher_Red:SetDefaultEngageLimit( 6 )
AI_A2G_Dispatcher_Red:SetTacticalDisplay( true ) AI_A2G_Dispatcher_Red:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
-- SEAD -- SEAD
AI_A2G_Dispatcher_Red:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T SEAD #001", "CCCP AI SU-25T SEAD #002", "CCCP AI SU-25T SEAD #003" }, 10 ) AI_A2G_Dispatcher_Red:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP AI SU-25T SEAD #001", "CCCP AI SU-25T SEAD #002", "CCCP AI SU-25T SEAD #003" }, 10 )
AI_A2G_Dispatcher_Red:SetSquadronSead( "Maykop SEAD", 600, 800 ) AI_A2G_Dispatcher_Red:SetSquadronSead( "Maykop SEAD", 600, 800 )
AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop SEAD", 0.2 ) AI_A2G_Dispatcher_Red:SetSquadronOverhead( "Maykop SEAD", 0.2 )
AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) AI_A2G_Dispatcher_Red:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
-- Now we setup the TASK A2G dispatcher, that will use the same detection system, as the AI A2G dispatcher! -- Now we setup the TASK A2G dispatcher, that will use the same detection system, as the AI A2G dispatcher!
Mission_Red = MISSION:New( CC_Red, "Comms Demo", "Example", "This mission demonstrates the communications between the AI A2G dispatcher and the TASK A2G dispatcher to the involved players.", coalition.side.RED ) Mission_Red = MISSION:New( CC_Red, "Comms Demo", "Example", "This mission demonstrates the communications between the AI A2G dispatcher and the TASK A2G dispatcher to the involved players.", coalition.side.RED )
Players_Red = SET_GROUP:New():FilterPrefixes( "CCCP Player" ):FilterStart() Players_Red = SET_GROUP:New():FilterPrefixes( "CCCP Player" ):FilterStart()
Task_A2G_Dispatcher_Red = TASK_A2G_DISPATCHER:New( Mission_Red, Players_Red, Detection_Red ) Task_A2G_Dispatcher_Red = TASK_A2G_DISPATCHER:New( Mission_Red, Players_Red, Detection_Red )
Task_A2G_Dispatcher_Red:Start() Task_A2G_Dispatcher_Red:Start()
-- Here we set the command center, which will faciliate the communication to the Players_Red, using the same Detection_Red. -- Here we set the command center, which will faciliate the communication to the Players_Red, using the same Detection_Red.
AI_A2G_Dispatcher_Red:SetCommandCenter( CC_Red ) AI_A2G_Dispatcher_Red:SetCommandCenter( CC_Red )
@@ -1,42 +1,42 @@
--- Test the default engage limit. --- Test the default engage limit.
-- Defenses should engage enemy units, but not more defenses than the defense limit! -- Defenses should engage enemy units, but not more defenses than the defense limit!
-- Name: AID-A2G-110 - Default DefenseLimit -- Name: AID-A2G-110 - Default DefenseLimit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 Nov 2018 -- Date Created: 15 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 )
--A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) --A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
--A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 ) --A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffFromParkingCold( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingCold( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
@@ -1,42 +1,42 @@
--- Test the default engage limit. --- Test the default engage limit.
-- Defenses should engage enemy units, but not more defenses than the defense limit! -- Defenses should engage enemy units, but not more defenses than the defense limit!
-- Name: AID-A2G-110 - Default DefenseLimit -- Name: AID-A2G-110 - Default DefenseLimit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 Nov 2018 -- Date Created: 15 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 )
--A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) --A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
--A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 ) --A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
@@ -1,45 +1,45 @@
--- Test the default engage limit. --- Test the default engage limit.
-- Defenses should engage enemy units, but not more defenses than the defense limit! -- Defenses should engage enemy units, but not more defenses than the defense limit!
-- Name: AID-A2G-110 - Default DefenseLimit -- Name: AID-A2G-110 - Default DefenseLimit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 Nov 2018 -- Date Created: 15 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
-- This is the test, not more than 4 defenses in total should engage! -- This is the test, not more than 4 defenses in total should engage!
A2GDispatcher:SetDefaultEngageLimit( 6 ) A2GDispatcher:SetDefaultEngageLimit( 6 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 )
--A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) --A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
--A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 ) --A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffFromRunway( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromRunway( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
@@ -1,45 +1,45 @@
--- Test the default engage limit. --- Test the default engage limit.
-- Defenses should engage enemy units, but not more defenses than the defense limit! -- Defenses should engage enemy units, but not more defenses than the defense limit!
-- Name: AID-A2G-110 - Default DefenseLimit -- Name: AID-A2G-110 - Default DefenseLimit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 Nov 2018 -- Date Created: 15 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
-- This is the test, not more than 4 defenses in total should engage! -- This is the test, not more than 4 defenses in total should engage!
A2GDispatcher:SetDefaultEngageLimit( 6 ) A2GDispatcher:SetDefaultEngageLimit( 6 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T SEAD" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 250, 350 )
--A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) --A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
--A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 ) --A2GDispatcher:SetSquadronSeadPatrolInterval( "Maykop SEAD", 4, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffInAir( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffInAir( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
@@ -1,48 +1,48 @@
--- Test the default engage limit. --- Test the default engage limit.
-- Defenses should engage enemy units, but not more defenses than the defense limit! -- Defenses should engage enemy units, but not more defenses than the defense limit!
-- Name: AID-A2G-110 - Default DefenseLimit -- Name: AID-A2G-110 - Default DefenseLimit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 Nov 2018 -- Date Created: 15 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup. DetectionSetGroup = SET_GROUP:New() -- Defene a set of group objects, caled DetectionSetGroup.
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce". DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) -- The DetectionSetGroup will search for groups that start with the name "CCCP Recce".
-- This command will start the dynamic filtering, so when groups spawn in or are destroyed, -- This command will start the dynamic filtering, so when groups spawn in or are destroyed,
-- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set. -- which have a group name starting with "CCCP Recce", then these will be automatically added or removed from the set.
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
-- This command defines the reconnaissance network. -- This command defines the reconnaissance network.
-- It will group any detected ground enemy targets within a radius of 1km. -- It will group any detected ground enemy targets within a radius of 1km.
-- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets. -- It uses the DetectionSetGroup, which defines the set of reconnaissance groups to detect for enemy ground targets.
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 200000 ) A2GDispatcher:SetDefenseRadius( 200000 )
-- This is the test, not more than 4 defenses in total should engage! -- This is the test, not more than 4 defenses in total should engage!
A2GDispatcher:SetDefaultEngageLimit( 6 ) A2GDispatcher:SetDefaultEngageLimit( 6 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Krymsk SEAD", AIRBASE.Caucasus.Krymsk, { "CCCP SEAD Su-30", "CCCP SEAD Su-25T", "CCCP SEAD Su-25TM", "CCCP SEAD Su-34" }, 20 ) A2GDispatcher:SetSquadron( "Krymsk SEAD", AIRBASE.Caucasus.Krymsk, { "CCCP SEAD Su-30", "CCCP SEAD Su-25T", "CCCP SEAD Su-25TM", "CCCP SEAD Su-34" }, 20 )
A2GDispatcher:SetSquadronSead( "Krymsk SEAD", 600, 800 ) A2GDispatcher:SetSquadronSead( "Krymsk SEAD", 600, 800 )
--A2GDispatcher:SetSquadronSeadPatrol( "Krymsk SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 ) --A2GDispatcher:SetSquadronSeadPatrol( "Krymsk SEAD", PatrolZone, 1000, 2500, 400, 600, 1100, 1500 )
--A2GDispatcher:SetSquadronSeadPatrolInterval( "Krymsk SEAD", 4, 30, 60, 1 ) --A2GDispatcher:SetSquadronSeadPatrolInterval( "Krymsk SEAD", 4, 30, 60, 1 )
A2GDispatcher:SetSquadronOverhead( "Krymsk SEAD", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Krymsk SEAD", 0.2 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Krymsk SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Krymsk SEAD" )
A2GDispatcher:SetSquadronLandingAtEngineShutdown( "Krymsk SEAD" ) A2GDispatcher:SetSquadronLandingAtEngineShutdown( "Krymsk SEAD" )
--A2GDispatcher:SetSquadronVisible( "Krymsk SEAD" ) --A2GDispatcher:SetSquadronVisible( "Krymsk SEAD" )
@@ -1,31 +1,31 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Sq34", "FARP CAS", { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", "FARP CAS", { "Defender" }, 10 )
A2GDispatcher:SetSquadronCas( "Sq34", 120, 250 ) A2GDispatcher:SetSquadronCas( "Sq34", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 )
@@ -1,33 +1,33 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
local CASPatrolZone = ZONE:New( "CASPatrolZone" ) local CASPatrolZone = ZONE:New( "CASPatrolZone" )
A2GDispatcher:SetSquadron( "Sq34", "FARP CAS", { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", "FARP CAS", { "Defender" }, 10 )
A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 200, 500, 70, 100, 250, 300 ) A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 200, 500, 70, 100, 250, 300 )
A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 ) A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 )
@@ -1,61 +1,61 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
Detection:SetFriendliesRange( 20000 ) Detection:SetFriendliesRange( 20000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
-- Setup the squadron Sq34. -- Setup the squadron Sq34.
A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender Sq34" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender Sq34" }, 10 )
-- This will setup the squadron Sq34 for CAS from Vaziani. -- This will setup the squadron Sq34 for CAS from Vaziani.
-- Attack speed between 1000 and 1500 km/h. -- Attack speed between 1000 and 1500 km/h.
-- Attack altitude between 4000 and 6000 meters. -- Attack altitude between 4000 and 6000 meters.
A2GDispatcher:SetSquadronCas( "Sq34", 1000, 1500, 4000, 6000 ) A2GDispatcher:SetSquadronCas( "Sq34", 1000, 1500, 4000, 6000 )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
-- For every 2 targets, there will be one plane spawned, so we give a 0.5 value. -- For every 2 targets, there will be one plane spawned, so we give a 0.5 value.
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.5 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.5 )
-- Setup the squadron Sq25. -- Setup the squadron Sq25.
A2GDispatcher:SetSquadron( "Sq25", AIRBASE.Caucasus.Soganlug, { "Defender Sq25" }, 10 ) A2GDispatcher:SetSquadron( "Sq25", AIRBASE.Caucasus.Soganlug, { "Defender Sq25" }, 10 )
-- This will setup the squadron Sq34 for CAS from Vaziani. -- This will setup the squadron Sq34 for CAS from Vaziani.
-- No additional altitude and speed parameters are given, so the defaults are assigned. -- No additional altitude and speed parameters are given, so the defaults are assigned.
-- Default speed between 50% and 75% of the maximum speed of the units in the group. -- Default speed between 50% and 75% of the maximum speed of the units in the group.
-- Default altitude is between 1000 and 1500 meters. -- Default altitude is between 1000 and 1500 meters.
A2GDispatcher:SetSquadronCas( "Sq25" ) A2GDispatcher:SetSquadronCas( "Sq25" )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq25" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq25" )
-- For every 2 targets, there will be one plane spawned, so we give a 0.5 value. -- For every 2 targets, there will be one plane spawned, so we give a 0.5 value.
A2GDispatcher:SetSquadronOverhead( "Sq25", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq25", 0.25 )
@@ -1,45 +1,45 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
Detection:SetFriendliesRange( 20000 ) Detection:SetFriendliesRange( 20000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 250000 ) A2GDispatcher:SetDefenseRadius( 250000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
local CASPatrolZone = ZONE:New( "CASPatrolZone" ) local CASPatrolZone = ZONE:New( "CASPatrolZone" )
-- Setup the squadron Sq25. -- Setup the squadron Sq25.
A2GDispatcher:SetSquadron( "Sq25", AIRBASE.Caucasus.Beslan, { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq25", AIRBASE.Caucasus.Beslan, { "Defender" }, 10 )
-- This will setup the squadron Sq34 for CAS from Beslan. -- This will setup the squadron Sq34 for CAS from Beslan.
-- No additional altitude and speed parameters are given, so the defaults are assigned. -- No additional altitude and speed parameters are given, so the defaults are assigned.
-- Default speed between 50% and 75% of the maximum speed of the units in the group. -- Default speed between 50% and 75% of the maximum speed of the units in the group.
-- Default altitude is between 1000 and 1500 meters. -- Default altitude is between 1000 and 1500 meters.
A2GDispatcher:SetSquadronCas( "Sq25" ) A2GDispatcher:SetSquadronCas( "Sq25" )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq25" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq25" )
-- For every 2 targets, there will be one plane spawned. -- For every 2 targets, there will be one plane spawned.
A2GDispatcher:SetSquadronOverhead( "Sq25", 0.5 ) A2GDispatcher:SetSquadronOverhead( "Sq25", 0.5 )
@@ -1,45 +1,45 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- --
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 23 Jan 2018 -- Date Created: 23 Jan 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
Detection:SetFriendliesRange( 20000 ) Detection:SetFriendliesRange( 20000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 250000 ) A2GDispatcher:SetDefenseRadius( 250000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
local CASPatrolZone = ZONE:New( "CASPatrolZone" ) local CASPatrolZone = ZONE:New( "CASPatrolZone" )
-- Setup the squadron Sq25. -- Setup the squadron Sq25.
A2GDispatcher:SetSquadron( "Sq26", AIRBASE.Caucasus.Nalchik, { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq26", AIRBASE.Caucasus.Nalchik, { "Defender" }, 10 )
-- This will setup the squadron Sq34 for CAS from Beslan. -- This will setup the squadron Sq34 for CAS from Beslan.
-- No additional altitude and speed parameters are given, so the defaults are assigned. -- No additional altitude and speed parameters are given, so the defaults are assigned.
-- Default speed between 50% and 75% of the maximum speed of the units in the group. -- Default speed between 50% and 75% of the maximum speed of the units in the group.
-- Default altitude is between 1000 and 1500 meters. -- Default altitude is between 1000 and 1500 meters.
A2GDispatcher:SetSquadronCas( "Sq26" ) A2GDispatcher:SetSquadronCas( "Sq26" )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq26" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq26" )
-- For every 2 targets, there will be one plane spawned. -- For every 2 targets, there will be one plane spawned.
A2GDispatcher:SetSquadronOverhead( "Sq26", 0.20 ) A2GDispatcher:SetSquadronOverhead( "Sq26", 0.20 )
@@ -1,43 +1,43 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
local CASPatrolZone = ZONE:New( "CASPatrolZone" ) local CASPatrolZone = ZONE:New( "CASPatrolZone" )
-- Setup the squadron Sq34. -- Setup the squadron Sq34.
A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender" }, 10 )
-- This will setup the squadron Sq34 for patrol and CAS from Vaziani. -- This will setup the squadron Sq34 for patrol and CAS from Vaziani.
A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 ) A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 )
-- Maximum 6 units for patrol, with a spawn interval between 30 and 60 seconds. -- Maximum 6 units for patrol, with a spawn interval between 30 and 60 seconds.
A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 ) A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
-- For every 4 targets, there will be one plane spawned. -- For every 4 targets, there will be one plane spawned.
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 )
@@ -1,40 +1,40 @@
-- Date Created: 09 Mar 2019 -- Date Created: 09 Mar 2019
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
local CASPatrolZone = ZONE:New( "CASPatrolZone" ) local CASPatrolZone = ZONE:New( "CASPatrolZone" )
-- Setup the squadron Sq34. -- Setup the squadron Sq34.
A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender" }, 10 )
-- This will setup the squadron Sq34 for patrol and CAS from Vaziani. -- This will setup the squadron Sq34 for patrol and CAS from Vaziani.
A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 ) A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 )
-- Maximum 6 units for patrol, with a spawn interval between 30 and 60 seconds. -- Maximum 6 units for patrol, with a spawn interval between 30 and 60 seconds.
--A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 ) --A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
-- For every 4 targets, there will be one plane spawned. -- For every 4 targets, there will be one plane spawned.
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 )
@@ -1,47 +1,47 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
local CASPatrolZone = ZONE:New( "CASPatrolZone" ) local CASPatrolZone = ZONE:New( "CASPatrolZone" )
-- Setup the squadron Sq34 at Kutaisi, using template Defender for 10 units. -- Setup the squadron Sq34 at Kutaisi, using template Defender for 10 units.
A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Kutaisi, { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Kutaisi, { "Defender" }, 10 )
-- This will setup the squadron Sq34 for patrol and CAS. -- This will setup the squadron Sq34 for patrol and CAS.
A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 ) A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 )
-- Maximum 2 units for patrol, with a spawn interval between 30 and 60 seconds. -- Maximum 2 units for patrol, with a spawn interval between 30 and 60 seconds.
A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 ) A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
-- For every 4 targets, there will be one plane spawned. -- For every 4 targets, there will be one plane spawned.
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 )
-- Make planes visible before start ... -- Make planes visible before start ...
A2GDispatcher:SetSquadronVisible( "Sq34" ) A2GDispatcher:SetSquadronVisible( "Sq34" )
@@ -1,44 +1,44 @@
-- Date Created: 09 Mar 2019 -- Date Created: 09 Mar 2019
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
local CASPatrolZone = ZONE:New( "CASPatrolZone" ) local CASPatrolZone = ZONE:New( "CASPatrolZone" )
-- Setup the squadron Sq34. -- Setup the squadron Sq34.
A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender" }, 10 )
-- This will setup the squadron Sq34 for patrol and CAS from Vaziani. -- This will setup the squadron Sq34 for patrol and CAS from Vaziani.
A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 ) A2GDispatcher:SetSquadronCasPatrol( "Sq34", CASPatrolZone, 1500, 2500, 600, 800, 800, 1200 )
-- Maximum 6 units for patrol, with a spawn interval between 30 and 60 seconds. -- Maximum 6 units for patrol, with a spawn interval between 30 and 60 seconds.
--A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 ) --A2GDispatcher:SetSquadronCasPatrolInterval( "Sq34", 2, 30, 60 )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
-- For every 4 targets, there will be one plane spawned. -- For every 4 targets, there will be one plane spawned.
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.25 )
A2GDispatcher:SetDefaultTanker( "Tanker" ) A2GDispatcher:SetDefaultTanker( "Tanker" )
A2GDispatcher:SetDefaultFuelThreshold( 0.9 ) A2GDispatcher:SetDefaultFuelThreshold( 0.9 )
@@ -1,36 +1,36 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 27 Jan 2019 -- Date Created: 27 Jan 2019
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityMedium() A2GDispatcher:SetDefenseReactivityMedium()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50 BAI" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50 BAI" }, 10 )
A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250, 1000, 1500 ) A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250, 1000, 1500 )
A2GDispatcher:SetSquadronTakeoffFromParkingCold( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingCold( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
-- Wait for each helicopter to spawn about 4 minutes from cold start. -- Wait for each helicopter to spawn about 4 minutes from cold start.
-- So the FARP has 4 spots, that means every 60 seconds one helo. -- So the FARP has 4 spots, that means every 60 seconds one helo.
-- Otherwise the FARP will clutter. -- Otherwise the FARP will clutter.
-- This will result in helicopters not guided properly by the dispatcher. -- This will result in helicopters not guided properly by the dispatcher.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,61 +1,61 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- --
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 23 Jan 2018 -- Date Created: 23 Jan 2018
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "Recce" } ) DetectionSetGroup:FilterPrefixes( { "Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
Detection = DETECTION_AREAS:New( DetectionSetGroup, 20000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 20000 )
Detection:SetFriendliesRange( 20000 ) Detection:SetFriendliesRange( 20000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 200000 ) A2GDispatcher:SetDefenseRadius( 200000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
-- Setup the squadron Sq34. -- Setup the squadron Sq34.
A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender Sq34" }, 10 ) A2GDispatcher:SetSquadron( "Sq34", AIRBASE.Caucasus.Vaziani, { "Defender Sq34" }, 10 )
-- This will setup the squadron Sq34 for SEAD from Vaziani. -- This will setup the squadron Sq34 for SEAD from Vaziani.
-- Attack speed between 1000 and 1500 km/h. -- Attack speed between 1000 and 1500 km/h.
-- Attack altitude between 4000 and 6000 meters. -- Attack altitude between 4000 and 6000 meters.
A2GDispatcher:SetSquadronSead( "Sq34", 600, 800, 4500, 6000 ) A2GDispatcher:SetSquadronSead( "Sq34", 600, 800, 4500, 6000 )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq34" )
-- For every 2 targets, there will be one plane spawned, so we give a 0.5 value. -- For every 2 targets, there will be one plane spawned, so we give a 0.5 value.
A2GDispatcher:SetSquadronOverhead( "Sq34", 0.5 ) A2GDispatcher:SetSquadronOverhead( "Sq34", 0.5 )
-- Setup the squadron Sq25. -- Setup the squadron Sq25.
A2GDispatcher:SetSquadron( "Sq25", AIRBASE.Caucasus.Soganlug, { "Defender Sq25" }, 10 ) A2GDispatcher:SetSquadron( "Sq25", AIRBASE.Caucasus.Soganlug, { "Defender Sq25" }, 10 )
-- This will setup the squadron Sq34 for CAS from Vaziani. -- This will setup the squadron Sq34 for CAS from Vaziani.
-- No additional altitude and speed parameters are given, so the defaults are assigned. -- No additional altitude and speed parameters are given, so the defaults are assigned.
-- Default speed between 50% and 75% of the maximum speed of the units in the group. -- Default speed between 50% and 75% of the maximum speed of the units in the group.
-- Default altitude is between 1000 and 1500 meters. -- Default altitude is between 1000 and 1500 meters.
A2GDispatcher:SetSquadronCas( "Sq25" ) A2GDispatcher:SetSquadronCas( "Sq25" )
-- Start from airbase hot. -- Start from airbase hot.
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq25" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Sq25" )
-- For every 2 targets, there will be one plane spawned, so we give a 0.5 value. -- For every 2 targets, there will be one plane spawned, so we give a 0.5 value.
A2GDispatcher:SetSquadronOverhead( "Sq25", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Sq25", 0.25 )
@@ -1,46 +1,46 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
local DetectionZones = SET_ZONE:New():FilterPrefixes( { "Detection Zone " } ):FilterOnce() local DetectionZones = SET_ZONE:New():FilterPrefixes( { "Detection Zone " } ):FilterOnce()
Detection = DETECTION_ZONES:New( DetectionZones, coalition.side.BLUE ) Detection = DETECTION_ZONES:New( DetectionZones, coalition.side.BLUE )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 200000 ) A2GDispatcher:SetDefenseRadius( 200000 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 )
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 ) A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 )
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 KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 ) A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,48 +1,48 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
local DetectionZones = SET_ZONE:New():FilterPrefixes( { "Detection Zone " } ):FilterOnce() local DetectionZones = SET_ZONE:New():FilterPrefixes( { "Detection Zone " } ):FilterOnce()
Detection = DETECTION_ZONES:New( DetectionZones, coalition.side.BLUE ) Detection = DETECTION_ZONES:New( DetectionZones, coalition.side.BLUE )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 200000 ) A2GDispatcher:SetDefenseRadius( 200000 )
A2GDispatcher:SetDefenseLimit( 1 ) A2GDispatcher:SetDefenseLimit( 1 )
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", AIRBASE.Caucasus.Maykop_Khanskaya, { "CCCP SU-25T" }, 10 )
A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 ) A2GDispatcher:SetSquadronSead( "Maykop SEAD", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.2 )
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 ) A2GDispatcher:SetSquadronCas( "Maykop CAS", 120, 250 )
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 KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 ) A2GDispatcher:SetSquadronBai( "Maykop BAI", 120, 250 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,60 +1,60 @@
--- Sound check using patrol and engage for helicopters. --- Sound check using patrol and engage for helicopters.
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 14 Sep 2019 -- Date Created: 14 Sep 2019
-- 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.
DetectionSetGroup = SET_GROUP:New() DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "US Recce" } ) DetectionSetGroup:FilterPrefixes( { "US Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
CCGroup = GROUP:FindByName( "HQ" ) CCGroup = GROUP:FindByName( "HQ" )
CC = COMMANDCENTER:New( CCGroup, "HQ" ) CC = COMMANDCENTER:New( CCGroup, "HQ" )
Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
A2GDispatcher:SetCommandCenter( CC ) A2GDispatcher:SetCommandCenter( CC )
A2GDispatcher:SetTacticalMenu( "Dispatchers", "A2G Tactical Situation" ) A2GDispatcher:SetTacticalMenu( "Dispatchers", "A2G Tactical Situation" )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", GROUP:FindByName( "HQ" ):GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() A2GDispatcher:SetDefenseReactivityHigh()
A2GDispatcher:SetDefenseRadius( 100000 ) A2GDispatcher:SetDefenseRadius( 100000 )
A2GDispatcher:SetTacticalDisplay( false ) A2GDispatcher:SetTacticalDisplay( false )
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop SEAD", "SEAD", { "US KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop SEAD", "SEAD", { "US KA-50" }, 10 )
A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 300, 500, 50, 80, 250, 300 ) A2GDispatcher:SetSquadronSeadPatrol( "Maykop SEAD", PatrolZone, 300, 500, 50, 80, 250, 300 )
A2GDispatcher:SetSquadronPatrolInterval( "Maykop SEAD", 2, 30, 60, 1, "SEAD" ) A2GDispatcher:SetSquadronPatrolInterval( "Maykop SEAD", 2, 30, 60, 1, "SEAD" )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop SEAD" )
A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop SEAD", 0.25 )
A2GDispatcher:SetSquadronRadioFrequency( "Maykop SEAD", 124 ) A2GDispatcher:SetSquadronRadioFrequency( "Maykop SEAD", 124 )
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "US KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "US KA-50" }, 10 )
A2GDispatcher:SetSquadronCasPatrol( "Maykop CAS", PatrolZone, 600, 700, 50, 80, 250, 300 ) A2GDispatcher:SetSquadronCasPatrol( "Maykop CAS", PatrolZone, 600, 700, 50, 80, 250, 300 )
A2GDispatcher:SetSquadronPatrolInterval( "Maykop CAS", 2, 30, 60, 1, "CAS" ) A2GDispatcher:SetSquadronPatrolInterval( "Maykop CAS", 2, 30, 60, 1, "CAS" )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop CAS" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop CAS" )
A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 )
A2GDispatcher:SetSquadronRadioFrequency( "Maykop CAS", 126 ) A2GDispatcher:SetSquadronRadioFrequency( "Maykop CAS", 126 )
A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "US KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "US KA-50" }, 10 )
A2GDispatcher:SetSquadronBaiPatrol( "Maykop BAI", PatrolZone, 800, 900, 50, 80, 250, 300 ) A2GDispatcher:SetSquadronBaiPatrol( "Maykop BAI", PatrolZone, 800, 900, 50, 80, 250, 300 )
A2GDispatcher:SetSquadronPatrolInterval( "Maykop BAI", 2, 30, 60, 1, "BAI" ) A2GDispatcher:SetSquadronPatrolInterval( "Maykop BAI", 2, 30, 60, 1, "BAI" )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.25 )
A2GDispatcher:SetSquadronRadioFrequency( "Maykop BAI", 128 ) A2GDispatcher:SetSquadronRadioFrequency( "Maykop BAI", 128 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop SEAD", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,28 +1,28 @@
Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart() Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart()
Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 ) Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 )
A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue) A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue)
A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter
DefenseCoordinate = GROUP:FindByName( "COMMAND" ):GetCoordinate() DefenseCoordinate = GROUP:FindByName( "COMMAND" ):GetCoordinate()
A2G_Blue:AddDefenseCoordinate( "Defense Point", DefenseCoordinate ) A2G_Blue:AddDefenseCoordinate( "Defense Point", DefenseCoordinate )
A2G_Blue:SetDefenseRadius( 200000 ) -- in meters A2G_Blue:SetDefenseRadius( 200000 ) -- in meters
A2G_Blue:SetDefenseReactivityHigh() -- we engage almost immediately A2G_Blue:SetDefenseReactivityHigh() -- we engage almost immediately
A2G_Blue:SetSquadron( "SQ-1", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-AH-64D-ROCKETS", "A2G-DEFENSE-AH-64D-HELLFIRES" }, 20 ) A2G_Blue:SetSquadron( "SQ-1", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-AH-64D-ROCKETS", "A2G-DEFENSE-AH-64D-HELLFIRES" }, 20 )
A2G_Blue:SetSquadronBai( "SQ-1", 200, 280, 160, 500 ) A2G_Blue:SetSquadronBai( "SQ-1", 200, 280, 160, 500 )
A2G_Blue:SetSquadronTakeoffInAir( "SQ-1", 1000 ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffInAir( "SQ-1", 1000 ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingNearAirbase( "SQ-1" ) A2G_Blue:SetSquadronLandingNearAirbase( "SQ-1" )
A2G_Blue:SetSquadronOverhead( "SQ-1", 0.25 ) A2G_Blue:SetSquadronOverhead( "SQ-1", 0.25 )
A2G_Blue:SetSquadron( "SQ-2", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-AH-SU-25T-SEAD" }, 6 ) A2G_Blue:SetSquadron( "SQ-2", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-AH-SU-25T-SEAD" }, 6 )
A2G_Blue:SetSquadronSead( "SQ-2", 600, 900, 1000, 2000 ) A2G_Blue:SetSquadronSead( "SQ-2", 600, 900, 1000, 2000 )
A2G_Blue:SetSquadronTakeoffInAir( "SQ-2", 2000 ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffInAir( "SQ-2", 2000 ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingNearAirbase( "SQ-2" ) A2G_Blue:SetSquadronLandingNearAirbase( "SQ-2" )
A2G_Blue:SetSquadronOverhead( "SQ-2", 0.5 ) A2G_Blue:SetSquadronOverhead( "SQ-2", 0.5 )
@@ -1,35 +1,35 @@
Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart() Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart()
Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 ) Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 )
A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue) A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue)
A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter
A2G_Blue:AddDefenseCoordinate( "Command", GROUP:FindByName( "COMMAND" ):GetCoordinate() ) A2G_Blue:AddDefenseCoordinate( "Command", GROUP:FindByName( "COMMAND" ):GetCoordinate() )
A2G_Blue:AddDefenseCoordinate( "Home", GROUP:FindByName( "HOME" ):GetCoordinate() ) A2G_Blue:AddDefenseCoordinate( "Home", GROUP:FindByName( "HOME" ):GetCoordinate() )
A2G_Blue:SetDefenseRadius( 200000 ) -- in meters A2G_Blue:SetDefenseRadius( 200000 ) -- in meters
A2G_Blue:SetDefenseReactivityHigh() -- we engage almost immediately A2G_Blue:SetDefenseReactivityHigh() -- we engage almost immediately
A2G_Blue:SetSquadron( "SQ-1", AIRBASE.Caucasus.Senaki_Kolkhi, { "A2G-DEFENSE-HELO-001", "A2G-DEFENSE-HELO-002", "A2G-DEFENSE-HELO-003" }, 20 ) A2G_Blue:SetSquadron( "SQ-1", AIRBASE.Caucasus.Senaki_Kolkhi, { "A2G-DEFENSE-HELO-001", "A2G-DEFENSE-HELO-002", "A2G-DEFENSE-HELO-003" }, 20 )
A2G_Blue:SetSquadronBai( "SQ-1", 200, 280, 160, 500 ) A2G_Blue:SetSquadronBai( "SQ-1", 200, 280, 160, 500 )
A2G_Blue:SetSquadronTakeoffInAir( "SQ-1", 1000 ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffInAir( "SQ-1", 1000 ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingNearAirbase( "SQ-1" ) A2G_Blue:SetSquadronLandingNearAirbase( "SQ-1" )
A2G_Blue:SetSquadronOverhead( "SQ-1", 0.25 ) A2G_Blue:SetSquadronOverhead( "SQ-1", 0.25 )
A2G_Blue:SetSquadron( "SQ-2", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-SU-25T-SEAD" }, 10 ) A2G_Blue:SetSquadron( "SQ-2", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-SU-25T-SEAD" }, 10 )
A2G_Blue:SetSquadronSead( "SQ-2", 600, 900, 1000, 2000 ) A2G_Blue:SetSquadronSead( "SQ-2", 600, 900, 1000, 2000 )
A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-2" ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-2" ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingAtRunway( "SQ-2" ) A2G_Blue:SetSquadronLandingAtRunway( "SQ-2" )
A2G_Blue:SetSquadronOverhead( "SQ-2", 0.5 ) A2G_Blue:SetSquadronOverhead( "SQ-2", 0.5 )
A2G_Blue:SetSquadron( "SQ-3", AIRBASE.Caucasus.Kobuleti, { "A2G-DEFENSE-AJS37-CAS" }, 6 ) A2G_Blue:SetSquadron( "SQ-3", AIRBASE.Caucasus.Kobuleti, { "A2G-DEFENSE-AJS37-CAS" }, 6 )
A2G_Blue:SetSquadronBai( "SQ-3", 600, 900, 1000, 2000 ) A2G_Blue:SetSquadronBai( "SQ-3", 600, 900, 1000, 2000 )
A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-3" ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-3" ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingAtRunway( "SQ-3" ) A2G_Blue:SetSquadronLandingAtRunway( "SQ-3" )
A2G_Blue:SetSquadronOverhead( "SQ-3", 0.5 ) A2G_Blue:SetSquadronOverhead( "SQ-3", 0.5 )
A2G_Blue:SetSquadronBaiPatrol( "SQ-3", ZONE:New( "PatrolZone" ), 2000, 3000, 600, 800, 1000, 1400 ) A2G_Blue:SetSquadronBaiPatrol( "SQ-3", ZONE:New( "PatrolZone" ), 2000, 3000, 600, 800, 1000, 1400 )
A2G_Blue:SetSquadronPatrolInterval( "SQ-3", 4, 30, 60, 1, "BAI" ) A2G_Blue:SetSquadronPatrolInterval( "SQ-3", 4, 30, 60, 1, "BAI" )
@@ -1,44 +1,44 @@
Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart() Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart()
Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 ) Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 )
A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue) A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue)
A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter
A2G_Blue:AddDefenseCoordinate( "Command", GROUP:FindByName( "COMMAND" ):GetCoordinate() ) A2G_Blue:AddDefenseCoordinate( "Command", GROUP:FindByName( "COMMAND" ):GetCoordinate() )
A2G_Blue:AddDefenseCoordinate( "Home", GROUP:FindByName( "HOME" ):GetCoordinate() ) A2G_Blue:AddDefenseCoordinate( "Home", GROUP:FindByName( "HOME" ):GetCoordinate() )
A2G_Blue:SetDefenseRadius( 350000 ) -- in meters A2G_Blue:SetDefenseRadius( 350000 ) -- in meters
A2G_Blue:SetDefenseReactivityMedium() -- we engage almost immediately A2G_Blue:SetDefenseReactivityMedium() -- we engage almost immediately
A2G_Blue:SetSquadron( "SQ-1", AIRBASE.Caucasus.Senaki_Kolkhi, { "A2G-DEFENSE-HELO-001", "A2G-DEFENSE-HELO-002", "A2G-DEFENSE-HELO-003" }, 20 ) A2G_Blue:SetSquadron( "SQ-1", AIRBASE.Caucasus.Senaki_Kolkhi, { "A2G-DEFENSE-HELO-001", "A2G-DEFENSE-HELO-002", "A2G-DEFENSE-HELO-003" }, 20 )
A2G_Blue:SetSquadronBai( "SQ-1", 200, 280, 160, 500 ) A2G_Blue:SetSquadronBai( "SQ-1", 200, 280, 160, 500 )
A2G_Blue:SetSquadronTakeoffInAir( "SQ-1", 1000 ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffInAir( "SQ-1", 1000 ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingNearAirbase( "SQ-1" ) A2G_Blue:SetSquadronLandingNearAirbase( "SQ-1" )
A2G_Blue:SetSquadronOverhead( "SQ-1", 0.5 ) A2G_Blue:SetSquadronOverhead( "SQ-1", 0.5 )
A2G_Blue:SetSquadronGrouping( "SQ-1", 4 ) A2G_Blue:SetSquadronGrouping( "SQ-1", 4 )
A2G_Blue:SetSquadron( "SQ-HELO", AIRBASE.Caucasus.Sukhumi_Babushara, { "A2G-DEFENSE-HELO-004", "A2G-DEFENSE-HELO-005", "A2G-DEFENSE-HELO-006" }, 20 ) A2G_Blue:SetSquadron( "SQ-HELO", AIRBASE.Caucasus.Sukhumi_Babushara, { "A2G-DEFENSE-HELO-004", "A2G-DEFENSE-HELO-005", "A2G-DEFENSE-HELO-006" }, 20 )
A2G_Blue:SetSquadronBai( "SQ-HELO", 200, 280, 1500, 2000 ) A2G_Blue:SetSquadronBai( "SQ-HELO", 200, 280, 1500, 2000 )
A2G_Blue:SetSquadronTakeoffInAir( "SQ-HELO", 1000 ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffInAir( "SQ-HELO", 1000 ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingNearAirbase( "SQ-HELO" ) A2G_Blue:SetSquadronLandingNearAirbase( "SQ-HELO" )
A2G_Blue:SetSquadronOverhead( "SQ-HELO", 0.75 ) A2G_Blue:SetSquadronOverhead( "SQ-HELO", 0.75 )
A2G_Blue:SetSquadronGrouping( "SQ-HELO", 4 ) A2G_Blue:SetSquadronGrouping( "SQ-HELO", 4 )
A2G_Blue:SetSquadron( "SQ-2", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-SU-25T-SEAD" }, 10 ) A2G_Blue:SetSquadron( "SQ-2", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-SU-25T-SEAD" }, 10 )
A2G_Blue:SetSquadronSead( "SQ-2", 700, 1100, 2500, 4000 ) A2G_Blue:SetSquadronSead( "SQ-2", 700, 1100, 2500, 4000 )
A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-2" ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-2" ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingAtRunway( "SQ-2" ) A2G_Blue:SetSquadronLandingAtRunway( "SQ-2" )
A2G_Blue:SetSquadronOverhead( "SQ-2", 0.5 ) A2G_Blue:SetSquadronOverhead( "SQ-2", 0.5 )
A2G_Blue:SetSquadron( "SQ-AIR", AIRBASE.Caucasus.Kobuleti, { "A2G-DEFENSE-A-10C-CAS" }, 6 ) A2G_Blue:SetSquadron( "SQ-AIR", AIRBASE.Caucasus.Kobuleti, { "A2G-DEFENSE-A-10C-CAS" }, 6 )
A2G_Blue:SetSquadronBai( "SQ-AIR", 600, 900, 1000, 2000 ) A2G_Blue:SetSquadronBai( "SQ-AIR", 600, 900, 1000, 2000 )
A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-AIR" ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-AIR" ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingAtRunway( "SQ-AIR" ) A2G_Blue:SetSquadronLandingAtRunway( "SQ-AIR" )
A2G_Blue:SetSquadronOverhead( "SQ-AIR", 0.75 ) A2G_Blue:SetSquadronOverhead( "SQ-AIR", 0.75 )
A2G_Blue:SetSquadronBaiPatrol( "SQ-AIR", ZONE:New( "PatrolZone" ), 2000, 3000, 600, 800, 1000, 1400 ) A2G_Blue:SetSquadronBaiPatrol( "SQ-AIR", ZONE:New( "PatrolZone" ), 2000, 3000, 600, 800, 1000, 1400 )
A2G_Blue:SetSquadronPatrolInterval( "SQ-AIR", 4, 30, 60, 1, "BAI" ) A2G_Blue:SetSquadronPatrolInterval( "SQ-AIR", 4, 30, 60, 1, "BAI" )
A2G_Blue:SetSquadronGrouping( "SQ-AIR", 4 ) A2G_Blue:SetSquadronGrouping( "SQ-AIR", 4 )
@@ -1,56 +1,56 @@
Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart() Recce_Blue = SET_GROUP:New():FilterPrefixes( "RECCE" ):FilterStart()
Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 ) Detection_Blue = DETECTION_AREAS:New( Recce_Blue, 3000 )
A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue) A2G_Blue = AI_A2G_DISPATCHER:New(Detection_Blue)
A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter A2G_Blue:SetTacticalDisplay( true ) -- set on using true as a parameter
A2G_Blue:AddDefenseCoordinate( "Command", GROUP:FindByName( "COMMAND" ):GetCoordinate() ) A2G_Blue:AddDefenseCoordinate( "Command", GROUP:FindByName( "COMMAND" ):GetCoordinate() )
A2G_Blue:AddDefenseCoordinate( "Home", GROUP:FindByName( "HOME" ):GetCoordinate() ) A2G_Blue:AddDefenseCoordinate( "Home", GROUP:FindByName( "HOME" ):GetCoordinate() )
A2G_Blue:SetDefenseRadius( 350000 ) -- in meters A2G_Blue:SetDefenseRadius( 350000 ) -- in meters
A2G_Blue:SetDefenseReactivityMedium() -- we engage almost immediately A2G_Blue:SetDefenseReactivityMedium() -- we engage almost immediately
A2G_Blue:SetSquadron( "SQ-HELO-BAI-1", AIRBASE.Caucasus.Senaki_Kolkhi, { "A2G-DEFENSE-HELO-001", "A2G-DEFENSE-HELO-002", "A2G-DEFENSE-HELO-003" }, 20 ) A2G_Blue:SetSquadron( "SQ-HELO-BAI-1", AIRBASE.Caucasus.Senaki_Kolkhi, { "A2G-DEFENSE-HELO-001", "A2G-DEFENSE-HELO-002", "A2G-DEFENSE-HELO-003" }, 20 )
A2G_Blue:SetSquadronBai( "SQ-HELO-BAI-1", 200, 280, 160, 500 ) A2G_Blue:SetSquadronBai( "SQ-HELO-BAI-1", 200, 280, 160, 500 )
A2G_Blue:SetSquadronTakeoffInAir( "SQ-HELO-BAI-1", 1000 ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffInAir( "SQ-HELO-BAI-1", 1000 ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingNearAirbase( "SQ-HELO-BAI-1" ) A2G_Blue:SetSquadronLandingNearAirbase( "SQ-HELO-BAI-1" )
A2G_Blue:SetSquadronOverhead( "SQ-HELO-BAI-1", 0.5 ) A2G_Blue:SetSquadronOverhead( "SQ-HELO-BAI-1", 0.5 )
A2G_Blue:SetSquadronGrouping( "SQ-HELO-BAI-1", 4 ) A2G_Blue:SetSquadronGrouping( "SQ-HELO-BAI-1", 4 )
A2G_Blue:SetSquadron( "SQ-HELO-BAI-2", AIRBASE.Caucasus.Sukhumi_Babushara, { "A2G-DEFENSE-HELO-004", "A2G-DEFENSE-HELO-005", "A2G-DEFENSE-HELO-006" }, 20 ) A2G_Blue:SetSquadron( "SQ-HELO-BAI-2", AIRBASE.Caucasus.Sukhumi_Babushara, { "A2G-DEFENSE-HELO-004", "A2G-DEFENSE-HELO-005", "A2G-DEFENSE-HELO-006" }, 20 )
A2G_Blue:SetSquadronBai( "SQ-HELO-BAI-2", 200, 280, 1500, 2000 ) A2G_Blue:SetSquadronBai( "SQ-HELO-BAI-2", 200, 280, 1500, 2000 )
A2G_Blue:SetSquadronTakeoffInAir( "SQ-HELO-BAI-2", 1000 ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffInAir( "SQ-HELO-BAI-2", 1000 ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingNearAirbase( "SQ-HELO-BAI-2" ) A2G_Blue:SetSquadronLandingNearAirbase( "SQ-HELO-BAI-2" )
A2G_Blue:SetSquadronOverhead( "SQ-HELO-BAI-2", 0.75 ) A2G_Blue:SetSquadronOverhead( "SQ-HELO-BAI-2", 0.75 )
A2G_Blue:SetSquadronGrouping( "SQ-HELO-BAI-2", 4 ) A2G_Blue:SetSquadronGrouping( "SQ-HELO-BAI-2", 4 )
A2G_Blue:SetSquadron( "SQ-SEAD", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-SU-25T-SEAD" }, 10 ) A2G_Blue:SetSquadron( "SQ-SEAD", AIRBASE.Caucasus.Gudauta, { "A2G-DEFENSE-SU-25T-SEAD" }, 10 )
A2G_Blue:SetSquadronSead( "SQ-SEAD", 700, 1100, 2500, 4000 ) A2G_Blue:SetSquadronSead( "SQ-SEAD", 700, 1100, 2500, 4000 )
A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-SEAD" ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-SEAD" ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingAtRunway( "SQ-SEAD" ) A2G_Blue:SetSquadronLandingAtRunway( "SQ-SEAD" )
A2G_Blue:SetSquadronOverhead( "SQ-SEAD", 1 ) A2G_Blue:SetSquadronOverhead( "SQ-SEAD", 1 )
A2G_Blue:SetSquadronGrouping( "SQ-SEAD", 2 ) A2G_Blue:SetSquadronGrouping( "SQ-SEAD", 2 )
A2G_Blue:SetSquadron( "SQ-AIR-BAI", AIRBASE.Caucasus.Kobuleti, { "A2G-DEFENSE-A-10C" }, 6 ) A2G_Blue:SetSquadron( "SQ-AIR-BAI", AIRBASE.Caucasus.Kobuleti, { "A2G-DEFENSE-A-10C" }, 6 )
A2G_Blue:SetSquadronBai( "SQ-AIR-BAI", 600, 900, 1000, 2000 ) A2G_Blue:SetSquadronBai( "SQ-AIR-BAI", 600, 900, 1000, 2000 )
A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-AIR-BAI" ) -- altitude in meters when spawning in the air. A2G_Blue:SetSquadronTakeoffFromParkingHot( "SQ-AIR-BAI" ) -- altitude in meters when spawning in the air.
A2G_Blue:SetSquadronLandingAtRunway( "SQ-AIR-BAI" ) A2G_Blue:SetSquadronLandingAtRunway( "SQ-AIR-BAI" )
A2G_Blue:SetSquadronOverhead( "SQ-AIR-BAI", 0.75 ) A2G_Blue:SetSquadronOverhead( "SQ-AIR-BAI", 0.75 )
A2G_Blue:SetSquadronBaiPatrol( "SQ-AIR-BAI", ZONE:New( "PatrolZone" ), 2000, 3000, 600, 800, 1000, 1400 ) A2G_Blue:SetSquadronBaiPatrol( "SQ-AIR-BAI", ZONE:New( "PatrolZone" ), 2000, 3000, 600, 800, 1000, 1400 )
A2G_Blue:SetSquadronPatrolInterval( "SQ-AIR-BAI", 4, 30, 60, 1, "BAI" ) A2G_Blue:SetSquadronPatrolInterval( "SQ-AIR-BAI", 4, 30, 60, 1, "BAI" )
A2G_Blue:SetSquadronGrouping( "SQ-AIR-BAI", 4 ) A2G_Blue:SetSquadronGrouping( "SQ-AIR-BAI", 4 )
-- A2G task dispatcher -- A2G task dispatcher
Command_Blue = COMMANDCENTER:New( GROUP:FindByName( "NATO HQ" ), "NATO HQ" ) Command_Blue = COMMANDCENTER:New( GROUP:FindByName( "NATO HQ" ), "NATO HQ" )
Mission_Blue = MISSION:New( Command_Blue, "Invasion", "High", "Eliminate 5 targets", coalition.side.BLUE ) Mission_Blue = MISSION:New( Command_Blue, "Invasion", "High", "Eliminate 5 targets", coalition.side.BLUE )
Players_Blue = SET_GROUP:New():FilterPrefixes( { "NATO Player" } ):FilterStart() Players_Blue = SET_GROUP:New():FilterPrefixes( { "NATO Player" } ):FilterStart()
A2G_Task_Blue = TASK_A2G_DISPATCHER:New( Mission_Blue, Players_Blue, Detection_Blue ) A2G_Task_Blue = TASK_A2G_DISPATCHER:New( Mission_Blue, Players_Blue, Detection_Blue )
@@ -1,56 +1,56 @@
--- Detect and attack a set of enemy units. --- Detect and attack a set of enemy units.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
local DetectionSetGroup = SET_GROUP:New() local DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
local Detection = DETECTION_AREAS:New( DetectionSetGroup, 5000 ) local Detection = DETECTION_AREAS:New( DetectionSetGroup, 5000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- The Command Center (HQ) is the defense point and will also handle the communication to the coalition. -- The Command Center (HQ) is the defense point and will also handle the communication to the coalition.
local HQ_Group = GROUP:FindByName( "HQ" ) local HQ_Group = GROUP:FindByName( "HQ" )
local HQ_CC = COMMANDCENTER:New( HQ_Group, "HQ" ) local HQ_CC = COMMANDCENTER:New( HQ_Group, "HQ" )
-- The HQ is the defense point, so this point will be defended. -- The HQ is the defense point, so this point will be defended.
A2GDispatcher:AddDefenseCoordinate( "HQ", HQ_Group:GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", HQ_Group:GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() -- High defense reactivity. So far proximity of a threat will trigger a defense action. A2GDispatcher:SetDefenseReactivityHigh() -- High defense reactivity. So far proximity of a threat will trigger a defense action.
A2GDispatcher:SetDefenseRadius( 200000 ) -- Defense radius wide enough to also trigger defenses far away. A2GDispatcher:SetDefenseRadius( 200000 ) -- Defense radius wide enough to also trigger defenses far away.
-- Communication to the players within the coalition. The HQ services the communication of the defense actions. -- Communication to the players within the coalition. The HQ services the communication of the defense actions.
A2GDispatcher:SetCommandCenter( HQ_CC ) A2GDispatcher:SetCommandCenter( HQ_CC )
-- Show a tactical display. -- Show a tactical display.
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the squadrons. -- Setup the squadrons.
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCas2( "Maykop CAS", 200, 250, 300, 500, "RADIO" ) 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 KA-50" }, 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 )
A2GDispatcher:SetSquadron( "Krasnodar", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "CCCP SU-25TM" }, 10 ) A2GDispatcher:SetSquadron( "Krasnodar", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "CCCP SU-25TM" }, 10 )
A2GDispatcher:SetSquadronSead2( "Krasnodar", 600, 800, 2000, 2000, "RADIO" ) A2GDispatcher:SetSquadronSead2( "Krasnodar", 600, 800, 2000, 2000, "RADIO" )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Krasnodar" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Krasnodar" )
A2GDispatcher:SetSquadronOverhead( "Krasnodar", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Krasnodar", 0.2 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Krasnodar", 10 ) A2GDispatcher:SetSquadronTakeoffInterval( "Krasnodar", 10 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,66 +1,66 @@
--- Detect and attack a set of enemy units using helicopters. --- Detect and attack a set of enemy units using helicopters.
-- Name: AID-A2G-001 - Detection and Attack Helicopters -- Name: AID-A2G-001 - Detection and Attack Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 02 Nov 2018 -- Date Created: 02 Nov 2018
-- 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.
local DetectionSetGroup = SET_GROUP:New() local DetectionSetGroup = SET_GROUP:New()
DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } ) DetectionSetGroup:FilterPrefixes( { "CCCP Recce" } )
DetectionSetGroup:FilterStart() DetectionSetGroup:FilterStart()
local Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 ) local Detection = DETECTION_AREAS:New( DetectionSetGroup, 1000 )
-- Setup the A2A dispatcher, and initialize it. -- Setup the A2A dispatcher, and initialize it.
A2GDispatcher = AI_A2G_DISPATCHER:New( Detection ) A2GDispatcher = AI_A2G_DISPATCHER:New( Detection )
-- The Command Center (HQ) is the defense point and will also handle the communication to the coalition. -- The Command Center (HQ) is the defense point and will also handle the communication to the coalition.
local HQ_Group = GROUP:FindByName( "HQ" ) local HQ_Group = GROUP:FindByName( "HQ" )
local HQ_CC = COMMANDCENTER:New( HQ_Group, "HQ" ) local HQ_CC = COMMANDCENTER:New( HQ_Group, "HQ" )
-- Add defense coordinates. -- Add defense coordinates.
A2GDispatcher:AddDefenseCoordinate( "HQ", HQ_Group:GetCoordinate() ) A2GDispatcher:AddDefenseCoordinate( "HQ", HQ_Group:GetCoordinate() )
A2GDispatcher:SetDefenseReactivityHigh() -- High defense reactivity. So far proximity of a threat will trigger a defense action. A2GDispatcher:SetDefenseReactivityHigh() -- High defense reactivity. So far proximity of a threat will trigger a defense action.
A2GDispatcher:SetDefenseRadius( 200000 ) -- Defense radius wide enough to also trigger defenses far away. A2GDispatcher:SetDefenseRadius( 200000 ) -- Defense radius wide enough to also trigger defenses far away.
-- Communication to the players within the coalition. The HQ services the communication of the defense actions. -- Communication to the players within the coalition. The HQ services the communication of the defense actions.
A2GDispatcher:SetCommandCenter( HQ_CC ) A2GDispatcher:SetCommandCenter( HQ_CC )
-- Show a tactical display. -- Show a tactical display.
A2GDispatcher:SetTacticalDisplay( true ) A2GDispatcher:SetTacticalDisplay( true )
-- Setup the patrols. -- Setup the patrols.
-- The patrol zone. -- The patrol zone.
local PatrolZone = ZONE:New( "PatrolZone" ) local PatrolZone = ZONE:New( "PatrolZone" )
-- SEADing from Krasnodar. -- SEADing from Krasnodar.
A2GDispatcher:SetSquadron( "Krasnodar", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "CCCP SU-25TM" }, 10 ) A2GDispatcher:SetSquadron( "Krasnodar", AIRBASE.Caucasus.Krasnodar_Pashkovsky, { "CCCP SU-25TM" }, 10 )
A2GDispatcher:SetSquadronSeadPatrol2( "Krasnodar", PatrolZone, 500, 550, 2000, 2000, "BARO", 750, 800, 30, 30, "RADIO" ) -- New API A2GDispatcher:SetSquadronSeadPatrol2( "Krasnodar", PatrolZone, 500, 550, 2000, 2000, "BARO", 750, 800, 30, 30, "RADIO" ) -- New API
A2GDispatcher:SetSquadronSeadPatrolInterval( "Krasnodar", 2, 30, 60, 1 ) A2GDispatcher:SetSquadronSeadPatrolInterval( "Krasnodar", 2, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Krasnodar" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Krasnodar" )
A2GDispatcher:SetSquadronOverhead( "Krasnodar", 0.2 ) A2GDispatcher:SetSquadronOverhead( "Krasnodar", 0.2 )
-- Close Air Support from the CAS farp. -- Close Air Support from the CAS farp.
A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 ) A2GDispatcher:SetSquadron( "Maykop CAS", "CAS", { "CCCP KA-50" }, 10 )
A2GDispatcher:SetSquadronCasPatrol2( "Maykop CAS", PatrolZone, 50, 80, 600, 700, "BARO", 200, 230, 30, 30, "RADIO" ) -- New API A2GDispatcher:SetSquadronCasPatrol2( "Maykop CAS", PatrolZone, 50, 80, 600, 700, "BARO", 200, 230, 30, 30, "RADIO" ) -- New API
A2GDispatcher:SetSquadronCasPatrolInterval( "Maykop CAS", 2, 30, 60, 1 ) A2GDispatcher:SetSquadronCasPatrolInterval( "Maykop CAS", 2, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop CAS" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop CAS" )
A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 ) A2GDispatcher:SetSquadronOverhead( "Maykop CAS", 0.25 )
-- Battlefield Air Interdiction from the BAI farp. -- Battlefield Air Interdiction from the BAI farp.
A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP MIL-8MTV" }, 10 ) A2GDispatcher:SetSquadron( "Maykop BAI", "BAI", { "CCCP MIL-8MTV" }, 10 )
A2GDispatcher:SetSquadronBaiPatrol2( "Maykop BAI", PatrolZone, 50, 80, 600, 700, "BARO", 200, 230, 800, 900, "RADIO" ) -- New API A2GDispatcher:SetSquadronBaiPatrol2( "Maykop BAI", PatrolZone, 50, 80, 600, 700, "BARO", 200, 230, 800, 900, "RADIO" ) -- New API
A2GDispatcher:SetSquadronBaiPatrolInterval( "Maykop BAI", 5, 30, 60, 1 ) A2GDispatcher:SetSquadronBaiPatrolInterval( "Maykop BAI", 5, 30, 60, 1 )
A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" ) A2GDispatcher:SetSquadronTakeoffFromParkingHot( "Maykop BAI" )
A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.75 ) A2GDispatcher:SetSquadronOverhead( "Maykop BAI", 0.75 )
-- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP. -- We set for each squadron a takeoff interval, as each helicopter will launch from a FARP.
-- This to prevent helicopters to clutter. -- This to prevent helicopters to clutter.
-- Each helicopter group is taking off the FARP in hot start. -- Each helicopter group is taking off the FARP in hot start.
A2GDispatcher:SetSquadronTakeoffInterval( "Krasnodar", 10 ) A2GDispatcher:SetSquadronTakeoffInterval( "Krasnodar", 10 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop CAS", 60 )
A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 ) A2GDispatcher:SetSquadronTakeoffInterval( "Maykop BAI", 60 )
@@ -1,43 +1,43 @@
-- Name: AIB-002 - Patrol AI.lua -- Name: AIB-002 - Patrol AI.lua
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 7 December 2016 -- Date Created: 7 December 2016
-- --
-- # Situation: -- # Situation:
-- --
-- For the red coalition, 2 client slots are foreseen. -- For the red coalition, 2 client slots are foreseen.
-- For those players that have not joined the mission, red AI is spawned. -- For those players that have not joined the mission, red AI is spawned.
-- The red AI should start patrolling an area until fuel is empty and return to the home base. -- The red AI should start patrolling an area until fuel is empty and return to the home base.
-- --
-- # Test cases: -- # Test cases:
-- --
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive. -- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base. -- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base. -- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
-- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa. -- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa.
-- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa. -- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa.
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup. -- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ) RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
-- Define the SPAWN object for the red AI plane template. -- Define the SPAWN object for the red AI plane template.
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off. -- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
-- If a blocked plane exists, this red plane will be ReSpawned. -- If a blocked plane exists, this red plane will be ReSpawned.
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 ) RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter. -- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn ) RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
local PatrolZones = {} local PatrolZones = {}
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup ) function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
local PatrolZoneGroup = GROUP:FindByName( "PatrolZone" ) local PatrolZoneGroup = GROUP:FindByName( "PatrolZone" )
local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup ) local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
PatrolZones[AIGroup] = AI_PATROL_ZONE:New( PatrolZone, 3000, 6000, 400, 600 ) PatrolZones[AIGroup] = AI_PATROL_ZONE:New( PatrolZone, 3000, 6000, 400, 600 )
PatrolZones[AIGroup]:ManageFuel( 0.2, 60 ) PatrolZones[AIGroup]:ManageFuel( 0.2, 60 )
PatrolZones[AIGroup]:SetControllable( AIGroup ) PatrolZones[AIGroup]:SetControllable( AIGroup )
PatrolZones[AIGroup]:__Start( 5 ) PatrolZones[AIGroup]:__Start( 5 )
end end
@@ -1,24 +1,24 @@
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ) RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 ) RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn ) RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
RU_AirbasesSet = SET_AIRBASE:New():FilterCoalitions("red"):FilterStart() RU_AirbasesSet = SET_AIRBASE:New():FilterCoalitions("red"):FilterStart()
RU_AirbasesSet:Flush() RU_AirbasesSet:Flush()
RU_AI_Balancer:ReturnToNearestAirbases( 10000, RU_AirbasesSet ) RU_AI_Balancer:ReturnToNearestAirbases( 10000, RU_AirbasesSet )
US_PlanesClientSet = SET_CLIENT:New():FilterCountries( "USA" ):FilterCategories( "plane" ) US_PlanesClientSet = SET_CLIENT:New():FilterCountries( "USA" ):FilterCategories( "plane" )
US_PlanesSpawn = SPAWN:New( "AI US" ):InitCleanUp( 20 ) US_PlanesSpawn = SPAWN:New( "AI US" ):InitCleanUp( 20 )
US_AI_Balancer = AI_BALANCER:New( US_PlanesClientSet, US_PlanesSpawn ) US_AI_Balancer = AI_BALANCER:New( US_PlanesClientSet, US_PlanesSpawn )
--RU_AI_Balancer:ReturnToHomeAirbase( 10000 ) --RU_AI_Balancer:ReturnToHomeAirbase( 10000 )
--local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone Blue" ) --local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone Blue" )
--local PatrolZoneBlue = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup ) --local PatrolZoneBlue = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
--local PatrolZoneB = AI_PATROL_ZONE:New( PatrolZoneBlue, 3000, 6000, 900, 1100 ):ManageFuel( 0.2, 180 ) --local PatrolZoneB = AI_PATROL_ZONE:New( PatrolZoneBlue, 3000, 6000, 900, 1100 ):ManageFuel( 0.2, 180 )
--US_AI_Balancer:SetPatrolZone( PatrolZoneB ) --US_AI_Balancer:SetPatrolZone( PatrolZoneB )
-- --
--local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone Red" ) --local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone Red" )
--local PatrolZoneRed = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup ) --local PatrolZoneRed = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
--local PatrolZoneR = AI_PATROL_ZONE:New( PatrolZoneRed, 3000, 6000, 900, 1100 ):ManageFuel( 0.2, 180 ) --local PatrolZoneR = AI_PATROL_ZONE:New( PatrolZoneRed, 3000, 6000, 900, 1100 ):ManageFuel( 0.2, 180 )
--RU_AI_Balancer:SetPatrolZone( PatrolZoneR ) --RU_AI_Balancer:SetPatrolZone( PatrolZoneR )
@@ -1,47 +1,47 @@
-- Name: AIB-004 - Respawn Test when Destroyed.lua -- Name: AIB-004 - Respawn Test when Destroyed.lua
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 7 January 2017 -- Date Created: 7 January 2017
-- --
-- # Situation: -- # Situation:
-- --
-- For the red coalition, 2 client slots are foreseen. -- For the red coalition, 2 client slots are foreseen.
-- For those players that have not joined the mission, red AI is spawned. -- For those players that have not joined the mission, red AI is spawned.
-- The red AI should start patrolling an area. -- The red AI should start patrolling an area.
-- --
-- The blue side has SAMs nearby. -- The blue side has SAMs nearby.
-- Once the red AI takes off, the red AI is attacked by the blue SAMs. -- Once the red AI takes off, the red AI is attacked by the blue SAMs.
-- Red AI should be killed and once that happens, a Respawn of the group should happen! -- Red AI should be killed and once that happens, a Respawn of the group should happen!
-- The Respawn happens through the InitCleanUp() API of SPAWN. -- The Respawn happens through the InitCleanUp() API of SPAWN.
-- --
-- # Test cases: -- # Test cases:
-- --
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive. -- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base. -- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base. -- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
-- 4. Monitor that once a red AI is destroyed, that it ReSpawns... -- 4. Monitor that once a red AI is destroyed, that it ReSpawns...
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup. -- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ) RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
-- Define the SPAWN object for the red AI plane template. -- Define the SPAWN object for the red AI plane template.
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off. -- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
-- If a blocked plane exists, this red plane will be ReSpawned. -- If a blocked plane exists, this red plane will be ReSpawned.
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 ) RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter. -- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn ) RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup ) function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
local PatrolZoneGroup = GROUP:FindByName( "PatrolZone" ) local PatrolZoneGroup = GROUP:FindByName( "PatrolZone" )
local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup ) local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
local Patrol = AI_PATROL_ZONE:New( PatrolZone, 3000, 6000, 400, 600 ) local Patrol = AI_PATROL_ZONE:New( PatrolZone, 3000, 6000, 400, 600 )
Patrol:ManageFuel( 0.2, 60 ) Patrol:ManageFuel( 0.2, 60 )
Patrol:SetControllable( AIGroup ) Patrol:SetControllable( AIGroup )
Patrol:__Start( 5 ) Patrol:__Start( 5 )
end end
@@ -1,51 +1,51 @@
-- Name: AIB-005 - Patrol AI and Randomize Zones -- Name: AIB-005 - Patrol AI and Randomize Zones
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 Jan 2016 -- Date Created: 10 Jan 2016
-- --
-- # Situation: -- # Situation:
-- --
-- For the red coalition, 2 client slots are foreseen. -- For the red coalition, 2 client slots are foreseen.
-- For those players that have not joined the mission, red AI is spawned. -- For those players that have not joined the mission, red AI is spawned.
-- The red AI should start patrolling an area until fuel is empty and return to the home base. -- The red AI should start patrolling an area until fuel is empty and return to the home base.
-- For each AI being spawned, ensure that they fly to a random zone defined within the mission editor. -- For each AI being spawned, ensure that they fly to a random zone defined within the mission editor.
-- Right now there are two patrol zones defined, so the AI should start patrolliing in one of these zones. -- Right now there are two patrol zones defined, so the AI should start patrolliing in one of these zones.
-- --
-- # Test cases: -- # Test cases:
-- --
-- 1. If no player is logging into the red slots, 2 red AI planes should be alive. -- 1. If no player is logging into the red slots, 2 red AI planes should be alive.
-- 2. If a player joins one red slot, one red AI plane should return to the nearest home base. -- 2. If a player joins one red slot, one red AI plane should return to the nearest home base.
-- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base. -- 3. If two players join the red slots, no AI plane should be spawned, and all airborne AI planes should return to the nearest home base.
-- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa. -- 4. Spawned AI should take-off from the airbase, and start patrolling the area around Anapa.
-- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa. -- 5. When the AI is out-of-fuel, it should report it is returning to the home base, and land at Anapa.
-- 6. Ensure that you see the AI patrol in one of the two zones ... -- 6. Ensure that you see the AI patrol in one of the two zones ...
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup. -- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ) RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
-- Define the SPAWN object for the red AI plane template. -- Define the SPAWN object for the red AI plane template.
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off. -- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
-- If a blocked plane exists, this red plane will be ReSpawned. -- If a blocked plane exists, this red plane will be ReSpawned.
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 ) RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter. -- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn ) RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
-- Create the first polygon zone ... -- Create the first polygon zone ...
PatrolZoneGroup1 = GROUP:FindByName( "PatrolZone1" ) PatrolZoneGroup1 = GROUP:FindByName( "PatrolZone1" )
PatrolZone1 = ZONE_POLYGON:New( "PatrolZone1", PatrolZoneGroup1 ) PatrolZone1 = ZONE_POLYGON:New( "PatrolZone1", PatrolZoneGroup1 )
-- Create the second polygon zone ... -- Create the second polygon zone ...
PatrolZoneGroup2 = GROUP:FindByName( "PatrolZone2" ) PatrolZoneGroup2 = GROUP:FindByName( "PatrolZone2" )
PatrolZone2 = ZONE_POLYGON:New( "PatrolZone2", PatrolZoneGroup2 ) PatrolZone2 = ZONE_POLYGON:New( "PatrolZone2", PatrolZoneGroup2 )
-- Now, create an array of these zones ... -- Now, create an array of these zones ...
PatrolZoneArray = { PatrolZone1, PatrolZone2 } PatrolZoneArray = { PatrolZone1, PatrolZone2 }
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup ) function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
local Patrol = AI_PATROL_ZONE:New( PatrolZoneArray[math.random( 1, 2 )], 3000, 6000, 400, 600 ) local Patrol = AI_PATROL_ZONE:New( PatrolZoneArray[math.random( 1, 2 )], 3000, 6000, 400, 600 )
Patrol:ManageFuel( 0.2, 60 ) Patrol:ManageFuel( 0.2, 60 )
Patrol:SetControllable( AIGroup ) Patrol:SetControllable( AIGroup )
Patrol:Start() Patrol:Start()
end end
@@ -1,43 +1,43 @@
-- Name: AIB-005 - Patrol AI and Randomize Zones -- Name: AIB-005 - Patrol AI and Randomize Zones
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 Jan 2016 -- Date Created: 10 Jan 2016
-- --
-- # Situation: -- # Situation:
-- --
-- For the red coalition, 2 client slots are foreseen. -- For the red coalition, 2 client slots are foreseen.
-- For those players that have not joined the mission, red AI is spawned. -- For those players that have not joined the mission, red AI is spawned.
-- You'll notice a lot of AI is being spawned, as there are a lot of slots... -- You'll notice a lot of AI is being spawned, as there are a lot of slots...
-- If the SPAWN API :InitCleanUp( secs ) is NOT used, you'll notice that the planes block each other on the runway. -- If the SPAWN API :InitCleanUp( secs ) is NOT used, you'll notice that the planes block each other on the runway.
-- After a short period of time, nothing will move anymore... -- After a short period of time, nothing will move anymore...
-- The :InitCleanUp( seconds ) API of the SPAWN class ensure that any AI that is parked longer than the -- The :InitCleanUp( seconds ) API of the SPAWN class ensure that any AI that is parked longer than the
-- specified amount of seconds, is respawned back at the parking position. -- specified amount of seconds, is respawned back at the parking position.
-- This frees up the other planes departing, and the airbase is in this way decluttered... -- This frees up the other planes departing, and the airbase is in this way decluttered...
-- --
-- # Test cases: -- # Test cases:
-- --
-- 1. Observe the de-cluttering of planes at Krymsk. -- 1. Observe the de-cluttering of planes at Krymsk.
-- 2. Play with the InitCleanUp API of the SPAWN class, extende the amount of seconds to find the optimal setting. -- 2. Play with the InitCleanUp API of the SPAWN class, extende the amount of seconds to find the optimal setting.
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup. -- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ) RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
-- Define the SPAWN object for the red AI plane template. -- Define the SPAWN object for the red AI plane template.
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off. -- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
-- If a blocked plane exists, this red plane will be ReSpawned. -- If a blocked plane exists, this red plane will be ReSpawned.
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 ) RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
-- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter. -- Start the AI_BALANCER, using the SET of red CLIENTs, and the SPAWN object as a parameter.
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn ) RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
-- Create the first polygon zone ... -- Create the first polygon zone ...
PatrolZoneGroup1 = GROUP:FindByName( "PatrolZone1" ) PatrolZoneGroup1 = GROUP:FindByName( "PatrolZone1" )
PatrolZone1 = ZONE_POLYGON:New( "PatrolZone1", PatrolZoneGroup1 ) PatrolZone1 = ZONE_POLYGON:New( "PatrolZone1", PatrolZoneGroup1 )
function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup ) function RU_AI_Balancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup )
local Patrol = AI_PATROL_ZONE:New( PatrolZone1, 3000, 6000, 400, 600 ) local Patrol = AI_PATROL_ZONE:New( PatrolZone1, 3000, 6000, 400, 600 )
Patrol:ManageFuel( 0.2, 60 ) Patrol:ManageFuel( 0.2, 60 )
Patrol:SetControllable( AIGroup ) Patrol:SetControllable( AIGroup )
Patrol:__Start( 5 ) Patrol:__Start( 5 )
end end
@@ -1,163 +1,163 @@
-- Name: AIB-007 - AI Balancers For all airports and both coalitions -- Name: AIB-007 - AI Balancers For all airports and both coalitions
-- Author: Delta99 -- Author: Delta99
-- Date Created: 11 Feb 2017 -- Date Created: 11 Feb 2017
-- --
-- Originally created to solve issues jg7xman (from Moose Slack group) was having in creating -- Originally created to solve issues jg7xman (from Moose Slack group) was having in creating
-- AI_BALANCER across multiple airbases. -- AI_BALANCER across multiple airbases.
-- # Situation: -- # Situation:
-- --
-- AI_BALANCERS created per airbase for both coalitions. Mutiple patrol zones are created -- 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 -- for each side. Each flight that is created by AI_BALANCER will pick a random patrol zone
-- to patrol. -- to patrol.
-- # Test Cases -- # Test Cases
-- --
-- 1. Observe at least 1 flight spawning and taking off from each airbase. -- 1. Observe at least 1 flight spawning and taking off from each airbase.
-- 2. Each flight patrols randomly in one of its sides zones. -- 2. Each flight patrols randomly in one of its sides zones.
-- 3. AI will respawn after killed. -- 3. AI will respawn after killed.
-- 4. Additional client slots are available at Sochi. If players don't take a slot there -- 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. -- 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. -- 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. -- 6. Watch the coalition AI clash and kill each other.
-- Create the Red Patrol Zone Array -- Create the Red Patrol Zone Array
-- This zone array will be used in the AI_BALANCER to randomize the patrol -- This zone array will be used in the AI_BALANCER to randomize the patrol
-- zone that each spawned group will patrol -- zone that each spawned group will patrol
RedPatrolZone = {} RedPatrolZone = {}
RedPatrolZone[1] = ZONE:New( "RedPatrolZone1" ) RedPatrolZone[1] = ZONE:New( "RedPatrolZone1" )
RedPatrolZone[2] = ZONE:New( "RedPatrolZone2" ) RedPatrolZone[2] = ZONE:New( "RedPatrolZone2" )
RedPatrolZone[3] = ZONE:New( "RedPatrolZone3" ) RedPatrolZone[3] = ZONE:New( "RedPatrolZone3" )
RedPatrolZone[4] = ZONE:New( "RedPatrolZone4" ) RedPatrolZone[4] = ZONE:New( "RedPatrolZone4" )
RedPatrolZone[5] = ZONE:New( "RedPatrolZone5" ) RedPatrolZone[5] = ZONE:New( "RedPatrolZone5" )
RedPatrolZone[6] = ZONE:New( "RedPatrolZone6" ) RedPatrolZone[6] = ZONE:New( "RedPatrolZone6" )
-- Russian CAP Aircraft -- Russian CAP Aircraft
-- These are the aircraft created in the mission editor that the AI will spawn -- 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 -- with replacing any CLIENT created aircraft in the mission that a human
-- player does not take. -- player does not take.
RU_PlanesSpawn = {} RU_PlanesSpawn = {}
RU_PlanesSpawn[1] = SPAWN:New( "RU CAP Anapa AB" ):InitCleanUp( 45 ) RU_PlanesSpawn[1] = SPAWN:New( "RU CAP Anapa AB" ):InitCleanUp( 45 )
RU_PlanesSpawn[2] = SPAWN:New( "RU CAP Beslan 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[3] = SPAWN:New( "RU CAP Gelendzhik AB" ):InitCleanUp( 45 )
RU_PlanesSpawn[4] = SPAWN:New( "RU CAP Krasnodar Center 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[5] = SPAWN:New( "RU CAP Krasnodar Pashkovsky AB" ):InitCleanUp( 45 )
RU_PlanesSpawn[6] = SPAWN:New( "RU CAP Krymsk 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[7] = SPAWN:New( "RU CAP Maykop AB" ):InitCleanUp( 45 )
RU_PlanesSpawn[8] = SPAWN:New( "RU CAP Mineralnye Vody 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[9] = SPAWN:New( "RU CAP Mozdok AB" ):InitCleanUp( 45 )
RU_PlanesSpawn[10] = SPAWN:New( "RU CAP Nalchik 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 ) 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) -- 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 -- 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. -- 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". -- 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 -- 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. -- of this can be found on the USA side at Sochi AB.
RU_PlanesClientSet = {} RU_PlanesClientSet = {}
RU_PlanesClientSet[1] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Anapa AB") RU_PlanesClientSet[1] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Anapa AB")
RU_PlanesClientSet[2] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Beslan 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[3] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Gelendzhik AB")
RU_PlanesClientSet[4] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Krasnodar Center 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[5] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Krasnodar Pashkovsky AB")
RU_PlanesClientSet[6] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Krymsk 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[7] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Maykop AB")
RU_PlanesClientSet[8] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Mineralnye Vody 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[9] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Mozdok AB")
RU_PlanesClientSet[10] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Nalchik AB") RU_PlanesClientSet[10] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Nalchik AB")
RU_PlanesClientSet[11] = SET_CLIENT:New():FilterPrefixes("RU CLIENT Novorossiysk 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 -- 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 -- 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() -- 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 -- 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 -- 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 -- table.getn(RedPatrolZone) gets the number of elements in the RedPatrolZone array so that all
-- of them are included to pick randomly. -- of them are included to pick randomly.
RU_AI_Balancer = {} RU_AI_Balancer = {}
for i=1, 11 do for i=1, 11 do
RU_AI_Balancer[i] = AI_BALANCER:New(RU_PlanesClientSet[i], RU_PlanesSpawn[i]) 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. -- 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 -- 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. -- 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. -- So in this case there are essentially 11 OnAfterSpawned functions defined and handled.
local curAIBalancer = RU_AI_Balancer[i] local curAIBalancer = RU_AI_Balancer[i]
function curAIBalancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup ) 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 ) local Patrol = AI_PATROL_ZONE:New( RedPatrolZone[math.random( 1, table.getn(RedPatrolZone))], 1500, 5500, 700, 1400 )
Patrol:ManageFuel( 0.2, 60 ) Patrol:ManageFuel( 0.2, 60 )
Patrol:SetControllable( AIGroup ) Patrol:SetControllable( AIGroup )
Patrol:Start() Patrol:Start()
end end
end end
-- US / Blue side is setup pretty much identically to the RU side above. Same detailed comments -- 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. -- 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 -- 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 -- 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 -- 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 -- this will also allow you to fly lead with AI on your wing or you can fly wing with an AI
-- leader. -- leader.
-- Create the Blue Patrol Zone Array -- Create the Blue Patrol Zone Array
BluePatrolZone = {} BluePatrolZone = {}
BluePatrolZone[1] = ZONE:New( "BluePatrolZone1") BluePatrolZone[1] = ZONE:New( "BluePatrolZone1")
BluePatrolZone[2] = ZONE:New( "BluePatrolZone2") BluePatrolZone[2] = ZONE:New( "BluePatrolZone2")
BluePatrolZone[3] = ZONE:New( "BluePatrolZone3") BluePatrolZone[3] = ZONE:New( "BluePatrolZone3")
BluePatrolZone[4] = ZONE:New( "BluePatrolZone4") BluePatrolZone[4] = ZONE:New( "BluePatrolZone4")
BluePatrolZone[5] = ZONE:New( "BluePatrolZone5") BluePatrolZone[5] = ZONE:New( "BluePatrolZone5")
BluePatrolZone[6] = ZONE:New( "BluePatrolZone6") BluePatrolZone[6] = ZONE:New( "BluePatrolZone6")
--United States CAP Aircraft (these are used as templates for AI) --United States CAP Aircraft (these are used as templates for AI)
US_PlanesSpawn = {} US_PlanesSpawn = {}
US_PlanesSpawn[1] = SPAWN:New( "US CAP Batumi AB" ):InitCleanUp( 45 ) US_PlanesSpawn[1] = SPAWN:New( "US CAP Batumi AB" ):InitCleanUp( 45 )
US_PlanesSpawn[2] = SPAWN:New( "US CAP Gudauta 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[3] = SPAWN:New( "US CAP Kobuleti AB" ):InitCleanUp( 45 )
US_PlanesSpawn[4] = SPAWN:New( "US CAP Kutaisi 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[5] = SPAWN:New( "US CAP Senaki AB" ):InitCleanUp( 45 )
US_PlanesSpawn[6] = SPAWN:New( "US CAP Sochi 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[7] = SPAWN:New( "US CAP Soganlug AB" ):InitCleanUp( 45 )
US_PlanesSpawn[8] = SPAWN:New( "US CAP Sukhumi 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[9] = SPAWN:New( "US CAP Vaziani AB" ):InitCleanUp( 45 )
US_PlanesSpawn[10] = SPAWN:New( "US CAP Tbilisi 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) --United States Client Aircraft (via AI_BALANCER, AI will replace these if no human players are in the slot)
US_PlanesClientSet = {} US_PlanesClientSet = {}
US_PlanesClientSet[1] = SET_CLIENT:New():FilterPrefixes("US CLIENT Batumi AB") US_PlanesClientSet[1] = SET_CLIENT:New():FilterPrefixes("US CLIENT Batumi AB")
US_PlanesClientSet[2] = SET_CLIENT:New():FilterPrefixes("US CLIENT Gudauta 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[3] = SET_CLIENT:New():FilterPrefixes("US CLIENT Kobuleti AB")
US_PlanesClientSet[4] = SET_CLIENT:New():FilterPrefixes("US CLIENT Kutaisi 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[5] = SET_CLIENT:New():FilterPrefixes("US CLIENT Senaki AB")
US_PlanesClientSet[6] = SET_CLIENT:New():FilterPrefixes("US CLIENT Sochi 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[7] = SET_CLIENT:New():FilterPrefixes("US CLIENT Soganlug AB")
US_PlanesClientSet[8] = SET_CLIENT:New():FilterPrefixes("US CLIENT Sukhumi 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[9] = SET_CLIENT:New():FilterPrefixes("US CLIENT Vaziani AB")
US_PlanesClientSet[10] = SET_CLIENT:New():FilterPrefixes("US CLIENT Tbilisi AB") US_PlanesClientSet[10] = SET_CLIENT:New():FilterPrefixes("US CLIENT Tbilisi AB")
US_AI_Balancer = {} US_AI_Balancer = {}
for i=1, 10 do for i=1, 10 do
US_AI_Balancer[i] = AI_BALANCER:New( US_PlanesClientSet[i], US_PlanesSpawn[i] ) US_AI_Balancer[i] = AI_BALANCER:New( US_PlanesClientSet[i], US_PlanesSpawn[i] )
local curAIBalancer = US_AI_Balancer[i] local curAIBalancer = US_AI_Balancer[i]
function curAIBalancer:OnAfterSpawned( SetGroup, From, Event, To, AIGroup ) 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 ) local Patrol = AI_PATROL_ZONE:New( BluePatrolZone[math.random( 1, table.getn(BluePatrolZone))], 1500, 5500, 700, 1400 )
Patrol:ManageFuel( 0.2, 60 ) Patrol:ManageFuel( 0.2, 60 )
Patrol:SetControllable( AIGroup ) Patrol:SetControllable( AIGroup )
Patrol:Start() Patrol:Start()
end end
end end
@@ -1,20 +1,20 @@
--- ---
-- Name: AIC-APC-000 - APC -- Name: AIC-APC-000 - APC
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 26 Mar 2018 -- Date Created: 26 Mar 2018
-- Date Checked: 01 Jan 2021 -- Date Checked: 01 Jan 2021
-- Working example -- Working example
-- --
-- A demonstration of the AI_CARGO_APC class. -- A demonstration of the AI_CARGO_APC class.
-- This simple example transports Infantry. -- This simple example transports Infantry.
-- The CARGO_GROUP objects are declared within the mission script. -- The CARGO_GROUP objects are declared within the mission script.
local Infantry1 = CARGO_GROUP:New( GROUP:FindByName( "Infantry1" ), "Infantry", "Infantry1", 500, 25 ) local Infantry1 = CARGO_GROUP:New( GROUP:FindByName( "Infantry1" ), "Infantry", "Infantry1", 500, 25 )
local Infantry2 = CARGO_GROUP:New( GROUP:FindByName( "Infantry2" ), "Infantry", "Infantry2", 500, 25 ) local Infantry2 = CARGO_GROUP:New( GROUP:FindByName( "Infantry2" ), "Infantry", "Infantry2", 500, 25 )
local Infantry3 = CARGO_GROUP:New( GROUP:FindByName( "Infantry3" ), "Infantry", "Infantry3", 500, 25 ) local Infantry3 = CARGO_GROUP:New( GROUP:FindByName( "Infantry3" ), "Infantry", "Infantry3", 500, 25 )
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local APC = GROUP:FindByName( "APC" ) local APC = GROUP:FindByName( "APC" )
AICargoAPC = AI_CARGO_APC:New( APC, InfantryCargoSet, 500 ) AICargoAPC = AI_CARGO_APC:New( APC, InfantryCargoSet, 500 )
AICargoAPC:__Pickup( 5 ) AICargoAPC:__Pickup( 5 )
@@ -1,18 +1,18 @@
--- ---
-- Name: AIC-APC-001 - APC with Cargo declared in ME -- Name: AIC-APC-001 - APC with Cargo declared in ME
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 26 Mar 2018 -- Date Created: 26 Mar 2018
-- Date Checked: 01 Dec 2021 -- Date Checked: 01 Dec 2021
-- Changed Cargo auto tag from ~ to #, working example -- Changed Cargo auto tag from ~ to #, working example
-- --
-- A demonstration of the AI_CARGO_APC class. -- A demonstration of the AI_CARGO_APC class.
-- This simple example transports Infantry. -- This simple example transports Infantry.
-- The cargo is declared with the #CARGO tag in the mission editor. -- The cargo is declared with the #CARGO tag in the mission editor.
-- So, within the mission, the infantry groups have the name: -- So, within the mission, the infantry groups have the name:
-- e.g. Infantry1#CARGO(T=Infantry,RR=2000,NR=25) -- e.g. Infantry1#CARGO(T=Infantry,RR=2000,NR=25)
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local APC = GROUP:FindByName( "APC" ) local APC = GROUP:FindByName( "APC" )
AICargoAPC = AI_CARGO_APC:New( APC, InfantryCargoSet, 500 ) AICargoAPC = AI_CARGO_APC:New( APC, InfantryCargoSet, 500 )
AICargoAPC:__Pickup( 5 ) AICargoAPC:__Pickup( 5 )
@@ -1,12 +1,12 @@
--- ---
-- Name: AIC-APC-002 - APC Move by Game Master -- Name: AIC-APC-002 - APC Move by Game Master
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 26 Mar 2018 -- Date Created: 26 Mar 2018
-- Date Checked: 01 Jan 2021. Changed ~ to # in ME Group Names. Not sure how this is supposed to work for the Game Master -- Date Checked: 01 Jan 2021. Changed ~ to # in ME Group Names. Not sure how this is supposed to work for the Game Master
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local CargoCarrier = GROUP:FindByName( "Carrier" ) local CargoCarrier = GROUP:FindByName( "Carrier" )
CargoTroops = AI_CARGO_APC:New( CargoCarrier, InfantryCargoSet, 500 ) CargoTroops = AI_CARGO_APC:New( CargoCarrier, InfantryCargoSet, 500 )
@@ -1,14 +1,14 @@
--- ---
-- Name: AIC-APC-003 - APC Troops and Equipment -- Name: AIC-APC-003 - APC Troops and Equipment
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 07 Apr 2018 -- Date Created: 07 Apr 2018
-- Date Checked: 01 Jan 2021 -- Date Checked: 01 Jan 2021
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local CargoCarrier = GROUP:FindByName( "Carrier" ) local CargoCarrier = GROUP:FindByName( "Carrier" )
CargoTroops = AI_CARGO_APC:New( CargoCarrier, InfantryCargoSet, 350 ) CargoTroops = AI_CARGO_APC:New( CargoCarrier, InfantryCargoSet, 350 )
@@ -1,29 +1,29 @@
--- ---
-- Name: AIC-APC-004 - APC Pickup -- Name: AIC-APC-004 - APC Pickup
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 23 Apr 2018 -- Date Created: 23 Apr 2018
-- Date Checked: 01 Jan 2021, working example, changed Deploy to async call -- Date Checked: 01 Jan 2021, working example, changed Deploy to async call
BASE:TraceClass("AI_CARGO_APC") BASE:TraceClass("AI_CARGO_APC")
BASE:TraceOn() BASE:TraceOn()
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local APC = GROUP:FindByName( "APC" ) local APC = GROUP:FindByName( "APC" )
Cargo_APC = AI_CARGO_APC:New( APC, InfantryCargoSet, 350 ) Cargo_APC = AI_CARGO_APC:New( APC, InfantryCargoSet, 350 )
Cargo_APC:__Pickup( 1, ZONE:New( "Pickup" ):GetCoordinate() ) Cargo_APC:__Pickup( 1, ZONE:New( "Pickup" ):GetCoordinate() )
--- Loaded Handler OnAfter for Cargo_APC --- Loaded Handler OnAfter for Cargo_APC
-- @function [parent=#Cargo_APC] OnAfterLoaded -- @function [parent=#Cargo_APC] OnAfterLoaded
-- @param #Cargo_APC self -- @param #Cargo_APC self
-- @param Wrapper.Group#GROUP APC -- @param Wrapper.Group#GROUP APC
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
-- @param #string To -- @param #string To
function Cargo_APC:OnAfterLoaded( APC, From, Event, To ) function Cargo_APC:OnAfterLoaded( APC, From, Event, To )
Cargo_APC:__Deploy( 1, ZONE:New( "Deploy" ):GetCoordinate() ) Cargo_APC:__Deploy( 1, ZONE:New( "Deploy" ):GetCoordinate() )
end end
@@ -1,29 +1,29 @@
--- ---
-- 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 -- 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.
-- --
BASE:TraceClass("AI_CARGO_APC") BASE:TraceClass("AI_CARGO_APC")
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local CargoCarrier = GROUP:FindByName( "Carrier" ) local CargoCarrier = GROUP:FindByName( "Carrier" )
CargoTroops = AI_CARGO_APC:New( CargoCarrier, InfantryCargoSet, 500 ) CargoTroops = AI_CARGO_APC:New( CargoCarrier, InfantryCargoSet, 500 )
function CargoTroops:OnAfterDestroyed( CargoCarrier ) function CargoTroops:OnAfterDestroyed( CargoCarrier )
CargoTroops:F( { Destroyed = CargoCarrier } ) CargoTroops:F( { Destroyed = CargoCarrier } )
-- The coordinate is passed where the carrier is destroyed. -- The coordinate is passed where the carrier is destroyed.
local NewCarrierGroup = self:FindCarrier( CargoCarrier:GetCoordinate(), 1000 ) -- which returns one Carrier GROUP object or nil. local NewCarrierGroup = self:FindCarrier( CargoCarrier:GetCoordinate(), 1000 ) -- which returns one Carrier GROUP object or nil.
if NewCarrierGroup then if NewCarrierGroup then
self:SetCarrier( NewCarrierGroup ) self:SetCarrier( NewCarrierGroup )
self:__Pickup(1,ZONE:New("Pickup Zone"):GetCoordinate(),30) self:__Pickup(1,ZONE:New("Pickup Zone"):GetCoordinate(),30)
end end
end end
@@ -1,13 +1,13 @@
--- ---
-- 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
-- --
local InfantrySet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantrySet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local APC = GROUP:FindByName( "APC" ) local APC = GROUP:FindByName( "APC" )
Cargo_APC = AI_CARGO_APC:New( APC, InfantrySet, 250 ) Cargo_APC = AI_CARGO_APC:New( APC, InfantrySet, 250 )
Cargo_APC:__Pickup( 2 ) Cargo_APC:__Pickup( 2 )
@@ -1,42 +1,42 @@
--- ---
-- Name: AIC-APC-004 - APC Pickup -- Name: AIC-APC-004 - APC Pickup
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 23 Apr 2018 -- Date Created: 23 Apr 2018
-- Date Checked: 01 Jan 2021 -- Date Checked: 01 Jan 2021
local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local InfantryCargoSet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
Cargo_APC = {} Cargo_APC = {}
for i = 1, 4 do for i = 1, 4 do
Cargo_APC[i] = AI_CARGO_APC:New( GROUP:FindByName( "APC"..i ), InfantryCargoSet, 350 ) Cargo_APC[i] = AI_CARGO_APC:New( GROUP:FindByName( "APC"..i ), InfantryCargoSet, 350 )
--- Loaded Handler OnAfter for Cargo_APC --- Loaded Handler OnAfter for Cargo_APC
-- @function [parent=#Cargo_APC] OnAfterLoaded -- @function [parent=#Cargo_APC] OnAfterLoaded
-- @param #Cargo_APC self -- @param #Cargo_APC self
-- @param Wrapper.Group#GROUP APC -- @param Wrapper.Group#GROUP APC
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
-- @param #string To -- @param #string To
Cargo_APC[i].OnAfterLoaded = function( self, APC, From, Event, To ) Cargo_APC[i].OnAfterLoaded = function( self, APC, From, Event, To )
self:__Deploy( 5, ZONE:New( "Deploy" ):GetRandomCoordinate( 300, 500 ) ) self:__Deploy( 5, ZONE:New( "Deploy" ):GetRandomCoordinate( 300, 500 ) )
end end
--- Unloaded Handler OnAfter for Cargo_APC --- Unloaded Handler OnAfter for Cargo_APC
-- @function [parent=#Cargo_APC] OnAfterUnloaded -- @function [parent=#Cargo_APC] OnAfterUnloaded
-- @param #Cargo_APC self -- @param #Cargo_APC self
-- @param Wrapper.Group#GROUP APC -- @param Wrapper.Group#GROUP APC
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
-- @param #string To -- @param #string To
Cargo_APC[i].OnAfterUnloaded = function( self, APC, From, Event, To ) Cargo_APC[i].OnAfterUnloaded = function( self, APC, From, Event, To )
self:Pickup( ZONE:New( "Pickup" ):GetRandomCoordinate( 50, 70 ) ) self:Pickup( ZONE:New( "Pickup" ):GetRandomCoordinate( 50, 70 ) )
end end
Cargo_APC[i]:__Pickup( i * 30, ZONE:New( "Pickup" ):GetRandomCoordinate( 50, 70 ) ) Cargo_APC[i]:__Pickup( i * 30, ZONE:New( "Pickup" ):GetRandomCoordinate( 50, 70 ) )
end end
File diff suppressed because it is too large Load Diff
@@ -1,37 +1,37 @@
--- ---
-- Name: AIC-PLN-000 - Airplane -- Name: AIC-PLN-000 - Airplane
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 14 Apr 2018 -- Date Created: 14 Apr 2018
-- Date Checked: 01 Jan 2021 -- Date Checked: 01 Jan 2021
-- Update to latest Moose, working -- Update to latest Moose, working
-- --
VehicleCargoSet = SET_CARGO:New():FilterTypes( "Vehicles" ):FilterStart() VehicleCargoSet = SET_CARGO:New():FilterTypes( "Vehicles" ):FilterStart()
for i = 1, 10 do for i = 1, 10 do
local WorkerGroup = GROUP:FindByName( string.format( "Vehicle #%03d", i ) ) local WorkerGroup = GROUP:FindByName( string.format( "Vehicle #%03d", i ) )
local WorkersCargo = CARGO_GROUP:New( WorkerGroup, "Vehicles", string.format( "Vehicle %d", i ), 5000, 35 ) local WorkersCargo = CARGO_GROUP:New( WorkerGroup, "Vehicles", string.format( "Vehicle %d", i ), 5000, 35 )
WorkersCargo:SetWeight(10000) WorkersCargo:SetWeight(10000)
end end
local Airplane = GROUP:FindByName( "Airplane" ) local Airplane = GROUP:FindByName( "Airplane" )
CargoAirplane = AI_CARGO_AIRPLANE:New( Airplane, VehicleCargoSet ) CargoAirplane = AI_CARGO_AIRPLANE:New( Airplane, VehicleCargoSet )
PickupAirbase = AIRBASE:FindByName( AIRBASE.Caucasus.Kobuleti ) PickupAirbase = AIRBASE:FindByName( AIRBASE.Caucasus.Kobuleti )
DeployAirbases = { AIRBASE:FindByName( AIRBASE.Caucasus.Batumi ), AIRBASE:FindByName( AIRBASE.Caucasus.Gudauta ) } DeployAirbases = { AIRBASE:FindByName( AIRBASE.Caucasus.Batumi ), AIRBASE:FindByName( AIRBASE.Caucasus.Gudauta ) }
CargoAirplane:Pickup( PickupAirbase:GetCoordinate() ) CargoAirplane:Pickup( PickupAirbase:GetCoordinate() )
function CargoAirplane:OnAfterLoaded( Airplane, From, Event, To, Cargo ) function CargoAirplane:OnAfterLoaded( Airplane, From, Event, To, Cargo )
CargoAirplane:__Deploy(0.2, DeployAirbases[math.random(#DeployAirbases)]:GetCoordinate(), math.random( 500, 750 ) ) CargoAirplane:__Deploy(0.2, DeployAirbases[math.random(#DeployAirbases)]:GetCoordinate(), math.random( 500, 750 ) )
end end
--function CargoAirplane:OnAfterUnloaded( Airplane, From, Event, To, Cargo ) --function CargoAirplane:OnAfterUnloaded( Airplane, From, Event, To, Cargo )
function CargoAirplane:OnAfterDeployed(Airplane, From, Event, To, DeployZone) function CargoAirplane:OnAfterDeployed(Airplane, From, Event, To, DeployZone)
CargoAirplane:__Pickup(0.2, PickupAirbase:GetCoordinate(), math.random( 500, 750 ) ) CargoAirplane:__Pickup(0.2, PickupAirbase:GetCoordinate(), math.random( 500, 750 ) )
end end
@@ -1,13 +1,13 @@
--- ---
-- Name: AID-CGO-100 - APC - Pickup and Deploy -- Name: AID-CGO-100 - APC - Pickup and Deploy
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
@@ -1,17 +1,17 @@
--- ---
-- Name: AID-CGO-110 - APC - Deploy at Group Zones -- Name: AID-CGO-110 - APC - Deploy at Group Zones
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
local ZoneGroup = GROUP:FindByName( "Deploy Group") local ZoneGroup = GROUP:FindByName( "Deploy Group")
local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 ) local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 )
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
@@ -1,13 +1,13 @@
--- ---
-- Name: AID-CGO-100 - APC - Pickup and Deploy -- Name: AID-CGO-100 - APC - Pickup and Deploy
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
@@ -1,172 +1,172 @@
--- ---
-- Name: AID-CGO-100 - APC - Pickup and Deploy -- Name: AID-CGO-100 - APC - Pickup and Deploy
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local SetPickupZones = SET_ZONE:New():FilterPrefixes( "Pickup" ):FilterStart() local SetPickupZones = SET_ZONE:New():FilterPrefixes( "Pickup" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, SetPickupZones, SetDeployZones ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, SetPickupZones, SetDeployZones )
AICargoDispatcherAPC:SetHomeZone( ZONE:New("Home") ) AICargoDispatcherAPC:SetHomeZone( ZONE:New("Home") )
--- Pickup Handler OnAfter for AICargoDispatcherAPC. --- Pickup Handler OnAfter for AICargoDispatcherAPC.
-- Use this event handler to tailor the event when a CarrierGroup is routed towards a new pickup Coordinate and a specified Speed. -- Use this event handler to tailor the event when a CarrierGroup is routed towards a new pickup Coordinate and a specified Speed.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @param #AICargoDispatcherAPC self -- @param #AICargoDispatcherAPC self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Point#COORDINATE Coordinate The coordinate of the pickup location. -- @param Core.Point#COORDINATE Coordinate The coordinate of the pickup location.
-- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the pickup Coordinate. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the pickup Coordinate.
-- @param #number Height Height in meters to move to the pickup coordinate. -- @param #number Height Height in meters to move to the pickup coordinate.
-- @param Core.Zone#ZONE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone. -- @param Core.Zone#ZONE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone.
function AICargoDispatcherAPC:OnAfterPickup( From, Event, To, CarrierGroup, Coordinate, Speed, Height, PickupZone ) function AICargoDispatcherAPC:OnAfterPickup( From, Event, To, CarrierGroup, Coordinate, Speed, Height, PickupZone )
-- Write here your own code. -- Write here your own code.
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is picking up cargo at airbase " .. PickupZone:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is picking up cargo at airbase " .. PickupZone:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- Load Handler OnAfter for AICargoDispatcherAPC. --- Load Handler OnAfter for AICargoDispatcherAPC.
-- Use this event handler to tailor the event when a CarrierGroup has initiated the loading or boarding of cargo within reporting or near range. -- Use this event handler to tailor the event when a CarrierGroup has initiated the loading or boarding of cargo within reporting or near range.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @param #AICargoDispatcherAPC self -- @param #AICargoDispatcherAPC self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone. -- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone.
function AICargoDispatcherAPC:OnAfterLoad( From, Event, To, CarrierGroup, PickupZone ) function AICargoDispatcherAPC:OnAfterLoad( From, Event, To, CarrierGroup, PickupZone )
-- Write here your own code. -- Write here your own code.
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is loading cargo at airbase " .. PickupZone:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is loading cargo at airbase " .. PickupZone:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- PickedUp Handler OnAfter for AICargoDispatcherAPC. --- PickedUp Handler OnAfter for AICargoDispatcherAPC.
-- Use this event handler to tailor the event when a carrier has picked up all cargo objects into the CarrierGroup. -- Use this event handler to tailor the event when a carrier has picked up all cargo objects into the CarrierGroup.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @param #AICargoDispatcherAPC self -- @param #AICargoDispatcherAPC self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone. -- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone.
function AICargoDispatcherAPC:OnAfterPickedUp( From, Event, To, CarrierGroup, PickupZone ) function AICargoDispatcherAPC:OnAfterPickedUp( From, Event, To, CarrierGroup, PickupZone )
-- Write here your own code. -- Write here your own code.
-- Write here your own code. -- Write here your own code.
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " has loaded all cargo at airbase " .. PickupZone:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " has loaded all cargo at airbase " .. PickupZone:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- Deploy Handler OnAfter for AICargoDispatcherAPC. --- Deploy Handler OnAfter for AICargoDispatcherAPC.
-- Use this event handler to tailor the event when a CarrierGroup is routed to a deploy coordinate, to Unload all cargo objects in each CarrierUnit. -- Use this event handler to tailor the event when a CarrierGroup is routed to a deploy coordinate, to Unload all cargo objects in each CarrierUnit.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @function OnAfterDeploy -- @function OnAfterDeploy
-- @param #AICargoDispatcherAPC self -- @param #AICargoDispatcherAPC self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Point#COORDINATE Coordinate The deploy coordinate. -- @param Core.Point#COORDINATE Coordinate The deploy coordinate.
-- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the deploy Coordinate. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the deploy Coordinate.
-- @param #number Height Height in meters to move to the deploy coordinate. -- @param #number Height Height in meters to move to the deploy coordinate.
-- @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 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 AICargoDispatcherAPC:OnAfterDeploy( From, Event, To, CarrierGroup, Coordinate, Speed, Height, DeployZone ) function AICargoDispatcherAPC:OnAfterDeploy( From, Event, To, CarrierGroup, Coordinate, Speed, Height, DeployZone )
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is starting deployment of all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is starting deployment of all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- Unloaded Handler OnAfter for AICargoDispatcherAPC. --- Unloaded Handler OnAfter for AICargoDispatcherAPC.
-- Use this event handler to tailor the event when a CarrierUnit of a CarrierGroup has unloaded a cargo object. -- Use this event handler to tailor the event when a CarrierUnit of a CarrierGroup has unloaded a cargo object.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- Note that if more cargo objects were unloading or unboarding from the CarrierUnit, then this event can be fired multiple times for each different Cargo/CarrierUnit. -- Note that if more cargo objects were unloading or unboarding from the CarrierUnit, then this event can be fired multiple times for each different Cargo/CarrierUnit.
-- A CarrierUnit can be part of the larger CarrierGroup. -- A CarrierUnit can be part of the larger CarrierGroup.
-- @function OnAfterUnloaded -- @function OnAfterUnloaded
-- @param #AICargoDispatcherAPC self -- @param #AICargoDispatcherAPC self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Cargo.Cargo#CARGO Cargo The cargo object. -- @param Cargo.Cargo#CARGO Cargo The cargo object.
-- @param Wrapper.Unit#UNIT CarrierUnit The carrier unit that is executing the cargo unloading operation. -- @param Wrapper.Unit#UNIT CarrierUnit The carrier unit that is executing the cargo unloading operation.
-- @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 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 AICargoDispatcherAPC:OnAfterUnloaded( From, Event, To, CarrierGroup, Cargo, CarrierUnit, DeployZone ) function AICargoDispatcherAPC:OnAfterUnloaded( From, Event, To, CarrierGroup, Cargo, CarrierUnit, DeployZone )
local CargoGroup = Cargo:GetObject() -- Wrapper.Group#GROUP local CargoGroup = Cargo:GetObject() -- Wrapper.Group#GROUP
-- Get the name of the DeployZone -- Get the name of the DeployZone
local DeployZoneName = DeployZone:GetName() local DeployZoneName = DeployZone:GetName()
local DeployBuildingNames = { local DeployBuildingNames = {
["Deploy A"] = "Building A", ["Deploy A"] = "Building A",
} }
-- Now board the infantry into the respective warehouse building. -- Now board the infantry into the respective warehouse building.
if DeployZoneName then if DeployZoneName then
local Building = STATIC:FindByName( DeployBuildingNames[DeployZoneName] ) local Building = STATIC:FindByName( DeployBuildingNames[DeployZoneName] )
Cargo:__Board( 5, Building, 25 ) Cargo:__Board( 5, Building, 25 )
end end
MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. ", Unit " .. CarrierUnit:GetName() .. " has unloaded cargo " .. Cargo:GetName() .. " in zone " .. DeployZone:GetName() .. " and cargo is moving to building " .. DeployBuildingNames[DeployZoneName], MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. ", Unit " .. CarrierUnit:GetName() .. " has unloaded cargo " .. Cargo:GetName() .. " in zone " .. DeployZone:GetName() .. " and cargo is moving to building " .. DeployBuildingNames[DeployZoneName], MESSAGE.Type.Information ):ToAll()
end end
--- Deployed Handler OnAfter for AICargoDispatcherAPC. --- Deployed Handler OnAfter for AICargoDispatcherAPC.
-- Use this event handler to tailor the event when a carrier has deployed all cargo objects from the CarrierGroup. -- Use this event handler to tailor the event when a carrier has deployed all cargo objects from the CarrierGroup.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @function OnAfterDeployed -- @function OnAfterDeployed
-- @param #AICargoDispatcherAPC self -- @param #AICargoDispatcherAPC self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @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 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 AICargoDispatcherAPC:OnAfterDeployed( From, Event, To, CarrierGroup, DeployZone ) function AICargoDispatcherAPC:OnAfterDeployed( From, Event, To, CarrierGroup, DeployZone )
MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- Home event handler OnAfter for AICargoDispatcherAPC. --- Home event handler OnAfter for AICargoDispatcherAPC.
-- Use this event handler to tailor the event when a CarrierGroup is returning to the HomeZone, after it has deployed all cargo objects from the CarrierGroup. -- Use this event handler to tailor the event when a CarrierGroup is returning to the HomeZone, after it has deployed all cargo objects from the CarrierGroup.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- If there is no HomeZone is specified, the CarrierGroup will stay at the current location after having deployed all cargo. -- If there is no HomeZone is specified, the CarrierGroup will stay at the current location after having deployed all cargo.
-- @param #AICargoDispatcherAPC self -- @param #AICargoDispatcherAPC self
-- @param #string From A string that contains the "*from state name*" when the event was triggered. -- @param #string From A string that contains the "*from state name*" when the event was triggered.
-- @param #string Event A string that contains the "*event name*" when the event was triggered. -- @param #string Event A string that contains the "*event name*" when the event was triggered.
-- @param #string To A string that contains the "*to state name*" when the event was triggered. -- @param #string To A string that contains the "*to state name*" when the event was triggered.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Point#COORDINATE Coordinate The home coordinate the Carrier will arrive and stop it's activities. -- @param Core.Point#COORDINATE Coordinate The home coordinate the Carrier will arrive and stop it's activities.
-- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the home Coordinate. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the home Coordinate.
-- @param #number Height Height in meters to move to the home coordinate. -- @param #number Height Height in meters to move to the home coordinate.
-- @param Core.Zone#ZONE HomeZone The zone wherein the carrier will return when all cargo has been transported. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE. -- @param Core.Zone#ZONE HomeZone The zone wherein the carrier will return when all cargo has been transported. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
function AICargoDispatcherAPC:OnAfterHome( From, Event, To, CarrierGroup, Coordinate, Speed, Height, HomeZone ) function AICargoDispatcherAPC:OnAfterHome( From, Event, To, CarrierGroup, Coordinate, Speed, Height, HomeZone )
MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo and going home to zone " .. HomeZone:GetName(), MESSAGE.Type.Detailed ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo and going home to zone " .. HomeZone:GetName(), MESSAGE.Type.Detailed ):ToAll()
end end
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
@@ -1,21 +1,21 @@
--- ---
-- Name: AID-CGO-150 - APC - Manpads against enemy helicopters -- Name: AID-CGO-150 - APC - Manpads against enemy helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 17 May 2018 -- Date Created: 17 May 2018
-- --
-- This simulates manpads to fight against enemy helicpters. -- This simulates manpads to fight against enemy helicpters.
-- So when the enemy helicopters are within combat range, the manpads will unload and will attack the helos. -- So when the enemy helicopters are within combat range, the manpads will unload and will attack the helos.
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
local ZoneGroup = GROUP:FindByName( "Deploy Group") local ZoneGroup = GROUP:FindByName( "Deploy Group")
local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 ) local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 )
-- For the manpads to unload on time, a range of 8000 meters is appropriate. -- For the manpads to unload on time, a range of 8000 meters is appropriate.
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 8000 ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 8000 )
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
@@ -1,26 +1,26 @@
--- ---
-- Name: AID-CGO-151 - APC - Manpads and not defending the carrier -- Name: AID-CGO-151 - APC - Manpads and not defending the carrier
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 08 Sep 2018 -- Date Created: 08 Sep 2018
-- --
-- This simulates manpads to board APCs and won't disembark to defend the enemy carrier when enemies are nearby.. -- This simulates manpads to board APCs and won't disembark to defend the enemy carrier when enemies are nearby..
-- So when the enemy helicopters are within combat range, the manpads will NOT unload and will NOT attack the helos. -- So when the enemy helicopters are within combat range, the manpads will NOT unload and will NOT attack the helos.
-- This is because the combat range was not provided, and thus is 0. -- This is because the combat range was not provided, and thus is 0.
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
local ZoneGroup = GROUP:FindByName( "Deploy Group") local ZoneGroup = GROUP:FindByName( "Deploy Group")
local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 ) local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 )
-- For the manpads to unload on time, a range of 8000 meters is appropriate. -- For the manpads to unload on time, a range of 8000 meters is appropriate.
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones )
-- This will work too, so the combat range can be provided, but must be 0. -- This will work too, so the combat range can be provided, but must be 0.
--AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 0 ) --AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 0 )
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
@@ -1,28 +1,28 @@
--- ---
-- Name: AID-CGO-152 - APC - Defending the carrier -- Name: AID-CGO-152 - APC - Defending the carrier
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 18 Oct 2018 -- Date Created: 18 Oct 2018
-- --
-- This simulates infantry to board APCs and will disembark to defend the enemy carrier when enemies are nearby.. -- This simulates infantry to board APCs and will disembark to defend the enemy carrier when enemies are nearby..
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
local ZoneGroup = GROUP:FindByName( "Deploy Group") local ZoneGroup = GROUP:FindByName( "Deploy Group")
local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 ) local DeployZone = ZONE_GROUP:New( "Deploy Group", ZoneGroup, 200 )
-- For the manpads to unload on time, a range of 8000 meters is appropriate. -- For the manpads to unload on time, a range of 8000 meters is appropriate.
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 800 ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 800 )
-- This will work too, so the combat range can be provided, but must be 0. -- This will work too, so the combat range can be provided, but must be 0.
--AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 0 ) --AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 0 )
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
Sound = USERSOUND:New( "Sounds/BOS05ej9982.ogg" ) Sound = USERSOUND:New( "Sounds/BOS05ej9982.ogg" )
Sound:ToAll() Sound:ToAll()
@@ -1,43 +1,43 @@
--- ---
-- Name: AID-CGO-160 - APC - Spawning of cargo objects -- Name: AID-CGO-160 - APC - Spawning of cargo objects
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 11 Sep 2018 -- Date Created: 11 Sep 2018
-- --
-- In this demo cargo objects are spawned at random locations within the battle field. -- In this demo cargo objects are spawned at random locations within the battle field.
-- --
-- This simulates manpads to board APCs and won't disembark to defend the enemy carrier when enemies are nearby.. -- This simulates manpads to board APCs and won't disembark to defend the enemy carrier when enemies are nearby..
-- So when the enemy helicopters are within combat range, the manpads will NOT unload and will NOT attack the helos. -- So when the enemy helicopters are within combat range, the manpads will NOT unload and will NOT attack the helos.
-- This is because the combat range was not provided, and thus is 0. -- This is because the combat range was not provided, and thus is 0.
-- Spawn some random cargo in a zone. -- Spawn some random cargo in a zone.
SpawnInfantry = SPAWN:New( "Infantry" ) SpawnInfantry = SPAWN:New( "Infantry" )
:InitLimit( 30, 100 ) :InitLimit( 30, 100 )
:InitRandomizePosition(true,500,100) :InitRandomizePosition(true,500,100)
:InitRandomizeZones( { ZONE:New( "SpawnZone" ) } ) :InitRandomizeZones( { ZONE:New( "SpawnZone" ) } )
:OnSpawnGroup( :OnSpawnGroup(
function( SpawnGroup ) function( SpawnGroup )
CARGO_GROUP:New(SpawnGroup,"InfantryType",SpawnGroup:GetName(),150,10) CARGO_GROUP:New(SpawnGroup,"InfantryType",SpawnGroup:GetName(),150,10)
end end
) )
:SpawnScheduled( 30, 0 ) :SpawnScheduled( 30, 0 )
local CargoInfantrySet = SET_CARGO:New():FilterTypes( "InfantryType" ):FilterStart() local CargoInfantrySet = SET_CARGO:New():FilterTypes( "InfantryType" ):FilterStart()
local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart() local SetAPC = SET_GROUP:New():FilterPrefixes( "APC" ):FilterStart()
local PickupZonesSet = SET_ZONE:New():FilterPrefixes( "Spawn" ):FilterOnce() local PickupZonesSet = SET_ZONE:New():FilterPrefixes( "Spawn" ):FilterOnce()
local DeployZonesSet = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterOnce() local DeployZonesSet = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterOnce()
-- For the manpads to unload on time, a range of 8000 meters is appropriate. -- For the manpads to unload on time, a range of 8000 meters is appropriate.
AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, CargoInfantrySet, PickupZonesSet, DeployZonesSet ) AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, CargoInfantrySet, PickupZonesSet, DeployZonesSet )
-- This will work too, so the combat range can be provided, but must be 0. -- This will work too, so the combat range can be provided, but must be 0.
--AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 0 ) --AICargoDispatcherAPC = AI_CARGO_DISPATCHER_APC:New( SetAPC, SetCargoInfantry, nil, SetDeployZones, 0 )
-- Now also make the carriers spawn in. -- Now also make the carriers spawn in.
CarrierSpawn = SPAWN:New( "APC" ):InitLimit( 10, 10 ):InitRandomizePosition( true, 200, 50 ):SpawnScheduled( 10, 0 ) CarrierSpawn = SPAWN:New( "APC" ):InitLimit( 10, 10 ):InitRandomizePosition( true, 200, 50 ):SpawnScheduled( 10, 0 )
AICargoDispatcherAPC:Start() AICargoDispatcherAPC:Start()
@@ -1,13 +1,13 @@
--- ---
-- Name: AID-CGO-200 - Helicopter - Pickup and Deploy -- Name: AID-CGO-200 - Helicopter - Pickup and Deploy
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()
@@ -1,14 +1,14 @@
--- ---
-- Name: AID-CGO-201 - Helicopter - DeployZone Orbit -- Name: AID-CGO-201 - Helicopter - DeployZone Orbit
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) ) AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) )
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()
@@ -1,18 +1,18 @@
--- ---
-- Name: AID-CGO-202 - Helicopter - Spawning of Helicopters -- Name: AID-CGO-202 - Helicopter - Spawning of Helicopters
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 19 May 2018 -- Date Created: 19 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()
HelicopterSpawn = SPAWN HelicopterSpawn = SPAWN
:New( "Helicopter" ) :New( "Helicopter" )
:InitLimit( 4, 20 ) :InitLimit( 4, 20 )
:InitLateActivated( true ) :InitLateActivated( true )
:SpawnScheduled( 20, 0.5 ) :SpawnScheduled( 20, 0.5 )
@@ -1,30 +1,30 @@
--- ---
-- Name: AID-CGO-203 - Helicopter - Spawning of Infantry -- Name: AID-CGO-203 - Helicopter - Spawning of Infantry
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 19 May 2018 -- Date Created: 19 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()
HelicopterSpawn = SPAWN HelicopterSpawn = SPAWN
:New( "Helicopter" ) :New( "Helicopter" )
:InitLimit( 4, 20 ) :InitLimit( 4, 20 )
:InitLateActivated( true ) :InitLateActivated( true )
:SpawnScheduled( 20, 0.5 ) :SpawnScheduled( 20, 0.5 )
InfantrySpawn = SPAWN InfantrySpawn = SPAWN
:New( "Infantry" ) :New( "Infantry" )
:InitLimit( 20, 60 ) :InitLimit( 20, 60 )
:OnSpawnGroup( :OnSpawnGroup(
function( SpawnGroup ) function( SpawnGroup )
CARGO_GROUP:New( SpawnGroup, "Infantry", SpawnGroup:GetName(), 500, 25 ) CARGO_GROUP:New( SpawnGroup, "Infantry", SpawnGroup:GetName(), 500, 25 )
end end
) )
:InitRandomizePosition( true, 1000, 250 ) :InitRandomizePosition( true, 1000, 250 )
:SpawnScheduled( 10, 0.5 ) :SpawnScheduled( 10, 0.5 )
@@ -1,13 +1,13 @@
--- ---
-- Name: AID-CGO-210 - Helicopter - Home -- Name: AID-CGO-210 - Helicopter - Home
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) ) AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) )
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()
@@ -1,16 +1,16 @@
--- ---
-- Name: AID-CGO-220 - Helicopter - Randomize Coordinates -- Name: AID-CGO-220 - Helicopter - Randomize Coordinates
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 10 May 2018 -- Date Created: 10 May 2018
-- --
-- Demonstrates the way how the pickup and deploy locations can be randomized. -- Demonstrates the way how the pickup and deploy locations can be randomized.
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()
AICargoDispatcherHelicopter:SetPickupRadius( 100, 50 ) AICargoDispatcherHelicopter:SetPickupRadius( 100, 50 )
AICargoDispatcherHelicopter:SetDeployRadius( 100, 50 ) AICargoDispatcherHelicopter:SetDeployRadius( 100, 50 )
@@ -1,18 +1,18 @@
--- ---
-- Name: AID-CGO-230 - Helicopter - DeployZone Probability -- Name: AID-CGO-230 - Helicopter - DeployZone Probability
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 May 2018 -- Date Created: 15 May 2018
-- --
-- Demonstrates the way how the deploy locations can be set to a specific probability distribution. -- Demonstrates the way how the deploy locations can be set to a specific probability distribution.
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, nil, SetDeployZones )
AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) ) AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) )
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()
SetDeployZones:SetZoneProbability( "Deploy A", 0.1 ) SetDeployZones:SetZoneProbability( "Deploy A", 0.1 )
SetDeployZones:SetZoneProbability( "Deploy B", 0.1 ) SetDeployZones:SetZoneProbability( "Deploy B", 0.1 )
SetDeployZones:SetZoneProbability( "Deploy C", 0.8 ) SetDeployZones:SetZoneProbability( "Deploy C", 0.8 )
@@ -1,176 +1,176 @@
--- ---
-- Name: AID-CGO-240 - Helicopter - Unloaded Event Handling -- Name: AID-CGO-240 - Helicopter - Unloaded Event Handling
-- Author: FlightControl -- Author: FlightControl
-- Date Created: 15 May 2018 -- Date Created: 15 May 2018
-- --
-- Demonstrates the way how the deploy locations can be set to a specific probability distribution. -- Demonstrates the way how the deploy locations can be set to a specific probability distribution.
local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart() local SetCargoInfantry = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart() local SetHelicopter = SET_GROUP:New():FilterPrefixes( "Helicopter" ):FilterStart()
local SetPickupZones = SET_ZONE:New():FilterPrefixes( "Pickup" ):FilterStart() local SetPickupZones = SET_ZONE:New():FilterPrefixes( "Pickup" ):FilterStart()
local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart() local SetDeployZones = SET_ZONE:New():FilterPrefixes( "Deploy" ):FilterStart()
AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, SetPickupZones, SetDeployZones ) AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetHelicopter, SetCargoInfantry, SetPickupZones, SetDeployZones )
AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) ) AICargoDispatcherHelicopter:SetHomeZone( ZONE:FindByName( "Home" ) )
--- Pickup Handler OnAfter for AICargoDispatcherHelicopter. --- Pickup Handler OnAfter for AICargoDispatcherHelicopter.
-- Use this event handler to tailor the event when a CarrierGroup is routed towards a new pickup Coordinate and a specified Speed. -- Use this event handler to tailor the event when a CarrierGroup is routed towards a new pickup Coordinate and a specified Speed.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @param #AICargoDispatcherAirplanes self -- @param #AICargoDispatcherAirplanes self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Point#COORDINATE Coordinate The coordinate of the pickup location. -- @param Core.Point#COORDINATE Coordinate The coordinate of the pickup location.
-- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the pickup Coordinate. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the pickup Coordinate.
-- @param #number Height Height in meters to move to the pickup coordinate. -- @param #number Height Height in meters to move to the pickup coordinate.
function AICargoDispatcherHelicopter:OnAfterPickup( From, Event, To, CarrierGroup, Coordinate, Speed, Height ) function AICargoDispatcherHelicopter:OnAfterPickup( From, Event, To, CarrierGroup, Coordinate, Speed, Height )
-- Write here your own code. -- Write here your own code.
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is picking up cargo.", MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is picking up cargo.", MESSAGE.Type.Information ):ToAll()
end end
--- Load Handler OnAfter for AICargoDispatcherHelicopter. --- Load Handler OnAfter for AICargoDispatcherHelicopter.
-- Use this event handler to tailor the event when a CarrierGroup has initiated the loading or boarding of cargo within reporting or near range. -- Use this event handler to tailor the event when a CarrierGroup has initiated the loading or boarding of cargo within reporting or near range.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @param #AICargoDispatcherHelicopter self -- @param #AICargoDispatcherHelicopter self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
function AICargoDispatcherHelicopter:OnAfterLoad( From, Event, To, CarrierGroup ) function AICargoDispatcherHelicopter:OnAfterLoad( From, Event, To, CarrierGroup )
-- Write here your own code. -- Write here your own code.
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is loading cargo.", MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is loading cargo.", MESSAGE.Type.Information ):ToAll()
end end
--- Loaded event handler OnAfter for AICargoDispatcherHelicopter. --- Loaded event handler OnAfter for AICargoDispatcherHelicopter.
-- Use this event handler to tailor the event when a CarrierUnit of a CarrierGroup has loaded a cargo object. -- Use this event handler to tailor the event when a CarrierUnit of a CarrierGroup has loaded a cargo object.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- Note that if more cargo objects were loading or boarding into the CarrierUnit, then this event can be triggered multiple times for each different Cargo/CarrierUnit. -- Note that if more cargo objects were loading or boarding into the CarrierUnit, then this event can be triggered multiple times for each different Cargo/CarrierUnit.
-- A CarrierUnit can be part of the larger CarrierGroup. -- A CarrierUnit can be part of the larger CarrierGroup.
-- @param #AICargoDispatcherHelicopter self -- @param #AICargoDispatcherHelicopter self
-- @param #string From A string that contains the "*from state name*" when the event was triggered. -- @param #string From A string that contains the "*from state name*" when the event was triggered.
-- @param #string Event A string that contains the "*event name*" when the event was triggered. -- @param #string Event A string that contains the "*event name*" when the event was triggered.
-- @param #string To A string that contains the "*to state name*" when the event was triggered. -- @param #string To A string that contains the "*to state name*" when the event was triggered.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Cargo.Cargo#CARGO Cargo The cargo object. -- @param Cargo.Cargo#CARGO Cargo The cargo object.
-- @param Wrapper.Unit#UNIT CarrierUnit The carrier unit that is executing the cargo loading operation. -- @param Wrapper.Unit#UNIT CarrierUnit The carrier unit that is executing the cargo loading operation.
-- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone. -- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone.
function AICargoDispatcherHelicopter:OnAfterLoaded( From, Event, To, CarrierGroup, Cargo, CarrierUnit, PickupZone ) function AICargoDispatcherHelicopter:OnAfterLoaded( From, Event, To, CarrierGroup, Cargo, CarrierUnit, PickupZone )
-- Write here your own code. -- Write here your own code.
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " has loaded cargo " .. Cargo:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " has loaded cargo " .. Cargo:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- Deploy Handler OnAfter for AI_CARGO_DISPATCHER. --- Deploy Handler OnAfter for AI_CARGO_DISPATCHER.
-- Use this event handler to tailor the event when a CarrierGroup is routed to a deploy coordinate, to Unload all cargo objects in each CarrierUnit. -- Use this event handler to tailor the event when a CarrierGroup is routed to a deploy coordinate, to Unload all cargo objects in each CarrierUnit.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @function OnAfterPickedUp -- @function OnAfterPickedUp
-- @param self -- @param self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Point#COORDINATE Coordinate The deploy coordinate. -- @param Core.Point#COORDINATE Coordinate The deploy coordinate.
-- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the deploy Coordinate. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the deploy Coordinate.
-- @param #number Height Height in meters to move to the deploy coordinate. -- @param #number Height Height in meters to move to the deploy coordinate.
-- @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 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 AICargoDispatcherHelicopter:OnAfterDeploy( From, Event, To, CarrierGroup, Coordinate, Speed, Height, DeployZone ) function AICargoDispatcherHelicopter:OnAfterDeploy( From, Event, To, CarrierGroup, Coordinate, Speed, Height, DeployZone )
MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is starting deployment of all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName().. " is starting deployment of all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- Unloaded Handler OnAfter for AI_CARGO_DISPATCHER. --- Unloaded Handler OnAfter for AI_CARGO_DISPATCHER.
-- Use this event handler to tailor the event when a CarrierUnit of a CarrierGroup has unloaded a cargo object. -- Use this event handler to tailor the event when a CarrierUnit of a CarrierGroup has unloaded a cargo object.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- Note that if more cargo objects were unloading or unboarding from the CarrierUnit, then this event can be fired multiple times for each different Cargo/CarrierUnit. -- Note that if more cargo objects were unloading or unboarding from the CarrierUnit, then this event can be fired multiple times for each different Cargo/CarrierUnit.
-- A CarrierUnit can be part of the larger CarrierGroup. -- A CarrierUnit can be part of the larger CarrierGroup.
-- @function OnAfterUnloaded -- @function OnAfterUnloaded
-- @param #AICargoDispatcherHelicopter self -- @param #AICargoDispatcherHelicopter self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Cargo.Cargo#CARGO Cargo The cargo object. -- @param Cargo.Cargo#CARGO Cargo The cargo object.
-- @param Wrapper.Unit#UNIT CarrierUnit The carrier unit that is executing the cargo unloading operation. -- @param Wrapper.Unit#UNIT CarrierUnit The carrier unit that is executing the cargo unloading operation.
-- @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 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 AICargoDispatcherHelicopter:OnAfterUnloaded( From, Event, To, CarrierGroup, Cargo, CarrierUnit, DeployZone ) function AICargoDispatcherHelicopter:OnAfterUnloaded( From, Event, To, CarrierGroup, Cargo, CarrierUnit, DeployZone )
local CargoGroup = Cargo:GetObject() -- Wrapper.Group#GROUP local CargoGroup = Cargo:GetObject() -- Wrapper.Group#GROUP
-- Get the name of the DeployZone -- Get the name of the DeployZone
local DeployZoneName = DeployZone:GetName() local DeployZoneName = DeployZone:GetName()
local DeployBuildingNames = { local DeployBuildingNames = {
["Deploy A"] = "Building A", ["Deploy A"] = "Building A",
["Deploy B"] = "Building B", ["Deploy B"] = "Building B",
["Deploy C"] = "Building C", ["Deploy C"] = "Building C",
} }
-- Now board the infantry into the respective warehouse building. -- Now board the infantry into the respective warehouse building.
if DeployZoneName then if DeployZoneName then
local Building = STATIC:FindByName( DeployBuildingNames[DeployZoneName] ) local Building = STATIC:FindByName( DeployBuildingNames[DeployZoneName] )
Cargo:__Board( 5, Building, 25 ) Cargo:__Board( 5, Building, 25 )
end end
MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. ", Unit " .. CarrierUnit:GetName() .. " has unloaded cargo " .. Cargo:GetName() .. " in zone " .. DeployZone:GetName() .. " and cargo is moving to building " .. DeployBuildingNames[DeployZoneName], MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. ", Unit " .. CarrierUnit:GetName() .. " has unloaded cargo " .. Cargo:GetName() .. " in zone " .. DeployZone:GetName() .. " and cargo is moving to building " .. DeployBuildingNames[DeployZoneName], MESSAGE.Type.Information ):ToAll()
end end
--- Deployed Handler OnAfter for AI_CARGO_DISPATCHER. --- Deployed Handler OnAfter for AI_CARGO_DISPATCHER.
-- Use this event handler to tailor the event when a carrier has deployed all cargo objects from the CarrierGroup. -- Use this event handler to tailor the event when a carrier has deployed all cargo objects from the CarrierGroup.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- @function OnAfterDeployed -- @function OnAfterDeployed
-- @param #AICargoDispatcherHelicopter self -- @param #AICargoDispatcherHelicopter self
-- @param #string From A string that contains the "*from state name*" when the event was fired. -- @param #string From A string that contains the "*from state name*" when the event was fired.
-- @param #string Event A string that contains the "*event name*" when the event was fired. -- @param #string Event A string that contains the "*event name*" when the event was fired.
-- @param #string To A string that contains the "*to state name*" when the event was fired. -- @param #string To A string that contains the "*to state name*" when the event was fired.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @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 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 AICargoDispatcherHelicopter:OnAfterDeployed( From, Event, To, CarrierGroup, DeployZone ) function AICargoDispatcherHelicopter:OnAfterDeployed( From, Event, To, CarrierGroup, DeployZone )
MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo in zone " .. DeployZone:GetName(), MESSAGE.Type.Information ):ToAll()
end end
--- Home event handler OnAfter for AICargoDispatcherHelicopter. --- Home event handler OnAfter for AICargoDispatcherHelicopter.
-- Use this event handler to tailor the event when a CarrierGroup is returning to the HomeZone, after it has deployed all cargo objects from the CarrierGroup. -- Use this event handler to tailor the event when a CarrierGroup is returning to the HomeZone, after it has deployed all cargo objects from the CarrierGroup.
-- You can use this event handler to post messages to players, or provide status updates etc. -- You can use this event handler to post messages to players, or provide status updates etc.
-- If there is no HomeZone is specified, the CarrierGroup will stay at the current location after having deployed all cargo. -- If there is no HomeZone is specified, the CarrierGroup will stay at the current location after having deployed all cargo.
-- @param #AICargoDispatcherHelicopter self -- @param #AICargoDispatcherHelicopter self
-- @param #string From A string that contains the "*from state name*" when the event was triggered. -- @param #string From A string that contains the "*from state name*" when the event was triggered.
-- @param #string Event A string that contains the "*event name*" when the event was triggered. -- @param #string Event A string that contains the "*event name*" when the event was triggered.
-- @param #string To A string that contains the "*to state name*" when the event was triggered. -- @param #string To A string that contains the "*to state name*" when the event was triggered.
-- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits.
-- @param Core.Point#COORDINATE Coordinate The home coordinate the Carrier will arrive and stop it's activities. -- @param Core.Point#COORDINATE Coordinate The home coordinate the Carrier will arrive and stop it's activities.
-- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the home Coordinate. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the home Coordinate.
-- @param #number Height Height in meters to move to the home coordinate. -- @param #number Height Height in meters to move to the home coordinate.
-- @param Core.Zone#ZONE HomeZone The zone wherein the carrier will return when all cargo has been transported. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE. -- @param Core.Zone#ZONE HomeZone The zone wherein the carrier will return when all cargo has been transported. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
function AICargoDispatcherHelicopter:OnAfterHome( From, Event, To, CarrierGroup, Coordinate, Speed, Height, HomeZone ) function AICargoDispatcherHelicopter:OnAfterHome( From, Event, To, CarrierGroup, Coordinate, Speed, Height, HomeZone )
MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo and going home to zone " .. HomeZone:GetName(), MESSAGE.Type.Detailed ):ToAll() MESSAGE:NewType( "Group " .. CarrierGroup:GetName() .. " deployed all cargo and going home to zone " .. HomeZone:GetName(), MESSAGE.Type.Detailed ):ToAll()
end end
AICargoDispatcherHelicopter:Start() AICargoDispatcherHelicopter:Start()

Some files were not shown because too many files have changed in this diff Show More