Jump to content

MOOSE - Mission Object Oriented Scripting Framework


Recommended Posts

Will moose allow respawning of player groups in single player? I'm trying to create a dogfight module similar to BMS where player and target both respawn after one is killed. I think using a group:destroy and going through the crash recovery menu will work, but I'm looking for a way to autospawn the player to make it less clunky. A twist that may complicate this: Id like to be able to make multiple playable clients and have it automatically respawn you in the client you chose at the start.

 

This is very unlikely to work and will most likely be a DCS limitation.

Link to comment
Share on other sites

What is the error in the DCS.log file?

 

Spawns could take a second or two before they are available so you can try moving the spawn of the plane before you define the zones. That might give it enough time to the be able to set controllable on it. If this is in fact the issue.

 

I'm trying to get one aircraft to patrol shifting zones (as in Patrol mission example) but I want the aircraft to be Su-27 and it should engage enemy withing distance. Can't seem to get a spawned aircraft out of this, I'm blind :(

 

I'm editing your example Sven:

PatrolZoneGroup1 = GROUP:FindByName( "Patrol Zone 1" )
PatrolZone1 = ZONE_POLYGON:New( "Patrol Zone 1", PatrolZoneGroup1 )
PatrolZone1:SetEngageRange( 20000 ) -- Set the Engage Range to 20.000 meters. The AI won't engage when the enemy is beyond 20.000 meters.

PatrolZoneGroup2 = GROUP:FindByName( "Patrol Zone 2" )
PatrolZone2 = ZONE_POLYGON:New( "Patrol Zone 2", PatrolZoneGroup2 )
PatrolZone2:SetEngageRange( 20000 ) -- Set the Engage Range to 20.000 meters. The AI won't engage when the enemy is beyond 20.000 meters.

--PatrolGroup = GROUP:FindByName( "Patrol Group" )
PatrolSpawn = SPAWN:New( "Patrol Group" )
PatrolGroup = PatrolSpawn:Spawn()

Patrol1 = AI_PATROL_ZONE:New( PatrolZone1, 3000, 6000, 400, 600 )
Patrol1:ManageFuel( 0.2, 60 )
Patrol1:SetControllable( PatrolGroup )
Patrol1:__Start( 5 )

Patrol2 = AI_PATROL_ZONE:New( PatrolZone2, 600, 1000, 300, 400 )
Patrol2:ManageFuel( 0.2, 0 )

function Patrol1:OnLeaveRTB( AIGroup )
 AIGroup:MessageToRed( "Returning to base", 20 )
end 

function Patrol1:OnAfterRTB( AIGroup )
 local NewGroup = PatrolSpawn:Spawn()
 Patrol2:SetControllable( NewGroup )
 Patrol2:__Start( 1 )
end 

function Patrol1:OnEnterPatrol( AIGroup )
 AIGroup:MessageToRed( "Patrolling in zone " .. PatrolZone1:GetName() , 20 )
end 

function Patrol2:OnBeforeRTB( AIGroup )
 AIGroup:MessageToRed( "Returning to base", 20 )
end 

function Patrol2:OnEnterRTB( AIGroup )
 local NewGroup = PatrolSpawn:Spawn()
 Patrol1:SetControllable( NewGroup )
 Patrol1:__Start( 1 )
end 

function Patrol2:OnEnterPatrol( AIGroup )
 AIGroup:MessageToRed( "Patrolling in zone " .. PatrolZone2:GetName() , 20 )
end

Link to comment
Share on other sites

Hi @ all.

 

I am trying to handle an event of a group being dead, and activating a "SpawnScheduleStop" when this happens.

 

I was trying to modify the "UNIT:FindByName" Class, by changing it as follows: (GROUP:FindByName)

 

Obviously, this wasn't right... haha :megalol:

 

What would be the right way to do this? I added the fraction of the code blow. :helpsmilie:

 

 

_1st_OpFor_LMLRS_Base = [color="Red"]GROUP[/color]:FindByName( "1st OpFor LMLRS Group Base" )


_1st_OpFor_LMLRS_Base:HandleEvent( EVENTS.Dead )


function _1st_OpFor_LMLRS_Base:OnEventDead( EventData )

 Respawn_1st_OpFor_LMLRS:SpawnScheduleStop()

end

 

 

Thanks!!!! :-D

 

 

EDIT: Of course, above is more code, just for completion:

 

-- Spawner

Respawn_1st_OpFor_LMLRS = SPAWN
 :New("1st Grad Platoon (OpFor)")
 :InitLimit(8,0)
 :SpawnScheduled(6,0)

-- Initialisation Spawns 

Respawn_1st_OpFor_LMLRS:Spawn()

