mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Compare commits
74 Commits
develop-8.
...
develop-5.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2eb98bcc5 | ||
|
|
475cb4851a | ||
|
|
24e904134e | ||
|
|
365eaa98f7 | ||
|
|
e070d5bf0d | ||
|
|
ffd8152b36 | ||
|
|
11812f07fc | ||
|
|
ba4de3dc27 | ||
|
|
208382f3c4 | ||
|
|
aadb2dd54d | ||
|
|
1b2eb1236f | ||
|
|
00bdbf65ce | ||
|
|
290646c8ae | ||
|
|
8f58832527 | ||
|
|
f426a16e9d | ||
|
|
6f4e436305 | ||
|
|
08288c9da9 | ||
|
|
9bfac347db | ||
|
|
22a35b0d2e | ||
|
|
e56d8de800 | ||
|
|
c806980ab8 | ||
|
|
4750fff114 | ||
|
|
b405b8e7ee | ||
|
|
074ae328ee | ||
|
|
5fd6ccb81d | ||
|
|
64d273b433 | ||
|
|
d7f833ecfb | ||
|
|
5d89b9ac25 | ||
|
|
056851765f | ||
|
|
54bf9357bf | ||
|
|
dfcc458479 | ||
|
|
f3f0e23eff | ||
|
|
5ce6de6645 | ||
|
|
50b4d420fe | ||
|
|
224c78ac11 | ||
|
|
227b054279 | ||
|
|
0093fa0fe1 | ||
|
|
3cdfd9d7d2 | ||
|
|
5e2e07da80 | ||
|
|
5f3f6f8c9f | ||
|
|
0077b04698 | ||
|
|
bb1e314260 | ||
|
|
d710c2631a | ||
|
|
7278878266 | ||
|
|
ec8391bbfb | ||
|
|
74504173c7 | ||
|
|
792c7c5091 | ||
|
|
b7e9a4a243 | ||
|
|
bdbb338e83 | ||
|
|
98fa70c73d | ||
|
|
7991e0157d | ||
|
|
21643c500f | ||
|
|
b4ddfb9dfd | ||
|
|
d1e50a5bbe | ||
|
|
a188f7b7e5 | ||
|
|
4f76b73de2 | ||
|
|
a4b09bc973 | ||
|
|
a792c73cae | ||
|
|
113380661c | ||
|
|
3ab9b25b08 | ||
|
|
29d4ca38f9 | ||
|
|
6a3ff8d6ac | ||
|
|
c1f194b3d5 | ||
|
|
a6809e0103 | ||
|
|
a559aa8646 | ||
|
|
c766322960 | ||
|
|
c7581568c2 | ||
|
|
f0827a429e | ||
|
|
c2ee44d8bb | ||
|
|
af362be3a2 | ||
|
|
80c8563d67 | ||
|
|
f44654f66e | ||
|
|
ca7f61c938 | ||
|
|
10ccada17a |
34
changelog.md
34
changelog.md
@@ -1,3 +1,25 @@
|
||||
# 5.1.0
|
||||
|
||||
Saves from 5.0.0 are compatible with 5.1.0
|
||||
|
||||
## Features/Improvements
|
||||
|
||||
* **[Engine]** Support for DCS 2.7.9.17830 and newer, including the HTS and ECM pod.
|
||||
* **[Campaign]** Add option to manually add and remove squadrons and different aircraft type in the new game wizard / air wing configuration dialog.
|
||||
* **[Mission Generation]** Add Option to enforce the Easy Communication setting for the mission
|
||||
* **[Mission Generation]** Add Option to select between only night missions, day missions or any time (default).
|
||||
* **[Modding]** Add F-104 mod support
|
||||
|
||||
## Fixes
|
||||
|
||||
* **[Campaign]** Fixed some minor issues in campaigns which generated error messages in the log.
|
||||
* **[Campaign]** Changed the way how map object / scenery kills where tracked. This fixes issues with kill recognition after map updates from ED which change the object ids and therefore prevent correct kill recognition.
|
||||
* **[Mission Generation]** Fixed incorrect radio specification for the AN/ARC-222.
|
||||
* **[Mission Generation]** Fixed mission scripting error when using a dedicated server.
|
||||
* **[Mission Generation]** Fixed an issue where empty convoys lead to an index error when a point capture made a pending transfer of units not completable anymore.
|
||||
* **[Mission Generation]** Corrected Viggen FR22 & FR24 preset channels for the DCS 2.7.9 update
|
||||
* **[UI]** Enable / Disable the settings, save and stats actions if no game is loaded to prevent an error as these functions can only be used on a valid game.
|
||||
|
||||
# 5.0.0
|
||||
|
||||
Saves from 4.x are not compatible with 5.0.
|
||||
@@ -11,14 +33,14 @@ Saves from 4.x are not compatible with 5.0.
|
||||
* **[Campaign]** Squadrons now have a home base and will not operate out of other bases. See https://github.com/dcs-liberation/dcs_liberation/issues/1145 for status.
|
||||
* **[Campaign]** Aircraft now belong to squadrons rather than bases to support squadron location transfers.
|
||||
* **[Campaign]** Skipped turns are no longer counted as defeats on front lines.
|
||||
* **[Campaign AI]** Overhauled campaign AI target prioritization. This currently only affects the ordering of DEAD missions.
|
||||
* **[Campaign AI]** Overhauled campaign AI target prioritization.
|
||||
* **[Campaign AI]** Player front line stances can now be automated. Improved stance selection for AI.
|
||||
* **[Campaign AI]** Reworked layout of hold, join, split, and ingress points. Should result in much shorter flight plans in general while still maintaining safe join/split/hold points.
|
||||
* **[Campaign AI]** Auto-planning mission range limits are now specified per-aircraft. On average this means that longer range missions will now be plannable. The limit only accounts for the direct distance to the target, not the path taken.
|
||||
* **[Campaign AI]** Transport aircraft will now be bought only if necessary at control points which can produce ground units and are capable to operate transport aircraft.
|
||||
* **[Campaign AI]** Aircraft will now only be automatically purchased or assigned at appropriate bases. Naval aircraft will default to only operating from carriers, Harriers will default to LHAs and shore bases, helicopters will operate from anywhere. This can be customized per-squadron.
|
||||
* **[Engine]** Support for DCS 2.7.7.14727 and newer, including support for F-16 CBU-105s, SA-5s, and the Forrestal.
|
||||
* **[Kneeboard]** Minimum required fuel estimates have been added to the kneeboard for aircraft with supporting data (currently only the Hornet).
|
||||
* **[Kneeboard]** Minimum required fuel estimates have been added to the kneeboard for aircraft with supporting data (currently only the Hornet and Viper).
|
||||
* **[Kneeboard]** QNH (pressure MSL) and temperature have been added to the kneeboard.
|
||||
* **[Mission Generation]** EWRs are now also headed towards the center of the conflict
|
||||
* **[Mission Generation]** FACs can now use FC3 compatible laser codes. Note that this setting is global, not per FAC.
|
||||
@@ -26,19 +48,23 @@ Saves from 4.x are not compatible with 5.0.
|
||||
* **[Modding]** Campaigns can now define a default start date.
|
||||
* **[Modding]** Campaigns now specify the squadrons that are present in the campaign, their roles, and their starting bases. Players can customize this at game start but the campaign will choose the defaults.
|
||||
* **[New Game Wizard]** Can now customize the player's air wing before campaign start to disable, relocate, or rename squadrons.
|
||||
* **[Plugins]** Updated SkynetIADS to 2.3.0 (adds SA-5 support).
|
||||
* **[Plugins]** Updated SkynetIADS to 2.4.0 (adds SA-5 support).
|
||||
* **[UI]** Sell Button for aircraft will be disabled if there are no units available to be sold or all are already assigned to a mission
|
||||
* **[UI]** Enemy aircraft inventory now viewable in the air wing menu.
|
||||
|
||||
## Fixes
|
||||
|
||||
* **[Campaign]** Naval control points will no longer claim ground objectives during campaign generation and prevent them from spawning.
|
||||
* **[Campaign]** Units aboard suck cargo ships will now have their losses tracked properly.
|
||||
* **[Campaign]** Units aboard sunk cargo ships will now have their losses tracked properly.
|
||||
* **[Mission Generation]** Mission results and other files will now be opened with enforced utf-8 encoding to prevent an issue where destroyed ground units were untracked because of special characters in their names.
|
||||
* **[Mission Generation]** Fixed generation of landing waypoints so that the AI obeys them.
|
||||
* **[Mission Generation]** AI carrier aircraft with a start time of T+0 will now start at T+1s to avoid traffic jams.
|
||||
* **[Mission Generation]** Fixed cases of unused aircraft not being spawned at airfields as soon as any airport filled up.
|
||||
* **[Mission Generation]** Fixed cases with multiple client flights of the same airframe all received the same preset channels.
|
||||
* **[Mission Generation]** F-14A is now generated with stored alignment.
|
||||
* **[Mission Generation]** Su-33s set to cold or warm start on the Kuznetsov will always be generated as runway starts to avoid the AI getting stuck.
|
||||
* **[Mission Generation]** Fixed AI not receiving anti-ship tasks against carriers and LHAs.
|
||||
* **[Mods]** Fixed broken A-4 support causing no weapons to be available.
|
||||
* **[UI]** Selling of Units is now visible again in the UI dialog and shows the correct amount of sold units
|
||||
* **[UI]** Fixed bug where an incompatible campaign could be generated if no action is taken on the campaign selection screen.
|
||||
|
||||
|
||||
@@ -5,10 +5,8 @@ from typing import Optional, TYPE_CHECKING
|
||||
|
||||
from game.squadrons import Squadron
|
||||
from game.squadrons.squadrondef import SquadronDef
|
||||
from game.squadrons.squadrondefloader import SquadronDefLoader
|
||||
from gen.flights.flight import FlightType
|
||||
from .campaignairwingconfig import CampaignAirWingConfig, SquadronConfig
|
||||
from .squadrondefgenerator import SquadronDefGenerator
|
||||
from ..dcs.aircrafttype import AircraftType
|
||||
from ..theater import ControlPoint
|
||||
|
||||
@@ -25,14 +23,6 @@ class DefaultSquadronAssigner:
|
||||
self.game = game
|
||||
self.coalition = coalition
|
||||
self.air_wing = coalition.air_wing
|
||||
self.squadron_defs = SquadronDefLoader(game, coalition).load()
|
||||
self.squadron_def_generator = SquadronDefGenerator(self.coalition)
|
||||
|
||||
def claim_squadron_def(self, squadron: SquadronDef) -> None:
|
||||
try:
|
||||
self.squadron_defs[squadron.aircraft].remove(squadron)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
def assign(self) -> None:
|
||||
for control_point in self.game.theater.control_points_for(
|
||||
@@ -47,7 +37,6 @@ class DefaultSquadronAssigner:
|
||||
)
|
||||
continue
|
||||
|
||||
self.claim_squadron_def(squadron_def)
|
||||
squadron = Squadron.create_from(
|
||||
squadron_def, control_point, self.coalition, self.game
|
||||
)
|
||||
@@ -74,7 +63,7 @@ class DefaultSquadronAssigner:
|
||||
|
||||
# If we can't find any squadron matching the requirement, we should
|
||||
# create one.
|
||||
return self.squadron_def_generator.generate_for_task(
|
||||
return self.air_wing.squadron_def_generator.generate_for_task(
|
||||
config.primary, control_point
|
||||
)
|
||||
|
||||
@@ -105,7 +94,7 @@ class DefaultSquadronAssigner:
|
||||
|
||||
# No premade squadron available for this aircraft that meets the requirements,
|
||||
# so generate one if possible.
|
||||
return self.squadron_def_generator.generate_for_aircraft(aircraft)
|
||||
return self.air_wing.squadron_def_generator.generate_for_aircraft(aircraft)
|
||||
|
||||
@staticmethod
|
||||
def squadron_compatible_with(
|
||||
@@ -121,18 +110,24 @@ class DefaultSquadronAssigner:
|
||||
def find_squadron_for_airframe(
|
||||
self, aircraft: AircraftType, task: FlightType, control_point: ControlPoint
|
||||
) -> Optional[SquadronDef]:
|
||||
for squadron in self.squadron_defs[aircraft]:
|
||||
if self.squadron_compatible_with(squadron, task, control_point):
|
||||
for squadron in self.air_wing.squadron_defs[aircraft]:
|
||||
if not squadron.claimed and self.squadron_compatible_with(
|
||||
squadron, task, control_point
|
||||
):
|
||||
return squadron
|
||||
return None
|
||||
|
||||
def find_squadron_by_name(
|
||||
self, name: str, task: FlightType, control_point: ControlPoint
|
||||
) -> Optional[SquadronDef]:
|
||||
for squadrons in self.squadron_defs.values():
|
||||
for squadrons in self.air_wing.squadron_defs.values():
|
||||
for squadron in squadrons:
|
||||
if squadron.name == name and self.squadron_compatible_with(
|
||||
squadron, task, control_point, ignore_base_preference=True
|
||||
if (
|
||||
not squadron.claimed
|
||||
and squadron.name == name
|
||||
and self.squadron_compatible_with(
|
||||
squadron, task, control_point, ignore_base_preference=True
|
||||
)
|
||||
):
|
||||
return squadron
|
||||
return None
|
||||
@@ -140,8 +135,10 @@ class DefaultSquadronAssigner:
|
||||
def find_squadron_for_task(
|
||||
self, task: FlightType, control_point: ControlPoint
|
||||
) -> Optional[SquadronDef]:
|
||||
for squadrons in self.squadron_defs.values():
|
||||
for squadrons in self.air_wing.squadron_defs.values():
|
||||
for squadron in squadrons:
|
||||
if self.squadron_compatible_with(squadron, task, control_point):
|
||||
if not squadron.claimed and self.squadron_compatible_with(
|
||||
squadron, task, control_point
|
||||
):
|
||||
return squadron
|
||||
return None
|
||||
|
||||
@@ -12,12 +12,12 @@ from gen.flights.ai_flight_planner_db import aircraft_for_task, tasks_for_aircra
|
||||
from gen.flights.flight import FlightType
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from game.coalition import Coalition
|
||||
from game.factions.faction import Faction
|
||||
|
||||
|
||||
class SquadronDefGenerator:
|
||||
def __init__(self, coalition: Coalition) -> None:
|
||||
self.coalition = coalition
|
||||
def __init__(self, faction: Faction) -> None:
|
||||
self.faction = faction
|
||||
self.count = itertools.count(1)
|
||||
self.used_nicknames: set[str] = set()
|
||||
|
||||
@@ -26,7 +26,7 @@ class SquadronDefGenerator:
|
||||
) -> Optional[SquadronDef]:
|
||||
aircraft_choice: Optional[AircraftType] = None
|
||||
for aircraft in aircraft_for_task(task):
|
||||
if aircraft not in self.coalition.faction.aircrafts:
|
||||
if aircraft not in self.faction.aircrafts:
|
||||
continue
|
||||
if not control_point.can_operate(aircraft):
|
||||
continue
|
||||
@@ -44,7 +44,7 @@ class SquadronDefGenerator:
|
||||
return SquadronDef(
|
||||
name=f"Squadron {next(self.count):03}",
|
||||
nickname=self.random_nickname(),
|
||||
country=self.coalition.country_name,
|
||||
country=self.faction.country,
|
||||
role="Flying Squadron",
|
||||
aircraft=aircraft,
|
||||
livery=None,
|
||||
@@ -91,9 +91,9 @@ class SquadronDefGenerator:
|
||||
"Brass",
|
||||
"Brave",
|
||||
"Brazen",
|
||||
"Bronze",
|
||||
"Brown",
|
||||
"Brutal",
|
||||
"Brzone",
|
||||
"Burning",
|
||||
"Buzzing",
|
||||
"Celestial",
|
||||
|
||||
@@ -40,7 +40,7 @@ class Coalition:
|
||||
self.procurement_requests: OrderedSet[AircraftProcurementRequest] = OrderedSet()
|
||||
self.bullseye = Bullseye(Point(0, 0))
|
||||
self.faker = Faker(self.faction.locales)
|
||||
self.air_wing = AirWing(player)
|
||||
self.air_wing = AirWing(player, game, self.faction)
|
||||
self.transfers = PendingTransfers(game, player)
|
||||
|
||||
# Late initialized because the two coalitions in the game are mutually
|
||||
|
||||
@@ -42,6 +42,7 @@ import pydcs_extensions.highdigitsams.highdigitsams as highdigitsams
|
||||
# PATCH pydcs data with MODS
|
||||
from game.factions.faction_loader import FactionLoader
|
||||
from pydcs_extensions.a4ec.a4ec import A_4E_C
|
||||
from pydcs_extensions.f104.f104 import VSN_F104G, VSN_F104S, VSN_F104S_AG
|
||||
from pydcs_extensions.f22a.f22a import F_22A
|
||||
from pydcs_extensions.hercules.hercules import Hercules
|
||||
from pydcs_extensions.jas39.jas39 import JAS39Gripen, JAS39Gripen_AG
|
||||
@@ -53,6 +54,9 @@ plane_map["Su-57"] = Su_57
|
||||
plane_map["Hercules"] = Hercules
|
||||
plane_map["JAS39Gripen"] = JAS39Gripen
|
||||
plane_map["JAS39Gripen_AG"] = JAS39Gripen_AG
|
||||
plane_map["VSN_F104G"] = VSN_F104G
|
||||
plane_map["VSN_F104S"] = VSN_F104S
|
||||
plane_map["VSN_F104S_AG"] = VSN_F104S_AG
|
||||
|
||||
vehicle_map["FieldHL"] = frenchpack._FIELD_HIDE
|
||||
vehicle_map["HARRIERH"] = frenchpack._FIELD_HIDE_SMALL
|
||||
|
||||
@@ -101,7 +101,7 @@ class StateData:
|
||||
#: Names of aircraft units that were killed during the mission.
|
||||
killed_aircraft: List[str]
|
||||
|
||||
#: Names of vehicle (and ship) units that were killed during the mission.
|
||||
#: Names of vehicles, ships or buildings that were killed during the mission.
|
||||
killed_ground_units: List[str]
|
||||
|
||||
#: List of descriptions of destroyed statics. Format of each element is a mapping of
|
||||
|
||||
@@ -268,6 +268,10 @@ class Faction:
|
||||
self.remove_aircraft("Hercules")
|
||||
if not mod_settings.f22_raptor:
|
||||
self.remove_aircraft("F-22A")
|
||||
if not mod_settings.f104_starfighter:
|
||||
self.remove_aircraft("VSN_F104G")
|
||||
self.remove_aircraft("VSN_F104S")
|
||||
self.remove_aircraft("VSN_F104S_AG")
|
||||
if not mod_settings.jas39_gripen:
|
||||
self.remove_aircraft("JAS39Gripen")
|
||||
self.remove_aircraft("JAS39Gripen_AG")
|
||||
|
||||
@@ -144,22 +144,35 @@ class ViggenRadioChannelAllocator(RadioChannelAllocator):
|
||||
self, flight: FlightData, air_support: AirSupport
|
||||
) -> None:
|
||||
# The Viggen's preset channels are handled differently from other
|
||||
# aircraft. The aircraft automatically configures channels for every
|
||||
# allied flight in the game (including AWACS) and for every airfield. As
|
||||
# such, we don't need to allocate any of those. There are seven presets
|
||||
# we can modify, however: three channels for the main radio intended for
|
||||
# communication with wingmen, and four emergency channels for the backup
|
||||
# radio. We'll set the first channel of the main radio to the
|
||||
# intra-flight channel, and the first three emergency channels to each
|
||||
# aircraft. Since 2.7.9 the group channels will not be generated automatically
|
||||
# anymore. So we have to set AWACS and JTAC manually. There are also seven
|
||||
# special channels we can modify. We'll set the first channel of the main radio
|
||||
# to the intra-flight channel, and the first three emergency channels to each
|
||||
# of the flight plan's airfields. The fourth emergency channel is always
|
||||
# the guard channel.
|
||||
radio_id = 1
|
||||
flight.assign_channel(radio_id, 1, flight.intra_flight_channel)
|
||||
|
||||
# Possible Group Channels (100-139)
|
||||
channel_alloc = iter(range(1, 40))
|
||||
|
||||
# Intra-Flight channel on Special 1 and Group 100 (required by module)
|
||||
flight.assign_channel(radio_id, 41, flight.intra_flight_channel) # Special 1
|
||||
flight.assign_channel(
|
||||
radio_id, next(channel_alloc), flight.intra_flight_channel
|
||||
)
|
||||
|
||||
for awacs in air_support.awacs:
|
||||
flight.assign_channel(radio_id, next(channel_alloc), awacs.freq)
|
||||
|
||||
for jtac in air_support.jtacs:
|
||||
flight.assign_channel(radio_id, next(channel_alloc), jtac.freq)
|
||||
|
||||
if flight.departure.atc is not None:
|
||||
flight.assign_channel(radio_id, 4, flight.departure.atc)
|
||||
flight.assign_channel(radio_id, 44, flight.departure.atc) # FR24 E
|
||||
if flight.arrival.atc is not None:
|
||||
flight.assign_channel(radio_id, 5, flight.arrival.atc)
|
||||
# TODO: Assign divert to 6 when we support divert airfields.
|
||||
flight.assign_channel(radio_id, 45, flight.arrival.atc) # FR24 F
|
||||
if flight.divert is not None and flight.divert.atc is not None:
|
||||
flight.assign_channel(radio_id, 46, flight.divert.atc) # FR24 G
|
||||
|
||||
@classmethod
|
||||
def name(cls) -> str:
|
||||
@@ -263,10 +276,18 @@ class ViggenChannelNamer(ChannelNamer):
|
||||
|
||||
@staticmethod
|
||||
def channel_name(radio_id: int, channel_id: int) -> str:
|
||||
if channel_id >= 4:
|
||||
channel_letter = "EFGH"[channel_id - 4]
|
||||
return f"FR 24 {channel_letter}"
|
||||
return f"FR 22 Special {channel_id}"
|
||||
special_channels = [
|
||||
"FR 22 Special 1",
|
||||
"FR 22 Special 2",
|
||||
"FR 22 Special 3",
|
||||
"FR 24 E",
|
||||
"FR 24 F",
|
||||
"FR 24 G",
|
||||
"FR 24 H",
|
||||
]
|
||||
if channel_id >= 41: # Special channels are 41-47
|
||||
return special_channels[channel_id - 41]
|
||||
return f"FR 22 Group {99 + channel_id}"
|
||||
|
||||
@classmethod
|
||||
def name(cls) -> str:
|
||||
|
||||
@@ -23,6 +23,12 @@ class AutoAtoBehavior(Enum):
|
||||
Prefer = "Prefer player pilots"
|
||||
|
||||
|
||||
class NightMissions(Enum):
|
||||
DayAndNight = "nightmissions_nightandday"
|
||||
OnlyDay = "nightmissions_onlyday"
|
||||
OnlyNight = "nightmissions_onlynight"
|
||||
|
||||
|
||||
DIFFICULTY_PAGE = "Difficulty"
|
||||
|
||||
AI_DIFFICULTY_SECTION = "AI Difficulty"
|
||||
@@ -104,11 +110,16 @@ class Settings:
|
||||
section=MISSION_DIFFICULTY_SECTION,
|
||||
default=True,
|
||||
)
|
||||
night_disabled: bool = boolean_option(
|
||||
"No night missions",
|
||||
night_day_missions: NightMissions = choices_option(
|
||||
"Night/day mission options",
|
||||
page=DIFFICULTY_PAGE,
|
||||
section=MISSION_DIFFICULTY_SECTION,
|
||||
default=False,
|
||||
choices={
|
||||
"Generate night and day missions": NightMissions.DayAndNight,
|
||||
"Only generate day missions": NightMissions.OnlyDay,
|
||||
"Only generate night missions": NightMissions.OnlyNight,
|
||||
},
|
||||
default=NightMissions.DayAndNight,
|
||||
)
|
||||
# Mission Restrictions
|
||||
labels: str = choices_option(
|
||||
@@ -137,6 +148,15 @@ class Settings:
|
||||
MISSION_RESTRICTIONS_SECTION,
|
||||
default=True,
|
||||
)
|
||||
|
||||
easy_communication: Optional[bool] = choices_option(
|
||||
"Easy Communication",
|
||||
page=DIFFICULTY_PAGE,
|
||||
section=MISSION_RESTRICTIONS_SECTION,
|
||||
choices={"Player preference": None, "Enforced on": True, "Enforced off": False},
|
||||
default=None,
|
||||
)
|
||||
|
||||
battle_damage_assessment: Optional[bool] = choices_option(
|
||||
"Battle damage assessment",
|
||||
page=DIFFICULTY_PAGE,
|
||||
@@ -378,6 +398,12 @@ class Settings:
|
||||
section=PERFORMANCE_SECTION,
|
||||
default=True,
|
||||
)
|
||||
convoys_travel_full_distance: bool = boolean_option(
|
||||
"Convoys drive the full distance between control points",
|
||||
page=MISSION_GENERATOR_PAGE,
|
||||
section=PERFORMANCE_SECTION,
|
||||
default=True,
|
||||
)
|
||||
perf_infantry: bool = boolean_option(
|
||||
"Generate infantry squads alongside vehicles",
|
||||
page=MISSION_GENERATOR_PAGE,
|
||||
|
||||
@@ -7,17 +7,30 @@ from typing import Sequence, Iterator, TYPE_CHECKING, Optional
|
||||
from game.dcs.aircrafttype import AircraftType
|
||||
from gen.flights.ai_flight_planner_db import aircraft_for_task
|
||||
from gen.flights.closestairfields import ObjectiveDistanceCache
|
||||
from .squadron import Squadron
|
||||
from .squadrondef import SquadronDef
|
||||
from .squadrondefloader import SquadronDefLoader
|
||||
from ..campaignloader.squadrondefgenerator import SquadronDefGenerator
|
||||
from ..factions.faction import Faction
|
||||
from ..theater import ControlPoint, MissionTarget
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from game.game import Game
|
||||
from gen.flights.flight import FlightType
|
||||
from .squadron import Squadron
|
||||
|
||||
|
||||
class AirWing:
|
||||
def __init__(self, player: bool) -> None:
|
||||
def __init__(self, player: bool, game: Game, faction: Faction) -> None:
|
||||
self.player = player
|
||||
self.squadrons: dict[AircraftType, list[Squadron]] = defaultdict(list)
|
||||
self.squadron_defs = SquadronDefLoader(game, faction).load()
|
||||
self.squadron_def_generator = SquadronDefGenerator(faction)
|
||||
|
||||
def unclaim_squadron_def(self, squadron: Squadron) -> None:
|
||||
if squadron.aircraft in self.squadron_defs:
|
||||
for squadron_def in self.squadron_defs[squadron.aircraft]:
|
||||
if squadron_def.claimed and squadron_def.name == squadron.name:
|
||||
squadron_def.claimed = False
|
||||
|
||||
def add_squadron(self, squadron: Squadron) -> None:
|
||||
self.squadrons[squadron.aircraft].append(squadron)
|
||||
|
||||
@@ -3,17 +3,13 @@ from __future__ import annotations
|
||||
import logging
|
||||
from collections import Iterable
|
||||
from dataclasses import dataclass, field
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Optional,
|
||||
Sequence,
|
||||
)
|
||||
from typing import Optional, Sequence, TYPE_CHECKING
|
||||
|
||||
from faker import Faker
|
||||
|
||||
from game.settings import AutoAtoBehavior, Settings
|
||||
from gen.ato import Package
|
||||
from gen.flights.flight import FlightType, Flight
|
||||
from gen.flights.flight import Flight, FlightType
|
||||
from gen.flights.flightplan import FlightPlanBuilder
|
||||
from .pilot import Pilot, PilotStatus
|
||||
from ..utils import meters
|
||||
@@ -265,6 +261,8 @@ class Squadron:
|
||||
return distance_to_target <= self.aircraft.max_mission_range
|
||||
|
||||
def operates_from(self, control_point: ControlPoint) -> bool:
|
||||
if not control_point.can_operate(self.aircraft):
|
||||
return False
|
||||
if control_point.is_carrier:
|
||||
return self.operating_bases.carrier
|
||||
elif control_point.is_lha:
|
||||
@@ -421,6 +419,7 @@ class Squadron:
|
||||
coalition: Coalition,
|
||||
game: Game,
|
||||
) -> Squadron:
|
||||
squadron_def.claimed = True
|
||||
return Squadron(
|
||||
squadron_def.name,
|
||||
squadron_def.nickname,
|
||||
|
||||
@@ -4,10 +4,7 @@ import logging
|
||||
from collections import Iterable
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Optional,
|
||||
)
|
||||
from typing import Optional, TYPE_CHECKING
|
||||
|
||||
import yaml
|
||||
|
||||
@@ -31,6 +28,7 @@ class SquadronDef:
|
||||
mission_types: tuple[FlightType, ...]
|
||||
operating_bases: OperatingBases
|
||||
pilot_pool: list[Pilot]
|
||||
claimed: bool = False
|
||||
|
||||
auto_assignable_mission_types: set[FlightType] = field(
|
||||
init=False, hash=False, compare=False
|
||||
@@ -52,6 +50,8 @@ class SquadronDef:
|
||||
return task in self.auto_assignable_mission_types
|
||||
|
||||
def operates_from(self, control_point: ControlPoint) -> bool:
|
||||
if not control_point.can_operate(self.aircraft):
|
||||
return False
|
||||
if control_point.is_carrier:
|
||||
return self.operating_bases.carrier
|
||||
elif control_point.is_lha:
|
||||
|
||||
@@ -10,13 +10,13 @@ from .squadrondef import SquadronDef
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from game import Game
|
||||
from game.coalition import Coalition
|
||||
from ..factions.faction import Faction
|
||||
|
||||
|
||||
class SquadronDefLoader:
|
||||
def __init__(self, game: Game, coalition: Coalition) -> None:
|
||||
def __init__(self, game: Game, faction: Faction) -> None:
|
||||
self.game = game
|
||||
self.coalition = coalition
|
||||
self.faction = faction
|
||||
|
||||
@staticmethod
|
||||
def squadron_directories() -> Iterator[Path]:
|
||||
@@ -27,8 +27,8 @@ class SquadronDefLoader:
|
||||
|
||||
def load(self) -> dict[AircraftType, list[SquadronDef]]:
|
||||
squadrons: dict[AircraftType, list[SquadronDef]] = defaultdict(list)
|
||||
country = self.coalition.country_name
|
||||
faction = self.coalition.faction
|
||||
country = self.faction.country
|
||||
faction = self.faction
|
||||
any_country = country.startswith("Combined Joint Task Forces ")
|
||||
for directory in self.squadron_directories():
|
||||
for path, squadron_def in self.load_squadrons_from(directory):
|
||||
|
||||
@@ -70,6 +70,7 @@ class GeneratorSettings:
|
||||
class ModSettings:
|
||||
a4_skyhawk: bool = False
|
||||
f22_raptor: bool = False
|
||||
f104_starfighter: bool = False
|
||||
hercules: bool = False
|
||||
jas39_gripen: bool = False
|
||||
su57_felon: bool = False
|
||||
|
||||
@@ -316,16 +316,6 @@ class SceneryGroundObject(BuildingGroundObject):
|
||||
is_fob_structure=False,
|
||||
)
|
||||
self.zone = zone
|
||||
try:
|
||||
# In the default TriggerZone using "assign as..." in the DCS Mission Editor,
|
||||
# property three has the scenery's object ID as its value.
|
||||
self.map_object_id = self.zone.properties[3]["value"]
|
||||
except (IndexError, KeyError):
|
||||
logging.exception(
|
||||
"Invalid TriggerZone for Scenery definition. The third property must "
|
||||
"be the map object ID."
|
||||
)
|
||||
raise
|
||||
|
||||
|
||||
class FactoryGroundObject(BuildingGroundObject):
|
||||
|
||||
@@ -699,6 +699,8 @@ class PendingTransfers:
|
||||
completable_transfers = []
|
||||
for transfer in self.pending_transfers:
|
||||
if not transfer.is_completable(self.network_for(transfer.position)):
|
||||
if transfer.transport:
|
||||
self.cancel_transport(transfer.transport, transfer)
|
||||
transfer.disband()
|
||||
else:
|
||||
completable_transfers.append(transfer)
|
||||
|
||||
@@ -217,7 +217,7 @@ class UnitMap:
|
||||
self.buildings[name] = Building(ground_object)
|
||||
|
||||
def add_scenery(self, ground_object: SceneryGroundObject) -> None:
|
||||
name = str(ground_object.map_object_id)
|
||||
name = str(ground_object.zone.name)
|
||||
if name in self.buildings:
|
||||
raise RuntimeError(
|
||||
f"Duplicate TGO unit: {name}. TriggerZone name: "
|
||||
|
||||
@@ -2,7 +2,7 @@ from pathlib import Path
|
||||
|
||||
|
||||
MAJOR_VERSION = 5
|
||||
MINOR_VERSION = 0
|
||||
MINOR_VERSION = 1
|
||||
MICRO_VERSION = 0
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from typing import Optional, TYPE_CHECKING, Any
|
||||
from dcs.cloud_presets import Clouds as PydcsClouds
|
||||
from dcs.weather import CloudPreset, Weather as PydcsWeather, Wind
|
||||
|
||||
from game.settings import Settings
|
||||
from game.settings.settings import Settings, NightMissions
|
||||
from game.utils import Distance, Heading, meters, interpolate, Pressure, inches_hg
|
||||
|
||||
from game.theater.seasonalconditions import determine_season
|
||||
@@ -301,7 +301,10 @@ class Conditions:
|
||||
settings: Settings,
|
||||
) -> Conditions:
|
||||
_start_time = cls.generate_start_time(
|
||||
theater, day, time_of_day, settings.night_disabled
|
||||
theater,
|
||||
day,
|
||||
time_of_day,
|
||||
settings.night_day_missions,
|
||||
)
|
||||
return cls(
|
||||
time_of_day=time_of_day,
|
||||
@@ -315,9 +318,9 @@ class Conditions:
|
||||
theater: ConflictTheater,
|
||||
day: datetime.date,
|
||||
time_of_day: TimeOfDay,
|
||||
night_disabled: bool,
|
||||
night_day_missions: NightMissions,
|
||||
) -> datetime.datetime:
|
||||
if night_disabled:
|
||||
if night_day_missions == NightMissions.OnlyDay:
|
||||
logging.info("Skip Night mission due to user settings")
|
||||
time_range = {
|
||||
TimeOfDay.Dawn: (8, 9),
|
||||
@@ -325,6 +328,14 @@ class Conditions:
|
||||
TimeOfDay.Dusk: (12, 14),
|
||||
TimeOfDay.Night: (14, 17),
|
||||
}[time_of_day]
|
||||
elif night_day_missions == NightMissions.OnlyNight:
|
||||
logging.info("Skip Day mission due to user settings")
|
||||
time_range = {
|
||||
TimeOfDay.Dawn: (0, 3),
|
||||
TimeOfDay.Day: (3, 6),
|
||||
TimeOfDay.Dusk: (21, 22),
|
||||
TimeOfDay.Night: (22, 23),
|
||||
}[time_of_day]
|
||||
else:
|
||||
time_range = theater.daytime_map[time_of_day.value]
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import random
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import timedelta
|
||||
from functools import cached_property
|
||||
from typing import Dict, List, Optional, TYPE_CHECKING, Type, Union, Iterable, Any
|
||||
from typing import Any, Dict, Iterable, List, Optional, TYPE_CHECKING, Type, Union
|
||||
|
||||
from dcs import helicopters
|
||||
from dcs.action import AITaskPush, ActivateGroup
|
||||
@@ -21,6 +21,7 @@ from dcs.planes import (
|
||||
B_52H,
|
||||
C_101CC,
|
||||
C_101EB,
|
||||
F_14A_135_GR,
|
||||
F_14B,
|
||||
JF_17,
|
||||
Su_33,
|
||||
@@ -44,6 +45,7 @@ from dcs.task import (
|
||||
EngageTargetsInZone,
|
||||
FighterSweep,
|
||||
GroundAttack,
|
||||
Nothing,
|
||||
OptROE,
|
||||
OptRTBOnBingoFuel,
|
||||
OptRTBOnOutOfAmmo,
|
||||
@@ -54,15 +56,14 @@ from dcs.task import (
|
||||
RunwayAttack,
|
||||
StartCommand,
|
||||
Tanker,
|
||||
TargetType,
|
||||
Targets,
|
||||
Transport,
|
||||
WeaponType,
|
||||
TargetType,
|
||||
Nothing,
|
||||
)
|
||||
from dcs.terrain.terrain import Airport, NoParkingSlotError
|
||||
from dcs.triggers import Event, TriggerOnce, TriggerRule
|
||||
from dcs.unit import Unit, Skill
|
||||
from dcs.unit import Skill, Unit
|
||||
from dcs.unitgroup import FlyingGroup, ShipGroup, StaticGroup
|
||||
from dcs.unittype import FlyingType
|
||||
|
||||
@@ -379,6 +380,8 @@ class AircraftConflictGenerator:
|
||||
# Set up F-14 Client to have pre-stored alignment
|
||||
if unit_type is F_14B:
|
||||
unit.set_property(F_14B.Properties.INSAlignmentStored.id, True)
|
||||
elif unit_type is F_14A_135_GR:
|
||||
unit.set_property(F_14A_135_GR.Properties.INSAlignmentStored.id, True)
|
||||
|
||||
group.points[0].tasks.append(
|
||||
OptReactOnThreat(OptReactOnThreat.Values.EvadeFire)
|
||||
@@ -1526,6 +1529,8 @@ class BaiIngressBuilder(PydcsWaypointBuilder):
|
||||
group_names.append(group.name)
|
||||
elif isinstance(target, MultiGroupTransport):
|
||||
group_names.append(target.name)
|
||||
elif isinstance(target, NavalControlPoint):
|
||||
group_names.append(target.get_carrier_group_name())
|
||||
else:
|
||||
logging.error(
|
||||
"Unexpected target type for BAI mission: %s",
|
||||
|
||||
@@ -10,6 +10,7 @@ from dcs.unit import Vehicle
|
||||
from dcs.unitgroup import VehicleGroup
|
||||
|
||||
from game.dcs.groundunittype import GroundUnitType
|
||||
from game.theater import FrontLine
|
||||
from game.transfers import Convoy
|
||||
from game.unitmap import UnitMap
|
||||
from game.utils import kph
|
||||
@@ -38,11 +39,26 @@ class ConvoyGenerator:
|
||||
convoy.units,
|
||||
convoy.player_owned,
|
||||
)
|
||||
|
||||
if self.game.settings.convoys_travel_full_distance:
|
||||
end_point = convoy.route_end
|
||||
else:
|
||||
# convoys_travel_full_distance is disabled, so have the convoy only move the first segment on the route.
|
||||
# This option aims to remove long routes for ground vehicles between control points,
|
||||
# since the CPU load for pathfinding long routes on DCS can be pretty heavy.
|
||||
frontline = FrontLine(convoy.origin, convoy.destination)
|
||||
|
||||
# Select the first route segment from the origin towards the destination
|
||||
# so the convoy spawns at the origin CP. This allows the convoy to be
|
||||
# targeted by BAI flights and starts it within the protection umbrella of the CP.
|
||||
end_point = frontline.segments[0].point_b
|
||||
|
||||
group.add_waypoint(
|
||||
convoy.route_end,
|
||||
end_point,
|
||||
speed=kph(40).kph,
|
||||
move_formation=PointAction.OnRoad,
|
||||
)
|
||||
|
||||
self.make_drivable(group)
|
||||
self.unit_map.add_convoy_units(group, convoy)
|
||||
return group
|
||||
|
||||
@@ -52,8 +52,10 @@ from dcs.planes import (
|
||||
F_4E,
|
||||
F_5E_3,
|
||||
F_86F_Sabre,
|
||||
H_6J,
|
||||
IL_76MD,
|
||||
IL_78M,
|
||||
I_16,
|
||||
JF_17,
|
||||
J_11A,
|
||||
Ju_88A4,
|
||||
@@ -75,6 +77,7 @@ from dcs.planes import (
|
||||
MiG_29S,
|
||||
MiG_31,
|
||||
Mirage_2000_5,
|
||||
MosquitoFBMkVI,
|
||||
P_47D_30,
|
||||
P_47D_30bl1,
|
||||
P_47D_40,
|
||||
@@ -87,7 +90,6 @@ from dcs.planes import (
|
||||
SpitfireLFMkIXCW,
|
||||
Su_17M4,
|
||||
Su_24M,
|
||||
Su_24MR,
|
||||
Su_25,
|
||||
Su_25T,
|
||||
Su_25TM,
|
||||
@@ -97,13 +99,12 @@ from dcs.planes import (
|
||||
Su_34,
|
||||
Tornado_GR4,
|
||||
Tornado_IDS,
|
||||
Tu_142,
|
||||
Tu_160,
|
||||
Tu_22M3,
|
||||
Tu_95MS,
|
||||
WingLoong_I,
|
||||
I_16,
|
||||
Yak_40,
|
||||
MosquitoFBMkVI,
|
||||
)
|
||||
from dcs.unittype import FlyingType
|
||||
|
||||
@@ -111,6 +112,7 @@ from game.dcs.aircrafttype import AircraftType
|
||||
from gen.flights.flight import FlightType
|
||||
from pydcs_extensions.a4ec.a4ec import A_4E_C
|
||||
from pydcs_extensions.f22a.f22a import F_22A
|
||||
from pydcs_extensions.f104.f104 import VSN_F104G, VSN_F104S, VSN_F104S_AG
|
||||
from pydcs_extensions.hercules.hercules import Hercules
|
||||
from pydcs_extensions.jas39.jas39 import JAS39Gripen, JAS39Gripen_AG
|
||||
from pydcs_extensions.su57.su57 import Su_57
|
||||
@@ -150,6 +152,8 @@ CAP_CAPABLE = [
|
||||
F_15E,
|
||||
M_2000C,
|
||||
F_5E_3,
|
||||
VSN_F104S,
|
||||
VSN_F104G,
|
||||
MiG_19P,
|
||||
A_4E_C,
|
||||
F_86F_Sabre,
|
||||
@@ -215,6 +219,7 @@ CAS_CAPABLE = [
|
||||
Mi_24P,
|
||||
Mi_24V,
|
||||
Mi_8MT,
|
||||
H_6J,
|
||||
MiG_19P,
|
||||
MiG_15bis,
|
||||
M_2000C,
|
||||
@@ -223,6 +228,8 @@ CAS_CAPABLE = [
|
||||
C_101CC,
|
||||
L_39ZA,
|
||||
UH_1H,
|
||||
VSN_F104S_AG,
|
||||
VSN_F104G,
|
||||
A_20G,
|
||||
Ju_88A4,
|
||||
P_47D_40,
|
||||
@@ -276,8 +283,11 @@ DEAD_CAPABLE = [
|
||||
B_52H,
|
||||
Tu_160,
|
||||
Tu_95MS,
|
||||
H_6J,
|
||||
A_20G,
|
||||
Ju_88A4,
|
||||
VSN_F104S_AG,
|
||||
VSN_F104G,
|
||||
P_47D_40,
|
||||
P_47D_30bl1,
|
||||
P_47D_30,
|
||||
@@ -300,6 +310,7 @@ STRIKE_CAPABLE = [
|
||||
Tu_160,
|
||||
Tu_95MS,
|
||||
Tu_22M3,
|
||||
H_6J,
|
||||
F_15E,
|
||||
AJS37,
|
||||
Tornado_GR4,
|
||||
@@ -340,6 +351,8 @@ STRIKE_CAPABLE = [
|
||||
B_17G,
|
||||
A_20G,
|
||||
Ju_88A4,
|
||||
VSN_F104S_AG,
|
||||
VSN_F104G,
|
||||
P_47D_40,
|
||||
P_47D_30bl1,
|
||||
P_47D_30,
|
||||
@@ -356,7 +369,9 @@ STRIKE_CAPABLE = [
|
||||
|
||||
ANTISHIP_CAPABLE = [
|
||||
AJS37,
|
||||
Tu_142,
|
||||
Tu_22M3,
|
||||
H_6J,
|
||||
FA_18C_hornet,
|
||||
JAS39Gripen_AG,
|
||||
Su_24M,
|
||||
@@ -376,14 +391,73 @@ ANTISHIP_CAPABLE = [
|
||||
]
|
||||
|
||||
|
||||
# Duplicates some list entries but that's fine.
|
||||
# This list does not "inherit" from the strike list because some strike aircraft can
|
||||
# only carry guided weapons, and the AI cannot do runway attack with dguided weapons.
|
||||
# https://github.com/dcs-liberation/dcs_liberation/issues/1703
|
||||
RUNWAY_ATTACK_CAPABLE = [
|
||||
JF_17,
|
||||
Su_34,
|
||||
Su_30,
|
||||
Tornado_IDS,
|
||||
M_2000C,
|
||||
] + STRIKE_CAPABLE
|
||||
H_6J,
|
||||
B_1B,
|
||||
B_52H,
|
||||
Tu_22M3,
|
||||
H_6J,
|
||||
F_15E,
|
||||
AJS37,
|
||||
F_16C_50,
|
||||
FA_18C_hornet,
|
||||
AV8BNA,
|
||||
JF_17,
|
||||
F_16A,
|
||||
F_14B,
|
||||
F_14A_135_GR,
|
||||
JAS39Gripen_AG,
|
||||
Tornado_IDS,
|
||||
Su_17M4,
|
||||
Su_24M,
|
||||
Su_25TM,
|
||||
Su_25T,
|
||||
Su_25,
|
||||
Su_34,
|
||||
Su_33,
|
||||
Su_30,
|
||||
Su_27,
|
||||
MiG_29S,
|
||||
MiG_29G,
|
||||
MiG_29A,
|
||||
F_4E,
|
||||
A_10C_2,
|
||||
A_10C,
|
||||
S_3B,
|
||||
A_4E_C,
|
||||
M_2000C,
|
||||
MiG_27K,
|
||||
MiG_21Bis,
|
||||
MiG_15bis,
|
||||
F_5E_3,
|
||||
F_86F_Sabre,
|
||||
C_101CC,
|
||||
L_39ZA,
|
||||
B_17G,
|
||||
A_20G,
|
||||
Ju_88A4,
|
||||
VSN_F104S_AG,
|
||||
VSN_F104G,
|
||||
P_47D_40,
|
||||
P_47D_30bl1,
|
||||
P_47D_30,
|
||||
P_51D_30_NA,
|
||||
P_51D,
|
||||
SpitfireLFMkIXCW,
|
||||
SpitfireLFMkIX,
|
||||
MosquitoFBMkVI,
|
||||
Bf_109K_4,
|
||||
FW_190D9,
|
||||
FW_190A8,
|
||||
]
|
||||
|
||||
# For any aircraft that isn't necessarily directly involved in strike
|
||||
# missions in a direct combat sense, but can transport objects and infantry.
|
||||
|
||||
@@ -25,6 +25,11 @@ class ForcedOptionsGenerator:
|
||||
self.game.settings.external_views_allowed
|
||||
)
|
||||
|
||||
def _set_easy_communication(self) -> None:
|
||||
self.mission.forced_options.easy_communication = (
|
||||
self.game.settings.easy_communication
|
||||
)
|
||||
|
||||
def _set_labels(self) -> None:
|
||||
# TODO: Fix settings to use the real type.
|
||||
# TODO: Allow forcing "full" and have default do nothing.
|
||||
@@ -51,6 +56,7 @@ class ForcedOptionsGenerator:
|
||||
def generate(self) -> None:
|
||||
self._set_options_view()
|
||||
self._set_external_views()
|
||||
self._set_easy_communication()
|
||||
self._set_labels()
|
||||
self._set_unrestricted_satnav()
|
||||
self._set_battle_damage_assessment()
|
||||
|
||||
@@ -24,7 +24,8 @@ from typing import (
|
||||
)
|
||||
|
||||
from dcs import Mission, Point, unitgroup
|
||||
from dcs.action import SceneryDestructionZone
|
||||
from dcs.action import SceneryDestructionZone, DoScript
|
||||
from dcs.condition import MapObjectIsDead
|
||||
from dcs.country import Country
|
||||
from dcs.point import StaticPoint
|
||||
from dcs.statics import Fortification, fortification_map, warehouse_map
|
||||
@@ -35,7 +36,8 @@ from dcs.task import (
|
||||
OptAlarmState,
|
||||
FireAtPoint,
|
||||
)
|
||||
from dcs.triggers import TriggerStart, TriggerZone
|
||||
from dcs.translation import String
|
||||
from dcs.triggers import TriggerStart, TriggerZone, Event, TriggerOnce
|
||||
from dcs.unit import Ship, Unit, Vehicle, InvisibleFARP
|
||||
from dcs.unitgroup import ShipGroup, StaticGroup, VehicleGroup
|
||||
from dcs.unittype import StaticType, ShipType, VehicleType
|
||||
@@ -297,7 +299,9 @@ class SceneryGenerator(BuildingSiteGenerator):
|
||||
# this trigger rule is applied. Otherwise you can kill a
|
||||
# structure twice.
|
||||
if self.ground_object.is_dead:
|
||||
self.generate_dead_trigger_rule(trigger_zone)
|
||||
self.generate_destruction_trigger_rule(trigger_zone)
|
||||
else:
|
||||
self.generate_on_dead_trigger_rule(trigger_zone)
|
||||
|
||||
# Tell Liberation to manage this groundobjectsgen as part of the campaign.
|
||||
self.register_scenery()
|
||||
@@ -325,7 +329,7 @@ class SceneryGenerator(BuildingSiteGenerator):
|
||||
zone.properties,
|
||||
)
|
||||
|
||||
def generate_dead_trigger_rule(self, trigger_zone: TriggerZone) -> None:
|
||||
def generate_destruction_trigger_rule(self, trigger_zone: TriggerZone) -> None:
|
||||
# Add destruction zone trigger
|
||||
t = TriggerStart(comment="Destruction")
|
||||
t.actions.append(
|
||||
@@ -333,6 +337,17 @@ class SceneryGenerator(BuildingSiteGenerator):
|
||||
)
|
||||
self.m.triggerrules.triggers.append(t)
|
||||
|
||||
def generate_on_dead_trigger_rule(self, trigger_zone: TriggerZone) -> None:
|
||||
# Add a TriggerRule with the MapObjectIsDead condition to recognize killed
|
||||
# map objects and add them to the state.json with a DoScript
|
||||
t = TriggerOnce(Event.NoEvent, f"MapObjectIsDead Trigger {trigger_zone.id}")
|
||||
t.add_condition(MapObjectIsDead(trigger_zone.id))
|
||||
script_string = String(
|
||||
f'killed_ground_units[#killed_ground_units + 1] = "{trigger_zone.name}"'
|
||||
)
|
||||
t.actions.append(DoScript(script_string))
|
||||
self.m.triggerrules.triggers.append(t)
|
||||
|
||||
def register_scenery(self) -> None:
|
||||
scenery = self.ground_object
|
||||
assert isinstance(scenery, SceneryGroundObject)
|
||||
@@ -600,7 +615,7 @@ class HelipadGenerator:
|
||||
for i, helipad in enumerate(self.cp.helipads):
|
||||
name = self.cp.name + "_helipad_" + str(i)
|
||||
logging.info("Generating helipad static : " + name)
|
||||
pad = InvisibleFARP(name=name)
|
||||
pad = InvisibleFARP(unit_id=self.m.next_unit_id(), name=name)
|
||||
pad.position = Point(helipad.x, helipad.y)
|
||||
pad.heading = helipad.heading.degrees
|
||||
sg = unitgroup.StaticGroup(self.m.next_group_id(), name)
|
||||
|
||||
@@ -161,10 +161,10 @@ ANIMALS: tuple[str, ...] = (
|
||||
"FLAMINGO",
|
||||
"FLEA",
|
||||
"FLOUNDER",
|
||||
"FORGMOUTH",
|
||||
"FOX",
|
||||
"FRINGEHEAD",
|
||||
"FROG",
|
||||
"FROGMOUTH",
|
||||
"GAR",
|
||||
"GAZELLE",
|
||||
"GECKO",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import itertools
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, FrozenSet, Iterator, List, Reversible, Set, Tuple
|
||||
from typing import Dict, FrozenSet, Iterator, List, Set, Tuple
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -127,7 +127,7 @@ RADIOS: List[Radio] = [
|
||||
RadioRange(MHz(30), MHz(88), MHz(1)),
|
||||
),
|
||||
),
|
||||
Radio("AN/ARC-222", (RadioRange(MHz(116), MHz(174), step=MHz(1)),)),
|
||||
Radio("AN/ARC-222", (RadioRange(MHz(116), MHz(152), step=MHz(1)),)),
|
||||
Radio("SCR-522", (RadioRange(MHz(100), MHz(156), step=MHz(1)),)),
|
||||
Radio("A.R.I. 1063", (RadioRange(MHz(100), MHz(156), step=MHz(1)),)),
|
||||
Radio("BC-1206", (RadioRange(kHz(200), kHz(400), step=kHz(10)),)),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from dcs.vehicles import AirDefence
|
||||
from dcs.vehicles import AirDefence, Unarmed
|
||||
|
||||
from gen.sam.airdefensegroupgenerator import (
|
||||
AirDefenseRange,
|
||||
@@ -14,6 +14,7 @@ class SA5Generator(AirDefenseGroupGenerator):
|
||||
name = "SA-5/S-200 Site"
|
||||
|
||||
def generate(self) -> None:
|
||||
|
||||
self.add_unit(
|
||||
AirDefence.RLS_19J6,
|
||||
"SR",
|
||||
@@ -28,6 +29,13 @@ class SA5Generator(AirDefenseGroupGenerator):
|
||||
self.position.y,
|
||||
self.heading,
|
||||
)
|
||||
self.add_unit(
|
||||
Unarmed.Ural_375,
|
||||
"LOGI",
|
||||
self.position.x - 20,
|
||||
self.position.y,
|
||||
self.heading,
|
||||
)
|
||||
|
||||
num_launchers = 6
|
||||
positions = self.get_circular_position(
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
2528
pydcs_extensions/f104/f104.py
Normal file
2528
pydcs_extensions/f104/f104.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,5 @@
|
||||
from pydcs_extensions.a4ec.a4ec import A_4E_C
|
||||
from pydcs_extensions.f104.f104 import VSN_F104G, VSN_F104S, VSN_F104S_AG
|
||||
from pydcs_extensions.f22a.f22a import F_22A
|
||||
from pydcs_extensions.hercules.hercules import Hercules
|
||||
from pydcs_extensions.highdigitsams import highdigitsams
|
||||
@@ -10,6 +11,9 @@ MODDED_AIRPLANES = [
|
||||
A_4E_C,
|
||||
Su_57,
|
||||
F_22A,
|
||||
VSN_F104G,
|
||||
VSN_F104S,
|
||||
VSN_F104S_AG,
|
||||
Hercules,
|
||||
JAS39Gripen,
|
||||
JAS39Gripen_AG,
|
||||
|
||||
@@ -261,6 +261,7 @@ def create_game(
|
||||
ModSettings(
|
||||
a4_skyhawk=False,
|
||||
f22_raptor=False,
|
||||
f104_starfighter=False,
|
||||
hercules=False,
|
||||
jas39_gripen=False,
|
||||
su57_felon=False,
|
||||
|
||||
@@ -111,6 +111,9 @@ def load_icons():
|
||||
"./resources/ui/misc/" + get_theme_icons() + "/pluginsoptions.png"
|
||||
)
|
||||
ICONS["Notes"] = QPixmap("./resources/ui/misc/" + get_theme_icons() + "/notes.png")
|
||||
ICONS["Reload"] = QPixmap(
|
||||
"./resources/ui/misc/" + get_theme_icons() + "/reload.png"
|
||||
)
|
||||
|
||||
ICONS["TaskCAS"] = QPixmap("./resources/ui/tasks/cas.png")
|
||||
ICONS["TaskCAP"] = QPixmap("./resources/ui/tasks/cap.png")
|
||||
|
||||
@@ -10,28 +10,33 @@ from PySide2.QtCore import (
|
||||
)
|
||||
from PySide2.QtGui import QStandardItemModel, QStandardItem, QIcon
|
||||
from PySide2.QtWidgets import (
|
||||
QComboBox,
|
||||
QDialog,
|
||||
QListView,
|
||||
QVBoxLayout,
|
||||
QGroupBox,
|
||||
QLabel,
|
||||
QWidget,
|
||||
QScrollArea,
|
||||
QLineEdit,
|
||||
QTextEdit,
|
||||
QCheckBox,
|
||||
QHBoxLayout,
|
||||
QStackedLayout,
|
||||
QTabWidget,
|
||||
QComboBox,
|
||||
QTextEdit,
|
||||
QVBoxLayout,
|
||||
QWidget,
|
||||
QCheckBox,
|
||||
QPushButton,
|
||||
QGridLayout,
|
||||
QToolButton,
|
||||
)
|
||||
|
||||
from game import Game
|
||||
from gen.flights.flight import FlightType
|
||||
from game.coalition import Coalition
|
||||
from game.dcs.aircrafttype import AircraftType
|
||||
from game.squadrons import AirWing, Pilot, Squadron
|
||||
from game.theater import ControlPoint, ConflictTheater
|
||||
from gen.flights.flight import FlightType
|
||||
from qt_ui.uiconstants import AIRCRAFT_ICONS
|
||||
from game.squadrons.squadrondef import SquadronDef
|
||||
from game.theater import ConflictTheater, ControlPoint
|
||||
from qt_ui.uiconstants import AIRCRAFT_ICONS, ICONS
|
||||
|
||||
|
||||
class AllowedMissionTypeControls(QVBoxLayout):
|
||||
@@ -76,25 +81,37 @@ class SquadronBaseSelector(QComboBox):
|
||||
def __init__(
|
||||
self,
|
||||
bases: Iterable[ControlPoint],
|
||||
squadron: Squadron,
|
||||
selected_base: Optional[ControlPoint],
|
||||
aircraft_type: Optional[AircraftType],
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.bases = list(bases)
|
||||
self.squadron = squadron
|
||||
self.setSizeAdjustPolicy(self.AdjustToContents)
|
||||
self.bases = list(bases)
|
||||
self.set_aircraft_type(aircraft_type)
|
||||
|
||||
for base in self.bases:
|
||||
if not base.can_operate(self.squadron.aircraft):
|
||||
continue
|
||||
self.addItem(base.name, base)
|
||||
self.model().sort(0)
|
||||
self.setCurrentText(self.squadron.location.name)
|
||||
if selected_base:
|
||||
self.setCurrentText(selected_base.name)
|
||||
|
||||
def set_aircraft_type(self, aircraft_type: Optional[AircraftType]):
|
||||
self.clear()
|
||||
if aircraft_type:
|
||||
for base in self.bases:
|
||||
if not base.can_operate(aircraft_type):
|
||||
continue
|
||||
self.addItem(base.name, base)
|
||||
self.model().sort(0)
|
||||
self.setEnabled(True)
|
||||
else:
|
||||
self.addItem("Select aircraft type first", None)
|
||||
self.setEnabled(False)
|
||||
self.update()
|
||||
|
||||
|
||||
class SquadronConfigurationBox(QGroupBox):
|
||||
remove_squadron_signal = Signal(Squadron)
|
||||
|
||||
def __init__(self, squadron: Squadron, theater: ConflictTheater) -> None:
|
||||
super().__init__()
|
||||
self.setCheckable(True)
|
||||
self.squadron = squadron
|
||||
self.reset_title()
|
||||
|
||||
@@ -109,14 +126,24 @@ class SquadronConfigurationBox(QGroupBox):
|
||||
self.name_edit.textChanged.connect(self.on_name_changed)
|
||||
left_column.addWidget(self.name_edit)
|
||||
|
||||
left_column.addWidget(QLabel("Nickname:"))
|
||||
nickname_edit_layout = QGridLayout()
|
||||
left_column.addLayout(nickname_edit_layout)
|
||||
|
||||
nickname_edit_layout.addWidget(QLabel("Nickname:"), 0, 0, 1, 2)
|
||||
self.nickname_edit = QLineEdit(squadron.nickname)
|
||||
self.nickname_edit.textChanged.connect(self.on_nickname_changed)
|
||||
left_column.addWidget(self.nickname_edit)
|
||||
nickname_edit_layout.addWidget(self.nickname_edit, 1, 0, Qt.AlignTop)
|
||||
reroll_nickname_button = QToolButton()
|
||||
reroll_nickname_button.setIcon(QIcon(ICONS["Reload"]))
|
||||
reroll_nickname_button.setToolTip("Re-roll nickname")
|
||||
reroll_nickname_button.clicked.connect(self.reroll_nickname)
|
||||
nickname_edit_layout.addWidget(reroll_nickname_button, 1, 1, Qt.AlignTop)
|
||||
|
||||
left_column.addWidget(QLabel("Base:"))
|
||||
self.base_selector = SquadronBaseSelector(
|
||||
theater.control_points_for(squadron.player), squadron
|
||||
theater.control_points_for(squadron.player),
|
||||
squadron.location,
|
||||
squadron.aircraft,
|
||||
)
|
||||
self.base_selector.currentIndexChanged.connect(self.on_base_changed)
|
||||
left_column.addWidget(self.base_selector)
|
||||
@@ -138,12 +165,18 @@ class SquadronConfigurationBox(QGroupBox):
|
||||
self.player_list.setAcceptRichText(False)
|
||||
self.player_list.setEnabled(squadron.player)
|
||||
left_column.addWidget(self.player_list)
|
||||
|
||||
delete_button = QPushButton("Remove Squadron")
|
||||
delete_button.setMaximumWidth(140)
|
||||
delete_button.clicked.connect(self.remove_from_squadron_config)
|
||||
left_column.addWidget(delete_button)
|
||||
left_column.addStretch()
|
||||
|
||||
self.allowed_missions = AllowedMissionTypeControls(squadron)
|
||||
columns.addLayout(self.allowed_missions)
|
||||
|
||||
def remove_from_squadron_config(self) -> None:
|
||||
self.remove_squadron_signal.emit(self.squadron)
|
||||
|
||||
def on_name_changed(self, text: str) -> None:
|
||||
self.squadron.name = text
|
||||
self.reset_title()
|
||||
@@ -160,6 +193,11 @@ class SquadronConfigurationBox(QGroupBox):
|
||||
def reset_title(self) -> None:
|
||||
self.setTitle(f"{self.squadron.name} - {self.squadron.aircraft}")
|
||||
|
||||
def reroll_nickname(self) -> None:
|
||||
self.nickname_edit.setText(
|
||||
self.squadron.coalition.air_wing.squadron_def_generator.random_nickname()
|
||||
)
|
||||
|
||||
def apply(self) -> Squadron:
|
||||
player_names = self.player_list.toPlainText().splitlines()
|
||||
# Prepend player pilots so they get set active first.
|
||||
@@ -173,29 +211,48 @@ class SquadronConfigurationBox(QGroupBox):
|
||||
|
||||
|
||||
class SquadronConfigurationLayout(QVBoxLayout):
|
||||
config_changed = Signal(AircraftType)
|
||||
|
||||
def __init__(self, squadrons: list[Squadron], theater: ConflictTheater) -> None:
|
||||
super().__init__()
|
||||
self.squadron_configs = []
|
||||
self.theater = theater
|
||||
for squadron in squadrons:
|
||||
squadron_config = SquadronConfigurationBox(squadron, theater)
|
||||
self.squadron_configs.append(squadron_config)
|
||||
self.addWidget(squadron_config)
|
||||
self.add_squadron(squadron)
|
||||
|
||||
def apply(self) -> list[Squadron]:
|
||||
keep_squadrons = []
|
||||
for squadron_config in self.squadron_configs:
|
||||
if squadron_config.isChecked():
|
||||
keep_squadrons.append(squadron_config.apply())
|
||||
keep_squadrons.append(squadron_config.apply())
|
||||
return keep_squadrons
|
||||
|
||||
def remove_squadron(self, squadron: Squadron) -> None:
|
||||
for squadron_config in self.squadron_configs:
|
||||
if squadron_config.squadron == squadron:
|
||||
squadron_config.deleteLater()
|
||||
self.squadron_configs.remove(squadron_config)
|
||||
squadron.coalition.air_wing.unclaim_squadron_def(squadron)
|
||||
self.update()
|
||||
self.config_changed.emit(squadron.aircraft)
|
||||
return
|
||||
|
||||
def add_squadron(self, squadron: Squadron) -> None:
|
||||
squadron_config = SquadronConfigurationBox(squadron, self.theater)
|
||||
squadron_config.remove_squadron_signal.connect(self.remove_squadron)
|
||||
self.squadron_configs.append(squadron_config)
|
||||
self.addWidget(squadron_config)
|
||||
|
||||
|
||||
class AircraftSquadronsPage(QWidget):
|
||||
remove_squadron_page = Signal(AircraftType)
|
||||
|
||||
def __init__(self, squadrons: list[Squadron], theater: ConflictTheater) -> None:
|
||||
super().__init__()
|
||||
layout = QVBoxLayout()
|
||||
self.setLayout(layout)
|
||||
|
||||
self.squadrons_config = SquadronConfigurationLayout(squadrons, theater)
|
||||
self.squadrons_config.config_changed.connect(self.on_squadron_config_changed)
|
||||
|
||||
scrolling_widget = QWidget()
|
||||
scrolling_widget.setLayout(self.squadrons_config)
|
||||
@@ -208,21 +265,56 @@ class AircraftSquadronsPage(QWidget):
|
||||
|
||||
layout.addWidget(scrolling_area)
|
||||
|
||||
def on_squadron_config_changed(self, aircraft_type: AircraftType):
|
||||
if len(self.squadrons_config.squadron_configs) == 0:
|
||||
self.remove_squadron_page.emit(aircraft_type)
|
||||
|
||||
def add_squadron_to_page(self, squadron: Squadron):
|
||||
self.squadrons_config.add_squadron(squadron)
|
||||
|
||||
def apply(self) -> list[Squadron]:
|
||||
return self.squadrons_config.apply()
|
||||
|
||||
|
||||
class AircraftSquadronsPanel(QStackedLayout):
|
||||
page_removed = Signal(AircraftType)
|
||||
|
||||
def __init__(self, air_wing: AirWing, theater: ConflictTheater) -> None:
|
||||
super().__init__()
|
||||
self.air_wing = air_wing
|
||||
self.theater = theater
|
||||
self.squadrons_pages: dict[AircraftType, AircraftSquadronsPage] = {}
|
||||
for aircraft, squadrons in self.air_wing.squadrons.items():
|
||||
page = AircraftSquadronsPage(squadrons, theater)
|
||||
self.addWidget(page)
|
||||
self.squadrons_pages[aircraft] = page
|
||||
self.new_page_for_type(aircraft, squadrons)
|
||||
|
||||
def remove_page_for_type(self, aircraft_type: AircraftType):
|
||||
page = self.squadrons_pages[aircraft_type]
|
||||
self.removeWidget(page)
|
||||
page.deleteLater()
|
||||
self.squadrons_pages.pop(aircraft_type)
|
||||
self.page_removed.emit(aircraft_type)
|
||||
self.update()
|
||||
|
||||
def new_page_for_type(
|
||||
self, aircraft_type: AircraftType, squadrons: list[Squadron]
|
||||
) -> None:
|
||||
page = AircraftSquadronsPage(squadrons, self.theater)
|
||||
page.remove_squadron_page.connect(self.remove_page_for_type)
|
||||
self.addWidget(page)
|
||||
self.squadrons_pages[aircraft_type] = page
|
||||
|
||||
def add_squadron_to_panel(self, squadron: Squadron):
|
||||
# Find existing page or add new one
|
||||
if squadron.aircraft in self.squadrons_pages:
|
||||
page = self.squadrons_pages[squadron.aircraft]
|
||||
page.add_squadron_to_page(squadron)
|
||||
else:
|
||||
self.new_page_for_type(squadron.aircraft, [squadron])
|
||||
|
||||
self.update()
|
||||
|
||||
def apply(self) -> None:
|
||||
self.air_wing.squadrons = {}
|
||||
for aircraft, page in self.squadrons_pages.items():
|
||||
self.air_wing.squadrons[aircraft] = page.apply()
|
||||
|
||||
@@ -235,21 +327,29 @@ class AircraftTypeList(QListView):
|
||||
self.setIconSize(QSize(91, 24))
|
||||
self.setMinimumWidth(300)
|
||||
|
||||
model = QStandardItemModel(self)
|
||||
self.setModel(model)
|
||||
self.item_model = QStandardItemModel(self)
|
||||
self.setModel(self.item_model)
|
||||
|
||||
self.selectionModel().setCurrentIndex(
|
||||
model.index(0, 0), QItemSelectionModel.Select
|
||||
self.item_model.index(0, 0), QItemSelectionModel.Select
|
||||
)
|
||||
self.selectionModel().selectionChanged.connect(self.on_selection_changed)
|
||||
for aircraft in air_wing.squadrons:
|
||||
aircraft_item = QStandardItem(aircraft.name)
|
||||
icon = self.icon_for(aircraft)
|
||||
if icon is not None:
|
||||
aircraft_item.setIcon(icon)
|
||||
aircraft_item.setEditable(False)
|
||||
aircraft_item.setSelectable(True)
|
||||
model.appendRow(aircraft_item)
|
||||
self.add_aircraft_type(aircraft)
|
||||
|
||||
def remove_aircraft_type(self, aircraft: AircraftType):
|
||||
for item in self.item_model.findItems(aircraft.name):
|
||||
self.item_model.removeRow(item.row())
|
||||
self.page_index_changed.emit(self.selectionModel().currentIndex().row())
|
||||
|
||||
def add_aircraft_type(self, aircraft: AircraftType):
|
||||
aircraft_item = QStandardItem(aircraft.name)
|
||||
icon = self.icon_for(aircraft)
|
||||
if icon is not None:
|
||||
aircraft_item.setIcon(icon)
|
||||
aircraft_item.setEditable(False)
|
||||
aircraft_item.setSelectable(True)
|
||||
self.item_model.appendRow(aircraft_item)
|
||||
|
||||
def on_selection_changed(
|
||||
self, selected: QItemSelection, _deselected: QItemSelection
|
||||
@@ -270,25 +370,70 @@ class AircraftTypeList(QListView):
|
||||
|
||||
|
||||
class AirWingConfigurationTab(QWidget):
|
||||
def __init__(self, air_wing: AirWing, theater: ConflictTheater) -> None:
|
||||
def __init__(self, coalition: Coalition, game: Game) -> None:
|
||||
super().__init__()
|
||||
|
||||
layout = QHBoxLayout()
|
||||
layout = QGridLayout()
|
||||
self.setLayout(layout)
|
||||
self.game = game
|
||||
self.coalition = coalition
|
||||
|
||||
type_list = AircraftTypeList(air_wing)
|
||||
type_list.page_index_changed.connect(self.on_aircraft_changed)
|
||||
layout.addWidget(type_list)
|
||||
self.type_list = AircraftTypeList(coalition.air_wing)
|
||||
|
||||
self.squadrons_panel = AircraftSquadronsPanel(air_wing, theater)
|
||||
layout.addLayout(self.squadrons_panel)
|
||||
layout.addWidget(self.type_list, 1, 1, 1, 2)
|
||||
|
||||
add_button = QPushButton("Add Squadron")
|
||||
add_button.clicked.connect(lambda state: self.add_squadron())
|
||||
layout.addWidget(add_button, 2, 1, 1, 1)
|
||||
|
||||
self.squadrons_panel = AircraftSquadronsPanel(coalition.air_wing, game.theater)
|
||||
self.squadrons_panel.page_removed.connect(self.type_list.remove_aircraft_type)
|
||||
layout.addLayout(self.squadrons_panel, 1, 3, 2, 1)
|
||||
|
||||
self.type_list.page_index_changed.connect(self.squadrons_panel.setCurrentIndex)
|
||||
|
||||
def add_squadron(self) -> None:
|
||||
selected_aircraft = None
|
||||
if self.type_list.selectionModel().currentIndex().row() >= 0:
|
||||
selected_aircraft = self.type_list.item_model.item(
|
||||
self.type_list.selectionModel().currentIndex().row()
|
||||
).text()
|
||||
|
||||
popup = SquadronConfigPopup(
|
||||
selected_aircraft,
|
||||
self.coalition.faction.aircrafts,
|
||||
list(self.game.theater.control_points_for(self.coalition.player)),
|
||||
self.coalition.air_wing.squadron_defs,
|
||||
)
|
||||
if popup.exec_() != QDialog.Accepted:
|
||||
return
|
||||
|
||||
selected_type = popup.aircraft_type_selector.currentData()
|
||||
selected_base = popup.squadron_base_selector.currentData()
|
||||
selected_def = popup.squadron_def_selector.currentData()
|
||||
|
||||
# Let user choose the preset or generate one
|
||||
squadron_def = (
|
||||
selected_def
|
||||
or self.coalition.air_wing.squadron_def_generator.generate_for_aircraft(
|
||||
selected_type
|
||||
)
|
||||
)
|
||||
|
||||
squadron = Squadron.create_from(
|
||||
squadron_def, selected_base, self.coalition, self.game
|
||||
)
|
||||
|
||||
# Add Squadron
|
||||
if not self.type_list.item_model.findItems(selected_type.name):
|
||||
self.type_list.add_aircraft_type(selected_type)
|
||||
# TODO Select the newly added type
|
||||
self.squadrons_panel.add_squadron_to_panel(squadron)
|
||||
self.update()
|
||||
|
||||
def apply(self) -> None:
|
||||
self.squadrons_panel.apply()
|
||||
|
||||
def on_aircraft_changed(self, index: QModelIndex) -> None:
|
||||
self.squadrons_panel.setCurrentIndex(index)
|
||||
|
||||
|
||||
class AirWingConfigurationDialog(QDialog):
|
||||
"""Dialog window for air wing configuration."""
|
||||
@@ -302,22 +447,13 @@ class AirWingConfigurationDialog(QDialog):
|
||||
layout = QVBoxLayout()
|
||||
self.setLayout(layout)
|
||||
|
||||
doc_url = (
|
||||
"https://github.com/dcs-liberation/dcs_liberation/wiki/Squadrons-and-pilots"
|
||||
)
|
||||
doc_label = QLabel(
|
||||
"Use this opportunity to customize the squadrons available to your "
|
||||
"coalition. <strong>This is your only opportunity to make changes.</strong>"
|
||||
"<br /><br />"
|
||||
"To accept your changes and continue, close this window.<br />"
|
||||
"<br />"
|
||||
"To remove a squadron from the game, uncheck the box in the title. New "
|
||||
"squadrons cannot be added via the UI at this time. To add a custom "
|
||||
"squadron,<br />"
|
||||
f'see <a style="color:#ffffff" href="{doc_url}">the wiki</a>.'
|
||||
"To accept your changes and continue, close this window."
|
||||
)
|
||||
|
||||
doc_label.setOpenExternalLinks(True)
|
||||
layout.addWidget(doc_label)
|
||||
|
||||
tab_widget = QTabWidget()
|
||||
@@ -325,7 +461,7 @@ class AirWingConfigurationDialog(QDialog):
|
||||
|
||||
self.tabs = []
|
||||
for coalition in game.coalitions:
|
||||
coalition_tab = AirWingConfigurationTab(coalition.air_wing, game.theater)
|
||||
coalition_tab = AirWingConfigurationTab(coalition, game)
|
||||
name = "Blue" if coalition.player else "Red"
|
||||
tab_widget.addTab(coalition_tab, name)
|
||||
self.tabs.append(coalition_tab)
|
||||
@@ -334,3 +470,104 @@ class AirWingConfigurationDialog(QDialog):
|
||||
for tab in self.tabs:
|
||||
tab.apply()
|
||||
super().reject()
|
||||
|
||||
|
||||
class SquadronAircraftTypeSelector(QComboBox):
|
||||
def __init__(
|
||||
self, types: list[AircraftType], selected_aircraft: Optional[str]
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.setSizeAdjustPolicy(self.AdjustToContents)
|
||||
|
||||
for type in sorted(types, key=lambda type: type.name):
|
||||
self.addItem(type.name, type)
|
||||
|
||||
if selected_aircraft:
|
||||
self.setCurrentText(selected_aircraft)
|
||||
|
||||
|
||||
class SquadronDefSelector(QComboBox):
|
||||
def __init__(
|
||||
self,
|
||||
squadron_defs: dict[AircraftType, list[SquadronDef]],
|
||||
aircraft: Optional[AircraftType],
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.setSizeAdjustPolicy(self.AdjustToContents)
|
||||
self.squadron_defs = squadron_defs
|
||||
self.set_aircraft_type(aircraft)
|
||||
|
||||
def set_aircraft_type(self, aircraft: Optional[AircraftType]):
|
||||
self.clear()
|
||||
self.addItem("None (Random)", None)
|
||||
if aircraft and aircraft in self.squadron_defs:
|
||||
for squadron_def in sorted(
|
||||
self.squadron_defs[aircraft], key=lambda squadron_def: squadron_def.name
|
||||
):
|
||||
if not squadron_def.claimed:
|
||||
squadron_name = squadron_def.name
|
||||
if squadron_def.nickname:
|
||||
squadron_name += " (" + squadron_def.nickname + ")"
|
||||
self.addItem(squadron_name, squadron_def)
|
||||
self.setCurrentText("None (Random)")
|
||||
|
||||
|
||||
class SquadronConfigPopup(QDialog):
|
||||
def __init__(
|
||||
self,
|
||||
selected_aircraft: Optional[str],
|
||||
types: list[AircraftType],
|
||||
bases: list[ControlPoint],
|
||||
squadron_defs: dict[AircraftType, list[SquadronDef]],
|
||||
) -> None:
|
||||
super().__init__()
|
||||
|
||||
self.setWindowTitle(f"Add new Squadron")
|
||||
|
||||
self.column = QVBoxLayout()
|
||||
self.setLayout(self.column)
|
||||
|
||||
self.bases = bases
|
||||
|
||||
self.column.addWidget(QLabel("Aircraft:"))
|
||||
self.aircraft_type_selector = SquadronAircraftTypeSelector(
|
||||
types, selected_aircraft
|
||||
)
|
||||
self.aircraft_type_selector.currentIndexChanged.connect(
|
||||
self.on_aircraft_selection
|
||||
)
|
||||
self.column.addWidget(self.aircraft_type_selector)
|
||||
|
||||
self.column.addWidget(QLabel("Base:"))
|
||||
self.squadron_base_selector = SquadronBaseSelector(
|
||||
bases, None, self.aircraft_type_selector.currentData()
|
||||
)
|
||||
self.column.addWidget(self.squadron_base_selector)
|
||||
|
||||
self.column.addWidget(QLabel("Preset:"))
|
||||
self.squadron_def_selector = SquadronDefSelector(
|
||||
squadron_defs, self.aircraft_type_selector.currentData()
|
||||
)
|
||||
self.column.addWidget(self.squadron_def_selector)
|
||||
|
||||
self.column.addStretch()
|
||||
|
||||
self.button_layout = QHBoxLayout()
|
||||
self.column.addLayout(self.button_layout)
|
||||
|
||||
self.accept_button = QPushButton("Accept")
|
||||
self.accept_button.clicked.connect(lambda state: self.accept())
|
||||
self.button_layout.addWidget(self.accept_button)
|
||||
|
||||
self.cancel_button = QPushButton("Cancel")
|
||||
self.cancel_button.clicked.connect(lambda state: self.reject())
|
||||
self.button_layout.addWidget(self.cancel_button)
|
||||
|
||||
def on_aircraft_selection(self) -> None:
|
||||
self.squadron_base_selector.set_aircraft_type(
|
||||
self.aircraft_type_selector.currentData()
|
||||
)
|
||||
self.squadron_def_selector.set_aircraft_type(
|
||||
self.aircraft_type_selector.currentData()
|
||||
)
|
||||
self.update()
|
||||
|
||||
@@ -170,6 +170,19 @@ class QLiberationWindow(QMainWindow):
|
||||
self.openNotesAction.setIcon(CONST.ICONS["Notes"])
|
||||
self.openNotesAction.triggered.connect(self.showNotesDialog)
|
||||
|
||||
self.enable_game_actions(False)
|
||||
|
||||
def enable_game_actions(self, enabled: bool):
|
||||
self.openSettingsAction.setVisible(enabled)
|
||||
self.openStatsAction.setVisible(enabled)
|
||||
self.openNotesAction.setVisible(enabled)
|
||||
|
||||
# Also Disable SaveAction to prevent Keyboard Shortcut
|
||||
self.saveGameAction.setEnabled(enabled)
|
||||
self.saveGameAction.setVisible(enabled)
|
||||
self.saveAsAction.setEnabled(enabled)
|
||||
self.saveAsAction.setVisible(enabled)
|
||||
|
||||
def initToolbar(self):
|
||||
self.tool_bar = self.addToolBar("File")
|
||||
self.tool_bar.addAction(self.newGameAction)
|
||||
@@ -328,6 +341,8 @@ class QLiberationWindow(QMainWindow):
|
||||
QMessageBox.Ok,
|
||||
)
|
||||
GameUpdateSignal.get_instance().updateGame(None)
|
||||
finally:
|
||||
self.enable_game_actions(self.game is not None)
|
||||
|
||||
def showAboutDialog(self):
|
||||
text = (
|
||||
|
||||
@@ -245,6 +245,8 @@ class QBaseMenu2(QDialog):
|
||||
return "./resources/ui/carrier.png"
|
||||
elif self.cp.cptype == ControlPointType.LHA_GROUP:
|
||||
return "./resources/ui/lha.png"
|
||||
elif self.cp.cptype == ControlPointType.FOB and self.cp.has_helipads:
|
||||
return "./resources/ui/heliport.png"
|
||||
elif self.cp.cptype == ControlPointType.FOB:
|
||||
return "./resources/ui/fob.png"
|
||||
else:
|
||||
|
||||
@@ -2,27 +2,27 @@ from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from enum import Enum
|
||||
from typing import TypeVar, Generic
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
from PySide2.QtCore import Qt
|
||||
from PySide2.QtWidgets import (
|
||||
QApplication,
|
||||
QFrame,
|
||||
QGridLayout,
|
||||
QGroupBox,
|
||||
QHBoxLayout,
|
||||
QLabel,
|
||||
QLayout,
|
||||
QMessageBox,
|
||||
QPushButton,
|
||||
QSizePolicy,
|
||||
QSpacerItem,
|
||||
QGridLayout,
|
||||
QApplication,
|
||||
QFrame,
|
||||
QMessageBox,
|
||||
)
|
||||
|
||||
from game.dcs.unittype import UnitType
|
||||
from game.purchaseadapter import PurchaseAdapter, TransactionError
|
||||
from qt_ui.models import GameModel
|
||||
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
|
||||
from qt_ui.windows.QUnitInfoWindow import QUnitInfoWindow
|
||||
from game.purchaseadapter import PurchaseAdapter, TransactionError
|
||||
|
||||
|
||||
class RecruitType(Enum):
|
||||
@@ -153,6 +153,7 @@ class UnitTransactionFrame(QFrame, Generic[TransactionItemType]):
|
||||
exist.setMaximumHeight(72)
|
||||
exist.setMinimumHeight(36)
|
||||
existLayout = QHBoxLayout()
|
||||
existLayout.setSizeConstraint(QLayout.SetMinimumSize)
|
||||
exist.setLayout(existLayout)
|
||||
|
||||
existing_units = self.current_quantity_of(item)
|
||||
@@ -229,25 +230,23 @@ class UnitTransactionFrame(QFrame, Generic[TransactionItemType]):
|
||||
self.update_purchase_controls()
|
||||
self.update_available_budget()
|
||||
|
||||
def buy(self, item: TransactionItemType, quantity: int) -> bool:
|
||||
def buy(self, item: TransactionItemType, quantity: int) -> None:
|
||||
try:
|
||||
self.purchase_adapter.buy(item, quantity)
|
||||
except TransactionError as ex:
|
||||
logging.exception(f"Purchase of {self.display_name_of(item)} failed")
|
||||
QMessageBox.warning(self, "Purchase failed", str(ex), QMessageBox.Ok)
|
||||
return False
|
||||
self.post_transaction_update()
|
||||
return True
|
||||
finally:
|
||||
self.post_transaction_update()
|
||||
|
||||
def sell(self, item: TransactionItemType, quantity: int) -> bool:
|
||||
def sell(self, item: TransactionItemType, quantity: int) -> None:
|
||||
try:
|
||||
self.purchase_adapter.sell(item, quantity)
|
||||
except TransactionError as ex:
|
||||
logging.exception(f"Sale of {self.display_name_of(item)} failed")
|
||||
QMessageBox.warning(self, "Sale failed", str(ex), QMessageBox.Ok)
|
||||
return False
|
||||
self.post_transaction_update()
|
||||
return True
|
||||
finally:
|
||||
self.post_transaction_update()
|
||||
|
||||
def update_purchase_controls(self) -> None:
|
||||
for group in self.purchase_groups.values():
|
||||
|
||||
@@ -5,17 +5,17 @@ from datetime import timedelta
|
||||
from typing import List
|
||||
|
||||
from PySide2 import QtGui, QtWidgets
|
||||
from PySide2.QtCore import QItemSelectionModel, QPoint, Qt, QDate
|
||||
from PySide2.QtWidgets import QVBoxLayout, QTextEdit, QLabel, QCheckBox
|
||||
from PySide2.QtCore import QDate, QItemSelectionModel, QPoint, Qt
|
||||
from PySide2.QtWidgets import QCheckBox, QLabel, QTextEdit, QVBoxLayout
|
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
||||
|
||||
from game import db
|
||||
from game.campaignloader.campaign import Campaign
|
||||
from game.factions.faction import Faction
|
||||
from game.settings import Settings
|
||||
from game.theater.start_generator import GameGenerator, GeneratorSettings, ModSettings
|
||||
from game.factions.faction import Faction
|
||||
from qt_ui.widgets.QLiberationCalendar import QLiberationCalendar
|
||||
from qt_ui.widgets.spinsliders import FloatSpinSlider, TimeInputs, CurrencySpinner
|
||||
from qt_ui.widgets.spinsliders import CurrencySpinner, FloatSpinSlider, TimeInputs
|
||||
from qt_ui.windows.AirWingConfigurationDialog import AirWingConfigurationDialog
|
||||
from qt_ui.windows.newgame.QCampaignList import QCampaignList
|
||||
|
||||
@@ -105,6 +105,7 @@ class NewGameWizard(QtWidgets.QWizard):
|
||||
mod_settings = ModSettings(
|
||||
a4_skyhawk=self.field("a4_skyhawk"),
|
||||
f22_raptor=self.field("f22_raptor"),
|
||||
f104_starfighter=self.field("f104_starfighter"),
|
||||
hercules=self.field("hercules"),
|
||||
jas39_gripen=self.field("jas39_gripen"),
|
||||
su57_felon=self.field("su57_felon"),
|
||||
@@ -472,11 +473,12 @@ class DifficultyAndAutomationOptions(QtWidgets.QWizardPage):
|
||||
economy_layout = QtWidgets.QVBoxLayout()
|
||||
economy_group.setLayout(economy_layout)
|
||||
|
||||
# TODO: Put labels back.
|
||||
economy_layout.addWidget(QLabel("Player income multiplier"))
|
||||
player_income = FloatSpinSlider(0, 5, 1, divisor=10)
|
||||
self.registerField("player_income_multiplier", player_income.spinner)
|
||||
economy_layout.addLayout(player_income)
|
||||
|
||||
economy_layout.addWidget(QLabel("Enemy income multiplier"))
|
||||
enemy_income = FloatSpinSlider(0, 5, 1, divisor=10)
|
||||
self.registerField("enemy_income_multiplier", enemy_income.spinner)
|
||||
economy_layout.addLayout(enemy_income)
|
||||
@@ -563,6 +565,8 @@ class GeneratorOptions(QtWidgets.QWizardPage):
|
||||
self.registerField("hercules", hercules)
|
||||
f22_raptor = QtWidgets.QCheckBox()
|
||||
self.registerField("f22_raptor", f22_raptor)
|
||||
f104_starfighter = QtWidgets.QCheckBox()
|
||||
self.registerField("f104_starfighter", f104_starfighter)
|
||||
jas39_gripen = QtWidgets.QCheckBox()
|
||||
self.registerField("jas39_gripen", jas39_gripen)
|
||||
su57_felon = QtWidgets.QCheckBox()
|
||||
@@ -582,16 +586,18 @@ class GeneratorOptions(QtWidgets.QWizardPage):
|
||||
modLayout.addWidget(a4_skyhawk, 1, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("F-22A Raptor"), 2, 0)
|
||||
modLayout.addWidget(f22_raptor, 2, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("C-130J-30 Super Hercules"), 3, 0)
|
||||
modLayout.addWidget(hercules, 3, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("JAS 39 Gripen"), 4, 0)
|
||||
modLayout.addWidget(jas39_gripen, 4, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("Su-57 Felon"), 5, 0)
|
||||
modLayout.addWidget(su57_felon, 5, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("Frenchpack"), 6, 0)
|
||||
modLayout.addWidget(frenchpack, 6, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("High Digit SAMs"), 7, 0)
|
||||
modLayout.addWidget(high_digit_sams, 7, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("F-104 Starfighter"), 3, 0)
|
||||
modLayout.addWidget(f104_starfighter, 3, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("C-130J-30 Super Hercules"), 4, 0)
|
||||
modLayout.addWidget(hercules, 4, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("JAS 39 Gripen"), 5, 0)
|
||||
modLayout.addWidget(jas39_gripen, 5, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("Su-57 Felon"), 6, 0)
|
||||
modLayout.addWidget(su57_felon, 6, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("Frenchpack"), 7, 0)
|
||||
modLayout.addWidget(frenchpack, 7, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("High Digit SAMs"), 8, 0)
|
||||
modLayout.addWidget(high_digit_sams, 8, 1)
|
||||
modSettingsGroup.setLayout(modLayout)
|
||||
|
||||
mlayout = QVBoxLayout()
|
||||
|
||||
@@ -24,7 +24,7 @@ Pillow==8.3.2
|
||||
pluggy==0.13.1
|
||||
pre-commit==2.10.1
|
||||
py==1.10.0
|
||||
-e git://github.com/pydcs/dcs@c06f6bc1a842f890c88e7ccbcb14af5ae32c9cfd#egg=pydcs
|
||||
-e git://github.com/pydcs/dcs@92e3046d476781bd617a6c1abd6853cccf97d57c#egg=pydcs
|
||||
pyinstaller==4.3
|
||||
pyinstaller-hooks-contrib==2021.1
|
||||
pyparsing==2.4.7
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Persian Gulf - Battle for the UAE",
|
||||
"theater": "Persian Gulf",
|
||||
"authors": "Mustang25",
|
||||
"recommended_player_faction": "Bluefor Modern",
|
||||
"recommended_enemy_faction": "Iran 2015",
|
||||
"description": "<p>Following the Battle of Abu Dhabi, Iran's invasion of the UAE has been halted approximately 20 miles Northeast of Liwa Airbase by coalition forces.</p><p>After weeks of stalemate, coalition forces have consolidated their position and are ready to launch their counterattack to push Iranian forces off the peninsula.</p>",
|
||||
"version": "8.0",
|
||||
"miz": "Battle_for_the_UAE_v3.0.2.miz",
|
||||
"performance": 2
|
||||
}
|
||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Caucasus - Full",
|
||||
"theater": "Caucasus",
|
||||
"authors": "Doc_of_Mur",
|
||||
"recommended_player_faction": "Bluefor Modern",
|
||||
"recommended_enemy_faction": "Russia 2010",
|
||||
"description": "<p>This is a complete map of every airbase in the Caucasus Region, all bases are fully defended by Air, Land and/or Sea. The player starts by invading southern Georgia and works their way through Russia. The Strike and SAM targets are limited for performance reasons. If this Scenario is too taxing for your computer you may use the Multi-Part Scenarios. They are copied from this Campaign and are catered toward less powerful machines.</p>",
|
||||
"version": "8.0",
|
||||
"miz": "Caucasus_Multi_Full.miz",
|
||||
"performance": 3
|
||||
}
|
||||
323
resources/campaigns/Caucasus_Multi_Full.yaml
Normal file
323
resources/campaigns/Caucasus_Multi_Full.yaml
Normal file
@@ -0,0 +1,323 @@
|
||||
---
|
||||
name: Caucasus - Full
|
||||
theater: Caucasus
|
||||
authors: Doc_of_Mur
|
||||
description: <p>This is a complete map of every airbase in the Caucasus Region, all bases are fully defended by Air, Land and/or Sea. The player starts by invading southern Georgia and works their way through Russia. The Strike and SAM targets are limited for performance reasons. If this Scenario is too taxing for your computer you may use the Multi-Part Scenarios. They are copied from this Campaign and are catered toward less powerful machines.</p>
|
||||
recommended_player_faction: Bluefor Modern
|
||||
recommended_enemy_faction: Russia 2010
|
||||
recommended_start_date: 2008-08-01
|
||||
miz: Caucasus_Multi_Full.miz
|
||||
performance: 3
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Anapa-Vityazevo
|
||||
12:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Tu-160 Blackjack
|
||||
# Krasnodar-Center
|
||||
13:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-31 Foxhound
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
# Novorossiysk
|
||||
14:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
# Krymsk
|
||||
15:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
# Maykop-Khanskaya
|
||||
16:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- Su-24M Fencer-D
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Mi-24V Hind-E
|
||||
# Gelendzhik
|
||||
17:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
- primary: Transport
|
||||
# Sochi-Adler
|
||||
18:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
- primary: Anti-ship
|
||||
secondary: air-to-ground
|
||||
# Sukhumi-Babushara
|
||||
20:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
# Gudauta
|
||||
21:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
# Batumi
|
||||
22:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- UH-60A
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-2D Advanced Hawkeye
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- C-130
|
||||
# Senaki-Kholki
|
||||
23:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
- primary: Transport
|
||||
# Kobuleti
|
||||
24:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- UH-60A
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
# Kutaisi
|
||||
25:
|
||||
- primary: BARCAP
|
||||
- primary: AEW&C
|
||||
- primary: Refueling
|
||||
- primary: Transport
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
# Mineralnye Vody
|
||||
26:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-31 Foxhound
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
# Nalchik
|
||||
27:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
- primary: Transport
|
||||
# Mozdok
|
||||
28:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Tu-160 Blackjack
|
||||
# Tbilisi-Lochini
|
||||
29:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Tu-160 Blackjack
|
||||
# Beslan
|
||||
32:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Mi-24V Hind-E
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Mi-24V Hind-E
|
||||
# Blue CV
|
||||
Naval-5:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- S-3B Tanker
|
||||
# Blue LHA
|
||||
Naval-4:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- UH-1H Iroquois
|
||||
# Red CV
|
||||
Naval-1:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
- primary: Refueling
|
||||
# Red LHA
|
||||
Naval-2:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Caucasus - Multi-Part Georgia",
|
||||
"theater": "Caucasus",
|
||||
"authors": "Doc_of_Mur",
|
||||
"recommended_player_faction": "Bluefor Modern",
|
||||
"recommended_enemy_faction": "Georgia 2008",
|
||||
"description": "<p>This is Part 1 of the Caucasus Multi-Part Campaign. This is the invasion of Georgia starting from the southwest (Batumi) and ending in both Gudauta and Tiblisi. This is a straightforward campaign that is smaller and simpler than most. However, it acts great as either a stand alone campaign for beginners, or as a lead into the Caucasus Multi-Part Russia campaign.</p>",
|
||||
"version": "8.0",
|
||||
"miz": "Caucasus_Multi_Georgia.miz",
|
||||
"performance": 1
|
||||
}
|
||||
Binary file not shown.
185
resources/campaigns/Caucasus_Multi_Georgia.yaml
Normal file
185
resources/campaigns/Caucasus_Multi_Georgia.yaml
Normal file
@@ -0,0 +1,185 @@
|
||||
---
|
||||
name: Caucasus - Muti-Part Georgia
|
||||
theater: Caucasus
|
||||
authors: Doc_of_Mur
|
||||
description: <p><p>This is part 2 of the Caucasus Multi-part campaign. After completing Multi-Part Georgia, play this campaign to invade Russia and finish the theater. As this is now Russia the recommended enemy faction has changed. To simulate still owning Georgia the player income has been supplemented through an increased number of blue strike targets at the starting bases. This is a more difficult scenario with a higher concentration of Redfor SAMs and Strike targets than usual.</p>
|
||||
recommended_player_faction: Bluefor Modern
|
||||
recommended_enemy_faction: Georgia 2008
|
||||
recommended_start_date: 1995-06-13
|
||||
miz: Caucasus_Multi_Georgia.miz
|
||||
performance: 2
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Kutaisi
|
||||
22:
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
- primary: Transport
|
||||
secondary: any
|
||||
aircraft:
|
||||
- C-130
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AH-64D Apache Longbow
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- JF-17 Thunder
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Ka-50 Hokum
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- AJS-37 Viggen
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Mirage 2000C
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- UH-1H Iroquois
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
|
||||
# Kobuleti
|
||||
24:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- L-39ZA Albatros
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
|
||||
# Senaki-Kolkhi
|
||||
23:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- L-39ZA Albatros
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- UH-1H Iroquois
|
||||
|
||||
# Kataisi
|
||||
25:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- L-39ZA Albatros
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
|
||||
# Sukhumi-Babushara
|
||||
20:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- L-39ZA Albatros
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
|
||||
# Gudauta
|
||||
21:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- L-39ZA Albatros
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: OCA/Runway
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
|
||||
Blue CV:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- S-3B Tanker
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-2C Hawkeye
|
||||
Blue LHA:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Caucasus - Multi-Part Russia",
|
||||
"theater": "Caucasus",
|
||||
"authors": "Doc_of_Mur",
|
||||
"recommended_player_faction": "Bluefor Modern",
|
||||
"recommended_enemy_faction": "Russia 2010",
|
||||
"description": "<p>This is part 2 of the Caucasus Multi-part campaign. After completing Multi-Part Georgia, play this campaign to invade Russia and finish the theater. As this is now Russia the recommended enemy faction has changed. To simulate still owning Georgia the player income has been supplemented through an increased number of blue strike targets at the starting bases. This is a more difficult scenario with a higher concentration of Redfor SAMs and Strike targets than usual.</p>",
|
||||
"version": "8.0",
|
||||
"miz": "Caucasus_Multi_Russia.miz",
|
||||
"performance": 2
|
||||
}
|
||||
269
resources/campaigns/Caucasus_Multi_Russia.yaml
Normal file
269
resources/campaigns/Caucasus_Multi_Russia.yaml
Normal file
@@ -0,0 +1,269 @@
|
||||
---
|
||||
name: Caucasus - Multi-Part Russia
|
||||
theater: Caucasus
|
||||
authors: Doc_of_Mur
|
||||
description: <p>This is part 2 of the Caucasus Multi-part campaign. After completing Multi-Part Georgia, play this campaign to invade Russia and finish the theater. As this is now Russia the recommended enemy faction has changed. To simulate still owning Georgia the player income has been supplemented through an increased number of blue strike targets at the starting bases. This is a more difficult scenario with a higher concentration of Redfor SAMs and Strike targets than usual.</p>
|
||||
recommended_player_faction: Bluefor Modern
|
||||
recommended_enemy_faction: Russia 2010
|
||||
recommended_start_date: 2008-08-01
|
||||
miz: Caucasus_Multi_Russia.miz
|
||||
performance: 2
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Anapa-Vityazevo
|
||||
12:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Tu-160 Blackjack
|
||||
# Krasnodar-Center
|
||||
13:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-31 Foxhound
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
# Novorossiysk
|
||||
14:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
# Krymsk
|
||||
15:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
# Maykop-Khanskaya
|
||||
16:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- Su-24M Fencer-D
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Mi-24V Hind-E
|
||||
# Gelendzhik
|
||||
17:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
- primary: Transport
|
||||
# Sochi-Adler
|
||||
18:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
- primary: Anti-ship
|
||||
secondary: air-to-ground
|
||||
# Gudauta
|
||||
21:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- UH-60A
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-2D Advanced Hawkeye
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- C-130
|
||||
# Mineralnye Vody
|
||||
26:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-31 Foxhound
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
# Nalchik
|
||||
27:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
- primary: Transport
|
||||
# Mozdok
|
||||
28:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- Su-27 Flanker-B
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Tu-160 Blackjack
|
||||
# Tbilisi-Lochini
|
||||
29:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- UH-60A
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
# Beslan
|
||||
32:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Mi-24V Hind-E
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Mi-24V Hind-E
|
||||
# Blue CV
|
||||
Naval-5:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- S-3B Tanker
|
||||
# Blue LHA
|
||||
Naval-4:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- UH-1H Iroquois
|
||||
# Red CV
|
||||
Naval-1:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
- primary: Refueling
|
||||
# Red LHA
|
||||
Naval-2:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Syria - First Lebanon War",
|
||||
"theater": "Syria",
|
||||
"authors": "Mustang25",
|
||||
"recommended_player_faction": "Israel 1982",
|
||||
"recommended_enemy_faction": "Syria 1982",
|
||||
"description": "<p> 1100HRS, 06 June 1982: H-hour for Operation Peace for Galilee. </p><p>Objective: Push North towards Beirut and into the Bekaa Valley, eliminating or displacing any PLO and Syrian resistance. Airbases and their surrounding infrastructure in Syria are not the main objective but are still viable strategic targets.</p> <p>Background: Years of PLO encroachment into the UN neutral zone and their resulting terror attacks against Israelis have pushed tension along the border to a breaking point. On June 3, the attempted assassination of Israeli Ambassador, Shlomo Argov by gunmen with ties to the PLO have finally pushed the Israelis to action.</p><p>Recommended Starting Budget:</p><p>$1500m for recommended factions, $$2000m for modern scenarios</p><p>Income Multiplier:</p><p>Blue: 1.0x</p><p>Red: 0.7x-1.0x</p>",
|
||||
"miz": "First_Lebanon_War_v3.0.2.miz",
|
||||
"version": "8.0",
|
||||
"performance": 2
|
||||
}
|
||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Syria - Operation Mole Cricket 2010",
|
||||
"theater": "Syria",
|
||||
"authors": "Mustang25",
|
||||
"recommended_player_faction": "Bluefor Modern",
|
||||
"recommended_enemy_faction": "Syria 2011",
|
||||
"description": "<p>In a scenario reminescent of the First Lebanon War, hostile Syrian-backed forces have flooded into the Bekaa Valley.</p><p>The objective of this operation is twofold: drive the enemy out of the Bekaa Valley and push past the Golan Heights into Syrian territory to capture Tiyas Airbase.</p>",
|
||||
"version": "8.0",
|
||||
"miz": "Operation_Mole_Cricket_2010_v3.0.2.miz",
|
||||
"performance": 2
|
||||
}
|
||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Persian Gulf - Road To Dubai",
|
||||
"theater": "Persian Gulf",
|
||||
"authors": "Doc_of_Mur",
|
||||
"description": "<p>Small beginner friendly map</p><p><strong>Note:</strong> This scenario is based around Iran invading the UAE and you are trying to take it back. It is small and beginner friendly.</p>",
|
||||
"version": "8.0",
|
||||
"recommended_player_faction": "USA 2005",
|
||||
"recommended_enemy_faction": "Iran 2015",
|
||||
"miz": "Road_to_Dubai.miz",
|
||||
"performance": 1
|
||||
}
|
||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Caucasus - Around The Mountain",
|
||||
"theater": "Caucasus",
|
||||
"authors": "Dillie",
|
||||
"recommended_player_faction": "Russia 2010",
|
||||
"recommended_enemy_faction": "USA 1990",
|
||||
"description": "<p>Scenario from Russia to Georgia in two Frontlines.</p>",
|
||||
"version": "8.0",
|
||||
"miz": "around_the_mountain.miz",
|
||||
"performance": 2
|
||||
}
|
||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Normandy - From Caen to Evreux",
|
||||
"theater": "Normandy",
|
||||
"authors": "Khopa",
|
||||
"recommended_player_faction": "Allies 1944",
|
||||
"recommended_enemy_faction": "Germany 1944",
|
||||
"description": "<p>This is a light scenario on the Normandy map.</p><p>August 1944, allied forces are pushing from Caen/Carpiquet to the cities of Lisieux and Evreux.<p>Lisieux is an important logistic hub for the Werhmacht, and Evreux airbase is hosting most of the Luftwaffe forces in the region.</p>",
|
||||
"miz": "caen_to_evreux.miz",
|
||||
"performance": 1,
|
||||
"version": "8.0"
|
||||
}
|
||||
Binary file not shown.
96
resources/campaigns/caen_to_evreux.yaml
Normal file
96
resources/campaigns/caen_to_evreux.yaml
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
name: Normandy - From Caen to Evreux
|
||||
theater: Normandy
|
||||
authors: Khopa
|
||||
description: <p>This is a light scenario on the Normandy map.</p><p>August 1944, allied forces are pushing from Caen/Carpiquet to the cities of Lisieux and Evreux.<p>Lisieux is an important logistic hub for the Werhmacht, and Evreux airbase is hosting most of the Luftwaffe forces in the region.</p>
|
||||
recommended_player_faction: Allies 1944
|
||||
recommended_enemy_faction: Germany 1944
|
||||
recommended_start_date: 1944-07-04
|
||||
miz: caen_to_evreux.miz
|
||||
performance: 1
|
||||
version: "9.0"
|
||||
squadrons:
|
||||
# Evreux
|
||||
26:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Bf 109 K-4 Kurf\u00fcrst
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Fw 190 A-8 Anton
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Fw 190 D-9 Dora
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Ju 88 A-4
|
||||
- primary: AEW&C
|
||||
- primary: Refueling
|
||||
- primary: Transport
|
||||
# Conches
|
||||
40:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Bf 109 K-4 Kurf\u00fcrst
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Fw 190 A-8 Anton
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Fw 190 D-9 Dora
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
# Carpiquet
|
||||
19:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Thunderbolt Mk.II (Late)
|
||||
- P-47D-40 Thunderbolt
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Mustang Mk.IV (Late)
|
||||
- P-51D-30-NA Mustang
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Spitfire LF Mk IX
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Spitfire LF Mk IX (Clipped Wings)
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- MosquitoFBMkVI
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
# Ford_AF
|
||||
31:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Thunderbolt Mk.II (Mid)
|
||||
- P-47D-30 Thunderbolt (Late)
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Thunderbolt Mk.II (Early)
|
||||
- P-47D-30 Thunderbolt (Early)
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- Mustang Mk.IV (Early)
|
||||
- P-51D-25-NA Mustang
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Boston Mk.III
|
||||
- A-20G Havoc
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Fortress Mk.III
|
||||
- B-17G Flying Fortress
|
||||
- primary: AEW&C
|
||||
- primary: Refueling
|
||||
- primary: Transport
|
||||
@@ -7,7 +7,8 @@ recommended_enemy_faction: Redfor (China) 2010
|
||||
description: <p>This is an asymmetrical Red Flag Exercise scenario for the NTTR comprising 4 control points. You start off in control of the two Tonopah airports, and will push south to capture Groom Lake and Nellis AFBs. Taking down Nellis AFB's IADS and striking their resource sites ASAP once Groom Lake has been captured is recommended to offset their substantial resource advantage.</p>
|
||||
miz: exercise_vegas_nerve.miz
|
||||
performance: 1
|
||||
version: "9.0"
|
||||
recommended_start_date: 2011-04-24
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Tonopah Airport
|
||||
17:
|
||||
@@ -22,16 +23,19 @@ squadrons:
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- CH-47D
|
||||
- C-130
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle
|
||||
# Tonopah Test Range
|
||||
18:
|
||||
- primary: CAS
|
||||
@@ -53,43 +57,23 @@ squadrons:
|
||||
# Groom Lake
|
||||
2:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- J-11A Flanker-L
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25T Frogfoot
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Su-30MKK Flanker-G
|
||||
- J-11A Flanker-L
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
# Nellis AFB
|
||||
4:
|
||||
- primary: TARCAP
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-15 Flanker X-2
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- FC-1 Fierce Dragon
|
||||
- Su-30MKK Flanker-G
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24M Fencer-D
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Tu-22M3 Backfire-C
|
||||
- H-6J Badger
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- KJ-2000
|
||||
@@ -98,4 +82,4 @@ squadrons:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- IL-76MD
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Syria - Humble Helper",
|
||||
"theater": "Syria",
|
||||
"authors": "Headiii",
|
||||
"recommended_player_faction": "Israel 2012'ish",
|
||||
"recommended_enemy_faction": "Syria 2012'ish",
|
||||
"description": "<p>In this scenario, you start in Israel in an high intensity conflict with Syria, backed by a Russian Expeditiary Force. Your goal is to take the heavily fortified city of Damascus, as fast as you can. The longer you wait, the more resources the enemy can pump into the defense of the city or even might try to take chunks of Israel. ATTENTION: CAMPAIGN INVERTING IS NOT YET IMPLEMENTED!!! Feedback: @Headiii in the DCSLiberation Discord</p>",
|
||||
"miz": "humble_helper.miz",
|
||||
"performance": 1,
|
||||
"version": "8.0"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,7 @@ theater: MarianaIslands
|
||||
authors: Ghosti
|
||||
description: <p>The objective of this campaign is the capture of Guam. Blue side, having landed their forces on the beaches of Agat, controls Antonio B. Won Pat airfield and are pushing towards the enemy stronghold of Mount Barrigada.</p>
|
||||
miz: marianas_guam_barrigada.miz
|
||||
performance: 3,
|
||||
performance: 2
|
||||
version: "9.0"
|
||||
squadrons:
|
||||
Blue CV:
|
||||
@@ -59,10 +59,15 @@ squadrons:
|
||||
secondary: air-to-air
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
- primary: Anti-ship
|
||||
secondary: any
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: AEW&C
|
||||
- primary: Refueling
|
||||
- primary: Transport
|
||||
# Antonio B. Won Pat Intl
|
||||
4:
|
||||
- primary: BARCAP
|
||||
@@ -71,6 +76,8 @@ squadrons:
|
||||
secondary: air-to-air
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
- primary: Anti-ship
|
||||
secondary: any
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
- primary: CAS
|
||||
|
||||
Binary file not shown.
@@ -4,7 +4,7 @@ theater: MarianaIslands
|
||||
authors: Ghosti
|
||||
description: <p>The objective of this campaign is the capture of Guam. Blue side, having landed their forces on the beaches of Agat, are pushing inland. <strong>Note:</strong> This campaign requires a carrier-capable (or LHA-capable) BLUFOR faction to be able to field aircraft.</p>
|
||||
miz: marianas_guam_landing_at_agat.miz
|
||||
performance: 3,
|
||||
performance: 2
|
||||
version: "9.0"
|
||||
squadrons:
|
||||
Blue CV:
|
||||
@@ -59,10 +59,15 @@ squadrons:
|
||||
secondary: air-to-air
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
- primary: Anti-ship
|
||||
secondary: any
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
- primary: AEW&C
|
||||
- primary: Refueling
|
||||
- primary: Transport
|
||||
# Antonio B. Won Pat Intl
|
||||
4:
|
||||
- primary: BARCAP
|
||||
@@ -71,6 +76,8 @@ squadrons:
|
||||
secondary: air-to-air
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
- primary: Anti-ship
|
||||
secondary: any
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
- primary: CAS
|
||||
@@ -80,18 +87,6 @@ squadrons:
|
||||
- primary: AEW&C
|
||||
- primary: Refueling
|
||||
- primary: Transport
|
||||
# Andersen AFB
|
||||
6:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
Andersen AFB Northwest Field:
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Nevada - Limited Air",
|
||||
"theater": "Nevada",
|
||||
"authors": "Doc_of_Mur",
|
||||
"recommended_player_faction": "USA 2005",
|
||||
"recommended_enemy_faction": "Russia 1975",
|
||||
"description": "<p>This campaign is designed to be beginner friendly in that the number of aircraft slot have been limited. Other than the starting point and the 'boss' base the max slots in each of the airbases have a mere 3-5 slots.</p><p>This should prevent the airpower rush escperienced in most of the other larger campaign.</p>",
|
||||
"version": "8.0",
|
||||
"miz": "nevada_limited_air.miz",
|
||||
"performance": 1
|
||||
}
|
||||
Binary file not shown.
@@ -15,6 +15,9 @@ squadrons:
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
@@ -134,6 +137,10 @@ squadrons:
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- MiG-29A Fulcrum-A
|
||||
- primary: OCA/Runway
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24M Fencer-D
|
||||
# Mineralnye Vody
|
||||
26:
|
||||
- primary: BARCAP
|
||||
|
||||
@@ -5,7 +5,7 @@ authors: Fuzzle
|
||||
recommended_player_faction: Israel-USN 2005 (Allied Sword)
|
||||
recommended_enemy_faction: Syria-Lebanon 2005 (Allied Sword)
|
||||
description: <p>In this fictional scenario, a US/Israeli coalition must push north from the Israeli border, through Syria and Lebanon to Aleppo.</p><p><strong>Backstory:</strong> A Syrian-Lebanese joint force (with Russian materiel support) has attacked Israel, attmepting to cross the northern border. With the arrival of a US carrier group, Israel prepares its counterattack. The US Navy will handle the Beirut region's coastal arena, while the IAF will push through Damascus and the inland mountain ranges.</p>,
|
||||
version: 9.1
|
||||
version: "9.1"
|
||||
miz: operation_allied_sword.miz
|
||||
performance: 2
|
||||
recommended_start_date: 2004-07-17
|
||||
@@ -135,7 +135,7 @@ squadrons:
|
||||
aircraft:
|
||||
- SA 342M Gazelle
|
||||
# Palmyra
|
||||
6:
|
||||
28:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
@@ -160,7 +160,7 @@ squadrons:
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-76MD
|
||||
- primary: AEW&C
|
||||
|
||||
@@ -3,7 +3,7 @@ name: Syria - Operation Blackball
|
||||
theater: Syria
|
||||
authors: Fuzzle
|
||||
description: <p>A lightweight fictional showcase of Cyprus for the Syria terrain. A US Navy force must deploy from a FOB and carrier group to push from the north-east down through the island. <strong>Note that the ground units purchased on turn zero must sustain you until you've taken the first hostile FOB. The starting point does not have a factory to simulate a Marine Expeditionary Force deploying from the carrier group.</strong></p><p><strong>Backstory:</strong> The world is at war. With the help of her eastern allies Russia has taken the Suez Canal and deployed a large naval force to the Mediterranean trapping a US carrier group near the Turkish-Syrian border. Now they must break out by taking Cyprus back.</p>
|
||||
version: 9.1
|
||||
version: "9.1"
|
||||
recommended_player_faction: US Navy 2005
|
||||
recommended_enemy_faction: Russia 2010
|
||||
miz: operation_blackball.miz
|
||||
|
||||
@@ -3,11 +3,12 @@ name: Syria - Operation Peace Spring
|
||||
theater: Syria
|
||||
authors: Starfire
|
||||
recommended_player_faction: Bluefor Modern
|
||||
recommended_enemy_faction: Turkey 2005
|
||||
description: <p>This is a semi-fictional what-if scenario for Operation Peace Spring, during which Turkish forces that crossed into Syria on an offensive against Kurdish militias were emboldened by early successes to continue pushing further southward. Attempts to broker a ceasefire have failed. Members of Operation Inherent Resolve have gathered at Ramat David Airbase in Israel to launch a counter-offensive.</p><p><strong>Note:</strong> While Turkey 2005 is the default faction for historical reasons, the OPFOR squadron complement in this campaign scenario has also been specifically customised to work just as well with the Iraq 1991 faction in order to provide an opponent with a wide variety of units.</p>
|
||||
recommended_enemy_faction: Iraq 1991
|
||||
description: <p>This is a semi-fictional what-if scenario for Operation Peace Spring, during which Turkish forces that crossed into Syria on an offensive against Kurdish militias were emboldened by early successes to continue pushing further southward. Attempts to broker a ceasefire have failed. Members of Operation Inherent Resolve have gathered at Ramat David Airbase in Israel to launch a counter-offensive.</p><p><strong>Note:</strong> The default faction is set as Iraq 1991 in order to provide an opponent with a wider variety of units. While Turkey 2005 would be the historical faction, you would be facing nothing in the air except F-4 Phantoms.</p>
|
||||
miz: operation_peace_spring.miz
|
||||
performance: 1
|
||||
version: "9.0"
|
||||
recommended_start_date: 2019-12-23
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Ramat David
|
||||
30:
|
||||
@@ -64,7 +65,10 @@ squadrons:
|
||||
- B-52H Stratofortress
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-2C Hawkeye
|
||||
- E-3A
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
@@ -77,60 +81,60 @@ squadrons:
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-4E Phantom II
|
||||
- MiG-21bis Fishbed-N
|
||||
- MiG-21bis Fishbed-N
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AH-1W SuperCobra
|
||||
- Su-25 Frogfoot
|
||||
# Tiyas
|
||||
39:
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- MiG-23ML Flogger-G
|
||||
- primary: SEAD
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- Su-24M Fencer-D
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AH-1W SuperCobra
|
||||
- Su-25T Frogfoot
|
||||
- Su-25 Frogfoot
|
||||
- primary: Transport
|
||||
secondary: any
|
||||
aircraft:
|
||||
- UH-60A
|
||||
- Mi-8MTV2 Hip
|
||||
# Abu Al Duhur
|
||||
# 1:
|
||||
# Gaziantep
|
||||
# 11:
|
||||
11:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- OH-58D Kiowa Warrior
|
||||
- Mi-24P Hind-F
|
||||
# Incirlik
|
||||
16:
|
||||
- primary: BARCAP
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- MiG-29A Fulcrum-A
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- MiG-29A Fulcrum-A
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-4E Phantom II
|
||||
- Tu-22M3 Backfire-C
|
||||
- primary: CAS
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AH-1W SuperCobra
|
||||
- Su-22M4 Fitter-K
|
||||
- F-4E Phantom II
|
||||
- H-6J Badger
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
- KC-135 Stratotanker
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- C-130
|
||||
- IL-76MD
|
||||
- IL-76MD
|
||||
|
||||
@@ -7,11 +7,12 @@ recommended_enemy_faction: Russia 1990
|
||||
description: <p>United Nations Observer Mission in Georgia (UNOMIG) observers stationed in Georgia to monitor the ceasefire between Georgia and Abkhazia have been cut off from friendly forces by Russian troops backing the separatist state. The UNOMIG HQ at Sukhumi has been taken, and a small contingent of observers and troops at the Zugdidi Sector HQ will have to make a run for the coast, supported by offshore US naval aircraft. The contingent is aware that their best shot at survival is to swiftly retake Sukhumi before Russian forces have a chance to dig in, so that friendly ground forces can land and reinforce them.</p><p><strong>Note:</strong> Ground unit purchase will not be available past Turn 0 until Sukhumi is retaken, so it is imperative you reach Sukhumi with at least one surviving ground unit to capture it. Two Hueys are available at Zugdidi for some close air support. The player can either play the first leg of the scenario as an evacuation with a couple of light vehicles (e.g. Humvees) set on breakthrough (modifying waypoints in the mission editor so they are not charging head-on into enemy ground forces is suggested), or purchase heavier ground units if they wish to experience a more traditional frontline ground war. Once Sukhumi has been captured, squadrons based in Incirlik Turkey can be ferried in via the "From Incirlik" off-map spawn point.</p>
|
||||
miz: operation_vectrons_claw.miz
|
||||
performance: 1
|
||||
version: "9.0"
|
||||
recommended_start_date: 2008-08-08
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
Blue CV:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- F-14A Tomcat (Block 135-GR Late)
|
||||
@@ -24,7 +25,7 @@ squadrons:
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: BAI
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
@@ -64,7 +65,7 @@ squadrons:
|
||||
- E-3A
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
- KC-135 Stratotanker
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- C-130
|
||||
@@ -87,28 +88,16 @@ squadrons:
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25T Frogfoot
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Ka-50 Hokum
|
||||
- Su-24M Fencer-D
|
||||
#Anapa-Vityazevo
|
||||
12:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Su-27 Flanker-B
|
||||
- primary: SEAD
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24M Fencer-D
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Tu-22M3 Backfire-C
|
||||
- Su-25T Frogfoot
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
@@ -123,8 +112,9 @@ squadrons:
|
||||
secondary: any
|
||||
aircraft:
|
||||
- SU-33 Flanker-D
|
||||
# I am aware there is no Russian LHA. This is just for campaign inversion.
|
||||
Red LHA:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- AV-8B Harrier II Night Attack
|
||||
BIN
resources/campaigns/pacific_repartee.miz
Normal file
BIN
resources/campaigns/pacific_repartee.miz
Normal file
Binary file not shown.
137
resources/campaigns/pacific_repartee.yaml
Normal file
137
resources/campaigns/pacific_repartee.yaml
Normal file
@@ -0,0 +1,137 @@
|
||||
---
|
||||
name: Marianas - Pacific Repartee
|
||||
theater: MarianaIslands
|
||||
authors: Fuzzle
|
||||
description: <p>A naval campaign where a US carrier group must retake Guam, Saipan and the Marianas Islands from the Chinese. <strong>This is a purely offensive air campaign, with no frontline gameplay. Upon securing the area around a FOB, you may either ignore it, bomb it to dust or use the cheats to capture it.</strong></p><p><strong>Backstory:</strong> After an escalation in the South China Sea, the PLAN has taken the US by surprise and invaded Guam, setting up supporting positions throughout the Marianas island chain. With the rest of the US Navy engaged near Japan, a carrier task group must push through China's forces, assist a small Marine contingent holding out on Farallon de Pajaros and liberate Guam.</p>
|
||||
version: "9.1"
|
||||
recommended_player_faction: US Navy 2005
|
||||
recommended_enemy_faction: China 2010
|
||||
miz: pacific_repartee.miz
|
||||
performance: 1
|
||||
recommended_start_date: 2006-02-17
|
||||
squadrons:
|
||||
#BLUFOR CVN
|
||||
Naval-1:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- VF-143
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- VMFA-251
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- VMFA-122
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- VAW-125
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- VS-35 (Tanker)
|
||||
- primary: Anti-ship
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- VS-35
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- HSM-40
|
||||
# BLUFOR LHA
|
||||
Naval-2:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- VMA-223
|
||||
- primary: Transport
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- HMLA-169 (UH-1H)
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- HMLA-169 (AH-1W)
|
||||
# OPFOR CVN 1
|
||||
Naval-3:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-15 Flanker X-2
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-15 Flanker X-2
|
||||
# OPFOR CVN 2
|
||||
Naval-4:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-15 Flanker X-2
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-15 Flanker X-2
|
||||
# OPFOR CVN 3
|
||||
Naval-28:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-15 Flanker X-2
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-15 Flanker X-2
|
||||
# OPFOR LHA
|
||||
OPLHA:
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# Saipan Intl
|
||||
2:
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-76MD
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-7B
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- FC-1 Fierce Dragon
|
||||
# Tinian Intl
|
||||
3:
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- KJ-2000
|
||||
# Andersen AFB
|
||||
6:
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-11A Flanker-L
|
||||
- primary: BARCAP
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- FC-1 Fierce Dragon
|
||||
- primary: Anti-ship
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- H-6J Badger
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-76MD
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
# Antonio B. Won Pat Intl
|
||||
4:
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- J-7B
|
||||
- primary: BARCAP
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- FC-1 Fierce Dragon
|
||||
@@ -3,7 +3,7 @@ name: Persian Gulf - Scenic Route
|
||||
theater: Persian Gulf
|
||||
authors: Fuzzle
|
||||
description: <p>A lightweight naval campaign involving a US Navy carrier group pushing across the coast of Iran. <strong>Note that the ground units purchased on turn zero must sustain you until you've taken the first hostile FOB. The starting point does not have a factory to simulate a Marine Expeditionary Force deploying from the carrier group.</strong></p><p><strong>Backstory:</strong> Iran has declared war on all US forces in the Gulf resulting in all local allies withdrawing their support for American troops. A lone carrier group must pacify the southern coast of Iran and hold out until backup can arrive lest the US and her interests be ejected from the region permanently.</p>
|
||||
version: 9.1
|
||||
version: "9.1"
|
||||
recommended_player_faction: US Navy 2005
|
||||
recommended_enemy_faction: Iran 2015
|
||||
miz: scenic_route.miz
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "Syria - Full Map",
|
||||
"theater": "Syria",
|
||||
"authors": "Plob",
|
||||
"recommended_player_faction": "Bluefor Modern",
|
||||
"recommended_enemy_faction": "Syria 2011",
|
||||
"description": "<p>A long campaign across the syria map, strap in.</p></p>Each turn after planning missions, enable culling to ensure correct culling behaviour.</p>",
|
||||
"miz": "syria_full_map.miz",
|
||||
"performance": 3,
|
||||
"version": "8.0"
|
||||
}
|
||||
Binary file not shown.
297
resources/campaigns/syria_full_map.yaml
Normal file
297
resources/campaigns/syria_full_map.yaml
Normal file
@@ -0,0 +1,297 @@
|
||||
---
|
||||
name: Syria - Full Map
|
||||
theater: Syria
|
||||
authors: Plob
|
||||
description: <p><p>A long campaign across the syria map, strap in.</p>
|
||||
recommended_player_faction: Bluefor Modern
|
||||
recommended_enemy_faction: Syria 2012'ish
|
||||
recommended_start_date: 2012-06-05
|
||||
miz: syria_full_map.miz
|
||||
performance: 3
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Incirlik
|
||||
16:
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
- primary: Transport
|
||||
secondary: any
|
||||
aircraft:
|
||||
- C-130
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- JF-17 Thunder
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Ka-50 Hokum
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- AJS-37 Viggen
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- B-52H Stratofortress
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- B-1B Lancer
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Mirage 2000C
|
||||
# Gaziantep
|
||||
11:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- UH-1H Iroquois
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AH-64D Apache Longbow
|
||||
# Hatay
|
||||
15:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# Tabqa
|
||||
37:
|
||||
- primary: Strike
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
# Abu al-Duhur
|
||||
1:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: Fighter sweep
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- primary: Transport
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
# Bassel Al-Assad
|
||||
21:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- primary: Intercept
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: Strike
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: OCA/Runway
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
# Al Qusayr
|
||||
3:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
# Palmyra
|
||||
28:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
# Rayak
|
||||
32:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- primary: OCA/Runway
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24M Fencer-D
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24M Fencer-D
|
||||
# Damascus
|
||||
7:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: Strike
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- primary: BAI
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
# King Hussein Air College
|
||||
19:
|
||||
- primary: BAI
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- L-39ZA Albatros
|
||||
- primary: BAI
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-30 Flanker-C
|
||||
# Ramat David
|
||||
30:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- primary: Intercept
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: Strike
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
|
||||
Blue CV:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- S-3B Tanker
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-2C Hawkeye
|
||||
Blue LHA:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
@@ -2,7 +2,8 @@ local unitPayloads = {
|
||||
["name"] = "Bf-109K-4",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
@@ -10,37 +11,25 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 34,
|
||||
[2] = 31,
|
||||
[3] = 30,
|
||||
[4] = 32,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation TARCAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC250",
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 34,
|
||||
[2] = 31,
|
||||
[3] = 30,
|
||||
[4] = 32,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "CAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
@@ -48,10 +37,96 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 34,
|
||||
[2] = 31,
|
||||
[3] = 30,
|
||||
[4] = 32,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ local unitPayloads = {
|
||||
["name"] = "CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "<CLEAN>",
|
||||
["CLSID"] = "ALQ_184",
|
||||
["num"] = 5,
|
||||
},
|
||||
[2] = {
|
||||
@@ -80,7 +80,7 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "<CLEAN>",
|
||||
["CLSID"] = "ALQ_184",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
@@ -166,7 +166,7 @@ local unitPayloads = {
|
||||
["num"] = 7,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "<CLEAN>",
|
||||
["CLSID"] = "ALQ_184",
|
||||
["num"] = 5,
|
||||
},
|
||||
[10] = {
|
||||
@@ -179,46 +179,55 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "SEAD",
|
||||
["name"] = "Liberation SEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "<CLEAN>",
|
||||
["num"] = 5,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "ALQ_184",
|
||||
["num"] = 5,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
|
||||
["num"] = 11,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{B06DD79A-F21E-4EB9-BD9D-AB3844618C93}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[11] = {
|
||||
["CLSID"] = "{AN_ASQ_213}",
|
||||
["num"] = 10,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 29,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
@@ -262,9 +271,13 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "<CLEAN>",
|
||||
["CLSID"] = "ALQ_184",
|
||||
["num"] = 5,
|
||||
},
|
||||
[11] = {
|
||||
["CLSID"] = "{AN_ASQ_213}",
|
||||
["num"] = 10,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
|
||||
@@ -2,67 +2,131 @@ local unitPayloads = {
|
||||
["name"] = "FW-190A8",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "CAS",
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{SC_250_T1_L2}",
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation TARCAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{SD_500_A}",
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "CAP",
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "<CLEAN>",
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{SD_500_A}",
|
||||
["CLSID"] = "BF109K_4_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["num"] = 3,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AB_500_1_SD_10A}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AB_500_1_SD_10A}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AB_500_1_SD_10A}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -2,26 +2,8 @@ local unitPayloads = {
|
||||
["name"] = "FW-190D9",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
[2] = 10,
|
||||
[3] = 32,
|
||||
[4] = 31,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
@@ -29,37 +11,154 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 34,
|
||||
[2] = 31,
|
||||
[3] = 30,
|
||||
[4] = 32,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "CAS",
|
||||
[2] = {
|
||||
["displayName"] = "Liberation TARCAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["num"] = 3,
|
||||
["CLSID"] = "FW109_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{WGr21}",
|
||||
["CLSID"] = "{FW_190_R4M_RGHT_WING}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{FW_190_R4M_LEFT_WING}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
[2] = 10,
|
||||
[3] = 32,
|
||||
[4] = 31,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "CAP",
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "FW109_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{FW_190_R4M_RGHT_WING}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{FW_190_R4M_LEFT_WING}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "FW109_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{FW_190_R4M_RGHT_WING}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{FW_190_R4M_LEFT_WING}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "FW109_FUEL_TANK",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{FW_190_R4M_RGHT_WING}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{FW_190_R4M_LEFT_WING}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "ER_4_SC50",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
278
resources/customized_payloads/H-6J.lua
Normal file
278
resources/customized_payloads/H-6J.lua
Normal file
@@ -0,0 +1,278 @@
|
||||
local unitPayloads = {
|
||||
["name"] = "H-6J",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "DIS_AKG_DLPOD",
|
||||
["num"] = 7,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 6,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 5,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 3,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "DIS_H6_250_2_N24",
|
||||
["num"] = 8,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "DIS_AKG_DLPOD",
|
||||
["num"] = 7,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 6,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "DIS_AKG_DLPOD",
|
||||
["num"] = 7,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 6,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 5,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 3,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["displayName"] = "Liberation Anti-ship",
|
||||
["name"] = "Liberation Anti-ship",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "DIS_AKG_DLPOD",
|
||||
["num"] = 7,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "DIS_GDJ_YJ83K",
|
||||
["num"] = 6,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "DIS_GDJ_YJ83K",
|
||||
["num"] = 5,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "DIS_GDJ_YJ83K",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "DIS_GDJ_YJ83K",
|
||||
["num"] = 3,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "DIS_GDJ_YJ83K",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "DIS_GDJ_YJ83K",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "DIS_H6_250_2_N24",
|
||||
["num"] = 8,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "DIS_AKG_DLPOD",
|
||||
["num"] = 7,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 6,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "DIS_AKG_DLPOD",
|
||||
["num"] = 7,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 6,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 5,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 3,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "DIS_DF4A_KD20",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "DIS_H6_250_2_N24",
|
||||
["num"] = 8,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "DIS_AKG_DLPOD",
|
||||
["num"] = 7,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 6,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "DIS_MER6_250_3_N6",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
},
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
},
|
||||
["unitType"] = "H-6J",
|
||||
}
|
||||
return unitPayloads
|
||||
@@ -2,135 +2,74 @@ local unitPayloads = {
|
||||
["name"] = "I-16",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "CAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 5,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation BARCAP",
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 8,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 7,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 6,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
[2] = {
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 5,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 4,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 1,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 2,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 3,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 7,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 8,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 5,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["CLSID"] = "I16_DROP_FUEL_TANK",
|
||||
["num"] = 4,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "SEAD",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
@@ -145,32 +84,33 @@ local unitPayloads = {
|
||||
["num"] = 6,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
[5] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 1,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["name"] = "DEAD",
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
@@ -185,32 +125,33 @@ local unitPayloads = {
|
||||
["num"] = 6,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
[5] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 1,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["name"] = "BAI",
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
@@ -225,25 +166,25 @@ local unitPayloads = {
|
||||
["num"] = 6,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
[5] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
[6] = {
|
||||
["CLSID"] = "I16_RS_82",
|
||||
["num"] = 1,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "I16_FAB_100SV",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
|
||||
@@ -2,15 +2,16 @@ local unitPayloads = {
|
||||
["name"] = "Ju-88A4",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{LTF_5B}",
|
||||
["num"] = 1,
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{LTF_5B}",
|
||||
["num"] = 3,
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
@@ -18,14 +19,14 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "CAS",
|
||||
["name"] = "Liberation Anti-ship",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{LTF_5B}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{LTF_5B}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
@@ -34,22 +35,31 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "CAP",
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "STRIKE",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
@@ -58,15 +68,15 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "RUNWAY_ATTACK",
|
||||
["name"] = "RUNWAY_ATTACK",
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{AB_500_1_SD_10A}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{AB_500_1_SD_10A}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
@@ -75,15 +85,15 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "SEAD",
|
||||
["name"] = "SEAD",
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
@@ -92,15 +102,15 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "DEAD",
|
||||
["name"] = "DEAD",
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "SC_501_SC500",
|
||||
["CLSID"] = "{SC_500_L2}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -2,133 +2,277 @@ local unitPayloads = {
|
||||
["name"] = "MosquitoFBMkVI",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "CAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["displayName"] = "CAS",
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "500 lb GP Mk.V*2, 500 lb GP Short tail*2",
|
||||
["name"] = "500 lb GP Mk.V*2, 500 lb GP Short tail*2",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{British_MC_250LB_Bomb_Mk2}",
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{British_MC_250LB_Bomb_Mk2}",
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_MC_250LB_Bomb_Mk2_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_MC_250LB_Bomb_Mk2_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
[2] = 32,
|
||||
[3] = 31,
|
||||
[4] = 34,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["displayName"] = "STRIKE",
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation TARCAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["displayName"] = "DEAD",
|
||||
["name"] = "DEAD",
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["CLSID"] = "",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["CLSID"] = "",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "SEAD",
|
||||
["name"] = "SEAD",
|
||||
["displayName"] = "Liberation Anti-ship",
|
||||
["name"] = "Liberation Anti-ship",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["CLSID"] = "",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["CLSID"] = "",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_SAP_250LB_Bomb_Mk5_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_SAP_250LB_Bomb_Mk5_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "ANTISHIP",
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["CLSID"] = "",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk5}",
|
||||
["CLSID"] = "",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_GP_500LB_Bomb_Mk4_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_MC_500LB_Bomb_Mk1_Short_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{MOSSIE_4_British_HE_60LBSAPNo2_3INCHNo1_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[11] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{British_SAP_500LB_Bomb_Mk5}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{British_SAP_500LB_Bomb_Mk5}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{British_SAP_250LB_Bomb_Mk5_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{British_SAP_250LB_Bomb_Mk5_on_Handley_Page_Type_B_Cut_Bar}",
|
||||
["num"] = 3,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[12] = {
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
|
||||
@@ -2,27 +2,16 @@ local unitPayloads = {
|
||||
["name"] = "P-47D-30",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "STRIKE",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN_M65}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN_M65}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "ANTISTRIKE",
|
||||
["displayName"] = "Liberation BARCAP",
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
@@ -30,27 +19,17 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "CAP",
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
@@ -58,18 +37,19 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "SEAD",
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN_M57}",
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN_M57}",
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN_M57}",
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
@@ -78,7 +58,8 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
@@ -94,6 +75,87 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN_M65}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN_M65}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -2,7 +2,7 @@ local unitPayloads = {
|
||||
["name"] = "P-47D-30bl1",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "CAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
@@ -10,47 +10,35 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation BARCAP",
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN_M57}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN_M57}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN_M57}",
|
||||
["num"] = 3,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "SEAD",
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
@@ -69,8 +57,9 @@ local unitPayloads = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "ANTISHIP",
|
||||
[6] = {
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
@@ -86,6 +75,91 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -2,31 +2,34 @@ local unitPayloads = {
|
||||
["name"] = "P-47D-40",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "CAP",
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN_M65}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN_M65}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "SEAD",
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
@@ -36,13 +39,35 @@ local unitPayloads = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation BARCAP",
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
@@ -53,6 +78,14 @@ local unitPayloads = {
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
@@ -61,7 +94,45 @@ local unitPayloads = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
[6] = {
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation SEAD",
|
||||
["name"] = "Liberation SEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
@@ -76,10 +147,143 @@ local unitPayloads = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation SEAD Escort",
|
||||
["name"] = "Liberation SEAD Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[11] = {
|
||||
["displayName"] = "Liberation TARCAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[12] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[13] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_LEFT_WING_RAILS}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{P47_5_HVARS_ON_RIGHT_WING_RAILS}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
},
|
||||
|
||||
@@ -2,40 +2,17 @@ local unitPayloads = {
|
||||
["name"] = "P-51D-30-NA",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
@@ -44,7 +21,17 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
@@ -59,11 +46,11 @@ local unitPayloads = {
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
@@ -78,6 +65,14 @@ local unitPayloads = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
@@ -85,16 +80,9 @@ local unitPayloads = {
|
||||
[3] = 30,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "CAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
@@ -109,11 +97,11 @@ local unitPayloads = {
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
@@ -128,6 +116,245 @@ local unitPayloads = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 30,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "Liberation Anti-ship",
|
||||
["name"] = "Liberation Anti-ship",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 30,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 30,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 30,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation TARCAP",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation BARCAP",
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[11] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
|
||||
@@ -2,7 +2,8 @@ local unitPayloads = {
|
||||
["name"] = "P-51D",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
@@ -17,22 +18,30 @@ local unitPayloads = {
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 4,
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
["num"] = 5,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
["num"] = 4,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
@@ -40,53 +49,48 @@ local unitPayloads = {
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 30,
|
||||
[3] = 34,
|
||||
[4] = 30,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "STRIKE",
|
||||
["name"] = "Liberation TARCAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 30,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation BARCAP",
|
||||
["name"] = "Liberation BARCAP",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["displayName"] = "Liberation Escort",
|
||||
["name"] = "Liberation Escort",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "Liberation Fighter Sweep",
|
||||
["name"] = "Liberation Fighter Sweep",
|
||||
["pylons"] = {
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
@@ -101,22 +105,30 @@ local unitPayloads = {
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 4,
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
["num"] = 5,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
["num"] = 4,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
@@ -124,7 +136,236 @@ local unitPayloads = {
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 30,
|
||||
[3] = 34,
|
||||
[4] = 30,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation Anti-ship",
|
||||
["name"] = "Liberation Anti-ship",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 34,
|
||||
[4] = 30,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 34,
|
||||
[4] = 30,
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 34,
|
||||
[4] = 30,
|
||||
},
|
||||
},
|
||||
[10] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{HVAR}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 34,
|
||||
[4] = 30,
|
||||
},
|
||||
},
|
||||
[11] = {
|
||||
["displayName"] = "Liberation OCA/Runway",
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AN-M64}",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
[2] = 32,
|
||||
[3] = 34,
|
||||
[4] = 30,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
34
resources/customized_payloads/SA342Minigun.lua
Normal file
34
resources/customized_payloads/SA342Minigun.lua
Normal file
@@ -0,0 +1,34 @@
|
||||
local unitPayloads = {
|
||||
["name"] = "SA342Minigun",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{IR_Deflector}",
|
||||
["num"] = 6,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{IR_Deflector}",
|
||||
["num"] = 6,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
},
|
||||
["unitType"] = "SA342Minigun",
|
||||
}
|
||||
return unitPayloads
|
||||
166
resources/customized_payloads/VSN_F104G.lua
Normal file
166
resources/customized_payloads/VSN_F104G.lua
Normal file
@@ -0,0 +1,166 @@
|
||||
local unitPayloads = {
|
||||
["name"] = "VSN_F104G",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["displayName"] = "CAP",
|
||||
["name"] = "CAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "VSN_F104G_R_PTB",
|
||||
["num"] = 10,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "VSN_F104G_L_PTB",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["displayName"] = "DEAD",
|
||||
["name"] = "DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "VSN_F104G_L_PTB",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "VSN_F104G_R_PTB",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["displayName"] = "CAS",
|
||||
["name"] = "CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "VSN_F104G_L_PTB",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "VSN_F104G_R_PTB",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{FD90A1DC-9147-49FA-BF56-CB83EF0BD32B}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["displayName"] = "STRIKE",
|
||||
["name"] = "STRIKE",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "VSN_F104G_L_PTB",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "VSN_F104G_R_PTB",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 6,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["displayName"] = "OCA",
|
||||
["name"] = "OCA",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "VSN_F104G_L_PTB",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "VSN_F104G_R_PTB",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 6,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
},
|
||||
["unitType"] = "VSN_F104G",
|
||||
}
|
||||
return unitPayloads
|
||||
50
resources/customized_payloads/VSN_F104S.lua
Normal file
50
resources/customized_payloads/VSN_F104S.lua
Normal file
@@ -0,0 +1,50 @@
|
||||
local unitPayloads = {
|
||||
["name"] = "VSN_F104S",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["displayName"] = "CAP",
|
||||
["name"] = "CAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{AIM-7F}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "VSN_F104G_PTB",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "VSN_F104G_PTB",
|
||||
["num"] = 8,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{AIM-7F}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 10,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
},
|
||||
["unitType"] = "VSN_F104S",
|
||||
}
|
||||
return unitPayloads
|
||||
189
resources/customized_payloads/VSN_F104S_AG.lua
Normal file
189
resources/customized_payloads/VSN_F104S_AG.lua
Normal file
@@ -0,0 +1,189 @@
|
||||
local unitPayloads = {
|
||||
["name"] = "VSN_F104S_AG",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["displayName"] = "DEAD",
|
||||
["name"] = "DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 10,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["displayName"] = "CAS",
|
||||
["name"] = "CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 10,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["displayName"] = "STRIKE",
|
||||
["name"] = "STRIKE",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 10,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["displayName"] = "OCA",
|
||||
["name"] = "OCA",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{AIM-9L}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{7A44FF09-527C-4B7E-B42B-3F111CFE50FB}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{LAU-138 wtip - AIM-9L}",
|
||||
["num"] = 10,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 19,
|
||||
},
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
},
|
||||
["unitType"] = "VSN_F104S_AG",
|
||||
}
|
||||
return unitPayloads
|
||||
@@ -107,5 +107,6 @@
|
||||
"UH-1H Iroquois": [
|
||||
"US NAVY"
|
||||
]
|
||||
}
|
||||
},
|
||||
"unrestricted_satnav": true
|
||||
}
|
||||
|
||||
@@ -66,5 +66,6 @@
|
||||
"Australian 75th Squadron",
|
||||
"Australian 77th Squadron"
|
||||
]
|
||||
}
|
||||
},
|
||||
"unrestricted_satnav": true
|
||||
}
|
||||
@@ -33,7 +33,7 @@
|
||||
"UH-1H Iroquois"
|
||||
],
|
||||
"awacs": [
|
||||
"E-2C Hawkeye",
|
||||
"E-2D Advanced Hawkeye",
|
||||
"E-3A"
|
||||
],
|
||||
"tankers": [
|
||||
|
||||
@@ -71,5 +71,6 @@
|
||||
"C-130J-30 Super Hercules": [
|
||||
"Royal Canadian AF CC-130J"
|
||||
]
|
||||
}
|
||||
},
|
||||
"unrestricted_satnav": true
|
||||
}
|
||||
@@ -14,7 +14,8 @@
|
||||
"J-7B",
|
||||
"Mi-24P Hind-F",
|
||||
"Mi-8MTV2 Hip",
|
||||
"Su-30MKK Flanker-G"
|
||||
"Su-30MKK Flanker-G",
|
||||
"H-6J Badger"
|
||||
],
|
||||
"awacs": [
|
||||
"KJ-2000"
|
||||
@@ -95,7 +96,7 @@
|
||||
],
|
||||
"requirements": {},
|
||||
"navy_generators": [
|
||||
"Type54GroupGenerator"
|
||||
"ChineseNavyGroupGenerator"
|
||||
],
|
||||
"has_jtac": true,
|
||||
"jtac_unit": "WingLoong-I"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user