Jump to content

[NEW Script] Advanced Tools for Mission Editor


sunski34

Recommended Posts

Advanced Tools for Mission Editor or ATME is a set of lua classes and functions which intend to simplify DCS World mission editor lua script implementation.

ATME aim is to simplify the creation of single and multiplayer compatible missions, without limiting the number of players. Players entering, destruction or exit mission, the ability of changing slots are fully implemented.

ATME is based on a module concept, the basic module is called ATME Core and have to be loaded imperatively first. Each additional module or ATME User Module created can be generic or dedicated to a mission. Future generic modules will provide additional functionalities. This concept offers great flexibility, allowing users who are not comfortable with lua to create complex interactiv missions with few code.

The Core ATME module brings all the necessary abstraction and interfaces with many of DCS World's functions. These functions organization is primarily oriented towards mission designers. An object approach provides the necessary clarity.

 

ATME Core brings together the following major features:

· Providing global functions including DCS functions (encapsulation), generic (conversions, etc ...) or mathematics (3D vectors, 2D lines, relative positioning, etc.)

· Referencing mission based FARP & Airfields for a theater operation (NEVADA or CAUCASUS for the moment).

· Player objects, AI units, groups and static objects management. Spawn ability, roads or recoveries of route from a given waypoint association etc ...

· Adding specific objects to facilitate mission and interactiv management (radio players menu, smoke, flares, etc ...)

· Multiplayer races with 1/100th, intermediate, lap, total time and rankings, complete management. Creating raids with several races ability.

· Infantry units with dynamic climb in the vehicle, embarkation / disembarkation complete management. Transport of troops (personnel carrier) concept, authorizing the AI unit embarkation on board (ground or helicopters) or player unit (helicopters). Able to creating embarkation zones with smoke or flare position reports.

· Core events triggering which can be processed in the modules (end of embarkation, race events, reporting zone entry into, etc.).

· Complete task management for groups.

· Alarms creation and management allowing triggering of a single or repeated event at a "T" time which can be defined in absolute time, or relative to a flag. This alarm Event will only be available to the module that created the trigger.

· Multi-language support: French, English, German and Russian. Available currently for message and label. Multi-language implementation is the module creator choice &responsibility.

ATME is DCS 1.5.5 (and later) & DCS 2.0.4(and later) compatible.

 

 

This tools took more than 6 months to develop and test....

The first beta version was V1.0.0 uploaded on 12/31/16.

 

 

A great thank to snowsniper for his ideas, help on multiplayer tests and translation.

 

This thread is only for future new versions of ATME. If you have problems or questions use https://forums.eagle.ru/showthread.php?p=3001625#post3001625

 

New version on 03/30/18 : V1.4.0 Be careful, some functions have changed ...

  • Lots of bugs fixed, tested with DCS 2.5. Complete dynamic spawn now works fine.
  • New function ATME.getRandomPlayerFromCoalition to get a player randomly
  • New functions ATME.isPoint2D and ATME.isPoint3D return boolean
  • Complete task management for groups and route. New class ATME.C_Task
  • Add new function addTaskToWaypoint to ATME.C_Route class
  • Add new functions setTask, resetTask, pushTask and popTask to ATME.C_Group class
  • Add new functions addInitialWaypointsFrom and addWaypointsFrom for waypoints copy from another group.
  • Add new function setOption to ATME.C_Group class replacing old functions (one per option before).
  • Modify parameters of function load of ATME.C_AIUnit and ATME.C_Player classes
  • Add a new possibility to unload function of ATME.C_AIUnit and ATME.C_Player classes. Automatic troop disembark when transport vehicle stops.
  • Renamme functions setAircraftTracking and resetAircraftTracking of ATME.C_Area class into setTracking and resetTracking
  • Rename core events AREA_AIRCRAFT_ENTERS and AREA_AIRCRAFT_LEAVES into AREA_ENTERS and AREA_LEAVES
  • Rename functions setAircraftsGroupTracking and resetAircraftsGroupTracking of ATME.C_Area class into setGroupTracking and resetGroupTracking
  • Rename core events AREA_AIRCRAFTS_GROUP_ENTERS and AREA_AIRCRAFTS_GROUP_LEAVES into AREA_GROUP_ENTERS anf AREA_GROUP_LEAVES

 

New version on 04/01/18 : V1.4.1

  • Bug on FAC_ENGAGE_GROUP and FAC_ATTACK_GROUP tasks fixed
  • Add FORMATION option for aircrafts groups

 

