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
## 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")
plane_map["A-4E-C"] = A_4E_C
plane_map["F-22A"] = F_22A
plane_map["MB-339PAN"] = MB_339PAN
plane_map["Rafale_M"] = Rafale_M
plane_map["Rafale_A_S"] = Rafale_A_S

View File

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

View File

@@ -649,6 +649,12 @@ AIRCRAFT_DATA: Dict[str, AircraftData] = {
),
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["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
# probably do), we'll need to split some of this information off into a
# second page.
self.title_font = ImageFont.truetype("arial.ttf", 32)
self.heading_font = ImageFont.truetype("arial.ttf", 24)
self.content_font = ImageFont.truetype("arial.ttf", 20)
self.table_font = ImageFont.truetype("resources/fonts/Inconsolata.otf", 20)
self.title_font = ImageFont.truetype(
"arial.ttf", 32, layout_engine=ImageFont.LAYOUT_BASIC
)
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.x = page_margin
self.y = page_margin

View File

@@ -6,99 +6,412 @@ from dcs.weapons_data import Weapons
class WeaponsA4EC:
AN_M57__2__TER_ = {"clsid": "{AN-M57_TER_2_L}", "name": "AN-M57 *2 (TER)", "weight": 273.6}
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_M57__2__TER_ = {
"clsid": "{AN-M57_TER_2_L}",
"name": "AN-M57 *2 (TER)",
"weight": 273.6,
}
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_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__ = {"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_M81__5__MER_ = {
"clsid": "{AN-M81_MER_5_L}",
"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__5__MER_ = {"clsid": "{AN-M88_MER_5_L}", "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}
AN_M88__5__MER_ = {
"clsid": "{AN-M88_MER_5_L}",
"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__2 = {"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_1_A__2 = {
"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__2 = {"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_2B_A__2 = {
"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__2 = {"clsid": "{CBU-2/A_TER_2_L}", "name": "CBU-2/A *2", "weight": 735.245472}
CBU_2_A__2_ = {"clsid": "{CBU-2/A_TER_2_R}", "name": "CBU-2/A *2", "weight": 735.245472}
D_704_Refueling_Pod = {"clsid": "{D-704_BUDDY_POD}", "name": "D-704 Refueling Pod", "weight": 1234.532648}
Fuel_Tank_150_gallons = {"clsid": "{DFT-150gal}", "name": "Fuel Tank 150 gallons", "weight": 515.888512}
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}
Fuel_Tank_400_gallons = {"clsid": "{DFT-400gal}", "name": "Fuel Tank 400 gallons", "weight": 1320.06208}
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}
CBU_2_A__2 = {
"clsid": "{CBU-2/A_TER_2_L}",
"name": "CBU-2/A *2",
"weight": 735.245472,
}
CBU_2_A__2_ = {
"clsid": "{CBU-2/A_TER_2_R}",
"name": "CBU-2/A *2",
"weight": 735.245472,
}
D_704_Refueling_Pod = {
"clsid": "{D-704_BUDDY_POD}",
"name": "D-704 Refueling Pod",
"weight": 1234.532648,
}
Fuel_Tank_150_gallons = {
"clsid": "{DFT-150gal}",
"name": "Fuel Tank 150 gallons",
"weight": 515.888512,
}
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,
}
Fuel_Tank_400_gallons = {
"clsid": "{DFT-400gal}",
"name": "Fuel Tank 400 gallons",
"weight": 1320.06208,
}
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 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 1L}", "name": "MAK79 MK-20", "weight": 232}
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__ = {"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_20__2__TER_ = {
"clsid": "{Mk-20_TER_2_L}",
"name": "Mk-20 *2 (TER)",
"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_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__ = {"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_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__ = {
"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__5__MER_ = {"clsid": "{Mk-81SE_MER_5_L}", "name": "Mk-81SE *5 (MER)", "weight": 689.8}
Mk_81SE__5__MER__ = {"clsid": "{Mk-81SE_MER_5_R}", "name": "Mk-81SE *5 (MER)", "weight": 689.8}
Mk_81SE__6__MER_ = {"clsid": "{Mk-81SE_MER_6_C}", "name": "Mk-81SE *6 (MER)", "weight": 807.8}
Mk_81__5__MER_ = {"clsid": "{Mk-81_MER_5_L}", "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}
Mk_81SE__5__MER_ = {
"clsid": "{Mk-81SE_MER_5_L}",
"name": "Mk-81SE *5 (MER)",
"weight": 689.8,
}
Mk_81SE__5__MER__ = {
"clsid": "{Mk-81SE_MER_5_R}",
"name": "Mk-81SE *5 (MER)",
"weight": 689.8,
}
Mk_81SE__6__MER_ = {
"clsid": "{Mk-81SE_MER_6_C}",
"name": "Mk-81SE *6 (MER)",
"weight": 807.8,
}
Mk_81__5__MER_ = {
"clsid": "{Mk-81_MER_5_L}",
"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}
class A_4E_C(PlaneType):
id = "A-4E-C"
flyable = True
@@ -112,7 +425,7 @@ class A_4E_C(PlaneType):
charge_total = 60
chaff_charge_size = 1
flare_charge_size = 1
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 254
panel_radio = {
@@ -137,7 +450,7 @@ class A_4E_C(PlaneType):
7: 257,
14: 263,
19: 266,
15: 261
15: 261,
},
},
}
@@ -153,7 +466,6 @@ class A_4E_C(PlaneType):
}
class Properties:
class HideECMPanel:
id = "HideECMPanel"
@@ -219,7 +531,6 @@ class A_4E_C(PlaneType):
_14_seconds = 7
class Liveries:
class Georgia(Enum):
Unmarked = "Unmarked"
Community_A_4E = "Community A-4E"
@@ -425,7 +736,9 @@ class A_4E_C(PlaneType):
Aggressor_USN_TopGun = "Aggressor USN TopGun"
Aggressor_USN_VF_126_Bandits = "Aggressor USN VF-126 Bandits"
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)"
class USA(Enum):
@@ -476,7 +789,9 @@ class A_4E_C(PlaneType):
Trainer_USN_VC_8_Redtails = "Trainer USN VC-8 Redtails"
Aggressor_USN_VF_126_Bandits = "Aggressor USN VF-126 Bandits"
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)"
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_Mk5_HEAT = (1, Weapons.LAU_68___7_FFAR_Mk5_HEAT)
AGM_45A = (1, Weapons.AGM_45A)
#ERRR {AGM12_B}
# ERRR {AGM12_B}
Mk_20 = (1, Weapons.Mk_20)
Mk_81 = (1, Weapons.Mk_81)
Mk_81SE = (1, WeaponsA4EC.Mk_81SE)
@@ -536,14 +851,18 @@ class A_4E_C(PlaneType):
AN_M64 = (1, Weapons.AN_M64)
AN_M81 = (1, WeaponsA4EC.AN_M81)
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___green = (1, Weapons.Smokewinder___green)
Smokewinder___blue = (1, Weapons.Smokewinder___blue)
Smokewinder___white = (1, Weapons.Smokewinder___white)
Smokewinder___yellow = (1, Weapons.Smokewinder___yellow)
Smokewinder___orange = (1, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon2:
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_Mk5_HEAT_ = (2, WeaponsA4EC.LAU_68_2___7_FFAR_Mk5_HEAT_)
AGM_45A = (2, Weapons.AGM_45A)
#ERRR {AGM12_C}
#ERRR {AGM12_B}
# ERRR {AGM12_C}
# ERRR {AGM12_B}
AGM_62 = (2, Weapons.AGM_62)
Mk_20 = (2, Weapons.Mk_20)
Mk_81 = (2, Weapons.Mk_81)
@@ -607,15 +926,19 @@ class A_4E_C(PlaneType):
Smokewinder___white = (2, Weapons.Smokewinder___white)
Smokewinder___yellow = (2, Weapons.Smokewinder___yellow)
Smokewinder___orange = (2, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon3:
Fuel_Tank_400_gallons = (3, WeaponsA4EC.Fuel_Tank_400_gallons)
Fuel_Tank_300_gallons = (3, WeaponsA4EC.Fuel_Tank_300_gallons)
Fuel_Tank_150_gallons = (3, WeaponsA4EC.Fuel_Tank_150_gallons)
D_704_Refueling_Pod = (3, WeaponsA4EC.D_704_Refueling_Pod)
#ERRR {3*LAU-61}
LAU_68_3___7_2_75__rockets_MK5__HE_ = (3, Weapons.LAU_68_3___7_2_75__rockets_MK5__HE_)
# 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_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_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_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)
#ERRR {AGM12_B}
# ERRR {AGM12_B}
AGM_62 = (3, Weapons.AGM_62)
Mk_20 = (3, Weapons.Mk_20)
Mk_81 = (3, Weapons.Mk_81)
@@ -680,7 +1003,8 @@ class A_4E_C(PlaneType):
Smokewinder___white = (3, Weapons.Smokewinder___white)
Smokewinder___yellow = (3, Weapons.Smokewinder___yellow)
Smokewinder___orange = (3, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon4:
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_Mk5_HEAT__ = (4, WeaponsA4EC.LAU_68_2___7_FFAR_Mk5_HEAT__)
AGM_45A = (4, Weapons.AGM_45A)
#ERRR {AGM12_C}
#ERRR {AGM12_B}
# ERRR {AGM12_C}
# ERRR {AGM12_B}
AGM_62 = (4, Weapons.AGM_62)
Mk_20 = (4, Weapons.Mk_20)
Mk_81 = (4, Weapons.Mk_81)
@@ -744,7 +1068,8 @@ class A_4E_C(PlaneType):
Smokewinder___white = (4, Weapons.Smokewinder___white)
Smokewinder___yellow = (4, Weapons.Smokewinder___yellow)
Smokewinder___orange = (4, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
class Pylon5:
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_Mk5_HEAT = (5, Weapons.LAU_68___7_FFAR_Mk5_HEAT)
AGM_45A = (5, Weapons.AGM_45A)
#ERRR {AGM12_B}
# ERRR {AGM12_B}
Mk_20 = (5, Weapons.Mk_20)
Mk_81 = (5, Weapons.Mk_81)
Mk_81SE = (5, WeaponsA4EC.Mk_81SE)
@@ -767,16 +1092,27 @@ class A_4E_C(PlaneType):
AN_M64 = (5, Weapons.AN_M64)
AN_M81 = (5, WeaponsA4EC.AN_M81)
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___green = (5, Weapons.Smokewinder___green)
Smokewinder___blue = (5, Weapons.Smokewinder___blue)
Smokewinder___white = (5, Weapons.Smokewinder___white)
Smokewinder___yellow = (5, Weapons.Smokewinder___yellow)
Smokewinder___orange = (5, Weapons.Smokewinder___orange)
#ERRR <CLEAN>
# ERRR <CLEAN>
pylons = {1, 2, 3, 4, 5}
tasks = [task.CAP, task.CAS, task.SEAD, task.GroundAttack, task.AFAC, task.Refueling]
task_default = task.CAS
tasks = [
task.CAP,
task.CAS,
task.SEAD,
task.GroundAttack,
task.AFAC,
task.Refueling,
]
task_default = task.CAS

View File

@@ -24,7 +24,7 @@ class F_22A(PlaneType):
chaff_charge_size = 1
flare_charge_size = 2
eplrs = True
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 127.5
property_defaults = {
@@ -36,7 +36,6 @@ class F_22A(PlaneType):
id = "BAY_DOOR_OPTION"
class Liveries:
class USSR(Enum):
default = "default"
_154_wg = "154 wg"
@@ -1806,5 +1805,11 @@ class F_22A(PlaneType):
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

View File

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

View File

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

View File

@@ -7,32 +7,104 @@ from dcs.weapons_data import Weapons
class MB_339PAN_Weapons:
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}
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_R}", "name": "GunPod AN/M3", "weight": 75}
GunPod_DEFA553 = {"clsid": "{MB339-DEFA553_L}", "name": "GunPod DEFA553", "weight": 190}
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}
GunPod_DEFA553 = {
"clsid": "{MB339-DEFA553_L}",
"name": "GunPod DEFA553",
"weight": 190,
}
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 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 1L}", "name": "MAK79 MK-20", "weight": 232}
MB339_Black_Smoke = {"clsid": "{SMOKE-BLACK-MB339}", "name": "MB339 Black 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}
MB339_Black_Smoke = {
"clsid": "{SMOKE-BLACK-MB339}",
"name": "MB339 Black 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}
Tip_Fuel_Tank_500lt = {"clsid": "{FUEL-TIP-TANK-500-L}", "name": "Tip Fuel Tank 500lt", "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}
Tip_Fuel_Tank_500lt = {
"clsid": "{FUEL-TIP-TANK-500-L}",
"name": "Tip Fuel Tank 500lt",
"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):
@@ -43,7 +115,7 @@ class MB_339PAN(PlaneType):
length = 12.13
fuel_max = 626
max_speed = 763.2
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
radio_frequency = 124
panel_radio = {
@@ -68,7 +140,7 @@ class MB_339PAN(PlaneType):
7: 262,
14: 266,
19: 268,
15: 265
15: 265,
},
},
2: {
@@ -102,7 +174,7 @@ class MB_339PAN(PlaneType):
28: 257,
23: 260,
29: 253,
15: 265
15: 265,
},
},
}
@@ -113,7 +185,6 @@ class MB_339PAN(PlaneType):
}
class Properties:
class SoloFlight:
id = "SoloFlight"
@@ -127,7 +198,6 @@ class MB_339PAN(PlaneType):
Equally_Responsible = -2
class Liveries:
class Georgia(Enum):
MB339AA__ARMADA____Crippa = "MB339AA 'ARMADA' - Crippa"
MB339AA__ARMADA____Yellow_Band = "MB339AA 'ARMADA' - Yellow Band"
@@ -370,7 +440,10 @@ class MB_339PAN(PlaneType):
class Pylon1:
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:
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_)
Mk_82 = (3, Weapons.Mk_82)
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)
class Pylon4:
@@ -427,7 +503,10 @@ class MB_339PAN(PlaneType):
Mk_82 = (8, Weapons.Mk_82)
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)
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:
Empty_Pylon = (9, MB_339PAN_Weapons.Empty_Pylon)
@@ -438,9 +517,18 @@ class MB_339PAN(PlaneType):
class Pylon10:
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}
tasks = [task.GroundAttack, task.RunwayAttack, task.CAS, task.AntishipStrike, task.Reconnaissance]
task_default = task.Nothing
tasks = [
task.GroundAttack,
task.RunwayAttack,
task.CAS,
task.AntishipStrike,
task.Reconnaissance,
]
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
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 = [
frenchpack._FIELD_HIDE,
frenchpack._FIELD_HIDE_SMALL,
@@ -84,5 +93,5 @@ MODDED_VEHICLES = [
highdigitsams.SAM_SA_24_Igla_S_manpad,
highdigitsams.SAM_SA_14_Strela_3_manpad,
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.weapons_data import Weapons
class RafaleWeapons:
SCALP = {"clsid": "{SCALP}", "name": "SCALP", "weight": None}
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}
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}
GBU12PII = {"clsid": "{GBU12PII}", "name": "GBU12PII", "weight": 525}
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_R = {"clsid": "{AASM_250_R}", "name": "AASM_250_R", "weight": 500}
AASM_250_RIGHT = {"clsid": "{AASM_250_RIGHT}", "name": "AASM_250_RIGHT", "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}
AASM_250_RIGHT = {
"clsid": "{AASM_250_RIGHT}",
"name": "AASM_250_RIGHT",
"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):
@@ -50,11 +71,10 @@ class Rafale_A_S(PlaneType):
charge_total = 96
chaff_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
class Liveries:
class USSR(Enum):
_01_marine_12_f = "01 marine 12 f"
_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)
Mk_84 = (2, Weapons.Mk_84)
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_WP156 = (2, Weapons.LAU3_WP156)
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)
MICA_IR = (4, Weapons.MICA_IR)
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)
class Pylon5:
@@ -937,7 +963,10 @@ class Rafale_A_S(PlaneType):
class Pylon6:
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_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM)
MICA_IR = (6, Weapons.MICA_IR)
@@ -973,7 +1002,10 @@ class Rafale_A_S(PlaneType):
Mk_84 = (9, Weapons.Mk_84)
_3_Mk_82 = (9, Weapons._3_Mk_82)
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_WP156 = (9, Weapons.LAU3_WP156)
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}
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
@@ -1010,11 +1053,10 @@ class Rafale_M(PlaneType):
charge_total = 96
chaff_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
class Liveries:
class USSR(Enum):
_01_marine_12_f = "01 marine 12 f"
_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_82 = (2, Weapons.MER_2_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_WP156 = (2, Weapons.LAU3_WP156)
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)
LAU3_WP156 = (4, Weapons.LAU3_WP156)
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)
class Pylon5:
@@ -1906,7 +1954,10 @@ class Rafale_M(PlaneType):
AIM_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM)
LAU3_WP156 = (6, Weapons.LAU3_WP156)
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)
class Pylon7:
@@ -1936,7 +1987,10 @@ class Rafale_M(PlaneType):
MER_2_MK_83 = (9, Weapons.MER_2_MK_83)
MER_2_MK_82 = (9, Weapons.MER_2_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_WP156 = (9, Weapons.LAU3_WP156)
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}
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
@@ -1978,11 +2043,10 @@ class Rafale_B(PlaneType):
charge_total = 96
chaff_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
class Liveries:
class USSR(Enum):
_01_rafale_b_lafayette = "01 rafale b lafayette"
_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)
Mk_84 = (2, Weapons.Mk_84)
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_WP156 = (2, Weapons.LAU3_WP156)
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)
MICA_IR = (4, Weapons.MICA_IR)
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)
class Pylon5:
@@ -2459,7 +2529,10 @@ class Rafale_B(PlaneType):
class Pylon6:
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_9P_Sidewinder_IR_AAM = (6, Weapons.AIM_9P_Sidewinder_IR_AAM)
MICA_IR = (6, Weapons.MICA_IR)
@@ -2496,7 +2569,10 @@ class Rafale_B(PlaneType):
Mk_84 = (9, Weapons.Mk_84)
_3_Mk_82 = (9, Weapons._3_Mk_82)
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_WP156 = (9, Weapons.LAU3_WP156)
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}
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
@@ -2534,11 +2621,10 @@ class Rafale_M_NOUNOU(PlaneType):
chaff_charge_size = 1
flare_charge_size = 1
tacan = True
category = "Tankers" #{8A302789-A55D-4897-B647-66493FA6826F}
category = "Tankers" # {8A302789-A55D-4897-B647-66493FA6826F}
radio_frequency = 127.5
class Liveries:
class USSR(Enum):
_01_marine_12_f = "01 marine 12 f"
_02_rafale_export = "02 rafale export"
@@ -2977,4 +3063,3 @@ class Rafale_M_NOUNOU(PlaneType):
tasks = [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_L = {"clsid": "{RVV-L}", "name": "RVV-L", "weight": 748}
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):
@@ -27,10 +31,9 @@ class Su_57(PlaneType):
charge_total = 200
chaff_charge_size = 1
flare_charge_size = 1
category = "Interceptor" #{78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F}
class Liveries:
class USSR(Enum):
_22 = "22"
_20 = "20"
@@ -1703,8 +1706,8 @@ class Su_57(PlaneType):
FAB_1500_M54 = (11, Weapons.FAB_1500_M54)
KAB_1500L = (11, Weapons.KAB_1500L)
MER_6_FAB_250 = (11, Weapons.MER_6_FAB_250)
#ERRR {R-33}
RVV_BD = (11,Su57Weapons.RVV_BD)
# ERRR {R-33}
RVV_BD = (11, Su57Weapons.RVV_BD)
RVV_AE = (11, Su57Weapons.RVV_AE)
RVV_M = (11, Su57Weapons.RVV_M)
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}
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

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
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(
POS_X + PADDING,
POS_Y + BIG_LINE * 2,
POS_X + PADDING + dist,
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(
"0nm", font=QFont("Trebuchet MS", 6, weight=5, italic=False)
)
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(
str(scale_distance_nm) + "nm",
font=QFont("Trebuchet MS", 6, weight=5, italic=False),
)
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):
d = float(i) / float(number_of_points)
if i == 0 or i == number_of_points:
@@ -956,7 +969,15 @@ class QLiberationMap(QGraphicsView):
POS_X + PADDING + d * dist,
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):
if event.angleDelta().y() > 0:

View File

@@ -48,6 +48,8 @@ class QUnitInfoWindow(QDialog):
header = QLabel(self)
header.setGeometry(0, 0, 720, 360)
pixmap = None
if (
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

View File

@@ -64,23 +64,26 @@ class QPylonEditor(QComboBox):
if pylon_default_weapon is not None:
if self.game.settings.restrict_weapons_by_date:
orig_weapon = Weapon.from_clsid(pylon_default_weapon)
if not orig_weapon.available_on(self.game.date):
for fallback in orig_weapon.fallbacks:
if historical_weapon is None:
if not self.pylon.can_equip(fallback):
continue
if not fallback.available_on(self.game.date):
continue
historical_weapon = fallback
if orig_weapon is not None:
if not orig_weapon.available_on(self.game.date):
for fallback in orig_weapon.fallbacks:
if historical_weapon is None:
if not self.pylon.can_equip(fallback):
continue
if not fallback.available_on(self.game.date):
continue
historical_weapon = fallback
else:
historical_weapon = orig_weapon
if historical_weapon is not None:
self.setCurrentText(historical_weapon.cls_id)
else:
historical_weapon = orig_weapon
if historical_weapon is not None:
self.setCurrentText(
weapons_data.weapon_ids.get(historical_weapon.cls_id).get(
"name"
)
)
self.setCurrentText(pylon_default_weapon)
else:
self.setCurrentText(
weapons_data.weapon_ids.get(pylon_default_weapon).get("name")
)
weapon = weapons_data.weapon_ids.get(pylon_default_weapon)
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 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 jinja2 import Environment, FileSystemLoader, select_autoescape
from game import db
from game.settings import Settings
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.windows.newgame.QCampaignList import (
Campaign,
@@ -41,7 +42,10 @@ class NewGameWizard(QtWidgets.QWizard):
self.faction_selection_page = FactionSelection()
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(GeneratorOptions())
self.addPage(DifficultyAndAutomationOptions())
@@ -64,6 +68,13 @@ class NewGameWizard(QtWidgets.QWizard):
if campaign is None:
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(
player_income_multiplier=self.field("player_income_multiplier") / 10,
enemy_income_multiplier=self.field("enemy_income_multiplier") / 10,
@@ -75,9 +86,7 @@ class NewGameWizard(QtWidgets.QWizard):
supercarrier=self.field("supercarrier"),
)
generator_settings = GeneratorSettings(
start_date=db.TIME_PERIODS[
list(db.TIME_PERIODS.keys())[self.field("timePeriod")]
],
start_date=start_date,
player_budget=int(self.field("starting_money")),
enemy_budget=int(self.field("enemy_starting_money")),
# QSlider forces integers, so we use 1 to 50 and divide by 10 to
@@ -312,12 +321,56 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
# Faction description
self.campaignMapDescription = QTextEdit("")
self.campaignMapDescription.setReadOnly(True)
self.campaignMapDescription.setMaximumHeight(150)
self.campaignMapDescription.setMaximumHeight(100)
self.performanceText = QTextEdit("")
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():
template = jinja_env.get_template("campaigntemplate_EN.j2")
template_perf = jinja_env.get_template(
@@ -335,27 +388,10 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
campaignList.selectionModel().setCurrentIndex(
campaignList.indexAt(QPoint(1, 1)), QItemSelectionModel.Rows
)
campaignList.selectionModel().selectionChanged.connect(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
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>'
@@ -365,10 +401,14 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
# Register fields
self.registerField("timePeriod", timePeriodSelect)
self.registerField("usePreset", timePeriodPreset)
timeGroupLayout = QtWidgets.QGridLayout()
timeGroupLayout.addWidget(timePeriod, 0, 0)
timeGroupLayout.addWidget(timePeriodSelect, 0, 1)
timeGroupLayout.addWidget(timePeriodPresetLabel, 0, 0)
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)
layout = QtWidgets.QGridLayout()

View File

@@ -1,10 +1,31 @@
Pyside2>=5.15.2
pyinstaller==3.6
Pillow~=7.2.0
tabulate~=0.8.7
altgraph==0.17
appdirs==1.4.4
black==20.8b1
cfgv==3.2.0
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-extensions==0.4.3
jinja2>=2.11.2
shapely==1.7.1
nodeenv==1.5.0
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")
def validate_miz(file_path: Path) -> bool:
return bool(file_path.suffix == ".miz" and file_path.exists())
def validate_airports(airports: Tuple[int], terrain: Terrain):
for airport in airports:
if terrain.airport_by_id(airport) is None:
print(f"Cannot load airport for invalid id {airport}")
def load_files(files) -> List[Mission]:
missions = []
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.")
return missions
def create_frontline_dict(mission: Mission) -> Dict[str, Dict]:
frontline_dict = {}
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("|")
frontline_dict[groupname] = {
"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
def process_missions(missions: List[Mission]) -> None:
for mission in missions:
frontline_dict = create_frontline_dict(mission)
write_json(frontline_dict, mission.terrain.name.lower())
def write_json(frontline_dict: Dict[str, Dict], terrain_name: str) -> None:
with open(SAVE_PATH.joinpath(terrain_name + ".json"), "w") as file:
json.dump(frontline_dict, file)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
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])
print("Done")

View File

@@ -13,7 +13,10 @@ def load_templates():
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:
static_name = str(static.name).split()[0]
tpl_name, tpl_idx = static_name[:-1], int(static_name[-1])
@@ -34,13 +37,19 @@ def load_templates():
a = aa
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:
tpls[category_name][idx].append({
"type": static.type,
"offset": Point(center.x - static.position.x, center.y - static.position.y),
"heading": static.heading,
})
tpls[category_name][idx].append(
{
"type": static.type,
"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}]}
return tpls

View File

@@ -11,7 +11,8 @@ from game.theater.landmap import Landmap
@singledispatch
def to_multipoly(obj) -> MultiPolygon:
raise NotImplementedError(
f"to_multipoly not implemented for {obj.__class__.__name__}")
f"to_multipoly not implemented for {obj.__class__.__name__}"
)
@to_multipoly.register
@@ -28,8 +29,7 @@ def _multipoly_to_multipoly(obj: MultiPolygon) -> MultiPolygon:
def _geometry_collection_to_multipoly(obj: GeometryCollection) -> MultiPolygon:
if obj.is_empty:
return MultiPolygon()
raise RuntimeError(
f"Not sure how to convert collection to multipoly: {obj.wkt}")
raise RuntimeError(f"Not sure how to convert collection to multipoly: {obj.wkt}")
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:
print(len(inclusion_zones), len(exclusion_zones), len(seas_zones))
pickle.dump(Landmap(to_multipoly(unary_union(inclusion_zones)),
to_multipoly(unary_union(exclusion_zones)),
to_multipoly(unary_union(seas_zones))), f)
pickle.dump(
Landmap(
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):
lua = lupa.LuaRuntime()
lua.execute(textwrap.dedent("""\
lua.execute(
textwrap.dedent(
"""\
function module(name)
end
"""))
"""
)
)
bind_gettext = lua.eval(textwrap.dedent("""\
bind_gettext = lua.eval(
textwrap.dedent(
"""\
function(py_gettext)
package.preload["i_18n"] = function()
return {
@@ -85,16 +91,20 @@ def beacons_from_terrain(dcs_path: Path, path: Path) -> Iterable[Beacon]:
end
end
"""))
"""
)
)
try:
translator = gettext.translation(
"messages", path / "l10n", languages=["en"])
"messages", path / "l10n", languages=["en"]
)
def translate(message_name: str) -> str:
if not message_name:
return message_name
return translator.gettext(message_name)
except FileNotFoundError:
# TheChannel has no locale data for English.
def translate(message_name: str) -> str:
@@ -126,7 +136,7 @@ def beacons_from_terrain(dcs_path: Path, path: Path) -> Iterable[Beacon]:
beacon["callsign"],
beacon_type,
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:
terrain_py_path = self.export_dir / f"{terrain.lower()}.json"
import json
terrain_py_path.write_text(json.dumps([
dataclasses.asdict(b) for b in beacons
], indent=True))
terrain_py_path.write_text(
json.dumps([dataclasses.asdict(b) for b in beacons], indent=True)
)
def parse_args() -> argparse.Namespace:
@@ -169,13 +180,14 @@ def parse_args() -> argparse.Namespace:
"--export-to",
type=resolved_path,
default=EXPORT_DIR,
help="Output directory for generated JSON files.")
help="Output directory for generated JSON files.",
)
parser.add_argument(
"dcs_path",
metavar="DCS_PATH",
type=resolved_path,
help="Path to DCS installation."
help="Path to DCS installation.",
)
return parser.parse_args()

View File

@@ -36,7 +36,13 @@ def _zip_dir(archieve, path):
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):
print("version already exists")
return
@@ -46,9 +52,9 @@ def _mk_archieve():
except FileNotFoundError:
pass
os.system("pyinstaller.exe --clean pyinstaller.spec")
#archieve = ZipFile(path, "w")
#archieve.writestr("dcs_liberation.bat", "cd dist\\dcs_liberation\r\nliberation_main \"%UserProfile%\\Saved Games\" \"{}\"".format(VERSION))
#_zip_dir(archieve, "./dist/dcs_liberation")
# archieve = ZipFile(path, "w")
# archieve.writestr("dcs_liberation.bat", "cd dist\\dcs_liberation\r\nliberation_main \"%UserProfile%\\Saved Games\" \"{}\"".format(VERSION))
# _zip_dir(archieve, "./dist/dcs_liberation")
_mk_archieve()

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB