Compare commits

...

16 Commits

Author SHA1 Message Date
Dan Albert
2bdf9d3423 Black the pydcs extensions directory. 2021-04-11 13:55:29 -07:00
Dan Albert
0cd359f36b Black the resoureces directory. 2021-04-11 13:54:55 -07:00
Dan Albert
39bd6e3c10 Avoid warning in GitHub workflow.
(cherry picked from commit 4ec8994c38)
2021-04-11 13:37:16 -07:00
Dan Albert
ed89c49fd4 Add black workflow.
(cherry picked from commit 16b0dcad71)
2021-04-11 13:31:10 -07:00
Dan Albert
4000b42df2 Add pre-commit configuration for black.
To set up, run `pre-commit install`.

(cherry picked from commit 9c1265d50d)
2021-04-11 13:31:09 -07:00
Dan Albert
f73a68aeca Note the font crash fix in the changelog.
(cherry picked from commit cce736bc16)
2021-04-11 13:29:30 -07:00
Hanninho
7f8dae003f Force the basic layout engine when generating the kneeboard.
The libraqm backed layout engine causes crashes on some machines.

Fixes #531.

(cherry picked from commit 2a1127e637)
2021-04-11 13:25:32 -07:00
Khopa
f314c08216 Improved map scale display 2021-02-27 00:29:23 +01:00
Khopa
6704cded2d Fixed unit info windows crashing when banner not found (variable referenced before assignment error) 2021-02-27 00:10:57 +01:00
Khopa
f11918fc41 Fixed F-22A invalid radio frequency issues for player flights (F-22 mod only allow 100-156Mhz frequency range)
Added F-22A icon and banner.
2021-02-27 00:10:06 +01:00
Khopa
58d5aa9944 Fixes : Missing weapons names would cause flight edition window to crash while setting up default loadout UI, preventing the user from editing flights. 2021-02-26 23:30:23 +01:00
Khopa
60af2ad0a4 Preparing 2.4.4 2021-02-26 23:12:59 +01:00
Khopa
54f2a6f1b5 Release 2.4.3 2021-02-22 21:58:56 +01:00
Khopa
7eed7ae6ba Release 2.4.3 2021-02-22 21:44:11 +01:00
C. Perreau
b3d642fdf5 Merge pull request #913 from Khopa/develop_2_4_x
Release 2.4.3    (fixed)
2021-02-22 21:41:48 +01:00
Khopa
35dd9427a5 Added possibility to set up custom date in new game wizard. 2021-02-22 21:34:14 +01:00
28 changed files with 1039 additions and 278 deletions

13
.github/workflows/black.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
name: Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: psf/black@stable
with:
args: ". --check"

6
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,6 @@
repos:
- repo: https://github.com/psf/black
rev: 20.8b1
hooks:
- id: black
language_version: python3

View File

@@ -1,3 +1,9 @@
# 2.4.4
## Fixes
* **[Mission Generation]** Fixed "invalid face handle" error in kneeboard generation that occurred on some machines.
# 2.4.3 # 2.4.3
## Features/Improvements ## Features/Improvements

View File

@@ -180,6 +180,7 @@ from pydcs_extensions.su57.su57 import Su_57
UNITINFOTEXT_PATH = Path("./resources/units/unit_info_text.json") UNITINFOTEXT_PATH = Path("./resources/units/unit_info_text.json")
plane_map["A-4E-C"] = A_4E_C plane_map["A-4E-C"] = A_4E_C
plane_map["F-22A"] = F_22A
plane_map["MB-339PAN"] = MB_339PAN plane_map["MB-339PAN"] = MB_339PAN
plane_map["Rafale_M"] = Rafale_M plane_map["Rafale_M"] = Rafale_M
plane_map["Rafale_A_S"] = Rafale_A_S plane_map["Rafale_A_S"] = Rafale_A_S

View File

@@ -2,7 +2,7 @@ from pathlib import Path
def _build_version_string() -> str: def _build_version_string() -> str:
components = ["2.4.3"] components = ["2.4.4"]
build_number_path = Path("resources/buildnumber") build_number_path = Path("resources/buildnumber")
if build_number_path.exists(): if build_number_path.exists():
with build_number_path.open("r") as build_number_file: with build_number_path.open("r") as build_number_file:

View File

@@ -649,6 +649,12 @@ AIRCRAFT_DATA: Dict[str, AircraftData] = {
), ),
channel_namer=HueyChannelNamer, channel_namer=HueyChannelNamer,
), ),
"F-22A": AircraftData(
inter_flight_radio=get_radio("SCR-522"),
intra_flight_radio=get_radio("SCR-522"),
channel_allocator=None,
channel_namer=SCR522ChannelNamer,
),
} }
AIRCRAFT_DATA["A-10C_2"] = AIRCRAFT_DATA["A-10C"] AIRCRAFT_DATA["A-10C_2"] = AIRCRAFT_DATA["A-10C"]
AIRCRAFT_DATA["P-51D-30-NA"] = AIRCRAFT_DATA["P-51D"] AIRCRAFT_DATA["P-51D-30-NA"] = AIRCRAFT_DATA["P-51D"]

View File

@@ -55,10 +55,18 @@ class KneeboardPageWriter:
# more information in the comm ladder (the latter of which we should # more information in the comm ladder (the latter of which we should
# probably do), we'll need to split some of this information off into a # probably do), we'll need to split some of this information off into a
# second page. # second page.
self.title_font = ImageFont.truetype("arial.ttf", 32) self.title_font = ImageFont.truetype(
self.heading_font = ImageFont.truetype("arial.ttf", 24) "arial.ttf", 32, layout_engine=ImageFont.LAYOUT_BASIC
self.content_font = ImageFont.truetype("arial.ttf", 20) )
self.table_font = ImageFont.truetype("resources/fonts/Inconsolata.otf", 20) self.heading_font = ImageFont.truetype(
"arial.ttf", 24, layout_engine=ImageFont.LAYOUT_BASIC
)
self.content_font = ImageFont.truetype(
"arial.ttf", 20, layout_engine=ImageFont.LAYOUT_BASIC
)
self.table_font = ImageFont.truetype(
"resources/fonts/Inconsolata.otf", 20, layout_engine=ImageFont.LAYOUT_BASIC
)
self.draw = ImageDraw.Draw(self.image) self.draw = ImageDraw.Draw(self.image)
self.x = page_margin self.x = page_margin
self.y = page_margin self.y = page_margin

View File

@@ -6,99 +6,412 @@ from dcs.weapons_data import Weapons
class WeaponsA4EC: class WeaponsA4EC:
AN_M57__2__TER_ = {"clsid": "{AN-M57_TER_2_L}", "name": "AN-M57 *2 (TER)", "weight": 273.6} AN_M57__2__TER_ = {
AN_M57__2__TER__ = {"clsid": "{AN-M57_TER_2_R}", "name": "AN-M57 *2 (TER)", "weight": 273.6} "clsid": "{AN-M57_TER_2_L}",
AN_M57__3__TER_ = {"clsid": "{AN-M57_TER_3_C}", "name": "AN-M57 *3 (TER)", "weight": 386.6} "name": "AN-M57 *2 (TER)",
AN_M57__5__MER_ = {"clsid": "{AN-M57_MER_5_L}", "name": "AN-M57 *5 (MER)", "weight": 664.8} "weight": 273.6,
AN_M57__5__MER__ = {"clsid": "{AN-M57_MER_5_R}", "name": "AN-M57 *5 (MER)", "weight": 664.8} }
AN_M57__6__MER_ = {"clsid": "{AN-M57_MER_6_C}", "name": "AN-M57 *6 (MER)", "weight": 777.8} AN_M57__2__TER__ = {
"clsid": "{AN-M57_TER_2_R}",
"name": "AN-M57 *2 (TER)",
"weight": 273.6,
}
AN_M57__3__TER_ = {
"clsid": "{AN-M57_TER_3_C}",
"name": "AN-M57 *3 (TER)",
"weight": 386.6,
}
AN_M57__5__MER_ = {
"clsid": "{AN-M57_MER_5_L}",
"name": "AN-M57 *5 (MER)",
"weight": 664.8,
}
AN_M57__5__MER__ = {
"clsid": "{AN-M57_MER_5_R}",
"name": "AN-M57 *5 (MER)",
"weight": 664.8,
}
AN_M57__6__MER_ = {
"clsid": "{AN-M57_MER_6_C}",
"name": "AN-M57 *6 (MER)",
"weight": 777.8,
}
AN_M66A2 = {"clsid": "{AN-M66A2}", "name": "AN-M66A2", "weight": 970.68688} AN_M66A2 = {"clsid": "{AN-M66A2}", "name": "AN-M66A2", "weight": 970.68688}
AN_M81 = {"clsid": "{AN-M81}", "name": "AN-M81", "weight": 117.93392} AN_M81 = {"clsid": "{AN-M81}", "name": "AN-M81", "weight": 117.93392}
AN_M81__5__MER_ = {"clsid": "{AN-M81_MER_5_L}", "name": "AN-M81 *5 (MER)", "weight": 689.3} AN_M81__5__MER_ = {
AN_M81__5__MER__ = {"clsid": "{AN-M81_MER_5_R}", "name": "AN-M81 *5 (MER)", "weight": 689.3} "clsid": "{AN-M81_MER_5_L}",
AN_M81__6__MER_ = {"clsid": "{AN-M81_MER_6_C}", "name": "AN-M81 *6 (MER)", "weight": 807.2} "name": "AN-M81 *5 (MER)",
"weight": 689.3,
}
AN_M81__5__MER__ = {
"clsid": "{AN-M81_MER_5_R}",
"name": "AN-M81 *5 (MER)",
"weight": 689.3,
}
AN_M81__6__MER_ = {
"clsid": "{AN-M81_MER_6_C}",
"name": "AN-M81 *6 (MER)",
"weight": 807.2,
}
AN_M88 = {"clsid": "{AN-M88}", "name": "AN-M88", "weight": 98.0665904} AN_M88 = {"clsid": "{AN-M88}", "name": "AN-M88", "weight": 98.0665904}
AN_M88__5__MER_ = {"clsid": "{AN-M88_MER_5_L}", "name": "AN-M88 *5 (MER)", "weight": 589.8} AN_M88__5__MER_ = {
AN_M88__5__MER__ = {"clsid": "{AN-M88_MER_5_R}", "name": "AN-M88 *5 (MER)", "weight": 589.8} "clsid": "{AN-M88_MER_5_L}",
AN_M88__6__MER_ = {"clsid": "{AN-M88_MER_6_C}", "name": "AN-M88 *6 (MER)", "weight": 687.8} "name": "AN-M88 *5 (MER)",
"weight": 589.8,
}
AN_M88__5__MER__ = {
"clsid": "{AN-M88_MER_5_R}",
"name": "AN-M88 *5 (MER)",
"weight": 589.8,
}
AN_M88__6__MER_ = {
"clsid": "{AN-M88_MER_6_C}",
"name": "AN-M88 *6 (MER)",
"weight": 687.8,
}
CBU_1_A = {"clsid": "{CBU-1/A}", "name": "CBU-1/A", "weight": 458.921706} CBU_1_A = {"clsid": "{CBU-1/A}", "name": "CBU-1/A", "weight": 458.921706}
CBU_1_A__2 = {"clsid": "{CBU-1/A_TER_2_L}", "name": "CBU-1/A *2", "weight": 713.473056} CBU_1_A__2 = {
CBU_1_A__2_ = {"clsid": "{CBU-1/A_TER_2_R}", "name": "CBU-1/A *2", "weight": 713.473056} "clsid": "{CBU-1/A_TER_2_L}",
"name": "CBU-1/A *2",
"weight": 713.473056,
}
CBU_1_A__2_ = {
"clsid": "{CBU-1/A_TER_2_R}",
"name": "CBU-1/A *2",
"weight": 713.473056,
}
CBU_2B_A = {"clsid": "{CBU-2B/A}", "name": "CBU-2B/A", "weight": 379.543106} CBU_2B_A = {"clsid": "{CBU-2B/A}", "name": "CBU-2B/A", "weight": 379.543106}
CBU_2B_A__2 = {"clsid": "{CBU-2B/A_TER_2_L}", "name": "CBU-2B/A *2", "weight": 806.686212} CBU_2B_A__2 = {
CBU_2B_A__2_ = {"clsid": "{CBU-2B/A_TER_2_R}", "name": "CBU-2B/A *2", "weight": 806.686212} "clsid": "{CBU-2B/A_TER_2_L}",
"name": "CBU-2B/A *2",
"weight": 806.686212,
}
CBU_2B_A__2_ = {
"clsid": "{CBU-2B/A_TER_2_R}",
"name": "CBU-2B/A *2",
"weight": 806.686212,
}
CBU_2_A = {"clsid": "{CBU-2/A}", "name": "CBU-2/A", "weight": 343.822736} CBU_2_A = {"clsid": "{CBU-2/A}", "name": "CBU-2/A", "weight": 343.822736}
CBU_2_A__2 = {"clsid": "{CBU-2/A_TER_2_L}", "name": "CBU-2/A *2", "weight": 735.245472} CBU_2_A__2 = {
CBU_2_A__2_ = {"clsid": "{CBU-2/A_TER_2_R}", "name": "CBU-2/A *2", "weight": 735.245472} "clsid": "{CBU-2/A_TER_2_L}",
D_704_Refueling_Pod = {"clsid": "{D-704_BUDDY_POD}", "name": "D-704 Refueling Pod", "weight": 1234.532648} "name": "CBU-2/A *2",
Fuel_Tank_150_gallons = {"clsid": "{DFT-150gal}", "name": "Fuel Tank 150 gallons", "weight": 515.888512} "weight": 735.245472,
Fuel_Tank_300_gallons = {"clsid": "{DFT-300gal}", "name": "Fuel Tank 300 gallons", "weight": 991.407336} }
Fuel_Tank_300_gallons_ = {"clsid": "{DFT-300gal_LR}", "name": "Fuel Tank 300 gallons", "weight": 998.664808} CBU_2_A__2_ = {
Fuel_Tank_400_gallons = {"clsid": "{DFT-400gal}", "name": "Fuel Tank 400 gallons", "weight": 1320.06208} "clsid": "{CBU-2/A_TER_2_R}",
LAU_10_2___4_ZUNI_MK_71 = {"clsid": "{LAU-10 ZUNI_TER_2_C}", "name": "LAU-10*2 - 4 ZUNI MK 71", "weight": 927.6} "name": "CBU-2/A *2",
LAU_10_2___4_ZUNI_MK_71_ = {"clsid": "{LAU-10 ZUNI_TER_2_L}", "name": "LAU-10*2 - 4 ZUNI MK 71", "weight": 927.6} "weight": 735.245472,
LAU_10_2___4_ZUNI_MK_71__ = {"clsid": "{LAU-10 ZUNI_TER_2_R}", "name": "LAU-10*2 - 4 ZUNI MK 71", "weight": 927.6} }
LAU_10_3___4_ZUNI_MK_71 = {"clsid": "{LAU-10 ZUNI_TER_3_C}", "name": "LAU-10*3 - 4 ZUNI MK 71", "weight": 1367.6} D_704_Refueling_Pod = {
LAU_3_2___19_FFAR_M156_WP = {"clsid": "{LAU-3 FFAR WP156_TER_2_C}", "name": "LAU-3*2 - 19 FFAR M156 WP", "weight": 673.3414512} "clsid": "{D-704_BUDDY_POD}",
LAU_3_2___19_FFAR_M156_WP_ = {"clsid": "{LAU-3 FFAR WP156_TER_2_L}", "name": "LAU-3*2 - 19 FFAR M156 WP", "weight": 673.3414512} "name": "D-704 Refueling Pod",
LAU_3_2___19_FFAR_M156_WP__ = {"clsid": "{LAU-3 FFAR WP156_TER_2_R}", "name": "LAU-3*2 - 19 FFAR M156 WP", "weight": 673.3414512} "weight": 1234.532648,
LAU_3_2___19_FFAR_Mk1_HE = {"clsid": "{LAU-3 FFAR Mk1 HE_TER_2_C}", "name": "LAU-3*2 - 19 FFAR Mk1 HE", "weight": 618.184664} }
LAU_3_2___19_FFAR_Mk1_HE_ = {"clsid": "{LAU-3 FFAR Mk1 HE_TER_2_L}", "name": "LAU-3*2 - 19 FFAR Mk1 HE", "weight": 618.184664} Fuel_Tank_150_gallons = {
LAU_3_2___19_FFAR_Mk1_HE__ = {"clsid": "{LAU-3 FFAR Mk1 HE_TER_2_R}", "name": "LAU-3*2 - 19 FFAR Mk1 HE", "weight": 618.184664} "clsid": "{DFT-150gal}",
LAU_3_2___19_FFAR_Mk5_HEAT = {"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_2_C}", "name": "LAU-3*2 - 19 FFAR Mk5 HEAT", "weight": 619.9083136} "name": "Fuel Tank 150 gallons",
LAU_3_2___19_FFAR_Mk5_HEAT_ = {"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_2_L}", "name": "LAU-3*2 - 19 FFAR Mk5 HEAT", "weight": 619.9083136} "weight": 515.888512,
LAU_3_2___19_FFAR_Mk5_HEAT__ = {"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_2_R}", "name": "LAU-3*2 - 19 FFAR Mk5 HEAT", "weight": 619.9083136} }
LAU_3_3___19_FFAR_M156_WP = {"clsid": "{LAU-3 FFAR WP156_TER_3_C}", "name": "LAU-3*3 - 19 FFAR M156 WP", "weight": 986.2121768} Fuel_Tank_300_gallons = {
LAU_3_3___19_FFAR_Mk1_HE = {"clsid": "{LAU-3 FFAR Mk1 HE_TER_3_C}", "name": "LAU-3*3 - 19 FFAR Mk1 HE", "weight": 903.476996} "clsid": "{DFT-300gal}",
LAU_3_3___19_FFAR_Mk5_HEAT = {"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_3_C}", "name": "LAU-3*3 - 19 FFAR Mk5 HEAT", "weight": 906.0624704} "name": "Fuel Tank 300 gallons",
LAU_68_2___7_FFAR_M156_WP = {"clsid": "{LAU-68 FFAR WP156_TER_2_C}", "name": "LAU-68*2 - 7 FFAR M156 WP", "weight": 287.9121136} "weight": 991.407336,
LAU_68_2___7_FFAR_M156_WP_ = {"clsid": "{LAU-68 FFAR WP156_TER_2_L}", "name": "LAU-68*2 - 7 FFAR M156 WP", "weight": 287.9121136} }
LAU_68_2___7_FFAR_M156_WP__ = {"clsid": "{LAU-68 FFAR WP156_TER_2_R}", "name": "LAU-68*2 - 7 FFAR M156 WP", "weight": 287.9121136} Fuel_Tank_300_gallons_ = {
LAU_68_2___7_FFAR_Mk1_HE = {"clsid": "{LAU-68 FFAR Mk1 HE_TER_2_C}", "name": "LAU-68*2 - 7 FFAR Mk1 HE", "weight": 267.591192} "clsid": "{DFT-300gal_LR}",
LAU_68_2___7_FFAR_Mk1_HE_ = {"clsid": "{LAU-68 FFAR Mk1 HE_TER_2_L}", "name": "LAU-68*2 - 7 FFAR Mk1 HE", "weight": 267.591192} "name": "Fuel Tank 300 gallons",
LAU_68_2___7_FFAR_Mk1_HE__ = {"clsid": "{LAU-68 FFAR Mk1 HE_TER_2_R}", "name": "LAU-68*2 - 7 FFAR Mk1 HE", "weight": 267.591192} "weight": 998.664808,
LAU_68_2___7_FFAR_Mk5_HEAT = {"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_2_C}", "name": "LAU-68*2 - 7 FFAR Mk5 HEAT", "weight": 268.2262208} }
LAU_68_2___7_FFAR_Mk5_HEAT_ = {"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_2_L}", "name": "LAU-68*2 - 7 FFAR Mk5 HEAT", "weight": 268.2262208} Fuel_Tank_400_gallons = {
LAU_68_2___7_FFAR_Mk5_HEAT__ = {"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_2_R}", "name": "LAU-68*2 - 7 FFAR Mk5 HEAT", "weight": 268.2262208} "clsid": "{DFT-400gal}",
LAU_68_3___7_FFAR_M156_WP = {"clsid": "{LAU-68 FFAR WP156_TER_3_C}", "name": "LAU-68*3 - 7 FFAR M156 WP", "weight": 408.0681704} "name": "Fuel Tank 400 gallons",
LAU_68_3___7_FFAR_Mk1_HE = {"clsid": "{LAU-68 FFAR Mk1 HE_TER_3_C}", "name": "LAU-68*3 - 7 FFAR Mk1 HE", "weight": 377.586788} "weight": 1320.06208,
LAU_68_3___7_FFAR_Mk5_HEAT = {"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_3_C}", "name": "LAU-68*3 - 7 FFAR Mk5 HEAT", "weight": 378.5393312} }
LAU_10_2___4_ZUNI_MK_71 = {
"clsid": "{LAU-10 ZUNI_TER_2_C}",
"name": "LAU-10*2 - 4 ZUNI MK 71",
"weight": 927.6,
}
LAU_10_2___4_ZUNI_MK_71_ = {
"clsid": "{LAU-10 ZUNI_TER_2_L}",
"name": "LAU-10*2 - 4 ZUNI MK 71",
"weight": 927.6,
}
LAU_10_2___4_ZUNI_MK_71__ = {
"clsid": "{LAU-10 ZUNI_TER_2_R}",
"name": "LAU-10*2 - 4 ZUNI MK 71",
"weight": 927.6,
}
LAU_10_3___4_ZUNI_MK_71 = {
"clsid": "{LAU-10 ZUNI_TER_3_C}",
"name": "LAU-10*3 - 4 ZUNI MK 71",
"weight": 1367.6,
}
LAU_3_2___19_FFAR_M156_WP = {
"clsid": "{LAU-3 FFAR WP156_TER_2_C}",
"name": "LAU-3*2 - 19 FFAR M156 WP",
"weight": 673.3414512,
}
LAU_3_2___19_FFAR_M156_WP_ = {
"clsid": "{LAU-3 FFAR WP156_TER_2_L}",
"name": "LAU-3*2 - 19 FFAR M156 WP",
"weight": 673.3414512,
}
LAU_3_2___19_FFAR_M156_WP__ = {
"clsid": "{LAU-3 FFAR WP156_TER_2_R}",
"name": "LAU-3*2 - 19 FFAR M156 WP",
"weight": 673.3414512,
}
LAU_3_2___19_FFAR_Mk1_HE = {
"clsid": "{LAU-3 FFAR Mk1 HE_TER_2_C}",
"name": "LAU-3*2 - 19 FFAR Mk1 HE",
"weight": 618.184664,
}
LAU_3_2___19_FFAR_Mk1_HE_ = {
"clsid": "{LAU-3 FFAR Mk1 HE_TER_2_L}",
"name": "LAU-3*2 - 19 FFAR Mk1 HE",
"weight": 618.184664,
}
LAU_3_2___19_FFAR_Mk1_HE__ = {
"clsid": "{LAU-3 FFAR Mk1 HE_TER_2_R}",
"name": "LAU-3*2 - 19 FFAR Mk1 HE",
"weight": 618.184664,
}
LAU_3_2___19_FFAR_Mk5_HEAT = {
"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_2_C}",
"name": "LAU-3*2 - 19 FFAR Mk5 HEAT",
"weight": 619.9083136,
}
LAU_3_2___19_FFAR_Mk5_HEAT_ = {
"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_2_L}",
"name": "LAU-3*2 - 19 FFAR Mk5 HEAT",
"weight": 619.9083136,
}
LAU_3_2___19_FFAR_Mk5_HEAT__ = {
"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_2_R}",
"name": "LAU-3*2 - 19 FFAR Mk5 HEAT",
"weight": 619.9083136,
}
LAU_3_3___19_FFAR_M156_WP = {
"clsid": "{LAU-3 FFAR WP156_TER_3_C}",
"name": "LAU-3*3 - 19 FFAR M156 WP",
"weight": 986.2121768,
}
LAU_3_3___19_FFAR_Mk1_HE = {
"clsid": "{LAU-3 FFAR Mk1 HE_TER_3_C}",
"name": "LAU-3*3 - 19 FFAR Mk1 HE",
"weight": 903.476996,
}
LAU_3_3___19_FFAR_Mk5_HEAT = {
"clsid": "{LAU-3 FFAR Mk5 HEAT_TER_3_C}",
"name": "LAU-3*3 - 19 FFAR Mk5 HEAT",
"weight": 906.0624704,
}
LAU_68_2___7_FFAR_M156_WP = {
"clsid": "{LAU-68 FFAR WP156_TER_2_C}",
"name": "LAU-68*2 - 7 FFAR M156 WP",
"weight": 287.9121136,
}
LAU_68_2___7_FFAR_M156_WP_ = {
"clsid": "{LAU-68 FFAR WP156_TER_2_L}",
"name": "LAU-68*2 - 7 FFAR M156 WP",
"weight": 287.9121136,
}
LAU_68_2___7_FFAR_M156_WP__ = {
"clsid": "{LAU-68 FFAR WP156_TER_2_R}",
"name": "LAU-68*2 - 7 FFAR M156 WP",
"weight": 287.9121136,
}
LAU_68_2___7_FFAR_Mk1_HE = {
"clsid": "{LAU-68 FFAR Mk1 HE_TER_2_C}",
"name": "LAU-68*2 - 7 FFAR Mk1 HE",
"weight": 267.591192,
}
LAU_68_2___7_FFAR_Mk1_HE_ = {
"clsid": "{LAU-68 FFAR Mk1 HE_TER_2_L}",
"name": "LAU-68*2 - 7 FFAR Mk1 HE",
"weight": 267.591192,
}
LAU_68_2___7_FFAR_Mk1_HE__ = {
"clsid": "{LAU-68 FFAR Mk1 HE_TER_2_R}",
"name": "LAU-68*2 - 7 FFAR Mk1 HE",
"weight": 267.591192,
}
LAU_68_2___7_FFAR_Mk5_HEAT = {
"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_2_C}",
"name": "LAU-68*2 - 7 FFAR Mk5 HEAT",
"weight": 268.2262208,
}
LAU_68_2___7_FFAR_Mk5_HEAT_ = {
"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_2_L}",
"name": "LAU-68*2 - 7 FFAR Mk5 HEAT",
"weight": 268.2262208,
}
LAU_68_2___7_FFAR_Mk5_HEAT__ = {
"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_2_R}",
"name": "LAU-68*2 - 7 FFAR Mk5 HEAT",
"weight": 268.2262208,
}
LAU_68_3___7_FFAR_M156_WP = {
"clsid": "{LAU-68 FFAR WP156_TER_3_C}",
"name": "LAU-68*3 - 7 FFAR M156 WP",
"weight": 408.0681704,
}
LAU_68_3___7_FFAR_Mk1_HE = {
"clsid": "{LAU-68 FFAR Mk1 HE_TER_3_C}",
"name": "LAU-68*3 - 7 FFAR Mk1 HE",
"weight": 377.586788,
}
LAU_68_3___7_FFAR_Mk5_HEAT = {
"clsid": "{LAU-68 FFAR Mk5 HEAT_TER_3_C}",
"name": "LAU-68*3 - 7 FFAR Mk5 HEAT",
"weight": 378.5393312,
}
MAK79_2_MK_20 = {"clsid": "{MAK79_MK20 2L}", "name": "MAK79 2 MK-20", "weight": 464} MAK79_2_MK_20 = {"clsid": "{MAK79_MK20 2L}", "name": "MAK79 2 MK-20", "weight": 464}
MAK79_2_MK_20_ = {"clsid": "{MAK79_MK20 2R}", "name": "MAK79 2 MK-20", "weight": 464} MAK79_2_MK_20_ = {
"clsid": "{MAK79_MK20 2R}",
"name": "MAK79 2 MK-20",
"weight": 464,
}
MAK79_MK_20 = {"clsid": "{MAK79_MK20 1R}", "name": "MAK79 MK-20", "weight": 232} MAK79_MK_20 = {"clsid": "{MAK79_MK20 1R}", "name": "MAK79 MK-20", "weight": 232}
MAK79_MK_20_ = {"clsid": "{MAK79_MK20 1L}", "name": "MAK79 MK-20", "weight": 232} MAK79_MK_20_ = {"clsid": "{MAK79_MK20 1L}", "name": "MAK79 MK-20", "weight": 232}
Mk4_HIPEG = {"clsid": "{Mk4 HIPEG}", "name": "Mk4 HIPEG", "weight": 612.35} Mk4_HIPEG = {"clsid": "{Mk4 HIPEG}", "name": "Mk4 HIPEG", "weight": 612.35}
Mk_20__2__TER_ = {"clsid": "{Mk-20_TER_2_L}", "name": "Mk-20 *2 (TER)", "weight": 491.6} Mk_20__2__TER_ = {
Mk_20__2__TER__ = {"clsid": "{Mk-20_TER_2_R}", "name": "Mk-20 *2 (TER)", "weight": 491.6} "clsid": "{Mk-20_TER_2_L}",
Mk_20__2__TER___ = {"clsid": "{Mk-20_TER_2_C}", "name": "Mk-20 *2 (TER)", "weight": 491.6} "name": "Mk-20 *2 (TER)",
Mk_20__3__TER_ = {"clsid": "{Mk-20_TER_3_C}", "name": "Mk-20 *3 (TER)", "weight": 713.6} "weight": 491.6,
}
Mk_20__2__TER__ = {
"clsid": "{Mk-20_TER_2_R}",
"name": "Mk-20 *2 (TER)",
"weight": 491.6,
}
Mk_20__2__TER___ = {
"clsid": "{Mk-20_TER_2_C}",
"name": "Mk-20 *2 (TER)",
"weight": 491.6,
}
Mk_20__3__TER_ = {
"clsid": "{Mk-20_TER_3_C}",
"name": "Mk-20 *3 (TER)",
"weight": 713.6,
}
Mk_77_mod_0 = {"clsid": "{mk77mod0}", "name": "Mk-77 mod 0", "weight": 340} Mk_77_mod_0 = {"clsid": "{mk77mod0}", "name": "Mk-77 mod 0", "weight": 340}
Mk_77_mod_1 = {"clsid": "{mk77mod1}", "name": "Mk-77 mod 1", "weight": 230} Mk_77_mod_1 = {"clsid": "{mk77mod1}", "name": "Mk-77 mod 1", "weight": 230}
Mk_77_mod_1__2__TER_ = {"clsid": "{Mk-77 mod 1_TER_2_L}", "name": "Mk-77 mod 1 *2 (TER)", "weight": 507.6} Mk_77_mod_1__2__TER_ = {
Mk_77_mod_1__2__TER__ = {"clsid": "{Mk-77 mod 1_TER_2_R}", "name": "Mk-77 mod 1 *2 (TER)", "weight": 507.6} "clsid": "{Mk-77 mod 1_TER_2_L}",
Mk_77_mod_1__2__TER___ = {"clsid": "{Mk-77 mod 1_TER_2_C}", "name": "Mk-77 mod 1 *2 (TER)", "weight": 507.6} "name": "Mk-77 mod 1 *2 (TER)",
Mk_77_mod_1__4__MER_ = {"clsid": "{Mk-77 mod 1_MER_4_C}", "name": "Mk-77 mod 1 *4 (MER)", "weight": 1019.8} "weight": 507.6,
}
Mk_77_mod_1__2__TER__ = {
"clsid": "{Mk-77 mod 1_TER_2_R}",
"name": "Mk-77 mod 1 *2 (TER)",
"weight": 507.6,
}
Mk_77_mod_1__2__TER___ = {
"clsid": "{Mk-77 mod 1_TER_2_C}",
"name": "Mk-77 mod 1 *2 (TER)",
"weight": 507.6,
}
Mk_77_mod_1__4__MER_ = {
"clsid": "{Mk-77 mod 1_MER_4_C}",
"name": "Mk-77 mod 1 *4 (MER)",
"weight": 1019.8,
}
Mk_81SE = {"clsid": "{MK-81SE}", "name": "Mk-81SE", "weight": 113.398} Mk_81SE = {"clsid": "{MK-81SE}", "name": "Mk-81SE", "weight": 113.398}
Mk_81SE__5__MER_ = {"clsid": "{Mk-81SE_MER_5_L}", "name": "Mk-81SE *5 (MER)", "weight": 689.8} Mk_81SE__5__MER_ = {
Mk_81SE__5__MER__ = {"clsid": "{Mk-81SE_MER_5_R}", "name": "Mk-81SE *5 (MER)", "weight": 689.8} "clsid": "{Mk-81SE_MER_5_L}",
Mk_81SE__6__MER_ = {"clsid": "{Mk-81SE_MER_6_C}", "name": "Mk-81SE *6 (MER)", "weight": 807.8} "name": "Mk-81SE *5 (MER)",
Mk_81__5__MER_ = {"clsid": "{Mk-81_MER_5_L}", "name": "Mk-81 *5 (MER)", "weight": 689.8} "weight": 689.8,
Mk_81__5__MER__ = {"clsid": "{Mk-81_MER_5_R}", "name": "Mk-81 *5 (MER)", "weight": 689.8} }
Mk_81__6__MER_ = {"clsid": "{Mk-81_MER_6_C}", "name": "Mk-81 *6 (MER)", "weight": 807.8} Mk_81SE__5__MER__ = {
Mk_82_Snakeye__2__TER_ = {"clsid": "{Mk-82 Snakeye_TER_2_L}", "name": "Mk-82 Snakeye *2 (TER)", "weight": 529.6} "clsid": "{Mk-81SE_MER_5_R}",
Mk_82_Snakeye__2__TER__ = {"clsid": "{Mk-82 Snakeye_TER_2_R}", "name": "Mk-82 Snakeye *2 (TER)", "weight": 529.6} "name": "Mk-81SE *5 (MER)",
Mk_82_Snakeye__3__TER_ = {"clsid": "{Mk-82 Snakeye_TER_3_C}", "name": "Mk-82 Snakeye *3 (TER)", "weight": 770.6} "weight": 689.8,
Mk_82_Snakeye__4__MER_ = {"clsid": "{Mk-82 Snakeye_MER_4_C}", "name": "Mk-82 Snakeye *4 (MER)", "weight": 1063.8} }
Mk_82_Snakeye__6__MER_ = {"clsid": "{Mk-82 Snakeye_MER_6_C}", "name": "Mk-82 Snakeye *6 (MER)", "weight": 1545.8} Mk_81SE__6__MER_ = {
Mk_82__2__TER_ = {"clsid": "{Mk-82_TER_2_L}", "name": "Mk-82 *2 (TER)", "weight": 529.6} "clsid": "{Mk-81SE_MER_6_C}",
Mk_82__2__TER__ = {"clsid": "{Mk-82_TER_2_R}", "name": "Mk-82 *2 (TER)", "weight": 529.6} "name": "Mk-81SE *6 (MER)",
Mk_82__3__TER_ = {"clsid": "{Mk-82_TER_3_C}", "name": "Mk-82 *3 (TER)", "weight": 770.6} "weight": 807.8,
Mk_82__4__MER_ = {"clsid": "{Mk-82_MER_4_C}", "name": "Mk-82 *4 (MER)", "weight": 1063.8} }
Mk_82__6__MER_ = {"clsid": "{Mk-82_MER_6_C}", "name": "Mk-82 *6 (MER)", "weight": 1545.8} Mk_81__5__MER_ = {
Mk_83__2__TER_ = {"clsid": "{Mk-83_TER_2_C}", "name": "Mk-83 *2 (TER)", "weight": 941.6} "clsid": "{Mk-81_MER_5_L}",
Mk_83__3__TER_ = {"clsid": "{Mk-83_TER_3_C}", "name": "Mk-83 *3 (TER)", "weight": 1388.6} "name": "Mk-81 *5 (MER)",
"weight": 689.8,
}
Mk_81__5__MER__ = {
"clsid": "{Mk-81_MER_5_R}",
"name": "Mk-81 *5 (MER)",
"weight": 689.8,
}
Mk_81__6__MER_ = {
"clsid": "{Mk-81_MER_6_C}",
"name": "Mk-81 *6 (MER)",
"weight": 807.8,
}
Mk_82_Snakeye__2__TER_ = {
"clsid": "{Mk-82 Snakeye_TER_2_L}",
"name": "Mk-82 Snakeye *2 (TER)",
"weight": 529.6,
}
Mk_82_Snakeye__2__TER__ = {
"clsid": "{Mk-82 Snakeye_TER_2_R}",
"name": "Mk-82 Snakeye *2 (TER)",
"weight": 529.6,
}
Mk_82_Snakeye__3__TER_ = {
"clsid": "{Mk-82 Snakeye_TER_3_C}",
"name": "Mk-82 Snakeye *3 (TER)",
"weight": 770.6,
}
Mk_82_Snakeye__4__MER_ = {
"clsid": "{Mk-82 Snakeye_MER_4_C}",
"name": "Mk-82 Snakeye *4 (MER)",
"weight": 1063.8,
}
Mk_82_Snakeye__6__MER_ = {
"clsid": "{Mk-82 Snakeye_MER_6_C}",
"name": "Mk-82 Snakeye *6 (MER)",
"weight": 1545.8,
}
Mk_82__2__TER_ = {
"clsid": "{Mk-82_TER_2_L}",
"name": "Mk-82 *2 (TER)",
"weight": 529.6,
}
Mk_82__2__TER__ = {
"clsid": "{Mk-82_TER_2_R}",
"name": "Mk-82 *2 (TER)",
"weight": 529.6,
}
Mk_82__3__TER_ = {
"clsid": "{Mk-82_TER_3_C}",
"name": "Mk-82 *3 (TER)",
"weight": 770.6,
}
Mk_82__4__MER_ = {
"clsid": "{Mk-82_MER_4_C}",
"name": "Mk-82 *4 (MER)",
"weight": 1063.8,
}
Mk_82__6__MER_ = {
"clsid": "{Mk-82_MER_6_C}",
"name": "Mk-82 *6 (MER)",
"weight": 1545.8,
}
Mk_83__2__TER_ = {
"clsid": "{Mk-83_TER_2_C}",
"name": "Mk-83 *2 (TER)",
"weight": 941.6,
}
Mk_83__3__TER_ = {
"clsid": "{Mk-83_TER_3_C}",
"name": "Mk-83 *3 (TER)",
"weight": 1388.6,
}
_3_LAU_61 = {"clsid": "{TER,LAU-61*3}", "name": "3*LAU-61", "weight": 98} _3_LAU_61 = {"clsid": "{TER,LAU-61*3}", "name": "3*LAU-61", "weight": 98}
class A_4E_C(PlaneType): class A_4E_C(PlaneType):
id = "A-4E-C" id = "A-4E-C"
flyable = True flyable = True
@@ -112,7 +425,7 @@ class A_4E_C(PlaneType):
charge_total = 60 charge_total = 60
chaff_charge_size = 1 chaff_charge_size = 1
flare_charge_size = 1 flare_charge_size = 1
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 254 radio_frequency = 254
panel_radio = { panel_radio = {
@@ -137,7 +450,7 @@ class A_4E_C(PlaneType):
7: 257, 7: 257,
14: 263, 14: 263,
19: 266, 19: 266,
15: 261 15: 261,
}, },
}, },
} }
@@ -153,7 +466,6 @@ class A_4E_C(PlaneType):
} }
class Properties: class Properties:
class HideECMPanel: class HideECMPanel:
id = "HideECMPanel" id = "HideECMPanel"
@@ -219,7 +531,6 @@ class A_4E_C(PlaneType):
_14_seconds = 7 _14_seconds = 7
class Liveries: class Liveries:
class Georgia(Enum): class Georgia(Enum):
Unmarked = "Unmarked" Unmarked = "Unmarked"
Community_A_4E = "Community A-4E" Community_A_4E = "Community A-4E"
@@ -425,7 +736,9 @@ class A_4E_C(PlaneType):
Aggressor_USN_TopGun = "Aggressor USN TopGun" Aggressor_USN_TopGun = "Aggressor USN TopGun"
Aggressor_USN_VF_126_Bandits = "Aggressor USN VF-126 Bandits" Aggressor_USN_VF_126_Bandits = "Aggressor USN VF-126 Bandits"
Aggressor_USN_VF_127_Royal_Blues = "Aggressor USN VF-127 Royal Blues" Aggressor_USN_VF_127_Royal_Blues = "Aggressor USN VF-127 Royal Blues"
Aggressor_USN_VFA_127_Cyclons__Forest = "Aggressor USN VFA-127 Cyclons (Forest)" Aggressor_USN_VFA_127_Cyclons__Forest = (
"Aggressor USN VFA-127 Cyclons (Forest)"
)
Aggressor_USN_VFA_127_Cyclons__Sea = "Aggressor USN VFA-127 Cyclons (Sea)" Aggressor_USN_VFA_127_Cyclons__Sea = "Aggressor USN VFA-127 Cyclons (Sea)"
class USA(Enum): class USA(Enum):
@@ -476,7 +789,9 @@ class A_4E_C(PlaneType):
Trainer_USN_VC_8_Redtails = "Trainer USN VC-8 Redtails" Trainer_USN_VC_8_Redtails = "Trainer USN VC-8 Redtails"
Aggressor_USN_VF_126_Bandits = "Aggressor USN VF-126 Bandits" Aggressor_USN_VF_126_Bandits = "Aggressor USN VF-126 Bandits"
Aggressor_USN_VF_127_Royal_Blues = "Aggressor USN VF-127 Royal Blues" Aggressor_USN_VF_127_Royal_Blues = "Aggressor USN VF-127 Royal Blues"
Aggressor_USN_VFA_127_Cyclons__Forest = "Aggressor USN VFA-127 Cyclons (Forest)" Aggressor_USN_VFA_127_Cyclons__Forest = (
"Aggressor USN VFA-127 Cyclons (Forest)"
)
Aggressor_USN_VFA_127_Cyclons__Sea = "Aggressor USN VFA-127 Cyclons (Sea)" Aggressor_USN_VFA_127_Cyclons__Sea = "Aggressor USN VFA-127 Cyclons (Sea)"
Trainer_USN_VT_7_Eagles = "Trainer USN VT-7 Eagles" Trainer_USN_VT_7_Eagles = "Trainer USN VT-7 Eagles"
@@ -524,7 +839,7 @@ class A_4E_C(PlaneType):
LAU_68___7_FFAR_Mk1_HE = (1, Weapons.LAU_68___7_FFAR_Mk1_HE) LAU_68___7_FFAR_Mk1_HE = (1, Weapons.LAU_68___7_FFAR_Mk1_HE)
LAU_68___7_FFAR_Mk5_HEAT = (1, Weapons.LAU_68___7_FFAR_Mk5_HEAT) LAU_68___7_FFAR_Mk5_HEAT = (1, Weapons.LAU_68___7_FFAR_Mk5_HEAT)
AGM_45A = (1, Weapons.AGM_45A) AGM_45A = (1, Weapons.AGM_45A)
#ERRR {AGM12_B} # ERRR {AGM12_B}
Mk_20 = (1, Weapons.Mk_20) Mk_20 = (1, Weapons.Mk_20)
Mk_81 = (1, Weapons.Mk_81) Mk_81 = (1, Weapons.Mk_81)
Mk_81SE = (1, WeaponsA4EC.Mk_81SE) Mk_81SE = (1, WeaponsA4EC.Mk_81SE)
@@ -536,14 +851,18 @@ class A_4E_C(PlaneType):
AN_M64 = (1, Weapons.AN_M64) AN_M64 = (1, Weapons.AN_M64)
AN_M81 = (1, WeaponsA4EC.AN_M81) AN_M81 = (1, WeaponsA4EC.AN_M81)
AN_M88 = (1, WeaponsA4EC.AN_M88) AN_M88 = (1, WeaponsA4EC.AN_M88)
LAU_68___7_2_75__rockets_M257__Parachute_illumination_ = (1, Weapons.LAU_68___7_2_75__rockets_M257__Parachute_illumination_) LAU_68___7_2_75__rockets_M257__Parachute_illumination_ = (
1,
Weapons.LAU_68___7_2_75__rockets_M257__Parachute_illumination_,
)
Smokewinder___red = (1, Weapons.Smokewinder___red) Smokewinder___red = (1, Weapons.Smokewinder___red)
Smokewinder___green = (1, Weapons.Smokewinder___green) Smokewinder___green = (1, Weapons.Smokewinder___green)
Smokewinder___blue = (1, Weapons.Smokewinder___blue) Smokewinder___blue = (1, Weapons.Smokewinder___blue)
Smokewinder___white = (1, Weapons.Smokewinder___white) Smokewinder___white = (1, Weapons.Smokewinder___white)
Smokewinder___yellow = (1, Weapons.Smokewinder___yellow) Smokewinder___yellow = (1, Weapons.Smokewinder___yellow)
Smokewinder___orange = (1, Weapons.Smokewinder___orange) Smokewinder___orange = (1, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon2: class Pylon2:
Fuel_Tank_300_gallons_ = (2, WeaponsA4EC.Fuel_Tank_300_gallons_) Fuel_Tank_300_gallons_ = (2, WeaponsA4EC.Fuel_Tank_300_gallons_)
@@ -566,8 +885,8 @@ class A_4E_C(PlaneType):
LAU_68_2___7_FFAR_Mk1_HE_ = (2, WeaponsA4EC.LAU_68_2___7_FFAR_Mk1_HE_) LAU_68_2___7_FFAR_Mk1_HE_ = (2, WeaponsA4EC.LAU_68_2___7_FFAR_Mk1_HE_)
LAU_68_2___7_FFAR_Mk5_HEAT_ = (2, WeaponsA4EC.LAU_68_2___7_FFAR_Mk5_HEAT_) LAU_68_2___7_FFAR_Mk5_HEAT_ = (2, WeaponsA4EC.LAU_68_2___7_FFAR_Mk5_HEAT_)
AGM_45A = (2, Weapons.AGM_45A) AGM_45A = (2, Weapons.AGM_45A)
#ERRR {AGM12_C} # ERRR {AGM12_C}
#ERRR {AGM12_B} # ERRR {AGM12_B}
AGM_62 = (2, Weapons.AGM_62) AGM_62 = (2, Weapons.AGM_62)
Mk_20 = (2, Weapons.Mk_20) Mk_20 = (2, Weapons.Mk_20)
Mk_81 = (2, Weapons.Mk_81) Mk_81 = (2, Weapons.Mk_81)
@@ -607,15 +926,19 @@ class A_4E_C(PlaneType):
Smokewinder___white = (2, Weapons.Smokewinder___white) Smokewinder___white = (2, Weapons.Smokewinder___white)
Smokewinder___yellow = (2, Weapons.Smokewinder___yellow) Smokewinder___yellow = (2, Weapons.Smokewinder___yellow)
Smokewinder___orange = (2, Weapons.Smokewinder___orange) Smokewinder___orange = (2, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon3: class Pylon3:
Fuel_Tank_400_gallons = (3, WeaponsA4EC.Fuel_Tank_400_gallons) Fuel_Tank_400_gallons = (3, WeaponsA4EC.Fuel_Tank_400_gallons)
Fuel_Tank_300_gallons = (3, WeaponsA4EC.Fuel_Tank_300_gallons) Fuel_Tank_300_gallons = (3, WeaponsA4EC.Fuel_Tank_300_gallons)
Fuel_Tank_150_gallons = (3, WeaponsA4EC.Fuel_Tank_150_gallons) Fuel_Tank_150_gallons = (3, WeaponsA4EC.Fuel_Tank_150_gallons)
D_704_Refueling_Pod = (3, WeaponsA4EC.D_704_Refueling_Pod) D_704_Refueling_Pod = (3, WeaponsA4EC.D_704_Refueling_Pod)
#ERRR {3*LAU-61} # ERRR {3*LAU-61}
LAU_68_3___7_2_75__rockets_MK5__HE_ = (3, Weapons.LAU_68_3___7_2_75__rockets_MK5__HE_) LAU_68_3___7_2_75__rockets_MK5__HE_ = (
3,
Weapons.LAU_68_3___7_2_75__rockets_MK5__HE_,
)
LAU_10___4_ZUNI_MK_71 = (3, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (3, Weapons.LAU_10___4_ZUNI_MK_71)
LAU_10_2___4_ZUNI_MK_71 = (3, WeaponsA4EC.LAU_10_2___4_ZUNI_MK_71) LAU_10_2___4_ZUNI_MK_71 = (3, WeaponsA4EC.LAU_10_2___4_ZUNI_MK_71)
LAU_10_3___4_ZUNI_MK_71 = (3, WeaponsA4EC.LAU_10_3___4_ZUNI_MK_71) LAU_10_3___4_ZUNI_MK_71 = (3, WeaponsA4EC.LAU_10_3___4_ZUNI_MK_71)
@@ -637,7 +960,7 @@ class A_4E_C(PlaneType):
LAU_68_3___7_FFAR_M156_WP = (3, WeaponsA4EC.LAU_68_3___7_FFAR_M156_WP) LAU_68_3___7_FFAR_M156_WP = (3, WeaponsA4EC.LAU_68_3___7_FFAR_M156_WP)
LAU_68_3___7_FFAR_Mk1_HE = (3, WeaponsA4EC.LAU_68_3___7_FFAR_Mk1_HE) LAU_68_3___7_FFAR_Mk1_HE = (3, WeaponsA4EC.LAU_68_3___7_FFAR_Mk1_HE)
LAU_68_3___7_FFAR_Mk5_HEAT = (3, WeaponsA4EC.LAU_68_3___7_FFAR_Mk5_HEAT) LAU_68_3___7_FFAR_Mk5_HEAT = (3, WeaponsA4EC.LAU_68_3___7_FFAR_Mk5_HEAT)
#ERRR {AGM12_B} # ERRR {AGM12_B}
AGM_62 = (3, Weapons.AGM_62) AGM_62 = (3, Weapons.AGM_62)
Mk_20 = (3, Weapons.Mk_20) Mk_20 = (3, Weapons.Mk_20)
Mk_81 = (3, Weapons.Mk_81) Mk_81 = (3, Weapons.Mk_81)
@@ -680,7 +1003,8 @@ class A_4E_C(PlaneType):
Smokewinder___white = (3, Weapons.Smokewinder___white) Smokewinder___white = (3, Weapons.Smokewinder___white)
Smokewinder___yellow = (3, Weapons.Smokewinder___yellow) Smokewinder___yellow = (3, Weapons.Smokewinder___yellow)
Smokewinder___orange = (3, Weapons.Smokewinder___orange) Smokewinder___orange = (3, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon4: class Pylon4:
Fuel_Tank_300_gallons_ = (4, WeaponsA4EC.Fuel_Tank_300_gallons_) Fuel_Tank_300_gallons_ = (4, WeaponsA4EC.Fuel_Tank_300_gallons_)
@@ -703,8 +1027,8 @@ class A_4E_C(PlaneType):
LAU_68_2___7_FFAR_Mk1_HE__ = (4, WeaponsA4EC.LAU_68_2___7_FFAR_Mk1_HE__) LAU_68_2___7_FFAR_Mk1_HE__ = (4, WeaponsA4EC.LAU_68_2___7_FFAR_Mk1_HE__)
LAU_68_2___7_FFAR_Mk5_HEAT__ = (4, WeaponsA4EC.LAU_68_2___7_FFAR_Mk5_HEAT__) LAU_68_2___7_FFAR_Mk5_HEAT__ = (4, WeaponsA4EC.LAU_68_2___7_FFAR_Mk5_HEAT__)
AGM_45A = (4, Weapons.AGM_45A) AGM_45A = (4, Weapons.AGM_45A)
#ERRR {AGM12_C} # ERRR {AGM12_C}
#ERRR {AGM12_B} # ERRR {AGM12_B}
AGM_62 = (4, Weapons.AGM_62) AGM_62 = (4, Weapons.AGM_62)
Mk_20 = (4, Weapons.Mk_20) Mk_20 = (4, Weapons.Mk_20)
Mk_81 = (4, Weapons.Mk_81) Mk_81 = (4, Weapons.Mk_81)
@@ -744,7 +1068,8 @@ class A_4E_C(PlaneType):
Smokewinder___white = (4, Weapons.Smokewinder___white) Smokewinder___white = (4, Weapons.Smokewinder___white)
Smokewinder___yellow = (4, Weapons.Smokewinder___yellow) Smokewinder___yellow = (4, Weapons.Smokewinder___yellow)
Smokewinder___orange = (4, Weapons.Smokewinder___orange) Smokewinder___orange = (4, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon5: class Pylon5:
LAU_10___4_ZUNI_MK_71 = (5, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (5, Weapons.LAU_10___4_ZUNI_MK_71)
@@ -755,7 +1080,7 @@ class A_4E_C(PlaneType):
LAU_68___7_FFAR_Mk1_HE = (5, Weapons.LAU_68___7_FFAR_Mk1_HE) LAU_68___7_FFAR_Mk1_HE = (5, Weapons.LAU_68___7_FFAR_Mk1_HE)
LAU_68___7_FFAR_Mk5_HEAT = (5, Weapons.LAU_68___7_FFAR_Mk5_HEAT) LAU_68___7_FFAR_Mk5_HEAT = (5, Weapons.LAU_68___7_FFAR_Mk5_HEAT)
AGM_45A = (5, Weapons.AGM_45A) AGM_45A = (5, Weapons.AGM_45A)
#ERRR {AGM12_B} # ERRR {AGM12_B}
Mk_20 = (5, Weapons.Mk_20) Mk_20 = (5, Weapons.Mk_20)
Mk_81 = (5, Weapons.Mk_81) Mk_81 = (5, Weapons.Mk_81)
Mk_81SE = (5, WeaponsA4EC.Mk_81SE) Mk_81SE = (5, WeaponsA4EC.Mk_81SE)
@@ -767,16 +1092,27 @@ class A_4E_C(PlaneType):
AN_M64 = (5, Weapons.AN_M64) AN_M64 = (5, Weapons.AN_M64)
AN_M81 = (5, WeaponsA4EC.AN_M81) AN_M81 = (5, WeaponsA4EC.AN_M81)
AN_M88 = (5, WeaponsA4EC.AN_M88) AN_M88 = (5, WeaponsA4EC.AN_M88)
LAU_68___7_2_75__rockets_M257__Parachute_illumination_ = (5, Weapons.LAU_68___7_2_75__rockets_M257__Parachute_illumination_) LAU_68___7_2_75__rockets_M257__Parachute_illumination_ = (
5,
Weapons.LAU_68___7_2_75__rockets_M257__Parachute_illumination_,
)
Smokewinder___red = (5, Weapons.Smokewinder___red) Smokewinder___red = (5, Weapons.Smokewinder___red)
Smokewinder___green = (5, Weapons.Smokewinder___green) Smokewinder___green = (5, Weapons.Smokewinder___green)
Smokewinder___blue = (5, Weapons.Smokewinder___blue) Smokewinder___blue = (5, Weapons.Smokewinder___blue)
Smokewinder___white = (5, Weapons.Smokewinder___white) Smokewinder___white = (5, Weapons.Smokewinder___white)
Smokewinder___yellow = (5, Weapons.Smokewinder___yellow) Smokewinder___yellow = (5, Weapons.Smokewinder___yellow)
Smokewinder___orange = (5, Weapons.Smokewinder___orange) Smokewinder___orange = (5, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
pylons = {1, 2, 3, 4, 5} pylons = {1, 2, 3, 4, 5}
tasks = [task.CAP, task.CAS, task.SEAD, task.GroundAttack, task.AFAC, task.Refueling] tasks = [
task.CAP,
task.CAS,
task.SEAD,
task.GroundAttack,
task.AFAC,
task.Refueling,
]
task_default = task.CAS task_default = task.CAS

View File

@@ -24,7 +24,7 @@ class F_22A(PlaneType):
chaff_charge_size = 1 chaff_charge_size = 1
flare_charge_size = 2 flare_charge_size = 2
eplrs = True eplrs = True
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 127.5 radio_frequency = 127.5
property_defaults = { property_defaults = {
@@ -36,7 +36,6 @@ class F_22A(PlaneType):
id = "BAY_DOOR_OPTION" id = "BAY_DOOR_OPTION"
class Liveries: class Liveries:
class USSR(Enum): class USSR(Enum):
default = "default" default = "default"
_154_wg = "154 wg" _154_wg = "154 wg"
@@ -1806,5 +1805,11 @@ class F_22A(PlaneType):
pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
tasks = [task.CAP, task.Escort, task.FighterSweep, task.Intercept, task.Reconnaissance] tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.Intercept,
task.Reconnaissance,
]
task_default = task.CAP task_default = task.CAP

View File

@@ -3,6 +3,7 @@
# #
from dcs import unittype from dcs import unittype
class AMX_10RCR(unittype.VehicleType): class AMX_10RCR(unittype.VehicleType):
id = "AMX10RCR" id = "AMX10RCR"
name = "AMX-10RCR" name = "AMX-10RCR"
@@ -150,8 +151,10 @@ class DIM__KAMIKAZE(unittype.VehicleType):
air_weapon_dist = 50 air_weapon_dist = 50
eplrs = True eplrs = True
## FORTIFICATION ## FORTIFICATION
class _FIELD_HIDE(unittype.VehicleType): class _FIELD_HIDE(unittype.VehicleType):
id = "FieldHL" id = "FieldHL"
name = "*FIELD HIDE" name = "*FIELD HIDE"
@@ -159,6 +162,7 @@ class _FIELD_HIDE(unittype.VehicleType):
threat_range = 0 threat_range = 0
air_weapon_dist = 0 air_weapon_dist = 0
class _FIELD_HIDE_SMALL(unittype.VehicleType): class _FIELD_HIDE_SMALL(unittype.VehicleType):
id = "HARRIERH" id = "HARRIERH"
name = "*FIELD HIDE SMALL" name = "*FIELD HIDE SMALL"
@@ -166,6 +170,7 @@ class _FIELD_HIDE_SMALL(unittype.VehicleType):
threat_range = 0 threat_range = 0
air_weapon_dist = 0 air_weapon_dist = 0
class SmokeD1(unittype.VehicleType): class SmokeD1(unittype.VehicleType):
id = "SmokeD1" id = "SmokeD1"
name = "SmokeD1" name = "SmokeD1"
@@ -173,6 +178,7 @@ class SmokeD1(unittype.VehicleType):
threat_range = 0 threat_range = 0
air_weapon_dist = 0 air_weapon_dist = 0
class SmokeD3(unittype.VehicleType): class SmokeD3(unittype.VehicleType):
id = "SmokeD3" id = "SmokeD3"
name = "SmokeD3" name = "SmokeD3"
@@ -189,6 +195,7 @@ class TRM_2000(unittype.VehicleType):
air_weapon_dist = 0 air_weapon_dist = 0
eplrs = True eplrs = True
class TRM_2000_Fuel(unittype.VehicleType): class TRM_2000_Fuel(unittype.VehicleType):
id = "TRM2000_Citerne" id = "TRM2000_Citerne"
name = "TRM-2000 Fuel" name = "TRM-2000 Fuel"
@@ -197,6 +204,7 @@ class TRM_2000_Fuel(unittype.VehicleType):
air_weapon_dist = 0 air_weapon_dist = 0
eplrs = True eplrs = True
class VAB_MEDICAL(unittype.VehicleType): class VAB_MEDICAL(unittype.VehicleType):
id = "VABH" id = "VABH"
name = "VAB MEDICAL" name = "VAB MEDICAL"
@@ -205,6 +213,7 @@ class VAB_MEDICAL(unittype.VehicleType):
air_weapon_dist = 0 air_weapon_dist = 0
eplrs = True eplrs = True
class VAB(unittype.VehicleType): class VAB(unittype.VehicleType):
id = "VAB_RADIO" id = "VAB_RADIO"
name = "VAB" name = "VAB"
@@ -213,6 +222,7 @@ class VAB(unittype.VehicleType):
air_weapon_dist = 0 air_weapon_dist = 0
eplrs = True eplrs = True
class VBL(unittype.VehicleType): class VBL(unittype.VehicleType):
id = "VBL-Radio" id = "VBL-Radio"
name = "VBL" name = "VBL"
@@ -221,6 +231,7 @@ class VBL(unittype.VehicleType):
air_weapon_dist = 0 air_weapon_dist = 0
eplrs = True eplrs = True
class Tracma_TD_1500(unittype.VehicleType): class Tracma_TD_1500(unittype.VehicleType):
id = "Tracma" id = "Tracma"
name = "Tracma TD 1500" name = "Tracma TD 1500"
@@ -228,8 +239,10 @@ class Tracma_TD_1500(unittype.VehicleType):
threat_range = 0 threat_range = 0
air_weapon_dist = 0 air_weapon_dist = 0
## AIRDEFENCE ## AIRDEFENCE
class SMOKE_SAM_IR(unittype.VehicleType): class SMOKE_SAM_IR(unittype.VehicleType):
id = "SMOKESAM" id = "SMOKESAM"
name = "SMOKE SAM IR" name = "SMOKE SAM IR"
@@ -238,6 +251,7 @@ class SMOKE_SAM_IR(unittype.VehicleType):
air_weapon_dist = 20000 air_weapon_dist = 20000
eplrs = True eplrs = True
class _53T2(unittype.VehicleType): class _53T2(unittype.VehicleType):
id = "AA20" id = "AA20"
name = "53T2" name = "53T2"
@@ -245,6 +259,7 @@ class _53T2(unittype.VehicleType):
threat_range = 2000 threat_range = 2000
air_weapon_dist = 2000 air_weapon_dist = 2000
class TRM_2000_53T2(unittype.VehicleType): class TRM_2000_53T2(unittype.VehicleType):
id = "TRM2000_AA20" id = "TRM2000_AA20"
name = "TRM-2000 53T2" name = "TRM-2000 53T2"
@@ -253,6 +268,7 @@ class TRM_2000_53T2(unittype.VehicleType):
air_weapon_dist = 2000 air_weapon_dist = 2000
eplrs = True eplrs = True
class TRM_2000_PAMELA(unittype.VehicleType): class TRM_2000_PAMELA(unittype.VehicleType):
id = "TRMMISTRAL" id = "TRMMISTRAL"
name = "TRM-2000 PAMELA" name = "TRM-2000 PAMELA"
@@ -261,8 +277,10 @@ class TRM_2000_PAMELA(unittype.VehicleType):
air_weapon_dist = 10000 air_weapon_dist = 10000
eplrs = True eplrs = True
## INFANTRY ## INFANTRY
class Infantry_Soldier_JTAC(unittype.VehicleType): class Infantry_Soldier_JTAC(unittype.VehicleType):
id = "JTACFP" id = "JTACFP"
name = "Infantry Soldier JTAC" name = "Infantry Soldier JTAC"
@@ -270,8 +288,10 @@ class Infantry_Soldier_JTAC(unittype.VehicleType):
threat_range = 500 threat_range = 500
air_weapon_dist = 500 air_weapon_dist = 500
## ARTILERY ## ARTILERY
class MO_120_RT(unittype.VehicleType): class MO_120_RT(unittype.VehicleType):
id = "M120" id = "M120"
name = "MO 120 RT" name = "MO 120 RT"
@@ -279,6 +299,7 @@ class MO_120_RT(unittype.VehicleType):
threat_range = 15000 threat_range = 15000
air_weapon_dist = 15000 air_weapon_dist = 15000
class VAB_MORTIER(unittype.VehicleType): class VAB_MORTIER(unittype.VehicleType):
id = "VAB_MORTIER" id = "VAB_MORTIER"
name = "VAB MORTIER" name = "VAB MORTIER"

View File

@@ -335,4 +335,3 @@ class _34Ya6E_Gazetchik_E_decoy(unittype.VehicleType):
detection_range = 20000 detection_range = 20000
threat_range = 0 threat_range = 0
air_weapon_dist = 0 air_weapon_dist = 0

View File

@@ -7,32 +7,104 @@ from dcs.weapons_data import Weapons
class MB_339PAN_Weapons: class MB_339PAN_Weapons:
ARF8M3_TP = {"clsid": "{ARF8M3_TP}", "name": "ARF8M3 TP", "weight": None} ARF8M3_TP = {"clsid": "{ARF8M3_TP}", "name": "ARF8M3 TP", "weight": None}
BRD_4_250_4_MK_76_2_ARF_8M3TP_ = {"clsid": "{BRD-4-250}", "name": "BRD-4-250(4*MK.76+2*ARF-8M3TP)", "weight": 137.6} BRD_4_250_4_MK_76_2_ARF_8M3TP_ = {
"clsid": "{BRD-4-250}",
"name": "BRD-4-250(4*MK.76+2*ARF-8M3TP)",
"weight": 137.6,
}
Color_Oil_Tank = {"clsid": "{COLOR-TANK}", "name": "Color Oil Tank", "weight": 183} Color_Oil_Tank = {"clsid": "{COLOR-TANK}", "name": "Color Oil Tank", "weight": 183}
Empty_Pylon = {"clsid": "{VOID-PYLON-MB339A}", "name": "Empty Pylon", "weight": 20} Empty_Pylon = {"clsid": "{VOID-PYLON-MB339A}", "name": "Empty Pylon", "weight": 20}
Fuel_Tank_330lt = {"clsid": "{FUEL-SUBAL_TANK-330}", "name": "Fuel Tank 330lt", "weight": 315} Fuel_Tank_330lt = {
"clsid": "{FUEL-SUBAL_TANK-330}",
"name": "Fuel Tank 330lt",
"weight": 315,
}
GunPod_AN_M3 = {"clsid": "{MB339-AN-M3_L}", "name": "GunPod AN/M3", "weight": 75} GunPod_AN_M3 = {"clsid": "{MB339-AN-M3_L}", "name": "GunPod AN/M3", "weight": 75}
GunPod_AN_M3_ = {"clsid": "{MB339-AN-M3_R}", "name": "GunPod AN/M3", "weight": 75} GunPod_AN_M3_ = {"clsid": "{MB339-AN-M3_R}", "name": "GunPod AN/M3", "weight": 75}
GunPod_DEFA553 = {"clsid": "{MB339-DEFA553_L}", "name": "GunPod DEFA553", "weight": 190} GunPod_DEFA553 = {
GunPod_DEFA553_ = {"clsid": "{MB339-DEFA553_R}", "name": "GunPod DEFA553", "weight": 190} "clsid": "{MB339-DEFA553_L}",
LAU_10___4_ZUNI_MK_71___ = {"clsid": "{LAU-10}", "name": "LAU-10 - 4 ZUNI MK 71", "weight": 308} "name": "GunPod DEFA553",
LR_25___25_ARF_8M3_API_ = {"clsid": "{LR-25API}", "name": "LR-25 - 25 ARF/8M3(API)", "weight": 141} "weight": 190,
LR_25___25_ARF_8M3_HEI_ = {"clsid": "{LR-25HEI}", "name": "LR-25 - 25 ARF/8M3(HEI)", "weight": 161} }
GunPod_DEFA553_ = {
"clsid": "{MB339-DEFA553_R}",
"name": "GunPod DEFA553",
"weight": 190,
}
LAU_10___4_ZUNI_MK_71___ = {
"clsid": "{LAU-10}",
"name": "LAU-10 - 4 ZUNI MK 71",
"weight": 308,
}
LR_25___25_ARF_8M3_API_ = {
"clsid": "{LR-25API}",
"name": "LR-25 - 25 ARF/8M3(API)",
"weight": 141,
}
LR_25___25_ARF_8M3_HEI_ = {
"clsid": "{LR-25HEI}",
"name": "LR-25 - 25 ARF/8M3(HEI)",
"weight": 161,
}
MAK79_2_MK_20 = {"clsid": "{MAK79_MK20 2L}", "name": "MAK79 2 MK-20", "weight": 464} MAK79_2_MK_20 = {"clsid": "{MAK79_MK20 2L}", "name": "MAK79 2 MK-20", "weight": 464}
MAK79_2_MK_20_ = {"clsid": "{MAK79_MK20 2R}", "name": "MAK79 2 MK-20", "weight": 464} MAK79_2_MK_20_ = {
"clsid": "{MAK79_MK20 2R}",
"name": "MAK79 2 MK-20",
"weight": 464,
}
MAK79_MK_20 = {"clsid": "{MAK79_MK20 1R}", "name": "MAK79 MK-20", "weight": 232} MAK79_MK_20 = {"clsid": "{MAK79_MK20 1R}", "name": "MAK79 MK-20", "weight": 232}
MAK79_MK_20_ = {"clsid": "{MAK79_MK20 1L}", "name": "MAK79 MK-20", "weight": 232} MAK79_MK_20_ = {"clsid": "{MAK79_MK20 1L}", "name": "MAK79 MK-20", "weight": 232}
MB339_Black_Smoke = {"clsid": "{SMOKE-BLACK-MB339}", "name": "MB339 Black Smoke", "weight": 1} MB339_Black_Smoke = {
MB339_Green_Smoke = {"clsid": "{SMOKE-GREEN-MB339}", "name": "MB339 Green Smoke", "weight": 1} "clsid": "{SMOKE-BLACK-MB339}",
MB339_ORANGE_Smoke = {"clsid": "{SMOKE-ORANGE-MB339}", "name": "MB339 ORANGE Smoke", "weight": 1} "name": "MB339 Black Smoke",
MB339_Red_Smoke = {"clsid": "{SMOKE-RED-MB339}", "name": "MB339 Red Smoke", "weight": 1} "weight": 1,
MB339_White_Smoke = {"clsid": "{SMOKE-WHITE-MB339}", "name": "MB339 White Smoke", "weight": 1} }
MB339_YELLOW_Smoke = {"clsid": "{SMOKE-YELLOW-MB339}", "name": "MB339 YELLOW Smoke", "weight": 1} MB339_Green_Smoke = {
"clsid": "{SMOKE-GREEN-MB339}",
"name": "MB339 Green Smoke",
"weight": 1,
}
MB339_ORANGE_Smoke = {
"clsid": "{SMOKE-ORANGE-MB339}",
"name": "MB339 ORANGE Smoke",
"weight": 1,
}
MB339_Red_Smoke = {
"clsid": "{SMOKE-RED-MB339}",
"name": "MB339 Red Smoke",
"weight": 1,
}
MB339_White_Smoke = {
"clsid": "{SMOKE-WHITE-MB339}",
"name": "MB339 White Smoke",
"weight": 1,
}
MB339_YELLOW_Smoke = {
"clsid": "{SMOKE-YELLOW-MB339}",
"name": "MB339 YELLOW Smoke",
"weight": 1,
}
MK76 = {"clsid": "{MK76}", "name": "MK76", "weight": 11.3} MK76 = {"clsid": "{MK76}", "name": "MK76", "weight": 11.3}
Tip_Fuel_Tank_500lt = {"clsid": "{FUEL-TIP-TANK-500-L}", "name": "Tip Fuel Tank 500lt", "weight": 471} Tip_Fuel_Tank_500lt = {
Tip_Fuel_Tank_500lt_ = {"clsid": "{FUEL-TIP-TANK-500-R}", "name": "Tip Fuel Tank 500lt", "weight": 471} "clsid": "{FUEL-TIP-TANK-500-L}",
Tip_Fuel_Tank_Ellittici_320lt = {"clsid": "{FUEL-TIP-ELLITTIC-L}", "name": "Tip Fuel Tank Ellittici 320lt", "weight": 314.2} "name": "Tip Fuel Tank 500lt",
Tip_Fuel_Tank_Ellittici_320lt_ = {"clsid": "{FUEL-TIP-ELLITTIC-R}", "name": "Tip Fuel Tank Ellittici 320lt", "weight": 314.2} "weight": 471,
}
Tip_Fuel_Tank_500lt_ = {
"clsid": "{FUEL-TIP-TANK-500-R}",
"name": "Tip Fuel Tank 500lt",
"weight": 471,
}
Tip_Fuel_Tank_Ellittici_320lt = {
"clsid": "{FUEL-TIP-ELLITTIC-L}",
"name": "Tip Fuel Tank Ellittici 320lt",
"weight": 314.2,
}
Tip_Fuel_Tank_Ellittici_320lt_ = {
"clsid": "{FUEL-TIP-ELLITTIC-R}",
"name": "Tip Fuel Tank Ellittici 320lt",
"weight": 314.2,
}
class MB_339PAN(PlaneType): class MB_339PAN(PlaneType):
@@ -43,7 +115,7 @@ class MB_339PAN(PlaneType):
length = 12.13 length = 12.13
fuel_max = 626 fuel_max = 626
max_speed = 763.2 max_speed = 763.2
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 124 radio_frequency = 124
panel_radio = { panel_radio = {
@@ -68,7 +140,7 @@ class MB_339PAN(PlaneType):
7: 262, 7: 262,
14: 266, 14: 266,
19: 268, 19: 268,
15: 265 15: 265,
}, },
}, },
2: { 2: {
@@ -102,7 +174,7 @@ class MB_339PAN(PlaneType):
28: 257, 28: 257,
23: 260, 23: 260,
29: 253, 29: 253,
15: 265 15: 265,
}, },
}, },
} }
@@ -113,7 +185,6 @@ class MB_339PAN(PlaneType):
} }
class Properties: class Properties:
class SoloFlight: class SoloFlight:
id = "SoloFlight" id = "SoloFlight"
@@ -127,7 +198,6 @@ class MB_339PAN(PlaneType):
Equally_Responsible = -2 Equally_Responsible = -2
class Liveries: class Liveries:
class Georgia(Enum): class Georgia(Enum):
MB339AA__ARMADA____Crippa = "MB339AA 'ARMADA' - Crippa" MB339AA__ARMADA____Crippa = "MB339AA 'ARMADA' - Crippa"
MB339AA__ARMADA____Yellow_Band = "MB339AA 'ARMADA' - Yellow Band" MB339AA__ARMADA____Yellow_Band = "MB339AA 'ARMADA' - Yellow Band"
@@ -370,7 +440,10 @@ class MB_339PAN(PlaneType):
class Pylon1: class Pylon1:
Tip_Fuel_Tank_500lt = (1, MB_339PAN_Weapons.Tip_Fuel_Tank_500lt) Tip_Fuel_Tank_500lt = (1, MB_339PAN_Weapons.Tip_Fuel_Tank_500lt)
Tip_Fuel_Tank_Ellittici_320lt = (1, MB_339PAN_Weapons.Tip_Fuel_Tank_Ellittici_320lt) Tip_Fuel_Tank_Ellittici_320lt = (
1,
MB_339PAN_Weapons.Tip_Fuel_Tank_Ellittici_320lt,
)
class Pylon2: class Pylon2:
Empty_Pylon = (2, MB_339PAN_Weapons.Empty_Pylon) Empty_Pylon = (2, MB_339PAN_Weapons.Empty_Pylon)
@@ -386,7 +459,10 @@ class MB_339PAN(PlaneType):
LR_25___25_ARF_8M3_API_ = (3, MB_339PAN_Weapons.LR_25___25_ARF_8M3_API_) LR_25___25_ARF_8M3_API_ = (3, MB_339PAN_Weapons.LR_25___25_ARF_8M3_API_)
Mk_82 = (3, Weapons.Mk_82) Mk_82 = (3, Weapons.Mk_82)
LAU_10___4_ZUNI_MK_71___ = (3, MB_339PAN_Weapons.LAU_10___4_ZUNI_MK_71___) LAU_10___4_ZUNI_MK_71___ = (3, MB_339PAN_Weapons.LAU_10___4_ZUNI_MK_71___)
BRD_4_250_4_MK_76_2_ARF_8M3TP_ = (3, MB_339PAN_Weapons.BRD_4_250_4_MK_76_2_ARF_8M3TP_) BRD_4_250_4_MK_76_2_ARF_8M3TP_ = (
3,
MB_339PAN_Weapons.BRD_4_250_4_MK_76_2_ARF_8M3TP_,
)
Matra_Type_155_Rocket_Pod = (3, Weapons.Matra_Type_155_Rocket_Pod) Matra_Type_155_Rocket_Pod = (3, Weapons.Matra_Type_155_Rocket_Pod)
class Pylon4: class Pylon4:
@@ -427,7 +503,10 @@ class MB_339PAN(PlaneType):
Mk_82 = (8, Weapons.Mk_82) Mk_82 = (8, Weapons.Mk_82)
LAU_10___4_ZUNI_MK_71___ = (8, MB_339PAN_Weapons.LAU_10___4_ZUNI_MK_71___) LAU_10___4_ZUNI_MK_71___ = (8, MB_339PAN_Weapons.LAU_10___4_ZUNI_MK_71___)
Matra_Type_155_Rocket_Pod = (8, Weapons.Matra_Type_155_Rocket_Pod) Matra_Type_155_Rocket_Pod = (8, Weapons.Matra_Type_155_Rocket_Pod)
BRD_4_250_4_MK_76_2_ARF_8M3TP_ = (8, MB_339PAN_Weapons.BRD_4_250_4_MK_76_2_ARF_8M3TP_) BRD_4_250_4_MK_76_2_ARF_8M3TP_ = (
8,
MB_339PAN_Weapons.BRD_4_250_4_MK_76_2_ARF_8M3TP_,
)
class Pylon9: class Pylon9:
Empty_Pylon = (9, MB_339PAN_Weapons.Empty_Pylon) Empty_Pylon = (9, MB_339PAN_Weapons.Empty_Pylon)
@@ -438,9 +517,18 @@ class MB_339PAN(PlaneType):
class Pylon10: class Pylon10:
Tip_Fuel_Tank_500lt_ = (10, MB_339PAN_Weapons.Tip_Fuel_Tank_500lt_) Tip_Fuel_Tank_500lt_ = (10, MB_339PAN_Weapons.Tip_Fuel_Tank_500lt_)
Tip_Fuel_Tank_Ellittici_320lt_ = (10, MB_339PAN_Weapons.Tip_Fuel_Tank_Ellittici_320lt_) Tip_Fuel_Tank_Ellittici_320lt_ = (
10,
MB_339PAN_Weapons.Tip_Fuel_Tank_Ellittici_320lt_,
)
pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
tasks = [task.GroundAttack, task.RunwayAttack, task.CAS, task.AntishipStrike, task.Reconnaissance] tasks = [
task.GroundAttack,
task.RunwayAttack,
task.CAS,
task.AntishipStrike,
task.Reconnaissance,
]
task_default = task.Nothing task_default = task.Nothing

View File

@@ -7,7 +7,16 @@ from pydcs_extensions.rafale.rafale import Rafale_M, Rafale_A_S, Rafale_B
from pydcs_extensions.su57.su57 import Su_57 from pydcs_extensions.su57.su57 import Su_57
import pydcs_extensions.frenchpack.frenchpack as frenchpack import pydcs_extensions.frenchpack.frenchpack as frenchpack
MODDED_AIRPLANES = [A_4E_C, MB_339PAN, Rafale_A_S, Rafale_M, Rafale_B, Su_57, F_22A, Hercules] MODDED_AIRPLANES = [
A_4E_C,
MB_339PAN,
Rafale_A_S,
Rafale_M,
Rafale_B,
Su_57,
F_22A,
Hercules,
]
MODDED_VEHICLES = [ MODDED_VEHICLES = [
frenchpack._FIELD_HIDE, frenchpack._FIELD_HIDE,
frenchpack._FIELD_HIDE_SMALL, frenchpack._FIELD_HIDE_SMALL,
@@ -84,5 +93,5 @@ MODDED_VEHICLES = [
highdigitsams.SAM_SA_24_Igla_S_manpad, highdigitsams.SAM_SA_24_Igla_S_manpad,
highdigitsams.SAM_SA_14_Strela_3_manpad, highdigitsams.SAM_SA_14_Strela_3_manpad,
highdigitsams.Polyana_D4M1_C2_node, highdigitsams.Polyana_D4M1_C2_node,
highdigitsams._34Ya6E_Gazetchik_E_decoy highdigitsams._34Ya6E_Gazetchik_E_decoy,
] ]

View File

@@ -4,6 +4,7 @@ from dcs import task
from dcs.planes import PlaneType from dcs.planes import PlaneType
from dcs.weapons_data import Weapons from dcs.weapons_data import Weapons
class RafaleWeapons: class RafaleWeapons:
SCALP = {"clsid": "{SCALP}", "name": "SCALP", "weight": None} SCALP = {"clsid": "{SCALP}", "name": "SCALP", "weight": None}
AS_30L = {"clsid": "{AS_30L}", "name": "AS_30L", "weight": 292} AS_30L = {"clsid": "{AS_30L}", "name": "AS_30L", "weight": 292}
@@ -25,16 +26,36 @@ class RafaleWeapons:
RPL751_ = {"clsid": "{RPL751}", "name": "RPL751", "weight": 70} RPL751_ = {"clsid": "{RPL751}", "name": "RPL751", "weight": 70}
RPL751__ = {"clsid": "{RPL751}", "name": "RPL751", "weight": 70} RPL751__ = {"clsid": "{RPL751}", "name": "RPL751", "weight": 70}
METEOR = {"clsid": "{RAFALE_MBDA_METEOR}", "name": "METEOR", "weight": 199} METEOR = {"clsid": "{RAFALE_MBDA_METEOR}", "name": "METEOR", "weight": 199}
METEOR_x2 = {"clsid": "{LAU-115_2xLAU-127_MBDA_METEOR}", "name": "METEOR x2", "weight": 445} METEOR_x2 = {
"clsid": "{LAU-115_2xLAU-127_MBDA_METEOR}",
"name": "METEOR x2",
"weight": 445,
}
GBU_49 = {"clsid": "{GBU_49}", "name": "GBU_49", "weight": 525} GBU_49 = {"clsid": "{GBU_49}", "name": "GBU_49", "weight": 525}
GBU12PII = {"clsid": "{GBU12PII}", "name": "GBU12PII", "weight": 525} GBU12PII = {"clsid": "{GBU12PII}", "name": "GBU12PII", "weight": 525}
AASM_250 = {"clsid": "{AASM_250}", "name": "AASM_250", "weight": 250} AASM_250 = {"clsid": "{AASM_250}", "name": "AASM_250", "weight": 250}
AASM_250_L = {"clsid": "{AASM_250_L}", "name": "AASM_250_L", "weight": 500} AASM_250_L = {"clsid": "{AASM_250_L}", "name": "AASM_250_L", "weight": 500}
AASM_250_R = {"clsid": "{AASM_250_R}", "name": "AASM_250_R", "weight": 500} AASM_250_R = {"clsid": "{AASM_250_R}", "name": "AASM_250_R", "weight": 500}
AASM_250_RIGHT = {"clsid": "{AASM_250_RIGHT}", "name": "AASM_250_RIGHT", "weight": 250} AASM_250_RIGHT = {
_2_GBU_54_V_1_B = {"clsid": "{BRU-70A_2*GBU-54_LEFT}", "name": "2 GBU-54(V)1/B", "weight": 566} "clsid": "{AASM_250_RIGHT}",
_2_GBU_54_V_1_B_ = {"clsid": "{BRU-70A_2*GBU-54_RIGHT}", "name": "2 GBU-54(V)1/B", "weight": 566} "name": "AASM_250_RIGHT",
_3_GBU_54_V_1_B = {"clsid": "{BRU-70A_3*GBU-54}", "name": "3 GBU-54(V)1/B", "weight": 819} "weight": 250,
}
_2_GBU_54_V_1_B = {
"clsid": "{BRU-70A_2*GBU-54_LEFT}",
"name": "2 GBU-54(V)1/B",
"weight": 566,
}
_2_GBU_54_V_1_B_ = {
"clsid": "{BRU-70A_2*GBU-54_RIGHT}",
"name": "2 GBU-54(V)1/B",
"weight": 566,
}
_3_GBU_54_V_1_B = {
"clsid": "{BRU-70A_3*GBU-54}",
"name": "3 GBU-54(V)1/B",
"weight": 819,
}
class Rafale_A_S(PlaneType): class Rafale_A_S(PlaneType):
@@ -50,11 +71,10 @@ class Rafale_A_S(PlaneType):
charge_total = 96 charge_total = 96
chaff_charge_size = 1 chaff_charge_size = 1
flare_charge_size = 1 flare_charge_size = 1
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 127.5 radio_frequency = 127.5
class Liveries: class Liveries:
class USSR(Enum): class USSR(Enum):
_01_marine_12_f = "01 marine 12 f" _01_marine_12_f = "01 marine 12 f"
_02_rafale_export = "02 rafale export" _02_rafale_export = "02 rafale export"
@@ -896,7 +916,10 @@ class Rafale_A_S(PlaneType):
_3_Mk_20_Rockeye = (2, Weapons._3_Mk_20_Rockeye) _3_Mk_20_Rockeye = (2, Weapons._3_Mk_20_Rockeye)
Mk_84 = (2, Weapons.Mk_84) Mk_84 = (2, Weapons.Mk_84)
GBU_24 = (2, Weapons.GBU_24) GBU_24 = (2, Weapons.GBU_24)
LAU_131___7_2_75__rockets_M151__HE_ = (2, Weapons.LAU_131___7_2_75__rockets_M151__HE_) LAU_131___7_2_75__rockets_M151__HE_ = (
2,
Weapons.LAU_131___7_2_75__rockets_M151__HE_,
)
LAU3_HE151 = (2, Weapons.LAU3_HE151) LAU3_HE151 = (2, Weapons.LAU3_HE151)
LAU3_WP156 = (2, Weapons.LAU3_WP156) LAU3_WP156 = (2, Weapons.LAU3_WP156)
LAU3_HE5 = (2, Weapons.LAU3_HE5) LAU3_HE5 = (2, Weapons.LAU3_HE5)
@@ -923,7 +946,10 @@ class Rafale_A_S(PlaneType):
AIM_9P_Sidewinder_IR_AAM = (4, Weapons.AIM_9P_Sidewinder_IR_AAM) AIM_9P_Sidewinder_IR_AAM = (4, Weapons.AIM_9P_Sidewinder_IR_AAM)
MICA_IR = (4, Weapons.MICA_IR) MICA_IR = (4, Weapons.MICA_IR)
LAU_10___4_ZUNI_MK_71 = (4, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (4, Weapons.LAU_10___4_ZUNI_MK_71)
LAU_61___19_2_75__rockets_MK151_HE = (4, Weapons.LAU_61___19_2_75__rockets_MK151_HE) LAU_61___19_2_75__rockets_MK151_HE = (
4,
Weapons.LAU_61___19_2_75__rockets_MK151_HE,
)
LAU3_HE151 = (4, Weapons.LAU3_HE151) LAU3_HE151 = (4, Weapons.LAU3_HE151)
class Pylon5: class Pylon5:
@@ -937,7 +963,10 @@ class Rafale_A_S(PlaneType):
class Pylon6: class Pylon6:
LAU_10___4_ZUNI_MK_71 = (6, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (6, Weapons.LAU_10___4_ZUNI_MK_71)
LAU_61___19_2_75__rockets_MK151_HE = (6, Weapons.LAU_61___19_2_75__rockets_MK151_HE) LAU_61___19_2_75__rockets_MK151_HE = (
6,
Weapons.LAU_61___19_2_75__rockets_MK151_HE,
)
AIM_9M_Sidewinder_IR_AAM = (6, Weapons.AIM_9M_Sidewinder_IR_AAM) AIM_9M_Sidewinder_IR_AAM = (6, Weapons.AIM_9M_Sidewinder_IR_AAM)
AIM_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM) AIM_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM)
MICA_IR = (6, Weapons.MICA_IR) MICA_IR = (6, Weapons.MICA_IR)
@@ -973,7 +1002,10 @@ class Rafale_A_S(PlaneType):
Mk_84 = (9, Weapons.Mk_84) Mk_84 = (9, Weapons.Mk_84)
_3_Mk_82 = (9, Weapons._3_Mk_82) _3_Mk_82 = (9, Weapons._3_Mk_82)
AGM_88C_ = (9, Weapons.AGM_88C_) AGM_88C_ = (9, Weapons.AGM_88C_)
LAU_131___7_2_75__rockets_M151__HE_ = (9, Weapons.LAU_131___7_2_75__rockets_M151__HE_) LAU_131___7_2_75__rockets_M151__HE_ = (
9,
Weapons.LAU_131___7_2_75__rockets_M151__HE_,
)
LAU3_HE151 = (9, Weapons.LAU3_HE151) LAU3_HE151 = (9, Weapons.LAU3_HE151)
LAU3_WP156 = (9, Weapons.LAU3_WP156) LAU3_WP156 = (9, Weapons.LAU3_WP156)
LAU3_HE5 = (9, Weapons.LAU3_HE5) LAU3_HE5 = (9, Weapons.LAU3_HE5)
@@ -993,7 +1025,18 @@ class Rafale_A_S(PlaneType):
pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
tasks = [task.CAP, task.Escort, task.FighterSweep, task.GroundAttack, task.CAS, task.AFAC, task.RunwayAttack, task.AntishipStrike, task.SEAD, task.PinpointStrike] tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.GroundAttack,
task.CAS,
task.AFAC,
task.RunwayAttack,
task.AntishipStrike,
task.SEAD,
task.PinpointStrike,
]
task_default = task.CAP task_default = task.CAP
@@ -1010,11 +1053,10 @@ class Rafale_M(PlaneType):
charge_total = 96 charge_total = 96
chaff_charge_size = 1 chaff_charge_size = 1
flare_charge_size = 1 flare_charge_size = 1
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 127.5 radio_frequency = 127.5
class Liveries: class Liveries:
class USSR(Enum): class USSR(Enum):
_01_marine_12_f = "01 marine 12 f" _01_marine_12_f = "01 marine 12 f"
_02_rafale_export = "02 rafale export" _02_rafale_export = "02 rafale export"
@@ -1851,7 +1893,10 @@ class Rafale_M(PlaneType):
MER_2_MK_83 = (2, Weapons.MER_2_MK_83) MER_2_MK_83 = (2, Weapons.MER_2_MK_83)
MER_2_MK_82 = (2, Weapons.MER_2_MK_82) MER_2_MK_82 = (2, Weapons.MER_2_MK_82)
_3_Mk_82 = (2, Weapons._3_Mk_82) _3_Mk_82 = (2, Weapons._3_Mk_82)
LAU_131___7_2_75__rockets_M151__HE_ = (2, Weapons.LAU_131___7_2_75__rockets_M151__HE_) LAU_131___7_2_75__rockets_M151__HE_ = (
2,
Weapons.LAU_131___7_2_75__rockets_M151__HE_,
)
LAU3_HE151 = (2, Weapons.LAU3_HE151) LAU3_HE151 = (2, Weapons.LAU3_HE151)
LAU3_WP156 = (2, Weapons.LAU3_WP156) LAU3_WP156 = (2, Weapons.LAU3_WP156)
LAU3_HE5 = (2, Weapons.LAU3_HE5) LAU3_HE5 = (2, Weapons.LAU3_HE5)
@@ -1887,7 +1932,10 @@ class Rafale_M(PlaneType):
AIM_9P_Sidewinder_IR_AAM = (4, Weapons.AIM_9P_Sidewinder_IR_AAM) AIM_9P_Sidewinder_IR_AAM = (4, Weapons.AIM_9P_Sidewinder_IR_AAM)
LAU3_WP156 = (4, Weapons.LAU3_WP156) LAU3_WP156 = (4, Weapons.LAU3_WP156)
LAU_10___4_ZUNI_MK_71 = (4, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (4, Weapons.LAU_10___4_ZUNI_MK_71)
LAU_61___19_2_75__rockets_MK151_HE = (4, Weapons.LAU_61___19_2_75__rockets_MK151_HE) LAU_61___19_2_75__rockets_MK151_HE = (
4,
Weapons.LAU_61___19_2_75__rockets_MK151_HE,
)
Mk_82 = (4, Weapons.Mk_82) Mk_82 = (4, Weapons.Mk_82)
class Pylon5: class Pylon5:
@@ -1906,7 +1954,10 @@ class Rafale_M(PlaneType):
AIM_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM) AIM_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM)
LAU3_WP156 = (6, Weapons.LAU3_WP156) LAU3_WP156 = (6, Weapons.LAU3_WP156)
LAU_10___4_ZUNI_MK_71 = (6, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (6, Weapons.LAU_10___4_ZUNI_MK_71)
LAU_61___19_2_75__rockets_MK151_HE = (6, Weapons.LAU_61___19_2_75__rockets_MK151_HE) LAU_61___19_2_75__rockets_MK151_HE = (
6,
Weapons.LAU_61___19_2_75__rockets_MK151_HE,
)
Mk_82 = (6, Weapons.Mk_82) Mk_82 = (6, Weapons.Mk_82)
class Pylon7: class Pylon7:
@@ -1936,7 +1987,10 @@ class Rafale_M(PlaneType):
MER_2_MK_83 = (9, Weapons.MER_2_MK_83) MER_2_MK_83 = (9, Weapons.MER_2_MK_83)
MER_2_MK_82 = (9, Weapons.MER_2_MK_82) MER_2_MK_82 = (9, Weapons.MER_2_MK_82)
_3_Mk_82 = (9, Weapons._3_Mk_82) _3_Mk_82 = (9, Weapons._3_Mk_82)
LAU_131___7_2_75__rockets_M151__HE_ = (9, Weapons.LAU_131___7_2_75__rockets_M151__HE_) LAU_131___7_2_75__rockets_M151__HE_ = (
9,
Weapons.LAU_131___7_2_75__rockets_M151__HE_,
)
LAU3_HE151 = (9, Weapons.LAU3_HE151) LAU3_HE151 = (9, Weapons.LAU3_HE151)
LAU3_WP156 = (9, Weapons.LAU3_WP156) LAU3_WP156 = (9, Weapons.LAU3_WP156)
LAU3_HE5 = (9, Weapons.LAU3_HE5) LAU3_HE5 = (9, Weapons.LAU3_HE5)
@@ -1961,7 +2015,18 @@ class Rafale_M(PlaneType):
pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
tasks = [task.CAP, task.Escort, task.FighterSweep, task.GroundAttack, task.CAS, task.AFAC, task.RunwayAttack, task.AntishipStrike, task.Reconnaissance, task.Intercept] tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.GroundAttack,
task.CAS,
task.AFAC,
task.RunwayAttack,
task.AntishipStrike,
task.Reconnaissance,
task.Intercept,
]
task_default = task.CAP task_default = task.CAP
@@ -1978,11 +2043,10 @@ class Rafale_B(PlaneType):
charge_total = 96 charge_total = 96
chaff_charge_size = 1 chaff_charge_size = 1
flare_charge_size = 1 flare_charge_size = 1
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 127.5 radio_frequency = 127.5
class Liveries: class Liveries:
class USSR(Enum): class USSR(Enum):
_01_rafale_b_lafayette = "01 rafale b lafayette" _01_rafale_b_lafayette = "01 rafale b lafayette"
_02_rafale_b_mt_de_marsan = "02 rafale b mt de marsan" _02_rafale_b_mt_de_marsan = "02 rafale b mt de marsan"
@@ -2414,7 +2478,10 @@ class Rafale_B(PlaneType):
_3_Mk_20_Rockeye = (2, Weapons._3_Mk_20_Rockeye) _3_Mk_20_Rockeye = (2, Weapons._3_Mk_20_Rockeye)
Mk_84 = (2, Weapons.Mk_84) Mk_84 = (2, Weapons.Mk_84)
GBU_24 = (2, Weapons.GBU_24) GBU_24 = (2, Weapons.GBU_24)
LAU_131___7_2_75__rockets_M151__HE_ = (2, Weapons.LAU_131___7_2_75__rockets_M151__HE_) LAU_131___7_2_75__rockets_M151__HE_ = (
2,
Weapons.LAU_131___7_2_75__rockets_M151__HE_,
)
LAU3_HE151 = (2, Weapons.LAU3_HE151) LAU3_HE151 = (2, Weapons.LAU3_HE151)
LAU3_WP156 = (2, Weapons.LAU3_WP156) LAU3_WP156 = (2, Weapons.LAU3_WP156)
LAU3_HE5 = (2, Weapons.LAU3_HE5) LAU3_HE5 = (2, Weapons.LAU3_HE5)
@@ -2442,7 +2509,10 @@ class Rafale_B(PlaneType):
AIM_9P_Sidewinder_IR_AAM = (4, Weapons.AIM_9P_Sidewinder_IR_AAM) AIM_9P_Sidewinder_IR_AAM = (4, Weapons.AIM_9P_Sidewinder_IR_AAM)
MICA_IR = (4, Weapons.MICA_IR) MICA_IR = (4, Weapons.MICA_IR)
LAU_10___4_ZUNI_MK_71 = (4, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (4, Weapons.LAU_10___4_ZUNI_MK_71)
LAU_61___19_2_75__rockets_MK151_HE = (4, Weapons.LAU_61___19_2_75__rockets_MK151_HE) LAU_61___19_2_75__rockets_MK151_HE = (
4,
Weapons.LAU_61___19_2_75__rockets_MK151_HE,
)
LAU3_HE151 = (4, Weapons.LAU3_HE151) LAU3_HE151 = (4, Weapons.LAU3_HE151)
class Pylon5: class Pylon5:
@@ -2459,7 +2529,10 @@ class Rafale_B(PlaneType):
class Pylon6: class Pylon6:
LAU_10___4_ZUNI_MK_71 = (6, Weapons.LAU_10___4_ZUNI_MK_71) LAU_10___4_ZUNI_MK_71 = (6, Weapons.LAU_10___4_ZUNI_MK_71)
LAU_61___19_2_75__rockets_MK151_HE = (6, Weapons.LAU_61___19_2_75__rockets_MK151_HE) LAU_61___19_2_75__rockets_MK151_HE = (
6,
Weapons.LAU_61___19_2_75__rockets_MK151_HE,
)
AIM_9M_Sidewinder_IR_AAM = (6, Weapons.AIM_9M_Sidewinder_IR_AAM) AIM_9M_Sidewinder_IR_AAM = (6, Weapons.AIM_9M_Sidewinder_IR_AAM)
AIM_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM) AIM_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM)
MICA_IR = (6, Weapons.MICA_IR) MICA_IR = (6, Weapons.MICA_IR)
@@ -2496,7 +2569,10 @@ class Rafale_B(PlaneType):
Mk_84 = (9, Weapons.Mk_84) Mk_84 = (9, Weapons.Mk_84)
_3_Mk_82 = (9, Weapons._3_Mk_82) _3_Mk_82 = (9, Weapons._3_Mk_82)
AGM_88C_ = (9, Weapons.AGM_88C_) AGM_88C_ = (9, Weapons.AGM_88C_)
LAU_131___7_2_75__rockets_M151__HE_ = (9, Weapons.LAU_131___7_2_75__rockets_M151__HE_) LAU_131___7_2_75__rockets_M151__HE_ = (
9,
Weapons.LAU_131___7_2_75__rockets_M151__HE_,
)
LAU3_HE151 = (9, Weapons.LAU3_HE151) LAU3_HE151 = (9, Weapons.LAU3_HE151)
LAU3_WP156 = (9, Weapons.LAU3_WP156) LAU3_WP156 = (9, Weapons.LAU3_WP156)
LAU3_HE5 = (9, Weapons.LAU3_HE5) LAU3_HE5 = (9, Weapons.LAU3_HE5)
@@ -2516,7 +2592,18 @@ class Rafale_B(PlaneType):
pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
tasks = [task.CAP, task.Escort, task.FighterSweep, task.GroundAttack, task.CAS, task.AFAC, task.RunwayAttack, task.AntishipStrike, task.SEAD, task.PinpointStrike] tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.GroundAttack,
task.CAS,
task.AFAC,
task.RunwayAttack,
task.AntishipStrike,
task.SEAD,
task.PinpointStrike,
]
task_default = task.GroundAttack task_default = task.GroundAttack
@@ -2534,11 +2621,10 @@ class Rafale_M_NOUNOU(PlaneType):
chaff_charge_size = 1 chaff_charge_size = 1
flare_charge_size = 1 flare_charge_size = 1
tacan = True tacan = True
category = "Tankers" #{8A302789-A55D-4897-B647-66493FA6826F} category = "Tankers" # {8A302789-A55D-4897-B647-66493FA6826F}
radio_frequency = 127.5 radio_frequency = 127.5
class Liveries: class Liveries:
class USSR(Enum): class USSR(Enum):
_01_marine_12_f = "01 marine 12 f" _01_marine_12_f = "01 marine 12 f"
_02_rafale_export = "02 rafale export" _02_rafale_export = "02 rafale export"
@@ -2977,4 +3063,3 @@ class Rafale_M_NOUNOU(PlaneType):
tasks = [task.Refueling] tasks = [task.Refueling]
task_default = task.Refueling task_default = task.Refueling

View File

@@ -11,7 +11,11 @@ class Su57Weapons:
RVV_BD = {"clsid": "{RVV-BD}", "name": "RVV-BD", "weight": 600} RVV_BD = {"clsid": "{RVV-BD}", "name": "RVV-BD", "weight": 600}
RVV_L = {"clsid": "{RVV-L}", "name": "RVV-L", "weight": 748} RVV_L = {"clsid": "{RVV-L}", "name": "RVV-L", "weight": 748}
RVV_M = {"clsid": "{RVV-M}", "name": "RVV-M", "weight": 190} RVV_M = {"clsid": "{RVV-M}", "name": "RVV-M", "weight": 190}
Su_57_Fuel_Tank = {"clsid": "{SU_57Tank}", "name": "Su-57 Fuel Tank", "weight": 1561.421} Su_57_Fuel_Tank = {
"clsid": "{SU_57Tank}",
"name": "Su-57 Fuel Tank",
"weight": 1561.421,
}
class Su_57(PlaneType): class Su_57(PlaneType):
@@ -27,10 +31,9 @@ class Su_57(PlaneType):
charge_total = 200 charge_total = 200
chaff_charge_size = 1 chaff_charge_size = 1
flare_charge_size = 1 flare_charge_size = 1
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
class Liveries: class Liveries:
class USSR(Enum): class USSR(Enum):
_22 = "22" _22 = "22"
_20 = "20" _20 = "20"
@@ -1703,8 +1706,8 @@ class Su_57(PlaneType):
FAB_1500_M54 = (11, Weapons.FAB_1500_M54) FAB_1500_M54 = (11, Weapons.FAB_1500_M54)
KAB_1500L = (11, Weapons.KAB_1500L) KAB_1500L = (11, Weapons.KAB_1500L)
MER_6_FAB_250 = (11, Weapons.MER_6_FAB_250) MER_6_FAB_250 = (11, Weapons.MER_6_FAB_250)
#ERRR {R-33} # ERRR {R-33}
RVV_BD = (11,Su57Weapons.RVV_BD) RVV_BD = (11, Su57Weapons.RVV_BD)
RVV_AE = (11, Su57Weapons.RVV_AE) RVV_AE = (11, Su57Weapons.RVV_AE)
RVV_M = (11, Su57Weapons.RVV_M) RVV_M = (11, Su57Weapons.RVV_M)
RVV_L = (11, Su57Weapons.RVV_L) RVV_L = (11, Su57Weapons.RVV_L)
@@ -1732,5 +1735,15 @@ class Su_57(PlaneType):
pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} pylons = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
tasks = [task.CAP, task.Intercept, task.Escort, task.FighterSweep, task.AFAC, task.GroundAttack, task.RunwayAttack, task.AntishipStrike, task.CAS] tasks = [
task.CAP,
task.Intercept,
task.Escort,
task.FighterSweep,
task.AFAC,
task.GroundAttack,
task.RunwayAttack,
task.AntishipStrike,
task.CAS,
]
task_default = task.CAP task_default = task.CAP