New version on 04/22/18 : V1.4.2 (Be careful : some functions have been renammed)

  • Add ATME.C_Stack class for stack management (FIFO and LIFO)
  • Rename ATME.getRandomPlayerFromCoalition into ATME.C_Player.getRandomFromCoalition
  • Remove getBarycentre function of ATME.C_Group
  • Add getPosition to ATME.C_Group to get the group first unit position .
  • Add getRandomUnitPosition function in ATME.C_Group to get a group random unit position
  • Rename setCrossingMultiSegmentTracking function of ATME.C_AIUnit and ATME.C_Player classes into setMultiSegmentTracking
  • Rename resetCrossingMultiSegmentTracking function of ATME.C_AIUnit and ATME.C_Player classes into resetMultiSegmentTracking
  • Add zone extension to "ATTACK_GROUP" and "FAC_ENGAGE_GROUP" to clean a ATME 2D zone.

 

New version on 05/13/18 : V1.4.3

  • New optimizations
  • Several bugs fixed for ATME.C_Route class and for mark functions
  • Add new countries : ALGERIA, KUWEIT, QATAR, OMAN, UNITED_ARAB_EMIRATES
  • Add new readOnly and message parameters to ATME.markToAll and ATME.markToCoalition functions
  • Add new readOnly and message parameters to mark function of ATME.C_Player class
  • All ATME and ATME.C_Player mark creation functions now returns an ID which can be used for remove it when needed
  • Add new ATME.markRemove function to remove a mark by its ID even for player's one
  • Remove soundChange function in ATME.C_Player class
  • Remove ATME.createUserDatas to create proxy table
  • Replace all userDatas proxy table by simple lua table

 

New version on 20/05/18 : V1.4.4

  • New optimizations for players
  • Several bug fixed on signals
  • End of mission handler "onEndMissionHandler" of ATME.C_Module classe works now
  • "EJECTION" event core is removed and replaced with a new parameter named "cause" in onDeletePlayerHandler and onDeleteAIUnitHandler of ATME.C_Module class.

 

New version on 09/09/18 : V1.4.5

  • New optimizations
  • Crash when respawn after a plane destruction fixed
  • Bad waypoint altitude when create new waypoints on a route fixed
  • Several bugs fixed
  • New isPilotDead function for ATME.C_AIUnit and ATME.C_Player classes
  • New isPilotEjected function for ATME.C_AIUnit et ATME.C_Player classes

 

Zip file contains lua ATME core file, link to download : https://forums.eagle.ru/showpost.php?p=3001633&postcount=1

 

 

Thank you and enjoy ATME


Edited by sunski34
Link to comment
Share on other sites

As an occasional mission maker, and lua noob, I enjoy multiplayer mission making, with randomized events to have fun with my friends, and to keep some "surprise" and unknow events

doing stuff like that in original mission editor, can be long and repetitive. the more aircraft player you allow the more conditions you have to trigger.

 

With ATME it was so fun to devellop new module and missions.

It's an Awesome tool !

 

Just give it a try, you can now do complex mission easily.

 

Not matter your level in Lua, noobs like me or more advanced lua user will find here some incredible function and stuff, event handler to personalize, and give some "life" to their Multiplayer missions.

 

basic lua knowledge like table or logical operator still needed but it's easy now to learn on the way, once you anderstood the ATME simple logic ( handler events --> specific action in your user module event relative defined )

 

HAVE FUN ! Hope to see quickly a lot of new modules and mission develloped with this awesome tool.

 

Thanks a lot to Sunski34 for this great and faboulous contribution to the DCS flight sim community. thanks for the amount of work given to this. Long life to ATME !

 

:thumbup::thumbup::thumbup::D


Edited by snowsniper
  • Like 1
 

 i7-10700KF CPU  3.80GHz - 32 GO Ram - - nVidia RTX 2070 -  SSD Samsung EVO with LG  TV screen 40"  in 3840x2150 -  cockpit scale 1:1

- MS FFB2 Joystick  - COUGAR F16 throttle  - Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

@Pikey :

 

It's very difficult because my approach is completely different.

 

ATME is based on callbacks when for example players enter or leave a mission... So you create the function, assign it to have a callback and then your function will be called when event occurs (like player enter -> callback onCreatePlayer).

 

ATME is oriented object too.

 

You will find several examples in that thread (lua code and missions) and full documentation for informations.


Edited by sunski34
Link to comment
Share on other sites

The concept is different.

 

The rescue mission uses ATME_Rescue.lua module which is optimized with ATME abilities of C_F10Menu Class. So it isn't the best way to discover ATME. I will make a video to explain how Rescue works soon. I suggest you to start with basic examples you can find at the beginning of that post.

 

In fact there's two cases if you want a comparison :

  • In other scripts, you have to write code for multiplayer management. In ATME, it's already realised. So writing a mission for mono or multiplayer is quite simple but of course you have to understand the callback concept. Here is the particular approach of ATME. No need to rewrite the world.
  • ATME has a lot of functions and some classes. Here of course, no real difference between ATME and other scripts. Reading documentation is a must.

