Jump to content

MOOSE - Mission Object Oriented Scripting Framework


Recommended Posts

MOOSE intro video

 

This short video provides an introduction to the MOOSE framework and value proposition.

 

 

kind regards,

FC


Edited by FlightControl

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

CARGO - Board / Unboard / Transfer cargo groups and units

 

Hi, find some videos explaining how to board / unboard and transfer cargo in the form of groups and units. More will follow.

 

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Thank you for all the work developing MOOSE and making these extremely well done videos explaining everything! I know how much work is involved in the video creation and can only imagine the number of hours it took for MOOSE itself. This is really great stuff and the DCS community is really going to benefit from it. Thank you ~

Link to comment
Share on other sites

Wow....been watch all your stuff. Great work! Your are my superhero!

My Rig: Windows 11 Pro, Intel i7-13700k@5.4GHz, 64GB DDR5 5200 RAM, Gigabyte Z790 AORUS Elite AX, 1TB Samsung EVO 970, RTX4080, Thrustmaster HOTAS WARTHOG + Saitek Pro Flight Pedals, LG 32" 4K 60FPS, ACER 30" 4K 60FPS GSync Display, HP Reverb G2 V2

Link to comment
Share on other sites

GORI VALLEY

 

Started with some real handson sesssions how a complete mission is created:

 

Gori Valley.

 

For this, refer to the following playlists on youtube:

 

FC

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Hello, Flight Control.

Thanks for make the powerful Mission Editing Script System.

 

I have question.

I want print message when clients in zone.

 

I make POLYGON ZONE and I use SET_CLIENT.

but I don't know how to use that.

 

local BLUAF = SET_CLINET:New():Filters...

FENCE_IN = SET_CLIENT:ForEachClientInZone( ZONE NAME,

function()

MESSAGE:New( "FENCE IN", 30, "TEST" ):ToAll()

end, ... )

 

it's right?

how to use? I cant see message.

 

sorry my bad english.

thanks a lot.

Link to comment
Share on other sites

Hello, Flight Control.

Thanks for make the powerful Mission Editing Script System.

 

I have question.

I want print message when clients in zone.

 

I make POLYGON ZONE and I use SET_CLIENT.

but I don't know how to use that.

 

local BLUAF = SET_CLINET:New():Filters...

FENCE_IN = SET_CLIENT:ForEachClientInZone( ZONE NAME,

function()

MESSAGE:New( "FENCE IN", 30, "TEST" ):ToAll()

end, ... )

 

it's right?

how to use? I cant see message.

 

sorry my bad english.

thanks a lot.

 

Hi there, thanks for your interest.

You understand the idea, but it is normal you're having difficulties with the syntax and coherence of the objects. A good example tells a thousand words. Ok see if tomorrow I can provide you with an example link. Maybe have a further look in the meanwhile to those videos posted today.. Gori valley may he out interest to you.

Fc

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Time Based Scoring

 

Hello again FlightControl. :)

 

I'm currently building a kind "King of Hill" mission where a score will be given as long you hold an Airbase or location. Is it a way to use the scoring class to give players custom scores based on side.coaltions state in a scheduler function?

 

I have tried this, but it does not work.

 

SCHEDULER:New(nil,function ()
 local currentABHolder = ab:GetCoalition()
 if (currentABHolder==coalition.side.BLUE) then 
   players = SET_CLIENT:New():FilterCoalitions("blue"):FilterStart()
 
   players:ForEachClient(function (playerUnits)
   if (playerUnits:InAir()==true or debugging == true) then
     --Add some score
     scoring:_AddMissionScore(mission,playerUnits,"For holding Senaki-Kolkhi and bravery",1)
     env.info("Found a player in air")
   end
  
 end
 )
 end
end,{},15,1

Regards

 

Wingthor

Moose framework contributor

Link to comment
Share on other sites

Hello again FlightControl. :)

 

I'm currently building a kind "King of Hill" mission where a score will be given as long you hold an Airbase or location. Is it a way to use the scoring class to give players custom scores based on side.coaltions state in a scheduler function?

 

