Jump to content

MOOSE - Mission Object Oriented Scripting Framework


Recommended Posts

I got stucked and need some help.

Try to make a scipt to get heading and distance from a target plane. That works nice an smooth....but if I let the plane spawn randomly with the following code

 

 

TargetTemplates = { "Target1","Target2","Target3","Target4","Target5","Target6","Target7" }

InterceptSpawnZone = ZONE:New ( "InterceptSpawn" )

ZoneTable = { InterceptSpawnZone }

Target = SPAWN

:New("target")

:InitLimit ( 1, 10 )

:InitRandomizeTemplate( TargetTemplates )

:InitRandomizeZones( ZoneTable )

:InitRandomizeRoute( 1, 2, 2000,20000)

--:InitDelayOn()

:SpawnScheduled( 2, 0.5 )

...I m not able to find the name of the plane. I know it is not "target" but something like "target#001".

 

 

Is there a nice methode to get the name/names from an late activated or randomly spawned object in order to deal with them ( : GetHeading(), :GetFuel()).

 

 

 

I that script above just one plane spawn. How to test multiple planes for heading/fuel/what ever?

 

 

Thanks for some supply

Link to comment
Share on other sites

Is there a nice methode to get the name/names from an late activated or randomly spawned object in order to deal with them ( : GetHeading(), :GetFuel()).

 

In order to work with late activated groups in MOOSE, you can use either:

 

1- SET_GROUP:New() + a filter to target specific groups --> SET_GROUP:FilterPrefixes(Prefixes) & SET_GROUP:FilterStart() + some iterator like -->SET_GROUP:ForEachGroup(IteratorFunction, ...)

 

Example:

 

 

 

--Create a SET_GROUP with a filter in order to target specific late activated groups in the mission--

local GroupSET = SET_GROUP:New()

:FilterPrefixes( "Group prefix in ME" ) --In this case, we're using a prefix filter--

:FilterStart()

 

--Create an iterator function that will check both fuel percentage and heading for alive groups within the SET_GROUP. Notice how GroupSET is being passed as parameter in the iterator function--

local function FuelAndHeading()

GroupSET:ForEachGroup(

function( GroupSET )

 

local NameCheck = GroupSET:GetName()

local FuelCheck = GroupSET:GetFuel()

local HeadingCheck = GroupSET:GetHeading()

 

MESSAGE:New(NameCheck "Fuel:".. FuelCheck.."\n"..NameCheck "Heading:"..HeadingCheck,10):ToRed()

end

)

end

 

--Create an F10 coalition menu structure, which will be used to call the function above (this is optional, of course, the function can be called any other way you like)--

MainMenu = MENU_COALITION:New(coalition.side.RED,"Name of the main menu")

MenuCommand = MENU_COALITION_COMMAND:New(coalition.side.RED,"Get Fuel and Heading!", MainMenu , FuelAndHeading)

 

 

 

2- SPAWN:OnSpawnGroup(SpawnCallBackFunction, SpawnFunctionArguments,...)

 

Example:

 

 

 

--Create the same kind of fuel / heading checking function to be called, like we did before. This time SpawnGroup is being passed as parameter, though--

local function FuelAndHeading(SpawnGroup)

 

local NameCheck = SpawnGroup:GetName()

local FuelCheck = SpawnGroup:GetFuel()

local HeadingCheck = SpawnGroup:GetHeading()

 

MESSAGE:New(NameCheck "Fuel:".. FuelCheck.."\n"..NameCheck "Heading:"..HeadingCheck,10):ToRed()

end

 

--Create the SpawnObject and include :OnSpawnGroup in it. We use an "injected" function to create an F10 coalition menu structure (which we'll use to call the function above).--

--Notice how SpawnGroup is being passed as parameter by the coalition menu command responsible for calling the function above--

--(We can call the function in other ways, of course, don't need to use F10 menu commands if we don't want to)--

local SpawnObject = SPAWN

:New( "Name of the late activated group in ME" )

:OnSpawnGroup(

function( SpawnGroup )

MainMenu = MENU_COALITION:New(coalition.side.RED,"Name of the main menu")

MenuCommand = MENU_COALITION_COMMAND:New(coalition.side.RED,"Get Fuel and Heading!", MainMenu ,FuelAndHeading, SpawnGroup)

end

)

--After SpawnObject has been defined, we actually spawn it using this--

SpawnObject:Spawn()

 

--I haven't tested this, though! I'm not convinced SpawnGroup parameter will be enough for this to work properly... in any case, this shows how :OnSpawnGroup works--

 

 

Hope this helps.


Edited by Hardcard
Link to comment
Share on other sites

Hi everyone !

 

Quick question : I have a GROUP of two choppers I want to patrol an area around an island. I used this method to do it :

 

BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol")
BlueHeliSirriPatrolGrp1 = BlueHeliSirriPatrolGrpSpawner:SpawnInZone(SirriAirbaseZone, true)
BlueHeliSirriPatrolGrp1:PatrolZones({SirriAirbaseZone}, 100)

 

It works but I met to issues :

1 - In about 5 to 10 minutes, my chopper land on the island's airbase

2 - In lot of attempts, sometimes they make a turn above the water and (maybe because of too much bugs on the windshield), one of the chopper just crash into the water...

 

For the first issue, could it be because of fuel ? They should have full tank at start...

For the second one, is it because of the natural behavior of the chopper ?

 

Thanks for your help :thumbup:

I'm french (nobody's perfect :smilewink:) so don't be too hard with my english :thumbup:

 

FC3 | A-10C | Mirage 2000C | F/A-18 | KA-50 | UH-1H | Mi-8 | Combined Arms

Link to comment
Share on other sites

@Z4ng3tsu

 

Don't know about AI helicopter behaviour, but I believe you can make your code shorter.

 

 

[color="Blue"]--Your code--[/color]
BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol")
BlueHeliSirriPatrolGrp1 = BlueHeliSirriPatrolGrpSpawner:SpawnInZone(SirriAirbaseZone, true)
BlueHeliSirriPatrolGrp1:PatrolZones({SirriAirbaseZone}, 100)

[color="Blue"]--Shorter version A (single line format)--[/color]
BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol"):SpawnInZone(SirriAirbaseZone, true):PatrolZones({SirriAirbaseZone}, 100)

[color="blue"]--Shorter version B (multiple line format)--[/color]
BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol")
:SpawnInZone(SirriAirbaseZone, true)
:PatrolZones({SirriAirbaseZone}, 100)

[color="Blue"]--I don't think those extra variables are needed (unless you mean to use them in separate functions)--[/color]

 


Edited by Hardcard
Link to comment
Share on other sites

@Z4ng3tsu

 

Don't know about AI helicopter behaviour, but I believe you can make your code shorter.

 

 

[color="Blue"]--Your code--[/color]
BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol")
BlueHeliSirriPatrolGrp1 = BlueHeliSirriPatrolGrpSpawner:SpawnInZone(SirriAirbaseZone, true)
BlueHeliSirriPatrolGrp1:PatrolZones({SirriAirbaseZone}, 100)

[color="Blue"]--Shorter version A (single line format)--[/color]
BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol"):SpawnInZone(SirriAirbaseZone, true):PatrolZones({SirriAirbaseZone}, 100)

[color="blue"]--Shorter version B (multiple line format)--[/color]
BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol")
:SpawnInZone(SirriAirbaseZone, true)
:PatrolZones({SirriAirbaseZone}, 100)

 

Thanks Hardcard,

 

Yes, as I begin with Moose I split my calls just to make sure everything work step by step. I will optimize it later :thumbup:

I'm french (nobody's perfect :smilewink:) so don't be too hard with my english :thumbup:

 

FC3 | A-10C | Mirage 2000C | F/A-18 | KA-50 | UH-1H | Mi-8 | Combined Arms

Link to comment
Share on other sites

1. Sounds like a fuel issue. Double check they are starting with full fuel. If so, could be a bug with either DCS (most likely) or Moose. There have been DCS fuel bugs lately.

2. Lousy DCS AI. Not sure there is anything you can do there.

 

Hi everyone !

 

Quick question : I have a GROUP of two choppers I want to patrol an area around an island. I used this method to do it :

 

BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol")
BlueHeliSirriPatrolGrp1 = BlueHeliSirriPatrolGrpSpawner:SpawnInZone(SirriAirbaseZone, true)
BlueHeliSirriPatrolGrp1:PatrolZones({SirriAirbaseZone}, 100)

 

It works but I met to issues :

1 - In about 5 to 10 minutes, my chopper land on the island's airbase

2 - In lot of attempts, sometimes they make a turn above the water and (maybe because of too much bugs on the windshield), one of the chopper just crash into the water...

 

For the first issue, could it be because of fuel ? They should have full tank at start...

For the second one, is it because of the natural behavior of the chopper ?

 

Thanks for your help :thumbup:

Link to comment
Share on other sites

@Skippa

 

I had a similar issue with LDT some months back.

If I remember correctly, I solved it by doing this:

 

-Uninstall Java using this tool

 

-Remove all traces of any previous LDT installations from your system

 

-Download/Install Java 8 from here

 

-Use this LDT build

 

-Then simply follow the rest of instructions from

 

PS. I'm assuming you have a 64bit version of Windows, btw.

 

Thank you a ton man...got it working. :thumbup:

Link to comment
Share on other sites

1. Sounds like a fuel issue. Double check they are starting with full fuel. If so, could be a bug with either DCS (most likely) or Moose. There have been DCS fuel bugs lately.

2. Lousy DCS AI. Not sure there is anything you can do there.

 

Thanks for your feedback.

 

1-I think it is moose a bug. My helos start with full fuel tank and I observed the same behaviour with my infantry troops stopping patrol at a moment. I'll try to trace the event in the log to see what's going on and if I can find a bug in Moose (if it is in Moose).

 

2-Yeap definitely DCS behaviour... Sometimes it's ok, sometimes it's not...

I'm french (nobody's perfect :smilewink:) so don't be too hard with my english :thumbup:

 

FC3 | A-10C | Mirage 2000C | F/A-18 | KA-50 | UH-1H | Mi-8 | Combined Arms

Link to comment
Share on other sites

Hi everyone !

 

Quick question : I have a GROUP of two choppers I want to patrol an area around an island. I used this method to do it :

 

BlueHeliSirriPatrolGrpSpawner = SPAWN:New("BlueHeliSirriAirbasePatrol")
BlueHeliSirriPatrolGrp1 = BlueHeliSirriPatrolGrpSpawner:SpawnInZone(SirriAirbaseZone, true)
BlueHeliSirriPatrolGrp1:PatrolZones({SirriAirbaseZone}, 100)

 

It works but I met to issues :

1 - In about 5 to 10 minutes, my chopper land on the island's airbase

2 - In lot of attempts, sometimes they make a turn above the water and (maybe because of too much bugs on the windshield), one of the chopper just crash into the water...

 

For the first issue, could it be because of fuel ? They should have full tank at start...

For the second one, is it because of the natural behavior of the chopper ?

 

Thanks for your help :thumbup:

 

So in order to give some feedback if one day someday is just like and does not read carefully the documentation of Moose's framework : The PatrolZones method is restricted to ground units only !

This is why my chopper were landing after what it seems to be one default waypoint.

 

To have a chopper patroling a zone, an AI_CAS_ZONE should be used (or generation of waypoints inside the patrol zone but that's less efficient I think)

 

For the second issue, it's just DCS behavior.

I'm french (nobody's perfect :smilewink:) so don't be too hard with my english :thumbup:

 

FC3 | A-10C | Mirage 2000C | F/A-18 | KA-50 | UH-1H | Mi-8 | Combined Arms

Link to comment
Share on other sites

  • 2 weeks later...

Lately, I've been playing around with SEAD evasion mechanics for AA groups.

 

In the process, I've noticed that the MOOSE SEAD functionality for this doesn't seem to work:

https://flightcontrol-master.github.io/MOOSE_DOCS/Documentation/Functional.Sead.html##(SEAD).New

 

According to the MOOSE documentation, this should be enough:

 

SEAD:New({ 'name of an AA group in ME', 'name of another AA group in ME', etc... })

 

