Merge remote-tracking branch 'upstream/develop' into develop

This commit is contained in:
David Pierron 2020-10-02 09:25:18 +02:00
commit a38f2e36a2
39 changed files with 338 additions and 54 deletions

39
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,39 @@
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install environment
run: |
py -m venv ./venv
- name: Install dependencies
run: |
./venv/scripts/activate
pip install -r requirements.txt
# For some reason the shiboken2.abi3.dll is not found properly, so I copy it instead
Copy-Item .\venv\Lib\site-packages\shiboken2\shiboken2.abi3.dll .\venv\Lib\site-packages\PySide2\ -Force
- name: Build binaries
run: |
./venv/scripts/activate
$env:PYTHONPATH=".;./pydcs"
pyinstaller pyinstaller.spec
- uses: actions/upload-artifact@v2
with:
name: dcs_liberation
path: dist/

4
.gitmodules vendored
View File

@ -1,4 +1,4 @@
[submodule "pydcs"] [submodule "pydcs"]
path = pydcs path = pydcs
url = https://github.com/khopa/dcs url = https://github.com/pydcs/dcs
branch = dataexport branch = master

View File

@ -1,5 +1,18 @@
# 2.x.x # 2.1.3
* **[Mission Generator]** Use inline loading of the JSON.lua library, and save to either %LIBERATION_EXPORT_DIR%, to %TEMP%, or to DCS working directory
## Features/Improvements :
* **[Units/Factions]** Added A-10C_2 to USA 2005 and Bluefor modern factions
* **[UI]** Limit number of aircraft that can be bought to the number of available parking slots.
* **[Mission Generator]** Use inline loading of the JSON.lua library, and save to either %LIBERATION_EXPORT_DIR%, or to DCS working directory
## Changes :
* **[Units/Factions]** Bluefor generic factions will now use the new "Combined Joint Task Forces Blue" country in the generated mission instead of "USA"
## Fixes :
* **[UI]** Fixed icon for Viggen
* **[UI]** Added icons for some ground units
* **[Misc]** Fixed issue with Chinese characters in pydcs preventing generating the mission. (Take Off button not working) (thanks to spark135246)
* **[Misc]** Fixed an error causing with ATC frequency preventing generating the mission. (Take Off button not working) (thanks to danalbert)
# 2.1.2 # 2.1.2

View File

@ -192,6 +192,7 @@ PRICES = {
A_10A: 16, A_10A: 16,
A_10C: 22, A_10C: 22,
A_10C_2: 24,
# heli # heli
Ka_50: 13, Ka_50: 13,
@ -498,6 +499,7 @@ UNIT_BY_TASK = {
AJS37, AJS37,
A_10A, A_10A,
A_10C, A_10C,
A_10C_2,
Su_17M4, Su_17M4,
Su_25, Su_25,
Su_25T, Su_25T,
@ -957,6 +959,7 @@ PLANE_PAYLOAD_OVERRIDES = {
}, },
A_10A: COMMON_OVERRIDE, A_10A: COMMON_OVERRIDE,
A_10C: COMMON_OVERRIDE, A_10C: COMMON_OVERRIDE,
A_10C_2: COMMON_OVERRIDE,
AV8BNA: COMMON_OVERRIDE, AV8BNA: COMMON_OVERRIDE,
C_101CC: COMMON_OVERRIDE, C_101CC: COMMON_OVERRIDE,
F_5E_3: COMMON_OVERRIDE, F_5E_3: COMMON_OVERRIDE,

View File

@ -4,7 +4,7 @@ from dcs.ships import *
from dcs.vehicles import * from dcs.vehicles import *
BLUEFOR_COLDWAR = { BLUEFOR_COLDWAR = {
"country": "USA", "country": "Combined Joint Task Forces Blue",
"side": "blue", "side": "blue",
"units": [ "units": [

View File

@ -6,7 +6,7 @@ from dcs.vehicles import *
from pydcs_extensions.a4ec.a4ec import A_4E_C from pydcs_extensions.a4ec.a4ec import A_4E_C
BLUEFOR_COLDWAR_A4 = { BLUEFOR_COLDWAR_A4 = {
"country": "USA", "country": "Combined Joint Task Forces Blue",
"side": "blue", "side": "blue",
"units": [ "units": [

View File

@ -4,7 +4,7 @@ from dcs.ships import *
from dcs.vehicles import * from dcs.vehicles import *
BLUEFOR_MODERN = { BLUEFOR_MODERN = {
"country": "USA", "country": "Combined Joint Task Forces Blue",
"side": "blue", "side": "blue",
"units": [ "units": [
@ -20,6 +20,7 @@ BLUEFOR_MODERN = {
Su_25T, Su_25T,
A_10A, A_10A,
A_10C, A_10C,
A_10C_2,
AV8BNA, AV8BNA,
AJS37, AJS37,

View File

@ -13,6 +13,7 @@ USA_2005 = {
FA_18C_hornet, FA_18C_hornet,
F_16C_50, F_16C_50,
A_10C, A_10C,
A_10C_2,
AV8BNA, AV8BNA,
MQ_9_Reaper, MQ_9_Reaper,

View File

@ -236,9 +236,9 @@ class Operation:
# Inject Plugins Lua Scripts # Inject Plugins Lua Scripts
listOfPluginsScripts = [] listOfPluginsScripts = []
try: plugin_file_path = Path("./resources/scripts/plugins/__plugins.lst")
with open("./resources/scripts/plugins/__plugins.lst", "r") as a_file: if plugin_file_path.exists():
for line in a_file: for line in plugin_file_path.read_text().splitlines():
name = line.strip() name = line.strip()
if not name.startswith( '#' ): if not name.startswith( '#' ):
trigger = TriggerStart(comment="Load " + name) trigger = TriggerStart(comment="Load " + name)
@ -246,8 +246,9 @@ class Operation:
fileref = self.current_mission.map_resource.add_resource_file("./resources/scripts/plugins/" + name) fileref = self.current_mission.map_resource.add_resource_file("./resources/scripts/plugins/" + name)
trigger.add_action(DoScriptFile(fileref)) trigger.add_action(DoScriptFile(fileref))
self.current_mission.triggerrules.triggers.append(trigger) self.current_mission.triggerrules.triggers.append(trigger)
except Exception as e: else:
print(e) logging.info(
f"Not loading plugins, {plugin_file_path} does not exist")
# Inject Mist Script if not done already in the plugins # Inject Mist Script if not done already in the plugins
if not "mist.lua" in listOfPluginsScripts and not "mist_4_3_74.lua" in listOfPluginsScripts: # don't load the script twice if not "mist.lua" in listOfPluginsScripts and not "mist_4_3_74.lua" in listOfPluginsScripts: # don't load the script twice
@ -263,6 +264,13 @@ class Operation:
trigger.add_action(DoScriptFile(fileref)) trigger.add_action(DoScriptFile(fileref))
self.current_mission.triggerrules.triggers.append(trigger) self.current_mission.triggerrules.triggers.append(trigger)
# Inject Ciribob's JTACAutoLase if not done already in the plugins
if not "JTACAutoLase.lua" in listOfPluginsScripts : # don't load the script twice
trigger = TriggerStart(comment="Load JTACAutoLase.lua script")
fileref = self.current_mission.map_resource.add_resource_file("./resources/scripts/JTACAutoLase.lua")
trigger.add_action(DoScriptFile(fileref))
self.current_mission.triggerrules.triggers.append(trigger)
# set a LUA table with data from Liberation that we want to set # set a LUA table with data from Liberation that we want to set
# at the moment it contains Liberation's install path, and an overridable definition for the JTACAutoLase function # at the moment it contains Liberation's install path, and an overridable definition for the JTACAutoLase function
# later, we'll add data about the units and points having been generated, in order to facilitate the configuration of the plugin lua scripts # later, we'll add data about the units and points having been generated, in order to facilitate the configuration of the plugin lua scripts
@ -301,13 +309,6 @@ end
trigger.add_action(DoScriptFile(fileref)) trigger.add_action(DoScriptFile(fileref))
self.current_mission.triggerrules.triggers.append(trigger) self.current_mission.triggerrules.triggers.append(trigger)
# Inject Ciribob's JTACAutoLase if not done already in the plugins
if not "JTACAutoLase.lua" in listOfPluginsScripts : # don't load the script twice
trigger = TriggerStart(comment="Load JTACAutoLase.lua script")
fileref = self.current_mission.map_resource.add_resource_file("./resources/scripts/JTACAutoLase.lua")
trigger.add_action(DoScriptFile(fileref))
self.current_mission.triggerrules.triggers.append(trigger)
# add a configuration for JTACAutoLase and start lasing for all JTACs # add a configuration for JTACAutoLase and start lasing for all JTACs
smoke = "true" smoke = "true"
if hasattr(self.game.settings, "jtac_smoke_on"): if hasattr(self.game.settings, "jtac_smoke_on"):
@ -318,6 +319,7 @@ end
-- setting and starting JTACs -- setting and starting JTACs
env.info("DCSLiberation|: setting and starting JTACs") env.info("DCSLiberation|: setting and starting JTACs")
""" """
for jtac in jtacs: for jtac in jtacs:
lua += f"if dcsLiberation.JTACAutoLase then dcsLiberation.JTACAutoLase('{jtac.unit_name}', {jtac.code}, {smoke}, 'vehicle') end\n" lua += f"if dcsLiberation.JTACAutoLase then dcsLiberation.JTACAutoLase('{jtac.unit_name}', {jtac.code}, {smoke}, 'vehicle') end\n"

View File

@ -279,13 +279,15 @@ class CommonRadioChannelAllocator(RadioChannelAllocator):
last_channel = flight.num_radio_channels(radio_id) last_channel = flight.num_radio_channels(radio_id)
channel_alloc = iter(range(first_channel, last_channel + 1)) channel_alloc = iter(range(first_channel, last_channel + 1))
flight.assign_channel(radio_id, next(channel_alloc), flight.departure.atc) if flight.departure.atc is not None:
flight.assign_channel(radio_id, next(channel_alloc),
flight.departure.atc)
# TODO: If there ever are multiple AWACS, limit to mission relevant. # TODO: If there ever are multiple AWACS, limit to mission relevant.
for awacs in air_support.awacs: for awacs in air_support.awacs:
flight.assign_channel(radio_id, next(channel_alloc), awacs.freq) flight.assign_channel(radio_id, next(channel_alloc), awacs.freq)
if flight.arrival != flight.departure: if flight.arrival != flight.departure and flight.arrival.atc is not None:
flight.assign_channel(radio_id, next(channel_alloc), flight.assign_channel(radio_id, next(channel_alloc),
flight.arrival.atc) flight.arrival.atc)
@ -295,7 +297,7 @@ class CommonRadioChannelAllocator(RadioChannelAllocator):
flight.assign_channel( flight.assign_channel(
radio_id, next(channel_alloc), tanker.freq) radio_id, next(channel_alloc), tanker.freq)
if flight.divert is not None: if flight.divert is not None and flight.divert.atc is not None:
flight.assign_channel(radio_id, next(channel_alloc), flight.assign_channel(radio_id, next(channel_alloc),
flight.divert.atc) flight.divert.atc)
except StopIteration: except StopIteration:

View File

@ -99,6 +99,7 @@ CAS_CAPABLE = [
A_10A, A_10A,
A_10C, A_10C,
A_10C_2,
AV8BNA, AV8BNA,
F_86F_Sabre, F_86F_Sabre,
@ -197,6 +198,7 @@ STRIKE_CAPABLE = [
A_10A, A_10A,
A_10C, A_10C,
A_10C_2,
AV8BNA, AV8BNA,
F_86F_Sabre, F_86F_Sabre,
@ -244,6 +246,7 @@ ANTISHIP_CAPABLE = [
F_16A, F_16A,
F_16C_50, F_16C_50,
A_10C, A_10C,
A_10C_2,
A_10A, A_10A,
Tornado_IDS, Tornado_IDS,

2
pydcs

@ -1 +1 @@
Subproject commit 7b7c0322856c43ed8d1c7d29b2e30121129af048 Subproject commit ceea62a8e0731c21b3e1a3e90682aa0affc168f1

View File

@ -8,7 +8,7 @@ from game.event import UnitsDeliveryEvent, FrontlineAttackEvent
from theater.theatergroundobject import CATEGORY_MAP from theater.theatergroundobject import CATEGORY_MAP
from userdata.liberation_theme import get_theme_icons from userdata.liberation_theme import get_theme_icons
VERSION_STRING = "2.1.2" VERSION_STRING = "2.1.3"
URLS : Dict[str, str] = { URLS : Dict[str, str] = {
"Manual": "https://github.com/khopa/dcs_liberation/wiki", "Manual": "https://github.com/khopa/dcs_liberation/wiki",
@ -139,6 +139,7 @@ def load_aircraft_icons():
AIRCRAFT_ICONS[aircraft[:-7]] = QPixmap(os.path.join("./resources/ui/units/aircrafts/", aircraft)) AIRCRAFT_ICONS[aircraft[:-7]] = QPixmap(os.path.join("./resources/ui/units/aircrafts/", aircraft))
AIRCRAFT_ICONS["F-16C_50"] = AIRCRAFT_ICONS["F-16C"] AIRCRAFT_ICONS["F-16C_50"] = AIRCRAFT_ICONS["F-16C"]
AIRCRAFT_ICONS["FA-18C_hornet"] = AIRCRAFT_ICONS["FA-18C"] AIRCRAFT_ICONS["FA-18C_hornet"] = AIRCRAFT_ICONS["FA-18C"]
AIRCRAFT_ICONS["A-10C_2"] = AIRCRAFT_ICONS["A-10C"]
def load_vehicle_icons(): def load_vehicle_icons():

View File

@ -0,0 +1,219 @@
local unitPayloads = {
["name"] = "A-10C II",
["payloads"] = {
[1] = {
["name"] = "New Payload",
["pylons"] = {
[1] = {
["CLSID"] = "{LAU-131x3 - 7 AGR-20A}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{LAU-131x3 - 7 AGR-20 M282}",
["num"] = 9,
},
[3] = {
["CLSID"] = "{LAU-131x3 - 7 AGR-20A}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{LAU-131x3 - 7 AGR-20 M282}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{LAU-131 - 7 AGR-20A}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{LAU-131 - 7 AGR-20A}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 31,
},
},
[2] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
[2] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
},
},
[3] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "ALQ_184",
["num"] = 1,
},
[2] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
[3] = {
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
["num"] = 10,
},
[4] = {
["CLSID"] = "{LAU-131 - 7 AGR-20 M282}",
["num"] = 8,
},
[5] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98453}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98452}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{LAU-131 - 7 AGR-20 M282}",
["num"] = 4,
},
[8] = {
["CLSID"] = "{LAU-131 - 7 AGR-20A}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
},
},
[4] = {
["name"] = "STRIKE",
["pylons"] = {
[1] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
[2] = {
["CLSID"] = "ALQ_184",
["num"] = 1,
},
[3] = {
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
["num"] = 10,
},
[4] = {
["CLSID"] = "{GBU-38}",
["num"] = 8,
},
[5] = {
["CLSID"] = "{GBU-38}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{GBU-38}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 3,
},
[8] = {
["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B66}",
["num"] = 9,
},
[9] = {
["CLSID"] = "{GBU-38}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 31,
},
},
[5] = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
[2] = {
["CLSID"] = "ALQ_184",
["num"] = 1,
},
[3] = {
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
["num"] = 10,
},
[4] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 9,
},
[5] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 3,
},
[6] = {
["CLSID"] = "{LAU-131 - 7 AGR-20 M282}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 31,
},
},
[6] = {
["name"] = "SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{DB434044-F5D0-4F1F-9BA9-B73027E18DD3}",
["num"] = 11,
},
[2] = {
["CLSID"] = "ALQ_184",
["num"] = 1,
},
[3] = {
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
["num"] = 10,
},
[4] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 9,
},
[5] = {
["CLSID"] = "{DAC53A2F-79CA-42FF-A77A-F5649B601308}",
["num"] = 3,
},
[6] = {
["CLSID"] = "{LAU-131 - 7 AGR-20 M282}",
["num"] = 2,
},
[7] = {
["CLSID"] = "{GBU-38}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{GBU-38}",
["num"] = 5,
},
[9] = {
["CLSID"] = "{GBU-38}",
["num"] = 8,
},
[10] = {
["CLSID"] = "{GBU-38}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
},
},
},
["unitType"] = "A-10C_2",
}
return unitPayloads

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB