diff --git a/game/dcs/aircrafttype.py b/game/dcs/aircrafttype.py index f2ecab72..1bcb3fdd 100644 --- a/game/dcs/aircrafttype.py +++ b/game/dcs/aircrafttype.py @@ -1,5 +1,6 @@ from __future__ import annotations +import inspect import logging from collections import defaultdict from dataclasses import dataclass @@ -11,6 +12,7 @@ import yaml from dcs.helicopters import helicopter_map from dcs.planes import plane_map from dcs.unittype import FlyingType +from dcs.weapons_data import weapon_ids from game.data.units import UnitClass from game.dcs.unitproperty import UnitProperty @@ -462,6 +464,8 @@ class AircraftType(UnitType[Type[FlyingType]]): if FlightType.SEAD in task_priorities: task_priorities[FlightType.SEAD_SWEEP] = task_priorities[FlightType.SEAD] + cls._custom_weapon_injections(aircraft, data) + for variant in data.get("variants", [aircraft.id]): yield AircraftType( dcs_unit_type=aircraft, @@ -497,5 +501,21 @@ class AircraftType(UnitType[Type[FlyingType]]): task_priorities=task_priorities, ) + @staticmethod + def _custom_weapon_injections( + aircraft: Type[FlyingType], data: Dict[str, Any] + ) -> None: + if (wpn_injection := data.get("weapon_injections")) is not None: + pylons = [ + v + for v in aircraft.__dict__.values() + if inspect.isclass(v) and v.__name__.startswith(f"Pylon") + ] + pylons.sort(key=lambda x: int(x.__name__.replace("Pylon", ""))) + for pylon_number, weapons in wpn_injection.items(): + for w in weapons: + weapon = weapon_ids[w] + setattr(pylons[pylon_number - 1], w, (pylon_number, weapon)) + def __hash__(self) -> int: return hash(self.name) diff --git a/resources/units/aircraft/A-4E-C.yaml b/resources/units/aircraft/A-4E-C.yaml index 14609d4f..695f7a97 100644 --- a/resources/units/aircraft/A-4E-C.yaml +++ b/resources/units/aircraft/A-4E-C.yaml @@ -29,3 +29,12 @@ tasks: SEAD Escort: 110 Strike: 360 TARCAP: 160 +weapon_injections: + 1: + - "{AIM-9J-ON-ADAPTER}" + 2: + - "{AIM-9J-ON-ADAPTER}" + 4: + - "{AIM-9J-ON-ADAPTER}" + 5: + - "{AIM-9J-ON-ADAPTER}"