Adding aircraft to a ship or airfield?

All discussions & material related to Command's Lua interface

Moderators: RoryAndersonCDT, michaelm75au, angster, MOD_Command

Post Reply
ProdigyofMilitaryPride
Posts: 106
Joined: Thu Apr 16, 2015 11:54 pm

Adding aircraft to a ship or airfield?

Post by ProdigyofMilitaryPride »

As I'm crafting a scenario involving a Carrier Strike Group in '93 appearing via LUA, how do I add the aircraft to the carrier itself and its escorts? Thanks. You can link me up to another thread if need-be.
"The courageous must protect freedom." - Dwight D. Eisenhower
"Anything built by human hands can be destroyed. This is no exception." - Kei "Edge" Nagase, Ace Combat 5: The Unsung War
ProdigyofMilitaryPride
Posts: 106
Joined: Thu Apr 16, 2015 11:54 pm

RE: Adding aircraft to a ship or airfield?

Post by ProdigyofMilitaryPride »

And a little more elaboration - I'm wanting to add these aircraft to the carrier and its escorts amid a script in which a group is being created. If you've got the advice for me, shoot a reply, please.
"The courageous must protect freedom." - Dwight D. Eisenhower
"Anything built by human hands can be destroyed. This is no exception." - Kei "Edge" Nagase, Ace Combat 5: The Unsung War
KnightHawk75
Posts: 1850
Joined: Thu Nov 15, 2018 7:24 pm

RE: Adding aircraft to a ship or airfield?

Post by KnightHawk75 »

Cool, that should be no problem.

Here is a recent example I posted for doing it either as you create the unit, or after the fact:
https://www.matrixgames.com/forums/tm.asp?m=4803975#

I'll repaste it here with one minor tweek, the original used c.guid, and seems must be c.name;
and I added a line that assigns the group name to the Ship after it's generated.

Code: Select all

 local c, u,retval;
 c = ScenEdit_AddUnit({type = 'Ship', name = 'MyCarrier', loadoutid = 0,
     heading = 0, dbid = 2370, side = 'Blue', Latitude="S4.50.00",Longitude="W5.00.00",
     autodetectable="false",holdfire="true",proficiency=4,speed=0});
 c.group = 'MyCarrierGroup';
 u = ScenEdit_AddUnit({type = 'Aircraft', name = 'F-35 single', loadoutid = 10098,
     heading = 0, dbid = 824, side = 'Blue', Latitude="N00.50.00",Longitude="E0.50.00",
     altitude="0 ft",autodetectable="false",holdfire="true",proficiency=4,speed=350,
     base=c.name}); -- <<--- base= parameter
 
 --or exclude base= parameters above in unit creation and after creation use..
 --retval = ScenEdit_HostUnitToParent({HostedUnitNameOrID=u.guid,SelectedHostNameOrID=c.guid})
 --if retval == true then print(string.format('Successfully inserted %s into %s',u.name,c.name)); end
 c=nil;u=nil;retval=nil;
 
You can duplicate 'c' lines all you want for each ship you want.. same for u and aircraft. Or if many are the same you can use a for loop to save you some paste and changing if many are the same ship type.

Example of the above but adding 12 of the same f-35's to the carrier named 'Knightrider #1 -#12':

Code: Select all

 local c, u,retval;
 c = ScenEdit_AddUnit({type = 'Ship', name = 'MyCarrier', loadoutid = 0,
     heading = 0, dbid = 2370, side = 'Blue', Latitude="S4.50.00",Longitude="W5.00.00",
     autodetectable="false",holdfire="true",proficiency=4,speed=0});
 c.group = 'MyCarrierGroup';
 for i=1,12 do
 u = ScenEdit_AddUnit({type = 'Aircraft', name = 'KnightRider #' .. i, loadoutid = 10098,
     heading = 0, dbid = 824, side = 'Blue', Latitude="N00.50.00",Longitude="E0.50.00",
     altitude="0 ft",autodetectable="false",holdfire="true",proficiency=4,speed=350,
     base=c.name}); -- <<--- base= parameter
 
 --or exclude base= parameters above in unit creation and after creation use..
 --retval = ScenEdit_HostUnitToParent({HostedUnitNameOrID=u.guid,SelectedHostNameOrID=c.guid})
 --if retval == true then print(string.format('Successfully inserted %s into %s',u.name,c.name)); end
 end
 c=nil;u=nil;retval=nil;
 
Let me know if you still have questions or are unsure of how to attempt something or what a line means\does.
ProdigyofMilitaryPride
Posts: 106
Joined: Thu Apr 16, 2015 11:54 pm

RE: Adding aircraft to a ship or airfield?

Post by ProdigyofMilitaryPride »

I found out there was meant to be a matching element, what am I missing here?
>> local c, u,retval;
c = ScenEdit_AddUnit({type = 'Ship', name = 'MyCarrier', loadoutid = 0,
heading = 0, dbid = 2370, side = 'Blue', Latitude="S4.50.00",Longitude="W5.00.00",
autodetectable="false",holdfire="true",proficiency=4,speed=0});
c.group = 'MyCarrierGroup';
u = ScenEdit_AddUnit({type = 'Aircraft', name = 'F-35 single', loadoutid = 10098,
heading = 0, dbid = 824, side = 'Blue', Latitude="N00.50.00",Longitude="E0.50.00",
altitude="0 ft",autodetectable="false",holdfire="true",proficiency=4,speed=350,
base=c.name}); -- <<--- base= parameter

--or exclude base= parameters above in unit creation and after creation use..
--retval = ScenEdit_HostUnitToParent({HostedUnitNameOrID=u.guid,SelectedHostNameOrID=c.guid})
--if retval == true then print(string.format('Successfully inserted %s into %s',u.name,c.name)); end
c=nil;u=nil;retval=nil;
ERROR: Sequence contains no matching element

And in trying to craft the code so far for a scenario I'm making, I keep getting a Syntax error by the ", proficiency=4, speed=350, basename=USS George Washington});.
local c, u retval;
c = ScenEdit_AddUnit({type = 'Ship', name = 'USS George Washington', heading = 85, dbid = 657, side = 'USN', Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
c.group='George Washington CSG';
u = ScenEdit_AddUnit({type = 'Aircraft', name = "Dog", loadoutid = 17020, heading = 85, dbid = 46, side = 'USN', Latitude='N32.51.55', Longitude = "W13.43.21', autodetectable='false',holdfire="false", proficiency=4, speed=350, basename=USS George Washington});
c = ScenEdit_AddUnit({type = 'Ship', name = 'USS Thomas S. Gates', heading = 85, dbid = 1054, side = 'USN', Latitude = "32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
c.group='George Washington CSG'
c = ScenEdit_AddUnit({type = 'Ship', name = 'USS San Jacinto', heading = 85, dbid = 628, side = 'USN', Latitude = "32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
c.group='George Washington CSG'
c = ScenEdit_AddUnit({type = 'Ship', name = 'USS Barry', heading = 85, dbid = 112, side = 'USN', Latitude = "32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
u.group='George Washington CSG'
c = ScenEdit_AddUnit({type = 'Ship', name = 'USS Deyo', heading = 85, dbid = 810, side = 'USN', Latitude = "32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});

--or exclude base= parameters above in unit creation and after creation use..
--retval = ScenEdit_HostUnitToParent({HostedUnitNameOrID=u.guid,SelectedHostNameOrID=c.guid})
--if retval == true then print(string.format('Successfully inserted %s into %s',u.name,c.name)); end
c=nil;u=nil;retval=nil;
"The courageous must protect freedom." - Dwight D. Eisenhower
"Anything built by human hands can be destroyed. This is no exception." - Kei "Edge" Nagase, Ace Combat 5: The Unsung War
KnightHawk75
Posts: 1850
Joined: Thu Nov 15, 2018 7:24 pm

RE: Adding aircraft to a ship or airfield?

Post by KnightHawk75 »

Second section - you're are missing a comma in the line local c,u,<-- retval

Also on the line:
u = ScenEdit_AddUnit({type = 'Aircraft', name = "Dog", loadoutid = 17020, heading = 85, dbid = 46, side = 'USN', Latitude='N32.51.55', Longitude = "W13.43.21', autodetectable=false,holdfire="false", proficiency=4, speed=350, basename=USS George Washington});

-You have Longitude opened with a " and closed with a ' , you can use one or the other type not mix and match
-You have the string USS George Washinton without quotes around it.
-You specify basename= when it should just be base=
-You specified to create and aircraft but didn't specify a Altitude, which is required even if basing it.

Also you are missing the 'N' in lat's in many places.

Here is the corrected version of what you posted that runs without issue.

Code: Select all

 local u,c;
 local grpName = 'George Washington CSG' 
 c = ScenEdit_AddUnit({type = 'Ship', name = 'USS George Washington', heading = 85, dbid = 657, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 c.group=grpName;
 u = ScenEdit_AddUnit({type = 'Aircraft', name = "Dog", loadoutid = 17020, heading = 85, dbid = 46, side = 'USN',
  Latitude='N32.51.55', Longitude = 'W13.43.21', altitude=0,autodetectable="false",holdfire="false", proficiency=4, speed=350, base=c.name});
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS Thomas S. Gates', heading = 85, dbid = 1054, side = 'USN', 
 Latitude = "32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 u.group=grpName
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS San Jacinto', heading = 85, dbid = 628, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 u.group=grpName
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS Barry', heading = 85, dbid = 112, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 u.group=grpName
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS Deyo', heading = 85, dbid = 810, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20}); 
 c,u = nil,nil;
 

On the first I get no such error about sequence.... when you run it do you actually have a Side called Blue?





KnightHawk75
Posts: 1850
Joined: Thu Nov 15, 2018 7:24 pm

RE: Adding aircraft to a ship or airfield?

Post by KnightHawk75 »

So here is one that creates 6 tomcats on the washington, so you can use it as example for other aircraft you'll likely be doing.

Code: Select all

 local u,c;
 local grpName = 'George Washington CSG' 
 c = ScenEdit_AddUnit({type = 'Ship', name = 'USS George Washington', heading = 85, dbid = 657, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 c.group=grpName;
 for i=1,6 do
   u = ScenEdit_AddUnit({type = 'Aircraft', name = "Dog #" .. i, loadoutid = 17020, heading = 85, dbid = 46, side = 'USN',
  Latitude='N32.51.55', Longitude = 'W13.43.21', altitude=0,autodetectable="false",holdfire="false", proficiency=4, speed=350, base=c.name});
 end
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS Thomas S. Gates', heading = 85, dbid = 1054, side = 'USN',
  Latitude = "32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 u.group=grpName
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS San Jacinto', heading = 85, dbid = 628, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 u.group=grpName
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS Barry', heading = 85, dbid = 112, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20});
 u.group=grpName
 u = ScenEdit_AddUnit({type = 'Ship', name = 'USS Deyo', heading = 85, dbid = 810, side = 'USN',
  Latitude = "N32.51.55", Longitude = "W13.43.21", autodetectable="false",holdfire="false",proficiency=4,speed=20}); 
 c,u = nil,nil;
 
ProdigyofMilitaryPride
Posts: 106
Joined: Thu Apr 16, 2015 11:54 pm

RE: Adding aircraft to a ship or airfield?

Post by ProdigyofMilitaryPride »

And for adding additional magazine entries for carriers in carrying the appropriate weaponry for key missions.
"The courageous must protect freedom." - Dwight D. Eisenhower
"Anything built by human hands can be destroyed. This is no exception." - Kei "Edge" Nagase, Ace Combat 5: The Unsung War
KnightHawk75
Posts: 1850
Joined: Thu Nov 15, 2018 7:24 pm

RE: Adding aircraft to a ship or airfield?

Post by KnightHawk75 »

[Edit 2021: Adding Mags via UpdateUnit() was added to CMO lua api after this original post, so some of this may not be relevant post early 2021+]
ORIGINAL: ProdigyofMilitaryPride

And for adding additional magazine entries for carriers in carrying the appropriate weaponry for key missions.

For specifically adding Mags, I think you'll still have to resort to using a specific delta file for each specific unit guid involved there. I'm kind of glad you asked cause that's something I meaning to ask for that I totally forgot about, a AddMagazine(), or an addition to UpdateUnit() more likely with mode='add_mag','remove_mag', like we have for mounts.

Anyway for now to use the delta method. Customize the delta.ini file for you specific unit and then call UpdateUnit()

Let's assume for the example you have a delta file here: CMO-Install\Scenarios\KHTests\iniSaves\MyS400x12Default4.ini the contents are listed below
It does the following to a #2029 Facility.
Removes the original mag that has slower reload (lets cheat!)
Adds one that's near instantaneous, populate its with just 994 sa-21b's and no sa-21a records
Now delta files are a topic in and of themselves but this is just an example I had around, but most of all just make sure the <Unit_GUID-HERE> matches your unit or they will not get applied and throw an error.

Code: Select all

 <?xml version="1.0" encoding="utf-8"?>
 <ScenarioUnits>
     <Unit_4FH7PU-0HM0IN9JP6C9D>
         <!--MyS400x12Default (SAM Bn (SA-21a/b Growler [S-400 Triumf]) [2029])-->
         <MagRemove_1_1363 />
         <!--SA-21a/b Bn-->
         <MagAdd_1185 />
         <!--Munitions-->
         <Mag_2_1185>
             <!--Munitions-->
             <WeaponRecAdd_0_2104 />
             <!--SA-21b Growler [40N6]-->
             <WeaponEdit_2104_994 />
             <!--SA-21b Growler [40N6]-->
         </Mag_2_1185>
     </Unit_4FH7PU-0HM0IN9JP6C9D>
 </ScenarioUnits>
 
local unit = ScenEdit_GetUnit( { name='MyS400x12Default', guid='4FH7PU-0HM0IN9JP6C9D' } );
ScenEdit_UpdateUnit( {guid=unit.guid, name=unit.name, mode='delta', file='\\KHTests\\iniSaves\\MyS400x12Default4.ini'} ) ;

Now that actually does both,adds a mag and populates it with specific weapon records you want) but you could have just had the <MagAdd_1185 /> line to just add the mag and then used the following to throw stuff into the mags that exist (including the new ones you add):

ScenEdit_AddWeaponToUnitMagazine( {guid=unit.guid, wpn_dbid=2104, number=994, maxcap=10000,new=true} )
If there were 1000 in there already and you wanted to remove 500..
ScenEdit_AddWeaponToUnitMagazine( {guid=unit.guid, wpn_dbid=2104, number=500, remove=true} )

This assumes you don't care what goes in which mag, as I recall and I might be wrong it'll keep looking for
empty mags if it fills one up entirely and move on to the next. But test that cause I haven't in awhile.
When it comes to filling a mag you can either do it all like above and custom or if you're just looking for quick and easy way to say 'give me 25 loadouts for a f-22 with SBD's' into whatever mags are available then you can use:

ScenEdit_FillMagsForLoadout({guid=unit.guid, loadoutid=19337, quantity=25})
or if you were looping though a bunch of aircraft...
ScenEdit_FillMagsForLoadout({guid=unit.guid, loadoutid=u.loadoutdbid, quantity=25})


Now if you explicitly care about what weapons go into which specific mag inside the same unit, and there are multiple mags that share dbid id's like the generic 1185, well.. it can be done but it gets more involved. As you'll need to 'find' the matching mag-guid for it first, or you'll need to know the index in has in the mag table you want to put it in. Lot easier when you have stuff pre-made in the scenario, becomes more challenging as you try to add things like mags dynamically during a scenario where new guids and indexes might change but it can be done. I'll leave it there for now as doing the grab the specific mag-guid or by index etc is more and slightly more complex code, but if you need such it let me know.

Post Reply

Return to “Lua Legion”