mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Many of the aircraft that we use for DEAD are not actually capable of the SEAD task in DCS, so they were being loaded as some other task type, usually one that doesn't support Attack Group, which made them lose their waypoint actions and do nothing. This switches them to using CAS which supports a superset of the SEAD capable aircraft. I've also audited the SEAD/DEAD lists. The F-117 was removed because it is not capable of Attack Group *at all*, and all the non-SEAD aircraft that are capable of ground attack moved from SEAD to DEAD. Fixes https://github.com/dcs-liberation/dcs_liberation/issues/1086
422 lines
6.7 KiB
Python
422 lines
6.7 KiB
Python
import logging
|
|
from typing import List, Type
|
|
|
|
from dcs.helicopters import (
|
|
AH_1W,
|
|
AH_64A,
|
|
AH_64D,
|
|
CH_47D,
|
|
CH_53E,
|
|
Ka_50,
|
|
Mi_24V,
|
|
Mi_26,
|
|
Mi_28N,
|
|
Mi_8MT,
|
|
OH_58D,
|
|
SA342L,
|
|
SA342M,
|
|
SH_60B,
|
|
UH_1H,
|
|
UH_60A,
|
|
)
|
|
from dcs.planes import (
|
|
AJS37,
|
|
AV8BNA,
|
|
A_10A,
|
|
A_10C,
|
|
A_10C_2,
|
|
A_20G,
|
|
A_50,
|
|
An_26B,
|
|
B_17G,
|
|
B_1B,
|
|
B_52H,
|
|
Bf_109K_4,
|
|
C_101CC,
|
|
C_130,
|
|
C_17A,
|
|
E_2C,
|
|
E_3A,
|
|
FA_18C_hornet,
|
|
FW_190A8,
|
|
FW_190D9,
|
|
F_117A,
|
|
F_14A_135_GR,
|
|
F_14B,
|
|
F_15C,
|
|
F_15E,
|
|
F_16A,
|
|
F_16C_50,
|
|
F_4E,
|
|
F_5E_3,
|
|
F_86F_Sabre,
|
|
IL_76MD,
|
|
I_16,
|
|
JF_17,
|
|
J_11A,
|
|
Ju_88A4,
|
|
KJ_2000,
|
|
L_39ZA,
|
|
MQ_9_Reaper,
|
|
M_2000C,
|
|
MiG_15bis,
|
|
MiG_19P,
|
|
MiG_21Bis,
|
|
MiG_23MLD,
|
|
MiG_25PD,
|
|
MiG_27K,
|
|
MiG_29A,
|
|
MiG_29G,
|
|
MiG_29S,
|
|
MiG_31,
|
|
Mirage_2000_5,
|
|
P_47D_30,
|
|
P_47D_30bl1,
|
|
P_47D_40,
|
|
P_51D,
|
|
P_51D_30_NA,
|
|
RQ_1A_Predator,
|
|
S_3B,
|
|
SpitfireLFMkIX,
|
|
SpitfireLFMkIXCW,
|
|
Su_17M4,
|
|
Su_24M,
|
|
Su_24MR,
|
|
Su_25,
|
|
Su_25T,
|
|
Su_25TM,
|
|
Su_27,
|
|
Su_30,
|
|
Su_33,
|
|
Su_34,
|
|
Tornado_GR4,
|
|
Tornado_IDS,
|
|
Tu_160,
|
|
Tu_22M3,
|
|
Tu_95MS,
|
|
WingLoong_I,
|
|
I_16,
|
|
Yak_40,
|
|
)
|
|
from dcs.unittype import FlyingType
|
|
|
|
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.hercules.hercules import Hercules
|
|
from pydcs_extensions.mb339.mb339 import MB_339PAN
|
|
from pydcs_extensions.su57.su57 import Su_57
|
|
|
|
# All aircraft lists are in priority order. Aircraft higher in the list will be
|
|
# preferred over those lower in the list.
|
|
|
|
# TODO: These lists really ought to be era (faction) dependent.
|
|
# Factions which have F-5s, F-86s, and A-4s will should prefer F-5s for CAP, but
|
|
# factions that also have F-4s should not.
|
|
|
|
# Used for CAP, Escort, and intercept if there is not a specialised aircraft available
|
|
CAP_CAPABLE = [
|
|
Su_57,
|
|
F_22A,
|
|
MiG_31,
|
|
F_14B,
|
|
F_14A_135_GR,
|
|
MiG_25PD,
|
|
Su_33,
|
|
Su_30,
|
|
Su_27,
|
|
J_11A,
|
|
F_15C,
|
|
MiG_29S,
|
|
MiG_29G,
|
|
MiG_29A,
|
|
F_16C_50,
|
|
FA_18C_hornet,
|
|
F_15E,
|
|
F_16A,
|
|
F_4E,
|
|
JF_17,
|
|
MiG_23MLD,
|
|
MiG_21Bis,
|
|
Mirage_2000_5,
|
|
M_2000C,
|
|
F_5E_3,
|
|
MiG_19P,
|
|
A_4E_C,
|
|
F_86F_Sabre,
|
|
MiG_15bis,
|
|
C_101CC,
|
|
L_39ZA,
|
|
P_51D_30_NA,
|
|
P_51D,
|
|
SpitfireLFMkIXCW,
|
|
SpitfireLFMkIX,
|
|
Bf_109K_4,
|
|
FW_190D9,
|
|
FW_190A8,
|
|
P_47D_30,
|
|
P_47D_30bl1,
|
|
P_47D_40,
|
|
I_16,
|
|
]
|
|
|
|
|
|
# Used for CAS (Close air support) and BAI (Battlefield Interdiction)
|
|
CAS_CAPABLE = [
|
|
A_10C_2,
|
|
B_1B,
|
|
A_10C,
|
|
Hercules,
|
|
F_14B,
|
|
F_14A_135_GR,
|
|
Su_25TM,
|
|
Su_25T,
|
|
Su_25,
|
|
F_15E,
|
|
F_16C_50,
|
|
FA_18C_hornet,
|
|
Tornado_GR4,
|
|
Tornado_IDS,
|
|
JF_17,
|
|
A_10A,
|
|
A_4E_C,
|
|
AJS37,
|
|
Su_24MR,
|
|
Su_24M,
|
|
Su_17M4,
|
|
AV8BNA,
|
|
F_4E,
|
|
S_3B,
|
|
Su_34,
|
|
Su_30,
|
|
MiG_19P,
|
|
MiG_29S,
|
|
MiG_27K,
|
|
MiG_29A,
|
|
AH_64D,
|
|
AH_64A,
|
|
AH_1W,
|
|
OH_58D,
|
|
SA342M,
|
|
SA342L,
|
|
Ka_50,
|
|
Mi_28N,
|
|
Mi_24V,
|
|
Mi_8MT,
|
|
UH_1H,
|
|
MiG_15bis,
|
|
M_2000C,
|
|
F_5E_3,
|
|
F_86F_Sabre,
|
|
C_101CC,
|
|
MB_339PAN,
|
|
L_39ZA,
|
|
A_20G,
|
|
P_47D_40,
|
|
P_47D_30bl1,
|
|
P_47D_30,
|
|
P_51D_30_NA,
|
|
P_51D,
|
|
SpitfireLFMkIXCW,
|
|
SpitfireLFMkIX,
|
|
I_16,
|
|
Bf_109K_4,
|
|
FW_190D9,
|
|
FW_190A8,
|
|
WingLoong_I,
|
|
MQ_9_Reaper,
|
|
RQ_1A_Predator,
|
|
]
|
|
|
|
|
|
# Aircraft used for SEAD tasks. Must be capable of the SEAD DCS task.
|
|
SEAD_CAPABLE = [
|
|
JF_17,
|
|
F_16C_50,
|
|
FA_18C_hornet,
|
|
Tornado_IDS,
|
|
Su_25T,
|
|
Su_25TM,
|
|
F_4E,
|
|
A_4E_C,
|
|
AV8BNA,
|
|
Su_24M,
|
|
Su_17M4,
|
|
Su_34,
|
|
Su_30,
|
|
MiG_27K,
|
|
Tornado_GR4,
|
|
]
|
|
|
|
|
|
# Aircraft used for DEAD tasks. Must be capable of the CAS DCS task.
|
|
DEAD_CAPABLE = [
|
|
AJS37,
|
|
F_14B,
|
|
F_14A_135_GR,
|
|
B_1B,
|
|
B_52H,
|
|
Tu_160,
|
|
Tu_95MS,
|
|
A_20G,
|
|
P_47D_40,
|
|
P_47D_30bl1,
|
|
P_47D_30,
|
|
P_51D_30_NA,
|
|
P_51D,
|
|
SpitfireLFMkIXCW,
|
|
SpitfireLFMkIX,
|
|
Bf_109K_4,
|
|
FW_190D9,
|
|
FW_190A8,
|
|
] + SEAD_CAPABLE
|
|
|
|
|
|
# Aircraft used for Strike mission
|
|
STRIKE_CAPABLE = [
|
|
F_117A,
|
|
B_1B,
|
|
B_52H,
|
|
Tu_160,
|
|
Tu_95MS,
|
|
Tu_22M3,
|
|
F_15E,
|
|
AJS37,
|
|
Tornado_GR4,
|
|
F_16C_50,
|
|
FA_18C_hornet,
|
|
F_16A,
|
|
F_14B,
|
|
F_14A_135_GR,
|
|
Tornado_IDS,
|
|
Su_17M4,
|
|
Su_24MR,
|
|
Su_24M,
|
|
Su_25TM,
|
|
Su_25T,
|
|
Su_25,
|
|
Su_34,
|
|
Su_33,
|
|
Su_30,
|
|
Su_27,
|
|
MiG_29S,
|
|
MiG_29G,
|
|
MiG_29A,
|
|
JF_17,
|
|
F_4E,
|
|
A_10C_2,
|
|
A_10C,
|
|
AV8BNA,
|
|
S_3B,
|
|
A_4E_C,
|
|
M_2000C,
|
|
MiG_27K,
|
|
MiG_21Bis,
|
|
MiG_15bis,
|
|
F_5E_3,
|
|
F_86F_Sabre,
|
|
MB_339PAN,
|
|
C_101CC,
|
|
L_39ZA,
|
|
B_17G,
|
|
A_20G,
|
|
P_47D_40,
|
|
P_47D_30bl1,
|
|
P_47D_30,
|
|
P_51D_30_NA,
|
|
P_51D,
|
|
SpitfireLFMkIXCW,
|
|
SpitfireLFMkIX,
|
|
Bf_109K_4,
|
|
FW_190D9,
|
|
FW_190A8,
|
|
]
|
|
|
|
|
|
ANTISHIP_CAPABLE = [
|
|
AJS37,
|
|
Tu_22M3,
|
|
FA_18C_hornet,
|
|
Su_24M,
|
|
Su_17M4,
|
|
JF_17,
|
|
Su_34,
|
|
Su_30,
|
|
Tornado_IDS,
|
|
Tornado_GR4,
|
|
AV8BNA,
|
|
S_3B,
|
|
A_20G,
|
|
Ju_88A4,
|
|
C_101CC,
|
|
SH_60B,
|
|
]
|
|
|
|
|
|
# Duplicates some list entries but that's fine.
|
|
RUNWAY_ATTACK_CAPABLE = [
|
|
JF_17,
|
|
Su_34,
|
|
Su_30,
|
|
Tornado_IDS,
|
|
] + STRIKE_CAPABLE
|
|
|
|
# For any aircraft that isn't necessarily directly involved in strike
|
|
# missions in a direct combat sense, but can transport objects and infantry.
|
|
TRANSPORT_CAPABLE = [
|
|
C_17A,
|
|
Hercules,
|
|
C_130,
|
|
IL_76MD,
|
|
An_26B,
|
|
Yak_40,
|
|
CH_53E,
|
|
CH_47D,
|
|
SH_60B,
|
|
UH_60A,
|
|
UH_1H,
|
|
Mi_8MT,
|
|
Mi_8MT,
|
|
Mi_26,
|
|
]
|
|
|
|
DRONES = [MQ_9_Reaper, RQ_1A_Predator, WingLoong_I]
|
|
|
|
AEWC_CAPABLE = [
|
|
E_3A,
|
|
E_2C,
|
|
A_50,
|
|
KJ_2000,
|
|
]
|
|
|
|
|
|
def aircraft_for_task(task: FlightType) -> List[Type[FlyingType]]:
|
|
cap_missions = (FlightType.BARCAP, FlightType.TARCAP)
|
|
if task in cap_missions:
|
|
return CAP_CAPABLE
|
|
elif task == FlightType.ANTISHIP:
|
|
return ANTISHIP_CAPABLE
|
|
elif task == FlightType.BAI:
|
|
return CAS_CAPABLE
|
|
elif task == FlightType.CAS:
|
|
return CAS_CAPABLE
|
|
elif task == FlightType.SEAD:
|
|
return SEAD_CAPABLE
|
|
elif task == FlightType.DEAD:
|
|
return DEAD_CAPABLE
|
|
elif task == FlightType.OCA_AIRCRAFT:
|
|
return CAS_CAPABLE
|
|
elif task == FlightType.OCA_RUNWAY:
|
|
return RUNWAY_ATTACK_CAPABLE
|
|
elif task == FlightType.STRIKE:
|
|
return STRIKE_CAPABLE
|
|
elif task == FlightType.ESCORT:
|
|
return CAP_CAPABLE
|
|
elif task == FlightType.AEWC:
|
|
return AEWC_CAPABLE
|
|
elif task == FlightType.TRANSPORT:
|
|
return TRANSPORT_CAPABLE
|
|
else:
|
|
logging.error(f"Unplannable flight type: {task}")
|
|
return []
|