I have tried this, but it does not work.

 

SCHEDULER:New(nil,function ()
 local currentABHolder = ab:GetCoalition()
 if (currentABHolder==coalition.side.BLUE) then 
   players = SET_CLIENT:New():FilterCoalitions("blue"):FilterStart()
 
   players:ForEachClient(function (playerUnits)
   if (playerUnits:InAir()==true or debugging == true) then
     --Add some score
     scoring:_AddMissionScore(mission,playerUnits,"For holding Senaki-Kolkhi and bravery",1)
     env.info("Found a player in air")
   end
  
 end
 )
 end
end,{},15,1

Regards

 

Wingthor

 

Whooo, Wingthor, you need some training, are you on our slack channels already?

 

Sv.

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Guys, who is using AI_PATROLZONE already in their missions?

Would like to rename the class to AI_PATROL_ZONE, to get the naming consistent.

 

I guess not many people are already using it, right, as it is new.

 

Sven

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Im on TAWs slack, but not on any else, do you have slack channel too? I would love to get some training, if I can have some!

 

Send me a PM with your email. You'll receive an invite from slack.

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Hi, I have a question. How difficult is to update MOOSE if ED update the game and the framework needs to be udated?

 

I know MIST had to update their scripts whenever ED changed something.

 

Good question.

 

First of all, ED should not change things without an early notification. We can keep the assumption that the DCS API is backwards compatible from version to version. So, the framework should provide a stable future.

 

That being said... If ED does change a function (this has happened), then there is always the risk that the framework needs to change too. But there is some difference in what moose does and what mist does. Moose models processes, and wraps complexity. So does mist, but at a lower level. So, the risk that if ED changes something, that moose also needs to be adapted is less than with mist. It also helps to overcome bugs. I was able to overcome the client group bug without having to change syntax in the moose framework. All was solved internally through a workaround enabling at least to set menus on groups and send messages through obtaining the group id through the templates. Of course, could not solve all, but neither could mist, but it did help the guys who used CLIENT as the class managing slots.

 

The risk with moose however, is that since I am not perfect and don't have a glass bowl, that I made a mistake in a design and may have to ask you to change somethings. These changes will be well communicated and will be limited to textual changes. But since your mission script that you developed using moose is in one file per mission, change management is a lot easier. As classes are more used and optimized, the risk that something has to change will decrease over time.

 

So, in a nutshell, the risk will always be there, but I really try to minimize that risk.

On the other hand, as history shows, dealing with ED bugs is a suffer for all who do scripting, with or without moose or mist.

 

It speaks for itself that there is a trade off to be made for those who want to use a framework, having the advantage to do complex things faster, but with an extra dependency on some code written by a Belgian. Those who don't want to take that risk i advise to stay away (never trust the Belgians). Just know that the code is managed and I hope that in the near future there will come some recognition from ED to provide better means to foresee the future.... Like sharing an early release of dcs for regression testing using defined use cases.

 

Ib promise you however that the AI_PATROLZONE will change, Hehe my question, who is using it?

 

Sven


Edited by FlightControl

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

Added some new videos to process a CAP, CAS and PATROL

 

All,

 

Please find these new playlists on the youtube channel, explaining the concepts behine 3 new classes that will be added to the MOOSE framework very soon:

 

AI_PATROL_ZONE: Patrol a zone, detect targets, don't engage.

AI_CAP_ZONE: Patrol a zone, detect targets and engage intruders through Combat Air Patrol.

AI_CAS_ZONE: Patrol a zone, detect targets, and engage within an Engaement zone to prform Close Air Support.

 

These classes are currently in beta stage, meaning, they will have issues, BUT, as people start using them and the issues are resolved, these will become very good objects to heavily simplify mission building using the MOOSE framework.

 

Demo missions and videos will be added ...

So, subscribe to the channel if you want to receive updates.

 

Here are the new playlists to watch out for:

 

Patrolling:

 

Combat Air Patrol:

 

Close Air Support:

 

kind regards,

FC

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

So the AI_PATROL_ZONE would be appropiate for example for AWACS. What happens when the RTB event happens, does it start the process again automaticly or I need to do something else? Thanks.

 

Oh another question, I have recently saw the CAS-001 example. What happens if you don't know the name of the group and the number of units inside the target zone?

 

Because on a dynamic enviroment that would be difficult or impossible to know.

 

Thanks again.


Edited by Ignition
Link to comment
Share on other sites

All,

 

Please find these new playlists on the youtube channel, explaining the concepts behine 3 new classes that will be added to the MOOSE framework very soon:

 

AI_PATROL_ZONE: Patrol a zone, detect targets, don't engage.

AI_CAP_ZONE: Patrol a zone, detect targets and engage intruders through Combat Air Patrol.

AI_CAS_ZONE: Patrol a zone, detect targets, and engage within an Engaement zone to prform Close Air Support.

 

These classes are currently in beta stage, meaning, they will have issues, BUT, as people start using them and the issues are resolved, these will become very good objects to heavily simplify mission building using the MOOSE framework.

 

Here are the new playlists to watch out for:

 

Patrolling:

 

Combat Air Patrol:

 

Close Air Support:

 

kind regards,

FC

 

Just published these modules on github.

Also new videos of the CAP module demos (including how to code) have been published on YouTube. So, subscribe to the channel if you want to receive updates

 

Fc

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

So the AI_PATROL_ZONE would be appropiate for example for AWACS. What happens when the RTB event happens, does it start the process again automaticly or I need to do something else? Thanks.

 

Oh another question, I have recently saw the CAS-001 example. What happens if you don't know the name of the group and the number of units inside the target zone?

 

Because on a dynamic environment that would be difficult or impossible to know.

 

Thanks again.

 

1. RTB event: The AI_ classes send the AI back to base in 3 situations:

- The group is out of fuel beyond a given treshold.

- The group is damaged beyond a given treshold.

- The RTB event is programmatically called...

In these cases, the AI will land.

 

Now... When you're using the AI_BALANCER to have the AI being balanced, the AI_BALANCER class will automatically respawn the AI, using the SPAWN object provided in the :New() constructor of the AI_BALANCER. In this situation, you have to do nothing.

 

When you're using the SPAWN class or the GROUP class to respawn your AI, YOU'LL HAVE TO RESET your AI_PATROL_ZONE, AI_CAS_ZONE or AI_CAP_ZONE objects. The objects will have the state "Returning" due to the fact of the RTB event. You can reset the objects easily with the :__Reset( 1 ) or :Reset() event triggers, which reset the AI_ objects processes asynchronously or synchronously respectively. Note however, that you'll need to restart the processes again using the :__Start( seconds) or :Start() event triggers.

 

Or maybe you can make it up yourself. Let me know. Let me try to write a demo showing this.

 

FC

[TABLE][sIGPIC][/sIGPIC]|

[/TABLE]

Link to comment
Share on other sites

So the AI_PATROL_ZONE would be appropiate for example for AWACS. What happens when the RTB event happens, does it start the process again automaticly or I need to do something else? Thanks.

 

Oh another question, I have recently saw the CAS-001 example. What happens if you don't know the name of the group and the number of units inside the target zone?

 

Because on a dynamic enviroment that would be difficult or impossible to know.

 

Thanks again.

 

2. If you don't know the group...

Let me tell you, you always know your group... And you always know the amount of units inside the group.

 

In moose, just search for the GROUP object using the method :FindByName( "Name" ) or, if you have the DCS Group object ( From the DCS API), you can get the corresponding GROUP wrapper object using :Find( DcsGroupObject )

 

You get the DCS Group object for example when you develop a DO SCRIPT at a waypoint in the mission editor. The DCS Group object is given in the ... "Variable" (yes. 3 points), so when you want to control the group for which the waypoint is, you can just write MooseGROUPObject = GROUP:Find( ... ) as the first statement in the DO SCRIPT.

 

Having the MooseGROUPObject, you can retrieve the amount of units with AmountUnits = MooseGROUPObject:GetSize()

 

Note that you can also write ...:getSize() to retrieve the amount of units in a group, using the DCS API.

 

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