Merge remote-tracking branch 'remotes/dcs-retribution/dcs-retribution/dev' into pretense-generator

This commit is contained in:
MetalStormGhost 2024-05-26 22:06:19 +03:00
commit 9775d3b97c
110 changed files with 2777 additions and 221 deletions

View File

@ -7,6 +7,7 @@
* **[Campaigns/Factions]** Support for inline recommended faction in campaign's yaml file
* **[Squadrons]** Ability to define a livery-set for each squadron from which Retribution will randomly choose during mission generation
* **[Modding]** Updated support for F/A-18E/F/G mod version 2.2.5
* **[Modding]** Added VSN F-106 Delta Dart mod support (v2.9.4.101)
* **[Campaign Setup]** Allow adjustments to naval TGOs (except carriers) on turn 0
* **[Campaign Design]** Ability to configure specific carrier names & types in campaign's yaml file
* **[Mission Generation]** Ability to inject custom kneeboards

View File

@ -56,7 +56,7 @@ class MizCampaignLoader:
OFFSHORE_STRIKE_TARGET_UNIT_TYPE = Fortification.Oil_platform.id
SHIP_UNIT_TYPE = USS_Arleigh_Burke_IIa.id
MISSILE_SITE_UNIT_TYPE = MissilesSS.Scud_B.id
COASTAL_DEFENSE_UNIT_TYPE = MissilesSS.Hy_launcher.id
COASTAL_DEFENSE_UNIT_TYPE = MissilesSS.hy_launcher.id
COMMAND_CENTER_UNIT_TYPE = Fortification._Command_Center.id
CONNECTION_NODE_UNIT_TYPE = Fortification.Comms_tower_M.id
@ -73,23 +73,23 @@ class MizCampaignLoader:
MEDIUM_RANGE_SAM_UNIT_TYPES = {
AirDefence.Hawk_ln.id,
AirDefence.S_75M_Volhov.id,
AirDefence.X_5p73_s_125_ln.id,
AirDefence.x_5p73_s_125_ln.id,
}
SHORT_RANGE_SAM_UNIT_TYPES = {
AirDefence.M1097_Avenger.id,
AirDefence.Rapier_fsa_launcher.id,
AirDefence.X_2S6_Tunguska.id,
AirDefence.rapier_fsa_launcher.id,
AirDefence.x_2S6_Tunguska.id,
AirDefence.Strela_1_9P31.id,
}
AAA_UNIT_TYPES = {
AirDefence.Flak18.id,
AirDefence.flak18.id,
AirDefence.Vulcan.id,
AirDefence.ZSU_23_4_Shilka.id,
}
EWR_UNIT_TYPE = AirDefence.X_1L13_EWR.id
EWR_UNIT_TYPE = AirDefence.x_1L13_EWR.id
ARMOR_GROUP_UNIT_TYPE = Armor.M_1_Abrams.id

View File

