Introduce pylon ejector for Sufa mod

Will prevent the user having to restart Retribution
This commit is contained in:
Raffson 2023-07-09 18:21:28 +02:00
parent e86fc60b41
commit 533057a0cc
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
3 changed files with 33 additions and 3 deletions

View File

@ -32,7 +32,7 @@ from game.dcs.countries import country_with_name
from game.dcs.groundunittype import GroundUnitType
from game.dcs.shipunittype import ShipUnitType
from game.dcs.unittype import UnitType
from pydcs_extensions.f16i_idf.f16i_idf import inject_F16I
from pydcs_extensions.f16i_idf.f16i_idf import inject_F16I, eject_F16I
if TYPE_CHECKING:
from game.theater.start_generator import ModSettings
@ -336,6 +336,7 @@ class Faction:
self.remove_aircraft("F-16D_52_NS")
self.remove_aircraft("F-16D_Barak_30")
self.remove_aircraft("F-16D_Barak_40")
eject_F16I()
else:
inject_F16I()
if not mod_settings.f22_raptor:

View File

@ -5,7 +5,7 @@ from dcs.planes import F_16C_50, PlaneType
from dcs.weapons_data import Weapons
from game.modsupport import planemod
from pydcs_extensions.pylon_injector import inject_pylon
from pydcs_extensions.pylon_injector import inject_pylon, eject_pylon
from pydcs_extensions.weapon_injector import inject_weapons
@ -388,7 +388,20 @@ def inject_F16I() -> None:
F_16C_50.Pylon14 = Pylon14
F_16C_50.Pylon15 = Pylon15
F_16C_50.Pylon16 = Pylon16
F_16C_50.Pylon16 = Pylon17
F_16C_50.Pylon17 = Pylon17
def eject_F16I() -> None:
F_16C_50.pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}
# Injects modified weapons from the IDF Mods Project F-16I Sufa
# into pydcs databases via introspection.
eject_pylon(F_16C_50.Pylon4, F16IDFPylon4)
eject_pylon(F_16C_50.Pylon6, F16IDFPylon6)
for p in [13, 14, 15, 16, 17]:
if hasattr(F_16C_50, f"Pylon{p}"):
delattr(F_16C_50, f"Pylon{p}")
@planemod

View File

@ -15,3 +15,19 @@ def inject_pylon(to_pylon: Any, from_pylon: Any) -> None:
continue
if isinstance(value, Tuple):
setattr(to_pylon, key, value)
def eject_pylon(to_pylon: Any, from_pylon: Any) -> None:
"""
Eject weapons/ordnance added by mods into the pylons of existing aircraft.
This is done to support mods such as the CJS Super Hornet, which modify aircraft
that exist in stock DCS. Ornance is ejected pydcs aircraft classes via introspection
:param to_pylon: The pydcs pylon class of the target aircraft
:param from_pylon: The custom pylon class containing tuples with added weapon info
:return: None
"""
for key, value in from_pylon.__dict__.items():
if key.startswith("__"):
continue
if isinstance(value, Tuple) and hasattr(to_pylon, key):
delattr(to_pylon, key)