Merge branch 'develop' into dependabot/npm_and_yarn/client/multi-7d5e57b41f

This commit is contained in:
zhexu14 2025-03-16 15:07:37 +11:00 committed by GitHub
commit 6acd35d58e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
45 changed files with 263 additions and 36 deletions

View File

@ -31,7 +31,7 @@ body:
If the bug was found in a development build, select "Development build"
and provide a link to the build in the field below.
options:
- 11.1.1
- 14.0.0
- Development build
- type: textarea
attributes:

View File

@ -39,7 +39,7 @@ body:
If the bug was found in a development build, select "Development build"
and provide a link to the build in the field below.
options:
- 11.1.1
- 14.0.0
- Development build
- type: textarea
attributes:

View File

@ -33,7 +33,7 @@ jobs:
with:
release: true
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: dcs_liberation
path: dist/

View File

@ -1,3 +1,32 @@
# 14.0.0
Saves from 13.x are not compatible with 14.0.0.
## Features/Improvements
* **[Engine]** Support for DCS 2.9.13.6818.
## Fixes
* **[UI]** Air Wing and Transfers buttons disabled when no game is loaded as pressing them without a game loaded resulted in a crash.
# 13.0.0
Saves from 12.x are not compatible with 13.0.0.
## Features/Improvements
* **[Engine]** Support for DCS 2.9.12.5536.
* **[Data]** Support for CH-47 Chinook.
## Fixes
* **[Data]** Added/updated CBU weapons data.
* **[Data]** Added Strike mission type for KA-50 (all playable variants).
* **[Mission Generation]** Fixed crash when using factions that have Eastern callsign conventions.
* **[Mission Generation]** Fixed issues when spawning on carriers and FARPs in multiplayer sessions.
# 12.0.0
Saves from 11.x are not compatible with 12.0.0.

View File

@ -18,7 +18,7 @@
"@types/react": "^18.0.21",
"@types/react-dom": "^18.0.6",
"@types/react-redux": "^7.1.24",
"axios": "^1.7.4",
"axios": "^1.8.3",
"electron-window-state": "^5.0.3",
"esri-leaflet": "^3.0.8",
"leaflet": "^1.9.2",
@ -6186,9 +6186,10 @@
}
},
"node_modules/axios": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
"integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",
"integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
@ -25956,9 +25957,9 @@
"dev": true
},
"axios": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
"integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",
"integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==",
"requires": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",

View File

@ -15,7 +15,7 @@
"@types/react": "^18.0.21",
"@types/react-dom": "^18.0.6",
"@types/react-redux": "^7.1.24",
"axios": "^1.7.4",
"axios": "^1.8.3",
"electron-window-state": "^5.0.3",
"esri-leaflet": "^3.0.8",
"leaflet": "^1.9.2",

View File

@ -7,9 +7,9 @@
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = "DCS Liberation"
copyright = "2024, DCS Liberation Team"
copyright = "2025, DCS Liberation Team"
author = "DCS Liberation Team"
release = "12.0.0"
release = "14.0.0"
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration

View File

@ -230,13 +230,18 @@ class EasternFlightCallsignGenerator:
class FlightCallsignGenerator:
def __init__(self, country: str):
self._use_western_callsigns = countries_by_name[country]().use_western_callsigns
self._generators: dict[
bool, WesternFlightCallsignGenerator | EasternFlightCallsignGenerator
] = {
True: WesternFlightCallsignGenerator(country),
False: EasternFlightCallsignGenerator(),
}
self._use_western_callsigns = countries_by_name[country]().use_western_callsigns
] = {}
if self._use_western_callsigns:
self._generators[self._use_western_callsigns] = (
WesternFlightCallsignGenerator(country)
)
else:
self._generators[self._use_western_callsigns] = (
EasternFlightCallsignGenerator()
)
def reset(self) -> None:
self._generators[self._use_western_callsigns].reset()

View File

@ -117,8 +117,6 @@ class Cap:
@dataclass(frozen=True)
class Tactics:
#: Aircraft use countermeasures (chaff, flares)
use_countermeasures: bool
#: Air-to-air missile attack range options
air_to_air_missile_attack_range: Optional[OptAAMissileAttackRange.Values]
@ -129,7 +127,6 @@ class Tactics:
@staticmethod
def from_dict(data: dict[str, Any]) -> Tactics:
return Tactics(
use_countermeasures=data.get("use_countermeasures", True),
air_to_air_missile_attack_range=None,
air_defence_evades_anti_radiation_missiles=data.get(
"air_defence_evades_anti_radiation_missiles", False

View File

@ -123,6 +123,9 @@ class Faction:
#: weapons groups to their introduction years.
weapons_introduction_year_overrides: Dict[str, int] = field(default_factory=dict)
#: Set to True if the faction has access to countermeasures (chaff and flares).
countermeasures_available: bool = True
def has_access_to_dcs_type(self, unit_type: Type[DcsUnitType]) -> bool:
# Vehicle and Ship Units
if any(unit_type == u.dcs_unit_type for u in self.accessible_units):
@ -271,6 +274,8 @@ class Faction:
"weapons_introduction_year_overrides", {}
)
faction.countermeasures_available = json.get("countermeasures_available", True)
return faction
@property

View File

@ -1,7 +1,7 @@
from pathlib import Path
MAJOR_VERSION = 12
MAJOR_VERSION = 14
MINOR_VERSION = 0
MICRO_VERSION = 0
VERSION_NUMBER = ".".join(str(v) for v in (MAJOR_VERSION, MINOR_VERSION, MICRO_VERSION))

View File

@ -242,6 +242,8 @@ class QLiberationWindow(QMainWindow):
self.openSettingsAction.setVisible(enabled)
self.openStatsAction.setVisible(enabled)
self.openNotesAction.setVisible(enabled)
self.openAirWingAction.setVisible(enabled)
self.openTransfersAction.setVisible(enabled)
# Also Disable SaveAction to prevent Keyboard Shortcut
self.saveGameAction.setEnabled(enabled)

View File

@ -12,7 +12,7 @@ coverage==7.3.2
distlib==0.3.7
exceptiongroup==1.2.0
Faker==20.1.0
fastapi==0.109.1
fastapi==0.115.8
filelock==3.13.1
future==0.18.3
h11==0.14.0
@ -20,7 +20,7 @@ httptools==0.6.1
identify==2.5.32
idna==3.7
iniconfig==2.0.0
Jinja2==3.1.4
Jinja2==3.1.6
MarkupSafe==2.1.3
mypy==1.7.1
mypy-extensions==1.0.0
@ -36,7 +36,7 @@ pre-commit==3.5.0
pydantic==2.5.2
pydantic-settings==2.1.0
pydantic_core==2.14.5
pydcs @ git+https://github.com/dcs-liberation/dcs@2eddd456dd23effc9f8c254b967b82a8e8c3c790
pydcs @ git+https://github.com/dcs-liberation/dcs@d1c8e9557aa1113908f9705fbe084e7cf08d6000
pyinstaller==5.13.1
pyinstaller-hooks-contrib==2023.6
pyproj==3.6.1
@ -54,7 +54,7 @@ shapely==2.0.2
shiboken6==6.4.1
six==1.16.0
sniffio==1.3.0
starlette==0.35.1
starlette==0.45.3
tabulate==0.9.0
tomli==2.0.1
types-Jinja2==2.11.9
@ -64,6 +64,6 @@ types-PyYAML==6.0.12.12
types-tabulate==0.9.0.3
typing_extensions==4.8.0
uvicorn==0.24.0.post1
virtualenv==20.24.7
virtualenv==20.26.6
watchfiles==0.21.0
websockets==12.0

View File

@ -0,0 +1,25 @@
local unitPayloads = {
["name"] = "CH-47Fbl1",
["payloads"] = {
[1] = {
["name"] = "Liberation Air Assault",
["pylons"] = {
[1] = {
["CLSID"] = "{CH47_STBD_M60D}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{CH47_PORT_M60D}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 35,
},
},
},
["tasks"] = {
},
["unitType"] = "CH-47Fbl1",
}
return unitPayloads

View File

@ -97,7 +97,32 @@ local unitPayloads = {
},
},
["tasks"] = {
[1] = 31,
[1] = 29,
},
},
[5] = {
["displayName"] = "Liberation Strike",
["name"] = "Liberation Strike",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
},

View File

@ -129,7 +129,32 @@ local unitPayloads = {
},
},
["tasks"] = {
[1] = 31,
[1] = 29,
},
},
[5] = {
["displayName"] = "Liberation Strike",
["name"] = "Liberation Strike",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
},

View File

@ -32,6 +32,5 @@ helicopter:
rendezvous_altitude_ft_agl: 1500
air_assault_nav_altitude_ft_agl: 1500
tactics:
use_countermeasures: true
air_defence_evades_anti_radiation_missiles: false
air_to_air_missile_attack_range: ~

View File

@ -32,6 +32,5 @@ helicopter:
rendezvous_altitude_ft_agl: 1500
air_assault_nav_altitude_ft_agl: 1500
tactics:
use_countermeasures: true
air_defence_evades_anti_radiation_missiles: false
air_to_air_missile_attack_range: ~

View File

@ -31,6 +31,5 @@ helicopter:
rendezvous_altitude_ft_agl: 1500
air_assault_nav_altitude_ft_agl: 1500
tactics:
use_countermeasures: true
air_defence_evades_anti_radiation_missiles: false
air_to_air_missile_attack_range: ~

View File

@ -30,6 +30,7 @@ aircrafts:
- SA 342M Gazelle
- SA 342M Gazelle Mistral
- Tornado IDS
- Tornado GR4
- UH-1H Iroquois
awacs:
- E-2C Hawkeye

View File

@ -19,6 +19,7 @@ aircrafts:
- C-130J-30 Super Hercules
- C-17A
- CH-47D
- CH-47F Block I
- CH-53E
- F-117A Nighthawk
- F-14B Tomcat

View File

@ -17,6 +17,7 @@ aircrafts:
- C-130J-30 Super Hercules
- C-17A
- CH-47D
- CH-47F Block I
- CH-53E
- F-117A Nighthawk
- F-14B Tomcat

View File

@ -1,6 +1,7 @@
---
name: Escuadrón Aéreo 412
nickname: Halcones
female_pilot_percentage: 0
country: Peru
role: Fighter
aircraft: Mirage 2000C

View File

@ -13,7 +13,7 @@
</p>
<p>
To avoid delays entirely, use the "Never delay player flights" option in the
To avoid delays entirely, use the "Player flights ignore TOT and spawn immediately" option in the
mission generation settings. Note that this will <strong>not</strong> adjust
the timing of your mission; this option only allows you to wait in the
cockpit.

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,32 @@
class: Helicopter
carrier_capable: true
description: # from https://en.wikipedia.org/wiki/Boeing_CH-47_Chinook
In 2001, the CH-47F, an upgraded CH-47D, made its maiden flight. The first production model rolled out at Boeing's
facility in Ridley Park, Pennsylvania, and first flew on 23 October 2006. Upgrades included 4,868-shaft-horsepower
(3,630 kW) Honeywell engines and airframe with better integrated construction for lower maintenance requirements.
The milled construction reduces vibration, as well as inspection and repair needs, and eliminates flexing points to
increase service life. The CH-47F can fly at speeds of over 175 mph (282 km/h) with a payload of more than
21,000 lb (9,500 kg). New avionics include a Rockwell Collins Common Avionics Architecture System (CAAS) cockpit,
and BAE Systems' Digital Advanced Flight Control System (DAFCS). AgustaWestland assembles the CH-47F under license,
known as the Chinook ICH-47F, for several customers. Boeing delivered 48 CH-47Fs to the U.S. Army through August 2008;
at that time Boeing announced a $4.8 billion (~$6.67 billion in 2023) contract with the Army for 191 Chinooks.
lha_capable: true
introduced: 2006
cabin_size: 24 # It should have 33 but we do not want so much for CTLD to be possible
can_carry_crates: true
manufacturer: Boeing
origin: USA
price: 8
role: Transport
variants:
CH-47F Block I: {}
radios:
intra_flight: AN/ARC-186(V) FM
inter_flight: AN/ARC-186(V) FM
channels:
type: common
intra_flight_radio_index: 1
inter_flight_radio_index: 1
tasks:
Air Assault: 120
Transport: 110

View File

@ -28,5 +28,6 @@ tasks:
BAI: 430
CAS: 430
DEAD: 113
Strike: 200
OCA/Aircraft: 430
hit_points: 15

View File

@ -28,5 +28,6 @@ tasks:
BAI: 440
CAS: 440
DEAD: 114
Strike: 200
OCA/Aircraft: 440
hit_points: 15

View File

@ -0,0 +1,6 @@
name: 2xCBU-52B
year: 1972
fallback: 2xMk 20 Rockeye
clsids:
- "{HB_F4E_CBU-52B_2x}"
- "{HB_F4E_CBU-52B_2x_SWA}"

View File