However, this doesn't seem to disable AA group radars when anti-radiation missiles are fired at them.

Also, AA units only seem to move the first time there's an explosion nearby, they seem to stop moving after that.

 

Out of curiosity, I opened the declaration for the MOOSE script example above and found something odd (possible bug?):

 

local SEADWeaponName = EventData.WeaponName -- return weapon type

-- Start of the 2nd loop

self:T( "Missile Launched = " .. SEADWeaponName )

if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD

 

As far as I know, EventData.WeaponName doesn't actually return the string values specified in the last line, it returns different ones.

 

For instance, for Kh-58U missiles, EventData.WeaponName will return the string "weapons.missiles.X_58" instead of "KH-58".

Same thing applies to the rest of missiles listed.

 

If this is indeed an error, then that last line should look like this:

 

if SEADWeaponName == "weapons.missiles.X_58" or SEADWeaponName == "weapons.missiles.X_25MP" or SEADWeaponName == "weapons.missiles.AGM_88" or SEADWeaponName == "weapons.missiles.X_31P" then

--I removed the KH-31A missile since it's an anti-ship version, not anti-radiation like the KH-31P

 

Am I missing something here? Is Functional.SEAD still WIP?

 

PS. Btw, this is the MOOSE SEAD evasion script I've been working on. Plenty of room for improvement, but the results look promising so far.


Edited by Hardcard
Link to comment
Share on other sites

Is it possible to change the AI doctrine in MOOSE? E.g. the minimum distance for launching a certain type of missile or the tactics for approaching the enemy or disengaging?

 

Not really. This isn't possible in any scripting for DCS as far as I know (Moose or otherwise). Except maybe for creating a very complicated script that would continuously create waypoints along the way and moving zones etc and setting various ROE options continuously. Even then you wouldn't be able to control certain missile types etc. So it would basically be a massively complicated script that could potentially bring DCS to its knees and only accomplish 1/10th of you really want. And it probably wouldn't work well.

 

You are basically stuck with the lousy DCS AI for this kind of thing.

Link to comment
Share on other sites

Not really. This isn't possible in any scripting for DCS as far as I know (Moose or otherwise). Except maybe for creating a very complicated script that would continuously create waypoints along the way and moving zones etc and setting various ROE options continuously. Even then you wouldn't be able to control certain missile types etc.

 

It would still be worth a try to implement simple AI improvements. Are there any code templates or examples for this purpose? I have seen lots of Lua codes for MOOSE, but I was not able to pinpoint the right code snippets for my own purpose.

Link to comment
Share on other sites

Maybe someone could help me to understand the CONTROLLABLE class to set AI-waypoints and AI-tasks.

 

 

Edit: I tried the following code to spawn Mig-21s attacking my player group, but they just ignore me and go back to base:

 

local spawn = SPAWN:New( "Iranian Mig 21s" )
local rho = math.random(UTILS.NMToMeters(20), UTILS.NMToMeters(40)) 
local theta = UTILS.RandomGaussian(0, 70, 225, 495)
local zone = ZONE_UNIT:New("Randomly Spawned Unit", UNIT:FindByName("Pilot Pilot"), 100, {rho=rho, theta=theta, relative_to_unit=true})
spawn:SpawnInZone(zone)




   
Mig21Group = Group.getByName( "Iranian Mig 21s#001" )
Mig21Controller = Mig21Group:getController()
PlayerGroup = Group.getByName( "Player Group" )

env.info( "Player ID: " .. PlayerGroup:getID() )
env.info( "Mig21 ID: " .. Mig21Group:getID() )

TaskAttackGroup = { 
 id = 'AttackGroup', 
 params = { 
   groupId = PlayerGroup:getID(),
    --[[
   weaponType = number,
   expend = enum AI.Task.WeaponExpend,
   directionEnabled = boolean,
   direction = Azimuth,
   altitudeEnabled = boolean,
   altitude = Distance,
   attackQtyLimit = boolean,
   attackQty = number,
    ]]--
 } 
}

Mig21Controller:setTask( TaskAttackGroup )
--Controller.setTask( Mig21Controller, TaskAttackGroup )

Edit: Ok, the solution is that I have used the wrong group name and I should have delayed the task assignment after spawning. So it worked after using "Iranian Mig 21s#001" instead of "Iranian Mig 21s #001" and putting the task assignment in a separate delayed trigger. :)


Edited by Tiramisu
Link to comment
Share on other sites

Looks like you are mixing a lot of different stuff together. Some of this looks like MIST or straight DCS API syntax so not sure whats going on here. That is fine BTW but more difficult to understand.

 

You'll want to checkout the CONTROLLABLE class here https://flightcontrol-master.github.io/MOOSE_DOCS/Documentation/Wrapper.Controllable.html

 

There may or may not be demos available showing how to setup something like this. Check all the demos here: https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/master/GRP%20-%20Group%20Commands

 

What you'll probably also want to do is use OnSpawnGroup() method so that you don't care what your units are called. You can easily just grab the Group that was just spawned. In fact you need to do this in a lot of cases because there will be a delay sometimes with spawning and therefor the object will not be available as of yet.

 

Although perhaps you just discovered that as well.

 

Maybe someone could help me to understand the CONTROLLABLE class to set AI-waypoints and AI-tasks.

 

 

Edit: I tried the following code to spawn Mig-21s attacking my player group, but they just ignore me and go back to base:

 

local spawn = SPAWN:New( "Iranian Mig 21s" )
local rho = math.random(UTILS.NMToMeters(20), UTILS.NMToMeters(40)) 
local theta = UTILS.RandomGaussian(0, 70, 225, 495)
local zone = ZONE_UNIT:New("Randomly Spawned Unit", UNIT:FindByName("Pilot Pilot"), 100, {rho=rho, theta=theta, relative_to_unit=true})
spawn:SpawnInZone(zone)




   
Mig21Group = Group.getByName( "Iranian Mig 21s#001" )
Mig21Controller = Mig21Group:getController()
PlayerGroup = Group.getByName( "Player Group" )

env.info( "Player ID: " .. PlayerGroup:getID() )
env.info( "Mig21 ID: " .. Mig21Group:getID() )

TaskAttackGroup = { 
 id = 'AttackGroup', 
 params = { 
   groupId = PlayerGroup:getID(),
    --[[
   weaponType = number,
   expend = enum AI.Task.WeaponExpend,
   directionEnabled = boolean,
   direction = Azimuth,
   altitudeEnabled = boolean,
   altitude = Distance,
   attackQtyLimit = boolean,
   attackQty = number,
    ]]--
 } 
}

Mig21Controller:setTask( TaskAttackGroup )
--Controller.setTask( Mig21Controller, TaskAttackGroup )

Edit: Ok, the solution is that I have used the wrong group name and I should have delayed the task assignment after spawning. So it worked after using "Iranian Mig 21s#001" instead of "Iranian Mig 21s #001" and putting the task assignment in a separate delayed trigger. :)

Link to comment
Share on other sites

Lately, I've been playing around with SEAD evasion mechanics for AA groups.

 

In the process, I've noticed that the MOOSE SEAD functionality for this doesn't seem to work:

https://flightcontrol-master.github.io/MOOSE_DOCS/Documentation/Functional.Sead.html##(SEAD).New

 

According to the MOOSE documentation, this should be enough:

 

SEAD:New({ 'name of an AA group in ME', 'name of another AA group in ME', etc... })

 

However, this doesn't seem to disable AA group radars when anti-radiation missiles are fired at them.

Also, AA units only seem to move the first time there's an explosion nearby, they seem to stop moving after that.

 

Out of curiosity, I opened the declaration for the MOOSE script example above and found something odd (possible bug?):

 

local SEADWeaponName = EventData.WeaponName -- return weapon type

-- Start of the 2nd loop

self:T( "Missile Launched = " .. SEADWeaponName )

if SEADWeaponName == "KH-58" or SEADWeaponName == "KH-25MPU" or SEADWeaponName == "AGM-88" or SEADWeaponName == "KH-31A" or SEADWeaponName == "KH-31P" then -- Check if the missile is a SEAD

 

As far as I know, EventData.WeaponName doesn't actually return the string values specified in the last line, it returns different ones.

 

For instance, for Kh-58U missiles, EventData.WeaponName will return the string "weapons.missiles.X_58" instead of "KH-58".

Same thing applies to the rest of missiles listed.

 

If this is indeed an error, then that last line should look like this:

 

if SEADWeaponName == "weapons.missiles.X_58" or SEADWeaponName == "weapons.missiles.X_25MP" or SEADWeaponName == "weapons.missiles.AGM_88" or SEADWeaponName == "weapons.missiles.X_31P" then

--I removed the KH-31A missile since it's an anti-ship version, not anti-radiation like the KH-31P

 

Am I missing something here? Is Functional.SEAD still WIP?

 

PS. Btw, this is the MOOSE SEAD evasion script I've been working on. Plenty of room for improvement, but the results look promising so far.

 

I was also unable to get the SEAD evasion to work. The groups did not turn off their radar and only moved after one of them was destroyed, which is a default DCS behavior.

Link to comment
Share on other sites

What you are trying to do is partially possible and unfortunately gets complex quick.

The general approach to this is putting aircraft on weapons hold until you want to let them loose to DCS AI tasks. This is one way you see scripts like GCICAP and such work with borders and so on.

 

 

 

Setting tasks as per what you see in the ME GUI is a lot harder, the CONTROLLABLE docs is pretty advanced stuff and the nuances you already saw like not giving a task to AI makes it RTB and become uncontrollable, are things that will haunt you.

 

 

CAS, SEAD actions in advanced action waypoints are limited. You can only do what the API lets you. However, MOOSE clones this into spawnable AI templates, so you can setup things like not dropping bombs, vertical evasion, using chaff in SAM Wez and so on in the ME then spawn that group as you like, retaining those settings. For engagment ranges, as I said, you can't increase ranges but you can stop AI from engaging by turning off his ROE.

Most of this is achievable, but some i've not had good luck with in years of trying, YMMV.

___________________________________________________________________________

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

Link to comment
Share on other sites

@Silvern

 

It's linked at the bottom of the post you quoted earlier.

 

Anyway, I'm attaching a newer (and more complicated) version of the script + test mission, which includes respawn mechanics and AI aircraft removal after landing.

 

In a nutshell, the script allows for randomized SEAD evasion mechanics (as long as there are no SEAD bandits within 15Km of the AA groups.)

If there are SEAD bandits inside the 15Km killzones, the AA groups will stay active until the area is cleared (this can be changed, of course).

 

SEAD bandit groups are allowed to spawn 6 times, AA groups are allowed to spawn twice (blue) and thrice (red). They'll do so when they're completely destroyed.

 

Perhaps you'll find some useful bits for your own missions :thumbup:

 

PS. Comment out the event messages if they get annoying!

SAM_PARADISE_MOOSE v3.miz

SEAD Test (Ad Infinitum).lua


Edited by Hardcard
Link to comment
Share on other sites

There may or may not be demos available showing how to setup something like this. Check all the demos here: https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/master/GRP%20-%20Group%20Commands

 

Thanks for this link! I have found a very helpful example there called GRP-100 - TaskAttackUnit.lua. Based on that example I changed my code and it seems like it also works, so I do not have to use the basic API from DCS any more:

 

 

local Mig21Group = GROUP:FindByName( "Iranian Mig 21s#001" )
local PlayerGroup = GROUP:FindByName( "Player Group" )

local AttackUnits = PlayerGroup:GetUnits()

local Tasks = {}

for i = 1, #AttackUnits do

 local AttackUnit = PlayerGroup:GetUnit( i )
 Tasks[#Tasks+1] = Mig21Group:TaskAttackUnit( AttackUnit )
end

Tasks[#Tasks+1] = Mig21Group:TaskFunction( "_Resume", { "''" } )

--- @param Wrapper.Group#GROUP HeliGroup
function _Resume( HeliGroup )
 env.info( '_Resume' )

 Mig21Group:MessageToAll( "Resuming",10,"Info")
end

Mig21Group:PushTask( Mig21Group:TaskCombo(Tasks), 30 )

 

 

I have found that site already, but for some reason I am not able to understand this kind of documentation. So I am learning from actual examples instead.

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...