-- next


Edited by ViperSix
Link to comment
Share on other sites

I've done this, it's not too hard.

Firstly you have to grab the event for the airbase switching sides. If you need it on mission load, like I did you have to actually check the coalition in lua, but an event should be ok for you. (my mission woudl re-run and reload so I never knew the starting position.

 

Second, the SPAWNS don't care on airbase ownership (but the warehouse will, interestingly). So you need to react to the event above and stop the spawns.

 

1. Create the SPAWN objects for both sides. I then used :SpawnScheduleStop() and they will stop, so initially you have red and blue created but doing nothing.

eg

KU1 = SPAWN

:New("KU1")

:InitLimit(1,0)

:InitCleanUp(60)

:SpawnScheduled(500,.5)

KU1:SpawnScheduleStop()

 

Then based on your EVENT, start and stop the Spawns

 

eg

KU1:SpawnScheduleStart()

 

I did it less elegantly than using EVENT, I set up a scheduler and checked the airbase ownership with a function CraigOwen helped me write a few months back:

 

function checkblue(ABname)

local tmp = coalition.getAirbases(2)

for i=1,#tmp do

if tmp:getName() == ABname then

return true

end

end

end

 

So...the begining of the SCHEDULER goes like this:

 

SCHEDULER:New( nil,

function()

do

 

if checkblue("Kobuleti") then

REDSpawn:SpawnScheduleStop()

BlueSpawn:SpawnScheduleStart()

 

...

 

You see where this is going?

 

It's more specific as this was Player versus AI, I allowed Neutral to also spawn RED, but that's a design decicion I wanted.

 

Bonus points I also toggled a bunch of flags that set the opening of client slots.

trigger.action.setUserFlag("client-KOB1",1)

which is part of Ciribobs slot blocking.

 

End result is:

 

The SCHEDULER runs and every 15 seconds checks the ownership of an airfield. If it is captured (by the ground troops you were supporting) then it disables all the red spawns, enables the blue ones, enables you to take a slot on the airfield too.

 

Works great. You get occasions with blue and red clashing and all sorts of shooting and mess at the airfield, but that's super exciting if I'm honest. Remember only ground units can capture an airfield. I had many airbases monitored and as they were captured, I stopped their sides activity and started the others.

Was probably the single coolest thing I ever did with MOOSE.

 

Trying to create a mission where you need to take over an airfield.

My thought was that when the base switches sides the enemy cap will no longer spawn and the friendly cap will start spawn instead. But it seems like the blue cap will spawn, even if the base belongs to red. Is the side not controlled by the script? Im sure you can script it, but i dont know how.

 

red cap
RED_A2A_GCICAP:SetSquadron("Kobuleti_cap", "Kobuleti", "mig29cap", 16)
RED_A2A_GCICAP:SetSquadronGci( "Kobuleti_cap", 900, 1200  )
RED_A2A_GCICAP:SetSquadronCap( "Kobuleti_cap", ZONE:New( "Kobuleti_cap_zone" ), 4000, 10000, 700, 900, 800, 1100 )
RED_A2A_GCICAP:SetSquadronCapInterval( "Kobuleti_cap", 2, 30, 60, 1 )
RED_A2A_GCICAP:SetSquadronOverhead( "Kobuleti_cap", 1.5 )
RED_A2A_GCICAP:SetSquadronGrouping( "Kobuleti_cap", 2 )
RED_A2A_GCICAP:SetSquadronTakeoffFromRunway( "Kobuleti_cap" )
RED_A2A_GCICAP:SetSquadronLandingAtRunway("Kobuleti_cap")
blue cap
BLUE_A2A_GCICAP:SetSquadron("Kobuleti_cap_blue", "Kobuleti", "f16cap", 40)
BLUE_A2A_GCICAP:SetSquadronGci( "Kobuleti_cap_blue", 900, 1200  )
BLUE_A2A_GCICAP:SetSquadronCap( "Kobuleti_cap_blue", ZONE:New( "Kobuleti_cap_zone" ), 4000, 10000, 700, 900, 800, 1100 )
BLUE_A2A_GCICAP:SetSquadronCapInterval( "Kobuleti_cap_blue", 2, 30, 60, 1 )
BLUE_A2A_GCICAP:SetSquadronOverhead( "Kobuleti_cap_blue", 1.5 )
BLUE_A2A_GCICAP:SetSquadronGrouping( "Kobuleti_cap_blue", 2 )
BLUE_A2A_GCICAP:SetSquadronTakeoffFromRunway( "Kobuleti_cap_blue" )
BLUE_A2A_GCICAP:SetSquadronLandingAtRunway("Kobuleti_cap_blue")


Edited by Pikey
lots a bloody typos as it's late

___________________________________________________________________________

SIMPLE SCENERY SAVING * SIMPLE GROUP SAVING * SIMPLE STATIC SAVING *

Link to comment
Share on other sites

What is the error in the DCS.log file?

 

Spawns could take a second or two before they are available so you can try moving the spawn of the plane before you define the zones. That might give it enough time to the be able to set controllable on it. If this is in fact the issue.

Good tip! As I said, I'm blind and did not even think about the log :P I'm sure there is something logged. Thanks.

Link to comment
Share on other sites

Just remember, EVENTS.Dead tied to a group is checking for any group member that died.

Also remember the findbyname isn't ideal here, you want an OnSpawn function to pick up and track the spawn object.

You might need to spell out your entire requirement because on the face of it, you could simply just not use SpawnScheduled and use a normal Spawn, in which case, once dead, it's done for anyway. If you are using SpawnScheduled to continuously spawn a group and for the first one of any of the groups to get killed to then stop the spawn, then I'd need to get my thinking cap on.

Hi @ all.

 

I am trying to handle an event of a group being dead, and activating a "SpawnScheduleStop" when this happens.

 

I was trying to modify the "UNIT:FindByName" Class, by changing it as follows: (GROUP:FindByName)

 

Obviously, this wasn't right... haha :megalol:

 

What would be the right way to do this? I added the fraction of the code blow. :helpsmilie:

 

 

_1st_OpFor_LMLRS_Base = [color=Red]GROUP[/color]:FindByName( "1st OpFor LMLRS Group Base" )


_1st_OpFor_LMLRS_Base:HandleEvent( EVENTS.Dead )


function _1st_OpFor_LMLRS_Base:OnEventDead( EventData )

 Respawn_1st_OpFor_LMLRS:SpawnScheduleStop()

end

Thanks!!!! :-D

 

 

EDIT: Of course, above is more code, just for completion:

 

-- Spawner

Respawn_1st_OpFor_LMLRS = SPAWN
 :New("1st Grad Platoon (OpFor)")
 :InitLimit(8,0)
 :SpawnScheduled(6,0)

-- Initialisation Spawns 

Respawn_1st_OpFor_LMLRS:Spawn()

-- next

___________________________________________________________________________

SIMPLE SCENERY SAVING * SIMPLE GROUP SAVING * SIMPLE STATIC SAVING *

Link to comment
Share on other sites

Just remember, EVENTS.Dead tied to a group is checking for any group member that died.

Also remember the findbyname isn't ideal here, you want an OnSpawn function to pick up and track the spawn object.

You might need to spell out your entire requirement because on the face of it, you could simply just not use SpawnScheduled and use a normal Spawn, in which case, once dead, it's done for anyway. If you are using SpawnScheduled to continuously spawn a group and for the first one of any of the groups to get killed to then stop the spawn, then I'd need to get my thinking cap on.

 

Thanks for the answer an first of all, thank you for this awesome framework you provided!!!!

 

Now the whole story:

 

What I want to archive is a group of vehicles that stops its spawning cycle (with a "max-unit-alive" limit of x) if another designated group is not alive. So a vehicle group that spawns as long as another group is alive. Basically just like the code you provided on gitHub, but instead for a single unit, for a group:

 

local Tank1 = UNIT:FindByName( "Tank A" )
local Tank2 = UNIT:FindByName( "Tank B" )

-- Here we subscribe to the Dead events. So, if one of these tanks dies, the Tank1 or Tank2 objects will be notified.
Tank1:HandleEvent( EVENTS.Dead )
Tank2:HandleEvent( EVENTS.Dead )

--- This function is an Event Handling function that will be called when Tank1 is Dead.
-- @param Wrapper.Unit#UNIT self 
-- @param Core.Event#EVENTDATA EventData
function Tank1:OnEventDead( EventData )

  self:SmokeGreen()
end

--- This function is an Event Handling function that will be called when Tank2 is Dead.
-- @param Wrapper.Unit#UNIT self 
-- @param Core.Event#EVENTDATA EventData
function Tank2:OnEventDead( EventData )

  self:SmokeBlue()
end

 

So something like:

 

group1 (alive) = group 2 spawning -> on

group1 (dead) = group 2 spawning -> off

 

Thank You!!! :-) Im so exited about Moose.... Its just what DCS needs!

Link to comment
Share on other sites

This is very unlikely to work and will most likely be a DCS limitation.

 

Ok, gave up on the auto respawn and have it working reliably, now I'm running into the issue of trying to respawn an AI wingman when I respawn. I had read that when the player respawn into a client with a wingman then the wingman would respawn too, but this is not the case. Any ideas on how to spawn a plane into my group?

Link to comment
Share on other sites

Ok, gave up on the auto respawn and have it working reliably, now I'm running into the issue of trying to respawn an AI wingman when I respawn. I had read that when the player respawn into a client with a wingman then the wingman would respawn too, but this is not the case. Any ideas on how to spawn a plane into my group?

 

If the wingman is dead then yes they will respawn with you. If not they just act as your wingman after you spawn back in unless you spawn back into a different slot.

Link to comment
Share on other sites

See I've tried using a Unit.destroy on the wingman that essentially "kills" them but they still don't respawn. Does the destroy action not work for this purpose?

 

Do you mean they don't instantly respawn while you (human group leader) are still flying? Then no, they probably don't respawn until you die and restart in the same slot. All of this will be standard DCS behaviour that Moose cannot help with.

 

However, you might be able to kind of do what you want in the form of using Escort type tasks. But then you won't have a real wingman (ie. you won't be the group leader and have menu actions to command them) but rather just a unit that will fly escort with you. Then you can respawn that unit as you like with Moose.

 