View File

@@ -0,0 +1,42 @@
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import QCalendarWidget
from qt_ui.uiconstants import COLORS
class QLiberationCalendar(QCalendarWidget):
def __init__(self, parent=None):
super(QLiberationCalendar, self).__init__(parent)
self.setVerticalHeaderFormat(QCalendarWidget.NoVerticalHeader)
self.setGridVisible(False)
# Overrride default QCalendar behaviour that is rendering week end days in red
for d in (
QtCore.Qt.Monday,
QtCore.Qt.Tuesday,
QtCore.Qt.Wednesday,
QtCore.Qt.Thursday,
QtCore.Qt.Friday,
QtCore.Qt.Saturday,
QtCore.Qt.Sunday,
):
fmt = self.weekdayTextFormat(d)
fmt.setForeground(QtCore.Qt.darkGray)
self.setWeekdayTextFormat(d, fmt)
def paintCell(self, painter, rect, date):
if date == self.selectedDate():
painter.save()
painter.fillRect(rect, QtGui.QColor("#D3D3D3"))
painter.setPen(QtCore.Qt.NoPen)
painter.setBrush(QtGui.QColor(COLORS["sea_blue"]))
r = QtCore.QRect(
QtCore.QPoint(), min(rect.width(), rect.height()) * QtCore.QSize(1, 1)
)
r.moveCenter(rect.center())
painter.drawEllipse(r)
painter.setPen(QtGui.QPen(QtGui.QColor("white")))
painter.drawText(rect, QtCore.Qt.AlignCenter, str(date.day()))
painter.restore()
else:
super(QLiberationCalendar, self).paintCell(painter, rect, date)

View File

@@ -914,35 +914,48 @@ class QLiberationMap(QGraphicsView):
SMALL_LINE = 2 SMALL_LINE = 2
dist = self.distance_to_pixels(nautical_miles(scale_distance_nm)) dist = self.distance_to_pixels(nautical_miles(scale_distance_nm))
self.scene().addRect(
POS_X,
POS_Y - PADDING,
PADDING * 2 + dist,
BIG_LINE * 2 + 3 * PADDING,
pen=CONST.COLORS["black"],
brush=CONST.COLORS["black"],
)
l = self.scene().addLine( l = self.scene().addLine(
POS_X + PADDING, POS_X + PADDING,
POS_Y + BIG_LINE * 2, POS_Y + BIG_LINE * 2,
POS_X + PADDING + dist, POS_X + PADDING + dist,
POS_Y + BIG_LINE * 2, POS_Y + BIG_LINE * 2,
) )
l.setPen(CONST.COLORS["black"])
lw = self.scene().addLine(
POS_X + PADDING + 1,
POS_Y + BIG_LINE * 2 + 1,
POS_X + PADDING + dist + 1,
POS_Y + BIG_LINE * 2 + 1,
)
lw.setPen(CONST.COLORS["white"])
text = self.scene().addText( text = self.scene().addText(
"0nm", font=QFont("Trebuchet MS", 6, weight=5, italic=False) "0nm", font=QFont("Trebuchet MS", 6, weight=5, italic=False)
) )
text.setPos(POS_X, POS_Y + BIG_LINE * 2) text.setPos(POS_X, POS_Y + BIG_LINE * 2)
text.setDefaultTextColor(Qt.white) text.setDefaultTextColor(Qt.black)
text_white = self.scene().addText(
"0nm", font=QFont("Trebuchet MS", 6, weight=5, italic=False)
)
text_white.setPos(POS_X + 1, POS_Y + BIG_LINE * 2)
text_white.setDefaultTextColor(Qt.white)
text2 = self.scene().addText( text2 = self.scene().addText(
str(scale_distance_nm) + "nm", str(scale_distance_nm) + "nm",
font=QFont("Trebuchet MS", 6, weight=5, italic=False), font=QFont("Trebuchet MS", 6, weight=5, italic=False),
) )
text2.setPos(POS_X + dist, POS_Y + BIG_LINE * 2) text2.setPos(POS_X + dist, POS_Y + BIG_LINE * 2)
text2.setDefaultTextColor(Qt.white) text2.setDefaultTextColor(Qt.black)
text2_white = self.scene().addText(
str(scale_distance_nm) + "nm",
font=QFont("Trebuchet MS", 6, weight=5, italic=False),
)
text2_white.setPos(POS_X + dist + 1, POS_Y + BIG_LINE * 2)
text2_white.setDefaultTextColor(Qt.white)
l.setPen(CONST.COLORS["white"])
for i in range(number_of_points + 1): for i in range(number_of_points + 1):
d = float(i) / float(number_of_points) d = float(i) / float(number_of_points)
if i == 0 or i == number_of_points: if i == 0 or i == number_of_points:
@@ -956,7 +969,15 @@ class QLiberationMap(QGraphicsView):
POS_X + PADDING + d * dist, POS_X + PADDING + d * dist,
POS_Y + BIG_LINE - h, POS_Y + BIG_LINE - h,
) )
l.setPen(CONST.COLORS["white"]) l.setPen(CONST.COLORS["black"])
lw = self.scene().addLine(
POS_X + PADDING + d * dist + 1,
POS_Y + BIG_LINE * 2,
POS_X + PADDING + d * dist + 1,
POS_Y + BIG_LINE - h,
)
lw.setPen(CONST.COLORS["white"])
def wheelEvent(self, event: QWheelEvent): def wheelEvent(self, event: QWheelEvent):
if event.angleDelta().y() > 0: if event.angleDelta().y() > 0:

View File

@@ -48,6 +48,8 @@ class QUnitInfoWindow(QDialog):
header = QLabel(self) header = QLabel(self)
header.setGeometry(0, 0, 720, 360) header.setGeometry(0, 0, 720, 360)
pixmap = None
if ( if (
dcs.planes.plane_map.get(self.unit_type.id) is not None dcs.planes.plane_map.get(self.unit_type.id) is not None
or dcs.helicopters.helicopter_map.get(self.unit_type.id) is not None or dcs.helicopters.helicopter_map.get(self.unit_type.id) is not None

View File

@@ -64,23 +64,26 @@ class QPylonEditor(QComboBox):
if pylon_default_weapon is not None: if pylon_default_weapon is not None:
if self.game.settings.restrict_weapons_by_date: if self.game.settings.restrict_weapons_by_date:
orig_weapon = Weapon.from_clsid(pylon_default_weapon) orig_weapon = Weapon.from_clsid(pylon_default_weapon)
if not orig_weapon.available_on(self.game.date): if orig_weapon is not None:
for fallback in orig_weapon.fallbacks: if not orig_weapon.available_on(self.game.date):
if historical_weapon is None: for fallback in orig_weapon.fallbacks:
if not self.pylon.can_equip(fallback): if historical_weapon is None:
continue if not self.pylon.can_equip(fallback):
if not fallback.available_on(self.game.date): continue
continue if not fallback.available_on(self.game.date):
historical_weapon = fallback continue
historical_weapon = fallback
else:
historical_weapon = orig_weapon
if historical_weapon is not None:
self.setCurrentText(historical_weapon.cls_id)
else: else:
historical_weapon = orig_weapon self.setCurrentText(pylon_default_weapon)
if historical_weapon is not None:
self.setCurrentText(
weapons_data.weapon_ids.get(historical_weapon.cls_id).get(
"name"
)
)
else: else:
self.setCurrentText( weapon = weapons_data.weapon_ids.get(pylon_default_weapon)
weapons_data.weapon_ids.get(pylon_default_weapon).get("name") if weapon is not None:
) self.setCurrentText(
weapons_data.weapon_ids.get(pylon_default_weapon).get("name")
)
else:
self.setCurrentText(pylon_default_weapon)

View File

@@ -4,13 +4,14 @@ import logging
from typing import List, Optional from typing import List, Optional
from PySide2 import QtGui, QtWidgets from PySide2 import QtGui, QtWidgets
from PySide2.QtCore import QItemSelectionModel, QPoint, Qt from PySide2.QtCore import QItemSelectionModel, QPoint, Qt, QDate
from PySide2.QtWidgets import QVBoxLayout, QTextEdit, QLabel from PySide2.QtWidgets import QVBoxLayout, QTextEdit, QLabel
from jinja2 import Environment, FileSystemLoader, select_autoescape from jinja2 import Environment, FileSystemLoader, select_autoescape
from game import db from game import db
from game.settings import Settings from game.settings import Settings
from game.theater.start_generator import GameGenerator, GeneratorSettings from game.theater.start_generator import GameGenerator, GeneratorSettings
from qt_ui.widgets.QLiberationCalendar import QLiberationCalendar
from qt_ui.widgets.spinsliders import TenthsSpinSlider from qt_ui.widgets.spinsliders import TenthsSpinSlider
from qt_ui.windows.newgame.QCampaignList import ( from qt_ui.windows.newgame.QCampaignList import (
Campaign, Campaign,
@@ -41,7 +42,10 @@ class NewGameWizard(QtWidgets.QWizard):
self.faction_selection_page = FactionSelection() self.faction_selection_page = FactionSelection()
self.addPage(IntroPage()) self.addPage(IntroPage())
self.addPage(TheaterConfiguration(self.campaigns, self.faction_selection_page)) self.theater_page = TheaterConfiguration(
self.campaigns, self.faction_selection_page
)
self.addPage(self.theater_page)
self.addPage(self.faction_selection_page) self.addPage(self.faction_selection_page)
self.addPage(GeneratorOptions()) self.addPage(GeneratorOptions())
self.addPage(DifficultyAndAutomationOptions()) self.addPage(DifficultyAndAutomationOptions())
@@ -64,6 +68,13 @@ class NewGameWizard(QtWidgets.QWizard):
if campaign is None: if campaign is None:
campaign = self.campaigns[0] campaign = self.campaigns[0]
if self.field("usePreset"):
start_date = db.TIME_PERIODS[
list(db.TIME_PERIODS.keys())[self.field("timePeriod")]
]
else:
start_date = self.theater_page.calendar.selectedDate().toPython()
settings = Settings( settings = Settings(
player_income_multiplier=self.field("player_income_multiplier") / 10, player_income_multiplier=self.field("player_income_multiplier") / 10,
enemy_income_multiplier=self.field("enemy_income_multiplier") / 10, enemy_income_multiplier=self.field("enemy_income_multiplier") / 10,
@@ -75,9 +86,7 @@ class NewGameWizard(QtWidgets.QWizard):
supercarrier=self.field("supercarrier"), supercarrier=self.field("supercarrier"),
) )
generator_settings = GeneratorSettings( generator_settings = GeneratorSettings(
start_date=db.TIME_PERIODS[ start_date=start_date,
list(db.TIME_PERIODS.keys())[self.field("timePeriod")]
],
player_budget=int(self.field("starting_money")), player_budget=int(self.field("starting_money")),
enemy_budget=int(self.field("enemy_starting_money")), enemy_budget=int(self.field("enemy_starting_money")),
# QSlider forces integers, so we use 1 to 50 and divide by 10 to # QSlider forces integers, so we use 1 to 50 and divide by 10 to
@@ -312,12 +321,56 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
# Faction description # Faction description
self.campaignMapDescription = QTextEdit("") self.campaignMapDescription = QTextEdit("")
self.campaignMapDescription.setReadOnly(True) self.campaignMapDescription.setReadOnly(True)
self.campaignMapDescription.setMaximumHeight(150) self.campaignMapDescription.setMaximumHeight(100)
self.performanceText = QTextEdit("") self.performanceText = QTextEdit("")
self.performanceText.setReadOnly(True) self.performanceText.setReadOnly(True)
self.performanceText.setMaximumHeight(150) self.performanceText.setMaximumHeight(90)
# Campaign settings
mapSettingsGroup = QtWidgets.QGroupBox("Map Settings")
invertMap = QtWidgets.QCheckBox()
self.registerField("invertMap", invertMap)
mapSettingsLayout = QtWidgets.QGridLayout()
mapSettingsLayout.addWidget(QtWidgets.QLabel("Invert Map"), 0, 0)
mapSettingsLayout.addWidget(invertMap, 0, 1)
mapSettingsGroup.setLayout(mapSettingsLayout)
# Time Period
timeGroup = QtWidgets.QGroupBox("Time Period")
timePeriod = QtWidgets.QLabel("Start date :")
timePeriodSelect = QtWidgets.QComboBox()
timePeriodPresetLabel = QLabel("Use preset :")
timePeriodPreset = QtWidgets.QCheckBox()
timePeriodPreset.setChecked(True)
self.calendar = QLiberationCalendar()
self.calendar.setSelectedDate(QDate())
self.calendar.setDisabled(True)
def onTimePeriodChanged():
self.calendar.setSelectedDate(
list(db.TIME_PERIODS.values())[timePeriodSelect.currentIndex()]
)
timePeriodSelect.currentTextChanged.connect(onTimePeriodChanged)
for r in db.TIME_PERIODS:
timePeriodSelect.addItem(r)
timePeriod.setBuddy(timePeriodSelect)
timePeriodSelect.setCurrentIndex(21)
def onTimePeriodCheckboxChanged():
if timePeriodPreset.isChecked():
self.calendar.setDisabled(True)
timePeriodSelect.setDisabled(False)
onTimePeriodChanged()
else:
self.calendar.setDisabled(False)
timePeriodSelect.setDisabled(True)
timePeriodPreset.stateChanged.connect(onTimePeriodCheckboxChanged)
# Bind selection method for campaign selection
def on_campaign_selected(): def on_campaign_selected():
template = jinja_env.get_template("campaigntemplate_EN.j2") template = jinja_env.get_template("campaigntemplate_EN.j2")
template_perf = jinja_env.get_template( template_perf = jinja_env.get_template(
@@ -335,27 +388,10 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
campaignList.selectionModel().setCurrentIndex( campaignList.selectionModel().setCurrentIndex(
campaignList.indexAt(QPoint(1, 1)), QItemSelectionModel.Rows campaignList.indexAt(QPoint(1, 1)), QItemSelectionModel.Rows
) )
campaignList.selectionModel().selectionChanged.connect(on_campaign_selected) campaignList.selectionModel().selectionChanged.connect(on_campaign_selected)
on_campaign_selected() on_campaign_selected()
# Campaign settings
mapSettingsGroup = QtWidgets.QGroupBox("Map Settings")
invertMap = QtWidgets.QCheckBox()
self.registerField("invertMap", invertMap)
mapSettingsLayout = QtWidgets.QGridLayout()
mapSettingsLayout.addWidget(QtWidgets.QLabel("Invert Map"), 0, 0)
mapSettingsLayout.addWidget(invertMap, 0, 1)
mapSettingsGroup.setLayout(mapSettingsLayout)
# Time Period
timeGroup = QtWidgets.QGroupBox("Time Period")
timePeriod = QtWidgets.QLabel("Start date :")
timePeriodSelect = QtWidgets.QComboBox()
for r in db.TIME_PERIODS:
timePeriodSelect.addItem(r)
timePeriod.setBuddy(timePeriodSelect)
timePeriodSelect.setCurrentIndex(21)
# Docs Link # Docs Link
docsText = QtWidgets.QLabel( docsText = QtWidgets.QLabel(
'<a href="https://github.com/Khopa/dcs_liberation/wiki/Custom-Campaigns"><span style="color:#FFFFFF;">How to create your own theater</span></a>' '<a href="https://github.com/Khopa/dcs_liberation/wiki/Custom-Campaigns"><span style="color:#FFFFFF;">How to create your own theater</span></a>'
@@ -365,10 +401,14 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
# Register fields # Register fields
self.registerField("timePeriod", timePeriodSelect) self.registerField("timePeriod", timePeriodSelect)
self.registerField("usePreset", timePeriodPreset)
timeGroupLayout = QtWidgets.QGridLayout() timeGroupLayout = QtWidgets.QGridLayout()
timeGroupLayout.addWidget(timePeriod, 0, 0) timeGroupLayout.addWidget(timePeriodPresetLabel, 0, 0)
timeGroupLayout.addWidget(timePeriodSelect, 0, 1) timeGroupLayout.addWidget(timePeriodPreset, 0, 1)
timeGroupLayout.addWidget(timePeriod, 1, 0)
timeGroupLayout.addWidget(timePeriodSelect, 1, 1)
timeGroupLayout.addWidget(self.calendar, 0, 2, 3, 1)
timeGroup.setLayout(timeGroupLayout) timeGroup.setLayout(timeGroupLayout)
layout = QtWidgets.QGridLayout() layout = QtWidgets.QGridLayout()

View File

@@ -1,10 +1,31 @@
Pyside2>=5.15.2 altgraph==0.17
pyinstaller==3.6 appdirs==1.4.4
black==20.8b1
Pillow~=7.2.0 cfgv==3.2.0
tabulate~=0.8.7 click==7.1.2
distlib==0.3.1
filelock==3.0.12
future==0.18.2
identify==1.5.13
Jinja2==2.11.3
MarkupSafe==1.1.1
mypy==0.782 mypy==0.782
mypy-extensions==0.4.3 mypy-extensions==0.4.3
jinja2>=2.11.2 nodeenv==1.5.0
shapely==1.7.1 pathspec==0.8.1
pefile==2019.4.18
Pillow==7.2.0
pre-commit==2.10.1
PyInstaller==3.6
PySide2==5.15.2
pywin32-ctypes==0.2.0
PyYAML==5.4.1
regex==2020.11.13
Shapely==1.7.1
shiboken2==5.15.2
six==1.15.0
tabulate==0.8.7
toml==0.10.2
typed-ast==1.4.2
typing-extensions==3.7.4.3
virtualenv==20.4.2

View File

@@ -12,14 +12,17 @@ Terrain = Union[Caucasus, PersianGulf, Syria, Nevada, Normandy, TheChannel]
SAVE_PATH = Path("resources/frontlines") SAVE_PATH = Path("resources/frontlines")
def validate_miz(file_path: Path) -> bool: def validate_miz(file_path: Path) -> bool:
return bool(file_path.suffix == ".miz" and file_path.exists()) return bool(file_path.suffix == ".miz" and file_path.exists())
def validate_airports(airports: Tuple[int], terrain: Terrain): def validate_airports(airports: Tuple[int], terrain: Terrain):
for airport in airports: for airport in airports:
if terrain.airport_by_id(airport) is None: if terrain.airport_by_id(airport) is None:
print(f"Cannot load airport for invalid id {airport}") print(f"Cannot load airport for invalid id {airport}")
def load_files(files) -> List[Mission]: def load_files(files) -> List[Mission]:
missions = [] missions = []
for file in files: for file in files:
@@ -31,26 +34,30 @@ def load_files(files) -> List[Mission]:
print(f"Error: {file} doesn't look like a valid mission file.") print(f"Error: {file} doesn't look like a valid mission file.")
return missions return missions
def create_frontline_dict(mission: Mission) -> Dict[str, Dict]: def create_frontline_dict(mission: Mission) -> Dict[str, Dict]:
frontline_dict = {} frontline_dict = {}
for group in mission.country("USA").vehicle_group: for group in mission.country("USA").vehicle_group:
groupname = str(group.name).replace(group.name.id, "").replace(":","") groupname = str(group.name).replace(group.name.id, "").replace(":", "")
control_points = groupname.split("|") control_points = groupname.split("|")
frontline_dict[groupname] = { frontline_dict[groupname] = {
"points": [(i.position.x, i.position.y) for i in group.points], "points": [(i.position.x, i.position.y) for i in group.points],
"start_cp": int(control_points[0]) "start_cp": int(control_points[0]),
} }
return frontline_dict return frontline_dict
def process_missions(missions: List[Mission]) -> None: def process_missions(missions: List[Mission]) -> None:
for mission in missions: for mission in missions:
frontline_dict = create_frontline_dict(mission) frontline_dict = create_frontline_dict(mission)
write_json(frontline_dict, mission.terrain.name.lower()) write_json(frontline_dict, mission.terrain.name.lower())
def write_json(frontline_dict: Dict[str, Dict], terrain_name: str) -> None: def write_json(frontline_dict: Dict[str, Dict], terrain_name: str) -> None:
with open(SAVE_PATH.joinpath(terrain_name + ".json"), "w") as file: with open(SAVE_PATH.joinpath(terrain_name + ".json"), "w") as file:
json.dump(frontline_dict, file) json.dump(frontline_dict, file)
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Process a miz file to create json descriptions of multi-segment frontlines" description="Process a miz file to create json descriptions of multi-segment frontlines"
@@ -69,6 +76,3 @@ if __name__ == "__main__":
# frontline_dict = create_frontline_dict(missions[0]) # frontline_dict = create_frontline_dict(missions[0])
print("Done") print("Done")

View File

@@ -13,7 +13,10 @@ def load_templates():
groups = {} # type: typing.Dict[str, typing.Dict[int, typing.List[Static]]] groups = {} # type: typing.Dict[str, typing.Dict[int, typing.List[Static]]]
for static_group in temp_mis.country("USA").static_group + temp_mis.country("USAF Aggressors").static_group: for static_group in (
temp_mis.country("USA").static_group
+ temp_mis.country("USAF Aggressors").static_group
):
for static in static_group.units: for static in static_group.units:
static_name = str(static.name).split()[0] static_name = str(static.name).split()[0]
tpl_name, tpl_idx = static_name[:-1], int(static_name[-1]) tpl_name, tpl_idx = static_name[:-1], int(static_name[-1])
@@ -34,13 +37,19 @@ def load_templates():
a = aa a = aa
b = bb b = bb
center = a.position.point_from_heading(a.position.heading_between_point(b.position), dist / 2) center = a.position.point_from_heading(
a.position.heading_between_point(b.position), dist / 2
)
for static in static_groups: for static in static_groups:
tpls[category_name][idx].append({ tpls[category_name][idx].append(
"type": static.type, {
"offset": Point(center.x - static.position.x, center.y - static.position.y), "type": static.type,
"heading": static.heading, "offset": Point(
}) center.x - static.position.x, center.y - static.position.y
),
"heading": static.heading,
}
)
tpls["aa"] = {0: [{"type": "AA", "offset": Point(0, 0), "heading": 0}]} tpls["aa"] = {0: [{"type": "AA", "offset": Point(0, 0), "heading": 0}]}
return tpls return tpls

View File

@@ -11,7 +11,8 @@ from game.theater.landmap import Landmap
@singledispatch @singledispatch
def to_multipoly(obj) -> MultiPolygon: def to_multipoly(obj) -> MultiPolygon:
raise NotImplementedError( raise NotImplementedError(
f"to_multipoly not implemented for {obj.__class__.__name__}") f"to_multipoly not implemented for {obj.__class__.__name__}"
)
@to_multipoly.register @to_multipoly.register
@@ -28,8 +29,7 @@ def _multipoly_to_multipoly(obj: MultiPolygon) -> MultiPolygon:
def _geometry_collection_to_multipoly(obj: GeometryCollection) -> MultiPolygon: def _geometry_collection_to_multipoly(obj: GeometryCollection) -> MultiPolygon:
if obj.is_empty: if obj.is_empty:
return MultiPolygon() return MultiPolygon()
raise RuntimeError( raise RuntimeError(f"Not sure how to convert collection to multipoly: {obj.wkt}")
f"Not sure how to convert collection to multipoly: {obj.wkt}")
for terrain in ["cau", "nev", "syria", "channel", "normandy", "gulf"]: for terrain in ["cau", "nev", "syria", "channel", "normandy", "gulf"]:
@@ -61,6 +61,11 @@ for terrain in ["cau", "nev", "syria", "channel", "normandy", "gulf"]:
with open("../{}landmap.p".format(terrain), "wb") as f: with open("../{}landmap.p".format(terrain), "wb") as f:
print(len(inclusion_zones), len(exclusion_zones), len(seas_zones)) print(len(inclusion_zones), len(exclusion_zones), len(seas_zones))
pickle.dump(Landmap(to_multipoly(unary_union(inclusion_zones)), pickle.dump(
to_multipoly(unary_union(exclusion_zones)), Landmap(
to_multipoly(unary_union(seas_zones))), f) to_multipoly(unary_union(inclusion_zones)),
to_multipoly(unary_union(exclusion_zones)),
to_multipoly(unary_union(seas_zones)),
),
f,
)

View File

@@ -70,13 +70,19 @@ def beacons_from_terrain(dcs_path: Path, path: Path) -> Iterable[Beacon]:
with cd(dcs_path): with cd(dcs_path):
lua = lupa.LuaRuntime() lua = lupa.LuaRuntime()
lua.execute(textwrap.dedent("""\ lua.execute(
textwrap.dedent(
"""\
function module(name) function module(name)
end end
""")) """
)
)
bind_gettext = lua.eval(textwrap.dedent("""\ bind_gettext = lua.eval(
textwrap.dedent(
"""\
function(py_gettext) function(py_gettext)
package.preload["i_18n"] = function() package.preload["i_18n"] = function()
return { return {
@@ -85,16 +91,20 @@ def beacons_from_terrain(dcs_path: Path, path: Path) -> Iterable[Beacon]:
end end
end end
""")) """
)
)
try: try:
translator = gettext.translation( translator = gettext.translation(
"messages", path / "l10n", languages=["en"]) "messages", path / "l10n", languages=["en"]
)
def translate(message_name: str) -> str: def translate(message_name: str) -> str:
if not message_name: if not message_name:
return message_name return message_name
return translator.gettext(message_name) return translator.gettext(message_name)
except FileNotFoundError: except FileNotFoundError:
# TheChannel has no locale data for English. # TheChannel has no locale data for English.
def translate(message_name: str) -> str: def translate(message_name: str) -> str:
@@ -126,7 +136,7 @@ def beacons_from_terrain(dcs_path: Path, path: Path) -> Iterable[Beacon]:
beacon["callsign"], beacon["callsign"],
beacon_type, beacon_type,
convert_lua_frequency(beacon["frequency"]), convert_lua_frequency(beacon["frequency"]),
getattr(beacon, "channel", None) getattr(beacon, "channel", None),
) )
@@ -152,9 +162,10 @@ class Importer:
def export_beacons(self, terrain: str, beacons: Iterable[Beacon]) -> None: def export_beacons(self, terrain: str, beacons: Iterable[Beacon]) -> None:
terrain_py_path = self.export_dir / f"{terrain.lower()}.json" terrain_py_path = self.export_dir / f"{terrain.lower()}.json"
import json import json
terrain_py_path.write_text(json.dumps([
dataclasses.asdict(b) for b in beacons terrain_py_path.write_text(
], indent=True)) json.dumps([dataclasses.asdict(b) for b in beacons], indent=True)
)
def parse_args() -> argparse.Namespace: def parse_args() -> argparse.Namespace:
@@ -169,13 +180,14 @@ def parse_args() -> argparse.Namespace:
"--export-to", "--export-to",
type=resolved_path, type=resolved_path,
default=EXPORT_DIR, default=EXPORT_DIR,
help="Output directory for generated JSON files.") help="Output directory for generated JSON files.",
)
parser.add_argument( parser.add_argument(
"dcs_path", "dcs_path",
metavar="DCS_PATH", metavar="DCS_PATH",
type=resolved_path, type=resolved_path,
help="Path to DCS installation." help="Path to DCS installation.",
) )
return parser.parse_args() return parser.parse_args()

View File

@@ -36,7 +36,13 @@ def _zip_dir(archieve, path):
def _mk_archieve(): def _mk_archieve():
path = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, "build", "dcs_liberation_{}.zip".format(VERSION)) path = os.path.join(
os.path.dirname(__file__),
os.pardir,
os.pardir,
"build",
"dcs_liberation_{}.zip".format(VERSION),
)
if os.path.exists(path): if os.path.exists(path):
print("version already exists") print("version already exists")
return return
@@ -46,9 +52,9 @@ def _mk_archieve():
except FileNotFoundError: except FileNotFoundError:
pass pass
os.system("pyinstaller.exe --clean pyinstaller.spec") os.system("pyinstaller.exe --clean pyinstaller.spec")
#archieve = ZipFile(path, "w") # archieve = ZipFile(path, "w")
#archieve.writestr("dcs_liberation.bat", "cd dist\\dcs_liberation\r\nliberation_main \"%UserProfile%\\Saved Games\" \"{}\"".format(VERSION)) # archieve.writestr("dcs_liberation.bat", "cd dist\\dcs_liberation\r\nliberation_main \"%UserProfile%\\Saved Games\" \"{}\"".format(VERSION))
#_zip_dir(archieve, "./dist/dcs_liberation") # _zip_dir(archieve, "./dist/dcs_liberation")
_mk_archieve() _mk_archieve()

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB