Compare commits

..

168 Commits
1.08 ... 1.5

Author SHA1 Message Date
Vasyl Horbachenko
ba8112280d Merge pull request #66 from shdwp/develop
Develop
2019-05-31 16:49:03 +03:00
Vasyl Horbachenko
4cc373595c Update README.md 2019-05-31 16:39:18 +03:00
Vasyl Horbachenko
4c5a2650d1 Merge pull request #58 from JohanAberg/patch-1
ValueError: negative radius
2019-05-21 04:50:30 +03:00
Johan Aberg
b99cdfb5c3 ValueError: negative radius
When cp.base.strength is zero 0, radius_m becomes negative and an ValueError is raised.

INFO:root:Commision Al Maktoum: {<class 'dcs.vehicles.Armor.APC_BTR_80'>: 3}
ERROR:root:<class 'ValueError'>
Traceback (most recent call last):
  File "tkinter\__init__.py", line 1702, in __call__
  File "ui\window.py", line 156, in dismiss
  File "ui\mainmenu.py", line 29, in display
  File "ui\overviewcanvas.py", line 590, in update
  File "ui\overviewcanvas.py", line 252, in draw
  File "ui\overviewcanvas.py", line 312, in draw_map
  File "ui\overviewcanvas.py", line 331, in draw_bases
ValueError: negative radius