@ -5,8 +5,8 @@ from game.theater.theatergroup import TheaterUnit
class AlicCodes:
CODES = {
AirDefence.X_1L13_EWR.id: 101,
AirDefence.X_55G6_EWR.id: 102,
AirDefence.x_1L13_EWR.id: 101,
AirDefence.x_55G6_EWR.id: 102,
AirDefence.S_300PS_40B6MD_sr.id: 103,
AirDefence.S_300PS_64H6E_sr.id: 104,
AirDefence.SA_11_Buk_SR_9S18M1.id: 107,
@ -17,12 +17,12 @@ class AlicCodes:
AirDefence.Osa_9A33_ln.id: 117,
AirDefence.Strela_10M3.id: 118,
AirDefence.Tor_9A331.id: 119,
AirDefence.X_2S6_Tunguska.id: 120,
AirDefence.x_2S6_Tunguska.id: 120,
AirDefence.ZSU_23_4_Shilka.id: 121,
AirDefence.P_19_s_125_sr.id: 122,
AirDefence.Snr_s_125_tr.id: 123,
AirDefence.Rapier_fsa_blindfire_radar.id: 124,
AirDefence.Rapier_fsa_launcher.id: 125,
AirDefence.p_19_s_125_sr.id: 122,
AirDefence.snr_s_125_tr.id: 123,
AirDefence.rapier_fsa_blindfire_radar.id: 124,
AirDefence.rapier_fsa_launcher.id: 125,
AirDefence.SNR_75V.id: 126,
AirDefence.HQ_7_LN_SP.id: 127,
AirDefence.HQ_7_STR_SP.id: 128,

View File

@ -26,7 +26,7 @@ from dcs.vehicles import AirDefence
from pydcs_extensions import highdigitsams as hds
TELARS = {
AirDefence.X_2S6_Tunguska,
AirDefence.x_2S6_Tunguska,
AirDefence.SA_11_Buk_LN_9A310M1,
AirDefence.Osa_9A33_ln,
AirDefence.Tor_9A331,
@ -36,14 +36,14 @@ TELARS = {
TRACK_RADARS = {
AirDefence.Kub_1S91_str,
AirDefence.Snr_s_125_tr,
AirDefence.snr_s_125_tr,
AirDefence.S_300PS_40B6M_tr,
AirDefence.S_300PS_5H63C_30H6_tr,
AirDefence.Hawk_tr,
AirDefence.Patriot_str,
AirDefence.SNR_75V,
AirDefence.RPC_5N62V,
AirDefence.Rapier_fsa_blindfire_radar,
AirDefence.rapier_fsa_blindfire_radar,
AirDefence.HQ_7_STR_SP,
AirDefence.NASAMS_Radar_MPQ64F1,
hds.SAM_SA_10B_S_300PS_30N6_TR,
@ -55,7 +55,7 @@ TRACK_RADARS = {
LAUNCHER_TRACKER_PAIRS = {
AirDefence.Kub_2P25_ln: (AirDefence.Kub_1S91_str,),
AirDefence.X_5p73_s_125_ln: (AirDefence.Snr_s_125_tr,),
AirDefence.x_5p73_s_125_ln: (AirDefence.snr_s_125_tr,),
AirDefence.S_300PS_5P85C_ln: (
AirDefence.S_300PS_40B6M_tr,
AirDefence.S_300PS_5H63C_30H6_tr,
@ -67,14 +67,14 @@ LAUNCHER_TRACKER_PAIRS = {
AirDefence.Hawk_ln: (AirDefence.Hawk_tr,),
AirDefence.Patriot_ln: (AirDefence.Patriot_str,),
AirDefence.S_75M_Volhov: (AirDefence.SNR_75V,),
AirDefence.Rapier_fsa_launcher: (AirDefence.Rapier_fsa_blindfire_radar,),
AirDefence.rapier_fsa_launcher: (AirDefence.rapier_fsa_blindfire_radar,),
AirDefence.HQ_7_LN_SP: (AirDefence.HQ_7_STR_SP,),
AirDefence.S_200_Launcher: (AirDefence.RPC_5N62V,),
AirDefence.NASAMS_LN_B: (AirDefence.NASAMS_Radar_MPQ64F1,),
AirDefence.NASAMS_LN_C: (AirDefence.NASAMS_Radar_MPQ64F1,),
hds.SAM_SA_2__V759__LN_SM_90: (AirDefence.SNR_75V,),
hds.SAM_HQ_2_LN_SM_90: (AirDefence.SNR_75V,),
hds.SAM_SA_3__V_601P__LN_5P73: (AirDefence.Snr_s_125_tr,),
hds.SAM_SA_3__V_601P__LN_5P73: (AirDefence.snr_s_125_tr,),
hds.SAM_SA_10B_S_300PS_5P85SE_LN: (hds.SAM_SA_10B_S_300PS_30N6_TR,),
hds.SAM_SA_10B_S_300PS_5P85SU_LN: (hds.SAM_SA_10B_S_300PS_30N6_TR,),
hds.SAM_SA_12_S_300V_9A82_LN: (hds.SAM_SA_12_S_300V_9S32_TR,),
@ -88,7 +88,7 @@ LAUNCHER_TRACKER_PAIRS = {
UNITS_WITH_RADAR = {
# Radars
AirDefence.X_2S6_Tunguska,
AirDefence.x_2S6_Tunguska,
AirDefence.SA_11_Buk_LN_9A310M1,
AirDefence.Osa_9A33_ln,
AirDefence.Tor_9A331,
@ -96,11 +96,11 @@ UNITS_WITH_RADAR = {
AirDefence.Vulcan,
AirDefence.Roland_ADS,
AirDefence.ZSU_23_4_Shilka,
AirDefence.X_1L13_EWR,
AirDefence.x_1L13_EWR,
AirDefence.Kub_1S91_str,
AirDefence.S_300PS_40B6M_tr,
AirDefence.S_300PS_40B6MD_sr,
AirDefence.X_55G6_EWR,
AirDefence.x_55G6_EWR,
AirDefence.S_300PS_64H6E_sr,
AirDefence.SA_11_Buk_SR_9S18M1,
AirDefence.Dog_Ear_radar,
@ -108,13 +108,13 @@ UNITS_WITH_RADAR = {
AirDefence.Hawk_sr,
AirDefence.Patriot_str,
AirDefence.Hawk_cwar,
AirDefence.P_19_s_125_sr,
AirDefence.p_19_s_125_sr,
AirDefence.Roland_Radar,
AirDefence.Snr_s_125_tr,
AirDefence.snr_s_125_tr,
AirDefence.SNR_75V,
AirDefence.RLS_19J6,
AirDefence.RPC_5N62V,
AirDefence.Rapier_fsa_blindfire_radar,
AirDefence.rapier_fsa_blindfire_radar,
AirDefence.HQ_7_LN_SP,
AirDefence.HQ_7_STR_SP,
AirDefence.FuMG_401,

View File

@ -397,6 +397,9 @@ class Faction:
if not mod_settings.f105_thunderchief:
self.remove_aircraft("VSN_F105D")
self.remove_aircraft("VSN_F105G")
if not mod_settings.f106_deltadart:
self.remove_aircraft("VSN_F106A")
self.remove_aircraft("VSN_F106B")
if not mod_settings.a6a_intruder:
self.remove_aircraft("VSN_A6A")
if not mod_settings.jas39_gripen:

View File

@ -33,7 +33,7 @@ from typing import Dict, Iterator, List, Optional, TYPE_CHECKING, Tuple
from PIL import Image, ImageDraw, ImageFont
from dcs.mission import Mission
from dcs.planes import F_15ESE
from suntime import Sun # type: ignore
from suntime import Sun, SunTimeException # type: ignore
from tabulate import tabulate
from game.ato.flighttype import FlightType
@ -445,14 +445,23 @@ class BriefingPage(KneeboardPage):
tz = fl.squadron.coalition.game.theater.timezone
# Get today's sunrise and sunset in UTC
sr_utc = sun.get_sunrise_time(dt)
ss_utc = sun.get_sunset_time(dt)
sr = sr_utc + tz.utcoffset(sun.get_sunrise_time(dt))
ss = ss_utc + tz.utcoffset(sun.get_sunset_time(dt))
try:
rise_utc = sun.get_sunrise_time(dt)
rise = rise_utc + tz.utcoffset(sun.get_sunrise_time(dt))
except SunTimeException:
rise_utc = None
rise = None
try:
set_utc = sun.get_sunset_time(dt)
sunset = set_utc + tz.utcoffset(sun.get_sunset_time(dt))
except SunTimeException:
set_utc = None
sunset = None
writer.text(
f"Sunrise - Sunset: {sr.strftime('%H:%M')} - {ss.strftime('%H:%M')}"
f" ({sr_utc.strftime('%H:%M')} - {ss_utc.strftime('%H:%M')} UTC)"
f"Sunrise - Sunset: {rise.strftime('%H:%M') if rise else 'N/A'} - {sunset.strftime('%H:%M') if sunset else 'N/A'}"
f" ({rise_utc.strftime('%H:%M') if rise_utc else 'N/A'} - {set_utc.strftime('%H:%M') if set_utc else 'N/A'} UTC)"
)
if fl.bingo_fuel and fl.joker_fuel:

View File

@ -74,6 +74,26 @@ class MigrationUnpickler(pickle.Unpickler):
return ELM2084_MMR_AD_RT
elif name == "IRON_DOME_CP":
return Iron_Dome_David_Sling_CP
if module == "dcs.terrain.kola.airports":
if name == "Lakselv":
from dcs.terrain.kola.airports import Banak
return Banak
elif name == "Severomorsk1":
from dcs.terrain.kola.airports import Severomorsk_1
return Severomorsk_1
elif name == "Severomorsk3":
from dcs.terrain.kola.airports import Severomorsk_3
return Severomorsk_3
elif name == "Olenegorsk":
from dcs.terrain.kola.airports import Olenya
return Olenya
if module in ["dcs.vehicles", "dcs.ships"]:
try:
return super().find_class(module, name)
except AttributeError:
alternate = name.split('.')[:-1] + [name.split('.')[-1][0].lower() + name.split('.')[-1][1:]]
name = '.'.join(alternate)
print(name)
return super().find_class(module, name)
# fmt: on

View File

@ -305,7 +305,7 @@ class Settings:
section=GENERAL_SECTION,
default=True,
detail=(
"Automatically swaps ATFLIR to LITENING pod for newly generated land-based F-18 flights "
"Automatically swaps ATFLIR to LITENING pod for newly generated land-based F/A-18 flights "
"without having to change the payload. <u>Takes effect after current turn!</u>"
),
)
@ -327,7 +327,7 @@ class Settings:
)
# Doctrine Distances Section
airbase_threat_range: int = bounded_int_option(
"Airbase threat range (nmi)",
"Airbase threat range (NM)",
page=CAMPAIGN_DOCTRINE_PAGE,
section=DOCTRINE_DISTANCES_SECTION,
default=100,
@ -339,7 +339,7 @@ class Settings:
),
)
cas_engagement_range_distance: int = bounded_int_option(
"CAS engagement range (nmi)",
"CAS engagement range (NM)",
page=CAMPAIGN_DOCTRINE_PAGE,
section=DOCTRINE_DISTANCES_SECTION,
default=10,
@ -347,7 +347,7 @@ class Settings:
max=100,
)
sead_sweep_engagement_range_distance: int = bounded_int_option(
"SEAD Sweep engagement range (nmi)",
"SEAD Sweep engagement range (NM)",
page=CAMPAIGN_DOCTRINE_PAGE,
section=DOCTRINE_DISTANCES_SECTION,
default=30,
@ -355,7 +355,7 @@ class Settings:
max=100,
)
sead_threat_buffer_min_distance: int = bounded_int_option(
"SEAD Escort/Sweep threat buffer distance (nmi)",
"SEAD Escort/Sweep threat buffer distance (NM)",
page=CAMPAIGN_DOCTRINE_PAGE,
section=DOCTRINE_DISTANCES_SECTION,
default=5,
@ -366,7 +366,7 @@ class Settings:
),
)
tarcap_threat_buffer_min_distance: int = bounded_int_option(
"TARCAP threat buffer distance (nmi)",
"TARCAP threat buffer distance (NM)",
page=CAMPAIGN_DOCTRINE_PAGE,
section=DOCTRINE_DISTANCES_SECTION,
default=20,
@ -375,7 +375,7 @@ class Settings:
detail=("How close to known threats will the TARCAP racetrack extend."),
)
aewc_threat_buffer_min_distance: int = bounded_int_option(
"AEW&C threat buffer distance (nmi)",
"AEW&C threat buffer distance (NM)",
page=CAMPAIGN_DOCTRINE_PAGE,
section=DOCTRINE_DISTANCES_SECTION,
default=80,
@ -387,7 +387,7 @@ class Settings:
),
)
tanker_threat_buffer_min_distance: int = bounded_int_option(
"Theater tanker threat buffer distance (nmi)",
"Theater tanker threat buffer distance (NM)",
page=CAMPAIGN_DOCTRINE_PAGE,
section=DOCTRINE_DISTANCES_SECTION,
default=70,
@ -547,7 +547,7 @@ class Settings:
default=True,
)
auto_procurement_balance: int = bounded_int_option(
"AI ground unit procurement budget ratio (%) for BLUE",
"AI ground unit procurement budget ratio (%) for OWNFOR",
CAMPAIGN_MANAGEMENT_PAGE,
HQ_AUTOMATION_SECTION,
min=0,
@ -560,7 +560,7 @@ class Settings:
),
)
frontline_reserves_factor: int = bounded_int_option(
"AI ground unit front-line reserves factor (%) for BLUE",
"AI ground unit front-line reserves factor (%) for OWNFOR",
CAMPAIGN_MANAGEMENT_PAGE,
HQ_AUTOMATION_SECTION,
min=0,
@ -572,18 +572,18 @@ class Settings:
),
)
reserves_procurement_target: int = bounded_int_option(
"AI ground unit reserves procurement target for BLUE",
"AI ground unit reserves procurement target for OWNFOR",
CAMPAIGN_MANAGEMENT_PAGE,
HQ_AUTOMATION_SECTION,
min=0,
max=1000,
default=10,
detail=(
"The number of units that will be bought as reserves for applicable control points"
"The number of units that will be bought as reserves for applicable control points."
),
)
auto_procurement_balance_red: int = bounded_int_option(
"AI ground unit procurement budget ratio (%) for RED",
"AI ground unit procurement budget ratio (%) for OPFOR",
CAMPAIGN_MANAGEMENT_PAGE,
HQ_AUTOMATION_SECTION,
min=0,
@ -596,7 +596,7 @@ class Settings:
),
)
frontline_reserves_factor_red: int = bounded_int_option(
"AI ground unit front-line reserves factor (%) for RED",
"AI ground unit front-line reserves factor (%) for OPFOR",
CAMPAIGN_MANAGEMENT_PAGE,
HQ_AUTOMATION_SECTION,
min=0,
@ -608,14 +608,14 @@ class Settings:
),
)
reserves_procurement_target_red: int = bounded_int_option(
"AI ground unit reserves procurement target for RED",
"AI ground unit reserves procurement target for OPFOR",
CAMPAIGN_MANAGEMENT_PAGE,
HQ_AUTOMATION_SECTION,
min=0,
max=1000,
default=10,
detail=(
"The number of units that will be bought as reserves for applicable control points"
"The number of units that will be bought as reserves for applicable control points."
),
)
@ -1011,7 +1011,7 @@ class Settings:
default=True,
)
perf_disable_untasked_blufor_aircraft: bool = boolean_option(
"Disable untasked BLUFOR aircraft at airfields",
"Disable untasked OWNFOR aircraft at airfields",
page=MISSION_GENERATOR_PAGE,
section=PERFORMANCE_SECTION,
default=False,

View File

@ -28,7 +28,7 @@ from uuid import UUID
from dcs.mapping import Point
from dcs.ships import (
Ara_vdm,
ara_vdm,
CVN_71,
CVN_72,
CVN_73,
@ -39,7 +39,7 @@ from dcs.ships import (
LHA_Tarawa,
Stennis,
Type_071,
Hms_invincible,
hms_invincible,
)
from dcs.terrain.terrain import Airport, ParkingSlot
from dcs.unitgroup import ShipGroup, StaticGroup
@ -1385,13 +1385,13 @@ class NavalControlPoint(
for group in self.find_main_tgo().groups:
for u in group.units:
if u.alive and u.type in [
Ara_vdm,
ara_vdm,
Forrestal,
Stennis,
LHA_Tarawa,
KUZNECOW,
Type_071,
Hms_invincible,
hms_invincible,
L02,
L52,
L61,

View File

@ -80,6 +80,7 @@ class ModSettings:
f100_supersabre: bool = False
f104_starfighter: bool = False
f105_thunderchief: bool = False
f106_deltadart: bool = False
hercules: bool = False
irondome: bool = False
uh_60l: bool = False

View File

@ -4,6 +4,7 @@ import datetime
import logging
import random
from dataclasses import dataclass
from typing import Tuple
from game.settings import Settings, NightMissions
from game.theater import ConflictTheater, SeasonalConditions
@ -74,11 +75,25 @@ class Conditions:
# time constrained to that. DaytimeMap enforces that we have only whole hour
# ranges for now, so we don't need to worry about accidentally changing the time
# of day by truncating sub-hours.
time = datetime.time(
hour=random.randint(time_range[0].hour, time_range[1].hour)
)
day, hours = Conditions.random_time_progression(day, time_range)
time = datetime.time(hour=hours)
return datetime.datetime.combine(day, time)
@staticmethod
def random_time_progression(
day: datetime.date, time_range: Tuple[datetime.time, datetime.time]
) -> Tuple[datetime.date, int]:
start, end = time_range[0].hour, time_range[1].hour
if start > end:
end += 24
hours = random.randint(start, end)
if hours > 23:
day += datetime.timedelta(days=1.0)
hours %= 24
else:
hours = random.randint(start, end)
return day, hours
@classmethod
def generate_weather(
cls,

View File

@ -6,6 +6,7 @@ from .f9f import *
from .f100 import *
from .f104 import *
from .f105 import *
from .f106 import *
from .f15d import *
from .f15i_idf import *
from .f16i_idf import *

View File

@ -1004,7 +1004,7 @@ class A_4E_C(PlaneType):
LAU3_WP156 = (1, Weapons.LAU3_WP156)
LAU3_HE151 = (1, Weapons.LAU3_HE151)
AGM_45A_Shrike_ARM = (1, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (1, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (1, Weapons.AGM_45B_Shrike_ARM)
Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets = (
1,
Weapons.Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets,
@ -1213,7 +1213,7 @@ class A_4E_C(PlaneType):
WeaponsA4EC._2_x_LAU_3_pod___19_x_2_75_Hydra__UnGd_Rkts_WTU_1_B__Practice__TER__,
)
AGM_45A_Shrike_ARM = (2, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (2, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (2, Weapons.AGM_45B_Shrike_ARM)
Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets = (
2,
Weapons.Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets,
@ -1850,7 +1850,7 @@ class A_4E_C(PlaneType):
WeaponsA4EC._2_x_LAU_3_pod___19_x_2_75_Hydra__UnGd_Rkts_WTU_1_B__Practice__TER___,
)
AGM_45A_Shrike_ARM = (4, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (4, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (4, Weapons.AGM_45B_Shrike_ARM)
Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets = (
4,
Weapons.Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets,
@ -2048,7 +2048,7 @@ class A_4E_C(PlaneType):
LAU3_WP156 = (5, Weapons.LAU3_WP156)
LAU3_HE151 = (5, Weapons.LAU3_HE151)
AGM_45A_Shrike_ARM = (5, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (5, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (5, Weapons.AGM_45B_Shrike_ARM)
Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets = (
5,
Weapons.Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets,

View File

@ -7,7 +7,6 @@ from dcs.weapons_data import Weapons
from game.modsupport import planemod
from pydcs_extensions import inject_weapons, WeaponsA7E
inject_weapons(WeaponsA7E)
@ -61,7 +60,7 @@ class VSN_A6A(PlaneType):
Weapons.LAU_7_with_AIM_9P_Sidewinder_IR_AAM,
)
AGM_45A_Shrike_ARM = (1, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (1, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (1, Weapons.AGM_45B_Shrike_ARM)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile = (
1,
Weapons.AGM_88C_HARM___High_Speed_Anti_Radiation_Missile,
@ -213,7 +212,7 @@ class VSN_A6A(PlaneType):
Weapons.LAU_7_with_AIM_9P_Sidewinder_IR_AAM,
)
AGM_45A_Shrike_ARM = (2, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (2, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (2, Weapons.AGM_45B_Shrike_ARM)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile = (
2,
Weapons.AGM_88C_HARM___High_Speed_Anti_Radiation_Missile,
@ -423,7 +422,7 @@ class VSN_A6A(PlaneType):
Weapons.LAU_7_with_AIM_9P_Sidewinder_IR_AAM,
)
AGM_45A_Shrike_ARM = (4, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (4, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (4, Weapons.AGM_45B_Shrike_ARM)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile = (
4,
Weapons.AGM_88C_HARM___High_Speed_Anti_Radiation_Missile,
@ -578,7 +577,7 @@ class VSN_A6A(PlaneType):
Weapons.LAU_7_with_AIM_9P_Sidewinder_IR_AAM,
)
AGM_45A_Shrike_ARM = (5, Weapons.AGM_45A_Shrike_ARM)
AGM_45B_Shrike_ARM__Imp_ = (5, Weapons.AGM_45B_Shrike_ARM__Imp_)
AGM_45B_Shrike_ARM = (5, Weapons.AGM_45B_Shrike_ARM)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile = (
5,
Weapons.AGM_88C_HARM___High_Speed_Anti_Radiation_Missile,

View File

@ -503,9 +503,9 @@ class A_7E(PlaneType):
1,
Weapons.AGM_62_Walleye_II___Guided_Weapon_Mk_5__TV_Guided_,
)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
1,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile_ = (
1,
@ -698,9 +698,9 @@ class A_7E(PlaneType):
LAU_117_AGM_65G = (2, Weapons.LAU_117_AGM_65G)
LAU_117_AGM_65H = (2, Weapons.LAU_117_AGM_65H)
LAU_88_AGM_65H_2_L = (2, Weapons.LAU_88_AGM_65H_2_L)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
2,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile_ = (
2,
@ -1116,9 +1116,9 @@ class A_7E(PlaneType):
LAU_117_AGM_65G = (7, Weapons.LAU_117_AGM_65G)
LAU_117_AGM_65H = (7, Weapons.LAU_117_AGM_65H)
LAU_88_AGM_65H_2_R = (7, Weapons.LAU_88_AGM_65H_2_R)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
7,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile_ = (
7,
@ -1275,9 +1275,9 @@ class A_7E(PlaneType):
8,
Weapons.AGM_62_Walleye_II___Guided_Weapon_Mk_5__TV_Guided_,
)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
8,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
AGM_88C_HARM___High_Speed_Anti_Radiation_Missile_ = (
8,

View File

@ -212,9 +212,9 @@ class VSN_F100(PlaneType):
5,
Weapons.LAU_7_with_AIM_9B_Sidewinder_IR_AAM,
)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
5,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
Fuel_tank_500_Liter = (5, WeaponsF100.Fuel_tank_500_Liter)
@ -295,9 +295,9 @@ class VSN_F100(PlaneType):
7,
Weapons.LAU_7_with_AIM_9P_Sidewinder_IR_AAM,
)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
7,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
Fuel_tank_500_Liter = (7, WeaponsF100.Fuel_tank_500_Liter)

View File

@ -0,0 +1 @@
from .f106 import *

View File

@ -0,0 +1,304 @@
from typing import Set
from dcs import task
from dcs.planes import PlaneType
from dcs.weapons_data import Weapons
from game.modsupport import planemod
from pydcs_extensions.weapon_injector import inject_weapons
class WeaponsF106:
Fuel_Tank = {"clsid": "{VSN_F106L_PTB}", "name": "Fuel Tank", "weight": 1187}
Fuel_Tank_ = {"clsid": "{VSN_F106R_PTB}", "name": "Fuel Tank", "weight": 1187}
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = {
"clsid": "{Hughes AIM-4D}",
"name": "AIM-4D Rear aspect advanced heat-seeking air-to-air missile.",
"weight": 60.8,
}
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = {
"clsid": "{Hughes AIM-4F}",
"name": "AIM-4F Semi active radar-homing air-to-air missile.",
"weight": 66,
}
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = {
"clsid": "{Hughes AIM-4G}",
"name": "AIM-4G Rear aspect heat seeking air-to-air missile.",
"weight": 66,
}
AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_ = {
"clsid": "{AIR-2A}",
"name": "AIR-2A Genie Nuclear air-to-air unguided rocket.",
"weight": 66,
}
L005_Sorbtsiya_ECM_pod__left_ = {
"clsid": "{44EE8698-89F9-48EE-AF36-5FD31896A82F}",
"name": "L005 Sorbtsiya ECM pod (left)",
"weight": 150,
}
L005_Sorbtsiya_ECM_pod__right_ = {
"clsid": "{44EE8698-89F9-48EE-AF36-5FD31896A82A}",
"name": "L005 Sorbtsiya ECM pod (right)",
"weight": 150,
}
inject_weapons(WeaponsF106)
@planemod
class VSN_F106A(PlaneType):
id = "VSN_F106A"
flyable = True
height = 6.18
width = 11.67
length = 21.56
fuel_max = 4464
max_speed = 2452.032
chaff = 90
flare = 45
charge_total = 180
chaff_charge_size = 1
flare_charge_size = 2
category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 127.5
livery_name = "VSN_F106A" # from type
class Pylon1:
Smokewinder___red = (1, Weapons.Smokewinder___red)
Smokewinder___green = (1, Weapons.Smokewinder___green)
Smokewinder___blue = (1, Weapons.Smokewinder___blue)
Smokewinder___white = (1, Weapons.Smokewinder___white)
Smokewinder___yellow = (1, Weapons.Smokewinder___yellow)
Fuel_Tank = (1, WeaponsF106.Fuel_Tank)
# ERRR <CLEAN>
class Pylon2:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
2,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
2,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
2,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon3:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
3,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
3,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
3,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon4:
AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_ = (
4,
WeaponsF106.AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_,
)
# ERRR <CLEAN>
class Pylon5:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
5,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
5,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
5,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon6:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
6,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
6,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
6,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon7:
Smokewinder___red = (7, Weapons.Smokewinder___red)
Smokewinder___green = (7, Weapons.Smokewinder___green)
Smokewinder___blue = (7, Weapons.Smokewinder___blue)
Smokewinder___white = (7, Weapons.Smokewinder___white)
Smokewinder___yellow = (7, Weapons.Smokewinder___yellow)
Fuel_Tank_ = (7, WeaponsF106.Fuel_Tank_)
# ERRR <CLEAN>
class Pylon8:
WeaponsF106.L005_Sorbtsiya_ECM_pod__left_ = (
8,
Weapons.L005_Sorbtsiya_ECM_pod__left_,
)
class Pylon9:
Smoke_Generator___red_ = (9, Weapons.Smoke_Generator___red_)
Smoke_Generator___green_ = (9, Weapons.Smoke_Generator___green_)
Smoke_Generator___blue_ = (9, Weapons.Smoke_Generator___blue_)
Smoke_Generator___white_ = (9, Weapons.Smoke_Generator___white_)
Smoke_Generator___yellow_ = (9, Weapons.Smoke_Generator___yellow_)
Smoke_Generator___orange_ = (9, Weapons.Smoke_Generator___orange_)
pylons: Set[int] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.Intercept,
task.Reconnaissance,
]
task_default = task.FighterSweep
@planemod
class VSN_F106B(PlaneType):
id = "VSN_F106B"
flyable = True
height = 6.18
width = 11.67
length = 21.56
fuel_max = 4464
max_speed = 2452.032
chaff = 90
flare = 45
charge_total = 180
chaff_charge_size = 1
flare_charge_size = 2
category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 127.5
livery_name = "VSN_F106B" # from type
class Pylon1:
Smokewinder___red = (1, Weapons.Smokewinder___red)
Smokewinder___green = (1, Weapons.Smokewinder___green)
Smokewinder___blue = (1, Weapons.Smokewinder___blue)
Smokewinder___white = (1, Weapons.Smokewinder___white)
Smokewinder___yellow = (1, Weapons.Smokewinder___yellow)
Fuel_Tank = (1, WeaponsF106.Fuel_Tank)
# ERRR <CLEAN>
class Pylon2:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
2,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
2,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
2,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon3:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
3,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
3,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
3,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon4:
AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_ = (
4,
WeaponsF106.AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_,
)
# ERRR <CLEAN>
class Pylon5:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
5,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
5,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
5,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon6:
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
6,
WeaponsF106.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
6,
WeaponsF106.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
6,
WeaponsF106.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon7:
Smokewinder___red = (7, Weapons.Smokewinder___red)
Smokewinder___green = (7, Weapons.Smokewinder___green)
Smokewinder___blue = (7, Weapons.Smokewinder___blue)
Smokewinder___white = (7, Weapons.Smokewinder___white)
Smokewinder___yellow = (7, Weapons.Smokewinder___yellow)
Fuel_Tank_ = (7, WeaponsF106.Fuel_Tank_)
# ERRR <CLEAN>
class Pylon8:
Weapons.L005_Sorbtsiya_ECM_pod__left_ = (
8,
Weapons.L005_Sorbtsiya_ECM_pod__left_,
)
class Pylon9:
Smoke_Generator___red_ = (9, Weapons.Smoke_Generator___red_)
Smoke_Generator___green_ = (9, Weapons.Smoke_Generator___green_)
Smoke_Generator___blue_ = (9, Weapons.Smoke_Generator___blue_)
Smoke_Generator___white_ = (9, Weapons.Smoke_Generator___white_)
Smoke_Generator___yellow_ = (9, Weapons.Smoke_Generator___yellow_)
Smoke_Generator___orange_ = (9, Weapons.Smoke_Generator___orange_)
pylons: Set[int] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.Intercept,
task.Reconnaissance,
]
task_default = task.FighterSweep

View File

@ -612,9 +612,9 @@ class F_16D_52(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
3,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (3, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (3, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -795,9 +795,9 @@ class F_16D_52(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (4, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
4,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (4, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (4, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -919,9 +919,9 @@ class F_16D_52(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (6, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
6,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (6, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (6, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -1046,9 +1046,9 @@ class F_16D_52(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (7, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
7,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (7, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (7, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -1499,9 +1499,9 @@ class F_16D_50(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
3,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (3, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (3, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -1682,9 +1682,9 @@ class F_16D_50(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (4, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
4,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (4, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (4, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -1806,9 +1806,9 @@ class F_16D_50(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (6, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
6,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (6, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (6, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -1933,9 +1933,9 @@ class F_16D_50(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (7, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
7,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (7, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (7, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -2386,9 +2386,9 @@ class F_16D_52_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
3,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (3, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (3, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -2569,9 +2569,9 @@ class F_16D_52_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (4, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
4,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (4, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (4, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -2693,9 +2693,9 @@ class F_16D_52_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (6, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
6,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (6, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (6, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -2820,9 +2820,9 @@ class F_16D_52_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (7, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
7,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (7, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (7, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -3272,9 +3272,9 @@ class F_16D_50_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
3,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (3, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (3, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -3455,9 +3455,9 @@ class F_16D_50_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (4, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
4,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (4, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (4, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -3579,9 +3579,9 @@ class F_16D_50_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (6, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
6,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (6, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (6, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -3706,9 +3706,9 @@ class F_16D_50_NS(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (7, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
7,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (7, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (7, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -4159,9 +4159,9 @@ class F_16D_Barak_40(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
3,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (3, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (3, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -4342,9 +4342,9 @@ class F_16D_Barak_40(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (4, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
4,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (4, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (4, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -4454,9 +4454,9 @@ class F_16D_Barak_40(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (6, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
6,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (6, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (6, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -4570,9 +4570,9 @@ class F_16D_Barak_40(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (7, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
7,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (7, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (7, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -5020,9 +5020,9 @@ class F_16D_Barak_30(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
3,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (3, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (3, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -5203,9 +5203,9 @@ class F_16D_Barak_30(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (4, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
4,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (4, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (4, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -5315,9 +5315,9 @@ class F_16D_Barak_30(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (6, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
6,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (6, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (6, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -5431,9 +5431,9 @@ class F_16D_Barak_30(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (7, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
7,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (7, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (7, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -5880,9 +5880,9 @@ class F_16I(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
3,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (3, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (3, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -6063,9 +6063,9 @@ class F_16I(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (4, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
4,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (4, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (4, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -6187,9 +6187,9 @@ class F_16I(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (6, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
6,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (6, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (6, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)
@ -6314,9 +6314,9 @@ class F_16I(PlaneType):
Weapons.GBU_10___2000lb_Laser_Guided_Bomb,
)
GBU_12___500lb_Laser_Guided_Bomb = (7, Weapons.GBU_12___500lb_Laser_Guided_Bomb)
GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb = (
GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb = (
7,
Weapons.GBU_24_Paveway_III___2000lb_Laser_Guided_Bomb,
Weapons.GBU_24A_B_Paveway_III___2000lb_Laser_Guided_Bomb,
)
CBU_87___202_x_CEM_Cluster_Bomb = (7, Weapons.CBU_87___202_x_CEM_Cluster_Bomb)
CBU_97___10_x_SFW_Cluster_Bomb = (7, Weapons.CBU_97___10_x_SFW_Cluster_Bomb)

View File

@ -1,4 +1,4 @@
from typing import Any, Dict, Set
from typing import Set
from dcs import task
from dcs.planes import PlaneType
@ -596,9 +596,9 @@ class VSN_F4C(PlaneType):
Weapons.BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD,
)
Mk_84___2000lb_GP_Bomb_LD = (3, Weapons.Mk_84___2000lb_GP_Bomb_LD)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
3,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = (
3,
@ -711,9 +711,9 @@ class VSN_F4C(PlaneType):
Weapons.BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD,
)
Mk_84___2000lb_GP_Bomb_LD = (9, Weapons.Mk_84___2000lb_GP_Bomb_LD)
LAU_118A___AGM_45B_Shrike_ARM__Imp_ = (
LAU_118A___AGM_45B_Shrike_ARM = (
9,
Weapons.LAU_118A___AGM_45B_Shrike_ARM__Imp_,
Weapons.LAU_118A___AGM_45B_Shrike_ARM,
)
LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = (
9,

View File

@ -44,9 +44,7 @@ class Dialog:
@classmethod
def open_edit_package_dialog(cls, package_model: PackageModel):
"""Opens the dialog to edit the given package."""
cls.edit_package_dialog = QEditPackageDialog(
cls.game_model, cls.game_model.ato_model, package_model
)
cls.edit_package_dialog = QEditPackageDialog(cls.game_model, package_model)
cls.edit_package_dialog.show()
@classmethod

View File

@ -475,6 +475,11 @@ class QPackagePanel(QGroupBox):
return
self.package_list.delete_package(index)
def enable_buttons(self, enabled: bool) -> None:
self.edit_button.setEnabled(enabled)
self.clone_button.setEnabled(enabled)
self.delete_button.setEnabled(enabled)
class QAirTaskingOrderPanel(QSplitter):
"""A split panel for displaying the packages and flights of an ATO.
@ -511,8 +516,10 @@ class QAirTaskingOrderPanel(QSplitter):
"""Sets the newly selected flight for display in the bottom panel."""
index = self.package_panel.package_list.currentIndex()
if index.isValid():
self.package_panel.enable_buttons(True)
self.flight_panel.set_package(self.ato_model.get_package_model(index))
else:
self.package_panel.enable_buttons(False)
self.flight_panel.set_package(None)
def on_ato_changed(self) -> None:
@ -525,6 +532,9 @@ class QAirTaskingOrderPanel(QSplitter):
self.package_panel.ato_model = ato_model
self.package_panel.package_list.ato_model = ato_model
self.package_panel.package_list.setModel(ato_model)
self.package_panel.enable_buttons(False)
self.package_panel.current_changed.connect(self.on_package_change)
self.flight_panel.flight_list.set_package(None)
events = GameUpdateEvents().deselect_flight()
EventStream.put_nowait(events)
self.game_model.is_ownfor = not opfor

View File

@ -525,7 +525,6 @@ class AircraftSquadronsPage(QWidget):
scrolling_area.setHorizontalScrollBarPolicy(
Qt.ScrollBarPolicy.ScrollBarAlwaysOff
)
scrolling_area.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
scrolling_area.setWidgetResizable(True)
scrolling_area.setWidget(scrolling_widget)

View File

@ -28,6 +28,7 @@ from qt_ui.models import AirWingModel, AtoModel, GameModel, SquadronModel
from qt_ui.simcontroller import SimController
from qt_ui.windows.AirWingConfigurationDialog import AirWingConfigurationDialog
from qt_ui.windows.SquadronDialog import SquadronDialog
from qt_ui.windows.newgame.WizardPages.QFactionSelection import QFactionUnits
class SquadronDelegate(TwoColumnRowDelegate):
@ -238,6 +239,8 @@ class AirWingTabs(QTabWidget):
def __init__(self, game_model: GameModel) -> None:
super().__init__()
self.game_model = game_model
self.addTab(
SquadronList(
game_model.ato_model,
@ -260,18 +263,33 @@ class AirWingTabs(QTabWidget):
if game_model.game.settings.enable_air_wing_adjustments:
pb = QPushButton("Open Air Wing Config Dialog")
pb.clicked.connect(lambda _: self.open_awcd(game_model))
pb.clicked.connect(self.open_awcd)
pb.setMaximumWidth(300)
layout = QHBoxLayout()
layout.addWidget(pb)
w = QWidget(layout=layout)
self.addTab(w, "Cheats")
def open_awcd(self, gm: GameModel):
AirWingConfigurationDialog(gm.game, True, self).exec_()
self.addTab(
QFactionUnits(
game_model.game.coalition_for(True).faction,
self,
),
"Faction OWNFOR",
)
self.addTab(
QFactionUnits(
game_model.game.coalition_for(False).faction,
self,
),
"Faction OPFOR",
)
def open_awcd(self):
AirWingConfigurationDialog(self.game_model.game, True, self).exec_()
events = GameUpdateEvents().begin_new_turn()
EventStream.put_nowait(events)
gm.ato_model.on_sim_update(events)
self.game_model.ato_model.on_sim_update(events)
class AirWingDialog(QDialog):

View File

@ -23,7 +23,7 @@ from game.radio.radios import RadioFrequency
from game.server import EventStream
from game.sim import GameUpdateEvents
from game.theater.missiontarget import MissionTarget
from qt_ui.models import AtoModel, GameModel, PackageModel
from qt_ui.models import GameModel, PackageModel
from qt_ui.uiconstants import EVENT_ICONS
from qt_ui.widgets.QFrequencyWidget import QFrequencyWidget
from qt_ui.widgets.ato import QFlightList
@ -333,11 +333,9 @@ class QEditPackageDialog(QPackageDialog):
Changes to existing packages occur immediately.
"""
def __init__(
self, game_model: GameModel, model: AtoModel, package: PackageModel
) -> None:
super().__init__(game_model, package)
self.ato_model = model
def __init__(self, gm: GameModel, package: PackageModel) -> None:
super().__init__(gm, package)
self.ato_model = gm.ato_model if gm.is_ownfor else gm.red_ato_model
self.delete_button = QPushButton("Delete package")
self.delete_button.setProperty("style", "btn-danger")

View File

@ -41,12 +41,12 @@ class FlightMemberSelector(QSpinBox):
def __init__(self, flight: Flight, parent: QWidget | None = None) -> None:
super().__init__(parent)
self.flight = flight
self.setMinimum(0)
self.setMaximum(flight.count - 1)
self.setMinimum(1)
self.setMaximum(flight.count)
@property
def selected_member(self) -> FlightMember:
return self.flight.roster.members[self.value()]
return self.flight.roster.members[self.value() - 1]
class DcsFuelSelector(QHBoxLayout):
@ -237,7 +237,7 @@ class QFlightPayloadTab(QFrame):
self.payload_editor.set_flight_member(member)
self.weapon_laser_code_selector.set_flight_member(member)
self.own_laser_code_info.set_flight_member(member)
if self.member_selector.value() != 0:
if self.member_selector.value() != 1:
self.loadout_selector.setDisabled(
self.flight.use_same_loadout_for_all_members
)

View File

@ -103,6 +103,7 @@ class NewGameWizard(QtWidgets.QWizard):
f100_supersabre=self.field("f100_supersabre"),
f104_starfighter=self.field("f104_starfighter"),
f105_thunderchief=self.field("f105_thunderchief"),
f106_deltadart=self.field("f106_deltadart"),
hercules=self.field("hercules"),
irondome=self.field("irondome"),
uh_60l=self.field("uh_60l"),

View File

@ -1,7 +1,7 @@
from __future__ import unicode_literals
from copy import deepcopy
from typing import Union
from typing import Union, Callable, Set, Optional
from PySide6 import QtWidgets, QtGui
from PySide6.QtCore import Qt
@ -12,9 +12,16 @@ from PySide6.QtWidgets import (
QCheckBox,
QLabel,
QTextBrowser,
QPushButton,
QComboBox,
QHBoxLayout,
)
from game.ato import FlightType
from game.campaignloader import Campaign
from game.dcs.aircrafttype import AircraftType
from game.dcs.groundunittype import GroundUnitType
from game.dcs.unittype import UnitType
from game.factions import Faction, FACTIONS
from qt_ui.windows.newgame.jinja_env import jinja_env
@ -29,7 +36,13 @@ class QFactionUnits(QScrollArea):
self.faction = faction
self._create_checkboxes()
def _add_checkboxes(self, units: set, counter: int, grid: QGridLayout) -> int:
def _add_checkboxes(
self,
units: set,
counter: int,
grid: QGridLayout,
combo_layout: Optional[QHBoxLayout] = None,
) -> int:
counter += 1
for i, v in enumerate(sorted(units, key=lambda x: str(x)), counter):
cb = QCheckBox(str(v))
@ -37,6 +50,9 @@ class QFactionUnits(QScrollArea):
self.checkboxes[str(v)] = cb
grid.addWidget(cb, i, 1)
counter += 1
if combo_layout:
counter += 1
grid.addLayout(combo_layout, counter, 1)
counter += 1
return counter
@ -44,18 +60,47 @@ class QFactionUnits(QScrollArea):
counter = 0
self.checkboxes: dict[str, QCheckBox] = {}
grid = QGridLayout()
grid.setColumnStretch(1, 1)
if len(self.faction.aircraft) > 0:
self.add_ac_combo = QComboBox()
hbox = self._create_aircraft_combobox(
self.add_ac_combo,
lambda: self._on_add_ac(self.faction.aircraft, self.add_ac_combo),
self._aircraft_predicate,
)
grid.addWidget(QLabel("<strong>Aircraft:</strong>"), counter, 0)
counter = self._add_checkboxes(self.faction.aircraft, counter, grid)
counter = self._add_checkboxes(self.faction.aircraft, counter, grid, hbox)
if len(self.faction.awacs) > 0:
self.add_awacs_combo = QComboBox()
hbox = self._create_aircraft_combobox(
self.add_awacs_combo,
lambda: self._on_add_ac(self.faction.awacs, self.add_awacs_combo),
self._awacs_predicate,
)
grid.addWidget(QLabel("<strong>AWACS:</strong>"), counter, 0)
counter = self._add_checkboxes(self.faction.awacs, counter, grid)
counter = self._add_checkboxes(self.faction.awacs, counter, grid, hbox)
if len(self.faction.tankers) > 0:
self.add_tanker_combo = QComboBox()
hbox = self._create_aircraft_combobox(
self.add_tanker_combo,
lambda: self._on_add_ac(self.faction.tankers, self.add_tanker_combo),
self._tanker_predicate,
)
grid.addWidget(QLabel("<strong>Tankers:</strong>"), counter, 0)
counter = self._add_checkboxes(self.faction.tankers, counter, grid)
counter = self._add_checkboxes(self.faction.tankers, counter, grid, hbox)
if len(self.faction.frontline_units) > 0:
self.add_frontline_combo = QComboBox()
hbox = self._create_unit_combobox(
self.add_frontline_combo,
lambda: self._on_add_unit(
self.faction.frontline_units, self.add_frontline_combo
),
self.faction.frontline_units,
)
grid.addWidget(QLabel("<strong>Frontlines vehicles:</strong>"), counter, 0)
counter = self._add_checkboxes(self.faction.frontline_units, counter, grid)
counter = self._add_checkboxes(
self.faction.frontline_units, counter, grid, hbox
)
if len(self.faction.artillery_units) > 0:
grid.addWidget(QLabel("<strong>Artillery units:</strong>"), counter, 0)
counter = self._add_checkboxes(self.faction.artillery_units, counter, grid)
@ -82,6 +127,76 @@ class QFactionUnits(QScrollArea):
self.content.setLayout(grid)
def _aircraft_predicate(self, ac: AircraftType):
if (
FlightType.AEWC not in ac.task_priorities
and FlightType.REFUELING not in ac.task_priorities
):
self.add_ac_combo.addItem(ac.variant_id, ac)
def _awacs_predicate(self, ac: AircraftType):
if FlightType.AEWC in ac.task_priorities:
self.add_awacs_combo.addItem(ac.variant_id, ac)
def _tanker_predicate(self, ac: AircraftType):
if FlightType.REFUELING in ac.task_priorities:
self.add_tanker_combo.addItem(ac.variant_id, ac)
def _create_aircraft_combobox(
self, cb: QComboBox, callback: Callable, predicate: Callable
):
for ac_dcs in sorted(AircraftType.each_dcs_type(), key=lambda x: x.id):
if (
ac_dcs not in self.faction.country.planes
and ac_dcs not in self.faction.country.helicopters
):
continue
for ac in AircraftType.for_dcs_type(ac_dcs):
if ac in self.faction.aircraft:
continue
predicate(ac)
add_ac = QPushButton("+")
add_ac.setStyleSheet("QPushButton{ font-weight: bold; }")
add_ac.setFixedWidth(50)
add_ac.clicked.connect(callback)
hbox = QHBoxLayout()
hbox.addWidget(cb)
hbox.addWidget(add_ac)
return hbox
def _create_unit_combobox(
self, cb: QComboBox, callback: Callable, units: Set[GroundUnitType]
):
for dcs_unit in sorted(GroundUnitType.each_dcs_type(), key=lambda x: x.id):
if dcs_unit not in self.faction.country.vehicles:
continue
for unit in GroundUnitType.for_dcs_type(dcs_unit):
if unit in units:
continue
cb.addItem(unit.variant_id, unit)
add_unit = QPushButton("+")
add_unit.setStyleSheet("QPushButton{ font-weight: bold; }")
add_unit.setFixedWidth(50)
add_unit.clicked.connect(callback)
hbox = QHBoxLayout()
hbox.addWidget(cb)
hbox.addWidget(add_unit)
return hbox
def _on_add_unit(self, units: Set[UnitType], cb: QComboBox):
units.add(cb.currentData())
if self.faction.__dict__.get("accessible_units"):
# invalidate the cached property
del self.faction.__dict__["accessible_units"]
self.updateFaction(self.faction)
def _on_add_ac(self, aircraft: Set[AircraftType], cb: QComboBox):
aircraft.add(cb.currentData())
if self.faction.__dict__.get("all_aircrafts"):
# invalidate the cached property
del self.faction.__dict__["all_aircrafts"]
self.updateFaction(self.faction)
def updateFaction(self, faction: Faction):
self.faction = faction
self.content = QWidget()

View File

@ -122,6 +122,8 @@ class GeneratorOptions(QtWidgets.QWizardPage):
self.registerField("f104_starfighter", self.f104_starfighter)
self.f105_thunderchief = QtWidgets.QCheckBox()
self.registerField("f105_thunderchief", self.f105_thunderchief)
self.f106_deltadart = QtWidgets.QCheckBox()
self.registerField("f106_deltadart", self.f106_deltadart)
self.jas39_gripen = QtWidgets.QCheckBox()
self.registerField("jas39_gripen", self.jas39_gripen)
self.super_etendard = QtWidgets.QCheckBox()
@ -161,6 +163,7 @@ class GeneratorOptions(QtWidgets.QWizardPage):
("F-100 Super Sabre (v2.7.18.30765 patch 20.10.22)", self.f100_supersabre),
("F-104 Starfighter (v2.7.11.222.01)", self.f104_starfighter),
("F-105 Thunderchief (v2.7.12.23x)", self.f105_thunderchief),
("F-106 Delta Dart (v2.9.4.101)", self.f106_deltadart),
("F-15D Baz (v1.0)", self.f15d_baz),
("F-15I Ra'am (v1.0 by IDF Mods Project)", self.f_15_idf),
("F-16I Sufa & F-16D (v3.6 by IDF Mods Project)", self.f_16_idf),
@ -234,6 +237,7 @@ class GeneratorOptions(QtWidgets.QWizardPage):
self.f100_supersabre.setChecked(s.get("f100_supersabre", False))
self.f104_starfighter.setChecked(s.get("f104_starfighter", False))
self.f105_thunderchief.setChecked(s.get("f105_thunderchief", False))
self.f106_deltadart.setChecked(s.get("f106_deltadart", False))
self.jas39_gripen.setChecked(s.get("jas39_gripen", False))
self.super_etendard.setChecked(s.get("super_etendard", False))
self.su30_flanker_h.setChecked(s.get("su30_flanker_h", False))

View File

@ -32,7 +32,7 @@ pluggy==1.5.0
pre-commit==3.7.0
pydantic==2.7.1
pydantic-settings==2.2.1
pydcs @ git+https://github.com/dcs-retribution/pydcs@961b5e1109c416f1a168d10db52c34bede6306af
pydcs @ git+https://github.com/dcs-retribution/pydcs@805088f20263025eda61398d10383e4d73945dc7
pyinstaller==5.13.2
pyinstaller-hooks-contrib==2024.0
pyparsing==3.1.2

View File

@ -5,7 +5,25 @@ authors: Starfire
recommended_player_faction: Blufor Late Cold War (80s)
recommended_enemy_faction: Russia 1980
description:
<p>In 1983 during the height of the Cold War, tensions escalate to a breaking point as the Soviet Union, misinterpreting NATO's Able Archer 83 exercise as a genuine mobilisation for a surprise nuclear attack, decides to launch a pre-emptive conventional strike. On the 9th of November, Soviet forces commence a sudden and overwhelming invasion of Finland and Norway, aiming to secure strategic territories and disrupt NATO's northern flank before it can organize an effective response.</p>
<p>In 1983, during the height of the Cold War, tensions escalate to
a breaking point as the Soviet Union, misinterpreting NATO's Able
Archer 83 exercise as a genuine mobilisation for a surprise nuclear
attack, decides to launch a pre-emptive conventional strike. On the
9th of November, Soviet forces commence a sudden invasion of Norway,
aiming to secure strategic territories and disrupt NATO's northern
flank before it can organize an effective response.</p>
<p>Simultaneously, the Soviet Union extends its offensive to include
Finland and Sweden. Although officially neutral, these nations are
perceived as potential staging grounds for NATO reinforcements and
supply lines. The Soviet high command believes that controlling
these territories will prevent NATO from using their airspace and
ports to launch counterattacks or obtain logistical support.</p>
<p>As Soviet forces push across the borders, NATO and its new allies
must swiftly mobilise to defend their territories. The battle quickly
expands into a broader conflict, with both sides aiming to gain
control of critical regions. The ultimate objective for NATO and its
allies becomes clear. They must push eastward to the Kola Peninsula
to neutralise the Soviet threat and restore stability to Northern Europe.</p>
miz: exercise_able_archer.miz
performance: 1
recommended_start_date: 1983-11-09
@ -20,7 +38,7 @@ squadrons:
secondary: any
aircraft:
- A-10A Thunderbolt II
size: 8
size: 4
- primary: BARCAP
secondary: any
aircraft:
@ -30,11 +48,6 @@ squadrons:
secondary: any
aircraft:
- F-15C Eagle
size: 16
- primary: Escort
secondary: any
aircraft:
- Mirage F1CE
size: 12
- primary: BAI
secondary: any
@ -44,30 +57,20 @@ squadrons:
- primary: Refueling
aircraft:
- KC-135 Stratotanker
size: 1
- primary: Air Assault
size: 2
- primary: Transport
secondary: any
aircraft:
- C-130J-30 Super Hercules
- C-130
size: 4
- primary: Transport
secondary: any
aircraft:
- CH-47D
size: 2
#Lakselv
#Banak
1:
- primary: SEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 16
- primary: CAS
secondary: any
aircraft:
- SA 342L Gazelle
size: 2
- primary: Refueling
aircraft:
- KC-130
@ -85,6 +88,16 @@ squadrons:
aircraft:
- MiG-21bis Fishbed-N
size: 12
- primary: BAI
secondary: any
aircraft:
- F-4E-45MC Phantom II
size: 12
- primary: Escort
secondary: any
aircraft:
- Mirage-F1CE
size: 12
- primary: Air Assault
secondary: any
aircraft:
@ -97,7 +110,7 @@ squadrons:
aircraft:
- C-47 Dakota
size: 3
#Kiruna (14)
#Kiruna
5:
- primary: DEAD
secondary: air-to-ground
@ -132,18 +145,18 @@ squadrons:
secondary: air-to-ground
aircraft:
- AV-8B Harrier II Night Attack
size: 12
size: 16
- primary: Air Assault
secondary: any
aircraft:
- UH-1H Iroquois
size: 4
size: 2
- primary: Escort
secondary: any
aircraft:
- AH-1J SeaCobra
size: 4
#RAF Fairfield
size: 2
#RAF Fairford
Bombers from RAF Fairford:
- primary: Strike
secondary: any
@ -162,7 +175,7 @@ squadrons:
aircraft:
- Su-17M4 Fitter-K
size: 6
#Severomorsk1
#Severomorsk-1
8:
- primary: BARCAP
secondary: any
@ -172,23 +185,19 @@ squadrons:
- primary: Escort
secondary: any
aircraft:
- MiG-23ML Flogger-G
- MiG-23MLD Flogger-K
size: 8
- primary: SEAD
secondary: any
aircraft:
- MiG-27K Flogger-J2
size: 16
#Severomorsk3
#Severomorsk-3
6:
- primary: AEW&C
aircraft:
- A-50
size: 1
- primary: Refueling
aircraft:
- IL-78M
size: 1
size: 2
- primary: DEAD
secondary: any
aircraft:
@ -204,7 +213,7 @@ squadrons:
aircraft:
- Mi-8MTV2 Hip
size: 4
#Olenegorsk
#Olenya
9:
- primary: Strike
secondary: any
@ -216,10 +225,9 @@ squadrons:
aircraft:
- Tu-22M3 Backfire-C
size: 16
- primary: Transport
secondary: any
- primary: Refueling
aircraft:
- IL-76MD
- IL-78M
size: 2
#Monchegorsk
10:
@ -237,4 +245,15 @@ squadrons:
secondary: any
aircraft:
- MiG-21bis Fishbed-N
size: 16
size: 16
#Murmansk International
12:
- primary: AEW&C
aircraft:
- A-50
size: 1
- primary: Transport
secondary: any
aircraft:
- IL-76MD
size: 2

View File

@ -150,7 +150,7 @@ squadrons:
- primary: SEAD
secondary: any
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
size: 20
- primary: DEAD
secondary:

View File

@ -22,10 +22,10 @@ settings:
squadrons:
#Mount Pleasant
2:
- primary: DEAD
- primary: BAI
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
- F-15E Strike Eagle (Suite 4+)
size: 8
- primary: CAS
secondary: air-to-ground
@ -54,10 +54,10 @@ squadrons:
size: 1
#San Julian
11:
- primary: BAI
- primary: DEAD
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
- F-16CM Fighting Falcon (Block 50)
size: 8
#Blue CV
Blue-CV:

View File

@ -67,7 +67,7 @@ squadrons:
- primary: DEAD
secondary: air-to-ground
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
size: 12
#Akrotiri
44:

Binary file not shown.

View File

@ -0,0 +1,260 @@
---
name: Kola Peninsula - Operation Frostbite (Test Build)
theater: Kola
authors: Chimiste
recommended_player_faction: Bluefor Modern
recommended_enemy_faction: Russia 2010
description:
<p>The year is 2016. The world watches with bated breath as NATO's expansion eastward stokes the flames of conflict with Russia. Under the iron rule of President Nikolai Zakharov, the Kremlin perceives this encroachment as a direct threat to its national security and a relic of Cold War hostilities.</p>
<p>Finland, a neutral nation sharing a vast border with Russia, becomes the focal point of this geopolitical chess match. Its potential accession to NATO would significantly bolster the alliance's presence on Russia's doorstep, a prospect Zakharov views as intolerable.</p>
<p>In June of 2016, amidst swirling rumors and escalating tensions, whispers of secret NATO expansion talks involving Finland reach the Kremlin. Zakharov, fearing imminent encirclement, makes a decisive and ruthless move. Under the cover of darkness, Russian forces launch a swift and brutal invasion, catching the Finnish military off guard.</p>
<p>Within days, Russian armored divisions and airborne troops seize control of a significant portion of Lapland, a strategic region rich in natural resources and bordering key NATO member, Norway. The world is stunned by the brazen aggression, and the once neutral Finland finds itself thrust into the center of a new global conflict.</p>
miz: operation_frostbite.miz
performance: 3
recommended_start_date: 2016-06-06
version: "10.7"
settings:
restrict_weapons_by_date: false
hercules: false
squadrons:
#Lakselv
1:
- primary: CAS
secondary: any
aircraft:
- A-10C Thunderbolt II (Suite 7)
- primary: SEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
- primary: TARCAP
secondary: any
aircraft:
- F-15C Eagle
- primary: BAI
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
- primary: Refueling
aircraft:
- KC-135 Stratotanker
- primary: AEW&C
aircraft:
- E-2C Hawkeye
#BAS 100
4:
- primary: BAI
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
- A-10C Thunderbolt II (Suite 7)
- primary: CAS
secondary: any
aircraft:
- AH-64D Apache Longbow
#Rovaniemi
2:
- primary: BARCAP
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
- primary: TARCAP
secondary: any
aircraft:
- F-14B Tomcat
- primary: SEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
#Kemi Tornio
3:
- primary: DEAD
secondary: air-to-ground
aircraft:
- F-16CM Fighting Falcon (Block 50)
- primary: BAI
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
FOB Jeesio:
- primary: CAS
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
- primary: CAS
secondary: air-to-ground
aircraft:
- AJS-37 Viggen
- primary: BAI
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
#Severomorsk1
8:
- primary: BARCAP
secondary: any
aircraft:
- MiG-29S Fulcrum-C
- primary: Escort
secondary: any
aircraft:
- MiG-29S Fulcrum-C
- primary: SEAD
secondary: any
aircraft:
- Su-33 Flanker-D
#Severomorsk3
6:
- primary: AEW&C
aircraft:
- A-50
- primary: Refueling
aircraft:
- IL-76M
- primary: DEAD
secondary: any
aircraft:
- Su-34 Fullback
- primary: TARCAP
secondary: any
aircraft:
- Su-27 Flanker-B
- primary: Air Assault
secondary: any
aircraft:
- Mi-24P Hind-F
#Olenegorsk
9:
- primary: Strike
secondary: any
aircraft:
- Tu-95MS Bear-H
- primary: CAS
secondary: any
aircraft:
- Su-25T Frogfoot
- primary: Transport
secondary: any
aircraft:
- IL-76MD
#Monchegorsk
10:
- primary: BARCAP
secondary: any
aircraft:
- MiG-29S Fulcrum-C
- primary: Escort
secondary: any
aircraft:
- MiG-29S Fulcrum-C
- primary: BAI
secondary: any
aircraft:
- Su-25T Frogfoot
FOB Verkhnetulomskiy:
- primary: BARCAP
secondary: any
aircraft:
- MiG-29S Fulcrum-C
- primary: CAS
secondary: any
aircraft:
- Su-25T Frogfoot
- Mi-24P Hind-F
- primary: DEAD
secondary: any
aircraft:
- Su-34 Fullback
FOB Nikel:
- primary: SEAD
secondary: any
aircraft:
- Su-24M Fencer-D
- primary: Escort
secondary: any
aircraft:
- MiG-29S Fulcrum-C
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
FOB Neiden:
- primary: Air Assault
secondary: any
aircraft:
- Mi-24P Hind-F
- primary: BARCAP
secondary: any
aircraft:
- Su-27 Flanker-B
- primary: CAS
secondary: any
aircraft:
- Su-30 Flanker-C
FOB Kevajarvi:
- primary: TARCAP
secondary: any
aircraft:
- MiG-29S Fulcrum-C
- primary: SEAD
secondary: any
aircraft:
- Su-24M Fencer-D
- primary: Escort
secondary: any
aircraft:
- Su-27 Flanker-B
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
FOB Karigasniemi:
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
- primary: BAI
secondary: any
aircraft:
- Su-25T Frogfoot
- primary: TARCAP
secondary: any
aircraft:
- Su-33 Flanker-D
FOB Lokka:
- primary: Air Assault
secondary: any
aircraft:
- Mi-24P Hind-F
- primary: BARCAP
secondary: any
aircraft:
- Su-27 Flanker-B
- primary: CAS
secondary: any
aircraft:
- Su-30 Flanker-C
FOB Zasheyek:
- primary: SEAD
secondary: any
aircraft:
- Su-24M Fencer-D
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
- primary: Escort
secondary: any
aircraft:
- Su-27 Flanker-B

View File

@ -37,12 +37,12 @@ squadrons:
- primary: SEAD
secondary: any
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
size: 20
- primary: Escort
secondary: any
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
size: 20
- primary: AEW&C
aircraft:

View File

@ -98,7 +98,7 @@ squadrons:
- primary: SEAD
secondary: air-to-ground
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
size: 20
- primary: TARCAP
secondary: air-to-air

View File

@ -95,7 +95,7 @@ squadrons:
- primary: Strike
secondary: air-to-ground
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
- H-6J Badger
size: 16
- primary: BAI
@ -121,7 +121,7 @@ squadrons:
- primary: Escort
secondary: air-to-air
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
- Mirage-F1EQ
size: 16
# Abu Al Duhur
@ -129,7 +129,7 @@ squadrons:
- primary: Fighter sweep
secondary: air-to-air
aircraft:
- F-4E Phantom II
- F-4E-45MC Phantom II
- MiG-23ML Flogger-G
size: 8
# Gaziantep

View File

@ -41,6 +41,11 @@ squadrons:
- OV-10A Bronco
size: 8
- primary: SEAD
secondary: any
aircraft:
- F-4E-45MC Phantom II
size: 8
- primary: DEAD
secondary: any
aircraft:
- F-4E Phantom II

View File

@ -104,19 +104,19 @@ local unitPayloads = {
["name"] = "SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 1,
},
[5] = {
@ -132,19 +132,19 @@ local unitPayloads = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{3E6B632D-65EB-44D2-9501-1C2D04515404}",
["CLSID"] = "{AGM_45B}",
["num"] = 1,
},
[5] = {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
local unitPayloads = {
["name"] = "VSN_F106A",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{44EE8698-89F9-48EE-AF36-5FD31896A82F}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{VSN_F106R_PTB}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{VSN_F106L_PTB}",
["num"] = 1,
},
[4] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 19,
},
},
},
["tasks"] = {
},
["unitType"] = "VSN_F106A",
}
return unitPayloads

View File

@ -0,0 +1,45 @@
local unitPayloads = {
["name"] = "VSN_F106B",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{44EE8698-89F9-48EE-AF36-5FD31896A82F}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{VSN_F106R_PTB}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{VSN_F106L_PTB}",
["num"] = 1,
},
[4] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 19,
},
},
},
["tasks"] = {
},
["unitType"] = "VSN_F106B",
}
return unitPayloads

View File

@ -24,6 +24,7 @@
"Su-25 Frogfoot",
"Su-25T Frogfoot",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"Mirage-F1CE",
"Tu-142 Bear-F",

View File

@ -25,6 +25,7 @@
"F-16D Fighting Falcon (Block 50+)",
"F-16D Fighting Falcon (Block 50)",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F/A-18C Hornet (Lot 20)",
"Mirage 2000C",
"OH-58D Kiowa Warrior",

View File

@ -17,6 +17,7 @@
"F-4B Phantom II",
"F-4C Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"F-100 Super Sabre",
"F-104C Starfighter",

View File

@ -17,6 +17,7 @@
"F-4B Phantom II",
"F-4C Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"F-100 Super Sabre",
"F-104C Starfighter",

View File

@ -15,6 +15,7 @@
"SA 342M Gazelle",
"Gazelle AH.1",
"Phantom F.3",
"Phantom FGR.2",
"Tornado GR4",
"F-15E Strike Eagle (Suite 4+)",
"F-16CM Fighting Falcon (Block 50)",

View File

@ -16,6 +16,7 @@
"F-14A Tomcat (Block 135-GR Late)",
"F-14B Tomcat",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"Mirage-F1B",
"Mirage-F1BE",

View File

@ -26,6 +26,7 @@
"F-16CM Fighting Falcon (Block 50)",
"F/A-18C Hornet (Lot 20)",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"Mi-8MTV2 Hip",
"MiG-21bis Fishbed-N",

View File

@ -11,6 +11,7 @@
"MiG-21bis Fishbed-N",
"Mirage 2000C",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-16CM Fighting Falcon (Block 50)",
"IL-76MD",
"C-130",

View File

@ -15,6 +15,7 @@
"Mirage 2000-5",
"SA 342M Gazelle",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"Su-25 Frogfoot",
"F-16CM Fighting Falcon (Block 50)"
],

View File

@ -9,6 +9,7 @@
"aircrafts": [
"C-130",
"F-4F Phantom II",
"F-4E-45MC Phantom II",
"MiG-29G Fulcrum-A",
"SA 342L Gazelle",
"SA 342M Gazelle",

View File

@ -14,6 +14,7 @@
"F-16D Fighting Falcon (Block 52+)",
"F-16D Fighting Falcon (Block 52)",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"Mirage 2000-5",
"Mirage 2000C",
"UH-1H Iroquois"

View File

@ -12,6 +12,7 @@
"F-14A Tomcat (Block 135-GR Late)",
"F-4C Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"MiG-21bis Fishbed-N"
],

View File

@ -10,6 +10,7 @@
"F-14A Tomcat (AI)",
"F-14A Tomcat (Block 135-GR Late)",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"IL-76MD",
"Mi-24V Hind-E",

View File

@ -9,6 +9,7 @@
"aircrafts": [
"A-4E Skyhawk",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"UH-1H Iroquois",
"C-130",
"C-130J-30 Super Hercules"

View File

@ -13,6 +13,7 @@
"F-16A",
"F-16CM Fighting Falcon (Block 50)",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"UH-1H Iroquois"
],
"awacs": [

View File

@ -21,6 +21,7 @@
"F-16D Barak (Block 40)",
"F-16I Sufa",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"UH-1H Iroquois",
"UH-60L"
],

View File

@ -14,6 +14,7 @@
"C-130J-30 Super Hercules",
"F-15J Eagle",
"F-2A",
"F-4EJ Phantom II",
"F-4EJ Kai Phantom II"
],
"awacs": [

View File

@ -7,6 +7,7 @@
"ru_RU"
],
"aircrafts": [
"IL-76MD",
"Mi-24V Hind-E",
"Mi-24P Hind-F",
"Mi-8MTV2 Hip",

View File

@ -11,6 +11,7 @@
"C-130",
"C-101CC Aviojet",
"F-4C Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"Mirage-F1BE",
"Mirage-F1CE",

View File

@ -14,6 +14,7 @@
"F-16D Fighting Falcon (Block 50+)",
"F-16D Fighting Falcon (Block 50)",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"OH-58D Kiowa Warrior",
"UH-1H Iroquois",
"UH-60A",

View File

@ -13,6 +13,7 @@
"C-130J-30 Super Hercules",
"Gazelle AH.1",
"Phantom FG.1",
"Phantom FGR.2",
"Phantom F.3",
"Tornado GR4"
],

View File

@ -13,6 +13,8 @@
"F-86F Sabre",
"F-100 Super Sabre",
"F-104C Starfighter",
"F-106A Delta Dart",
"F-106B Delta Dart",
"P-51D-25-NA Mustang",
"P-51D-30-NA Mustang",
"F-105D Thunderchief",

View File

@ -14,11 +14,15 @@
"A-6A Intruder",
"F-4B Phantom II",
"F-4C Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"F-100 Super Sabre",
"F-104C Starfighter",
"F-105D Thunderchief",
"F-105G Thunderchief",
"F-106A Delta Dart",
"F-106B Delta Dart",
"UH-1H Iroquois"
],
"awacs": [

View File

@ -11,6 +11,7 @@
"F-4C Phantom II",
"F-4B Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"A-4E Skyhawk",
"OV-10A Bronco",

View File

@ -18,9 +18,12 @@
"F-4B Phantom II",
"F-4C Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-5E Tiger II",
"F-100 Super Sabre",
"F-105G Thunderchief",
"F-106A Delta Dart",
"F-106B Delta Dart",
"S-3B Viking",
"OV-10A Bronco",
"UH-1H Iroquois"

View File

@ -16,6 +16,7 @@
"F-14B Tomcat",
"F-4B Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"S-3B Viking",
"SH-60B Seahawk",
"UH-1H Iroquois"

View File

@ -24,6 +24,7 @@
"CH-53E",
"F-4B Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-84G Thunderjet",
"F-86F Sabre",
"F-5E Tiger II",

View File

@ -24,6 +24,7 @@
"CH-53E",
"F-4B Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-84G Thunderjet",
"F-86F Sabre",
"F-5E Tiger II",

View File

@ -24,6 +24,7 @@
"CH-53E",
"F-4B Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-84G Thunderjet",
"F-86F Sabre",
"F-5E Tiger II",

View File

@ -24,6 +24,7 @@
"CH-53E",
"F-4B Phantom II",
"F-4E Phantom II",
"F-4E-45MC Phantom II",
"F-84G Thunderjet",
"F-86F Sabre",
"F-5E Tiger II",

View File

@ -108,6 +108,7 @@ explTable = {
["MK_82SNAKEYE"]= 118, --
["GBU_10"] = 582,
["GBU_12"] = 118, --
["GBU_15_V_31_B"] = 910, --
["GBU_16"] = 274,
["KAB_1500Kr"] = 675, --
["KAB_500Kr"] = 213,
@ -139,7 +140,13 @@ explTable = {
["RB75"] = 57,
["RB75B"] = 57,
["RB75T"] = 136,
["AGM_12A"] = 110,
["AGM_12B"] = 110,
["AGM_12C"] = 440,
["AGM_45A"] = 68,
["AGM_45B"] = 68,
["AGM_65A"] = 57,
["AGM_65B"] = 57,
["AGM_65D"] = 57,
["AGM_65E"] = 136,
["AGM_65F"] = 136,
@ -147,6 +154,8 @@ explTable = {
["AGM_65H"] = 57,
["AGM_65K"] = 136,
["AGM_65L"] = 136,
["AGM_78A"] = 97,
["AGM_78B"] = 97,
["AGM_84A"] = 221,
["AGM_84D"] = 221,
["AGM_84S"] = 221,
@ -269,6 +278,9 @@ explTable = {
--["BLU-97/B"] = 10,
--["BLU-97B"] = 10,
--["MK118"] = 8,
["HB_F4E_AGM_12C"] = 440,
["HB_F4E_GBU_8_HOBOS"] = 429,
["HB_F4E_GBU15V1"] = 910,
}
clusterDamage = {

View File

@ -0,0 +1,22 @@
---
name: EAF 222nd TFB
nickname: Pharaoh's Ghosts
country: Egypt
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: EAF-60366_Ghost
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: EAF 222nd TFB SEA
nickname: Pharaoh's Ghosts
country: Egypt
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: EAF-70373_SEAW
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: GAF JG 72
nickname: Westphalen
country: Germany
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: 37+24_N81B_JG72
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: GAF JG 74
nickname: Moelders
country: Germany
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: 37+36_N72_JG74
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: HAF 338rd FS
nickname: Ares
country: Greece
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: HAF-01507_AG
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: IAF 119 FS
nickname: Bat Squadron
country: Israel
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: IAF-Kurnass-114-119SQN
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: IAF 69 FS
nickname: Hammers
country: Israel
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: IAF-Kurnass-175-69SQN
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: IRIAF 61st TFS
nickname: Panthers
country: Iran
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: IRIAF-3-6643
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: JASDF 8th TFS
nickname: Black Panthers
country: Japan
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: JASDF-87-8312-3WG
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: RAAF No. 1 SQN
nickname: Fighting First
country: Australia
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: RAAF-97203_SEA
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: RAF No. 43 SQN
nickname: Fighting Cocks
country: UK
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: RAF-43-Sqn-FG.1
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: ROKAF 153rd FS
nickname: 153rd Fighter Squadron
country: South Korea
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: ROKAF-80470-CG-153FS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: TuAF 111 Filo
nickname: Panter
country: Turkey
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: TUAF-67-0268-H2
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 110th ANG BS
nickname: Lindbergh's Own
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: SL68-303_H1_110ANG
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 141st TFS
nickname: Tigers
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: NJ68-357_H1_141TFS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 163rd TFG
nickname: Grizzlys
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: CA68-426_H2_163tfg
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 20th FS
nickname: Silver Lobos
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: default
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 36th TFS
nickname: The Flying Fiends
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: OS68-349_SEAW_36TFS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 457th ANG FS
nickname: Spads
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: TH68-450_H1_457FS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 469th FTS
nickname: Fighting Bulls
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: JV67-288_SEAW_469TFS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 512th TFS
nickname: Dragons
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: RS68-480_SEA_512TFS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 526th TFS
nickname: Black Knights
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: RS68-381_E1_526TFS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 57th FIS
nickname: Black Knights
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: ADC AF66-300
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

View File

@ -0,0 +1,22 @@
---
name: USAF 68th FS
nickname: Lightning Lancers
country: USA
role: Fighter Bomber
aircraft: F-4E-45MC Phantom II
livery: MY68-328_E1_68FS
mission_types:
- Anti-ship
- BAI
- BARCAP
- CAS
- DEAD
- Escort
- Intercept
- OCA/Aircraft
- OCA/Runway
- SEAD
- SEAD Escort
- Strike
- Fighter sweep
- TARCAP

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