@ -0,0 +1,6 @@
name: 3xCBU-52B
year: 1972
fallback: 3xMk 20 Rockeye
clsids:
- "{HB_F4E_CBU-52B_MER_3x_Left}"
- "{HB_F4E_CBU-52B_MER_3x_Right}"

View File

@ -0,0 +1,5 @@
name: 6xCBU-52B
year: 1972
fallback: 6xMk 20 Rockeye
clsids:
- "{HB_F4E_CBU-52B_MER_6x}"

View File

@ -0,0 +1,6 @@
name: CBU-52B
year: 1972
fallback: Mk 20 Rockeye
clsids:
- "{CBU-52B}"
- "{HB_CBU-52B_SWA}"

View File

@ -1,6 +1,8 @@
name: 2xCBU-87
year: 1986
fallback: 2xMk 82
fallback: 2xCBU-52B
clsids:
- "{TER_9A_2L*CBU-87}"
- "{TER_9A_2R*CBU-87}"
- "{HB_F4E_CBU-87_2x}"
- "{HB_F4E_CBU-87_2x_SWA}"

View File

@ -1,5 +1,9 @@
name: 3xCBU-87
year: 1986
fallback: 3xMk 82
fallback: 3xCBU-52B
clsids:
- "{TER_9A_3*CBU-87}"
- "{CFT_L_CBU_87_x_3}"
- "{CFT_R_CBU_87_x_3}"
- "{HB_F4E_CBU-87_MER_3x_Left}"
- "{HB_F4E_CBU-87_MER_3x_Right}"

View File

@ -0,0 +1,7 @@
name: 6xCBU-87
year: 1986
fallback: 6xCBU-52B
clsids:
- "{CFT_L_CBU_87_x_6}"
- "{CFT_R_CBU_87_x_6}"
- "{HB_F4E_CBU-87_MER_4x}"

View File

@ -1,5 +1,6 @@
name: CBU-87
year: 1986
fallback: Mk 82
fallback: CBU-52B
clsids:
- "{CBU-87}"
- "{HB_CBU-87_SWA}"

View File

@ -0,0 +1,10 @@
name: 2xMk 20 Rockeye
year: 1968
fallback: 2xMk 82
clsids:
- "{BRU33_2X_ROCKEYE}"
- "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}"
- "{HB_F4E_ROCKEYE_2x}"
- "{BRU-42_2*MK-20_LEFT}"
- "{BRU-42_2*MK-20_RIGHT}"
- "{HB_F4E_ROCKEYE_2x_SWA}"

View File

@ -0,0 +1,8 @@
name: 3xMk 20 Rockeye
year: 1968
fallback: 3xMk 82
clsids:
- "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}"
- "{CFT_L_CBU_100_x_3}"
- "{CFT_R_CBU_100_x_3}"
- "{HB_F4E_ROCKEYE_3x}"

View File

@ -0,0 +1,9 @@
name: 6xMk 20 Rockeye
year: 1968
fallback: 6xMk 82
clsids:
- "{3C7CD675-7D39-41C5-8735-0F4F537818A8}"
- "{CFT_L_CBU_100_x_6}"
- "{CFT_R_CBU_100_x_6}"
- "{HB_F4E_ROCKEYE_6x}"
- "{E79759F7-C622-4AA4-B1EF-37639A34D924}"

View File

@ -0,0 +1,6 @@
name: Mk 20 Rockeye
year: 1968
fallback: Mk 82
clsids:
- "{HB_ROCKEYE_SWA}"
- "{ADD3FAE1-EBF6-4EF9-8EFC-B36B5DDF1E6B}"

View File

@ -16,3 +16,5 @@ clsids:
- "{BRU42_2*MK82 LS}"
- "{BRU3242_2*MK82 LS}"
- "{PHXBRU3242_2*MK82 LS}"
- "{HB_F4E_MK-82_2x_SWA}"
- "{HB_F4E_MK-82_2x}"

View File

@ -2,3 +2,4 @@ name: 3xMk 82
fallback: 2xMk 82
clsids:
- "{60CC734F-0AFA-4E2E-82B8-93B941AB11CF}"
- "{HB_F4E_MK-82_3x}"

View File

@ -0,0 +1,4 @@
name: 6xMk 82
fallback: Mk 82
clsids:
- "{HB_F4E_MK-82_6x}"

View File

@ -9,3 +9,4 @@ clsids:
- "{Mk_82SP}"
- "{Mk_82YT}"
- "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}"
- "{HB_MK-82_SWA}"