Proposed fix:
radius_m = max(radius * cp.base.strength - 2, 0)
2019-04-04 19:10:59 +13:00
Vasyl Horbachenko
6ec14e744e fixed starting bat; updated escort options for Strikes 2019-03-31 19:55:27 +03:00
Vasyl Horbachenko
310db66c22 Merge branch 'develop' of https://github.com/shdwp/dcs_liberation into develop 2019-03-27 11:53:14 +02:00
Vasyl Horbachenko
c7c2b9a248 special flight for AI to SEAD; AI bomb task 2019-03-27 11:53:00 +02:00
Vasyl Horbachenko
b697a8b40a cleanups & minor fixesh 2019-03-27 10:41:40 +02:00
Vasyl Horbachenko
c152b49b88 minor fixes; F-14B 2019-03-27 08:47:29 +02:00
Vasyl Horbachenko
2356fc2bbf Merge pull request #54 from Khopa/develop_khopa
Re-added missing png icons
2019-01-23 23:27:34 +02:00
Vasyl Horbachenko
f7e2c8921c integration tests for operation generation; adjusted waypoint altitude for AI to not fly too low; removed C101 from list of generated AI aircrafts 2019-01-16 01:07:24 +02:00
Khopa
604352f8df Re-added missing icons (they were somehow removed from the repository, and the software couldn't be launched) 2018-12-03 21:06:47 +01:00
Vasyl Horbachenko
fbbe56f954 fixes to convoy strikes; UI updates; don't generate helis for enemy 2018-11-06 04:06:59 +02:00
Vasyl Horbachenko
7842c69ebb fixed incompatible missions being available from carriers 2018-11-06 02:59:24 +02:00
Vasyl Horbachenko
e1d50f1f27 added missing assets; convoy strike event 2018-11-06 02:33:38 +02:00
Vasyl Horbachenko
9d0997624b fixes for selectable departure; generate statics for used units; raised RTB alt 2018-11-05 03:17:06 +02:00
Vasyl Horbachenko
355cd3e0e4 display events on map 2018-11-04 04:50:51 +02:00
Vasyl Horbachenko
af5cd57094 WIP: display events on the map 2018-11-04 04:06:44 +02:00
Vasyl Horbachenko
8f85101cec WIP: display events on the map; start events from adjacent CPs 2018-11-04 02:38:14 +02:00
Vasyl Horbachenko
97be483624 Merge pull request #43 from Khopa/sdl_map
Scrollable & Zoomable Map view
2018-11-04 00:58:14 +02:00
Khopa
1ff5721912 Possible to toggle map size 2018-11-03 23:56:10 +01:00
Vasyl Horbachenko
80cbc663bf Merge pull request #45 from calvinmorrow/labels_and_coalition_view
Labels and coalition view
2018-11-04 00:54:21 +02:00
Vasyl Horbachenko
b3e729af0d Merge pull request #44 from calvinmorrow/bugfix_37
Add initiatorMissionID key to multiplayer debriefing table
2018-11-03 20:45:56 +02:00
Calvin Morrow
3ed864021d Move log button and minimize padding to fit existing window size 2018-10-31 15:24:34 -07:00
Calvin Morrow
8bc269fa99 Add labels game setting and map visibility setting to mission generation forced options 2018-10-31 15:11:12 -07:00
Khopa
c656c0f7e4 Confirm dialog to start a new game 2018-10-31 17:18:08 +01:00
Khopa
858e5d2d04 Do redraw the map when declutter options are toggled 2018-10-31 14:35:17 +01:00
Khopa
903a8db46f Commented debug mouse cursos position rect 2018-10-31 14:26:23 +01:00
Khopa
5aa731853d The zoom is a bit less annoying to use 2018-10-31 14:24:37 +01:00
Khopa
540096178c Display zoom level on pygame overlay in bottom right corner 2018-10-31 14:22:49 +01:00
Khopa
ed2a611197 Removed unnecessary print 2018-10-31 14:14:17 +01:00
Khopa
1c61b0b5a2 Refactored the way icons are loaded + reformat 2018-10-31 13:10:07 +01:00
Calvin Morrow
82f7e5d0c4 Add initiatorMissionID key to multiplayer debriefing table for dead unit detection 2018-10-30 19:40:59 -07:00
Khopa
ecb2c86dc4 Change order of map view options 2018-10-31 01:29:47 +01:00
Khopa
5cbbc3b1ab Improved base intel view 2018-10-31 01:22:08 +01:00
Khopa
e0b2e178f9 Display detailled info about base when mouse hover 2018-10-31 00:59:02 +01:00
Khopa
390974ba0f Icons for all kind of targets 2018-10-31 00:20:29 +01:00
Khopa
91379ff7d9 Instructions for map + tweaks (enable AA for text) 2018-10-30 23:32:27 +01:00
Khopa
1fe9e56997 Added missing resources. Bigger maps for nevada & caucasus 2018-10-30 20:30:10 +01:00
Khopa
e10b853712 Much better performance for the pygame viewport. 2018-10-30 20:00:14 +01:00
Khopa
7d70862e72 Work in progress : features restored. 2018-10-30 17:12:35 +01:00
Khopa
90bdcec7ff Render map on a pygame SDL layer. WIP 2018-10-30 14:47:31 +01:00
Vasyl Horbachenko
63da350223 armor balance tweaks 2018-10-23 04:04:30 +03:00
Vasyl Horbachenko
854f31cb7a armor balance improvements; fixed trigger for farps 2018-10-23 03:40:12 +03:00
Vasyl Horbachenko
eba6daf6c8 Merge remote-tracking branch 'origin/master' 2018-10-23 03:08:13 +03:00
Vasyl Horbachenko
911d57b415 fixed FOB generation 2018-10-23 03:08:01 +03:00
Vasyl Horbachenko
d91e0344a7 Update README.md 2018-10-23 00:54:55 +03:00
Vasyl Horbachenko
e9d7ee51f3 readme upd 2018-10-22 02:29:42 +03:00
Vasyl Horbachenko
9053408e13 Merge branch 'develop' 2018-10-22 02:18:26 +03:00
Vasyl Horbachenko
8f4094ee98 number of fixes 2018-10-22 02:13:38 +03:00
Vasyl Horbachenko
933e064079 fixed debriefing crash 2018-10-14 04:30:46 +03:00
Vasyl Horbachenko
274e08dd8b quick mission debriefing fixed; adjusted constants 2018-10-14 04:09:05 +03:00
Vasyl Horbachenko
05c968edc2 added Gazelle as CAS aircraft + minor fixes 2018-10-13 23:38:26 +03:00
Vasyl Horbachenko
270820de0b added Gazelle as CAS aircraft 2018-10-13 22:50:26 +03:00
Vasyl Horbachenko
e049a97bec minor text update 2018-10-13 22:30:43 +03:00
Vasyl Horbachenko
e2306ba0f3 new weather, strike objectives placement fixes & tarawa for av8b 2018-10-13 22:28:30 +03:00
Vasyl Horbachenko
6d0f488672 updated version compatibility check 2018-10-13 04:44:59 +03:00
Vasyl Horbachenko
397f9a58cb fixed naval intercept crash; fixed wrong targets order; fixed initial waypoint being WP #1; m2k a2g ccip; fixed time being time zone offset ahead; lowered rain weather chance 2018-10-13 04:41:18 +03:00
Vasyl Horbachenko
4fc766a524 trigger fixes; strike waypoint fixes; m2k strike payload update 2018-10-13 02:36:25 +03:00
Vasyl Horbachenko
3f8b5c6c00 minor UI fix 2018-10-12 23:33:10 +03:00
Vasyl Horbachenko
ce43be0d67 display strike objectives on map; minor fixes 2018-10-12 23:31:00 +03:00
Vasyl Horbachenko
ff08888385 minor adjustment in strike objectives generation 2018-10-12 22:38:26 +03:00
Vasyl Horbachenko
6b96410ea4 updated config menu 2018-10-12 22:29:37 +03:00
Vasyl Horbachenko
f21bd10f09 number of minor bugfixes and UI improvements 2018-10-12 21:32:43 +03:00
Vasyl Horbachenko
07b35f8ee1 specify tanker callsign in briefing 2018-10-12 05:45:28 +03:00
Vasyl Horbachenko
251435ae0b debriefing results based only on IDs; fixes in strike ops 2018-10-12 05:41:52 +03:00
Vasyl Horbachenko
b81bf90319 few minor fixes 2018-10-12 03:46:53 +03:00
Vasyl Horbachenko
d6b1b8665d minor fixes 2018-10-12 03:37:32 +03:00
Vasyl Horbachenko
64bd3e6a52 removed debugging code 2018-10-12 03:17:41 +03:00
Vasyl Horbachenko
520a0f91fd UI update; enemy vehicle difficulty settings; minor adjustments 2018-10-12 03:13:33 +03:00
Vasyl Horbachenko
0015667829 new frontline position finding method; AA for strikes; other minor fixes and adjustments 2018-10-12 00:12:25 +03:00
Vasyl Horbachenko
35a7da2816 oil strike objectives correct placement; updated starting point for gulf 2018-10-11 04:42:38 +03:00
Vasyl Horbachenko
5bbf3fc49f fixed land map for gulf; ability to get logs from settings; minor trigger updates 2018-10-11 04:12:02 +03:00
Vasyl Horbachenko
7a8dfeb819 Merge remote-tracking branch 'origin/develop' into develop 2018-10-11 03:45:31 +03:00
Vasyl Horbachenko
e28a24c875 randomized strike objects with templates; forbid ground objects and vehicles placement on mountains and in forests; updated push trigger so it include player group; adjacent CP missions could be initiated from carriers 2018-10-11 03:45:20 +03:00
Vasyl Horbachenko
823c6a6137 Merge pull request #27 from Khopa/combined_arms_slots
Combined arms slots
2018-10-03 02:17:21 +03:00
Khopa
2cbe63f162 Fixed potential exception in start if user enter invalid value inside the combined arms slots entry. 2018-09-29 11:55:42 +02:00
Khopa
93d0746d3e Replaced with player faction check by coalition check 2018-09-29 11:46:15 +02:00
Khopa
8cb7c7378f Type for ca_slot_entry 2018-09-29 11:34:22 +02:00
Khopa
3500c85e8d UI for CA slot selection (align with unit count rows) 2018-09-22 13:42:51 +02:00
Khopa
c699567c73 Only generate Combined Arms "Tactical Commander" slots for player side. 2018-09-22 13:33:31 +02:00
Khopa
056c397e68 [Cherry Picked] Added possibility to add 'DCS: Combined Arms' slots to the generated mission. 2018-09-22 11:46:40 +02:00
Vasyl Horbachenko
8431c7745d fixed base atttack op 2018-09-15 00:30:40 +03:00
Vasyl Horbachenko
8df4607e50 Update README.md 2018-09-14 23:49:50 +03:00
Vasyl Horbachenko
edf9efddf9 update to ground objects parser; waypoints in briefings & general briefings update; minor fixes 2018-09-13 05:09:57 +03:00
Vasyl Horbachenko
03fc17fae6 new ground objects format & parser; place dead objects instead of removing them completely 2018-09-12 05:19:21 +03:00
Vasyl Horbachenko
6fb342a42c updated location argument; updated ground units placement during attack operation 2018-09-12 00:20:35 +03:00
Vasyl Horbachenko
262347f8c8 tweaked caucasus start times 2018-09-11 22:46:26 +03:00
Vasyl Horbachenko
1176b92073 capture armor placement tweaks 2018-09-11 17:39:23 +03:00
Vasyl Horbachenko
afb084ebf8 minor bugfixes 2018-09-11 05:55:05 +03:00
Vasyl Horbachenko
12853feec3 updated version check 2018-09-11 03:35:52 +03:00
Vasyl Horbachenko
d31876b65e FARP spawn for helis on frontline cas; updated ground object placements 2018-09-11 03:12:33 +03:00
Vasyl Horbachenko
ca521e7e51 FARPs for heli flights WIP 2018-09-10 23:12:04 +03:00
Vasyl Horbachenko
f21c515d5c convert resource files to gif 2018-09-10 21:46:34 +03:00
Vasyl Horbachenko
fa5259d1f2 minor fixes before rc 2018-09-10 01:48:38 +03:00
Vasyl Horbachenko
7a5361c057 minor updates and strike mission objects expand 2018-09-10 01:38:50 +03:00
Vasyl Horbachenko
40bfb6fa88 strike operations fixes 2018-09-09 23:56:30 +03:00
Vasyl Horbachenko
61a237d1ae proper settings for barcap 2018-09-09 20:57:32 +03:00
Vasyl Horbachenko
cf7276b528 updated AA units 2018-09-09 20:39:49 +03:00
Vasyl Horbachenko
67f69d0a7f updated AA units 2018-09-09 20:27:53 +03:00
Vasyl Horbachenko
a918914431 dont limit aircraft to predefined role; better scrambling screen 2018-09-09 20:21:07 +03:00
Vasyl Horbachenko
49f2c00d76 Update README.md 2018-09-09 04:39:53 +03:00
Vasyl Horbachenko
d284305323 Update README.md 2018-09-09 04:39:03 +03:00
Vasyl Horbachenko
c32ac8577c Update README.md 2018-09-09 04:38:47 +03:00
Vasyl Horbachenko
4ba1dd87e8 updates to strike missions; frontline operations invalid units placement fixed; minor UI updates 2018-09-09 04:15:44 +03:00
Vasyl Horbachenko
e0d82da6cb save game version check; mission description in briefings; minor fixes and improvements; predefined ground objects (statics) support; strike mission WIP 2018-09-09 01:21:32 +03:00
Vasyl Horbachenko
2179e4af47 Merge pull request #12 from Khopa/ui_dev
Modified UI Style
2018-09-08 19:15:52 +03:00
Vasyl Horbachenko
0d5530f5ea Update README.md 2018-08-15 15:14:19 +03:00
Vasyl Horbachenko
a528249062 Update README.md 2018-08-15 15:13:49 +03:00
Khopa
75d734d6e4 Typo in UI 2018-08-09 13:08:07 +02:00
Khopa
1d73affa08 New style for event result menu 2018-08-08 23:40:10 +02:00
Khopa
834ee30c86 Style for event result menu 2018-08-08 23:18:49 +02:00
Khopa
d236b8a94d UI alignement in base menu 2018-08-08 22:38:09 +02:00
Khopa
a132cba7ef Changed the color of text on map (easier to read this way for now imo) 2018-08-08 22:30:33 +02:00
Khopa
86706231e0 New style for event/mission menu 2018-08-08 22:30:12 +02:00
Khopa
5eb921948a Display the units x/x/x value of the base in the base menu. 2018-08-08 21:52:09 +02:00
Khopa
fd54a5f86c Display the name of the base in base menu 2018-08-08 21:41:16 +02:00
Khopa
1b2ad5b419 Improved style of main menu, configuration menu, and base menu 2018-08-08 21:22:00 +02:00
Khopa
14cd54668e Improved style of new game menu 2018-08-08 18:45:25 +02:00
Khopa
2047089b64 Added icon to ui windows. 2018-08-08 16:27:42 +02:00
Khopa
ee924ef36e Added title name to UI window 2018-08-08 16:24:20 +02:00
Vasyl Horbachenko
f9c1dd980b spamram for fa18; non-randomized groups vertical separation on spawn; argument to affect DCS folder selection 2018-08-04 04:35:27 +03:00
Vasyl Horbachenko
74c1861240 build archieve tool 2018-07-31 23:40:35 +03:00
Vasyl Horbachenko
e8226782c1 Merge pull request #8 from shdwp/develop
minor balance improvements
2018-07-31 04:17:48 +03:00
Vasyl Horbachenko
a592cf3a05 minor balance improvements 2018-07-31 04:16:17 +03:00
Vasyl Horbachenko
0b1cb0d770 Merge pull request #7 from shdwp/develop
Develop
2018-07-31 04:00:18 +03:00
Vasyl Horbachenko
a4aa1cff3a widened spawn windows for aircraft 2018-07-31 03:59:55 +03:00
Vasyl Horbachenko
6a02d2ffb6 few minor fixes; added F5 2018-07-31 03:47:50 +03:00
Vasyl Horbachenko
7458181e90 success rate calculation division by zero fix 2018-07-29 04:41:32 +03:00
Vasyl Horbachenko
ec28cdc936 version bump 2018-07-29 04:20:30 +03:00
Vasyl Horbachenko
9dbc9a8a56 prompt window with logs on raised exception; minor UI updates; minor fixes 2018-07-29 04:16:39 +03:00
Vasyl Horbachenko
73d4a2d414 moved viggen to CAS; tanker position fix on enemy attacks; more logs 2018-07-28 04:58:28 +03:00
Vasyl Horbachenko
e93ad8b800 adjusted budget amounts 2018-07-20 04:08:04 +03:00
Vasyl Horbachenko
d48985ca6d new airports for PG; TACANs and ICLS; list frequencies in mission briefing; carrier ops improvements; cold start option 2018-07-20 04:06:13 +03:00
Vasyl Horbachenko
5f7d717b63 fixed sir abu having a frontline 2018-07-19 01:07:24 +03:00
Vasyl Horbachenko
e266698e68 fixed start.bat for usernames w/ spaces; fixed triggers for player defending; minor fixes 2018-07-19 00:57:15 +03:00
Vasyl Horbachenko
e8098e795c added symlink to pydcs to resources/tools 2018-07-18 03:20:18 +03:00
Vasyl Horbachenko
8d69724272 env gen minor update 2018-07-18 03:14:25 +03:00
Vasyl Horbachenko
683114f916 updates to CAP op 2018-07-18 00:45:55 +03:00
Vasyl Horbachenko
3b454470f9 Merge branch 'improved_cas' of https://github.com/shdwp/dcs_pmcliberation into improved_cas 2018-07-17 23:31:58 +03:00
Vasyl Horbachenko
f40f83bb09 fixes and improvements for fronline CAP 2018-07-17 14:22:45 +03:00
Vasyl Horbachenko
932bec2f84 fixes to frontline attack; frontline CAP WIP 2018-07-17 14:22:45 +03:00
Vasyl Horbachenko
820820eb92 frontline attack ops 2018-07-17 14:22:45 +03:00
Vasyl Horbachenko
6f5835a2b8 Improved Frontline CAS 2018-07-17 14:21:50 +03:00
Vasiliy Horbachenko
07128bb5e6 fixed capture issue when two or more points were attacking the base 2018-07-17 05:53:55 +03:00
Vasyl Horbachenko
b302372d4c fixes and improvements for fronline CAP 2018-07-17 05:22:41 +03:00
Vasyl Horbachenko
cad7d2c735 fixes to frontline attack; frontline CAP WIP 2018-07-17 02:14:46 +03:00
Vasyl Horbachenko
e4c3f8bce2 frontline attack ops 2018-07-16 23:58:01 +03:00
Vasyl Horbachenko
1fbf4e292a Merge branch 'improved_cas' of https://github.com/shdwp/dcs_pmcliberation into improved_cas 2018-07-16 23:03:47 +03:00
Vasyl Horbachenko
62f5b2d06d Improved Frontline CAS 2018-07-16 23:02:08 +03:00
Vasyl Horbachenko
3831658162 more base recovery after attack 2018-07-16 22:55:29 +03:00
Vasyl Horbachenko
b2545e4de0 Improved Frontline CAS 2018-07-16 22:19:19 +03:00
Vasyl Horbachenko
26e43f5e54 Merge branch 'master' of https://github.com/shdwp/dcs_liberation 2018-07-16 22:12:31 +03:00
Vasyl Horbachenko
44ba5c32c6 use correct join char for paths 2018-07-16 22:11:47 +03:00
Vasyl Horbachenko
ce7d3a89c0 fixed user path for regular DCS 2018-07-16 22:11:03 +03:00
Vasyl Horbachenko
c74b1205df fixed user path for regular DCS 2018-07-16 22:05:42 +03:00
Vasyl Horbachenko
58dd16219b removed observer slots 2018-07-15 08:55:20 +03:00
Vasyl Horbachenko
e0e1d0238f nevada debugging code removal 2018-07-15 05:55:38 +03:00
Vasyl Horbachenko
71e22bdb21 Merge remote-tracking branch 'origin/master' 2018-07-15 04:21:07 +03:00
Vasyl Horbachenko
3c2025ab44 minor hotfixes in mp debriefing (WIP) 2018-07-15 04:20:55 +03:00
Vasyl Horbachenko
d314e22970 Update start.bat 2018-07-13 04:59:59 +03:00
Vasyl Horbachenko
ff7181b648 updated .gitignore to ignore payload resource files 2018-07-13 04:34:56 +03:00
Vasyl Horbachenko
4cbd30fdbc debriefing based on events, not world state; tweaked visualgen; vehicles will not group in single location during capture op; fixed triggers for carrier ops; fixed naval ops; correct speed for inflight heli spawns; awacs will not change it's freq 2018-07-13 04:33:07 +03:00
Vasiliy Horbachenko
4ce7480df8 debriefing based on events, not world state WIP 2018-07-12 05:12:01 +03:00
Vasyl Horbachenko
d2aede593b added files missing from git 2018-07-05 03:13:30 +03:00
Vasyl Horbachenko
32fb5ad0e2 fixed a number of issues: user directory on different drive, carrier ops, multiplayer debriefing parser, multiplayer mission generation; added su25 2018-07-05 02:42:46 +03:00
Vasyl Horbachenko
fa55ae1fcc fixed multiplayer mission start 2018-07-04 05:20:35 +03:00
Vasyl Horbachenko
90fbe77682 fixed unplayable F-5 2018-07-04 04:51:31 +03:00
191 changed files with 5515 additions and 35457 deletions

8
.gitignore vendored
View File

@@ -1,8 +1,14 @@
*.pyc
__pycache__
build/*
build/**
resources/payloads/*.lua
venv
logs.txt
.DS_Store
dist/**
a.py
resources/tools/a.miz
tests/**
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml

View File

@@ -1,8 +1,26 @@
[DCS World](https://www.digitalcombatsimulator.com/en/products/world/) single-player liberation dynamic campaign.
![Logo](https://i.imgur.com/c2k18E1.png)
[Installation instructions/Manual](https://github.com/shdwp/dcs_liberation/wiki)
Inspired by *ARMA Liberation* mission.
[DCS World](https://www.digitalcombatsimulator.com/en/products/world/) single-player dynamic campaign.
Uses [pydcs](http://github.com/pydcs/dcs) for mission generation.
## Tutorials
* [Manual](https://github.com/shdwp/dcs_liberation/wiki/Manual)
You should start with the manual, it covers everything you need to know before playing the campaign.
* [Strike objectives reference images](https://imgur.com/a/vCSHa9f)
If you can't find the strike objective you can see here how it's supposed to look.
* [Troubleshooting](https://github.com/shdwp/dcs_liberation/wiki/Troubleshooting)
You could also briefly check the troubleshooting page to get familiar with the known issues that you could probably fix by yourself.
* [Modding tutorial](https://github.com/shdwp/dcs_liberation/wiki/Modding-tutorial)
Modding tutorial will cover how to change default loadouts, configure which planes are present in the campaign (or add new altogether) and more. Check this out if you find that something is not going for your liking, there could be a tutorial for changing that. Although be aware that it would require changing source files and could easily result in non functioning application.
* [Development guide](https://github.com/shdwp/dcs_liberation/wiki/Development-guide)
If you want to contribute to the project, this will give you a brief overview and on how to actually run it from source files.

View File

@@ -1,21 +1,26 @@
#!/usr/bin/env python3
import logging
import os
import re
import sys
import dcs
import theater.caucasus
import theater.persiangulf
import theater.nevada
import ui.window
import ui.corruptedsavemenu
import ui.mainmenu
import ui.newgamemenu
import ui.corruptedsavemenu
import ui.window
from game.game import Game
from theater import start_generator
from userdata import persistency
from userdata import persistency, logging as logging_module
dcs.planes.FlyingType.payload_dirs.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), "resources\\payloads"))
assert len(sys.argv) >= 3, "__init__.py should be started with two mandatory arguments: %UserProfile% location and application version"
persistency.setup(sys.argv[1])
dcs.planes.FlyingType.payload_dirs = [os.path.join(os.path.dirname(os.path.realpath(__file__)), "resources\\payloads")]
VERSION_STRING = sys.argv[2]
logging_module.setup_version_string(VERSION_STRING)
logging.info("Using {} as userdata folder".format(persistency.base_path()))
def proceed_to_main_menu(game: Game):
@@ -23,42 +28,36 @@ def proceed_to_main_menu(game: Game):
m.display()
def is_version_compatible(save_version):
current_version_components = re.split(r"[\._]", VERSION_STRING)
save_version_components = re.split(r"[\._]", save_version)
if "--ignore-save" in sys.argv:
return False
if current_version_components == save_version_components:
return True
if save_version in ["1.4_rc1", "1.4_rc2", "1.4_rc3", "1.4_rc4", "1.4_rc5", "1.4_rc6"]:
return False
if current_version_components[:2] == save_version_components[:2]:
return True
return False
w = ui.window.Window()
try:
game = persistency.restore_game()
if not game:
new_game_menu = None # type: NewGameMenu
def start_new_game(player_name: str, enemy_name: str, terrain: str, sams: bool, midgame: bool, multiplier: float):
if terrain == "persiangulf":
conflicttheater = theater.persiangulf.PersianGulfTheater()
elif terrain == "nevada":
conflicttheater = theater.nevada.NevadaTheater()
else:
conflicttheater = theater.caucasus.CaucasusTheater()
if midgame:
for i in range(0, int(len(conflicttheater.controlpoints) / 2)):
conflicttheater.controlpoints[i].captured = True
start_generator.generate_initial(conflicttheater, enemy_name, sams, multiplier)
game = Game(player_name=player_name,
enemy_name=enemy_name,
theater=conflicttheater)
game.budget = int(game.budget * multiplier)
game.settings.multiplier = multiplier
game.settings.sams = sams
if midgame:
game.budget = game.budget * 4 * len(list(conflicttheater.conflicts()))
proceed_to_main_menu(game)
new_game_menu = ui.newgamemenu.NewGameMenu(w, start_new_game)
new_game_menu.display()
if not game or not is_version_compatible(game.settings.version):
ui.newgamemenu.NewGameMenu(w, w.start_new_game).display()
else:
game.settings.version = VERSION_STRING
proceed_to_main_menu(game)
except Exception as e:
logging.exception(e)
ui.corruptedsavemenu.CorruptedSaveMenu(w).display()
w.run()

38
a.py Normal file
View File

@@ -0,0 +1,38 @@
from theater.caucasus import *
from gen.conflictgen import Conflict
from matplotlib import pyplot
from matplotlib import lines
from shapely import geometry
from shapely.geometry import Polygon
from descartes.patch import PolygonPatch
def put_lines(ls, ax):
for g in ls.geoms:
ax.plot([g.xy[0][0], g.xy[0][1]], [g.xy[1][0], g.xy[1][1]])
cau = CaucasusTheater()
#left, heading, dist = Conflict.frontline_vector(cau.soganlug, cau.kutaisi, cau)
#right = left.point_from_heading(heading, dist)
left, heading = Conflict.frontline_position(cau, cau.soganlug, cau.kutaisi)
right = left.point_from_heading(heading+90, 80000)
left = left.point_from_heading(heading-90, 80000)
line = geometry.LineString([(left.x, left.y), (right.x, right.y)])
line = line.intersection(cau.land_poly)
fig = pyplot.figure(1, figsize=(20, 20), dpi=90)
ax = fig.add_subplot(121)
ax.set_ylim([0, 1500000])
ax.set_xlim([-600000, 400000])
patch = PolygonPatch(cau.land_poly, facecolor=(0, 0, 0), edgecolor=(0, 0, 0), alpha=0.5, zorder=2)
ax.add_patch(patch)
ax.plot([left.x, right.x], [left.y, right.y], 'k-', lw=2)
ax.plot([cau.soganlug.position.x, cau.soganlug.position.x+1000], [cau.soganlug.position.y, cau.soganlug.position.y+1000], lw=5)
ax.plot([cau.kutaisi.position.x, cau.kutaisi.position.x+1000], [cau.kutaisi.position.y, cau.kutaisi.position.y+1000], lw=5)
put_lines(line, ax)
pyplot.show()

View File

@@ -1,12 +1,15 @@
import typing
import enum
from dcs.vehicles import *
from dcs.unitgroup import *
from dcs.ships import *
from dcs.planes import *
from dcs.helicopters import *
from dcs.task import *
from dcs.unit import *
from dcs.unittype import *
from dcs.unitgroup import *
"""
---------- BEGINNING OF CONFIGURATION SECTION
@@ -36,14 +39,13 @@ and prioritization for the enemy (i.e. less important bases will receive units w
"""
PRICES = {
# fighter
C_101CC: 8,
MiG_23MLD: 20,
Su_27: 24,
Su_33: 25,
MiG_29A: 22,
MiG_29S: 26,
MiG_23MLD: 13,
Su_27: 18,
Su_33: 22,
MiG_29A: 18,
MiG_29S: 20,
F_5E: 6,
F_5E_3: 6,
MiG_15bis: 5,
MiG_21Bis: 6,
AJS37: 8,
@@ -51,9 +53,11 @@ PRICES = {
AV8BNA: 13,
M_2000C: 13,
FA_18C_hornet: 18,
F_15C: 24,
F_15C: 20,
F_14B: 14,
# bomber
Su_25: 15,
Su_25T: 13,
L_39ZA: 10,
Su_34: 18,
@@ -63,7 +67,8 @@ PRICES = {
# heli
Ka_50: 13,
UH_1H: 5,
SA342M: 8,
UH_1H: 4,
Mi_8MT: 5,
# special
@@ -72,21 +77,22 @@ PRICES = {
An_30M: 13,
Yak_40: 13,
S_3B_Tanker: 13,
IL_78M: 13,
KC_135: 13,
A_50: 8,
E_3A: 8,
C_130: 8,
# armor
Armor.MBT_T_55: 4,
Armor.MBT_T_80U: 8,
Armor.MBT_T_90: 10,
Armor.APC_BTR_80: 16,
Armor.MBT_T_55: 22,
Armor.MBT_T_80U: 28,
Armor.MBT_T_90: 35,
Armor.MBT_M60A3_Patton: 6,
Armor.MBT_M1A2_Abrams: 9,
Armor.ATGM_M1134_Stryker: 6,
Armor.APC_BTR_80: 6,
Armor.ATGM_M1134_Stryker: 18,
Armor.MBT_M60A3_Patton: 24,
Armor.MBT_M1A2_Abrams: 35,
Unarmed.Transport_UAZ_469: 3,
Unarmed.Transport_Ural_375: 3,
@@ -96,20 +102,19 @@ PRICES = {
Unarmed.Transport_M818: 3,
AirDefence.AAA_Vulcan_M163: 5,
AirDefence.SAM_Avenger_M1097: 10,
AirDefence.SAM_Patriot_ICC: 15,
AirDefence.SAM_Linebacker_M6: 10,
AirDefence.AAA_ZU_23_on_Ural_375: 5,
AirDefence.SAM_SA_18_Igla_S_MANPADS: 8,
AirDefence.SAM_SA_19_Tunguska_2S6: 15,
AirDefence.SAM_SA_8_Osa_9A33: 13,
AirDefence.SPAAA_ZSU_23_4_Shilka: 8,
AirDefence.SAM_SA_9_Strela_1_9P31: 13,
AirDefence.SAM_SA_8_Osa_9A33: 18,
# ship
CV_1143_5_Admiral_Kuznetsov: 100,
CVN_74_John_C__Stennis: 100,
LHA_1_Tarawa: 50,
LHA_1_Tarawa: 30,
Bulk_cargo_ship_Yakushev: 10,
Armed_speedboat: 10,
Dry_cargo_ship_Ivanov: 10,
Tanker_Elnya_160: 10,
}
@@ -132,9 +137,8 @@ Following tasks are present:
"""
UNIT_BY_TASK = {
CAP: [
C_101CC,
AJS37,
F_5E,
F_5E_3,
MiG_23MLD,
Su_27,
Su_33,
MiG_21Bis,
@@ -142,17 +146,21 @@ UNIT_BY_TASK = {
MiG_29S,
FA_18C_hornet,
F_15C,
F_14B,
M_2000C,
],
CAS: [
MiG_15bis,
L_39ZA,
AV8BNA,
AJS37,
A_10A,
A_10C,
Su_25,
Su_25T,
Su_34,
Ka_50,
SA342M,
],
Transport: [
@@ -161,46 +169,65 @@ UNIT_BY_TASK = {
An_30M,
Yak_40,
S_3B_Tanker,
C_130,
],
Refueling: [
IL_78M,
KC_135,
S_3B_Tanker,
],
AWACS: [E_3A, A_50, ],
PinpointStrike: [Armor.MBT_T_90, Armor.MBT_T_80U, Armor.MBT_T_55, Armor.MBT_M1A2_Abrams, Armor.MBT_M60A3_Patton, Armor.ATGM_M1134_Stryker, Armor.APC_BTR_80, ],
PinpointStrike: [
Armor.APC_BTR_80,
Armor.APC_BTR_80,
Armor.APC_BTR_80,
Armor.MBT_T_55,
Armor.MBT_T_55,
Armor.MBT_T_55,
Armor.MBT_T_80U,
Armor.MBT_T_80U,
Armor.MBT_T_90,
Armor.ATGM_M1134_Stryker,
Armor.ATGM_M1134_Stryker,
Armor.MBT_M60A3_Patton,
Armor.MBT_M60A3_Patton,
Armor.MBT_M60A3_Patton,
Armor.MBT_M1A2_Abrams,
],
AirDefence: [
# those are listed multiple times here to balance prioritization more into lower tier AAs
AirDefence.AAA_Vulcan_M163,
AirDefence.AAA_Vulcan_M163,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Patriot_ICC,
AirDefence.AAA_Vulcan_M163,
AirDefence.SAM_Linebacker_M6,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.SPAAA_ZSU_23_4_Shilka,
AirDefence.SPAAA_ZSU_23_4_Shilka,
AirDefence.SPAAA_ZSU_23_4_Shilka,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_19_Tunguska_2S6,
],
Reconnaissance: [Unarmed.Transport_M818, Unarmed.Transport_Ural_375, Unarmed.Transport_UAZ_469],
Nothing: [Infantry.Infantry_M4, Infantry.Soldier_AK, ],
Embarking: [UH_1H, Mi_8MT, ],
Carriage: [CVN_74_John_C__Stennis, CV_1143_5_Admiral_Kuznetsov, ],
CargoTransportation: [Dry_cargo_ship_Ivanov, Bulk_cargo_ship_Yakushev, Tanker_Elnya_160, LHA_1_Tarawa],
Carriage: [CVN_74_John_C__Stennis, LHA_1_Tarawa, CV_1143_5_Admiral_Kuznetsov, ],
CargoTransportation: [Dry_cargo_ship_Ivanov, Bulk_cargo_ship_Yakushev, Tanker_Elnya_160, Armed_speedboat, ],
}
"""
Units from AirDefense category of UNIT_BY_TASK that will be removed from use if "No SAM" option is checked at the start of the game
"""
SAM_BAN = [
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Patriot_ICC,
AirDefence.SAM_Linebacker_M6,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_8_Osa_9A33,
]
@@ -208,7 +235,6 @@ SAM_BAN = [
Units that will always be spawned in the air
"""
TAKEOFF_BAN = [
AV8BNA, # AI takeoff currently bugged attempting VTOL with no regards for the total weight
]
"""
@@ -222,8 +248,8 @@ CARRIER_TAKEOFF_BAN = [
AirDefense units that will be spawned at control points not related to the current operation
"""
EXTRA_AA = {
"Russia": AirDefence.SAM_SA_9_Strela_1_9P31,
"USA": AirDefence.SAM_Patriot_EPP_III,
"Russia": AirDefence.SAM_SA_19_Tunguska_2S6,
"USA": AirDefence.SAM_Linebacker_M6,
}
"""
@@ -232,9 +258,10 @@ Be advised that putting unit to the country that have not access to the unit in
"""
UNIT_BY_COUNTRY = {
"Russia": [
C_101CC,
AJS37,
F_5E,
MiG_23MLD,
F_5E_3,
Su_25,
Su_27,
Su_33,
MiG_15bis,
@@ -248,19 +275,20 @@ UNIT_BY_COUNTRY = {
L_39ZA,
IL_76MD,
IL_78M,
An_26B,
An_30M,
Yak_40,
A_50,
Ka_50,
SA342M,
UH_1H,
Mi_8MT,
AirDefence.AAA_ZU_23_on_Ural_375,
AirDefence.SAM_SA_18_Igla_S_MANPADS,
AirDefence.SPAAA_ZSU_23_4_Shilka,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_19_Tunguska_2S6,
Armor.APC_BTR_80,
Armor.MBT_T_90,
@@ -276,10 +304,11 @@ UNIT_BY_COUNTRY = {
],
"USA": [
F_5E_3,
F_15C,
F_14B,
FA_18C_hornet,
AJS37,
F_5E,
M_2000C,
MiG_21Bis,
MiG_15bis,
@@ -288,11 +317,13 @@ UNIT_BY_COUNTRY = {
A_10C,
AV8BNA,
KC_135,
S_3B_Tanker,
C_130,
E_3A,
Ka_50,
SA342M,
UH_1H,
Mi_8MT,
@@ -303,14 +334,24 @@ UNIT_BY_COUNTRY = {
Infantry.Infantry_M4,
AirDefence.AAA_Vulcan_M163,
AirDefence.SAM_Avenger_M1097,
AirDefence.SAM_Patriot_ICC,
AirDefence.SAM_Linebacker_M6,
CVN_74_John_C__Stennis,
LHA_1_Tarawa,
Armed_speedboat,
],
}
CARRIER_TYPE_BY_PLANE = {
FA_18C_hornet: CVN_74_John_C__Stennis,
F_14B: CVN_74_John_C__Stennis,
Ka_50: LHA_1_Tarawa,
SA342M: LHA_1_Tarawa,
UH_1H: LHA_1_Tarawa,
Mi_8MT: LHA_1_Tarawa,
AV8BNA: LHA_1_Tarawa,
}
"""
Aircraft payload overrides. Usually default loadout for the task is loaded during the mission generation.
Syntax goes as follows:
@@ -329,11 +370,30 @@ Payload will be used for operation of following type, "*" category will be used
"""
PLANE_PAYLOAD_OVERRIDES = {
FA_18C_hornet: {
"*": "AIM-9M*6, AIM-7M*2, FUEL*3",
CAP: "AIM-120*4,AIM-9*2,AIM-7*2,Fuel",
Escort: "AIM-120*4,AIM-9*2,AIM-7*2,Fuel",
PinpointStrike: "MK-82*8,AIM-9*2,AIM-7,FLIR Pod,Fuel",
AntishipStrike: "MK-82*8,AIM-9*2,AIM-7,FLIR Pod,Fuel",
},
F_14B: {
CAP: "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2",
Escort: "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2",
CAS: "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN",
GroundAttack: "AIM54, AIM-9M*2, XT*2, GBU-12*4, LANTIRN",
},
Su_25T: {
CAS: "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410",
},
Su_33: {
"*": "R-73*4,R-27R*2,R-27ER*6",
CAP: "R-73*4,R-27R*2,R-27ER*6",
Escort: "R-73*4,R-27R*2,R-27ER*6",
},
AJS37: {
CAS: "CAS (75 GUN): RB-75*2, AKAN",
},
AV8BNA: {
@@ -342,18 +402,22 @@ PLANE_PAYLOAD_OVERRIDES = {
A_10C: {
CAS: "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7",
GroundAttack: "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP",
},
Ka_50: {
"*": "12x9A4172, 40xS-8",
CAS: "12x9A4172, 40xS-8",
GroundAttack: "12x9A4172, 40xS-8",
},
M_2000C: {
"*": "Combat Air Patrol",
CAP: "Combat Air Patrol",
Escort: "Combat Air Patrol",
GroundAttack: "MK-82S Heavy Strike",
},
MiG_21Bis: {
"*": "Patrol, medium range",
CAP: "Patrol, medium range",
}
}
@@ -361,7 +425,7 @@ PLANE_PAYLOAD_OVERRIDES = {
Aircraft livery overrides. Syntax as follows:
`Identifier`: "LiveryName",
`Identifier` is aircraft identifier (as used troughout the file) and "LiveryName" (with double quotes)
is livery name as found in mission editor.
"""
@@ -379,7 +443,11 @@ HeliDict = typing.Dict[HelicopterType, int]
ArmorDict = typing.Dict[VehicleType, int]
ShipDict = typing.Dict[ShipType, int]
AirDefenseDict = typing.Dict[AirDefence, int]
StartingPosition = typing.Optional[typing.Union[ShipGroup, Airport, Point]]
AssignedUnitsDict = typing.Dict[typing.Type[UnitType], typing.Tuple[int, int]]
TaskForceDict = typing.Dict[typing.Type[Task], AssignedUnitsDict]
StartingPosition = typing.Optional[typing.Union[ShipGroup, StaticGroup, Airport, Point]]
def unit_task(unit: UnitType) -> Task:
@@ -398,6 +466,26 @@ def unit_type_name(unit_type) -> str:
return unit_type.id and unit_type.id or unit_type.name
def unit_type_from_name(name: str) -> UnitType:
if name in vehicle_map:
return vehicle_map[name]
elif name in plane_map:
return plane_map[name]
elif name in ship_map:
return ship_map[name]
else:
return None
def unit_type_of(unit: Unit) -> UnitType:
if isinstance(unit, Vehicle):
return vehicle_map[unit.type]
elif isinstance(unit, Ship):
return ship_map[unit.type]
else:
return unit.unit_type
def task_name(task) -> str:
if task == AirDefence:
return "AirDefence"
@@ -409,6 +497,7 @@ def task_name(task) -> str:
def choose_units(for_task: Task, factor: float, count: int, country: str) -> typing.Collection[UnitType]:
suitable_unittypes = find_unittype(for_task, country)
suitable_unittypes = [x for x in suitable_unittypes if x not in helicopter_map.values()]
suitable_unittypes.sort(key=lambda x: PRICES[x])
idx = int(len(suitable_unittypes) * factor)
@@ -419,6 +508,75 @@ def choose_units(for_task: Task, factor: float, count: int, country: str) -> typ
return list(set(suitable_unittypes[index_start:index_end]))
def unitdict_append(unit_dict: UnitsDict, unit_type: UnitType, count: int):
unit_dict[unit_type] = unit_dict.get(unit_type, 0) + 1
def unitdict_merge(a: UnitsDict, b: UnitsDict) -> UnitsDict:
b = b.copy()
for k, v in a.items():
b[k] = b.get(k, 0) + v
return b
def unitdict_split(unit_dict: UnitsDict, count: int):
buffer_dict = {}
for unit_type, unit_count in unit_dict.items():
for _ in range(unit_count):
unitdict_append(buffer_dict, unit_type, 1)
if sum(buffer_dict.values()) >= count:
yield buffer_dict
buffer_dict = {}
if len(buffer_dict):
yield buffer_dict
def unitdict_restrict_count(unit_dict: UnitsDict, total_count: int) -> UnitsDict:
if total_count == 0:
return {}
groups = list(unitdict_split(unit_dict, total_count))
if len(groups) > 0:
return groups[0]
else:
return {}
def assigned_units_split(fd: AssignedUnitsDict) -> typing.Tuple[PlaneDict, PlaneDict]:
return {k: v1 for k, (v1, v2) in fd.items()}, {k: v2 for k, (v1, v2) in fd.items()},
def assigned_units_from(d: PlaneDict) -> AssignedUnitsDict:
return {k: (v, 0) for k, v in d.items()}
def assignedunits_split_to_count(dict: AssignedUnitsDict, count: int):
buffer_dict = {}
for unit_type, (unit_count, client_count) in dict.items():
for _ in range(unit_count):
new_count, new_client_count = buffer_dict.get(unit_type, (0, 0))
new_count += 1
if client_count > 0:
new_client_count += 1
client_count -= 1
buffer_dict[unit_type] = new_count, new_client_count
if new_count >= count:
yield buffer_dict
buffer_dict = {}
if len(buffer_dict):
yield buffer_dict
def unitdict_from(fd: AssignedUnitsDict) -> Dict:
return {k: v1 for k, (v1, v2) in fd.items()}
def _validate_db():
# check unit by task uniquity
total_set = set()

View File

@@ -1,8 +1,10 @@
from .event import *
from .groundintercept import *
from .frontlineattack import *
from .frontlinepatrol import *
from .intercept import *
from .capture import *
from .baseattack import *
from .navalintercept import *
from .antiaastrike import *
from .groundattack import *
from .insurgentattack import *
from .convoystrike import *
from .infantrytransport import *
from .strike import *

View File

@@ -1,86 +0,0 @@
import math
import random
from dcs.task import *
from game import *
from game.event import *
from game.operation.antiaastrike import AntiAAStrikeOperation
from userdata.debriefing import Debriefing
class AntiAAStrikeEvent(Event):
TARGET_AMOUNT_MAX = 2
STRENGTH_INFLUENCE = 0.3
SUCCESS_TARGETS_HIT_PERCENTAGE = 0.5
targets = None # type: db.ArmorDict
def __str__(self):
return "Anti-AA strike from {} at {}".format(self.from_cp, self.to_cp)
def is_successfull(self, debriefing: Debriefing):
total_targets = sum(self.targets.values())
destroyed_targets = 0
for unit, count in debriefing.destroyed_units[self.defender_name].items():
if unit in self.targets:
destroyed_targets += count
if self.from_cp.captured:
return math.ceil(float(destroyed_targets) / total_targets) >= self.SUCCESS_TARGETS_HIT_PERCENTAGE
else:
return math.ceil(float(destroyed_targets) / total_targets) < self.SUCCESS_TARGETS_HIT_PERCENTAGE
def commit(self, debriefing: Debriefing):
super(AntiAAStrikeEvent, self).commit(debriefing)
if self.from_cp.captured:
if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(+self.STRENGTH_INFLUENCE)
else:
if self.is_successfull(debriefing):
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def skip(self):
if self.to_cp.captured:
self.to_cp.base.affect_strength(-0.1)
def player_attacking(self, strikegroup: db.PlaneDict, clients: db.PlaneDict):
self.targets = self.to_cp.base.assemble_aa(count=self.to_cp.base.total_aa)
op = AntiAAStrikeOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients=clients,
defender_clients={},
from_cp=self.from_cp,
to_cp=self.to_cp)
op.setup(target=self.targets,
strikegroup=strikegroup,
interceptors={})
self.operation = op
def player_defending(self, interceptors: db.PlaneDict, clients: db.PlaneDict):
self.targets = self.to_cp.base.assemble_aa()
op = AntiAAStrikeOperation(
self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients={},
defender_clients=clients,
from_cp=self.from_cp,
to_cp=self.to_cp
)
strikegroup = self.from_cp.base.scramble_cas(self.game.settings.multiplier)
op.setup(target=self.targets,
strikegroup=strikegroup,
interceptors=interceptors)
self.operation = op

98
game/event/baseattack.py Normal file
View File

@@ -0,0 +1,98 @@
from game.operation.baseattack import BaseAttackOperation
from .event import *
from game.db import assigned_units_from
class BaseAttackEvent(Event):
silent = True
BONUS_BASE = 15
STRENGTH_RECOVERY = 0.55
def __str__(self):
return "Base attack"
@property
def tasks(self):
return [CAP, CAS, PinpointStrike]
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAP:
return "Escort flight"
elif for_task == CAS:
return "CAS flight"
elif for_task == PinpointStrike:
return "Ground attack"
def is_successfull(self, debriefing: Debriefing):
alive_attackers = sum([v for k, v in debriefing.alive_units.get(self.attacker_name, {}).items() if db.unit_task(k) == PinpointStrike])
alive_defenders = sum([v for k, v in debriefing.alive_units.get(self.defender_name, {}).items() if db.unit_task(k) == PinpointStrike])
attackers_success = alive_attackers >= alive_defenders
if self.departure_cp.captured:
return attackers_success
else:
return not attackers_success
def commit(self, debriefing: Debriefing):
super(BaseAttackEvent, self).commit(debriefing)
if self.is_successfull(debriefing):
if self.departure_cp.captured:
self.to_cp.captured = True
self.to_cp.ground_objects = []
self.to_cp.base.filter_units(db.UNIT_BY_COUNTRY[self.attacker_name])
self.to_cp.base.affect_strength(+self.STRENGTH_RECOVERY)
else:
if not self.departure_cp.captured:
self.to_cp.captured = False
self.to_cp.base.affect_strength(+self.STRENGTH_RECOVERY)
def skip(self):
if not self.is_player_attacking and self.to_cp.captured:
self.to_cp.captured = False
def player_defending(self, flights: db.TaskForceDict):
assert CAP in flights and len(flights) == 1, "Invalid scrambled flights"
cas = self.departure_cp.base.scramble_cas(self.game.settings.multiplier)
escort = self.departure_cp.base.scramble_sweep(self.game.settings.multiplier)
attackers = self.departure_cp.base.armor
op = BaseAttackOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
op.setup(cas=assigned_units_from(cas),
escort=assigned_units_from(escort),
intercept=flights[CAP],
attack=attackers,
defense=self.to_cp.base.armor,
aa=self.to_cp.base.aa)
self.operation = op
def player_attacking(self, flights: db.TaskForceDict):
assert CAP in flights and CAS in flights and PinpointStrike in flights and len(flights) == 3, "Invalid flights"
op = BaseAttackOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
defenders = self.to_cp.base.scramble_sweep(self.game.settings.multiplier)
defenders.update(self.to_cp.base.scramble_cas(self.game.settings.multiplier))
op.setup(cas=flights[CAS],
escort=flights[CAP],
attack=unitdict_from(flights[PinpointStrike]),
intercept=assigned_units_from(defenders),
defense=self.to_cp.base.armor,
aa=self.to_cp.base.assemble_aa())
self.operation = op

View File

@@ -1,89 +0,0 @@
import math
import random
from dcs.task import *
from game import db
from game.operation.capture import CaptureOperation
from userdata.debriefing import Debriefing
from .event import Event
class CaptureEvent(Event):
silent = True
BONUS_BASE = 15
STRENGTH_RECOVERY = 0.35
def __str__(self):
return "Attack from {} to {}".format(self.from_cp, self.to_cp)
def is_successfull(self, debriefing: Debriefing):
alive_attackers = sum([v for k, v in debriefing.alive_units[self.attacker_name].items() if db.unit_task(k) == PinpointStrike])
alive_defenders = sum([v for k, v in debriefing.alive_units[self.defender_name].items() if db.unit_task(k) == PinpointStrike])
attackers_success = alive_attackers >= alive_defenders
if self.from_cp.captured:
return attackers_success
else:
return not attackers_success
def commit(self, debriefing: Debriefing):
super(CaptureEvent, self).commit(debriefing)
if self.is_successfull(debriefing):
if self.from_cp.captured:
self.to_cp.captured = True
self.to_cp.base.filter_units(db.UNIT_BY_COUNTRY[self.attacker_name])
self.to_cp.base.affect_strength(+self.STRENGTH_RECOVERY)
else:
if not self.from_cp.captured:
self.to_cp.captured = False
self.to_cp.base.affect_strength(+self.STRENGTH_RECOVERY)
def skip(self):
if self.to_cp.captured:
self.to_cp.captured = False
def player_defending(self, interceptors: db.PlaneDict, clients: db.PlaneDict):
cas = self.from_cp.base.scramble_cas(self.game.settings.multiplier)
escort = self.from_cp.base.scramble_sweep(self.game.settings.multiplier)
attackers = self.from_cp.base.armor
op = CaptureOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients={},
defender_clients=clients,
from_cp=self.from_cp,
to_cp=self.to_cp)
op.setup(cas=cas,
escort=escort,
attack=attackers,
intercept=interceptors,
defense=self.to_cp.base.armor,
aa=self.to_cp.base.aa)
self.operation = op
def player_attacking(self, cas: db.PlaneDict, escort: db.PlaneDict, armor: db.ArmorDict, clients: db.PlaneDict):
op = CaptureOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients=clients,
defender_clients={},
from_cp=self.from_cp,
to_cp=self.to_cp)
defenders = self.to_cp.base.scramble_sweep(self.game.settings.multiplier)
defenders.update(self.to_cp.base.scramble_cas(self.game.settings.multiplier))
op.setup(cas=cas,
escort=escort,
attack=armor,
intercept=defenders,
defense=self.to_cp.base.armor,
aa=self.to_cp.base.assemble_aa())
self.operation = op

View File

@@ -0,0 +1,83 @@
import math
import random
from dcs.task import *
from game import *
from game.event import *
from game.event.frontlineattack import FrontlineAttackEvent
from .event import *
from game.operation.convoystrike import ConvoyStrikeOperation
TRANSPORT_COUNT = 4, 6
DEFENDERS_AMOUNT_FACTOR = 4
class ConvoyStrikeEvent(Event):
SUCCESS_FACTOR = 0.6
STRENGTH_INFLUENCE = 0.25
targets = None # type: db.ArmorDict
@property
def threat_description(self):
return ""
@property
def tasks(self):
return [CAS]
@property
def global_cp_available(self) -> bool:
return True
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAS:
return "Strike flight"
def __str__(self):
return "Convoy Strike"
def skip(self):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def commit(self, debriefing: Debriefing):
super(ConvoyStrikeEvent, self).commit(debriefing)
if self.from_cp.captured:
if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
if self.is_successfull(debriefing):
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def is_successfull(self, debriefing: Debriefing):
killed_units = sum([v for k, v in debriefing.destroyed_units.get(self.defender_name, {}).items() if db.unit_task(k) in [PinpointStrike, Reconnaissance]])
all_units = sum(self.targets.values())
attackers_success = (float(killed_units) / (all_units + 0.01)) > self.SUCCESS_FACTOR
if self.from_cp.captured:
return attackers_success
else:
return not attackers_success
def player_attacking(self, flights: db.TaskForceDict):
assert CAS in flights and len(flights) == 1, "Invalid flights"
convoy_unittype = db.find_unittype(Reconnaissance, self.defender_name)[0]
defense_unittype = db.find_unittype(PinpointStrike, self.defender_name)[0]
defenders_count = int(math.ceil(self.from_cp.base.strength * self.from_cp.importance * DEFENDERS_AMOUNT_FACTOR))
self.targets = {convoy_unittype: random.randrange(*TRANSPORT_COUNT),
defense_unittype: defenders_count, }
op = ConvoyStrikeOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
op.setup(target=self.targets,
strikegroup=flights[CAS])
self.operation = op

View File

@@ -1,31 +1,49 @@
import typing
import logging
from dcs.unittype import UnitType
from dcs.task import *
from dcs.vehicles import AirDefence
from dcs.unittype import UnitType
from game import *
from theater import *
from gen.environmentgen import EnvironmentSettings
from gen.conflictgen import Conflict
from game.db import assigned_units_from, unitdict_from
from userdata.debriefing import Debriefing
from userdata import persistency
DIFFICULTY_LOG_BASE = 1.1
EVENT_DEPARTURE_MAX_DISTANCE = 340000
class Event:
silent = False
informational = False
is_awacs_enabled = False
ca_slots = 0
game = None # type: Game
location = None # type: Point
from_cp = None # type: ControlPoint
departure_cp = None # type: ControlPoint
to_cp = None # type: ControlPoint
operation = None # type: Operation
difficulty = 1 # type: int
game = None # type: Game
environment_settings = None # type: EnvironmentSettings
BONUS_BASE = 5
def __init__(self, attacker_name: str, defender_name: str, from_cp: ControlPoint, to_cp: ControlPoint, game):
def __init__(self, game, from_cp: ControlPoint, target_cp: ControlPoint, location: Point, attacker_name: str, defender_name: str):
self.game = game
self.departure_cp = None
self.from_cp = from_cp
self.to_cp = target_cp
self.location = location
self.attacker_name = attacker_name
self.defender_name = defender_name
self.to_cp = to_cp
self.from_cp = from_cp
self.game = game
@property
def is_player_attacking(self) -> bool:
@@ -36,24 +54,68 @@ class Event:
if self.attacker_name == self.game.player:
return self.to_cp
else:
return self.from_cp
return self.departure_cp
@property
def threat_description(self) -> str:
return ""
def flight_name(self, for_task: typing.Type[typing.Type[Task]]) -> str:
return "Flight"
@property
def tasks(self) -> typing.Collection[typing.Type[Task]]:
return []
@property
def ai_banned_tasks(self) -> typing.Collection[typing.Type[Task]]:
return []
@property
def player_banned_tasks(self) -> typing.Collection[typing.Type[Task]]:
return []
@property
def global_cp_available(self) -> bool:
return False
def is_departure_available_from(self, cp: ControlPoint) -> bool:
if not cp.captured:
return False
if self.location.distance_to_point(cp.position) > EVENT_DEPARTURE_MAX_DISTANCE:
return False
if cp.is_global and not self.global_cp_available:
return False
return True
def bonus(self) -> int:
return int(math.log(self.to_cp.importance + 1, DIFFICULTY_LOG_BASE) * self.BONUS_BASE)
def is_successfull(self, debriefing: Debriefing) -> bool:
return self.operation.is_successfull(debriefing)
def player_attacking(self, cp: ControlPoint, flights: db.TaskForceDict):
if self.is_player_attacking:
self.departure_cp = cp
else:
self.to_cp = cp
def player_defending(self, cp: ControlPoint, flights: db.TaskForceDict):
if self.is_player_attacking:
self.departure_cp = cp
else:
self.to_cp = cp
def generate(self):
self.operation.is_awacs_enabled = self.is_awacs_enabled
self.operation.ca_slots = self.ca_slots
self.operation.prepare(self.game.theater.terrain, is_quick=False)
self.operation.generate()
self.operation.mission.save(persistency.mission_path_for("liberation_nextturn.miz"))
self.operation.current_mission.save(persistency.mission_path_for("liberation_nextturn.miz"))
self.environment_settings = self.operation.environment_settings
def generate_quick(self):
@@ -62,17 +124,31 @@ class Event:
self.operation.prepare(self.game.theater.terrain, is_quick=True)
self.operation.generate()
self.operation.mission.save(persistency.mission_path_for("liberation_nextturn_quick.miz"))
self.operation.current_mission.save(persistency.mission_path_for("liberation_nextturn_quick.miz"))
def commit(self, debriefing: Debriefing):
for country, losses in debriefing.destroyed_units.items():
if country == self.attacker_name:
cp = self.from_cp
cp = self.departure_cp
else:
cp = self.to_cp
logging.info("base {} commit losses {}".format(cp.base, losses))
cp.base.commit_losses(losses)
for object_identifier in debriefing.destroyed_objects:
for cp in self.game.theater.controlpoints:
if not cp.ground_objects:
continue
for i, ground_object in enumerate(cp.ground_objects):
if ground_object.is_dead:
continue
if ground_object.matches_string_identifier(object_identifier):
logging.info("cp {} killing ground object {}".format(cp, ground_object.string_identifier))
cp.ground_objects[i].is_dead = True
def skip(self):
pass
@@ -82,11 +158,12 @@ class UnitsDeliveryEvent(Event):
units = None # type: typing.Dict[UnitType, int]
def __init__(self, attacker_name: str, defender_name: str, from_cp: ControlPoint, to_cp: ControlPoint, game):
super(UnitsDeliveryEvent, self).__init__(attacker_name=attacker_name,
defender_name=defender_name,
super(UnitsDeliveryEvent, self).__init__(game=game,
location=to_cp.position,
from_cp=from_cp,
to_cp=to_cp,
game=game)
target_cp=to_cp,
attacker_name=attacker_name,
defender_name=defender_name)
self.units = {}

View File

@@ -0,0 +1,110 @@
from game.event import *
from game.operation.frontlineattack import FrontlineAttackOperation
from userdata.debriefing import Debriefing
class FrontlineAttackEvent(Event):
TARGET_VARIETY = 2
TARGET_AMOUNT_FACTOR = 0.5
ATTACKER_AMOUNT_FACTOR = 0.4
ATTACKER_DEFENDER_FACTOR = 0.7
STRENGTH_INFLUENCE = 0.3
SUCCESS_FACTOR = 1.5
@property
def threat_description(self):
return "{} vehicles".format(self.to_cp.base.assemble_count())
@property
def tasks(self) -> typing.Collection[typing.Type[Task]]:
if self.is_player_attacking:
return [CAS, CAP]
else:
return [CAP]
@property
def global_cp_available(self) -> bool:
return True
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAS:
return "CAS flight"
elif for_task == CAP:
return "CAP flight"
elif for_task == PinpointStrike:
return "Ground attack"
def __str__(self):
return "Frontline attack"
def is_successfull(self, debriefing: Debriefing):
alive_attackers = sum([v for k, v in debriefing.alive_units.get(self.attacker_name, {}).items() if db.unit_task(k) == PinpointStrike])
alive_defenders = sum([v for k, v in debriefing.alive_units.get(self.defender_name, {}).items() if db.unit_task(k) == PinpointStrike])
attackers_success = (float(alive_attackers) / (alive_defenders + 0.01)) > self.SUCCESS_FACTOR
if self.from_cp.captured:
return attackers_success
else:
return not attackers_success
def commit(self, debriefing: Debriefing):
super(FrontlineAttackEvent, self).commit(debriefing)
if self.from_cp.captured:
if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(+self.STRENGTH_INFLUENCE)
else:
if self.is_successfull(debriefing):
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def skip(self):
if self.to_cp.captured:
self.to_cp.base.affect_strength(-0.1)
def player_attacking(self, flights: db.TaskForceDict):
assert CAS in flights and CAP in flights and len(flights) == 2, "Invalid flights"
op = FrontlineAttackOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
defenders = self.to_cp.base.assemble_attack()
max_attackers = int(math.ceil(sum(defenders.values()) * self.ATTACKER_DEFENDER_FACTOR))
attackers = db.unitdict_restrict_count(self.from_cp.base.assemble_attack(), max_attackers)
op.setup(defenders=defenders,
attackers=attackers,
strikegroup=flights[CAS],
escort=flights[CAP],
interceptors=assigned_units_from(self.to_cp.base.scramble_interceptors(1)))
self.operation = op
def player_defending(self, flights: db.TaskForceDict):
assert CAP in flights and len(flights) == 1, "Invalid flights"
op = FrontlineAttackOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
defenders = self.to_cp.base.assemble_attack()
max_attackers = int(math.ceil(sum(defenders.values())))
attackers = db.unitdict_restrict_count(self.from_cp.base.assemble_attack(), max_attackers)
op.setup(defenders=defenders,
attackers=attackers,
strikegroup=assigned_units_from(self.from_cp.base.scramble_cas(1)),
escort=assigned_units_from(self.from_cp.base.scramble_sweep(1)),
interceptors=flights[CAP])
self.operation = op

View File

@@ -0,0 +1,78 @@
from game.event import *
from game.operation.frontlinepatrol import FrontlinePatrolOperation
from userdata.debriefing import Debriefing
class FrontlinePatrolEvent(Event):
ESCORT_FACTOR = 0.5
STRENGTH_INFLUENCE = 0.3
SUCCESS_FACTOR = 0.8
cas = None # type: db.PlaneDict
escort = None # type: db.PlaneDict
@property
def threat_description(self):
return "{} aircraft + ? CAS".format(self.to_cp.base.scramble_count(self.game.settings.multiplier * self.ESCORT_FACTOR, CAP))
@property
def tasks(self):
return [CAP]
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAP:
return "CAP flight"
elif for_task == PinpointStrike:
return "Ground attack"
def __str__(self):
return "Frontline CAP"
def is_successfull(self, debriefing: Debriefing):
alive_attackers = sum([v for k, v in debriefing.alive_units[self.attacker_name].items() if db.unit_task(k) == PinpointStrike])
alive_defenders = sum([v for k, v in debriefing.alive_units[self.defender_name].items() if db.unit_task(k) == PinpointStrike])
attackers_success = (float(alive_attackers) / (alive_defenders + 0.01)) >= self.SUCCESS_FACTOR
if self.from_cp.captured:
return attackers_success
else:
return not attackers_success
def commit(self, debriefing: Debriefing):
super(FrontlinePatrolEvent, self).commit(debriefing)
if self.from_cp.captured:
if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(+self.STRENGTH_INFLUENCE)
else:
if self.is_successfull(debriefing):
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def skip(self):
pass
def player_attacking(self, flights: db.TaskForceDict):
assert CAP in flights and len(flights) == 1, "Invalid flights"
self.cas = self.to_cp.base.scramble_cas(self.game.settings.multiplier)
self.escort = self.to_cp.base.scramble_sweep(self.game.settings.multiplier * self.ESCORT_FACTOR)
op = FrontlinePatrolOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
defenders = self.to_cp.base.assemble_attack()
attackers = db.unitdict_restrict_count(self.from_cp.base.assemble_attack(), sum(defenders.values()))
op.setup(cas=assigned_units_from(self.cas),
escort=assigned_units_from(self.escort),
interceptors=flights[CAP],
armor_attackers=attackers,
armor_defenders=defenders)
self.operation = op

View File

@@ -1,40 +0,0 @@
import math
import random
from dcs.task import *
from game import *
from game.event import *
from game.event.groundintercept import GroundInterceptEvent
from game.operation.groundattack import GroundAttackOperation
class GroundAttackEvent(GroundInterceptEvent):
def __str__(self):
return "Destroy insurgents at {}".format(self.to_cp)
@property
def threat_description(self):
return ""
def player_defending(self, strikegroup: db.PlaneDict, clients: db.PlaneDict):
suitable_unittypes = db.find_unittype(Reconnaissance, self.attacker_name)
random.shuffle(suitable_unittypes)
unittypes = suitable_unittypes[:self.TARGET_VARIETY]
typecount = max(math.floor(self.difficulty * self.TARGET_AMOUNT_FACTOR), 1)
self.targets = {unittype: typecount for unittype in unittypes}
op = GroundAttackOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients={},
defender_clients=clients,
from_cp=self.from_cp,
to_cp=self.to_cp)
op.setup(target=self.targets,
strikegroup=strikegroup)
self.operation = op
def player_attacking(self, interceptors: db.PlaneDict, clients: db.PlaneDict):
assert False

View File

@@ -1,106 +0,0 @@
import math
import random
from dcs.task import *
from dcs.vehicles import AirDefence
from game import *
from game.event import *
from game.operation.groundintercept import GroundInterceptOperation
from userdata.debriefing import Debriefing
class GroundInterceptEvent(Event):
TARGET_AMOUNT_FACTOR = 2
TARGET_VARIETY = 2
STRENGTH_INFLUENCE = 0.3
SUCCESS_TARGETS_HIT_PERCENTAGE = 0.5
targets = None # type: db.ArmorDict
@property
def threat_description(self):
if not self.game.is_player_attack(self):
return "{} aicraft".format(self.from_cp.base.scramble_count(self.game.settings.multiplier, CAS))
else:
return super(GroundInterceptEvent, self).threat_description
def __str__(self):
return "Fontline CAS from {} at {}".format(self.from_cp, self.to_cp)
def is_successfull(self, debriefing: Debriefing):
total_targets = sum(self.targets.values())
destroyed_targets = 0
for unit, count in debriefing.destroyed_units[self.defender_name].items():
if unit in self.targets:
destroyed_targets += count
if self.from_cp.captured:
return float(destroyed_targets) / total_targets >= self.SUCCESS_TARGETS_HIT_PERCENTAGE
else:
return float(destroyed_targets) / total_targets < self.SUCCESS_TARGETS_HIT_PERCENTAGE
def commit(self, debriefing: Debriefing):
super(GroundInterceptEvent, self).commit(debriefing)
if self.from_cp.captured:
if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(+self.STRENGTH_INFLUENCE)
else:
if self.is_successfull(debriefing):
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def skip(self):
if self.to_cp.captured:
self.to_cp.base.affect_strength(-0.1)
def player_attacking(self, strikegroup: db.PlaneDict, clients: db.PlaneDict):
suitable_unittypes = db.find_unittype(PinpointStrike, self.defender_name)
random.shuffle(suitable_unittypes)
unittypes = suitable_unittypes[:self.TARGET_VARIETY]
typecount = max(math.floor(self.difficulty * self.TARGET_AMOUNT_FACTOR), 1)
self.targets = {unittype: typecount for unittype in unittypes}
defense_aa_unit = random.choice(self.game.commision_unit_types(self.to_cp, AirDefence))
self.targets[defense_aa_unit] = 1
op = GroundInterceptOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients=clients,
defender_clients={},
from_cp=self.from_cp,
to_cp=self.to_cp)
op.setup(target=self.targets,
strikegroup=strikegroup,
interceptors={})
self.operation = op
def player_defending(self, interceptors: db.PlaneDict, clients: db.PlaneDict):
suitable_unittypes = db.find_unittype(PinpointStrike, self.defender_name)
random.shuffle(suitable_unittypes)
unittypes = suitable_unittypes[:self.TARGET_VARIETY]
typecount = max(math.floor(self.difficulty * self.TARGET_AMOUNT_FACTOR), 1)
self.targets = {unittype: typecount for unittype in unittypes}
op = GroundInterceptOperation(
self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients={},
defender_clients=clients,
from_cp=self.from_cp,
to_cp=self.to_cp
)
strikegroup = self.from_cp.base.scramble_cas(self.game.settings.multiplier)
op.setup(target=self.targets,
strikegroup=strikegroup,
interceptors=interceptors)
self.operation = op

View File

@@ -9,14 +9,22 @@ from game.operation.infantrytransport import InfantryTransportOperation
from theater.conflicttheater import *
from userdata.debriefing import Debriefing
from .event import Event
from .event import *
class InfantryTransportEvent(Event):
STRENGTH_INFLUENCE = 0.3
def __str__(self):
return "Frontline transport troops to {}".format(self.to_cp)
return "Frontline transport troops"
@property
def tasks(self):
return [Embarking]
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == Embarking:
return "Transport flight"
def is_successfull(self, debriefing: Debriefing):
return True
@@ -27,21 +35,22 @@ class InfantryTransportEvent(Event):
if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
self.departure_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def player_attacking(self, flights: db.TaskForceDict):
assert Embarking in flights and len(flights) == 1, "Invalid flights"
def player_attacking(self, transport: db.HeliDict, clients: db.HeliDict):
op = InfantryTransportOperation(
game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients=clients,
defender_clients={},
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp
)
air_defense = db.find_unittype(AirDefence, self.defender_name)[0]
op.setup(transport=transport,
op.setup(transport=flights[Embarking],
aa={air_defense: 2})
self.operation = op

View File

@@ -0,0 +1,65 @@
import math
import random
from dcs.task import *
from game import *
from game.event import *
from game.event.frontlineattack import FrontlineAttackEvent
from game.operation.insurgentattack import InsurgentAttackOperation
from .event import *
class InsurgentAttackEvent(Event):
SUCCESS_FACTOR = 0.7
TARGET_VARIETY = 2
TARGET_AMOUNT_FACTOR = 0.5
STRENGTH_INFLUENCE = 0.1
@property
def threat_description(self):
return ""
@property
def tasks(self):
return [CAS]
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAS:
return "Ground intercept flight"
def __str__(self):
return "Destroy insurgents"
def skip(self):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def is_successfull(self, debriefing: Debriefing):
killed_units = sum([v for k, v in debriefing.destroyed_units[self.attacker_name].items() if db.unit_task(k) == PinpointStrike])
all_units = sum(self.targets.values())
attackers_success = (float(killed_units) / (all_units + 0.01)) > self.SUCCESS_FACTOR
if self.from_cp.captured:
return attackers_success
else:
return not attackers_success
def player_defending(self, flights: db.TaskForceDict):
assert CAS in flights and len(flights) == 1, "Invalid flights"
suitable_unittypes = db.find_unittype(Reconnaissance, self.attacker_name)
random.shuffle(suitable_unittypes)
unittypes = suitable_unittypes[:self.TARGET_VARIETY]
typecount = max(math.floor(self.difficulty * self.TARGET_AMOUNT_FACTOR), 1)
self.targets = {unittype: typecount for unittype in unittypes}
op = InsurgentAttackOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
op.setup(target=self.targets,
strikegroup=flights[CAS])
self.operation = op

View File

@@ -1,15 +1,6 @@
import math
import random
from dcs.task import *
from dcs.vehicles import *
from game import db
from game.operation.intercept import InterceptOperation
from theater.conflicttheater import *
from userdata.debriefing import Debriefing
from .event import Event
from .event import *
class InterceptEvent(Event):
@@ -19,15 +10,39 @@ class InterceptEvent(Event):
transport_unit = None # type: FlyingType
def __init__(self, game, from_cp: ControlPoint, target_cp: ControlPoint, location: Point, attacker_name: str,
defender_name: str):
super().__init__(game, from_cp, target_cp, location, attacker_name, defender_name)
self.location = Conflict.intercept_position(self.from_cp, self.to_cp)
def __str__(self):
return "Intercept from {} at {}".format(self.from_cp, self.to_cp)
return "Air Intercept"
@property
def tasks(self):
return [CAP]
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAP:
if self.is_player_attacking:
return "Intercept flight"
else:
return "Escort flight"
def _enemy_scramble_multiplier(self) -> float:
is_global = self.departure_cp.is_global or self.to_cp.is_global
return self.game.settings.multiplier * is_global and 0.5 or 1
@property
def threat_description(self):
return "{} aircraft".format(self.enemy_cp.base.scramble_count(self.game.settings.multiplier, CAP))
return "{} aircraft".format(self.enemy_cp.base.scramble_count(self._enemy_scramble_multiplier(), CAP))
@property
def global_cp_available(self) -> bool:
return True
def is_successfull(self, debriefing: Debriefing):
units_destroyed = debriefing.destroyed_units[self.defender_name].get(self.transport_unit, 0)
units_destroyed = debriefing.destroyed_units.get(self.defender_name, {}).get(self.transport_unit, 0)
if self.from_cp.captured:
return units_destroyed > 0
else:
@@ -53,8 +68,10 @@ class InterceptEvent(Event):
if self.to_cp.captured:
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def player_attacking(self, interceptors: db.PlaneDict, clients: db.PlaneDict):
escort = self.to_cp.base.scramble_sweep(self.game.settings.multiplier)
def player_attacking(self, flights: db.TaskForceDict):
assert CAP in flights and len(flights) == 1, "Invalid flights"
escort = self.to_cp.base.scramble_sweep(self._enemy_scramble_multiplier())
self.transport_unit = random.choice(db.find_unittype(Transport, self.defender_name))
assert self.transport_unit is not None
@@ -63,20 +80,21 @@ class InterceptEvent(Event):
op = InterceptOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients=clients,
defender_clients={},
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
op.setup(escort=escort,
op.setup(location=self.location,
escort=assigned_units_from(escort),
transport={self.transport_unit: 1},
airdefense={airdefense_unit: self.AIRDEFENSE_COUNT},
interceptors=interceptors)
interceptors=flights[CAP])
self.operation = op
def player_defending(self, escort: db.PlaneDict, clients: db.PlaneDict):
# TODO: even not quick mission is too quick
def player_defending(self, flights: db.TaskForceDict):
assert CAP in flights and len(flights) == 1, "Invalid flights"
interceptors = self.from_cp.base.scramble_interceptors(self.game.settings.multiplier)
self.transport_unit = random.choice(db.find_unittype(Transport, self.defender_name))
@@ -85,14 +103,14 @@ class InterceptEvent(Event):
op = InterceptOperation(game=self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients={},
defender_clients=clients,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp)
op.setup(escort=escort,
op.setup(location=self.location,
escort=flights[CAP],
transport={self.transport_unit: 1},
interceptors=interceptors,
interceptors=assigned_units_from(interceptors),
airdefense={})
self.operation = op

View File

@@ -1,15 +1,6 @@
import typing
import math
import random
from dcs.task import *
from dcs.vehicles import *
from game import db
from game.operation.navalintercept import NavalInterceptionOperation
from userdata.debriefing import Debriefing
from .event import Event
from .event import *
class NavalInterceptEvent(Event):
@@ -18,29 +9,51 @@ class NavalInterceptEvent(Event):
targets = None # type: db.ShipDict
def __init__(self, game, from_cp: ControlPoint, target_cp: ControlPoint, location: Point, attacker_name: str,
defender_name: str):
super().__init__(game, from_cp, target_cp, location, attacker_name, defender_name)
self.location = Conflict.naval_intercept_position(from_cp, target_cp, game.theater)
def _targets_count(self) -> int:
from gen.conflictgen import IMPORTANCE_LOW, IMPORTANCE_HIGH
factor = (self.to_cp.importance - IMPORTANCE_LOW) * 10
from gen.conflictgen import IMPORTANCE_LOW
factor = (self.to_cp.importance - IMPORTANCE_LOW + 0.1) * 20
return max(int(factor), 1)
def __str__(self) -> str:
return "Naval intercept at {}".format(self.to_cp)
return "Naval intercept"
@property
def tasks(self):
if self.is_player_attacking:
return [CAS]
else:
return [CAP]
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAS:
return "Naval intercept flight"
elif for_task == CAP:
return "CAP flight"
@property
def threat_description(self):
s = "{} ship(s)".format(self._targets_count())
if not self.from_cp.captured:
s += ", {} aircraft".format(self.from_cp.base.scramble_count(self.game.settings.multiplier))
if not self.departure_cp.captured:
s += ", {} aircraft".format(self.departure_cp.base.scramble_count(self.game.settings.multiplier))
return s
@property
def global_cp_available(self) -> bool:
return True
def is_successfull(self, debriefing: Debriefing):
total_targets = sum(self.targets.values())
destroyed_targets = 0
for unit, count in debriefing.destroyed_units[self.defender_name].items():
for unit, count in debriefing.destroyed_units.get(self.defender_name, {}).items():
if unit in self.targets:
destroyed_targets += count
if self.from_cp.captured:
if self.departure_cp.captured:
return math.ceil(float(destroyed_targets) / total_targets) > self.SUCCESS_RATE
else:
return math.ceil(float(destroyed_targets) / total_targets) < self.SUCCESS_RATE
@@ -52,11 +65,11 @@ class NavalInterceptEvent(Event):
if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
self.departure_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
# enemy attacking
if self.is_successfull(debriefing):
self.from_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
self.departure_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else:
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
@@ -64,7 +77,9 @@ class NavalInterceptEvent(Event):
if self.to_cp.captured:
self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
def player_attacking(self, strikegroup: db.PlaneDict, clients: db.PlaneDict):
def player_attacking(self, flights: db.TaskForceDict):
assert CAS in flights and len(flights) == 1, "Invalid flights"
self.targets = {
random.choice(db.find_unittype(CargoTransportation, self.defender_name)): self._targets_count(),
}
@@ -73,19 +88,21 @@ class NavalInterceptEvent(Event):
self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients=clients,
defender_clients={},
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp
)
op.setup(strikegroup=strikegroup,
op.setup(location=self.location,
strikegroup=flights[CAS],
interceptors={},
targets=self.targets)
self.operation = op
def player_defending(self, interceptors: db.PlaneDict, clients: db.PlaneDict):
def player_defending(self, flights: db.TaskForceDict):
assert CAP in flights and len(flights) == 1, "Invalid flights"
self.targets = {
random.choice(db.find_unittype(CargoTransportation, self.defender_name)): self._targets_count(),
}
@@ -94,15 +111,14 @@ class NavalInterceptEvent(Event):
self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
attacker_clients={},
defender_clients=clients,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp
)
strikegroup = self.from_cp.base.scramble_cas(self.game.settings.multiplier)
op.setup(strikegroup=strikegroup,
interceptors=interceptors,
strikegroup = self.departure_cp.base.scramble_cas(self.game.settings.multiplier)
op.setup(strikegroup=assigned_units_from(strikegroup),
interceptors=flights[CAP],
targets=self.targets)
self.operation = op

73
game/event/strike.py Normal file
View File

@@ -0,0 +1,73 @@
from game.operation.strike import StrikeOperation
from .event import *
class StrikeEvent(Event):
STRENGTH_INFLUENCE = 0.0
SINGLE_OBJECT_STRENGTH_INFLUENCE = 0.05
def __str__(self):
return "Strike / SEAD"
def is_successfull(self, debriefing: Debriefing):
return True
@property
def threat_description(self):
return "{} aircraft + AA".format(self.to_cp.base.scramble_count(self.game.settings.multiplier, CAP))
@property
def tasks(self):
if self.is_player_attacking:
return [CAP, CAS, SEAD]
else:
return [CAP]
@property
def ai_banned_tasks(self):
return [CAS]
@property
def player_banned_tasks(self):
return [SEAD]
@property
def global_cp_available(self) -> bool:
return True
def flight_name(self, for_task: typing.Type[Task]) -> str:
if for_task == CAP:
if self.is_player_attacking:
return "Escort flight"
else:
return "CAP flight"
elif for_task == SEAD:
return "SEAD flight"
elif for_task == CAS:
return "Strike flight"
def commit(self, debriefing: Debriefing):
super(StrikeEvent, self).commit(debriefing)
self.to_cp.base.affect_strength(-self.SINGLE_OBJECT_STRENGTH_INFLUENCE * len(debriefing.destroyed_objects))
def player_attacking(self, flights: db.TaskForceDict):
assert CAP in flights and CAS in flights and SEAD in flights and len(flights) == 3, "Invalid flights"
op = StrikeOperation(
self.game,
attacker_name=self.attacker_name,
defender_name=self.defender_name,
from_cp=self.from_cp,
departure_cp=self.departure_cp,
to_cp=self.to_cp
)
interceptors = self.to_cp.base.scramble_interceptors(self.game.settings.multiplier)
op.setup(strikegroup=flights[CAS],
sead=flights[SEAD],
escort=flights[CAP],
interceptors=assigned_units_from(interceptors))
self.operation = op

View File

@@ -1,3 +1,4 @@
import logging
import typing
import random
import math
@@ -5,6 +6,7 @@ import math
from dcs.task import *
from dcs.vehicles import *
from gen.conflictgen import Conflict
from userdata.debriefing import Debriefing
from theater import *
@@ -23,36 +25,47 @@ COMMISION_LIMITS_FACTORS = {
COMMISION_AMOUNTS_SCALE = 1.5
COMMISION_AMOUNTS_FACTORS = {
PinpointStrike: 2,
PinpointStrike: 3,
CAS: 1,
CAP: 2,
AirDefence: 0.3,
}
PLAYER_INTERCEPT_GLOBAL_PROBABILITY_BASE = 25
PLAYER_INTERCEPT_GLOBAL_PROBABILITY_BASE = 30
PLAYER_INTERCEPT_GLOBAL_PROBABILITY_LOG = 2
PLAYER_BASEATTACK_THRESHOLD = 0.4
"""
Various events probabilities. First key is player probabilty, second is enemy probability.
For the enemy events, only 1 event of each type could be generated for a turn.
Events:
* CaptureEvent - capture base
* BaseAttackEvent - capture base
* InterceptEvent - air intercept
* GroundInterceptEvent - frontline CAS
* GroundAttackEvent - destroy insurgents
* FrontlineAttackEvent - frontline attack
* NavalInterceptEvent - naval intercept
* AntiAAStrikeEvent - anti-AA strike
* StrikeEvent - strike event
* InfantryTransportEvent - helicopter infantry transport
"""
EVENT_PROBABILITIES = {
CaptureEvent: [100, 10],
InterceptEvent: [25, 10],
GroundInterceptEvent: [25, 10],
GroundAttackEvent: [0, 10],
NavalInterceptEvent: [25, 10],
AntiAAStrikeEvent: [25, 10],
InfantryTransportEvent: [25, 0],
# events always present; only for the player
FrontlineAttackEvent: [100, 9],
#FrontlinePatrolEvent: [100, 0],
StrikeEvent: [100, 0],
# events randomly present; only for the player
#InfantryTransportEvent: [25, 0],
ConvoyStrikeEvent: [25, 0],
# events conditionally present; for both enemy and player
BaseAttackEvent: [100, 9],
# events randomly present; for both enemy and player
InterceptEvent: [25, 9],
NavalInterceptEvent: [25, 9],
# events randomly present; only for the enemy
InsurgentAttackEvent: [0, 6],
}
# amount of strength player bases recover for the turn
@@ -65,9 +78,9 @@ ENEMY_BASE_STRENGTH_RECOVERY = 0.05
AWACS_BUDGET_COST = 4
# Initial budget value
PLAYER_BUDGET_INITIAL = 120
PLAYER_BUDGET_INITIAL = 170
# Base post-turn bonus value
PLAYER_BUDGET_BASE = 10
PLAYER_BUDGET_BASE = 14
# Bonus multiplier logarithm base
PLAYER_BUDGET_IMPORTANCE_LOG = 2
@@ -87,61 +100,95 @@ class Game:
self.enemy = enemy_name
def _roll(self, prob, mult):
return random.randint(1, 100) <= prob * mult
if self.settings.version == "dev":
# always generate all events for dev
return 100
else:
return random.randint(1, 100) <= prob * mult
def _generate_globalinterceptions(self):
global_count = len([x for x in self.theater.player_points() if x.is_global])
for from_cp in [x for x in self.theater.player_points() if x.is_global]:
probability_base = max(PLAYER_INTERCEPT_GLOBAL_PROBABILITY_BASE / global_count, 1)
probability = probability_base * math.log(len(self.theater.player_points()) + 1, PLAYER_INTERCEPT_GLOBAL_PROBABILITY_LOG)
if self._roll(probability, from_cp.base.strength):
to_cp = random.choice([x for x in self.theater.enemy_points() if x not in self.theater.conflicts()])
self.events.append(InterceptEvent(attacker_name=self.player,
defender_name=self.enemy,
from_cp=from_cp,
to_cp=to_cp,
game=self))
break
def _generate_player_event(self, event_class, player_cp, enemy_cp):
if event_class == NavalInterceptEvent and enemy_cp.radials == LAND:
# skip naval events for non-coastal CPs
return
if event_class == BaseAttackEvent and enemy_cp.base.strength > PLAYER_BASEATTACK_THRESHOLD and self.settings.version != "dev":
# skip base attack events for CPs yet too strong
return
if event_class == StrikeEvent and not enemy_cp.ground_objects:
# skip strikes in case of no targets
return
self.events.append(event_class(self, player_cp, enemy_cp, enemy_cp.position, self.player, self.enemy))
def _generate_enemy_event(self, event_class, player_cp, enemy_cp):
if event_class in [type(x) for x in self.events if not self.is_player_attack(x)]:
# skip already generated enemy event types
return
if player_cp in self.ignored_cps:
# skip attacks against ignored CPs (for example just captured ones)
return
if enemy_cp.base.total_planes == 0:
# skip event if there's no planes on the base
return
if player_cp.is_global:
# skip carriers
return
if event_class == NavalInterceptEvent:
if player_cp.radials == LAND:
# skip naval events for non-coastal CPs
return
elif event_class == StrikeEvent:
if not player_cp.ground_objects:
# skip strikes if there's no ground objects
return
elif event_class == BaseAttackEvent:
if BaseAttackEvent in [type(x) for x in self.events]:
# skip base attack event if there's another one going on
return
if enemy_cp.base.total_armor == 0:
# skip base attack if there's no armor
return
if player_cp.base.strength > PLAYER_BASEATTACK_THRESHOLD:
# skip base attack if strength is too high
return
self.events.append(event_class(self, enemy_cp, player_cp, player_cp.position, self.enemy, self.player))
def _generate_events(self):
enemy_cap_generated = False
enemy_generated_types = []
strikes_generated_for = set()
base_attack_generated_for = set()
for player_cp, enemy_cp in self.theater.conflicts(True):
if player_cp.is_global or enemy_cp.is_global:
continue
for event_class, (player_probability, enemy_probability) in EVENT_PROBABILITIES.items():
if self._roll(player_probability, player_cp.base.strength):
if event_class == NavalInterceptEvent and enemy_cp.radials == LAND:
pass
else:
self.events.append(event_class(self.player, self.enemy, player_cp, enemy_cp, self))
elif self._roll(enemy_probability, enemy_cp.base.strength):
if event_class in enemy_generated_types:
if event_class in [FrontlineAttackEvent, FrontlinePatrolEvent, InfantryTransportEvent, ConvoyStrikeEvent]:
# skip events requiring frontline
if not Conflict.has_frontline_between(player_cp, enemy_cp):
continue
if player_cp in self.ignored_cps:
# don't generate multiple 100% events from each attack direction
if event_class is StrikeEvent:
if enemy_cp in strikes_generated_for:
continue
if event_class is BaseAttackEvent:
if enemy_cp in base_attack_generated_for:
continue
if enemy_cp.base.total_planes == 0:
continue
if player_probability == 100 or player_probability > 0 and self._roll(player_probability, player_cp.base.strength):
self._generate_player_event(event_class, player_cp, enemy_cp)
if event_class is StrikeEvent:
strikes_generated_for.add(enemy_cp)
if event_class is BaseAttackEvent:
base_attack_generated_for.add(enemy_cp)
if event_class == NavalInterceptEvent:
if player_cp.radials == LAND:
continue
elif event_class == CaptureEvent:
if enemy_cap_generated:
continue
if enemy_cp.base.total_armor == 0:
continue
enemy_cap_generated = True
elif event_class == AntiAAStrikeEvent:
if player_cp.base.total_aa == 0:
continue
enemy_generated_types.append(event_class)
self.events.append(event_class(self.enemy, self.player, enemy_cp, player_cp, self))
if enemy_probability == 100 or enemy_probability > 0 and self._roll(enemy_probability, enemy_cp.base.strength):
self._generate_enemy_event(event_class, player_cp, enemy_cp)
def commision_unit_types(self, cp: ControlPoint, for_task: Task) -> typing.Collection[UnitType]:
importance_factor = (cp.importance - IMPORTANCE_LOW) / (IMPORTANCE_HIGH - IMPORTANCE_LOW)
@@ -161,7 +208,7 @@ class Game:
if points_to_spend > 0:
unittypes = self.commision_unit_types(cp, for_task)
d = {random.choice(unittypes): points_to_spend}
print("Commision {}: {}".format(cp, d))
logging.info("Commision {}: {}".format(cp, d))
cp.base.commision_units(d)
@property
@@ -194,10 +241,13 @@ class Game:
def initiate_event(self, event: Event):
assert event in self.events
logging.info("Generating {} (regular)".format(event))
event.generate()
logging.info("Generating {} (quick)".format(event))
event.generate_quick()
def finish_event(self, event: Event, debriefing: Debriefing):
logging.info("Finishing event {}".format(event))
event.commit(debriefing)
if event.is_successfull(debriefing):
self.budget += event.bonus()
@@ -205,14 +255,23 @@ class Game:
if event in self.events:
self.events.remove(event)
else:
print("finish_event: event not in the events!")
logging.info("finish_event: event not in the events!")
def is_player_attack(self, event: Event):
return event.attacker_name == self.player
def is_player_attack(self, event):
if isinstance(event, Event):
return event.attacker_name == self.player
else:
return event.name == self.player
def pass_turn(self, no_action=False, ignored_cps: typing.Collection[ControlPoint]=None):
logging.info("Pass turn")
for event in self.events:
event.skip()
if self.settings.version == "dev":
# don't damage player CPs in by skipping in dev mode
if isinstance(event, UnitsDeliveryEvent):
event.skip()
else:
event.skip()
if not no_action:
self._budget_player()
@@ -229,5 +288,5 @@ class Game:
self.events = [] # type: typing.List[Event]
self._generate_events()
self._generate_globalinterceptions()
#self._generate_globalinterceptions()

View File

@@ -1,53 +0,0 @@
from dcs.terrain import Terrain
from game import db
from gen.armor import *
from gen.aircraft import *
from gen.aaa import *
from gen.shipgen import *
from gen.triggergen import *
from gen.awacsgen import *
from gen.visualgen import *
from gen.conflictgen import Conflict
from .operation import Operation
class AntiAAStrikeOperation(Operation):
strikegroup = None # type: db.PlaneDict
interceptors = None # type: db.PlaneDict
target = None # type: db.ArmorDict
def setup(self,
target: db.ArmorDict,
strikegroup: db.PlaneDict,
interceptors: db.PlaneDict):
self.strikegroup = strikegroup
self.interceptors = interceptors
self.target = target
def prepare(self, terrain: Terrain, is_quick: bool):
super(AntiAAStrikeOperation, self).prepare(terrain, is_quick)
if self.defender_name == self.game.player:
self.attackers_starting_position = None
self.defenders_starting_position = None
conflict = Conflict.ground_base_attack(
attacker=self.mission.country(self.attacker_name),
defender=self.mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.mission,
conflict=conflict)
def generate(self):
self.airgen.generate_cas_strikegroup(self.strikegroup, clients=self.attacker_clients, at=self.attackers_starting_position)
if self.interceptors:
self.airgen.generate_defense(self.interceptors, clients=self.defender_clients, at=self.defenders_starting_position)
self.armorgen.generate({}, self.target)
super(AntiAAStrikeOperation, self).generate()

View File

@@ -0,0 +1,69 @@
from game.db import assigned_units_split
from gen.triggergen import *
from .operation import *
class BaseAttackOperation(Operation):
cas = None # type: db.AssignedUnitsDict
escort = None # type: db.AssignedUnitsDict
intercept = None # type: db.AssignedUnitsDict
attack = None # type: db.ArmorDict
defense = None # type: db.ArmorDict
aa = None # type: db.AirDefenseDict
trigger_radius = TRIGGER_RADIUS_SMALL
def setup(self,
cas: db.AssignedUnitsDict,
escort: db.AssignedUnitsDict,
attack: db.AssignedUnitsDict,
intercept: db.AssignedUnitsDict,
defense: db.ArmorDict,
aa: db.AirDefenseDict):
self.cas = cas
self.escort = escort
self.intercept = intercept
self.attack = attack
self.defense = defense
self.aa = aa
def prepare(self, terrain: dcs.terrain.Terrain, is_quick: bool):
super(BaseAttackOperation, self).prepare(terrain, is_quick)
self.defenders_starting_position = None
if self.game.player == self.defender_name:
self.attackers_starting_position = None
conflict = Conflict.capture_conflict(
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
self.armorgen.generate(self.attack, self.defense)
self.aagen.generate(self.aa)
self.airgen.generate_defense(*assigned_units_split(self.intercept), at=self.defenders_starting_position)
self.airgen.generate_cas_strikegroup(*assigned_units_split(self.cas), at=self.attackers_starting_position)
self.airgen.generate_attackers_escort(*assigned_units_split(self.escort), at=self.attackers_starting_position)
self.visualgen.generate_target_smokes(self.to_cp)
self.briefinggen.title = "Base attack"
self.briefinggen.description = "The goal of an attacker is to lower defender presence by destroying their armor and aircraft. Base will be considered captured if attackers on the ground overrun the defenders. Be advised that your flight will not attack anything until you explicitly tell them so by comms menu."
if self.game.player == self.attacker_name:
self.briefinggen.append_waypoint("TARGET")
else:
pass
super(BaseAttackOperation, self).generate()

View File

@@ -1,67 +0,0 @@
from game import db
from gen.conflictgen import Conflict
from gen.armor import *
from gen.aircraft import *
from gen.aaa import *
from gen.shipgen import *
from gen.triggergen import *
from gen.awacsgen import *
from gen.visualgen import *
from .operation import Operation
class CaptureOperation(Operation):
cas = None # type: db.PlaneDict
escort = None # type: db.PlaneDict
intercept = None # type: db.PlaneDict
attack = None # type: db.ArmorDict
defense = None # type: db.ArmorDict
aa = None # type: db.AirDefenseDict
trigger_radius = TRIGGER_RADIUS_SMALL
def setup(self,
cas: db.PlaneDict,
escort: db.PlaneDict,
attack: db.ArmorDict,
intercept: db.PlaneDict,
defense: db.ArmorDict,
aa: db.AirDefenseDict):
self.cas = cas
self.escort = escort
self.intercept = intercept
self.attack = attack
self.defense = defense
self.aa = aa
def prepare(self, terrain: dcs.terrain.Terrain, is_quick: bool):
super(CaptureOperation, self).prepare(terrain, is_quick)
self.defenders_starting_position = None
if self.game.player == self.defender_name:
self.attackers_starting_position = None
conflict = Conflict.capture_conflict(
attacker=self.mission.country(self.attacker_name),
defender=self.mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.mission,
conflict=conflict)
def generate(self):
self.armorgen.generate(self.attack, self.defense)
self.aagen.generate(self.aa)
self.airgen.generate_defense(self.intercept, clients=self.defender_clients, at=self.defenders_starting_position)
self.airgen.generate_cas_strikegroup(self.cas, clients=self.attacker_clients, at=self.attackers_starting_position)
self.airgen.generate_strikegroup_escort(self.escort, clients=self.attacker_clients, at=self.attackers_starting_position)
self.visualgen.generate_target_smokes(self.to_cp)
super(CaptureOperation, self).generate()

View File

@@ -0,0 +1,49 @@
from game.db import assigned_units_split
from .operation import *
class ConvoyStrikeOperation(Operation):
strikegroup = None # type: db.AssignedUnitsDict
target = None # type: db.ArmorDict
def setup(self,
target: db.ArmorDict,
strikegroup: db.AssignedUnitsDict):
self.strikegroup = strikegroup
self.target = target
def prepare(self, terrain: Terrain, is_quick: bool):
super(ConvoyStrikeOperation, self).prepare(terrain, is_quick)
conflict = Conflict.convoy_strike_conflict(
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
if self.is_player_attack:
self.prepare_carriers(db.unitdict_from(self.strikegroup))
planes_flights = {k: v for k, v in self.strikegroup.items() if k in plane_map.values()}
self.airgen.generate_cas_strikegroup(*assigned_units_split(planes_flights), at=self.attackers_starting_position)
heli_flights = {k: v for k, v in self.strikegroup.items() if k in helicopters.helicopter_map.values()}
if heli_flights:
self.briefinggen.append_frequency("FARP + Heli flights", "127.5 MHz AM")
for farp, dict in zip(self.groundobjectgen.generate_farps(sum([x[0] for x in heli_flights.values()])),
db.assignedunits_split_to_count(heli_flights, self.groundobjectgen.FARP_CAPACITY)):
self.airgen.generate_cas_strikegroup(*assigned_units_split(dict),
at=farp,
escort=len(planes_flights) == 0)
self.armorgen.generate_convoy(self.target)
self.briefinggen.append_waypoint("TARGET")
super(ConvoyStrikeOperation, self).generate()

View File

@@ -0,0 +1,75 @@
from game.db import assigned_units_split
from .operation import *
MAX_DISTANCE_BETWEEN_GROUPS = 12000
class FrontlineAttackOperation(Operation):
interceptors = None # type: db.AssignedUnitsDict
escort = None # type: db.AssignedUnitsDict
strikegroup = None # type: db.AssignedUnitsDict
attackers = None # type: db.ArmorDict
defenders = None # type: db.ArmorDict
def setup(self,
defenders: db.ArmorDict,
attackers: db.ArmorDict,
strikegroup: db.AssignedUnitsDict,
escort: db.AssignedUnitsDict,
interceptors: db.AssignedUnitsDict):
self.strikegroup = strikegroup
self.escort = escort
self.interceptors = interceptors
self.defenders = defenders
self.attackers = attackers
def prepare(self, terrain: Terrain, is_quick: bool):
super(FrontlineAttackOperation, self).prepare(terrain, is_quick)
if self.defender_name == self.game.player:
self.attackers_starting_position = None
self.defenders_starting_position = None
conflict = Conflict.frontline_cas_conflict(
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
if self.is_player_attack:
self.prepare_carriers(db.unitdict_from(self.strikegroup))
# ground units
self.armorgen.generate_vec(self.attackers, self.defenders)
# strike group w/ heli support
planes_flights = {k: v for k, v in self.strikegroup.items() if k in plane_map.values()}
self.airgen.generate_cas_strikegroup(*assigned_units_split(planes_flights), at=self.attackers_starting_position)
heli_flights = {k: v for k, v in self.strikegroup.items() if k in helicopters.helicopter_map.values()}
if heli_flights:
self.briefinggen.append_frequency("FARP + Heli flights", "127.5 MHz AM")
for farp, dict in zip(self.groundobjectgen.generate_farps(sum([x[0] for x in heli_flights.values()])),
db.assignedunits_split_to_count(heli_flights, self.groundobjectgen.FARP_CAPACITY)):
self.airgen.generate_cas_strikegroup(*assigned_units_split(dict),
at=farp,
escort=len(planes_flights) == 0)
self.airgen.generate_attackers_escort(*assigned_units_split(self.escort), at=self.attackers_starting_position)
self.airgen.generate_defense(*assigned_units_split(self.interceptors), at=self.defenders_starting_position)
self.briefinggen.title = "Frontline CAS"
self.briefinggen.description = "Provide CAS for the ground forces attacking enemy lines. Operation will be considered successful if total number of enemy units will be lower than your own by a factor of 1.5 (i.e. with 12 units from both sides, enemy forces need to be reduced to at least 8), meaning that you (and, probably, your wingmans) should concentrate on destroying the enemy units. Target base strength will be lowered as a result. Be advised that your flight will not attack anything until you explicitly tell them so by comms menu."
self.briefinggen.append_waypoint("CAS AREA IP")
self.briefinggen.append_waypoint("CAS AREA EGRESS")
super(FrontlineAttackOperation, self).generate()

View File

@@ -0,0 +1,59 @@
from game.db import assigned_units_split
from .operation import *
MAX_DISTANCE_BETWEEN_GROUPS = 12000
class FrontlinePatrolOperation(Operation):
cas = None # type: db.AssignedUnitsDict
escort = None # type: db.AssignedUnitsDict
interceptors = None # type: db.AssignedUnitsDict
armor_attackers = None # type: db.ArmorDict
armor_defenders = None # type: db.ArmorDict
def setup(self,
cas: db.AssignedUnitsDict,
escort: db.AssignedUnitsDict,
interceptors: db.AssignedUnitsDict,
armor_attackers: db.ArmorDict,
armor_defenders: db.ArmorDict):
self.cas = cas
self.escort = escort
self.interceptors = interceptors
self.armor_attackers = armor_attackers
self.armor_defenders = armor_defenders
def prepare(self, terrain: Terrain, is_quick: bool):
super(FrontlinePatrolOperation, self).prepare(terrain, is_quick)
self.defenders_starting_position = None
conflict = Conflict.frontline_cap_conflict(
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
if self.is_player_attack:
self.prepare_carriers(db.unitdict_from(self.interceptors))
self.airgen.generate_defenders_cas(*assigned_units_split(self.cas), at=self.defenders_starting_position)
self.airgen.generate_defenders_escort(*assigned_units_split(self.escort), at=self.defenders_starting_position)
self.airgen.generate_migcap(*assigned_units_split(self.interceptors), at=self.attackers_starting_position)
self.armorgen.generate_vec(self.armor_attackers, self.armor_defenders)
self.briefinggen.title = "Frontline CAP"
self.briefinggen.description = "Providing CAP support for ground units attacking enemy lines. Enemy will scramble its CAS and your task is to intercept it. Operation will be considered successful if total number of friendly units will be lower than enemy by at least a factor of 0.8 (i.e. with 12 units from both sides, there should be at least 8 friendly units alive), lowering targets strength as a result."
self.briefinggen.append_waypoint("CAP AREA IP")
self.briefinggen.append_waypoint("CAP AREA EGRESS")
super(FrontlinePatrolOperation, self).generate()

View File

@@ -1,44 +0,0 @@
from dcs.terrain import Terrain
from game import db
from gen.armor import *
from gen.aircraft import *
from gen.aaa import *
from gen.shipgen import *
from gen.triggergen import *
from gen.awacsgen import *
from gen.visualgen import *
from gen.conflictgen import Conflict
from .operation import Operation
class GroundAttackOperation(Operation):
strikegroup = None # type: db.PlaneDict
target = None # type: db.ArmorDict
def setup(self,
target: db.ArmorDict,
strikegroup: db.PlaneDict):
self.strikegroup = strikegroup
self.target = target
def prepare(self, terrain: Terrain, is_quick: bool):
super(GroundAttackOperation, self).prepare(terrain, is_quick)
conflict = Conflict.ground_attack_conflict(
attacker=self.mission.country(self.attacker_name),
defender=self.mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.mission,
conflict=conflict)
def generate(self):
self.airgen.generate_defense(self.strikegroup, self.defender_clients, self.defenders_starting_position)
self.armorgen.generate(self.target, {})
super(GroundAttackOperation, self).generate()

View File

@@ -1,53 +0,0 @@
from dcs.terrain import Terrain
from game import db
from gen.armor import *
from gen.aircraft import *
from gen.aaa import *
from gen.shipgen import *
from gen.triggergen import *
from gen.awacsgen import *
from gen.visualgen import *
from gen.conflictgen import Conflict
from .operation import Operation
class GroundInterceptOperation(Operation):
strikegroup = None # type: db.PlaneDict
interceptors = None # type: db.PlaneDict
target = None # type: db.ArmorDict
def setup(self,
target: db.ArmorDict,
strikegroup: db.PlaneDict,
interceptors: db.PlaneDict):
self.strikegroup = strikegroup
self.interceptors = interceptors
self.target = target
def prepare(self, terrain: Terrain, is_quick: bool):
super(GroundInterceptOperation, self).prepare(terrain, is_quick)
if self.defender_name == self.game.player:
self.attackers_starting_position = None
self.defenders_starting_position = None
conflict = Conflict.ground_intercept_conflict(
attacker=self.mission.country(self.attacker_name),
defender=self.mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.mission,
conflict=conflict)
def generate(self):
self.airgen.generate_cas_strikegroup(self.strikegroup, clients=self.attacker_clients, at=self.attackers_starting_position)
if self.interceptors:
self.airgen.generate_defense(self.interceptors, clients=self.defender_clients, at=self.defenders_starting_position)
self.armorgen.generate({}, self.target)
super(GroundInterceptOperation, self).generate()

View File

@@ -1,23 +1,13 @@
from dcs.terrain import Terrain
from game.db import assigned_units_split
from game import db
from gen.armor import *
from gen.aircraft import *
from gen.aaa import *
from gen.shipgen import *
from gen.triggergen import *
from gen.awacsgen import *
from gen.visualgen import *
from gen.conflictgen import Conflict
from .operation import Operation
from .operation import *
class InfantryTransportOperation(Operation):
transport = None # type: db.HeliDict
transport = None # type: db.AssignedUnitsDict
aa = None # type: db.AirDefenseDict
def setup(self, transport: db.HeliDict, aa: db.AirDefenseDict):
def setup(self, transport: db.AssignedUnitsDict, aa: db.AirDefenseDict):
self.transport = transport
self.aa = aa
@@ -25,22 +15,18 @@ class InfantryTransportOperation(Operation):
super(InfantryTransportOperation, self).prepare(terrain, is_quick)
conflict = Conflict.transport_conflict(
attacker=self.mission.country(self.attacker_name),
defender=self.mission.country(self.defender_name),
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.mission,
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
self.airgen.generate_passenger_transport(
helis=self.transport,
clients=self.attacker_clients,
at=self.attackers_starting_position
)
self.airgen.generate_passenger_transport(*assigned_units_split(self.transport), at=self.attackers_starting_position)
self.armorgen.generate_passengers(count=6)
self.aagen.generate_at_defenders_location(self.aa)
@@ -48,6 +34,10 @@ class InfantryTransportOperation(Operation):
self.visualgen.generate_transportation_marker(self.conflict.ground_attackers_location)
self.visualgen.generate_transportation_destination(self.conflict.position)
self.briefinggen.title = "Infantry transport"
self.briefinggen.description = "Helicopter operation to transport infantry troops from the base to the front line. Lowers target strength"
self.briefinggen.append_waypoint("DROP POINT")
# TODO: horrible, horrible hack
# this will disable vehicle activation triggers,
# which aren't needed on this type of missions

View File

@@ -0,0 +1,38 @@
from game.db import assigned_units_split
from .operation import *
class InsurgentAttackOperation(Operation):
strikegroup = None # type: db.AssignedUnitsDict
target = None # type: db.ArmorDict
def setup(self,
target: db.ArmorDict,
strikegroup: db.AssignedUnitsDict):
self.strikegroup = strikegroup
self.target = target
def prepare(self, terrain: Terrain, is_quick: bool):
super(InsurgentAttackOperation, self).prepare(terrain, is_quick)
conflict = Conflict.ground_attack_conflict(
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
self.airgen.generate_defenders_cas(*assigned_units_split(self.strikegroup), at=self.defenders_starting_position)
self.armorgen.generate(self.target, {})
self.briefinggen.title = "Destroy insurgents"
self.briefinggen.description = "Destroy vehicles of insurgents in close proximity of the friendly base. Be advised that your flight will not attack anything until you explicitly tell them so by comms menu."
self.briefinggen.append_waypoint("TARGET")
super(InsurgentAttackOperation, self).generate()

View File

@@ -1,22 +1,24 @@
from dcs.terrain import Terrain
from game.db import assigned_units_split
from gen import *
from .operation import Operation
from .operation import *
class InterceptOperation(Operation):
escort = None # type: db.PlaneDict
location = None # type: Point
escort = None # type: db.AssignedUnitsDict
transport = None # type: db.PlaneDict
interceptors = None # type: db.PlaneDict
interceptors = None # type: db.AssignedUnitsDict
airdefense = None # type: db.AirDefenseDict
trigger_radius = TRIGGER_RADIUS_LARGE
def setup(self,
escort: db.PlaneDict,
location: Point,
escort: db.AssignedUnitsDict,
transport: db.PlaneDict,
airdefense: db.AirDefenseDict,
interceptors: db.PlaneDict):
interceptors: db.AssignedUnitsDict):
self.location = location
self.escort = escort
self.transport = transport
self.airdefense = airdefense
@@ -29,24 +31,35 @@ class InterceptOperation(Operation):
self.attackers_starting_position = None
conflict = Conflict.intercept_conflict(
attacker=self.mission.country(self.attacker_name),
defender=self.mission.country(self.defender_name),
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
position=self.location,
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.mission,
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
if self.is_player_attack:
self.prepare_carriers(db.unitdict_from(self.interceptors))
self.airgen.generate_transport(self.transport, self.to_cp.at)
self.airgen.generate_transport_escort(self.escort, clients=self.defender_clients)
self.airgen.generate_defenders_escort(*assigned_units_split(self.escort), at=self.defenders_starting_position)
if self.from_cp.is_global:
super(InterceptOperation, self).generate()
self.airgen.generate_interception(self.interceptors, clients=self.attacker_clients, at=self.attackers_starting_position)
self.airgen.generate_interception(*assigned_units_split(self.interceptors), at=self.attackers_starting_position)
self.briefinggen.title = "Air Intercept"
if self.game.player == self.attacker_name:
self.briefinggen.description = "Intercept enemy supply transport aircraft. Escort will also be present if there are available planes on the base. Operation will be considered successful if most of the targets are destroyed, lowering targets strength as a result"
self.briefinggen.append_waypoint("TARGET")
for unit_type, count in self.transport.items():
self.briefinggen.append_target("{} ({})".format(db.unit_type_name(unit_type), count))
else:
self.airgen.generate_interception(self.interceptors, clients=self.attacker_clients, at=self.attackers_starting_position)
super(InterceptOperation, self).generate()
self.briefinggen.description = "Escort friendly supply transport aircraft. Operation will be considered failed if most of the targets are destroyed, lowering CP strength as a result"
super(InterceptOperation, self).generate()

View File

@@ -1,19 +1,21 @@
from dcs.terrain import Terrain
from game.db import assigned_units_split
from gen import *
from .operation import Operation
from .operation import *
class NavalInterceptionOperation(Operation):
strikegroup = None # type: db.PlaneDict
interceptors = None # type: db.PlaneDict
location = None # type: Point
strikegroup = None # type: db.AssignedUnitsDict
interceptors = None # type: db.AssignedUnitsDict
targets = None # type: db.ShipDict
trigger_radius = TRIGGER_RADIUS_LARGE
def setup(self,
strikegroup: db.PlaneDict,
interceptors: db.PlaneDict,
location: Point,
strikegroup: db.AssignedUnitsDict,
interceptors: db.AssignedUnitsDict,
targets: db.ShipDict):
self.location = location
self.strikegroup = strikegroup
self.interceptors = interceptors
self.targets = targets
@@ -24,30 +26,42 @@ class NavalInterceptionOperation(Operation):
self.attackers_starting_position = None
conflict = Conflict.naval_intercept_conflict(
attacker=self.mission.country(self.attacker_name),
defender=self.mission.country(self.defender_name),
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
position=self.location,
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(self.mission, conflict)
self.initialize(self.current_mission, conflict)
def generate(self):
super(NavalInterceptionOperation, self).generate()
if self.is_player_attack:
self.prepare_carriers(db.unitdict_from(self.strikegroup))
target_groups = self.shipgen.generate_cargo(units=self.targets)
self.airgen.generate_ship_strikegroup(
attackers=self.strikegroup,
clients=self.attacker_clients,
*assigned_units_split(self.strikegroup),
target_groups=target_groups,
at=self.attackers_starting_position
)
if self.interceptors:
self.airgen.generate_defense(
defenders=self.interceptors,
clients=self.defender_clients,
*assigned_units_split(self.interceptors),
at=self.defenders_starting_position
)
self.briefinggen.title = "Naval Intercept"
if self.game.player == self.attacker_name:
self.briefinggen.description = "Destroy supply transport ships. Lowers target strength. Be advised that your flight will not attack anything until you explicitly tell them so by comms menu."
for unit_type, count in self.targets.items():
self.briefinggen.append_target("{} ({})".format(db.unit_type_name(unit_type), count))
else:
self.briefinggen.description = "Protect supply transport ships."
self.briefinggen.append_waypoint("TARGET")
super(NavalInterceptionOperation, self).generate()

View File

@@ -1,15 +1,19 @@
from dcs.terrain import Terrain
from dcs.lua.parse import loads
from userdata.debriefing import *
from theater import *
from gen import *
TANKER_CALLSIGNS = ["Texaco", "Arco", "Shell"]
class Operation:
attackers_starting_position = None # type: db.StartingPosition
defenders_starting_position = None # type: db.StartingPosition
mission = None # type: dcs.Mission
current_mission = None # type: dcs.Mission
regular_mission = None # type: dcs.Mission
quick_mission = None # type: dcs.Mission
conflict = None # type: Conflict
armorgen = None # type: ArmorConflictGenerator
airgen = None # type: AircraftConflictGenerator
@@ -17,87 +21,145 @@ class Operation:
extra_aagen = None # type: ExtraAAConflictGenerator
shipgen = None # type: ShipGenerator
triggersgen = None # type: TriggersGenerator
awacsgen = None # type: AWACSConflictGenerator
airsupportgen = None # type: AirSupportConflictGenerator
visualgen = None # type: VisualGenerator
envgen = None # type: EnvironmentGenerator
groundobjectgen = None # type: GroundObjectsGenerator
briefinggen = None # type: BriefingGenerator
forcedoptionsgen = None # type: ForcedOptionsGenerator
environment_settings = None
trigger_radius = TRIGGER_RADIUS_MEDIUM
is_quick = None
is_awacs_enabled = False
ca_slots = 0
def __init__(self,
game,
attacker_name: str,
defender_name: str,
attacker_clients: db.PlaneDict,
defender_clients: db.PlaneDict,
from_cp: ControlPoint,
departure_cp: ControlPoint,
to_cp: ControlPoint = None):
self.game = game
self.attacker_name = attacker_name
self.defender_name = defender_name
self.attacker_clients = attacker_clients
self.defender_clients = defender_clients
self.from_cp = from_cp
self.departure_cp = departure_cp
self.to_cp = to_cp
self.is_quick = False
def initialize(self, mission: Mission, conflict: Conflict):
self.mission = mission
self.conflict = conflict
self.armorgen = ArmorConflictGenerator(mission, conflict)
self.airgen = AircraftConflictGenerator(mission, conflict, self.game.settings)
self.aagen = AAConflictGenerator(mission, conflict)
self.shipgen = ShipGenerator(mission, conflict)
self.awacsgen = AWACSConflictGenerator(mission, conflict, self.game)
self.triggersgen = TriggersGenerator(mission, conflict, self.game)
self.visualgen = VisualGenerator(mission, conflict, self.game)
self.envgen = EnviromentGenerator(mission, conflict, self.game)
player_name = self.from_cp.captured and self.attacker_name or self.defender_name
enemy_name = self.from_cp.captured and self.defender_name or self.attacker_name
self.extra_aagen = ExtraAAConflictGenerator(mission, conflict, self.game, player_name, enemy_name)
def prepare(self, terrain: Terrain, is_quick: bool):
self.mission = dcs.Mission(terrain)
self.is_quick = is_quick
if is_quick:
self.attackers_starting_position = None
self.defenders_starting_position = None
else:
self.attackers_starting_position = self.from_cp.at
self.defenders_starting_position = self.to_cp.at
def generate(self):
self.visualgen.generate()
if self.is_awacs_enabled:
self.awacsgen.generate()
self.extra_aagen.generate()
self.triggersgen.generate(self.is_quick, self.trigger_radius)
if self.environment_settings is None:
self.environment_settings = self.envgen.generate()
else:
self.envgen.load(self.environment_settings)
for global_cp in self.game.theater.controlpoints:
if not global_cp.is_global:
continue
ship = self.shipgen.generate_carrier(type=db.find_unittype(Carriage, self.game.player)[0],
country=self.game.player,
at=global_cp.at)
if global_cp == self.from_cp and not self.is_quick:
self.attackers_starting_position = ship
def units_of(self, country_name: str) -> typing.Collection[UnitType]:
return []
def is_successfull(self, debriefing: Debriefing) -> bool:
return True
@property
def is_player_attack(self) -> bool:
return self.from_cp.captured
def initialize(self, mission: Mission, conflict: Conflict):
self.current_mission = mission
self.conflict = conflict
self.armorgen = ArmorConflictGenerator(mission, conflict)
self.airgen = AircraftConflictGenerator(mission, conflict, self.game.settings)
self.aagen = AAConflictGenerator(mission, conflict)
self.shipgen = ShipGenerator(mission, conflict)
self.airsupportgen = AirSupportConflictGenerator(mission, conflict, self.game)
self.triggersgen = TriggersGenerator(mission, conflict, self.game)
self.visualgen = VisualGenerator(mission, conflict, self.game)
self.envgen = EnviromentGenerator(mission, conflict, self.game)
self.forcedoptionsgen = ForcedOptionsGenerator(mission, conflict, self.game)
self.groundobjectgen = GroundObjectsGenerator(mission, conflict, self.game)
self.briefinggen = BriefingGenerator(mission, conflict, self.game)
player_name = self.from_cp.captured and self.attacker_name or self.defender_name
enemy_name = self.from_cp.captured and self.defender_name or self.attacker_name
self.extra_aagen = ExtraAAConflictGenerator(mission, conflict, self.game, player_name, enemy_name)
def prepare(self, terrain: Terrain, is_quick: bool):
with open("resources/default_options.lua", "r") as f:
options_dict = loads(f.read())["options"]
self.current_mission = dcs.Mission(terrain)
if is_quick:
self.quick_mission = self.current_mission
else:
self.regular_mission = self.current_mission
self.current_mission.options.load_from_dict(options_dict)
self.is_quick = is_quick
if is_quick:
self.attackers_starting_position = None
self.defenders_starting_position = None
else:
self.attackers_starting_position = self.departure_cp.at
self.defenders_starting_position = self.to_cp.at
def prepare_carriers(self, for_units: db.UnitsDict):
if not self.departure_cp.is_global:
return
ship = self.shipgen.generate_carrier(for_units=[t for t, c in for_units.items() if c > 0],
country=self.game.player,
at=self.departure_cp.at)
if not self.is_quick:
if not self.to_cp.captured:
self.attackers_starting_position = ship
else:
self.defenders_starting_position = ship
def generate(self):
# air support
self.airsupportgen.generate(self.is_awacs_enabled)
for i, tanker_type in enumerate(self.airsupportgen.generated_tankers):
self.briefinggen.append_frequency("Tanker {} ({})".format(TANKER_CALLSIGNS[i], tanker_type), "{}X/{} MHz AM".format(97+i, 130+i))
if self.is_awacs_enabled:
self.briefinggen.append_frequency("AWACS", "133 MHz AM")
# combined arms
self.current_mission.groundControl.pilot_can_control_vehicles = self.ca_slots > 0
if self.game.player in [country.name for country in self.current_mission.coalition["blue"].countries.values()]:
self.current_mission.groundControl.blue_tactical_commander = self.ca_slots
else:
self.current_mission.groundControl.red_tactical_commander = self.ca_slots
# ground infrastructure
self.groundobjectgen.generate()
self.extra_aagen.generate()
# triggers
if self.game.is_player_attack(self.conflict.attackers_side):
cp = self.conflict.from_cp
else:
cp = self.conflict.to_cp
self.triggersgen.generate(player_cp=cp,
is_quick=self.is_quick,
activation_trigger_radius=self.trigger_radius,
awacs_enabled=self.is_awacs_enabled)
# env settings
if self.environment_settings is None:
self.environment_settings = self.envgen.generate()
else:
self.envgen.load(self.environment_settings)
# options
self.forcedoptionsgen.generate()
# main frequencies
self.briefinggen.append_frequency("Flight", "251 MHz AM")
if self.departure_cp.is_global or self.conflict.to_cp.is_global:
self.briefinggen.append_frequency("Carrier", "20X/ICLS CHAN1")
# briefing
self.briefinggen.generate()
# visuals
self.visualgen.generate()

94
game/operation/strike.py Normal file
View File

@@ -0,0 +1,94 @@
from game.db import assigned_units_split
from .operation import *
class StrikeOperation(Operation):
strikegroup = None # type: db.AssignedUnitsDict
sead = None # type: db.AssignedUnitsDict
escort = None # type: db.AssignedUnitsDict
interceptors = None # type: db.AssignedUnitsDict
trigger_radius = TRIGGER_RADIUS_ALL_MAP
def setup(self,
strikegroup: db.AssignedUnitsDict,
sead: db.AssignedUnitsDict,
escort: db.AssignedUnitsDict,
interceptors: db.AssignedUnitsDict):
self.strikegroup = strikegroup
self.sead = sead
self.escort = escort
self.interceptors = interceptors
def prepare(self, terrain: Terrain, is_quick: bool):
super(StrikeOperation, self).prepare(terrain, is_quick)
self.defenders_starting_position = None
if self.game.player == self.defender_name:
self.attackers_starting_position = None
conflict = Conflict.strike_conflict(
attacker=self.current_mission.country(self.attacker_name),
defender=self.current_mission.country(self.defender_name),
from_cp=self.from_cp,
to_cp=self.to_cp,
theater=self.game.theater
)
self.initialize(mission=self.current_mission,
conflict=conflict)
def generate(self):
self.prepare_carriers(db.unitdict_merge(db.unitdict_from(self.strikegroup), db.unitdict_from(self.escort)))
targets = [] # type: typing.List[typing.Tuple[str, str, Point]]
sead_targets = [] # type: typing.List[typing.Tuple[str, str, Point]]
category_counters = {} # type: typing.Dict[str, int]
processed_groups = []
for object in self.to_cp.ground_objects:
if object.group_identifier in processed_groups:
continue
processed_groups.append(object.group_identifier)
category_counters[object.category] = category_counters.get(object.category, 0) + 1
markpoint_name = "{}{}".format(object.name_abbrev, category_counters[object.category])
if object.category == "aa":
sead_targets.append((str(object), markpoint_name, object.position))
targets.append((str(object), markpoint_name, object.position))
targets.sort(key=lambda x: self.from_cp.position.distance_to_point(x[2]))
for (name, markpoint_name, _) in targets:
self.briefinggen.append_waypoint("TARGET {} (TP {})".format(str(name), markpoint_name))
planes_flights = {k: v for k, v in self.strikegroup.items() if k in plane_map.values()}
self.airgen.generate_ground_attack_strikegroup(*assigned_units_split(planes_flights),
targets=[(mp, pos) for (n, mp, pos) in targets],
at=self.attackers_starting_position,
escort=len(self.sead) == 0)
self.airgen.generate_sead_strikegroup(*assigned_units_split(self.sead),
targets=[(mp, pos) for (n, mp, pos) in sead_targets],
at=self.attackers_starting_position,
escort=len(self.sead) > 0)
heli_flights = {k: v for k, v in self.strikegroup.items() if k in helicopters.helicopter_map.values()}
if heli_flights:
self.briefinggen.append_frequency("FARP", "127.5 MHz AM")
for farp, dict in zip(self.groundobjectgen.generate_farps(sum([x[0] for x in heli_flights.values()])),
db.assignedunits_split_to_count(heli_flights, self.groundobjectgen.FARP_CAPACITY)):
self.airgen.generate_ground_attack_strikegroup(*assigned_units_split(dict),
targets=[(mp, pos) for (n, mp, pos) in targets],
at=farp,
escort=len(planes_flights) == 0)
self.airgen.generate_attackers_escort(*assigned_units_split(self.escort), at=self.attackers_starting_position)
self.airgen.generate_barcap(*assigned_units_split(self.interceptors), at=self.defenders_starting_position)
self.briefinggen.title = "Strike"
self.briefinggen.description = "Destroy infrastructure assets and military supplies in the region. Each building destroyed will lower targets strength."
super(StrikeOperation, self).generate()

View File

@@ -2,7 +2,13 @@
class Settings:
player_skill = "Good"
enemy_skill = "Average"
only_player_takeoff = False
enemy_vehicle_skill = "Average"
map_coalition_visibility = "All Units"
labels = "Full"
only_player_takeoff = True
night_disabled = False
multiplier = 1
sams = True
cold_start = False
version = None

View File

@@ -1,12 +1,15 @@
from .aaa import *
from .aircraft import *
from .armor import *
from .awacsgen import *
from .airsupportgen import *
from .conflictgen import *
from .shipgen import *
from .visualgen import *
from .triggergen import *
from .environmentgen import *
from .groundobjectsgen import *
from .briefinggen import *
from .forcedoptionsgen import *
from . import naming

View File

@@ -1,13 +1,11 @@
from game import *
from theater.conflicttheater import ConflictTheater
from .conflictgen import *
from .naming import *
from dcs.mission import *
DISTANCE_FACTOR = 0.5, 1
EXTRA_AA_MIN_DISTANCE = 35000
EXTRA_AA_MIN_DISTANCE = 50000
EXTRA_AA_MAX_DISTANCE = 150000
EXTRA_AA_POSITION_FROM_CP = 550
@@ -21,7 +19,7 @@ class AAConflictGenerator:
for _ in range(count):
self.m.vehicle_group(
country=self.conflict.defenders_side,
name=namegen.next_ground_group_name(),
name=namegen.next_unit_name(self.conflict.defenders_side, unit_type),
_type=unit_type,
position=self.conflict.ground_defenders_location.random_point_within(100, 100),
group_size=1)
@@ -34,7 +32,7 @@ class AAConflictGenerator:
self.m.vehicle_group(
country=self.conflict.defenders_side,
name=namegen.next_ground_group_name(),
name=namegen.next_unit_name(self.conflict.defenders_side, type),
_type=type,
position=p,
group_size=1)
@@ -61,14 +59,20 @@ class ExtraAAConflictGenerator:
if cp.position.distance_to_point(self.conflict.from_cp.position) < EXTRA_AA_MIN_DISTANCE:
continue
if cp.position.distance_to_point(self.conflict.to_cp.position) < EXTRA_AA_MIN_DISTANCE:
continue
if cp.position.distance_to_point(self.conflict.position) > EXTRA_AA_MAX_DISTANCE:
continue
country_name = cp.captured and self.player_name or self.enemy_name
position = cp.position.point_from_heading(0, EXTRA_AA_POSITION_FROM_CP)
self.mission.vehicle_group(
country=self.mission.country(country_name),
name=namegen.next_ground_group_name(),
name=namegen.next_basedefense_name(),
_type=db.EXTRA_AA[country_name],
position=position,
group_size=2
group_size=1
)

View File

@@ -1,3 +1,5 @@
import logging
from game import db
from game.settings import Settings
from .conflictgen import *
@@ -14,34 +16,45 @@ SPREAD_DISTANCE_FACTOR = 1, 2
ESCORT_ENGAGEMENT_MAX_DIST = 100000
WORKAROUND_WAYP_DIST = 1000
WARM_START_HELI_AIRSPEED = 120
WARM_START_HELI_ALT = 500
WARM_START_ALTITUDE = 3000
WARM_START_AIRSPEED = 550
INTERCEPTION_ALT = 3000
INTERCEPTION_AIRSPEED = 1000
BARCAP_RACETRACK_DISTANCE = 20000
ATTACK_CIRCLE_ALT = 5000
ATTACK_CIRCLE_ALT = 1000
ATTACK_CIRCLE_DURATION = 15
CAS_ALTITUDE = 1000
RTB_ALTITUDE = 1000
HELI_ALT = 900
CAS_ALTITUDE = 800
RTB_ALTITUDE = 800
RTB_DISTANCE = 5000
HELI_ALT = 500
TRANSPORT_LANDING_ALT = 1000
TRANSPORT_LANDING_ALT = 2000
DEFENCE_ENGAGEMENT_MAX_DISTANCE = 60000
INTERCEPT_MAX_DISTANCE = 200000
GROUP_VERTICAL_OFFSET = 300
class AircraftConflictGenerator:
escort_targets = [] # type: typing.List[typing.Tuple[PlaneGroup, int]]
escort_targets = [] # type: typing.List[typing.Tuple[FlyingGroup, int]]
vertical_offset = None # type: int
def __init__(self, mission: Mission, conflict: Conflict, settings: Settings):
self.m = mission
self.settings = settings
self.conflict = conflict
self.vertical_offset = 0
self.escort_targets = []
def _start_type(self) -> StartType:
return self.settings.cold_start and StartType.Cold or StartType.Warm
def _group_point(self, point) -> Point:
distance = randint(
int(self.conflict.size * SPREAD_DISTANCE_FACTOR[0]),
@@ -56,26 +69,36 @@ class AircraftConflictGenerator:
else:
client_count = 0
if flying_type == F_14B:
# workaround since 2 and 3 tomcat collide on carrier
group_size = 2
else:
group_size = 4
while count > 0:
group_size = min(count, 4)
client_size = max(min(client_count, 4), 0)
group_size = min(count, group_size)
client_size = max(min(client_count, group_size), 0)
yield (flying_type, group_size, client_size)
count -= group_size
client_count -= client_size
def _setup_group(self, group: FlyingGroup, for_task: Task, client_count: int):
def _setup_group(self, group: FlyingGroup, for_task: typing.Type[Task], client_count: int):
did_load_loadout = False
unit_type = group.units[0].unit_type
if unit_type in db.PLANE_PAYLOAD_OVERRIDES:
override_loadout = db.PLANE_PAYLOAD_OVERRIDES[unit_type]
if type(override_loadout) == dict:
if for_task in db.PLANE_PAYLOAD_OVERRIDES[unit_type]:
group.load_loadout(db.PLANE_PAYLOAD_OVERRIDES[unit_type][for_task])
payload_name = db.PLANE_PAYLOAD_OVERRIDES[unit_type][for_task]
group.load_loadout(payload_name)
did_load_loadout = True
logging.info("Loaded overridden payload for {} - {} for task {}".format(unit_type, payload_name, for_task))
elif "*" in db.PLANE_PAYLOAD_OVERRIDES[unit_type]:
group.load_loadout(db.PLANE_PAYLOAD_OVERRIDES[unit_type]["*"])
payload_name = db.PLANE_PAYLOAD_OVERRIDES[unit_type]["*"]
group.load_loadout(payload_name)
did_load_loadout = True
logging.info("Loaded overridden payload for {} - {} for task {}".format(unit_type, payload_name, for_task))
elif issubclass(override_loadout, MainTask):
group.load_task_default_loadout(override_loadout)
did_load_loadout = True
@@ -96,17 +119,24 @@ class AircraftConflictGenerator:
group.points[0].tasks.append(OptReactOnThreat(OptReactOnThreat.Values.EvadeFire))
if unit_type in helicopters.helicopter_map.values():
print(unit_type)
group.set_frequency(127.5)
else:
group.set_frequency(251.0)
def _generate_at_airport(self, name: str, side: Country, unit_type: FlyingType, count: int, client_count: int, airport: Airport = None) -> FlyingGroup:
assert count > 0
assert unit is not None
logging.info("airgen: {} for {} at {}".format(unit_type, side.id, airport))
return self.m.flight_group_from_airport(
country=side,
name=name,
aircraft_type=unit_type,
airport=self.m.terrain.airport_by_id(airport.id),
maintask=None,
start_type=StartType.Warm,
start_type=self._start_type(),
group_size=count,
parking_slots=None)
@@ -114,41 +144,55 @@ class AircraftConflictGenerator:
assert count > 0
assert unit is not None
alt = WARM_START_ALTITUDE + random.randint(50, 200)
pos = Point(at.x + random.randint(100, 200), at.y + random.randint(100, 200))
self.vertical_offset += GROUP_VERTICAL_OFFSET
if unit_type in helicopters.helicopter_map.values():
alt = WARM_START_HELI_ALT + self.vertical_offset
speed = WARM_START_HELI_AIRSPEED
else:
alt = WARM_START_ALTITUDE + self.vertical_offset
speed = WARM_START_AIRSPEED
return self.m.flight_group(
pos = Point(at.x + random.randint(100, 1000), at.y + random.randint(100, 1000))
logging.info("airgen: {} for {} at {} at {}".format(unit_type, side.id, alt, speed))
group = self.m.flight_group(
country=side,
name=name,
aircraft_type=unit_type,
airport=None,
position=pos,
altitude=alt,
speed=WARM_START_AIRSPEED,
speed=speed,
maintask=None,
start_type=StartType.Warm,
start_type=self._start_type(),
group_size=count)
def _generate_at_carrier(self, name: str, side: Country, unit_type: FlyingType, count: int, client_count: int, at: ShipGroup) -> FlyingGroup:
group.points[0].alt_type = "RADIO"
return group
def _generate_at_group(self, name: str, side: Country, unit_type: FlyingType, count: int, client_count: int, at: typing.Union[ShipGroup, StaticGroup]) -> FlyingGroup:
assert count > 0
assert unit is not None
logging.info("airgen: {} for {} at unit {}".format(unit_type, side.id, at))
return self.m.flight_group_from_unit(
country=side,
name=name,
aircraft_type=unit_type,
pad_group=at,
maintask=None,
start_type=StartType.Warm,
start_type=self._start_type(),
group_size=count)
def _generate_group(self, name: str, side: Country, unit_type: FlyingType, count: int, client_count: int, at: db.StartingPosition):
if isinstance(at, Point):
return self._generate_inflight(name, side, unit_type, count, client_count, at)
elif isinstance(at, ShipGroup):
elif isinstance(at, Group):
takeoff_ban = unit_type in db.CARRIER_TAKEOFF_BAN
if not takeoff_ban:
return self._generate_at_carrier(name, side, unit_type, count, client_count, at)
ai_ban = client_count == 0 and self.settings.only_player_takeoff
if not takeoff_ban and not ai_ban:
return self._generate_at_group(name, side, unit_type, count, client_count, at)
else:
return self._generate_inflight(name, side, unit_type, count, client_count, at.position)
elif issubclass(at, Airport):
@@ -164,6 +208,27 @@ class AircraftConflictGenerator:
else:
assert False
def _add_radio_waypoint(self, group: FlyingGroup, position, altitude: int, airspeed: int = 600):
point = group.add_waypoint(position, altitude, airspeed)
point.alt_type = "RADIO"
return point
def _rtb_for(self, group: FlyingGroup, cp: ControlPoint, at: db.StartingPosition = None):
if not at:
at = cp.at
position = at if isinstance(at, Point) else at.position
last_waypoint = group.points[-1]
if last_waypoint is not None:
heading = position.heading_between_point(last_waypoint.position)
tod_location = position.point_from_heading(heading, RTB_DISTANCE)
self._add_radio_waypoint(group, tod_location, last_waypoint.alt)
destination_waypoint = self._add_radio_waypoint(group, position, RTB_ALTITUDE)
if isinstance(at, Airport):
group.land_at(at)
return destination_waypoint
def _at_position(self, at) -> Point:
if isinstance(at, Point):
return at
@@ -178,7 +243,7 @@ class AircraftConflictGenerator:
groups = []
for flying_type, count, client_count in self._split_to_groups(units, clients):
group = self._generate_group(
name=namegen.next_escort_group_name(),
name=namegen.next_unit_name(side, flying_type),
side=side,
unit_type=flying_type,
count=count,
@@ -186,10 +251,6 @@ class AircraftConflictGenerator:
at=at)
group.task = Escort.name
heading = group.position.heading_between_point(self.conflict.position)
position = group.position # type: Point
wayp = group.add_waypoint(position.point_from_heading(heading, WORKAROUND_WAYP_DIST), CAS_ALTITUDE, WARM_START_AIRSPEED)
self._setup_group(group, CAP, client_count)
for escorted_group, waypoint_index in self.escort_targets:
@@ -197,63 +258,142 @@ class AircraftConflictGenerator:
if not is_quick:
waypoint_index += TRIGGER_WAYPOINT_OFFSET
wayp.tasks.append(EscortTaskAction(escorted_group.id, engagement_max_dist=ESCORT_ENGAGEMENT_MAX_DIST, lastwpt=waypoint_index))
group.points[0].tasks.append(EscortTaskAction(escorted_group.id, engagement_max_dist=ESCORT_ENGAGEMENT_MAX_DIST, lastwpt=waypoint_index))
if should_orbit:
orbit_task = ControlledTask(OrbitAction(ATTACK_CIRCLE_ALT, pattern=OrbitAction.OrbitPattern.Circle))
orbit_task.stop_after_duration(ATTACK_CIRCLE_DURATION * 60)
orbit_waypoint = group.add_waypoint(self.conflict.position, CAS_ALTITUDE)
orbit_waypoint = self._add_radio_waypoint(group, self.conflict.position, CAS_ALTITUDE)
orbit_waypoint.tasks.append(orbit_task)
orbit_waypoint.tasks.append(EngageTargets(max_distance=DEFENCE_ENGAGEMENT_MAX_DISTANCE))
groups.append(group)
return groups
def generate_cas_strikegroup(self, attackers: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
assert len(self.escort_targets) == 0
def generate_cas_strikegroup(self, attackers: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None, escort=True):
assert not escort or len(self.escort_targets) == 0
for flying_type, count, client_count in self._split_to_groups(attackers, clients):
group = self._generate_group(
name=namegen.next_cas_group_name(),
name=namegen.next_unit_name(self.conflict.attackers_side, flying_type),
side=self.conflict.attackers_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=at and at or self._group_point(self.conflict.air_attackers_location))
waypoint = group.add_waypoint(self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
waypoint = self._add_radio_waypoint(group, self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
if self.conflict.is_vector:
self._add_radio_waypoint(group, self.conflict.tail, CAS_ALTITUDE, WARM_START_AIRSPEED)
group.task = CAS.name
self._setup_group(group, CAS, client_count)
self.escort_targets.append((group, group.points.index(waypoint)))
if escort:
self.escort_targets.append((group, group.points.index(waypoint)))
self._rtb_for(group, self.conflict.from_cp, at)
group.add_waypoint(self.conflict.from_cp.position, RTB_ALTITUDE)
group.land_at(self.conflict.from_cp.at)
def generate_ground_attack_strikegroup(self, strikegroup: db.PlaneDict, clients: db.PlaneDict, targets: typing.List[typing.Tuple[str, Point]], at: db.StartingPosition = None, escort=True):
assert not escort or len(self.escort_targets) == 0
def generate_ship_strikegroup(self, attackers: db.PlaneDict, clients: db.PlaneDict, target_groups: typing.Collection[ShipGroup], at: db.StartingPosition = None):
assert len(self.escort_targets) == 0
for flying_type, count, client_count in self._split_to_groups(attackers, clients):
for flying_type, count, client_count in self._split_to_groups(strikegroup, clients):
group = self._generate_group(
name=namegen.next_cas_group_name(),
name=namegen.next_unit_name(self.conflict.attackers_side, flying_type),
side=self.conflict.attackers_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=at and at or self._group_point(self.conflict.air_attackers_location))
wayp = group.add_waypoint(self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
escort_until_waypoint = None
for name, pos in targets:
waypoint = group.add_waypoint(pos, 0, WARM_START_AIRSPEED, self.m.translation.create_string(name))
waypoint.tasks.append(Bombing(pos, attack_qty=2))
if escort_until_waypoint is None:
escort_until_waypoint = waypoint
group.task = GroundAttack.name
self._setup_group(group, GroundAttack, client_count)
if escort:
self.escort_targets.append((group, group.points.index(escort_until_waypoint)))
self._rtb_for(group, self.conflict.from_cp, at)
def generate_sead_strikegroup(self, strikegroup: db.PlaneDict, clients: db.PlaneDict, targets: typing.List[typing.Tuple[str, Point]], at: db.StartingPosition, escort=True):
assert not escort or len(self.escort_targets) == 0
for flying_type, count, client_count in self._split_to_groups(strikegroup, clients):
group = self._generate_group(
name=namegen.next_unit_name(self.conflict.attackers_side, flying_type),
side=self.conflict.attackers_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=at and at or self._group_point(self.conflict.air_attackers_location))
escort_until_waypoint = None
for name, pos in targets:
waypoint = group.add_waypoint(pos, 0, WARM_START_AIRSPEED, self.m.translation.create_string(name))
if escort_until_waypoint is None:
escort_until_waypoint = waypoint
group.task = SEAD.name
self._setup_group(group, SEAD, client_count)
if escort:
self.escort_targets.append((group, group.points.index(escort_until_waypoint)))
self._rtb_for(group, self.conflict.from_cp, at)
def generate_defenders_cas(self, defenders: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None, escort=True):
assert not escort or len(self.escort_targets) == 0
for flying_type, count, client_count in self._split_to_groups(defenders, clients):
group = self._generate_group(
name=namegen.next_unit_name(self.conflict.defenders_side, flying_type),
side=self.conflict.defenders_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=at and at or self._group_point(self.conflict.air_defenders_location))
location = self._group_point(self.conflict.air_defenders_location)
insertion_point = self.conflict.find_insertion_point(location)
waypoint = self._add_radio_waypoint(group, insertion_point, CAS_ALTITUDE, WARM_START_AIRSPEED)
if self.conflict.is_vector:
destination_tail = self.conflict.tail.distance_to_point(insertion_point) > self.conflict.position.distance_to_point(insertion_point)
self._add_radio_waypoint(group, destination_tail and self.conflict.tail or self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
group.task = CAS.name
self._setup_group(group, CAS, client_count)
if escort:
self.escort_targets.append((group, group.points.index(waypoint)))
self._rtb_for(group, self.conflict.to_cp, at)
def generate_ship_strikegroup(self, attackers: db.PlaneDict, clients: db.PlaneDict, target_groups: typing.Collection[ShipGroup], at: db.StartingPosition = None, escort=True):
assert not escort or len(self.escort_targets) == 0
for flying_type, count, client_count in self._split_to_groups(attackers, clients):
group = self._generate_group(
name=namegen.next_unit_name(self.conflict.attackers_side, flying_type),
side=self.conflict.attackers_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=at and at or self._group_point(self.conflict.air_attackers_location))
wayp = self._add_radio_waypoint(group, self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
for target_group in target_groups:
wayp.tasks.append(AttackGroup(target_group.id))
group.task = AntishipStrike.name
self._setup_group(group, AntishipStrike, client_count)
self.escort_targets.append((group, group.points.index(wayp)))
if escort:
self.escort_targets.append((group, group.points.index(wayp)))
self._rtb_for(group, self.conflict.from_cp, at)
group.add_waypoint(self.conflict.from_cp.position, RTB_ALTITUDE)
group.land_at(self.conflict.from_cp.at)
def generate_strikegroup_escort(self, attackers: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
def generate_attackers_escort(self, attackers: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
for g in self._generate_escort(
side=self.conflict.attackers_side,
units=attackers,
@@ -261,10 +401,9 @@ class AircraftConflictGenerator:
at=at and at or self._group_point(self.conflict.air_attackers_location),
is_quick=at is None,
should_orbit=True):
g.add_waypoint(self.conflict.position, WARM_START_ALTITUDE)
g.land_at(self.conflict.from_cp.at)
self._rtb_for(g, self.conflict.from_cp, at)
def generate_transport_escort(self, escort: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
def generate_defenders_escort(self, escort: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
for g in self._generate_escort(
side=self.conflict.defenders_side,
units=escort,
@@ -272,13 +411,12 @@ class AircraftConflictGenerator:
at=at and at or self._group_point(self.conflict.air_defenders_location),
is_quick=at is None,
should_orbit=False):
g.add_waypoint(self.conflict.to_cp.position, RTB_ALTITUDE)
g.land_at(self.conflict.to_cp.at)
self._rtb_for(g, self.conflict.to_cp, at)
def generate_defense(self, defenders: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
for flying_type, count, client_count in self._split_to_groups(defenders, clients):
group = self._generate_group(
name=namegen.next_intercept_group_name(),
name=namegen.next_unit_name(self.conflict.defenders_side, flying_type),
side=self.conflict.defenders_side,
unit_type=flying_type,
count=count,
@@ -286,36 +424,78 @@ class AircraftConflictGenerator:
at=at and at or self._group_point(self.conflict.air_defenders_location))
group.task = CAP.name
wayp = group.add_waypoint(self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
wayp = self._add_radio_waypoint(group, self.conflict.position, CAS_ALTITUDE, WARM_START_AIRSPEED)
wayp.tasks.append(dcs.task.EngageTargets(max_distance=DEFENCE_ENGAGEMENT_MAX_DISTANCE))
wayp.tasks.append(dcs.task.OrbitAction(ATTACK_CIRCLE_ALT, pattern=OrbitAction.OrbitPattern.Circle))
self._setup_group(group, CAP, client_count)
self._rtb_for(group, self.conflict.to_cp, at)
group.add_waypoint(self.conflict.to_cp.position, RTB_ALTITUDE)
group.land_at(self.conflict.to_cp.at)
def generate_migcap(self, patrol: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
for flying_type, count, client_count in self._split_to_groups(patrol, clients):
group = self._generate_group(
name=namegen.next_unit_name(self.conflict.attackers_side, flying_type),
side=self.conflict.attackers_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=at and at or self._group_point(self.conflict.air_attackers_location))
def generate_transport(self, transport: db.PlaneDict, destination: Airport):
assert len(self.escort_targets) == 0
waypoint = self._add_radio_waypoint(group, self.conflict.position, WARM_START_ALTITUDE, WARM_START_AIRSPEED)
if self.conflict.is_vector:
self._add_radio_waypoint(group, self.conflict.tail, WARM_START_ALTITUDE, WARM_START_AIRSPEED)
group.task = CAP.name
self._setup_group(group, CAP, client_count)
self._rtb_for(group, self.conflict.from_cp, at)
def generate_barcap(self, patrol: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
for flying_type, count, client_count in self._split_to_groups(patrol, clients):
group = self._generate_group(
name=namegen.next_unit_name(self.conflict.defenders_side, flying_type),
side=self.conflict.defenders_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=at and at or self._group_point(self.conflict.air_defenders_location))
waypoint = self._add_radio_waypoint(group, self.conflict.position, WARM_START_ALTITUDE, WARM_START_AIRSPEED)
if self.conflict.is_vector:
self._add_radio_waypoint(group, self.conflict.tail, WARM_START_ALTITUDE, WARM_START_AIRSPEED)
else:
heading = group.position.heading_between_point(self.conflict.position)
waypoint = self._add_radio_waypoint(group, self.conflict.position.point_from_heading(heading, BARCAP_RACETRACK_DISTANCE),
WARM_START_ALTITUDE,
WARM_START_AIRSPEED)
waypoint.tasks.append(OrbitAction(WARM_START_ALTITUDE, WARM_START_AIRSPEED))
group.task = CAP.name
self._setup_group(group, CAP, client_count)
self._rtb_for(group, self.conflict.to_cp, at)
def generate_transport(self, transport: db.PlaneDict, destination: Airport, escort=True):
assert not escort or len(self.escort_targets) == 0
for flying_type, count, client_count in self._split_to_groups(transport):
group = self._generate_group(
name=namegen.next_transport_group_name(),
name=namegen.next_unit_name(self.conflict.defenders_side, flying_type),
side=self.conflict.defenders_side,
unit_type=flying_type,
count=count,
client_count=client_count,
at=self._group_point(self.conflict.air_defenders_location))
waypoint = group.add_waypoint(destination.position.random_point_within(0, 0), TRANSPORT_LANDING_ALT)
self.escort_targets.append((group, group.points.index(waypoint)))
waypoint = self._rtb_for(group, self.conflict.to_cp)
if escort:
self.escort_targets.append((group, group.points.index(waypoint)))
self._add_radio_waypoint(group, destination.position, RTB_ALTITUDE)
group.task = Transport.name
group.land_at(destination)
def generate_interception(self, interceptors: db.PlaneDict, clients: db.PlaneDict, at: db.StartingPosition = None):
for flying_type, count, client_count in self._split_to_groups(interceptors, clients):
group = self._generate_group(
name=namegen.next_intercept_group_name(),
name=namegen.next_unit_name(self.conflict.attackers_side, flying_type),
side=self.conflict.attackers_side,
unit_type=flying_type,
count=count,
@@ -323,22 +503,21 @@ class AircraftConflictGenerator:
at=at and at or self._group_point(self.conflict.air_attackers_location))
group.task = CAP.name
group.points[0].tasks.append(EngageTargets(max_distance=INTERCEPT_MAX_DISTANCE))
heading = group.position.heading_between_point(self.conflict.position)
initial_wayp = group.add_waypoint(group.position.point_from_heading(heading, WORKAROUND_WAYP_DIST), INTERCEPTION_ALT, INTERCEPTION_AIRSPEED)
initial_wayp.tasks.append(EngageTargets(max_distance=INTERCEPT_MAX_DISTANCE))
wayp = group.add_waypoint(self.conflict.position, WARM_START_ALTITUDE, INTERCEPTION_AIRSPEED)
wayp = self._add_radio_waypoint(group, self.conflict.position, WARM_START_ALTITUDE, INTERCEPTION_AIRSPEED)
wayp.tasks.append(EngageTargets(max_distance=INTERCEPT_MAX_DISTANCE))
self._setup_group(group, CAP, client_count)
if self.conflict.is_vector:
self._add_radio_waypoint(group, self.conflict.tail, CAS_ALTITUDE, WARM_START_ALTITUDE)
group.add_waypoint(self.conflict.from_cp.position, RTB_ALTITUDE)
group.land_at(self.conflict.from_cp.at)
self._setup_group(group, CAP, client_count)
self._rtb_for(group, self.conflict.from_cp, at)
def generate_passenger_transport(self, helis: db.HeliDict, clients: db.HeliDict, at: db.StartingPosition):
for heli_type, count, client_count in self._split_to_groups(helis, clients):
group = self._generate_group(
name=namegen.next_transport_group_name(),
name=namegen.next_unit_name(self.conflict.attackers_side, heli_type),
side=self.conflict.attackers_side,
unit_type=heli_type,
count=count,
@@ -346,9 +525,5 @@ class AircraftConflictGenerator:
at=at and at or self._group_point(self.conflict.air_attackers_location)
)
group.add_waypoint(
pos=self.conflict.position,
altitude=HELI_ALT,
)
self._add_radio_waypoint(group, self.conflict.position, HELI_ALT)
self._setup_group(group, Transport, client_count)

69
gen/airsupportgen.py Normal file
View File

@@ -0,0 +1,69 @@
from game import db
from .conflictgen import *
from .naming import *
from dcs.mission import *
from dcs.unitgroup import *
from dcs.unittype import *
from dcs.task import *
from dcs.terrain.terrain import NoParkingSlotError
TANKER_DISTANCE = 15000
TANKER_ALT = 4572
TANKER_HEADING_OFFSET = 45
AWACS_DISTANCE = 150000
AWACS_ALT = 13000
class AirSupportConflictGenerator:
generated_tankers = None # type: typing.List[str]
def __init__(self, mission: Mission, conflict: Conflict, game):
self.mission = mission
self.conflict = conflict
self.game = game
self.generated_tankers = []
@classmethod
def support_tasks(cls) -> typing.Collection[typing.Type[MainTask]]:
return [Refueling, AWACS]
def generate(self, is_awacs_enabled):
player_cp = self.conflict.from_cp if self.conflict.from_cp.captured else self.conflict.to_cp
for i, tanker_unit_type in enumerate(db.find_unittype(Refueling, self.conflict.attackers_side.name)):
self.generated_tankers.append(db.unit_type_name(tanker_unit_type))
tanker_heading = self.conflict.to_cp.position.heading_between_point(self.conflict.from_cp.position) + TANKER_HEADING_OFFSET * i
tanker_position = player_cp.position.point_from_heading(tanker_heading, TANKER_DISTANCE)
tanker_group = self.mission.refuel_flight(
country=self.mission.country(self.game.player),
name=namegen.next_tanker_name(self.mission.country(self.game.player)),
airport=None,
plane_type=tanker_unit_type,
position=tanker_position,
altitude=TANKER_ALT,
frequency=130 + i,
start_type=StartType.Warm,
tacanchannel="{}X".format(97 + i),
)
tanker_group.points[0].tasks.append(ActivateBeaconCommand(channel=97 + i, unit_id=tanker_group.id, aa=False))
tanker_group.points[0].tasks.append(SetInvisibleCommand(True))
tanker_group.points[0].tasks.append(SetImmortalCommand(True))
if is_awacs_enabled:
awacs_unit = db.find_unittype(AWACS, self.conflict.attackers_side.name)[0]
awacs_flight = self.mission.awacs_flight(
country=self.mission.country(self.game.player),
name=namegen.next_awacs_name(self.mission.country(self.game.player)),
plane_type=awacs_unit,
altitude=AWACS_ALT,
airport=None,
position=self.conflict.position.random_point_within(AWACS_DISTANCE, AWACS_DISTANCE),
frequency=133,
start_type=StartType.Warm,
)
awacs_flight.points[0].tasks.append(SetInvisibleCommand(True))
awacs_flight.points[0].tasks.append(SetImmortalCommand(True))

View File

@@ -1,3 +1,8 @@
import logging
from random import randint
from itertools import zip_longest
from game import db
from .conflictgen import *
from .naming import *
@@ -11,6 +16,12 @@ from dcs.country import *
SPREAD_DISTANCE_FACTOR = 0.1, 0.3
SPREAD_DISTANCE_SIZE_FACTOR = 0.1
FRONTLINE_CAS_FIGHTS_COUNT = 4, 8
FRONTLINE_CAS_GROUP_MIN = 1, 2
FRONTLINE_CAS_PADDING = 12000
FIGHT_DISTANCE = 3500
class ArmorConflictGenerator:
def __init__(self, mission: Mission, conflict: Conflict):
@@ -25,39 +36,95 @@ class ArmorConflictGenerator:
return point.random_point_within(distance, self.conflict.size * SPREAD_DISTANCE_SIZE_FACTOR)
def _generate_group(self, side: Country, unit: VehicleType, count: int, at: Point):
def _generate_group(self, side: Country, unit: VehicleType, count: int, at: Point, to: Point = None, move_formation: PointAction = PointAction.OffRoad):
for c in range(count):
logging.info("armorgen: {} for {}".format(unit, side.id))
group = self.m.vehicle_group(
side,
namegen.next_armor_group_name(),
namegen.next_unit_name(side, unit),
unit,
position=self._group_point(at),
group_size=1,
move_formation=PointAction.OffRoad)
wayp = group.add_waypoint(self.conflict.position.point_from_heading(0, 500))
move_formation=move_formation)
vehicle: Vehicle = group.units[0]
vehicle.player_can_drive = True
if not to:
to = self.conflict.position.point_from_heading(0, 500)
wayp = group.add_waypoint(self._group_point(to), move_formation=move_formation)
wayp.tasks = []
def _generate_fight_at(self, attackers: db.ArmorDict, defenders: db.ArmorDict, position: Point):
if attackers:
attack_pos = position.point_from_heading(self.conflict.heading - 90, FIGHT_DISTANCE)
attack_dest = position.point_from_heading(self.conflict.heading + 90, FIGHT_DISTANCE * 2)
for type, count in attackers.items():
self._generate_group(
side=self.conflict.attackers_side,
unit=type,
count=count,
at=attack_pos,
to=attack_dest,
)
if defenders:
def_pos = position.point_from_heading(self.conflict.heading + 90, FIGHT_DISTANCE)
def_dest = position.point_from_heading(self.conflict.heading - 90, FIGHT_DISTANCE * 2)
for type, count in defenders.items():
self._generate_group(
side=self.conflict.defenders_side,
unit=type,
count=count,
at=def_pos,
to=def_dest,
)
def generate(self, attackers: db.ArmorDict, defenders: db.ArmorDict):
for type, count in attackers.items():
self._generate_group(
side=self.conflict.attackers_side,
unit=type,
count=count,
at=self.conflict.ground_attackers_location)
side=self.conflict.attackers_side,
unit=type,
count=count,
at=self.conflict.ground_attackers_location)
for type, count in defenders.items():
self._generate_group(
side=self.conflict.defenders_side,
unit=type,
count=count,
at=self.conflict.ground_defenders_location)
side=self.conflict.defenders_side,
unit=type,
count=count,
at=self.conflict.ground_defenders_location)
def generate_vec(self, attackers: db.ArmorDict, defenders: db.ArmorDict):
fights_count = randint(*FRONTLINE_CAS_FIGHTS_COUNT)
single_fight_defenders_count = min(int(sum(defenders.values()) / fights_count), randint(*FRONTLINE_CAS_GROUP_MIN))
defender_groups = list(db.unitdict_split(defenders, single_fight_defenders_count))
single_fight_attackers_count = min(int(sum(attackers.values()) / len(defender_groups)), randint(*FRONTLINE_CAS_GROUP_MIN))
attacker_groups = list(db.unitdict_split(attackers, single_fight_attackers_count))
for attacker_group_dict, target_group_dict in zip_longest(attacker_groups, defender_groups):
position = self.conflict.position.point_from_heading(self.conflict.heading,
random.randint(0, self.conflict.distance))
self._generate_fight_at(attacker_group_dict, target_group_dict, position)
def generate_convoy(self, units: db.ArmorDict):
for type, count in units.items():
self._generate_group(
side=self.conflict.defenders_side,
unit=type,
count=count,
at=self.conflict.ground_defenders_location,
to=self.conflict.position,
move_formation=PointAction.OnRoad)
def generate_passengers(self, count: int):
unit_type = random.choice(db.find_unittype(Nothing, self.conflict.attackers_side.name))
self.m.vehicle_group(
country=self.conflict.attackers_side,
name=namegen.next_passenger_group_name(),
name=namegen.next_unit_name(self.conflict.attackers_side, unit_type),
_type=unit_type,
position=self.conflict.ground_attackers_location,
group_size=count

View File

@@ -1,30 +0,0 @@
from game import db
from .conflictgen import *
from .naming import *
from dcs.mission import *
from dcs.unitgroup import *
from dcs.unittype import *
from dcs.task import *
from dcs.terrain.terrain import NoParkingSlotError
AWACS_DISTANCE = 150000
AWACS_ALT = 10000
class AWACSConflictGenerator:
def __init__(self, mission: Mission, conflict: Conflict, game):
self.mission = mission
self.conflict = conflict
self.game = game
def generate(self):
plane = db.find_unittype(AWACS, self.conflict.attackers_side.name)[0]
self.mission.awacs_flight(
country=self.mission.country(self.game.player),
name=namegen.next_awacs_group_name(),
plane_type=plane,
altitude=AWACS_ALT,
airport=None,
position=self.conflict.position.random_point_within(AWACS_DISTANCE, AWACS_DISTANCE))

63
gen/briefinggen.py Normal file
View File

@@ -0,0 +1,63 @@
import logging
from game import db
from .conflictgen import *
from .naming import *
from dcs.mission import *
class BriefingGenerator:
freqs = None # type: typing.List[typing.Tuple[str, str]]
title = "" # type: str
description = "" # type: str
targets = None # type: typing.List[typing.Tuple[str, str]]
waypoints = None # type: typing.List[str]
def __init__(self, mission: Mission, conflict: Conflict, game):
self.m = mission
self.conflict = conflict
self.game = game
self.freqs = []
self.targets = []
self.waypoints = []
def append_frequency(self, name: str, frequency: str):
self.freqs.append((name, frequency))
def append_target(self, description: str, markpoint: str = None):
self.targets.append((description, markpoint))
def append_waypoint(self, description: str):
self.waypoints.append(description)
def generate(self):
self.waypoints.insert(0, "INITIAL")
self.waypoints.append("RTB")
self.waypoints.append("RTB Landing")
description = ""
if self.title:
description += self.title
if self.description:
description += "\n\n" + self.description
if self.freqs:
description += "\n\nCOMMS:"
for name, freq in self.freqs:
description += "\n{}: {}".format(name, freq)
if self.targets:
description += "\n\nTARGETS:"
for i, (name, tp) in enumerate(self.targets):
description += "\n#{} {} {}".format(i+1, name, "(TP {})".format(tp) if tp else "")
if self.waypoints:
description += "\n\nWAYPOINTS:"
for i, descr in enumerate(self.waypoints):
description += "\n#{}: {}".format(i, descr)
self.m.set_description_text(description)

View File

@@ -1,3 +1,4 @@
import logging
import typing
import pdb
import dcs
@@ -18,10 +19,20 @@ from theater import *
AIR_DISTANCE = 40000
CAPTURE_AIR_ATTACKERS_DISTANCE = 25000
CAPTURE_AIR_DEFENDERS_DISTANCE = 60000
STRIKE_AIR_ATTACKERS_DISTANCE = 45000
STRIKE_AIR_DEFENDERS_DISTANCE = 25000
CAP_CAS_DISTANCE = 10000, 120000
GROUND_INTERCEPT_SPREAD = 5000
GROUND_DISTANCE_FACTOR = 1
GROUNDINTERCEPT_DISTANCE_FACTOR = 6
AIR_DISTANCE = 32000
GROUND_DISTANCE = 2000
GROUND_ATTACK_DISTANCE = 25000, 13000
TRANSPORT_FRONTLINE_DIST = 1800
INTERCEPT_ATTACKERS_HEADING = -45, 45
INTERCEPT_DEFENDERS_HEADING = -10, 10
@@ -30,10 +41,14 @@ INTERCEPT_ATTACKERS_DISTANCE = 100000
INTERCEPT_MAX_DISTANCE = 160000
INTERCEPT_MIN_DISTANCE = 100000
NAVAL_INTERCEPT_DISTANCE_FACTOR = 0.4
NAVAL_INTERCEPT_DISTANCE_FACTOR = 1
NAVAL_INTERCEPT_DISTANCE_MAX = 40000
NAVAL_INTERCEPT_STEP = 5000
FRONTLINE_LENGTH = 80000
FRONTLINE_MIN_CP_DISTANCE = 5000
FRONTLINE_DISTANCE_STRENGTH_FACTOR = 0.7
def _opposite_heading(h):
return h+180
@@ -58,28 +73,35 @@ class Conflict:
size = None # type: int
radials = None # type: typing.List[int]
heading = None # type: int
distance = None # type: int
ground_attackers_location = None # type: Point
ground_defenders_location = None # type: Point
air_attackers_location = None # type: Point
air_defenders_location = None # type: Point
def __init__(self,
position: Point,
theater: ConflictTheater,
from_cp: ControlPoint,
to_cp: ControlPoint,
attackers_side: Country,
defenders_side: Country,
ground_attackers_location: Point,
ground_defenders_location: Point,
air_attackers_location: Point,
air_defenders_location: Point):
position: Point,
heading=None,
distance=None,
ground_attackers_location: Point = None,
ground_defenders_location: Point = None,
air_attackers_location: Point = None,
air_defenders_location: Point = None):
self.attackers_side = attackers_side
self.defenders_side = defenders_side
self.from_cp = from_cp
self.to_cp = to_cp
self.theater = theater
self.position = position
self.heading = heading
self.distance = distance
self.size = to_cp.size
self.radials = to_cp.radials
self.ground_attackers_location = ground_attackers_location
@@ -87,19 +109,159 @@ class Conflict:
self.air_attackers_location = air_attackers_location
self.air_defenders_location = air_defenders_location
@property
def center(self) -> Point:
return self.position.point_from_heading(self.heading, self.distance / 2)
@property
def tail(self) -> Point:
return self.position.point_from_heading(self.heading, self.distance)
@property
def is_vector(self) -> bool:
return self.heading is not None
@property
def opposite_heading(self) -> int:
return _heading_sum(self.heading, 180)
@property
def to_size(self):
return self.to_cp.size * GROUND_DISTANCE_FACTOR
def find_insertion_point(self, other_point: Point) -> Point:
if self.is_vector:
dx = self.position.x - self.tail.x
dy = self.position.y - self.tail.y
dr2 = float(dx ** 2 + dy ** 2)
lerp = ((other_point.x - self.tail.x) * dx + (other_point.y - self.tail.y) * dy) / dr2
if lerp < 0:
lerp = 0
elif lerp > 1:
lerp = 1
x = lerp * dx + self.tail.x
y = lerp * dy + self.tail.y
return Point(x, y)
else:
return self.position
def find_ground_position(self, at: Point, heading: int, max_distance: int = 40000) -> typing.Optional[Point]:
return Conflict._find_ground_position(at, max_distance, heading, self.theater)
@classmethod
def _find_ground_location(cls, initial: Point, max_distance: int, heading: int, theater: ConflictTheater) -> Point:
for _ in range(0, int(max_distance), 800):
for _ in range(3):
if theater.is_on_land(initial):
return initial
def has_frontline_between(cls, from_cp: ControlPoint, to_cp: ControlPoint) -> bool:
return from_cp.has_frontline and to_cp.has_frontline
initial = initial.random_point_within(1000, 1000)
@classmethod
def frontline_position(cls, theater: ConflictTheater, from_cp: ControlPoint, to_cp: ControlPoint) -> typing.Optional[typing.Tuple[Point, int]]:
attack_heading = from_cp.position.heading_between_point(to_cp.position)
attack_distance = from_cp.position.distance_to_point(to_cp.position)
middle_point = from_cp.position.point_from_heading(attack_heading, attack_distance / 2)
initial = initial.point_from_heading(heading, 800)
strength_delta = (from_cp.base.strength - to_cp.base.strength) / 1.0
position = middle_point.point_from_heading(attack_heading, strength_delta * attack_distance / 2 - FRONTLINE_MIN_CP_DISTANCE)
return position, _opposite_heading(attack_heading)
ground_position = cls._find_ground_position(position, attack_distance / 2 - FRONTLINE_MIN_CP_DISTANCE, attack_heading, theater)
if ground_position:
return ground_position, _opposite_heading(attack_heading)
else:
logging.warning("Coudn't find frontline position between {} and {}!".format(from_cp, to_cp))
return position, _opposite_heading(attack_heading)
@classmethod
def frontline_vector(cls, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater) -> typing.Optional[typing.Tuple[Point, int, int]]:
initial, heading = cls.frontline_position(theater, from_cp, to_cp)
"""
probe_end_point = initial.point_from_heading(heading, FRONTLINE_LENGTH)
probe = geometry.LineString([(initial.x, initial.y), (probe_end_point.x, probe_end_point.y) ])
intersection = probe.intersection(theater.land_poly)
if isinstance(intersection, geometry.LineString):
intersection = intersection
elif isinstance(intersection, geometry.MultiLineString):
intersection = intersection.geoms[0]
else:
print(intersection)
return None
return Point(*intersection.xy[0]), _heading_sum(heading, 90), intersection.length
"""
frontline = cls.frontline_position(theater, from_cp, to_cp)
if not frontline:
return None
center_position, heading = frontline
left_position, right_position = None, None
if not theater.is_on_land(center_position):
pos = cls._find_ground_position(center_position, FRONTLINE_LENGTH, _heading_sum(heading, -90), theater)
if pos:
right_position = pos
center_position = pos
else:
pos = cls._find_ground_position(center_position, FRONTLINE_LENGTH, _heading_sum(heading, +90), theater)
if pos:
left_position = pos
center_position = pos
if left_position is None:
left_position = cls._extend_ground_position(center_position, int(FRONTLINE_LENGTH/2), _heading_sum(heading, -90), theater)
if right_position is None:
right_position = cls._extend_ground_position(center_position, int(FRONTLINE_LENGTH/2), _heading_sum(heading, 90), theater)
return left_position, _heading_sum(heading, 90), int(right_position.distance_to_point(left_position))
@classmethod
def _extend_ground_position(cls, initial: Point, max_distance: int, heading: int, theater: ConflictTheater) -> Point:
pos = initial
for offset in range(0, int(max_distance), 500):
new_pos = initial.point_from_heading(heading, offset)
if theater.is_on_land(new_pos):
pos = new_pos
else:
return pos
return pos
"""
probe_end_point = initial.point_from_heading(heading, max_distance)
probe = geometry.LineString([(initial.x, initial.y), (probe_end_point.x, probe_end_point.y)])
intersection = probe.intersection(theater.land_poly)
if intersection is geometry.LineString:
return Point(*intersection.xy[1])
elif intersection is geometry.MultiLineString:
return Point(*intersection.geoms[0].xy[1])
print("Didn't find ground position!")
return None
"""
@classmethod
def _find_ground_position(cls, initial: Point, max_distance: int, heading: int, theater: ConflictTheater) -> typing.Optional[Point]:
pos = initial
for _ in range(0, int(max_distance), 500):
if theater.is_on_land(pos):
return pos
pos = pos.point_from_heading(heading, 500)
"""
probe_end_point = initial.point_from_heading(heading, max_distance)
probe = geometry.LineString([(initial.x, initial.y), (probe_end_point.x, probe_end_point.y) ])
intersection = probe.intersection(theater.land_poly)
if isinstance(intersection, geometry.LineString):
return Point(*intersection.xy[1])
elif isinstance(intersection, geometry.MultiLineString):
return Point(*intersection.geoms[0].xy[1])
"""
logging.error("Didn't find ground position ({})!".format(initial))
return initial
@classmethod
def capture_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
@@ -108,12 +270,12 @@ class Conflict:
attack_heading = to_cp.find_radial(attack_raw_heading)
defense_heading = to_cp.find_radial(from_cp.position.heading_between_point(to_cp.position), ignored_radial=attack_heading)
distance = to_cp.size * GROUND_DISTANCE_FACTOR
distance = GROUND_DISTANCE
attackers_location = position.point_from_heading(attack_heading, distance)
attackers_location = Conflict._find_ground_location(attackers_location, distance * 2, _heading_sum(attack_heading, 180), theater)
attackers_location = Conflict._find_ground_position(attackers_location, distance * 2, attack_heading, theater)
defenders_location = position.point_from_heading(defense_heading, distance)
defenders_location = Conflict._find_ground_location(defenders_location, distance * 2, _heading_sum(defense_heading, 180), theater)
defenders_location = position.point_from_heading(defense_heading, 0)
defenders_location = Conflict._find_ground_position(defenders_location, distance * 2, defense_heading, theater)
return cls(
position=position,
@@ -129,13 +291,42 @@ class Conflict:
)
@classmethod
def intercept_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
def strike_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
position = to_cp.position
attack_raw_heading = to_cp.position.heading_between_point(from_cp.position)
attack_heading = to_cp.find_radial(attack_raw_heading)
defense_heading = to_cp.find_radial(from_cp.position.heading_between_point(to_cp.position), ignored_radial=attack_heading)
distance = to_cp.size * GROUND_DISTANCE_FACTOR
attackers_location = position.point_from_heading(attack_heading, distance)
attackers_location = Conflict._find_ground_position(attackers_location, distance * 2, _heading_sum(attack_heading, 180), theater)
defenders_location = position.point_from_heading(defense_heading, distance)
defenders_location = Conflict._find_ground_position(defenders_location, distance * 2, _heading_sum(defense_heading, 180), theater)
return cls(
position=position,
theater=theater,
from_cp=from_cp,
to_cp=to_cp,
attackers_side=attacker,
defenders_side=defender,
ground_attackers_location=attackers_location,
ground_defenders_location=defenders_location,
air_attackers_location=position.point_from_heading(attack_raw_heading, STRIKE_AIR_ATTACKERS_DISTANCE),
air_defenders_location=position.point_from_heading(_opposite_heading(attack_raw_heading), STRIKE_AIR_DEFENDERS_DISTANCE)
)
@classmethod
def intercept_position(cls, from_cp: ControlPoint, to_cp: ControlPoint) -> Point:
raw_distance = from_cp.position.distance_to_point(to_cp.position) * 1.5
distance = max(min(raw_distance, INTERCEPT_MAX_DISTANCE), INTERCEPT_MIN_DISTANCE)
heading = _heading_sum(from_cp.position.heading_between_point(to_cp.position), random.choice([-1, 1]) * random.randint(60, 100))
position = from_cp.position.point_from_heading(heading, distance)
return from_cp.position.point_from_heading(heading, distance)
@classmethod
def intercept_conflict(cls, attacker: Country, defender: Country, position: Point, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
heading = from_cp.position.heading_between_point(position)
return cls(
position=position.point_from_heading(position.heading_between_point(to_cp.position), INTERCEPT_CONFLICT_DISTANCE),
theater=theater,
@@ -153,7 +344,7 @@ class Conflict:
def ground_attack_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
heading = random.choice(to_cp.radials)
initial_location = to_cp.position.random_point_within(*GROUND_ATTACK_DISTANCE)
position = Conflict._find_ground_location(initial_location, GROUND_INTERCEPT_SPREAD, _heading_sum(heading, 180), theater)
position = Conflict._find_ground_position(initial_location, GROUND_INTERCEPT_SPREAD, _heading_sum(heading, 180), theater)
if not position:
heading = to_cp.find_radial(to_cp.position.heading_between_point(from_cp.position))
position = to_cp.position.point_from_heading(heading, to_cp.size * GROUND_DISTANCE_FACTOR)
@@ -172,23 +363,74 @@ class Conflict:
)
@classmethod
def ground_intercept_conflict(cls, attacker: Country, defender: Country, heading: int, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
heading = random.choice(to_cp.radials)
initial_location = to_cp.position.point_from_heading(heading, to_cp.size * GROUNDINTERCEPT_DISTANCE_FACTOR)
max_distance = to_cp.size * GROUNDINTERCEPT_DISTANCE_FACTOR
ground_location = Conflict._find_ground_location(initial_location, max_distance, _heading_sum(heading, 180), theater)
def convoy_strike_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
frontline_position, frontline_heading, frontline_length = Conflict.frontline_vector(from_cp, to_cp, theater)
if not frontline_position:
assert False
heading = frontline_heading
starting_position = Conflict._find_ground_position(frontline_position.point_from_heading(heading, 7000),
GROUND_INTERCEPT_SPREAD,
_opposite_heading(heading), theater)
if not starting_position:
starting_position = frontline_position
destination_position = frontline_position
else:
destination_position = frontline_position
return cls(
position=position,
position=destination_position,
theater=theater,
from_cp=from_cp,
to_cp=to_cp,
attackers_side=attacker,
defenders_side=defender,
ground_attackers_location=None,
ground_defenders_location=position,
ground_defenders_location=starting_position,
air_attackers_location=starting_position.point_from_heading(_opposite_heading(heading), AIR_DISTANCE),
air_defenders_location=starting_position.point_from_heading(heading, AIR_DISTANCE),
)
@classmethod
def frontline_cas_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
assert cls.has_frontline_between(from_cp, to_cp)
position, heading, distance = cls.frontline_vector(from_cp, to_cp, theater)
return cls(
position=position,
heading=heading,
distance=distance,
theater=theater,
from_cp=from_cp,
to_cp=to_cp,
attackers_side=attacker,
defenders_side=defender,
ground_attackers_location=None,
ground_defenders_location=None,
air_attackers_location=position.point_from_heading(random.randint(*INTERCEPT_ATTACKERS_HEADING) + heading, AIR_DISTANCE),
air_defenders_location=position.point_from_heading(random.randint(*INTERCEPT_ATTACKERS_HEADING) + _opposite_heading(heading), AIR_DISTANCE)
air_defenders_location=position.point_from_heading(random.randint(*INTERCEPT_ATTACKERS_HEADING) + _opposite_heading(heading), AIR_DISTANCE),
)
@classmethod
def frontline_cap_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
assert cls.has_frontline_between(from_cp, to_cp)
position, heading, distance = cls.frontline_vector(from_cp, to_cp, theater)
attack_position = position.point_from_heading(heading, randint(0, int(distance)))
attackers_position = attack_position.point_from_heading(heading - 90, AIR_DISTANCE)
defenders_position = attack_position.point_from_heading(heading + 90, random.randint(*CAP_CAS_DISTANCE))
return cls(
position=position,
heading=heading,
distance=distance,
theater=theater,
from_cp=from_cp,
to_cp=to_cp,
attackers_side=attacker,
defenders_side=defender,
air_attackers_location=attackers_position,
air_defenders_location=defenders_position,
)
@classmethod
@@ -199,7 +441,7 @@ class Conflict:
distance = to_cp.size * GROUND_DISTANCE_FACTOR
defenders_location = position.point_from_heading(defense_heading, distance)
defenders_location = Conflict._find_ground_location(defenders_location, distance * 2, _heading_sum(defense_heading, 180), theater)
defenders_location = Conflict._find_ground_position(defenders_location, distance * 2, _heading_sum(defense_heading, 180), theater)
return cls(
position=position,
@@ -215,17 +457,20 @@ class Conflict:
)
@classmethod
def naval_intercept_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
def naval_intercept_position(cls, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
radial = random.choice(to_cp.sea_radials)
initial_distance = min(int(from_cp.position.distance_to_point(to_cp.position) * NAVAL_INTERCEPT_DISTANCE_FACTOR), NAVAL_INTERCEPT_DISTANCE_MAX)
position = to_cp.position.point_from_heading(radial, initial_distance)
initial_position = to_cp.position.point_from_heading(radial, initial_distance)
for offset in range(0, initial_distance, NAVAL_INTERCEPT_STEP):
position = to_cp.position.point_from_heading(_opposite_heading(radial), initial_distance - offset)
position = initial_position.point_from_heading(_opposite_heading(radial), offset)
if not theater.is_on_land(position):
break
return position
@classmethod
def naval_intercept_conflict(cls, attacker: Country, defender: Country, position: Point, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
attacker_heading = from_cp.position.heading_between_point(to_cp.position)
return cls(
position=position,
@@ -242,10 +487,9 @@ class Conflict:
@classmethod
def transport_conflict(cls, attacker: Country, defender: Country, from_cp: ControlPoint, to_cp: ControlPoint, theater: ConflictTheater):
frontline_position = cls._frontline_position(from_cp, to_cp)
heading = to_cp.position.heading_between_point(from_cp.position)
frontline_position, heading = cls.frontline_position(theater, from_cp, to_cp)
initial_dest = frontline_position.point_from_heading(heading, TRANSPORT_FRONTLINE_DIST)
dest = cls._find_ground_location(initial_dest, from_cp.position.distance_to_point(to_cp.position) / 3, heading, theater)
dest = cls._find_ground_position(initial_dest, from_cp.position.distance_to_point(to_cp.position) / 3, heading, theater)
if not dest:
radial = to_cp.find_radial(to_cp.position.heading_between_point(from_cp.position))
dest = to_cp.position.point_from_heading(radial, to_cp.size * GROUND_DISTANCE_FACTOR)

View File

@@ -1,3 +1,4 @@
import logging
import typing
import random
from datetime import datetime, timedelta, time
@@ -18,21 +19,24 @@ from gen import *
WEATHER_CLOUD_BASE = 2000, 3000
WEATHER_CLOUD_DENSITY = 1, 8
WEATHER_CLOUD_THICKNESS = 100, 400
WEATHER_CLOUD_BASE_MIN = 1200
WEATHER_CLOUD_BASE_MIN = 1600
WEATHER_FOG_CHANCE = 20
WEATHER_FOG_VISIBILITY = 2500, 5000
WEATHER_FOG_THICKNESS = 100, 500
RANDOM_TIME = {
"night": 5,
"dusk": 30,
"dawn": 30,
"night": 7,
"dusk": 40,
"dawn": 40,
"day": 100,
}
RANDOM_WEATHER = {
1: 5, # heavy rain
2: 15, # rain
3: 25, # dynamic
4: 35, # clear
5: 100, # random
1: 0, # thunderstorm
2: 20, # rain
3: 80, # clouds
4: 100, # clear
}
@@ -48,7 +52,8 @@ class EnviromentGenerator:
self.game = game
def _gen_random_time(self):
start_time = datetime.combine(datetime.today(), time())
start_time = datetime.strptime('May 25 2018 12:00AM', '%b %d %Y %I:%M%p')
time_range = None
for k, v in RANDOM_TIME.items():
if self.game.settings.night_disabled and k == "night":
@@ -59,8 +64,36 @@ class EnviromentGenerator:
break
start_time += timedelta(hours=random.randint(*time_range))
logging.info("time - {}, slot - {}, night skipped - {}".format(
str(start_time),
str(time_range),
self.game.settings.night_disabled))
self.mission.start_time = start_time
def _generate_wind(self, wind_speed, wind_direction=None):
# wind
if not wind_direction:
wind_direction = random.randint(0, 360)
self.mission.weather.wind_at_ground = Wind(wind_direction, wind_speed)
self.mission.weather.wind_at_2000 = Wind(wind_direction, wind_speed * 2)
self.mission.weather.wind_at_8000 = Wind(wind_direction, wind_speed * 3)
def _generate_base_weather(self):
# clouds
self.mission.weather.clouds_base = random.randint(*WEATHER_CLOUD_BASE)
self.mission.weather.clouds_density = random.randint(*WEATHER_CLOUD_DENSITY)
self.mission.weather.clouds_thickness = random.randint(*WEATHER_CLOUD_THICKNESS)
# wind
self._generate_wind(random.randint(0, 4))
# fog
if random.randint(0, 100) < WEATHER_FOG_CHANCE:
self.mission.weather.fog_visibility = random.randint(*WEATHER_FOG_VISIBILITY)
self.mission.weather.fog_thickness = random.randint(*WEATHER_FOG_THICKNESS)
def _gen_random_weather(self):
weather_type = None
for k, v in RANDOM_WEATHER.items():
@@ -68,30 +101,36 @@ class EnviromentGenerator:
weather_type = k
break
print("generated weather {}".format(weather_type))
logging.info("generated weather {}".format(weather_type))
if weather_type == 1:
self.mission.weather.heavy_rain()
elif weather_type == 2:
self.mission.weather.heavy_rain()
self.mission.weather.enable_fog = False
elif weather_type == 3:
self.mission.weather.random(self.mission.start_time, self.conflict.theater.terrain)
elif weather_type == 4:
pass
elif weather_type == 5:
self.mission.weather.clouds_base = random.randint(*WEATHER_CLOUD_BASE)
self.mission.weather.clouds_density = random.randint(*WEATHER_CLOUD_DENSITY)
self.mission.weather.clouds_thickness = random.randint(*WEATHER_CLOUD_THICKNESS)
# thunderstorm
self._generate_base_weather()
self._generate_wind(random.randint(8, 12))
wind_direction = random.randint(0, 360)
wind_speed = random.randint(0, 13)
self.mission.weather.wind_at_ground = Wind(wind_direction, wind_speed)
self.mission.weather.wind_at_2000 = Wind(wind_direction, wind_speed * 2)
self.mission.weather.wind_at_8000 = Wind(wind_direction, wind_speed * 3)
self.mission.weather.clouds_density = random.randint(9, 10)
self.mission.weather.clouds_iprecptns = Weather.Preceptions.Thunderstorm
elif weather_type == 2:
# rain
self._generate_base_weather()
self.mission.weather.clouds_density = random.randint(5, 8)
self.mission.weather.clouds_iprecptns = Weather.Preceptions.Rain
self._generate_wind(random.randint(4, 8))
elif weather_type == 3:
# clouds
self._generate_base_weather()
elif weather_type == 4:
# clear
pass
if self.mission.weather.clouds_density > 0:
# sometimes clouds are randomized way too low and need to be fixed
self.mission.weather.clouds_base = max(self.mission.weather.clouds_base, WEATHER_CLOUD_BASE_MIN)
if self.mission.weather.wind_at_ground.speed == 0:
# frontline smokes look silly w/o any wind
self._generate_wind(1)
def generate(self) -> EnvironmentSettings:
self._gen_random_time()
self._gen_random_weather()

45
gen/forcedoptionsgen.py Normal file
View File

@@ -0,0 +1,45 @@
import logging
import typing
from enum import IntEnum
from dcs.mission import Mission
from dcs.forcedoptions import ForcedOptions
from .conflictgen import *
class Labels(IntEnum):
Off = 0
Full = 1
Abbreviated = 2
Dot = 3
class ForcedOptionsGenerator:
def __init__(self, mission: Mission, conflict: Conflict, game):
self.mission = mission
self.conflict = conflict
self.game = game
def _set_options_view(self):
if self.game.settings.map_coalition_visibility == "All Units":
self.mission.forced_options.options_view = ForcedOptions.Views.All
elif self.game.settings.map_coalition_visibility == "Allied Units":
self.mission.forced_options.options_view = ForcedOptions.Views.Allies
elif self.game.settings.map_coalition_visibility == "Own Aircraft":
self.mission.forced_options.options_view = ForcedOptions.Views.MyAircraft
elif self.game.settings.map_coalition_visibility == "None":
self.mission.forced_options.options_view = ForcedOptions.Views.OnlyMap
def _set_labels(self):
if self.game.settings.labels == "Abbreviated":
self.mission.forced_options.labels = int(Labels.Abbreviated)
elif self.game.settings.labels == "Dot Only":
self.mission.forced_options.labels = int(Labels.Dot)
elif self.game.settings.labels == "Off":
self.mission.forced_options.labels = int(Labels.Off)
def generate(self):
self._set_options_view()
self._set_labels()

92
gen/groundobjectsgen.py Normal file
View File

@@ -0,0 +1,92 @@
import logging
from game import db
from .conflictgen import *
from .naming import *
from dcs.mission import *
from dcs.statics import *
FARP_FRONTLINE_DISTANCE = 10000
AA_CP_MIN_DISTANCE = 40000
class GroundObjectsGenerator:
FARP_CAPACITY = 4
def __init__(self, mission: Mission, conflict: Conflict, game):
self.m = mission
self.conflict = conflict
self.game = game
def generate_farps(self, number_of_units=1) -> typing.Collection[StaticGroup]:
if self.conflict.is_vector:
center = self.conflict.center
heading = self.conflict.heading - 90
else:
center, heading = self.conflict.frontline_position(self.conflict.theater, self.conflict.from_cp, self.conflict.to_cp)
heading -= 90
initial_position = center.point_from_heading(heading, FARP_FRONTLINE_DISTANCE)
position = self.conflict.find_ground_position(initial_position, heading)
if not position:
position = initial_position
for i, _ in enumerate(range(0, number_of_units, self.FARP_CAPACITY)):
position = position.point_from_heading(0, i * 275)
yield self.m.farp(
country=self.m.country(self.game.player),
name="FARP",
position=position,
)
def generate(self):
side = self.m.country(self.game.enemy)
cp = None # type: ControlPoint
if self.conflict.attackers_side.name == self.game.player:
cp = self.conflict.to_cp
else:
cp = self.conflict.from_cp
for ground_object in cp.ground_objects:
if ground_object.dcs_identifier == "AA":
if ground_object.position.distance_to_point(self.conflict.from_cp.position) < AA_CP_MIN_DISTANCE:
continue
if ground_object.is_dead:
continue
unit_type = random.choice(self.game.commision_unit_types(cp, AirDefence))
assert unit_type is not None, "Cannot find unit type for GroundObject defense ({})!".format(cp)
group = self.m.vehicle_group(
country=side,
name=ground_object.string_identifier,
_type=unit_type,
position=ground_object.position,
heading=ground_object.heading,
)
logging.info("generated defense object identifier {} with mission id {}".format(group.name, group.id))
else:
if ground_object.dcs_identifier in warehouse_map:
static_type = warehouse_map[ground_object.dcs_identifier]
else:
static_type = fortification_map[ground_object.dcs_identifier]
if not static_type:
print("Didn't find {} in static _map(s)!".format(ground_object.dcs_identifier))
continue
group = self.m.static_group(
country=side,
name=ground_object.string_identifier,
_type=static_type,
position=ground_object.position,
heading=ground_object.heading,
dead=ground_object.is_dead,
)
logging.info("generated {}object identifier {} with mission id {}".format("dead " if ground_object.is_dead else "", group.name, group.id))

View File

@@ -1,37 +1,27 @@
from game import db
class NameGenerator:
number = 0
def next_armor_group_name(self):
def next_unit_name(self, country, unit_type):
self.number += 1
return "Armor Unit {}".format(self.number)
return "unit|{}|{}|{}|".format(country.id, self.number, db.unit_type_name(unit_type))
def next_cas_group_name(self):
self.number += 1
return "CAS Unit {}".format(self.number)
def next_basedefense_name(self):
return "basedefense_aa|0|0|"
def next_escort_group_name(self):
def next_awacs_name(self, country):
self.number += 1
return "Escort Unit {}".format(self.number)
return "awacs|{}|{}|0|".format(country.id, self.number)
def next_intercept_group_name(self):
def next_tanker_name(self, country):
self.number += 1
return "Intercept Unit {}".format(self.number)
def next_ground_group_name(self):
self.number += 1
return "AA Unit {}".format(self.number)
return "tanker|{}|{}|0|".format(country.id, self.number)
def next_transport_group_name(self):
def next_carrier_name(self, country):
self.number += 1
return "Transport Unit {}".format(self.number)
def next_awacs_group_name(self):
self.number += 1
return "AWACS Unit {}".format(self.number)
def next_passenger_group_name(self):
self.number += 1
return "Infantry Unit {}".format(self.number)
return "carrier|{}|{}|0|".format(country.id, self.number)
namegen = NameGenerator()

View File

@@ -1,3 +1,5 @@
import logging
from game import db
from .conflictgen import *
from .naming import *
@@ -14,25 +16,38 @@ class ShipGenerator:
self.m = mission
self.conflict = conflict
def generate_carrier(self, type: ShipType, country: str, at: Point) -> ShipGroup:
return self.m.ship_group(
def generate_carrier(self, for_units: typing.Collection[UnitType], country: str, at: Point) -> ShipGroup:
type = db.find_unittype(Carriage, country)[0]
for unit_type in for_units:
if unit_type in db.CARRIER_TYPE_BY_PLANE:
type = db.CARRIER_TYPE_BY_PLANE[unit_type]
break
group = self.m.ship_group(
country=self.m.country(country),
name=namegen.next_transport_group_name(),
name=namegen.next_carrier_name(self.m.country(country)),
_type=type,
position=at)
group.points[0].tasks.append(ActivateBeaconCommand(unit_id=group.id, channel=20, callsign="SHDW", aa=False))
group.points[0].tasks.append(ActivateICLSCommand(unit_id=group.id, channel=1))
return group
def generate_cargo(self, units: db.ShipDict) -> typing.Collection[ShipGroup]:
groups = []
offset = 0
for unit_type, unit_count in units.items():
group = self.m.ship_group(
country=self.conflict.defenders_side,
name=namegen.next_transport_group_name(),
_type=unit_type,
position=self.conflict.ground_defenders_location.random_point_within(SHIP_RANDOM_SPREAD, SHIP_RANDOM_SPREAD),
group_size=unit_count,
)
for _ in range(unit_count):
offset += 1
logging.info("shipgen: {} ({}) for {}".format(unit_type, unit_count, self.conflict.defenders_side))
group = self.m.ship_group(
country=self.conflict.defenders_side,
name=namegen.next_unit_name(self.conflict.defenders_side, unit_type),
_type=unit_type,
position=self.conflict.ground_defenders_location.random_point_within(SHIP_RANDOM_SPREAD, SHIP_RANDOM_SPREAD).point_from_heading(0, offset * SHIP_RANDOM_SPREAD)
)
group.add_waypoint(self.conflict.to_cp.position)
groups.append(group)
group.add_waypoint(self.conflict.to_cp.position)
groups.append(group)
return groups

View File

@@ -12,20 +12,23 @@ from dcs.action import *
from game import db
from theater import *
from gen.airsupportgen import AirSupportConflictGenerator
from gen import *
PUSH_TRIGGER_SIZE = 3000
PUSH_TRIGGER_ACTIVATION_AGL = 25
REGROUP_ZONE_DISTANCE = 12000
REGROUP_ALT = 5000
TRIGGER_WAYPOINT_OFFSET = 2
TRIGGER_MIN_DISTANCE_FROM_START = 10000
TRIGGER_RADIUS_MINIMUM = 25000
TRIGGER_RADIUS_MINIMUM = 20000
TRIGGER_RADIUS_SMALL = 30000
TRIGGER_RADIUS_SMALL = 50000
TRIGGER_RADIUS_MEDIUM = 100000
TRIGGER_RADIUS_LARGE = 150000
TRIGGER_RADIUS_ALL_MAP = 3000000
class Silence(Option):
@@ -38,7 +41,7 @@ class TriggersGenerator:
self.conflict = conflict
self.game = game
def _gen_activation_trigger(self, radius: int, player_coalition: str, enemy_coalition: str):
def _gen_activation_trigger(self, radius: int, player_cp: ControlPoint, player_coalition: str, enemy_coalition: str):
activate_by_trigger = []
for coalition_name, coalition in self.mission.coalition.items():
for country in coalition.countries.values():
@@ -51,14 +54,14 @@ class TriggersGenerator:
vehicle_group.late_activation = True
activate_by_trigger.append(vehicle_group)
conflict_distance = self.conflict.from_cp.position.distance_to_point(self.conflict.position)
conflict_distance = player_cp.position.distance_to_point(self.conflict.position)
minimum_radius = max(conflict_distance - TRIGGER_MIN_DISTANCE_FROM_START, TRIGGER_RADIUS_MINIMUM)
if minimum_radius < 0:
minimum_radius = 0
result_radius = min(minimum_radius, radius)
radius = min(minimum_radius, radius)
activation_trigger_zone = self.mission.triggers.add_triggerzone(self.conflict.position, result_radius, name="Activation zone")
activation_trigger_zone = self.mission.triggers.add_triggerzone(self.conflict.position, radius, name="Activation zone")
activation_trigger = TriggerOnce(Event.NoEvent, "Activation trigger")
activation_trigger.add_condition(PartOfCoalitionInZone(player_coalition, activation_trigger_zone.id))
activation_trigger.add_condition(FlagIsTrue())
@@ -67,44 +70,50 @@ class TriggersGenerator:
self.mission.triggerrules.triggers.append(activation_trigger)
def _gen_push_trigger(self, player_coalition: str):
def _gen_push_trigger(self, player_cp: ControlPoint, player_coalition: str):
push_by_trigger = []
for coalition_name, coalition in self.mission.coalition.items():
for country in coalition.countries.values():
if coalition_name == player_coalition:
for plane_group in country.plane_group + country.helicopter_group:
if plane_group.task == AWACS.name:
for group in country.plane_group + country.helicopter_group:
if group.task == AWACS.name or group.task == Refueling.name:
continue
regroup_heading = self.conflict.to_cp.position.heading_between_point(self.conflict.from_cp.position)
push_by_trigger.append(group)
pos1 = plane_group.position.point_from_heading(regroup_heading, REGROUP_ZONE_DISTANCE)
pos2 = plane_group.position.point_from_heading(regroup_heading, REGROUP_ZONE_DISTANCE+5000)
w1 = plane_group.add_waypoint(pos1, REGROUP_ALT)
w2 = plane_group.add_waypoint(pos2, REGROUP_ALT)
if not group.units[0].is_human():
regroup_heading = self.conflict.to_cp.position.heading_between_point(player_cp.position)
plane_group.points.remove(w1)
plane_group.points.remove(w2)
pos1 = group.position.point_from_heading(regroup_heading, REGROUP_ZONE_DISTANCE)
pos2 = group.position.point_from_heading(regroup_heading, REGROUP_ZONE_DISTANCE+5000)
w1 = group.add_waypoint(pos1, REGROUP_ALT)
w2 = group.add_waypoint(pos2, REGROUP_ALT)
plane_group.points.insert(1, w2)
plane_group.points.insert(1, w1)
group.points.remove(w1)
group.points.remove(w2)
w1.tasks.append(Silence(True))
group.points.insert(1, w2)
group.points.insert(1, w1)
switch_waypoint_task = ControlledTask(SwitchWaypoint(from_waypoint=3, to_waypoint=2))
switch_waypoint_task.start_if_user_flag(1, False)
w2.tasks.append(switch_waypoint_task)
plane_group.points[3].tasks.append(Silence(False))
w1.tasks.append(Silence(True))
plane_group.add_trigger_action(SwitchWaypoint(to_waypoint=4))
push_by_trigger.append(plane_group)
switch_waypoint_task = ControlledTask(SwitchWaypoint(from_waypoint=3, to_waypoint=2))
switch_waypoint_task.start_if_user_flag(1, False)
w2.tasks.append(switch_waypoint_task)
group.points[3].tasks.append(Silence(False))
group.add_trigger_action(SwitchWaypoint(to_waypoint=4))
push_trigger_zone = self.mission.triggers.add_triggerzone(self.conflict.from_cp.position, PUSH_TRIGGER_SIZE, name="Push zone")
push_trigger = TriggerOnce(Event.NoEvent, "Push trigger")
push_trigger.add_condition(AllOfCoalitionOutsideZone(player_coalition, push_trigger_zone.id))
for group in push_by_trigger:
push_trigger.add_action(AITaskPush(group.id, 1))
message_string = self.mission.string("Task force is in the air, proceed with the objective (activate waypoint 3).")
for unit in group.units:
push_trigger.add_condition(UnitAltitudeHigherAGL(unit.id, PUSH_TRIGGER_ACTIVATION_AGL))
if not group.units[0].is_human():
push_trigger.add_action(AITaskPush(group.id, 1))
message_string = self.mission.string("Task force is in the air, proceed with the objective.")
push_trigger.add_action(MessageToAll(message_string, clearview=True))
push_trigger.add_action(SetFlagValue())
@@ -119,9 +128,9 @@ class TriggersGenerator:
def _set_skill(self, player_coalition: str, enemy_coalition: str):
for coalition_name, coalition in self.mission.coalition.items():
if coalition_name == player_coalition:
skill_level = self.game.settings.player_skill
skill_level = self.game.settings.player_skill, self.game.settings.player_skill
elif coalition_name == enemy_coalition:
skill_level = self.game.settings.enemy_skill
skill_level = self.game.settings.enemy_skill, self.game.settings.enemy_vehicle_skill
else:
continue
@@ -129,12 +138,12 @@ class TriggersGenerator:
for plane_group in country.plane_group:
for plane_unit in plane_group.units:
if plane_unit.skill != Skill.Client and plane_unit.skill != Skill.Player:
plane_unit.skill = Skill(skill_level)
plane_unit.skill = Skill(skill_level[0])
for vehicle_group in country.vehicle_group:
vehicle_group.set_skill(Skill(skill_level))
vehicle_group.set_skill(Skill(skill_level[1]))
def generate(self, is_quick: bool, activation_trigger_radius: int):
def generate(self, player_cp: ControlPoint, is_quick: bool, activation_trigger_radius: int, awacs_enabled: bool):
player_coalition = self.game.player == "USA" and "blue" or "red"
enemy_coalition = player_coalition == "blue" and "red" or "blue"
@@ -146,6 +155,6 @@ class TriggersGenerator:
if not is_quick:
# TODO: waypoint parts of this should not be post-hacked but added in airgen
self._gen_activation_trigger(activation_trigger_radius, player_coalition, enemy_coalition)
self._gen_push_trigger(player_coalition)
self._gen_activation_trigger(activation_trigger_radius, player_cp, player_coalition, enemy_coalition)
self._gen_push_trigger(player_cp, player_coalition)

View File

@@ -9,6 +9,7 @@ from dcs.unit import Static
from theater import *
from .conflictgen import *
#from game.game import Game
from game import db
class MarkerSmoke(unittype.StaticType):
@@ -62,14 +63,12 @@ def __monkey_static_dict(self: Static):
__original_static_dict = Static.dict
Static.dict = __monkey_static_dict
FRONT_SMOKE_MIN_DISTANCE = 10000
FRONT_SMOKE_DISTANCE_FACTOR = 0.5
FRONT_SMOKE_LENGTH = 80000
FRONT_SMOKE_SPACING = 600
FRONT_SMOKE_RANDOM_SPREAD = 3000
FRONT_SMOKE_SPACING = 800
FRONT_SMOKE_RANDOM_SPREAD = 4000
FRONT_SMOKE_TYPE_CHANCES = {
10: MassiveSmoke,
60: BigSmoke,
2: MassiveSmoke,
15: BigSmoke,
30: Smoke,
100: Smoke,
}
@@ -100,12 +99,17 @@ class VisualGenerator:
def _generate_frontline_smokes(self):
for from_cp, to_cp in self.game.theater.conflicts():
distance = max(from_cp.position.distance_to_point(to_cp.position) * FRONT_SMOKE_DISTANCE_FACTOR * to_cp.base.strength, FRONT_SMOKE_MIN_DISTANCE)
heading = to_cp.position.heading_between_point(from_cp.position)
point = Conflict._frontline_position(from_cp, to_cp)
plane_start = point.point_from_heading(turn_heading(heading, 90), FRONT_SMOKE_LENGTH / 2)
if from_cp.is_global or to_cp.is_global:
continue
for offset in range(0, FRONT_SMOKE_LENGTH, FRONT_SMOKE_SPACING):
frontline = Conflict.frontline_position(self.game.theater, from_cp, to_cp)
if not frontline:
continue
point, heading = frontline
plane_start = point.point_from_heading(turn_heading(heading, 90), FRONTLINE_LENGTH / 2)
for offset in range(0, FRONTLINE_LENGTH, FRONT_SMOKE_SPACING):
position = plane_start.point_from_heading(turn_heading(heading, - 90), offset)
for k, v in FRONT_SMOKE_TYPE_CHANCES.items():
@@ -121,6 +125,17 @@ class VisualGenerator:
position=pos)
break
def _generate_stub_planes(self):
mission_units = set()
for coalition_name, coalition in self.mission.coalition.items():
for country in coalition.countries.values():
for group in country.plane_group + country.helicopter_group + country.vehicle_group:
for unit in group.units:
mission_units.add(db.unit_type_of(unit))
for unit_type in mission_units:
self.mission.static_group(self.mission.country("USA"), "a", unit_type, Point(0, 300000), hidden=True)
def generate_target_smokes(self, target):
spread = target.size * DESTINATION_SMOKE_DISTANCE_FACTOR
for _ in range(0, int(target.size * DESTINATION_SMOKE_AMOUNT_FACTOR * (1.1 - target.base.strength))):
@@ -156,3 +171,4 @@ class VisualGenerator:
def generate(self):
self._generate_frontline_smokes()
self._generate_stub_planes()

40
pyinstaller.spec Normal file
View File

@@ -0,0 +1,40 @@
# -*- mode: python -*-
block_cipher = None
a = Analysis(['__init__.py'],
pathex=['C:\\Users\\shdwp\\PycharmProjects\\dcs_liberation'],
binaries=[],
datas=[
('resources', 'resources'),
('submodules/dcs/dcs/terrain/caucasus.p', 'dcs/terrain/'),
('submodules/dcs/dcs/terrain/nevada.p', 'dcs/terrain/'),
],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
icon="resources/icon.ico",
exclude_binaries=True,
name='liberation_main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='dcs_liberation')

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 247 KiB

View File

@@ -0,0 +1,221 @@
options =
{
["playerName"] = "PRINCE",
["miscellaneous"] =
{
["headmove"] = false,
["TrackIR_external_views"] = false,
["f5_nearest_ac"] = false,
["f11_free_camera"] = false,
["F2_view_effects"] = 1,
["f10_awacs"] = true,
["Coordinate_Display"] = "Lat Long",
["accidental_failures"] = false,
["autologin"] = true,
["force_feedback_enabled"] = false,
["collect_stat"] = true,
["chat_window_at_start"] = true,
["synchronize_controls"] = false,
["show_pilot_body"] = false,
}, -- end of ["miscellaneous"]
["difficulty"] =
{
["padlock"] = true,
["easyRadar"] = false,
["geffect"] = "reduced",
["miniHUD"] = false,
["setGlobal"] = true,
["birds"] = 0,
["optionsView"] = "optview_all",
["permitCrash"] = false,
["immortal"] = false,
["cockpitStatusBarAllowed"] = false,
["cockpitVisualRM"] = false,
["fuel"] = false,
["reports"] = true,
["hideStick"] = false,
["radio"] = true,
["map"] = true,
["spectatorExternalViews"] = false,
["avionicsLanguage"] = "native",
["userSnapView"] = false,
["tips"] = true,
["userMarks"] = true,
["units"] = "imperial",
["externalViews"] = true,
["iconsTheme"] = "nato",
["easyFlight"] = false,
["weapons"] = false,
["easyCommunication"] = true,
["labels"] = true,
}, -- end of ["difficulty"]
["VR"] =
{
["use_mouse"] = true,
["hand_controllers"] = true,
["custom_IPD"] = "63",
["custom_IPD_enable"] = false,
["enable"] = true,
["prefer_built_in_audio"] = true,
["box_mouse_cursor"] = false,
["pixel_density"] = 1,
}, -- end of ["VR"]
["graphics"] =
{
["rainDroplets"] = 1,
["preloadRadius"] = 100000,
["heatBlr"] = 1,
["anisotropy"] = 4,
["water"] = 2,
["motionBlur"] = 0,
["outputGamma"] = 2,
["treesVisibility"] = 5000,
["aspect"] = 1.7777777777778,
["lights"] = 2,
["HDR"] = 0,
["MSAA"] = 0,
["SSAA"] = 0,
["height"] = 1080,
["forestDistanceFactor"] = 0.77,
["cockpitGI"] = 1,
["terrainTextures"] = "max",
["multiMonitorSetup"] = "1camera",
["shadowTree"] = false,
["chimneySmokeDensity"] = 0,
["fullScreen"] = false,
["disableAero"] = false,
["DOF"] = 0,
["clouds"] = 1,
["flatTerrainShadows"] = 2,
["width"] = 1920,
["shadows"] = 2,
["textures"] = 2,
["effects"] = 3,
["SSAO"] = 0,
["useDeferredShading"] = 1,
["sync"] = false,
["LensEffects"] = 3,
["visibRange"] = "Low",
["scaleGui"] = false,
["clutterMaxDistance"] = 750,
["civTraffic"] = "",
}, -- end of ["graphics"]
["plugins"] =
{
["Su-25T"] =
{
["CPLocalList"] = "default",
}, -- end of ["Su-25T"]
["M-2000C"] =
{
["UNI_ALIGNED"] = true,
["CPLocalList"] = "default",
["PPA_TOTPAR"] = false,
["UNI_NODRIFT"] = false,
}, -- end of ["M-2000C"]
["A-10C"] =
{
["CPLocalList"] = "default",
}, -- end of ["A-10C"]
["FC3"] =
{
["CPLocalList_Su-25"] = "default",
["CPLocalList_Su-27"] = "default",
["CPLocalList_A-10A"] = "default",
["CPLocalList_Su-33"] = "default",
["CPLocalList_MiG-29S"] = "default",
["CPLocalList_MiG-29A"] = "default",
["CPLocalList_J-11A"] = "default",
["CPLocalList_MiG-29G"] = "default",
["CPLocalList_F-15C"] = "default",
}, -- end of ["FC3"]
["F/A-18C"] =
{
["abDetent"] = true,
["CPLocalList"] = "default",
}, -- end of ["F/A-18C"]
["MiG-21Bis"] =
{
["Pitot"] = false,
["Engine"] = false,
["Shake"] = 100,
["CPLocalList"] = "Default",
["Reticle"] = false,
["Freeze"] = false,
}, -- end of ["MiG-21Bis"]
["AV8BNA"] =
{
["UNI_ALIGNED"] = false,
["PPA_TOTPAR"] = false,
["UNI_NODRIFT"] = false,
}, -- end of ["AV8BNA"]
["F-5E-3"] =
{
["JoystickMode"] = 0,
["SightCamera"] = 0,
["CPLocalList"] = "default",
["aiHelper"] = false,
}, -- end of ["F-5E-3"]
["Mi-8MTV2"] =
{
["Mi8TrimmingMethod"] = 0,
["Mi8RudderTrimmer"] = true,
["Mi8AutopilotAdjustment"] = false,
["gunCamera"] = 0,
["Mi8CockpitShake"] = 50,
["controlHelperMi8"] = false,
["CPLocalList"] = "default_glass_dirt",
["Mi8FOV"] = 120,
}, -- end of ["Mi-8MTV2"]
["AJS37"] =
{
["CPLocalList"] = "default",
}, -- end of ["AJS37"]
["TF-51D"] =
{
["assistance"] = 100,
["CPLocalList"] = "default",
["autoRudder"] = false,
}, -- end of ["TF-51D"]
["UH-1H"] =
{
["UHRudderTrimmer"] = true,
["autoPilot"] = true,
["UH1HCockpitShake"] = 50,
["CPLocalList"] = "default",
["weapTooltips"] = false,
["UHTrimmingMethod"] = 0,
}, -- end of ["UH-1H"]
["Ka-50"] =
{
["Ka50TrimmingMethod"] = 0,
["CPLocalList"] = "default",
["Ka50RudderTrimmer"] = true,
["helmetCircleDisplacement"] = 11,
}, -- end of ["Ka-50"]
}, -- end of ["plugins"]
["format"] = 1,
["sound"] =
{
["hear_in_helmet"] = true,
["headphones"] = 100,
["cockpit"] = 100,
["world"] = 5,
["radioSpeech"] = true,
["GBreathEffect"] = true,
["volume"] = 21,
["headphones_on_external_views"] = true,
["music"] = 0,
["subtitles"] = false,
["gui"] = 100,
}, -- end of ["sound"]
["views"] =
{
["cockpit"] =
{
["mirrors"] = false,
["reflections"] = false,
["avionics"] = 1,
}, -- end of ["cockpit"]
}, -- end of ["views"]
} -- end of options

Binary file not shown.

Binary file not shown.

BIN
resources/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 467 KiB

BIN
resources/nevlandmap.p Normal file

Binary file not shown.

View File

@@ -1,542 +0,0 @@
local unitPayloads = {
["name"] = "A-10A",
["payloads"] = {
[1] = {
["name"] = "MK-84*2 , LAU-61*2 , AGM-65K*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 10,
},
[8] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 32,
[2] = 31,
},
},
[2] = {
["name"] = "LAU-61*6",
["pylons"] = {
[1] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 8,
},
[5] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
[2] = 31,
},
},
[3] = {
["name"] = "AGM-65K*2,Mk20*6,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 10,
},
[10] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 31,
},
},
[4] = {
["name"] = "Mk-82*6,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 10,
},
[8] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "Mk20*6,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 9,
},
[8] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 31,
},
},
[6] = {
["name"] = "AGM-65D*4,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98452}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98453}",
["num"] = 9,
},
[4] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 31,
},
},
[7] = {
["name"] = "AGM-65K, AGM-65D",
["pylons"] = {
[1] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
[2] = 31,
},
},
[8] = {
["name"] = "ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 16,
},
},
[9] = {
["name"] = "Mk-82*6, Mk-84*2",
["pylons"] = {
[1] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 9,
},
[8] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
},
},
[10] = {
["name"] = "Mk20*8",
["pylons"] = {
[1] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 9,
},
[8] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[11] = {
["name"] = "AGM-65K*2,Mk-84*2,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
[5] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 31,
},
},
[12] = {
["name"] = "AGM-65K*2,Mk-82*6,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 10,
},
[10] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 31,
},
},
[13] = {
["name"] = "Mk-84*2,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
[4] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 32,
},
},
[14] = {
["name"] = "AGM-65K*2,Mk84*2,Mk82*4,AIM-9M*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 11,
},
[2] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 10,
},
[3] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 9,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 8,
},
[5] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 5,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[8] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[9] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 2,
},
[10] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 30,
},
},
[15] = {
["name"] = "AGM-65H*6,Mk82*10,AIM-9M*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 11,
},
[2] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 10,
},
[3] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 9,
},
[4] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 8,
},
[5] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 5,
},
[7] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 4,
},
[8] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 3,
},
[9] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 2,
},
[10] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 30,
},
},
},
["unitType"] = "A-10A",
}
return unitPayloads

File diff suppressed because it is too large Load Diff

View File

@@ -1,364 +0,0 @@
local unitPayloads = {
["name"] = "AH-1W",
["payloads"] = {
[1] = {
["name"] = "14xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "M260_HYDRA_WP",
["num"] = 2,
},
[2] = {
["CLSID"] = "M260_HYDRA_WP",
["num"] = 3,
},
},
["tasks"] = {
[1] = 16,
},
},
[2] = {
["name"] = "38xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 16,
},
},
[3] = {
["name"] = "8xBGM-71, 14xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 1,
},
[2] = {
["CLSID"] = "M260_HYDRA",
["num"] = 2,
},
[3] = {
["CLSID"] = "M260_HYDRA",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[4] = {
["name"] = "8xBGM-71, 14xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 1,
},
[2] = {
["CLSID"] = "M260_HYDRA_WP",
["num"] = 2,
},
[3] = {
["CLSID"] = "M260_HYDRA_WP",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[5] = {
["name"] = "8xBGM-71, 38xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[6] = {
["name"] = "14xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "M260_HYDRA",
["num"] = 2,
},
[2] = {
["CLSID"] = "M260_HYDRA",
["num"] = 3,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[7] = {
["name"] = "38xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[8] = {
["name"] = "8xAGM-114",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[9] = {
["name"] = "28xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "M260_HYDRA",
["num"] = 1,
},
[2] = {
["CLSID"] = "M260_HYDRA",
["num"] = 2,
},
[3] = {
["CLSID"] = "M260_HYDRA",
["num"] = 3,
},
[4] = {
["CLSID"] = "M260_HYDRA",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[10] = {
["name"] = "8xBGM-71, 38xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[11] = {
["name"] = "8xAGM-114, 38xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[12] = {
["name"] = "8xBGM-71",
["pylons"] = {
[1] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3EA17AB0-A805-4D9E-8732-4CE00CB00F17}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[13] = {
["name"] = "8xAGM-114, 14xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "M260_HYDRA_WP",
["num"] = 2,
},
[3] = {
["CLSID"] = "M260_HYDRA_WP",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[14] = {
["name"] = "76xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[15] = {
["name"] = "8xAGM-114, 38xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
[4] = 30,
},
},
[16] = {
["name"] = "8xAGM-114, 14xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "M260_HYDRA",
["num"] = 2,
},
[3] = {
["CLSID"] = "M260_HYDRA",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
},
["unitType"] = "AH-1W",
}
return unitPayloads

View File

@@ -1,162 +0,0 @@
local unitPayloads = {
["name"] = "AH-64A",
["payloads"] = {
[1] = {
["name"] = "8xAGM-114",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[2] = {
["name"] = "38xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 16,
},
},
[3] = {
["name"] = "76xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[4] = {
["name"] = "8xAGM-114, 38xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[5] = {
["name"] = "38xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[6] = {
["name"] = "8xAGM-114, 38xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[7] = {
["name"] = "AGM-114K*16",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
[4] = 30,
},
},
},
["unitType"] = "AH-64A",
}
return unitPayloads

View File

@@ -1,162 +0,0 @@
local unitPayloads = {
["name"] = "AH-64D",
["payloads"] = {
[1] = {
["name"] = "76xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[2] = {
["name"] = "38xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[3] = {
["name"] = "38xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 16,
},
},
[4] = {
["name"] = "8xAGM-114",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[5] = {
["name"] = "8xAGM-114, 38xHYDRA-70 WP",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3DFB7321-AB0E-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[6] = {
["name"] = "8xAGM-114, 38xHYDRA-70",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[7] = {
["name"] = "AGM-114K*16",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
[4] = 30,
},
},
},
["unitType"] = "AH-64D",
}
return unitPayloads

View File

@@ -1,852 +0,0 @@
local unitPayloads = {
["name"] = "AJS37",
["payloads"] = {
[1] = {
["name"] = "Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{RB75}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{RB75}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{RB75}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{RB75}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{Robot24J}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{Robot24J}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[2] = {
["name"] = "Anti-ship: RB-04E*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{Rb04}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{Rb04}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 30,
},
},
[3] = {
["name"] = "Anti-ship (Heavy Mav): RB-75T*4, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{RB75T}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{RB75T}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{RB75T}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{RB75T}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 30,
},
},
[4] = {
["name"] = "Hard Target (Countermeasures): RB-05, XT, KB, U22",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot05}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{Robot05}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{U22}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{KB}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{Robot24J}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{Robot24J}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "Hard Target (MAV): RB-75T*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{RB75T}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{RB75T}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 32,
},
},
[6] = {
["name"] = "Ferry Flight: XT",
["pylons"] = {
[1] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[7] = {
["name"] = "CAS (75 GUN): RB-75*2, AKAN",
["pylons"] = {
[1] = {
["CLSID"] = "{RB75}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{RB75}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{AKAN}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{AKAN}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
},
},
[8] = {
["name"] = "CAP: RB-74*4, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{Robot74}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[9] = {
["name"] = "Countermeasures Escort: U/22A, KB",
["pylons"] = {
[1] = {
["CLSID"] = "{U22A}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{KB}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[10] = {
["name"] = "Strike: BK90 (MJ1)*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{BK90MJ1}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{BK90MJ1}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[11] = {
["name"] = "CAS: AKAN, RB-05A",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot05}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{Robot05}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{AKAN}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{AKAN}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[12] = {
["name"] = "CAP (6 AAM): RB-74*4, RB-24J*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{Robot74}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{Robot24J}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{Robot24J}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[13] = {
["name"] = "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[14] = {
["name"] = "CAP / Intecept: RB-05A*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot05}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{Robot05}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{Robot74}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[15] = {
["name"] = "Bombs Low-drag: SB71LD*16, RB-24J*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{M71BOMB}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{M71BOMB}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{M71BOMB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{M71BOMB}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{Robot24J}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{Robot24J}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[16] = {
["name"] = "SEAD: RB-75T*2, U22/A, KB, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{RB75T}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{RB75T}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{KB}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{U22}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[17] = {
["name"] = "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{Rb15}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{Rb15}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 30,
},
},
[18] = {
["name"] = "New Payload",
["pylons"] = {
},
["tasks"] = {
},
},
[19] = {
["name"] = "CAP (AJ37): RB-24J*2",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot24J}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{Robot24J}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{Robot24J}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{Robot24J}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[20] = {
["name"] = "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{KB}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{Rb04}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 30,
},
},
[21] = {
["name"] = "Bombs High-drag: SB71HD*16, XT, RB-24J",
["pylons"] = {
[1] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{Robot24J}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{Robot24J}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[22] = {
["name"] = "Anti-ship (Light Mav): RB-75*4, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{RB75}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{RB75}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{RB75}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{RB75}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 30,
},
},
[23] = {
["name"] = "Rocket Full Load HE: ARAK HE*4, RB-24J, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{Robot24J}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{Robot24J}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[24] = {
["name"] = "Illumination: LYSB*8, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{LYSBOMB}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{LYSBOMB}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{LYSBOMB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{LYSBOMB}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[25] = {
["name"] = "Anti-ship (RB05): RB-05A*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{Robot05}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{Robot05}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 30,
},
},
[26] = {
["name"] = "CAP (Gun): AKAN*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot74}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{Robot74}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{AKAN}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{AKAN}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[27] = {
["name"] = "Hard Target: RB-05A*2, RB-74*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{Robot05}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{Robot05}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{Robot74}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{Robot74}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[28] = {
["name"] = "RB-05*2, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{Robot05}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{Robot05}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 32,
},
},
[29] = {
["name"] = "CAS: ARAK M70 HE*4, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{ARAKM70BHE}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[30] = {
["name"] = "Runway Strike: SB71HD*16, RB-24J, XT",
["pylons"] = {
[1] = {
["CLSID"] = "{VIGGEN_X-TANK}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{M71BOMBD}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{Robot24J}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{Robot24J}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 34,
},
},
},
["tasks"] = {
},
["unitType"] = "AJS37",
}
return unitPayloads

File diff suppressed because it is too large Load Diff

View File

@@ -1,275 +0,0 @@
local unitPayloads = {
["name"] = "F-111F",
["payloads"] = {
[1] = {
["name"] = "BLU-107*24",
["pylons"] = {
[1] = {
["CLSID"] = "{752B9782-F962-11d5-9190-00A0249B6F00}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{752B9782-F962-11d5-9190-00A0249B6F00}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{752B9782-F962-11d5-9190-00A0249B6F00}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{752B9782-F962-11d5-9190-00A0249B6F00}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 34,
},
},
[2] = {
["name"] = "Mk 82*30",
["pylons"] = {
[1] = {
["CLSID"] = "{1C97B4A0-AA3B-43A8-8EE7-D11071457185}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{1C97B4A0-AA3B-43A8-8EE7-D11071457185}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{027563C9-D87E-4A85-B317-597B510E3F03}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{1C97B4A0-AA3B-43A8-8EE7-D11071457185}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{1C97B4A0-AA3B-43A8-8EE7-D11071457185}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[3] = {
["name"] = "GBU-15*3,AIM-9*2,Pavetack",
["pylons"] = {
[1] = {
["CLSID"] = "{FAAFA032-8996-42BF-ADC4-8E2C86BCE536}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{199D6D51-1764-497E-9AE5-7D07C8D4D87E}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FAAFA032-8996-42BF-ADC4-8E2C86BCE536}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{FAAFA032-8996-42BF-ADC4-8E2C86BCE536}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 33,
},
},
[4] = {
["name"] = "Mk-84*5",
["pylons"] = {
[1] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "GBU-12*5,Pavetack",
["pylons"] = {
[1] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{199D6D51-1764-497E-9AE5-7D07C8D4D87E}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 33,
},
},
[6] = {
["name"] = "GBU-10*5,Pavetack",
["pylons"] = {
[1] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{199D6D51-1764-497E-9AE5-7D07C8D4D87E}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 33,
},
},
[7] = {
["name"] = "Mk20*30",
["pylons"] = {
[1] = {
["CLSID"] = "{3C7CD675-7D39-41C5-8735-0F4F537818A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3C7CD675-7D39-41C5-8735-0F4F537818A8}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{E79759F7-C622-4AA4-B1EF-37639A34D924}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{3C7CD675-7D39-41C5-8735-0F4F537818A8}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{3C7CD675-7D39-41C5-8735-0F4F537818A8}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[8] = {
["name"] = "GBU-24*5,Pavetack",
["pylons"] = {
[1] = {
["CLSID"] = "{34759BBC-AF1E-4AEE-A581-498FF7A6EBCE}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{34759BBC-AF1E-4AEE-A581-498FF7A6EBCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{199D6D51-1764-497E-9AE5-7D07C8D4D87E}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{34759BBC-AF1E-4AEE-A581-498FF7A6EBCE}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{34759BBC-AF1E-4AEE-A581-498FF7A6EBCE}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{34759BBC-AF1E-4AEE-A581-498FF7A6EBCE}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 33,
},
},
[9] = {
["name"] = "GBU-28*3,AIM-9*2,Pavetack",
["pylons"] = {
[1] = {
["CLSID"] = "{F06B775B-FC70-44B5-8A9F-5B5E2EB839C7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{199D6D51-1764-497E-9AE5-7D07C8D4D87E}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F06B775B-FC70-44B5-8A9F-5B5E2EB839C7}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{F06B775B-FC70-44B5-8A9F-5B5E2EB839C7}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 33,
},
},
},
["unitType"] = "F-111F",
}
return unitPayloads

View File

@@ -1,55 +0,0 @@
local unitPayloads = {
["name"] = "F-117A",
["payloads"] = {
[1] = {
["name"] = "GBU-12*2",
["pylons"] = {
[1] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 33,
},
},
[2] = {
["name"] = "GBU-10*2",
["pylons"] = {
[1] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 33,
},
},
[3] = {
["name"] = "GBU-27*2",
["pylons"] = {
[1] = {
["CLSID"] = "{EF0A9419-01D6-473B-99A3-BEBDB923B14D}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{EF0A9419-01D6-473B-99A3-BEBDB923B14D}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 33,
},
},
},
["unitType"] = "F-117A",
}
return unitPayloads

View File

@@ -1,109 +0,0 @@
local unitPayloads = {
["name"] = "F-14A",
["payloads"] = {
[1] = {
["name"] = "AIM-9*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 12,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 17,
},
},
[2] = {
["name"] = "AIM-54C*6,AIM-9*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 11,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 12,
},
},
["tasks"] = {
[1] = 11,
[2] = 18,
[3] = 19,
[4] = 10,
},
},
[3] = {
["name"] = "AIM-54C*4,AIM-9*2,AIM-7*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{7575BA0B-7294-4844-857B-031A144B2595}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 11,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 12,
},
},
["tasks"] = {
[1] = 11,
[2] = 18,
[3] = 19,
[4] = 10,
},
},
},
["unitType"] = "F-14A",
}
return unitPayloads

View File

@@ -1,549 +0,0 @@
local unitPayloads = {
["name"] = "F-15C",
["payloads"] = {
[1] = {
["name"] = "AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 10,
},
[4] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 11,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 5,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[10] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[11] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[2] = {
["name"] = "AIM-9*2,AIM-120*6,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 10,
},
},
[3] = {
["name"] = "AIM-9*4,AIM-120*4,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[10] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 10,
},
[11] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[4] = {
["name"] = "AIM-9*4,AIM-120*4,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 10,
},
},
[5] = {
["name"] = "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[10] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 10,
},
[11] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[6] = {
["name"] = "AIM-9*2,AIM-120*6,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[10] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 10,
},
[11] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[7] = {
["name"] = "AIM-9*4,AIM-7*4,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 10,
},
},
[8] = {
["name"] = "AIM-120*8,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 10,
},
},
[9] = {
["name"] = "AIM-9*4,AIM-7*4,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[10] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 10,
},
[11] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[10] = {
["name"] = "AIM-120*8,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 9,
},
[10] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 10,
},
[11] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[11] = {
["name"] = "AIM-9*2,AIM-120*2,AIM-7*4,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 11,
},
},
["tasks"] = {
[1] = 10,
},
},
},
["unitType"] = "F-15C",
}
return unitPayloads

File diff suppressed because it is too large Load Diff

View File

@@ -1,928 +0,0 @@
local unitPayloads = {
["name"] = "F-16A MLU",
["payloads"] = {
[1] = {
["name"] = "Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{8A0BE8AE-58D4-4572-9263-3144C0D06364}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 16,
},
},
[2] = {
["name"] = "AGM-88*2, AGM-65D*2, AIM-120B*2, ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
[10] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 29,
},
},
[3] = {
["name"] = "Mk-82*6,AIM-120*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[4] = {
["name"] = "Mk-82*2,AIM-120*2,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[5] = {
["name"] = "AGM88*2,AGM-65D*6,AIM-120*2,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
[10] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 29,
},
},
[6] = {
["name"] = "AIM-120*2,GBU-10*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 33,
},
},
[7] = {
["name"] = "AIM-9*4,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 10,
},
},
[8] = {
["name"] = "Mk20*4,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[9] = {
["name"] = "AIM-120*6,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 10,
},
},
[10] = {
["name"] = "AIM-120*4,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 10,
},
},
[11] = {
["name"] = "AGM88, AGM-65D, AIM-120*2,Fuel*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 29,
},
},
[12] = {
["name"] = "AGM-65D*2,AIM-120*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[13] = {
["name"] = "AIM-9*4,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[14] = {
["name"] = "AIM-120*4,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[15] = {
["name"] = "AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
[10] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 29,
},
},
[16] = {
["name"] = "Mk-84*2,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[17] = {
["name"] = "AIM-120*6,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[18] = {
["name"] = "AGM-154*2,AIM-120*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{9BCC2A2B-5708-4860-B1F1-053A18442067}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{9BCC2A2B-5708-4860-B1F1-053A18442067}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 33,
},
},
[19] = {
["name"] = "AGM-88*2,AGM-65D*2,AIM-120B*2,AIM-9M*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 29,
},
},
[20] = {
["name"] = "Mk20*2,AIM-120*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[21] = {
["name"] = "AIM-120*2,AIM-9*2,GBU-12*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[10] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 33,
},
},
[22] = {
["name"] = "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[23] = {
["name"] = "AIM-120B*2_AIM-9M*2_AGM-119*4_ALQ-131",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 30,
},
},
},
["unitType"] = "F-16A MLU",
}
return unitPayloads

View File

@@ -1,788 +0,0 @@
local unitPayloads = {
["name"] = "F-16A",
["payloads"] = {
[1] = {
["name"] = "AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 29,
},
},
[2] = {
["name"] = "Mk20*4,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[3] = {
["name"] = "AIM-9*4,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[4] = {
["name"] = "AGM-65D*2,AIM-120*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[5] = {
["name"] = "AIM-120*4,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[6] = {
["name"] = "AGM88*2_AGM-65D*6_AIM-120*2_AIM-9*2_ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 29,
},
},
[7] = {
["name"] = "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[8] = {
["name"] = "AIM-120*2,AIM-9*2,GBU-12*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[10] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 33,
},
},
[9] = {
["name"] = "AIM-120*2,GBU-10*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 33,
},
},
[10] = {
["name"] = "AIM-120*6,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[11] = {
["name"] = "AIM-120*6,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 10,
},
},
[12] = {
["name"] = "AIM-9*4,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 10,
},
},
[13] = {
["name"] = "Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{8A0BE8AE-58D4-4572-9263-3144C0D06364}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 16,
},
},
[14] = {
["name"] = "Mk-84*2,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[15] = {
["name"] = "AIM-120*4,AIM-9*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 9,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 10,
},
},
[16] = {
["name"] = "Mk-82*6,AIM-120*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[17] = {
["name"] = "Mk-82*2,AIM-120*2,AIM-9*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[18] = {
["name"] = "AGM-154*2,AIM-120*2,ECM,Lantirn ,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{9BCC2A2B-5708-4860-B1F1-053A18442067}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{CAAC1CFD-6745-416B-AFA4-CB57414856D0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{9BCC2A2B-5708-4860-B1F1-053A18442067}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 33,
},
},
[19] = {
["name"] = "Mk20*2,AIM-120*2,ECM,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[20] = {
["name"] = "AGM-119*2,AIM-120B*2,AIM-9M*2,ALQ-184,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 8,
},
[4] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 7,
},
[5] = {
["CLSID"] = "ALQ_184",
["num"] = 6,
},
[6] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 30,
},
},
},
["unitType"] = "F-16A",
}
return unitPayloads

File diff suppressed because it is too large Load Diff

View File

@@ -1,533 +0,0 @@
local unitPayloads = {
["name"] = "F-4E",
["payloads"] = {
[1] = {
["name"] = "AIM-9*4,AIM-7*4",
["pylons"] = {
[1] = {
["CLSID"] = "{9DDF5297-94B9-42FC-A45E-6E316121CD85}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{9DDF5297-94B9-42FC-A45E-6E316121CD85}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 10,
},
},
[2] = {
["name"] = "AGM45*2_AGM-65D*4_AIM7*2_ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98452}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98453}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 29,
},
},
[3] = {
["name"] = "AGM-45*2,AIM-7*2,Fuel*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 29,
},
},
[4] = {
["name"] = "Mk-82*18,AIM-7*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{1C97B4A0-AA3B-43A8-8EE7-D11071457185}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{1C97B4A0-AA3B-43A8-8EE7-D11071457185}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "GBU-12*2,AIM-7*2,Fuel*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 33,
},
},
[6] = {
["name"] = "Mk20*12,AIM-7*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 31,
},
},
[7] = {
["name"] = "Mk-82*6,AIM-7*2,Fuel*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
},
},
[8] = {
["name"] = "GBU-10*2,AIM-7*2,Fuel*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 33,
},
},
[9] = {
["name"] = "Mk20*6,AIM-7*2,Fuel*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 31,
},
},
[10] = {
["name"] = "AGM-45*4,AIM-7*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515405}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 29,
},
},
[11] = {
["name"] = "AGM-65K*4,AIM-7*2,Fuel*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{D7670BC7-881B-4094-906C-73879CF7EB28}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{D7670BC7-881B-4094-906C-73879CF7EB27}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 31,
},
},
[12] = {
["name"] = "Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{8B9E3FD0-F034-4A07-B6CE-C269884CC71B}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 16,
},
},
[13] = {
["name"] = "AIM-9*4,AIM-7*4,Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{9DDF5297-94B9-42FC-A45E-6E316121CD85}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{9DDF5297-94B9-42FC-A45E-6E316121CD85}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[14] = {
["name"] = "Mk-84*2,AIM-7*2,ECM",
["pylons"] = {
[1] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
},
},
[15] = {
["name"] = "AGM-65K*4,AIM-7M*4,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{D7670BC7-881B-4094-906C-73879CF7EB27}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{8B9E3FD0-F034-4A07-B6CE-C269884CC71B}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{D7670BC7-881B-4094-906C-73879CF7EB28}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{7B4B122D-C12C-4DB4-834E-4D8BB4D863A8}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 30,
},
},
},
["unitType"] = "F-4E",
}
return unitPayloads

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,247 +0,0 @@
local unitPayloads = {
["name"] = "F-86F Sabre",
["payloads"] = {
[1] = {
["name"] = "120gal Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_120_F86F35}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{PTB_120_F86F35}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 11,
},
},
[2] = {
["name"] = "200gal Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[3] = {
["name"] = "120gal Fuel*2, 200gal Fuel*2",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{PTB_120_F86F35}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{PTB_120_F86F35}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[4] = {
["name"] = "GAR-8*2",
["pylons"] = {
[1] = {
["CLSID"] = "{GAR-8}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{GAR-8}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
[2] = 11,
[3] = 18,
[4] = 19,
},
},
[5] = {
["name"] = "120gal Fuel*2, GAR-8*2",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_120_F86F35}",
["num"] = 7,
},
[2] = {
["CLSID"] = "{GAR-8}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{GAR-8}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{PTB_120_F86F35}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 10,
[2] = 11,
[3] = 18,
[4] = 19,
},
},
[6] = {
["name"] = "HVAR*16",
["pylons"] = {
[1] = {
["CLSID"] = "{HVARx2}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{HVARx2}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{HVARx2}",
["num"] = 8,
},
[4] = {
["CLSID"] = "{HVARx2}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{HVARx2}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{HVARx2}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{HVARx2}",
["num"] = 2,
},
[8] = {
["CLSID"] = "{HVARx2}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
[2] = 31,
[3] = 30,
},
},
[7] = {
["name"] = "200gal Fuel*2, HVARx2*4",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{HVARx2}",
["num"] = 8,
},
[4] = {
["CLSID"] = "{HVARx2}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{HVARx2}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{HVARx2}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[8] = {
["name"] = "AN-M64*2",
["pylons"] = {
[1] = {
["CLSID"] = "{F86ANM64}",
["num"] = 7,
},
[2] = {
["CLSID"] = "{F86ANM64}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 30,
},
},
[9] = {
["name"] = "200gal Fuel*2, AN-M64*2",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{PTB_200_F86F35}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{F86ANM64}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{F86ANM64}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[10] = {
["name"] = "M117*2",
["pylons"] = {
[1] = {
["CLSID"] = "{00F5DAC4-0466-4122-998F-B1A298E34113}",
["num"] = 7,
},
[2] = {
["CLSID"] = "{00F5DAC4-0466-4122-998F-B1A298E34113}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 30,
},
},
},
["tasks"] = {
},
["unitType"] = "F-86F Sabre",
}
return unitPayloads

View File

@@ -1,811 +0,0 @@
local unitPayloads = {
["name"] = "FA-18A",
["payloads"] = {
[1] = {
["name"] = "GBU-16*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 33,
},
},
[2] = {
["name"] = "AIM-9*6,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 10,
},
},
[3] = {
["name"] = "Mk-84*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[4] = {
["name"] = "AGM-65D*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 31,
},
},
[5] = {
["name"] = "AGM88*4_AIM9*2_AIM7_FLIR Pod_Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 29,
},
},
[6] = {
["name"] = "AIM-9*4,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 19,
[2] = 11,
[3] = 18,
},
},
[7] = {
["name"] = "LAU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{F3EFE0AB-E91A-42D8-9CA2-B63C91ED570A}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{F3EFE0AB-E91A-42D8-9CA2-B63C91ED570A}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[8] = {
["name"] = "AGM-88*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 29,
},
},
[9] = {
["name"] = "MK-82*8,AIM-9*2,AIM-7,FLIR Pod,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{D5D51E24-348C-4702-96AF-97A714E72697}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{D5D51E24-348C-4702-96AF-97A714E72697}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{D5D51E24-348C-4702-96AF-97A714E72697}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{D5D51E24-348C-4702-96AF-97A714E72697}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[10] = {
["name"] = "MK-82*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{D5D51E24-348C-4702-96AF-97A714E72697}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{D5D51E24-348C-4702-96AF-97A714E72697}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 32,
[2] = 34,
},
},
[11] = {
["name"] = "AIM-9*4,AIM-7*2,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 19,
[2] = 11,
[3] = 18,
},
},
[12] = {
["name"] = "AGM-65K*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 31,
},
},
[13] = {
["name"] = "Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 16,
},
},
[14] = {
["name"] = "AGM88*2_AGM65D*2_AIM9*2_AIM7_FLIR Pod_Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 29,
},
},
[15] = {
["name"] = "GBU-12*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 33,
},
},
[16] = {
["name"] = "AIM-9*4,AIM-7*4,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 10,
},
},
[17] = {
["name"] = "Mk20*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 31,
},
},
[18] = {
["name"] = "GBU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 33,
},
},
[19] = {
["name"] = "AGM-84A*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{8B7CADF9-4954-46B3-8CFB-93F2F5B90B03}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6C0D552F-570B-42ff-9F6D-F10D9C1D4E1C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{EFEC8200-B922-11d7-9897-000476191836}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{8B7CADF9-4954-46B3-8CFB-93F2F5B90B03}",
["num"] = 8,
},
[9] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
[1] = 30,
},
},
},
["unitType"] = "F/A-18A",
}
return unitPayloads

View File

@@ -1,534 +0,0 @@
local unitPayloads = {
["name"] = "FA-18C_hornet",
["payloads"] = {
[1] = {
["name"] = "AIM-9M*6, AIM-7M*2, FUEL*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[5] = {
["CLSID"] = "LAU-115_2*LAU-127_AIM-9M",
["num"] = 2,
},
[6] = {
["CLSID"] = "LAU-115_2*LAU-127_AIM-9M",
["num"] = 8,
},
[7] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 5,
},
[9] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 11,
},
},
[2] = {
["name"] = "AIM-9M*6, AIM-7M*2, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "LAU-115_2*LAU-127_AIM-9M",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[5] = {
["CLSID"] = "LAU-115_2*LAU-127_AIM-9M",
["num"] = 8,
},
[6] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[8] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 19,
},
},
[3] = {
["name"] = "AIM-9M*2, MK-84*2, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[4] = {
["name"] = "AIM-9M*2, MK-83*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2X_MK-83}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2X_MK-83}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "Carrier Landing",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
},
["tasks"] = {
},
},
[6] = {
["name"] = "AIM-9M*2, AIM-7M*4, FUEL*3",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{LAU-115 - AIM-7M}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{LAU-115 - AIM-7M}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[9] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 11,
},
},
[7] = {
["name"] = "AIM-9M*2, CBU-99*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2X_CBU-99}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2X_CBU-99}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 31,
},
},
[8] = {
["name"] = "AIM-9M*2, MK-82SE*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2X_MK-82_Snakeye}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2X_MK-82_Snakeye}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 31,
},
},
[9] = {
["name"] = "AIM-9M*2, MK-20*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2X_ROCKEYE}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2X_ROCKEYE}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 31,
},
},
[10] = {
["name"] = "AIM-9M*2, MK-82*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2X_MK-82}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2X_MK-82}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 31,
},
},
[11] = {
["name"] = "AIM-9M*2, AIM-7M*2, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 18,
},
},
[12] = {
["name"] = "AIM-9M*2, MK-83*2, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[13] = {
["name"] = "AIM-9M*2, ZUNI*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2*LAU10}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2*LAU10}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[14] = {
["name"] = "AIM-9M*2, LAU-61*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2*LAU61}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2*LAU61}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[15] = {
["name"] = "AIM-9M*2, LAU-68*4, FUEL*2",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BRU33_2*LAU68_MK5}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{BRU33_2*LAU68_MK5}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[16] = {
["name"] = "AIM-9M*2, AIM-7M*2, FUEL*1",
["pylons"] = {
[1] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{FPU_8A_FUEL_TANK}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 10,
},
},
},
["unitType"] = "FA-18C_hornet",
}
return unitPayloads

View File

@@ -1,7 +0,0 @@
local unitPayloads = {
["name"] = "Ka-27",
["payloads"] = {
},
["unitType"] = "Ka-27",
}
return unitPayloads

View File

@@ -1,864 +0,0 @@
local unitPayloads = {
["name"] = "Ka-50",
["payloads"] = {
[1] = {
["category"] = "CAS",
["name"] = "4xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[2] = {
["category"] = "Deep strike",
["name"] = "2xFuel tank, 2xKMGU AP",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[3] = {
["name"] = "80xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 1,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[4] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[4] = {
["category"] = "Deep strike",
["name"] = "2xFuel tank, 40xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[5] = {
["category"] = "CAS",
["name"] = "80xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[6] = {
["category"] = "CAS",
["name"] = "4xKMGU AT",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[7] = {
["name"] = "2xKMGU AP",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[8] = {
["category"] = "Deep strike",
["name"] = "2xFuel tank, 12x9A4172",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[9] = {
["category"] = "Deep strike",
["name"] = "2xFuel tank, 2xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[10] = {
["category"] = "Anti Tank",
["name"] = "12x9A4172, 40xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[11] = {
["category"] = "Anti Tank",
["name"] = "12x9A4172, 2xKMGU AT",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[12] = {
["category"] = "CAS",
["name"] = "4xKMGU AP",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[13] = {
["category"] = "Deep strike",
["name"] = "2xFAB-250, 2xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[14] = {
["name"] = "12x9A4172, 2xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[15] = {
["category"] = "CAS",
["name"] = "20xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[16] = {
["category"] = "Weight-reduced",
["name"] = "40xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[17] = {
["category"] = "Anti Tank",
["name"] = "12x9A4172, 2xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[18] = {
["name"] = "2xKMGU AT",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[19] = {
["category"] = "Weight-reduced",
["name"] = "6x9A4172",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[20] = {
["category"] = "Deep strike",
["name"] = "2xFuel tank, 2xKMGU AT",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[21] = {
["category"] = "Ferry",
["name"] = "4xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 15,
},
},
[22] = {
["name"] = "2xKMGU AP, 12x9A4172",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[23] = {
["category"] = "Weight-reduced",
["name"] = "12x9A4172",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[24] = {
["category"] = "Ferry",
["name"] = "2xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 15,
},
},
[25] = {
["name"] = "40xS-8 TsM, 12x9A4172",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[26] = {
["name"] = "2xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[27] = {
["name"] = "40xS-8 TsM, 2xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[28] = {
["category"] = "CAS",
["name"] = "4xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[29] = {
["category"] = "Weight-reduced",
["name"] = "10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[30] = {
["name"] = "40xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
},
["tasks"] = {
[1] = 16,
},
},
[31] = {
["category"] = "Anti Tank",
["name"] = "12x9A4172, 10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
[4] = 30,
},
},
[32] = {
["category"] = "Deep strike",
["name"] = "2xFuel tank, 2xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[33] = {
["name"] = "2xFAB-250",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[34] = {
["category"] = "CAS",
["name"] = "4xFAB-250",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[35] = {
["category"] = "Deep strike",
["name"] = "2xFuel tank, 10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[36] = {
["name"] = "2xFAB-250, 12x9A4172",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[37] = {
["category"] = "Weight-reduced",
["name"] = "2xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
},
["unitType"] = "Ka-50",
}
return unitPayloads

View File

@@ -1,223 +0,0 @@
local unitPayloads = {
["name"] = "Ka-52",
["payloads"] = {
[1] = {
["name"] = "APU-6 Vikhr-M*2, Kh-25ML*2",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6DADF342-D4BA-4D8A-B081-BA928C4AF86D}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6DADF342-D4BA-4D8A-B081-BA928C4AF86D}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 33,
[4] = 18,
},
},
[2] = {
["name"] = "APU-6 Vikhr-M*2",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 33,
[4] = 18,
},
},
[3] = {
["name"] = "B-8*4",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 33,
[4] = 18,
},
},
[4] = {
["name"] = "KMGU-2 (AO-2.5RT)*4",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[5] = {
["name"] = "B-8*2, APU-6 Vikhr-M*2",
["pylons"] = {
[1] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{A6FD14D3-6D30-4C85-88A7-8D17BEE120E2}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 33,
[4] = 18,
},
},
[6] = {
["name"] = "FAB-500*2",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[7] = {
["name"] = "UB-13*2",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 33,
[4] = 18,
},
},
[8] = {
["name"] = "FAB-250*4",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[9] = {
["name"] = "Kh-25ML*2, R-73*2",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6DADF342-D4BA-4D8A-B081-BA928C4AF86D}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6DADF342-D4BA-4D8A-B081-BA928C4AF86D}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 33,
[4] = 18,
},
},
},
["unitType"] = "Ka-52",
}
return unitPayloads

View File

@@ -1,107 +0,0 @@
local unitPayloads = {
["name"] = "L-39C",
["payloads"] = {
[1] = {
["name"] = "SAB-100x2",
["pylons"] = {
[1] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 16,
},
},
[2] = {
["name"] = "R-3Sx2",
["pylons"] = {
[1] = {
["CLSID"] = "{R-3S}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{R-3S}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[3] = {
["name"] = "Smokes",
["pylons"] = {
[1] = {
["CLSID"] = "{D3F65166-1AB8-490f-AF2F-2FB6E22568B4}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{D3F65166-1AB8-490f-AF2F-2FB6E22568B1}",
["num"] = 1,
},
},
["tasks"] = {
},
},
[4] = {
["name"] = "Central Smoke",
["pylons"] = {
[1] = {
["CLSID"] = "{INV-SMOKE-WHITE}",
["num"] = 2,
},
},
["tasks"] = {
},
},
[5] = {
["name"] = "FAB-100x2",
["pylons"] = {
[1] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
[2] = 30,
[3] = 32,
[4] = 34,
},
},
[6] = {
["name"] = "S-5KOx32",
["pylons"] = {
[1] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
[2] = 30,
[3] = 32,
[4] = 34,
},
},
},
["tasks"] = {
},
["unitType"] = "L-39C",
}
return unitPayloads

View File

@@ -1,425 +0,0 @@
local unitPayloads = {
["name"] = "L-39ZA",
["payloads"] = {
[1] = {
["name"] = "S-5KOx32",
["pylons"] = {
[1] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[2] = {
["name"] = "S-5KOx64",
["pylons"] = {
[1] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[3] = {
["name"] = "S-5KOx32, PTB-150x2",
["pylons"] = {
[1] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PTB_150L_L39}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_150L_L39}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[4] = {
["name"] = "S-5KOx32, PTB-350x2",
["pylons"] = {
[1] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PTB_350L_L39}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_350L_L39}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[5] = {
["name"] = "S-5KOx32, FAB-100x2",
["pylons"] = {
[1] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{UB-16-57UMP}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[6] = {
["name"] = "OFAB-100 Jupiter x4, FAB-100x2",
["pylons"] = {
[1] = {
["CLSID"] = "{FAB-100x2}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{FAB-100x2}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 34,
},
},
[7] = {
["name"] = "FAB-100x2",
["pylons"] = {
[1] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 30,
[2] = 31,
[3] = 32,
},
},
[8] = {
["name"] = "FAB-100x4",
["pylons"] = {
[1] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 30,
[2] = 31,
[3] = 32,
[4] = 34,
},
},
[9] = {
["name"] = "OFAB-100 Jupiter x8",
["pylons"] = {
[1] = {
["CLSID"] = "{FAB-100x2}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{FAB-100x2}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{FAB-100x2}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{FAB-100x2}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 34,
},
},
[10] = {
["name"] = "FAB-100x2, PTB-150x2",
["pylons"] = {
[1] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PTB_150L_L39}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_150L_L39}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 30,
[2] = 31,
[3] = 32,
},
},
[11] = {
["name"] = "FAB-100x2, PTB-350x2",
["pylons"] = {
[1] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PTB_350L_L39}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_350L_L39}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 30,
[2] = 31,
[3] = 32,
},
},
[12] = {
["name"] = "PK-3x4",
["pylons"] = {
[1] = {
["CLSID"] = "{PK-3}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{PK-3}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PK-3}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PK-3}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
},
},
[13] = {
["name"] = "PK-3x2, PTB-150x2",
["pylons"] = {
[1] = {
["CLSID"] = "{PK-3}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{PK-3}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PTB_150L_L39}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_150L_L39}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
},
},
[14] = {
["name"] = "R-60Mx2",
["pylons"] = {
[1] = {
["CLSID"] = "{APU-60-1_R_60M}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{APU-60-1_R_60M}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[15] = {
["name"] = "SAB-100x4",
["pylons"] = {
[1] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 16,
},
},
[16] = {
["name"] = "R-3Sx2",
["pylons"] = {
[1] = {
["CLSID"] = "{R-3S}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{R-3S}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[17] = {
["name"] = "R-3Sx2, PK-3x2",
["pylons"] = {
[1] = {
["CLSID"] = "{R-3S}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{R-3S}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PK-3}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PK-3}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 11,
},
},
[18] = {
["name"] = "R-60Mx2, PK-3x2",
["pylons"] = {
[1] = {
["CLSID"] = "{APU-60-1_R_60M}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{APU-60-1_R_60M}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{PK-3}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PK-3}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 11,
},
},
},
["unitType"] = "L-39ZA",
}
return unitPayloads

View File

@@ -1,732 +0,0 @@
local unitPayloads = {
["name"] = "M-2000C",
["payloads"] = {
[1] = {
["name"] = "Ferry",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_08_RPL541}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{M2KC_02_RPL541}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[2] = {
["name"] = "Combat Air Patrol",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[3] = {
["name"] = "BLG-66 Heavy Strike",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_RAFAUT_BLG66}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{M2KC_RAFAUT_BLG66}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[10] = {
["CLSID"] = "{Eclair}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
},
},
[4] = {
["name"] = "BLG-66 Long Range",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_08_RPL541}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{M2KC_02_RPL541}",
["num"] = 2,
},
[8] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[9] = {
["CLSID"] = "{Eclair}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "MK-82 Heavy Strike",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_RAFAUT_MK82}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{M2KC_RAFAUT_MK82}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[6] = {
["name"] = "Scramble",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[7] = {
["name"] = "MK-82S Long Range",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_08_RPL541}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{M2KC_02_RPL541}",
["num"] = 2,
},
[8] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[8] = {
["name"] = "Matra Rocket Support",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{Matra155RocketPod}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{Matra155RocketPod}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{Eclair}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[9] = {
["name"] = "BLG-66 Support",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[10] = {
["CLSID"] = "{Eclair}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[10] = {
["name"] = "Bomb Truck GBU-12",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_08_RPL541}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{M2KC_RAFAUT_GBU12}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{M2KC_02_RPL541}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[11] = {
["name"] = "MK-82 Support",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
},
},
[12] = {
["name"] = "BLG-66 Heavy Support",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{M2KC_RAFAUT_BLG66}",
["num"] = 8,
},
[4] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BLG66_BELOUGA_AC}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{M2KC_RAFAUT_BLG66}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{Eclair}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[13] = {
["name"] = "MK-82 Heavy Load",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_RAFAUT_MK82}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{M2KC_RAFAUT_MK82}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[14] = {
["name"] = "MK-82 Long Range",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_08_RPL541}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{M2KC_02_RPL541}",
["num"] = 2,
},
[8] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[9] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 32,
},
},
[15] = {
["name"] = "Air Intercept",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
[16] = {
["name"] = "MK-82S Heavy Strike",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_RAFAUT_MK82S}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{M2KC_RAFAUT_MK82S}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[10] = {
["CLSID"] = "{Eclair}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 32,
},
},
[17] = {
["name"] = "MK-82 Heavy Support",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{M2KC_RAFAUT_MK82}",
["num"] = 8,
},
[4] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{M2KC_RAFAUT_MK82}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[18] = {
["name"] = "MK-82S Support",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{Mk82SNAKEYE}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{Matra_S530D}",
["num"] = 2,
},
[9] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
[10] = {
["CLSID"] = "{Eclair}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[19] = {
["name"] = "Light weight",
["pylons"] = {
[1] = {
["CLSID"] = "{MMagicII}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{M2KC_RPL_522}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{MMagicII}",
["num"] = 1,
},
},
["tasks"] = {
},
},
},
["tasks"] = {
},
["unitType"] = "M-2000C",
}
return unitPayloads

View File

@@ -1,736 +0,0 @@
local unitPayloads = {
["name"] = "Mi-24V",
["payloads"] = {
[1] = {
["name"] = "2xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[2] = {
["name"] = "10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[3] = {
["name"] = "2xFAB-250",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[4] = {
["name"] = "4x9M114, 2xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[5] = {
["name"] = "128xS-5",
["pylons"] = {
[1] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[6] = {
["name"] = "80xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
[4] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 5,
},
},
["tasks"] = {
[1] = 16,
},
},
[7] = {
["name"] = "4x9M114, 40xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
[4] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 16,
},
},
[8] = {
["name"] = "64xS-5",
["pylons"] = {
[1] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[9] = {
["name"] = "8x9M114",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[10] = {
["name"] = "4x9M114, 80xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
[4] = 30,
},
},
[11] = {
["name"] = "4x9M114, 128xS-5",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[12] = {
["name"] = "2xKMGU AP",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[13] = {
["name"] = "4xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 15,
},
},
[14] = {
["name"] = "4xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[15] = {
["name"] = "4x9M114, 10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
[4] = 30,
},
},
[16] = {
["name"] = "4x9M114, 80xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[4] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
[5] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 16,
},
},
[17] = {
["name"] = "4x9M114",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[18] = {
["name"] = "80xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[19] = {
["name"] = "40xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[20] = {
["name"] = "8x9M114, 40xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[4] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
[5] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 16,
},
},
[21] = {
["name"] = "8x9M114, 10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
[4] = 30,
},
},
[22] = {
["name"] = "2xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 15,
},
},
[23] = {
["name"] = "4x9M114, 4xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[24] = {
["name"] = "2xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[25] = {
["name"] = "8x9M114, 64xS-5",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[26] = {
["name"] = "8x9M114, 40xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[27] = {
["name"] = "20xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[28] = {
["name"] = "40xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[29] = {
["name"] = "8x9M114, 2xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{B919B0F4-7C25-455E-9A02-CEA51DB895E3}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
},
["unitType"] = "Mi-24V",
}
return unitPayloads

View File

@@ -1,7 +0,0 @@
local unitPayloads = {
["name"] = "Mi-26",
["payloads"] = {
},
["unitType"] = "Mi-26",
}
return unitPayloads

View File

@@ -1,615 +0,0 @@
local unitPayloads = {
["name"] = "Mi-28",
["payloads"] = {
[1] = {
["name"] = "2xFAB-250",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[2] = {
["name"] = "4xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 15,
},
},
[3] = {
["name"] = "80xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[4] = {
["name"] = "4xKMGU AP",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "4xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[6] = {
["name"] = "16x9M114, 10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
[4] = 30,
},
},
[7] = {
["name"] = "4xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[8] = {
["name"] = "16x9M114, 2xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[9] = {
["name"] = "40xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[10] = {
["name"] = "40xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
},
["tasks"] = {
[1] = 16,
},
},
[11] = {
["name"] = "2xKMGU AP",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[12] = {
["name"] = "2xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[13] = {
["name"] = "16x9M114, 2xUPK-23",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[14] = {
["name"] = "2xFAB-500",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[15] = {
["name"] = "16x9M114, 40xS-8",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
[4] = 30,
},
},
[16] = {
["name"] = "16x9M114",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[17] = {
["name"] = "20xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[18] = {
["name"] = "16x9M114, 2xKMGU AP",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74884}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[19] = {
["name"] = "4xFAB-250",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[20] = {
["name"] = "4xKMGU AT",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[21] = {
["name"] = "16x9M114, 40xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[22] = {
["name"] = "80xS-8 TsM",
["pylons"] = {
[1] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 1,
},
[2] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 2,
},
[3] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 3,
},
[4] = {
["CLSID"] = "B_8V20A_CM",
["num"] = 4,
},
},
["tasks"] = {
[1] = 16,
},
},
[23] = {
["name"] = "2xKMGU AT",
["pylons"] = {
[1] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[24] = {
["name"] = "9x9M114",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[25] = {
["name"] = "2xFuel tank",
["pylons"] = {
[1] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{B99EE8A8-99BC-4a8d-89AC-A26831920DCE}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 15,
},
},
[26] = {
["name"] = "10xS-13",
["pylons"] = {
[1] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{FC56DF80-9B09-44C5-8976-DCFAFF219062}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
[27] = {
["name"] = "2xFAB-250, 16x9M114",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[28] = {
["name"] = "16x9M114, 2xKMGU AT",
["pylons"] = {
[1] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{96A7F676-F956-404A-AD04-F33FB2C74881}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{57232979-8B0F-4db7-8D9A-55197E06B0F5}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
[3] = 18,
},
},
},
["unitType"] = "Mi-28N",
}
return unitPayloads

View File

@@ -1,193 +0,0 @@
local unitPayloads = {
["name"] = "Mi-8MT",
["payloads"] = {
[1] = {
["name"] = "4 x B8",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 32,
},
},
[2] = {
["name"] = "4 x B8 + 2GUV_AP-30 (GrL 30mm)",
["pylons"] = {
[1] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 2,
},
[5] = {
["CLSID"] = "GUV_VOG",
["num"] = 6,
},
[6] = {
["CLSID"] = "GUV_VOG",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[3] = {
["name"] = "2 x UPK +2 x B8",
["pylons"] = {
[1] = {
["CLSID"] = "GUV_YakB_GSHP",
["num"] = 5,
},
[2] = {
["CLSID"] = "GUV_YakB_GSHP",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 31,
},
},
[4] = {
["name"] = "2 xB8 + 2GUV_YaKB (MG-12.7+7.62)+ 2GUV_AP-30 (GrL 30mm)",
["pylons"] = {
[1] = {
["CLSID"] = "GUV_VOG",
["num"] = 6,
},
[2] = {
["CLSID"] = "GUV_VOG",
["num"] = 1,
},
[3] = {
["CLSID"] = "GUV_YakB_GSHP",
["num"] = 5,
},
[4] = {
["CLSID"] = "GUV_YakB_GSHP",
["num"] = 2,
},
[5] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "6 x FAB-100",
["pylons"] = {
[1] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 32,
},
},
[6] = {
["name"] = "2 x B8 + 2 x UPK-23-250",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6A4B9E69-64FE-439a-9163-3A87FB6A4D81}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[7] = {
["name"] = "2 x UPK--23-250",
["pylons"] = {
[1] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 32,
},
},
},
["tasks"] = {
},
["unitType"] = "Mi-8MT",
}
return unitPayloads

View File

@@ -1,91 +0,0 @@
local unitPayloads = {
["name"] = "MiG-15bis",
["payloads"] = {
[1] = {
["name"] = "2*FAB-50",
["pylons"] = {
[1] = {
["CLSID"] = "FAB_50",
["num"] = 1,
},
[2] = {
["CLSID"] = "FAB_50",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[2] = {
["name"] = "2*FAB-100M",
["pylons"] = {
[1] = {
["CLSID"] = "FAB_100M",
["num"] = 1,
},
[2] = {
["CLSID"] = "FAB_100M",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
[2] = 32,
},
},
[3] = {
["name"] = "2*300L",
["pylons"] = {
[1] = {
["CLSID"] = "PTB300_MIG15",
["num"] = 1,
},
[2] = {
["CLSID"] = "PTB300_MIG15",
["num"] = 2,
},
},
["tasks"] = {
[1] = 11,
},
},
[4] = {
["name"] = "2*400L",
["pylons"] = {
[1] = {
["CLSID"] = "PTB400_MIG15",
["num"] = 1,
},
[2] = {
["CLSID"] = "PTB400_MIG15",
["num"] = 2,
},
},
["tasks"] = {
[1] = 11,
},
},
[5] = {
["name"] = "2*600L",
["pylons"] = {
[1] = {
["CLSID"] = "PTB600_MIG15",
["num"] = 1,
},
[2] = {
["CLSID"] = "PTB600_MIG15",
["num"] = 2,
},
},
["tasks"] = {
[1] = 11,
},
},
},
["tasks"] = {
},
["unitType"] = "MiG-15bis",
}
return unitPayloads

View File

@@ -1,846 +0,0 @@
local unitPayloads = {
["name"] = "MiG-21Bis",
["payloads"] = {
[1] = {
["name"] = "Patrol, long range",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{R-3R}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{R-3S}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{R-3S}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 11,
},
},
[2] = {
["name"] = "Patrol, medium range",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{R-3R}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{R-60 2L}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{R-60 2R}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 11,
},
},
[3] = {
["name"] = "Patrol, short range",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_490C_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{R-3R}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{R-60 2L}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{R-60 2R}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 11,
},
},
[4] = {
["name"] = "Hard targets, BOMBS",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[5] = {
["name"] = "Unknown or mixed targets, BOMBS + ROCKETS",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{UB-32_S5M}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{UB-32_S5M}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[6] = {
["name"] = "Soft targets, CLUSTERS + ROCKETS",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{UB-32_S5M}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{UB-32_S5M}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[7] = {
["name"] = "Soft targets, CLUSTERS",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[8] = {
["name"] = "Soft targets, scattered",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
--["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["CLSID"] = "{UPK-23-250 MiG-21}",
["num"] = 2,
},
[3] = {
--["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["CLSID"] = "{UPK-23-250 MiG-21}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[9] = {
["name"] = "Few big targets, GROM + BOMBS",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{Kh-66_Grom}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{Kh-66_Grom}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[10] = {
["name"] = "Very hard target, PENETRATION",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{FB3CE165-BF07-4979-887C-92B87F13276B}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 32,
},
},
[11] = {
["name"] = "Aerial attack, hard targets, CLUSTERS",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
},
["tasks"] = {
[1] = 32,
},
},
[12] = {
["name"] = "Hard targets, ROCKETS, PENETRATION",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{S-24A}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{S-24A}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{S-24A}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{S-24A}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[13] = {
["name"] = "Soft targets, ROCKETS, BLAST-FRAGMENTS",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{S-24B}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{S-24B}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{S-24B}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{S-24B}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[14] = {
["name"] = "Long range, MIX",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_490C_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{R-3S}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[15] = {
["name"] = "Long range, RADAR GUIDED MISSILES",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_490C_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{R-3R}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 10,
},
},
[16] = {
["name"] = "Long range, INFRA RED MISSILES",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_490C_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{R-3S}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{R-3S}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[17] = {
["name"] = "Escort",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{R-3R}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{R-3S}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{R-3S}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 18,
},
},
[18] = {
["name"] = "Escort, JAMMER",
["pylons"] = {
[1] = {
["CLSID"] = "{SPS-141-100}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{R-3S}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 18,
},
},
[19] = {
["name"] = "Night, ILLUMINATOR",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 1,
},
[4] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{0511E528-EA28-4caf-A212-00D1408DF10A}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
},
},
[20] = {
["name"] = "Long range, JAMMER",
["pylons"] = {
[1] = {
["CLSID"] = "{SPS-141-100}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{R-3S}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[21] = {
["name"] = "Soft targets, UPK + ROCKETS",
["pylons"] = {
[1] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[3] = {
--["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["CLSID"] = "{UPK-23-250 MiG-21}",
["num"] = 2,
},
[4] = {
--["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["CLSID"] = "{UPK-23-250 MiG-21}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{UB-16_S5M}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{UB-16_S5M}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[22] = {
["name"] = "Soft targets, UPK + CLUSTERS",
["pylons"] = {
[1] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 1,
},
[2] = {
--["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["CLSID"] = "{UPK-23-250 MiG-21}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[4] = {
--["CLSID"] = "{05544F1A-C39C-466b-BC37-5BD1D52E57BB}",
["CLSID"] = "{UPK-23-250 MiG-21}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[23] = {
["name"] = "Patrol, JAMMER",
["pylons"] = {
[1] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{R-3S}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{SPS-141-100}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 11,
},
},
[24] = {
["name"] = "NUCLEAR A",
["pylons"] = {
[1] = {
["CLSID"] = "{RN-24}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{R-3S}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 32,
},
},
[25] = {
["name"] = "NUCLEAR B",
["pylons"] = {
[1] = {
["CLSID"] = "{RN-28}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{PTB_490_MIG21}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{R-3S}",
["num"] = 4,
},
[6] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 32,
},
},
[26] = {
["name"] = "Short range",
["pylons"] = {
[1] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{R-3R}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{R-3R}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{R-3S}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{R-3S}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{ASO-2}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 10,
},
},
[27] = {
["name"] = "AEROBATIC",
["pylons"] = {
[1] = {
["CLSID"] = "{SMOKE_WHITE}",
["num"] = 7,
},
},
["tasks"] = {
},
},
},
["tasks"] = {
},
["unitType"] = "MiG-21Bis",
}
return unitPayloads

View File

@@ -1,321 +0,0 @@
local unitPayloads = {
["name"] = "MiG-23MLD",
["payloads"] = {
[1] = {
["name"] = "R-60M*4",
["pylons"] = {
[1] = {
["CLSID"] = "{B0DBC591-0F52-4F7D-AD7B-51E67725FB81}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{275A2855-4A79-4B2D-B082-91EA2ADF4691}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[2] = {
["name"] = "B-8*2,R-60M*2,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[3] = {
["name"] = "UB-32*2,R-60M*2,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[4] = {
["name"] = "R-24R*2,R-60M*4,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{CCF898C9-5BC7-49A4-9D1E-C3ED3D5166A1}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{B0DBC591-0F52-4F7D-AD7B-51E67725FB81}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{275A2855-4A79-4B2D-B082-91EA2ADF4691}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{CCF898C9-5BC7-49A4-9D1E-C3ED3D5166A1}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[5] = {
["name"] = "R-24R,R-24T,R-60M*4,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{6980735A-44CC-4BB9-A1B5-591532F1DC69}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{B0DBC591-0F52-4F7D-AD7B-51E67725FB81}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{275A2855-4A79-4B2D-B082-91EA2ADF4691}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{CCF898C9-5BC7-49A4-9D1E-C3ED3D5166A1}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[6] = {
["name"] = "R-60M*4,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{B0DBC591-0F52-4F7D-AD7B-51E67725FB81}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{275A2855-4A79-4B2D-B082-91EA2ADF4691}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 18,
[2] = 19,
[3] = 11,
},
},
[7] = {
["name"] = "FAB-500*2,R-60M*2,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[8] = {
["name"] = "R-24R*2,R-60M*4",
["pylons"] = {
[1] = {
["CLSID"] = "{CCF898C9-5BC7-49A4-9D1E-C3ED3D5166A1}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{B0DBC591-0F52-4F7D-AD7B-51E67725FB81}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{275A2855-4A79-4B2D-B082-91EA2ADF4691}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{CCF898C9-5BC7-49A4-9D1E-C3ED3D5166A1}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 10,
},
},
[9] = {
["name"] = "FAB-250*2,R-60M*2,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 32,
},
},
[10] = {
["name"] = "RBK-250*2,R-60M*2,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[11] = {
["name"] = "RBK-500*2,R-60M*2,Fuel-800",
["pylons"] = {
[1] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[12] = {
["name"] = "R-24R,R-24T,R-60M*4",
["pylons"] = {
[1] = {
["CLSID"] = "{6980735A-44CC-4BB9-A1B5-591532F1DC69}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{B0DBC591-0F52-4F7D-AD7B-51E67725FB81}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{275A2855-4A79-4B2D-B082-91EA2ADF4691}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{CCF898C9-5BC7-49A4-9D1E-C3ED3D5166A1}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 10,
},
},
},
["unitType"] = "MiG-23MLD",
}
return unitPayloads

View File

@@ -1,88 +0,0 @@
local unitPayloads = {
["name"] = "MiG-25PD",
["payloads"] = {
[1] = {
["name"] = "R-40R*2,R-40T*2",
["pylons"] = {
[1] = {
["CLSID"] = "{5F26DBC2-FB43-4153-92DE-6BBCE26CB0FF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{5F26DBC2-FB43-4153-92DE-6BBCE26CB0FF}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
[2] = {
["name"] = "R-40R*4",
["pylons"] = {
[1] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
[3] = {
["name"] = "R-40R*2,R-60M*2",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
},
["unitType"] = "MiG-25PD",
}
return unitPayloads

View File

@@ -1,47 +0,0 @@
local unitPayloads = {
["name"] = "MiG-25RBT",
["payloads"] = {
[1] = {
["name"] = "FAB-500x2_60x2",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
[2] = {
["name"] = "R-60M*2",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 17,
},
},
},
["unitType"] = "MiG-25RBT",
}
return unitPayloads

View File

@@ -1,419 +0,0 @@
local unitPayloads = {
["name"] = "MiG-27K",
["payloads"] = {
[1] = {
["name"] = "FAB-250*6,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{E659C4BE-2CD8-4472-8C08-3F28ACB61A8A}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{E659C4BE-2CD8-4472-8C08-3F28ACB61A8A}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[2] = {
["name"] = "BetAB-500ShP*2,FAB-250*2,R-60*2",
["pylons"] = {
[1] = {
["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 6,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 34,
},
},
[3] = {
["name"] = "Kh-25MR*2,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{292960BB-6518-41AC-BADA-210D65D5073C}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{292960BB-6518-41AC-BADA-210D65D5073C}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 31,
},
},
[4] = {
["name"] = "Kh-29L*2,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{D4A8D9B9-5C45-42e7-BBD2-0E54F8308432}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{D4A8D9B9-5C45-42e7-BBD2-0E54F8308432}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 33,
},
},
[5] = {
["name"] = "B-8*4",
["pylons"] = {
[1] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[6] = {
["name"] = "BetAB-500*2,FAB-500*2,R-60*2",
["pylons"] = {
[1] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[6] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 34,
},
},
[7] = {
["name"] = "Kh-25MPU*2,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{752AF1D2-EBCC-4bd7-A1E7-2357F5601C70}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{752AF1D2-EBCC-4bd7-A1E7-2357F5601C70}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 29,
},
},
[8] = {
["name"] = "Kh-29T*2,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{601C99F7-9AF3-4ed7-A565-F8B8EC0D7AAC}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{601C99F7-9AF3-4ed7-A565-F8B8EC0D7AAC}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 33,
},
},
[9] = {
["name"] = "FAB-500*2,FAB-250*2,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[10] = {
["name"] = "Kh-25ML*2,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{79D73885-0801-45a9-917F-C90FE1CE3DFC}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{79D73885-0801-45a9-917F-C90FE1CE3DFC}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 31,
},
},
[11] = {
["name"] = "KAB-500*2,R-60M*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{BA565F89-2373-4A84-9502-A0E017D3A44A}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[5] = {
["CLSID"] = "{BA565F89-2373-4A84-9502-A0E017D3A44A}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 33,
},
},
[12] = {
["name"] = "RBK-500AO*2,RBK-250*2,R-60M*2",
["pylons"] = {
[1] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 31,
},
},
[13] = {
["name"] = "UB-32*4",
["pylons"] = {
[1] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 3,
},
[3] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 7,
},
[4] = {
["CLSID"] = "{637334E4-AB5A-47C0-83A6-51B7F1DF3CD5}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 32,
},
},
[14] = {
["name"] = "Kh-29L*2,R-60*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{D4A8D9B9-5C45-42e7-BBD2-0E54F8308432}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{A5BAEAB7-6FAF-4236-AF72-0FD900F493F9}",
["num"] = 5,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{D4A8D9B9-5C45-42e7-BBD2-0E54F8308432}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 30,
},
},
},
["unitType"] = "MiG-27K",
}
return unitPayloads

View File

@@ -1,665 +0,0 @@
local unitPayloads = {
["name"] = "MiG-29A",
["payloads"] = {
[1] = {
["name"] = "Fuel-1150*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{C0FF4842-FBAC-11d5-9190-00A0249B6F00}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{C0FF4842-FBAC-11d5-9190-00A0249B6F00}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 16,
},
},
[2] = {
["name"] = "RBK-500AO*4,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{D5435F26-F120-4FA3-9867-34ACE562EF1B}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 31,
},
},
[3] = {
["name"] = "FAB-250*4,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{3C612111-C7AD-476E-8A8E-2485812F4E5C}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 32,
},
},
[4] = {
["name"] = "B-8*4,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{F72F47E5-C83A-4B85-96ED-D3E46671EE9A}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 32,
},
},
[5] = {
["name"] = "R-60M*4,R-27R*2",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[6] = {
["name"] = "R-73*4,R-27R*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 19,
[2] = 11,
[3] = 18,
},
},
[7] = {
["name"] = "R-73*6,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 19,
[2] = 11,
[3] = 18,
},
},
[8] = {
["name"] = "R-60M*6,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 19,
[2] = 11,
[3] = 18,
},
},
[9] = {
["name"] = "S-24*4,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 32,
},
},
[10] = {
["name"] = "FAB-500*4,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 32,
},
},
[11] = {
["name"] = "R-60M*6",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[12] = {
["name"] = "BetAB-500*4,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{35B698AC-9FEF-4EC4-AD29-484A0085F62B}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 34,
},
},
[13] = {
["name"] = "R-73*6",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[14] = {
["name"] = "R-73*2,R-60M*2,R-27R*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 19,
[2] = 11,
[3] = 18,
},
},
[15] = {
["name"] = "R-60M*4,R-27R*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 19,
[2] = 11,
[3] = 18,
},
},
[16] = {
["name"] = "RBK-250*4,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{4203753F-8198-4E85-9924-6F8FF679F9FF}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 31,
},
},
[17] = {
["name"] = "R-73*4,R-27R*2",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[18] = {
["name"] = "R-73*2,R-60M*2,R-27R*2",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[19] = {
["name"] = "S-24*2,FAB-500*2,R-73*2,Fuel",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 30,
},
},
},
["unitType"] = "MiG-29A",
}
return unitPayloads

View File

@@ -1,377 +0,0 @@
local unitPayloads = {
["name"] = "MiG-29G",
["payloads"] = {
[1] = {
["name"] = "R-73*6,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 18,
[2] = 11,
[3] = 19,
},
},
[2] = {
["name"] = "R-73*4,R-27R*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 18,
[2] = 11,
[3] = 19,
},
},
[3] = {
["name"] = "R-73*2,R-60M*2,R-27R*2",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[4] = {
["name"] = "R-60M*4,R-27R*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 18,
[2] = 11,
[3] = 19,
},
},
[5] = {
["name"] = "R-73*6",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[6] = {
["name"] = "R-60M*4,R-27R*2",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[7] = {
["name"] = "R-73*4,R-27R*2",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[8] = {
["name"] = "Fuel-1150*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{C0FF4842-FBAC-11d5-9190-00A0249B6F00}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{C0FF4842-FBAC-11d5-9190-00A0249B6F00}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 16,
},
},
[9] = {
["name"] = "R-60M*6",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 10,
},
},
[10] = {
["name"] = "R-60M*6,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 18,
[2] = 11,
[3] = 19,
},
},
[11] = {
["name"] = "R-73*2,R-60M*2,R-27R*2,Fuel-1500",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{2BEC576B-CDF5-4B7F-961F-B0FA4312B841}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 18,
[2] = 11,
[3] = 19,
},
},
},
["unitType"] = "MiG-29G",
}
return unitPayloads

Some files were not shown because too many files have changed in this diff Show More