All depends what you are really trying to accomplish and how much scripting you want to do.

Link to comment
Share on other sites

Thank FlightControl of course. Also joining Slack would help you get a faster answer I think.

Bookmark this page: http://flightcontrol-master.github.io/MOOSE/Documentation/Spawn.html

There's always a few ways of doing these things. One way could be:

 

1) A way to monitor the alive/dead of the critical group or units (is it some or all of the group?)

2) :SpawnScheduleOff (if you are using SpawnSchedule() to create the endless spawns.)

 

You could also just destroy the SPAWN object if you are spawning another way. MySpawnObject = nil. And then create another Spawn object with the use of the InitLimit(maxnumber) which will automatically spawn whenever the number is beneath the limit.

 

Thanks for the answer an first of all, thank you for this awesome framework you provided!!!!

 

Now the whole story:

 

What I want to archive is a group of vehicles that stops its spawning cycle (with a "max-unit-alive" limit of x) if another designated group is not alive. So a vehicle group that spawns as long as another group is alive. Basically just like the code you provided on gitHub, but instead for a single unit, for a group:

 

local Tank1 = UNIT:FindByName( "Tank A" )
local Tank2 = UNIT:FindByName( "Tank B" )

-- Here we subscribe to the Dead events. So, if one of these tanks dies, the Tank1 or Tank2 objects will be notified.
Tank1:HandleEvent( EVENTS.Dead )
Tank2:HandleEvent( EVENTS.Dead )