Important : Using Rescue needs C_Group:changeReadyToBoard function (then group will be ready to embark) and a group must be in the good distance to be loaded (<200m) .

 

Hope that explanation helps you.

Regards


Edited by sunski34
Link to comment
Share on other sites

This User module is to give some sound ambiance for any DCS mission build with ATME,

no matter the number of player. It makes it more immersive.

 

it's like a brick you can add to other.

 

main features :

-- ATC chat simulated and randomized in Air ( some silent part too, from real atc ogg files )

-- specific DCS zone with ground sound ( forest ambiance, meadow , skylark loop ) (engine should be off to listen to it )

-- specific DCS zone in Air, triggerring specific sound (for exemple fly over Kutaisi airport)

 

debuglevel is set to 3 so you can see on screen what is triggered.

you can set debuglevel to 0 in mission editor to have no messages

 

change slot to try each situation. ;-)

...

 

Hi Snowsniper,

 

I too am a big fan for including ambient sounds in the missions I build for the groups I fly with regularly and the feed back is always positive. I have been using your excellent script as the base for my general in mission sounds to great effect....so thank you for that.

 

Now I am a complete novice where Lua is concerned but I have managed to incorporate my preferred sound files with loop durations but i am encountering difficulty when it comes to the files being played when returning to a specific sound file zone eg ZS4.

 

My ZS4 plays an ocean sound as my FARP is close to the shore. I take off and fly out of the zone and the InAir element kicks in which is great. on returning to the FARP and landing I expected the ocean sound to be replayed but instead the standard ground meadow file plays. Any advise as to how to fix that at all? Your help would be greatly appreciated....:helpsmilie::thumbup:

Callsign: NAKED

My YouTube Channel

 

[sIGPIC][/sIGPIC]

Link to comment
Share on other sites

@SUNTAG

 

send me your miz file only, I'll give it a try tomorrow afternoon.

 

Probably a logic cleverless bug from my own scripting ;-)

 

 

mybe on event landing I forgot to test if player is inside a ZS zone or not so it plays the defaut file.

yeah, that's it.

corrected.

 

Open mission editor and remplace sound script V1 by sound script V1.1

Ok I tested it with hot helo, defaut demonstration mission from point Airport to WP2 ( kneeboard) I have the correct specific sound (forest) once landed.

 

Hi Snowsniper,

 

Thank you for the quick response it was very much appreciated..... I tried your revised lua file but it didnt work for me as intended. I looked at the changes you made and I then made a slight amendment. Following that minor change it now works perfectly...but without your assistance i would not have had a clue where to start.....So thank you very much and I have attached an updated version of your script


Edited by SUNTSAG

Callsign: NAKED

My YouTube Channel

 

[sIGPIC][/sIGPIC]

Link to comment
Share on other sites

How to use C_Group:setRoute

 

Here a short video :

 

Remark : If a group is "late activation" then it exists but it's not visible. So other groups may drive around that group. (it's the case on video, second example, ramdom = 1).

 

Try it !

Regards

Link to comment
Share on other sites

Here an other user module brick. [ EN language lua and miz joined]

 

the aim of this user module is to give some usefull information about ATC, active runway, and airport around for Caucasus Theatre

it's not in any case cheating because it's like having in cockpit some paper kneeboard information

you'll still have to turn the knob.;-) but without losing time to search data no matter the Aircraft used.

on Airfield ground, the script with the F10 user menu will gives you 1 airport information

in flight you'll have the choice for nearest airport in a specific NM radius ( see adjustable module variable )

 

14433045_298540757197420_5373264402730634364_n.jpg?oh=de8c3598adee2f90115308a5f93627ad&oe=58E5B71C

 

14463053_298540833864079_5941655554697742085_n.jpg?oh=6125c64951a3081177640128282b144b&oe=59202E16

 

If anyone want to improve it to work also on NTTR and retrieve all necessary airfield data in an other data table in var , feel free to give it a try ;-).

So far it works only for CAUCASUS theatre thanks to Lino germany data.

ATME_airportkneeboardhelp_V1.lua

moduleairportinfo_demo.miz


Edited by snowsniper
 

 i7-10700KF CPU  3.80GHz - 32 GO Ram - - nVidia RTX 2070 -  SSD Samsung EVO with LG  TV screen 40"  in 3840x2150 -  cockpit scale 1:1

- MS FFB2 Joystick  - COUGAR F16 throttle  - Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

New abilities in Tracking waypoints

 

ATME V1.0.3 adds 3 new core event for waypoints tracking and spawn of groups and 4 new functions in ATME.C_Group Class to manage tracking Waypoints.

 

New Event core :

"TRACKING_WAYPOINT" Tracking of the waypoints from 1 to last - 1 (same sequence of numbers than in Mission Editor, so 0 is the first)

events:getCoreEventDatas(id) to get datas :

-> datas.group for the group instance (object of ATME.C_Group class)

-> datas.idWaypoint is the number of waypoint

-> datas.point point in x,y,z of the waypoint

 

"TRACKING_LAST_WAYPOINT" Tracking of the last waypoint of a route

events:getCoreEventDatas(id) to get datas :

-> datas.group for the group instance (object of ATME.C_Group class)

-> datas.point point in x,y,z of the waypoint

 

"GROUP_SPAWN" when spawning a new group

events:getCoreEventDatas(id) to get datas :

-> datas.group for the group instance (object of ATME.C_Group class)

 

4 new functions for ATME_C_Group:

 

Object:setWaypointsTracking(true or false) : false if only the last waypoint is tracked, true for full waypoints tracking

Object:resetWaypointsTracking() -> stop the tracking

Object:isFullWaypointsTracking() -> return true or false if full tracking or not

Object:isWaypointsTracking -> return true or false if tacking (true full or not full tracking, false no tracking).


Edited by sunski34
Link to comment
Share on other sites

3 missions to test...

 

Here is 3 test missions to understand how it's easy to do.

 

If you have question or need help, ask me...

 

You can find specific lua modules for those missions too.

 

Try and enjoy :lol:

test setRoute.miz

RescueTest.miz

test spawn.miz

ATME_setRoute.lua

ATME_spawnTest1.lua

ATME_testRescue.lua


Edited by sunski34
Link to comment
Share on other sites

Repeat Vehicle Spawn Action

 

Hi All,

 

Let me start by saying I am a complete noob when it comes to lua and I learn by trial and error.

 

I am trying to spawn a group of vehicles using a flag function associated with an F10 radio command, which I have managed to achieve. My problem is that I want to make this repeatable on selection of the radio menu action on multiple occasions.

 

So in essence the second third or fourth time the action is selected I want to delete the initial spawned group "copy0" and respawn the group "copy0". Is there an easy way to do this at all???

 

Many thanks

Callsign: NAKED

My YouTube Channel

 

[sIGPIC][/sIGPIC]

Link to comment
Share on other sites

@SUNTSAG : mission and script

 

Hi SUNTSAG,

 

 

I never done that but you can see 2 files attached :

 

-> Mission and lua file.

 

 

The lua file is the basic file (just Handler définition after "--MAIN " in file) and the interesting part to do what you want is between lines 6 and 39 (including blank lines)...

 

To do what you want :

-> Create an Handler onCreatePlayer so menu will be created

-> Add menu and its function F10SpawnCommand

-> spawn and disable group

 

If you add players and change slot, or play in mutiplayer that will work directly.

 

I need to change the name of the group for each spawn/disable. I will do more tests.

 

Thanks for your interest in ATME.

 

Regard

Sunski

test menu spawn and destroy.miz

ATME_menu_spawn_destroy.lua


Edited by sunski34
Link to comment
Share on other sites

essential function to clean the land after spawn is :

group:disable() ( see also manual )

 

be aware you can spawn an other "Unit" from a Unit Template only if you gives it an other name

If name already exist i think it won't works.

 

"group" in group:disable() is the group name retrieved from the name, for exemple,

 

main spawn code :

local err, var1 = ATME.C_GroupSpawnDatas.duplicateFromMissionDatas("origin", "copy #" .. id) -- duplicate the template "origin" to a new unit called "copy #"

 

var1:spawn(pos6) -- spawn function pos6 can be randomised with math.random around initial point.

 

if you give each time an other name, to make all disapear you can do a "for to" like that :

mass disable :

aitab is a table aitab = {unitname1,unitname2,unitname3,unitname4,unitname5} -- table created in the same time you create a spawn unit ( add a value "name" in the table for the new unit)

i is the index of the name in the table from 1 to 5 in this exemple

 

for i=1,5 do

if aitab ~= nil then -- check if index exists

local Groupx = ATME.C_Group.getByName(aitab) -- retrieve the group from the name ( in lua a group or unit is not his name )

if Groupx ~= nil -- check if Groupx exist

then

 

Groupx:disable() -- disable this one

table = nil -- reset the index in table to nil ( empty)

end

end -- will do next i in "for to"

end

 

PS : this thread is intented to be for new version annoucement of main ATME script Engine.

for bugs, assistance, Question and answers, and help like that please use this one

https://forums.eagle.ru/showthread.php?p=3001625#post3001625

 

 

 

have fun.


Edited by snowsniper
 

 i7-10700KF CPU  3.80GHz - 32 GO Ram - - nVidia RTX 2070 -  SSD Samsung EVO with LG  TV screen 40"  in 3840x2150 -  cockpit scale 1:1

- MS FFB2 Joystick  - COUGAR F16 throttle  - Saitek Pro Flight Rudder Pedals

 

Link to comment
Share on other sites

  • Recently Browsing   0 members

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