--- This function is an Event Handling function that will be called when Tank1 is Dead.
-- @param Wrapper.Unit#UNIT self 
-- @param Core.Event#EVENTDATA EventData
function Tank1:OnEventDead( EventData )

  self:SmokeGreen()
end

--- This function is an Event Handling function that will be called when Tank2 is Dead.
-- @param Wrapper.Unit#UNIT self 
-- @param Core.Event#EVENTDATA EventData
function Tank2:OnEventDead( EventData )

  self:SmokeBlue()
end

So something like:

 

group1 (alive) = group 2 spawning -> on

group1 (dead) = group 2 spawning -> off

 

Thank You!!! :-) Im so exited about Moose.... Its just what DCS needs!

___________________________________________________________________________

SIMPLE SCENERY SAVING * SIMPLE GROUP SAVING * SIMPLE STATIC SAVING *

Link to comment
Share on other sites

Do you mean they don't instantly respawn while you (human group leader) are still flying? Then no, they probably don't respawn until you die and restart in the same slot. All of this will be standard DCS behaviour that Moose cannot help with.

 

However, you might be able to kind of do what you want in the form of using Escort type tasks. But then you won't have a real wingman (ie. you won't be the group leader and have menu actions to command them) but rather just a unit that will fly escort with you. Then you can respawn that unit as you like with Moose.

 

All depends what you are really trying to accomplish and how much scripting you want to do.

 

No, I'm trying to get them to do the second option, where when I respawn into the same slot, they also respawn. It sounds like they should be doing that, but right now they definitely aren't.

Link to comment
Share on other sites

Ok, gave up on the auto respawn and have it working reliably, now I'm running into the issue of trying to respawn an AI wingman when I respawn. I had read that when the player respawn into a client with a wingman then the wingman would respawn too, but this is not the case. Any ideas on how to spawn a plane into my group?

 

I am sure that what you wanted to do has a chance for success. My reply rate is low.

 

The trick will be to build a template dynamically based on parameters.

And add planes where wanted. SPAWN has all the ingredients to do these things.

But now we need to look into a "player" skill setting a bit.

 

Can you give this about a week?

 

Fx

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

A couple of urgent fixes:

 

 

  • DESIGNATE: Messages not appearing correctly and crashing the logic is fixed. (due to a stupid typo).
  • TASK_A2G: Tasking is fixed. Status menus are now displayed properly, also when the task is planned.
  • MENU_COMMAND: I found now why DCS is displayer "error in error handler" sometimes when a menu was selected. The error handler is DCS is bugged, so made my own one. This one is to help FubarBundy.

 

 

Thanks Mechanist and Ramsay for the error reports on github.

 

 

Ensure you download and include the latest moose.lua from the MOOSE release page: https://github.com/FlightControl-Master/MOOSE/releases

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Some more fixes...

 

 

  • AI_CAP_ZONE: Fixed issues with CAP engaging (independent CAP so not related to GCICAP).
  • AI_CAS_ZONE: Fixed issues with CAS engaging.

 

 

This to help Hijack.

 

 

Ensure you download and include the latest moose.lua from the MOOSE release page: https://github.com/FlightControl-Master/MOOSE/releases

 

 

FC

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

FC. Thank you for all your hard work! :)

 

 

I wonder if you could spare a few minutes checking whats wrong with my F/A-18 squadron based off a carrier. Some flights seems to do ok, going to the capzone but mostly they just land immediately.

 

Mission attached.

 

This is a section from the DCS.log

Cant see any problems.

 

EDIT: Might have fixed it by setting a waypoint...

 

Tactical Overview

- Target AREA.1 ( 1 ): ( #2 ) vfa94_template#005-02, Pilot #010, 

- Target AREA.3 ( 3 ): ( #1 ) Pilot #004, 
  - ru132_template#003 ( CAP - Engaging ): ( #2 ) F:  70, D:100 - Executing

- Target AREA.4 ( 4 ): ( #2 ) Pilot #005, Pilot #006, 

- Target AREA.9 ( 6 ): ( #2 ) vfa94_template#006-02, vfa94_template#006-01, 

- Target AREA.10 ( 7 ): ( #1 ) vfa94_template#002-02, 

- No Targets:
  - ru132_template#004 ( CAP - Patrolling ): ( #2 ) F:  96, D:100 - Executing

- 2 Tasks)
04971.622 INFO    SCRIPTING:  33324(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="Detect",[3]="Detecting",})
04971.630 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04971.630 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04971.691 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04971.691 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04971.758 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04971.759 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04971.823 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04971.833 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04972.033 WARNING LOG: 2 duplicate message(s) skipped.
04972.033 INFO    SCRIPTING:  43651( 44592)/E:       AI_A2A_GCICAP00328.CanCAP({["CapCount"]=2,})
04972.660 INFO    DCS: AWACSDBG: added id - 16823296, whois - MiG-23MLD ru132_template#003-01
04973.331 INFO    DCS: AWACSDBG: added id - 16838912, whois - MiG-23MLD ru132_template#004-01
04973.331 INFO    DCS: AWACSDBG: added id - 16839168, whois - MiG-23MLD ru132_template#004-02
04973.367 INFO    SCRIPTING:  43651( 44592)/E:       AI_A2A_GCICAP00303.CanCAP({["CapCount"]=2,})
04973.605 INFO    SCRIPTING:  54107(    -1)/E:       AI_A2A_GCICAP00303.function(onafterReport)
04973.605 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04973.605 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04973.605 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04973.605 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04973.605 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04973.605 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04973.605 INFO    SCRIPTING:  45012( 54111)/E:       AI_A2A_GCICAP00303.ProcessDetected(
Tactical Overview

- Target AREA.5 ( 3 ): ( #2 ) ru132_template#003-02, ru132_template#003-01, 

- Target AREA.6 ( 4 ): ( #2 ) ru132_template#004-02, ru132_template#004-01, 

- No Targets:
  - vfa94_template#005 ( CAP - Patrolling ): ( #1 ) F: 152, D:100 - Executing
  - vfa94_template#006 ( CAP - Patrolling ): ( #2 ) F: 150, D:100 - Executing
  - vfa94_template#002 ( CAP - Holding ): ( #1 ) F:  36, D:100 - Executing

- 3 Tasks)
04973.605 INFO    SCRIPTING:  54107(    -1)/E:       AI_A2A_GCICAP00328.function(onafterReport)
04973.605 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04973.605 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04973.605 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04973.605 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04973.605 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04973.605 INFO    SCRIPTING:  44530( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Defender Group Name: ru132_template#003, Size: 2)
04973.605 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04973.605 INFO    SCRIPTING:  44530( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Defender Group Name: ru132_template#003, Size: 2)
04973.605 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04973.605 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.605 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04973.606 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.606 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04973.606 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04973.606 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.606 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04973.606 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.606 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04973.606 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04973.606 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.606 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04973.606 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04973.606 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04973.606 INFO    SCRIPTING:  45012( 54111)/E:       AI_A2A_GCICAP00328.ProcessDetected(
Tactical Overview

- Target AREA.1 ( 1 ): ( #2 ) vfa94_template#005-02, Pilot #010, 

- Target AREA.3 ( 3 ): ( #1 ) Pilot #004, 
  - ru132_template#003 ( CAP - Engaging ): ( #2 ) F:  68, D:100 - Executing

- Target AREA.4 ( 4 ): ( #2 ) Pilot #005, Pilot #006, 

- Target AREA.9 ( 6 ): ( #2 ) vfa94_template#006-02, vfa94_template#006-01, 

- Target AREA.10 ( 7 ): ( #1 ) vfa94_template#002-02, 

- No Targets:
  - ru132_template#004 ( CAP - Patrolling ): ( #2 ) F:  96, D:100 - Executing

- 2 Tasks)
04973.832 INFO    SCRIPTING:  33324(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="Detect",[3]="Detecting",})
04973.843 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04973.966 WARNING LOG: 1 duplicate message(s) skipped.
04973.966 INFO    SCRIPTING:  33324(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="Detect",[3]="Detecting",})
04973.978 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04973.978 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.043 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.043 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.111 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.111 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.177 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.177 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.244 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.245 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.312 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.315 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04974.702 INFO    SCRIPTING:  43651( 44592)/E:       AI_A2A_GCICAP00328.CanCAP({["CapCount"]=2,})
04974.713 INFO    DCS: AWACSDBG: added id - 16823552, whois - MiG-23MLD ru132_template#003-02
04974.917 INFO    DCS: AWACSDBG: removed id - 16846592, whois - F/A-18C vfa94_template#005-02
04975.023 INFO    DCS: AWACSDBG: added id - 16846848, whois - F/A-18C vfa94_template#006-01
04975.023 INFO    DCS: AWACSDBG: added id - 16847104, whois - F/A-18C vfa94_template#006-02
04975.612 INFO    SCRIPTING:  54107(    -1)/E:       AI_A2A_GCICAP00303.function(onafterReport)
04975.612 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04975.612 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.612 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04975.612 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.612 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04975.612 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04975.612 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.612 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04975.612 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.612 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04975.612 INFO    SCRIPTING:  45012( 54111)/E:       AI_A2A_GCICAP00303.ProcessDetected(
Tactical Overview

- Target AREA.5 ( 3 ): ( #2 ) ru132_template#003-02, ru132_template#003-01, 

- Target AREA.6 ( 4 ): ( #2 ) ru132_template#004-02, ru132_template#004-01, 

- No Targets:
  - vfa94_template#005 ( CAP - Patrolling ): ( #1 ) F: 152, D:100 - Executing
  - vfa94_template#006 ( CAP - Patrolling ): ( #2 ) F: 150, D:100 - Executing
  - vfa94_template#002 ( CAP - Holding ): ( #1 ) F:  31, D:100 - Executing

- 3 Tasks)
04975.612 INFO    SCRIPTING:  54107(    -1)/E:       AI_A2A_GCICAP00328.function(onafterReport)
04975.612 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04975.612 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.612 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04975.612 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.612 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04975.613 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04975.613 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.613 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04975.613 INFO    SCRIPTING:  44530( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Defender Group Name: ru132_template#003, Size: 2)
04975.613 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.613 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04975.613 INFO    SCRIPTING:  44530( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Defender Group Name: ru132_template#003, Size: 2)
04975.613 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04975.613 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.613 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04975.613 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.613 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04975.613 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04975.613 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.613 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04975.613 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.613 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04975.613 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04975.613 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.613 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04975.613 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04975.614 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04975.614 INFO    SCRIPTING:  45012( 54111)/E:       AI_A2A_GCICAP00328.ProcessDetected(
Tactical Overview

- Target AREA.1 ( 1 ): ( #2 ) vfa94_template#005-02, Pilot #010, 

- Target AREA.3 ( 3 ): ( #1 ) Pilot #004, 
  - ru132_template#003 ( CAP - Engaging ): ( #2 ) F:  64, D:100 - Executing

- Target AREA.4 ( 4 ): ( #2 ) Pilot #005, Pilot #006, 

- Target AREA.9 ( 6 ): ( #2 ) vfa94_template#006-02, vfa94_template#006-01, 

- Target AREA.10 ( 7 ): ( #1 ) vfa94_template#002-02, 

- No Targets:
  - ru132_template#004 ( CAP - Patrolling ): ( #2 ) F:  95, D:100 - Executing

- 2 Tasks)
04975.973 INFO    SCRIPTING:  43651( 44592)/E:       AI_A2A_GCICAP00303.CanCAP({["CapCount"]=2,})
04976.320 INFO    SCRIPTING:  33324(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="Detect",[3]="Detecting",})
04976.320 INFO    SCRIPTING:  33324(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="Detect",[3]="Detecting",})
04976.334 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.334 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.398 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.398 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.464 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.464 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.533 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.533 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.597 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.597 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.665 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.665 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00326.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04976.731 INFO    SCRIPTING:  33347(    -1)/E:     DETECTION_AREAS00301.function({[1]="Detecting",[2]="DetectionGroup",[3]="Detecting",})
04977.618 WARNING LOG: 1 duplicate message(s) skipped.
04977.618 INFO    SCRIPTING:  54107(    -1)/E:       AI_A2A_GCICAP00303.function(onafterReport)
04977.618 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04977.618 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04977.618 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT15927.Flush({[1]="Objects in Set:",[2]="ru132_template#003-02, ru132_template#003-01, ",})
04977.618 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04977.618 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04977.618 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00303.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT16217.Flush({[1]="Objects in Set:",[2]="ru132_template#004-02, ru132_template#004-01, ",})
04977.618 INFO    SCRIPTING:  45012( 54111)/E:       AI_A2A_GCICAP00303.ProcessDetected(
Tactical Overview

- Target AREA.5 ( 3 ): ( #2 ) ru132_template#003-02, ru132_template#003-01, 

- Target AREA.6 ( 4 ): ( #2 ) ru132_template#004-02, ru132_template#004-01, 

- No Targets:
  - vfa94_template#005 ( CAP - Patrolling ): ( #1 ) F: 152, D:100 - Executing
  - vfa94_template#006 ( CAP - Patrolling ): ( #2 ) F: 149, D:100 - Executing
  - vfa94_template#002 ( CAP - Holding ): ( #1 ) F:  27, D:100 - Executing

- 3 Tasks)
04977.618 INFO    SCRIPTING:  54107(    -1)/E:       AI_A2A_GCICAP00328.function(onafterReport)
04977.618 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04977.618 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04977.618 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT00552.Flush({[1]="Objects in Set:",[2]="vfa94_template#005-02, Pilot #010, ",})
04977.618 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04977.618 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04977.618 INFO    SCRIPTING:  44530( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Defender Group Name: ru132_template#003, Size: 2)
04977.618 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.618 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03018.Flush({[1]="Objects in Set:",[2]="Pilot #004, ",})
04977.618 INFO    SCRIPTING:  44530( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Defender Group Name: ru132_template#003, Size: 2)
04977.619 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04977.619 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.619 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04977.619 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.619 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT03500.Flush({[1]="Objects in Set:",[2]="Pilot #005, Pilot #006, ",})
04977.619 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04977.619 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.619 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04977.619 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.619 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT17880.Flush({[1]="Objects in Set:",[2]="vfa94_template#006-02, vfa94_template#006-01, ",})
04977.619 INFO    SCRIPTING:   9972( 44947)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04977.619 INFO    SCRIPTING:  44517( 44855)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.619 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04977.619 INFO    SCRIPTING:  44517( 44885)/E:       AI_A2A_GCICAP00328.CountDefendersEngaged(Counting Defenders Engaged for Attacker:)
04977.619 INFO    SCRIPTING:   9972( 44519)/E:            SET_UNIT18110.Flush({[1]="Objects in Set:",[2]="vfa94_template#002-02, ",})
04977.619 INFO    SCRIPTING:  45012( 54111)/E:       AI_A2A_GCICAP00328.ProcessDetected(

 

Edit: And even if i set a squadron limit like:

RED_A2A_GCICAP:SetSquadron( "ru145", "Batumi", { "ru145_template" }, 8 )

The enemy keeps on spawning planes.

 

Edit2: Or is it 4 groups and not units??

When setting it to 4 i had 8 planes spawning. Aww i cant get my head around this.

counterstrike_v3.miz


Edited by Rivvern

[sIGPIC][/sIGPIC]

 

We are looking for Swedish members!

http://www.masterarms.se

Link to comment
Share on other sites

Some more fixes...

 

 

  • AI_CAP_ZONE: Fixed issues with CAP engaging (independent CAP so not related to GCICAP).
  • AI_CAS_ZONE: Fixed issues with CAS engaging.

 

 

This to help Hijack.

 

 

Ensure you download and include the latest moose.lua from the MOOSE release page: https://github.com/FlightControl-Master/MOOSE/releases

 

 

FC

 

FC, what exactly was the fix? I looked at the code but didn't really understand what the differences were.

 

For me AI_CAP has worked for a long while without issues especially with regarding to engagement. At least as far as I can tell.

Link to comment
Share on other sites

FC, what exactly was the fix? I looked at the code but didn't really understand what the differences were.

 

For me AI_CAP has worked for a long while without issues especially with regarding to engagement. At least as far as I can tell.

 

The fix aligned also in AI_CAP_ZONE and AI_CAS_ZONE the method how the "next engagement step" is calculated. This fix has nothing to do with GCICAP or AI_A2A_DISPATCHER... Or actually it has ...

For a slick GCICAP implementation, I changed the method how waypoints are triggering script calls, as part of the AI_A2A_DISPATCHER and CONTROLLABLE:Route is implemented. AI_A2A_CAS and AI_A2A_CAP were developed to be used in AI_A2A_DISPATCHER, where these classes have an optimized method to jump from waypoint to waypoint executed by a script.

 

AI_CAP_ZONE and AI_CAS_ZONE weren't touched for months and implemented the old logic. Running a test mission together with @dexa, we saw that the logic was crashing when the engagement was started by the main demo script. So I fixed this crash, aligning the waypoint hopping method of AI_CAP_ZONE and AI_CAS_ZONE in alignment with AI_A2A_CAP and AI_A2A_CAS.

 

For those who don't know, AI_A2A_CAP and AI_A2A_CAS are executing CAP and CASusing commanded by AI_A2A_DISPATCHER.

AI_CAS_ZONE and AI_CAP_ZONE are classes that perform CAS or CAP independently, having its own detection logic.

 

Maybe I am wrong.

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

I hate to keep harassing with questions, but I'm trying to get my head around scripting and using Moose gives so many options.

 

How am I supposed to use the SETTINGS feature? Included this code at the start but it's returning an error for attempting to index a nil value. I'm assuming I got PlayerName right, since this is the name that always pops up in logs when it indexes my default settings. Anyway the code:

 

ViperSettings = SETTINGS:Set( "Viper" ):SetA2G_MGRS():SetMGRS_Accuracy( 3 )

 

 

Is that the wrong usage?

Link to comment
Share on other sites

I hate to keep harassing with questions, but I'm trying to get my head around scripting and using Moose gives so many options.

 

How am I supposed to use the SETTINGS feature? Included this code at the start but it's returning an error for attempting to index a nil value. I'm assuming I got PlayerName right, since this is the name that always pops up in logs when it indexes my default settings. Anyway the code:

 

ViperSettings = SETTINGS:Set( "Viper" ):SetA2G_MGRS():SetMGRS_Accuracy( 3 )

Is that the wrong usage?

 

SETTINGS is not meant to be used as an instance. It is being managed in the background by the MOOSE system.

 

A settings menu is automatically created when you design a mission using MOOSE. This settings menu can be used by players to tweak how A2G coordinates, A2A coordinates, measurement system and message timing is being displayed.

 

When you use certain classes (and these will grow), the settings choosen by the player will automatically tweak the message formats and timings.

 

Check the class TASK_A2G_DISPATCHER if you wanna try this out a bit...

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Gotcha, so really no way to change the defaults when loading a specific mission. I'll stick to using the menu. Thanks FC for your ongoing support and responsiveness!

 

HOLD! That is another questions and i do have an answer for you there!!!

 

MOOSE creates automatically a _SETTINGS object, that is globally known.

 

You can use this to tweak the settings, for example:

 

      
     _SETTINGS:SetMetric() -- Defaults
     _SETTINGS:SetA2G_BR() -- Defaults
     _SETTINGS:SetA2A_BRAA() -- Defaults
     _SETTINGS:SetLL_Accuracy( 3 ) -- Defaults
     _SETTINGS:SetMGRS_Accuracy( 5 ) -- Defaults
     _SETTINGS:SetMessageTime( MESSAGE.Type.Briefing, 180 )
     _SETTINGS:SetMessageTime( MESSAGE.Type.Detailed, 60 )
     _SETTINGS:SetMessageTime( MESSAGE.Type.Information, 30 )
     _SETTINGS:SetMessageTime( MESSAGE.Type.Overview, 60 )
     _SETTINGS:SetMessageTime( MESSAGE.Type.Update, 15 )

 

Use the IntelliSense in LDT to find the methods attached to _SETTINGS.

I am sure you'll find your way with this!

 

When asking a question, don't just ask about the technicalities on what you try to do, but also provide a bit of context.

That will allow for a broader response too!

 

cheers

FC

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...