mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Compare commits
26 Commits
4.1.0
...
develop-3.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e6866ac245 | ||
|
|
aeb043e863 | ||
|
|
e33a4ec0c3 | ||
|
|
6b310a10de | ||
|
|
9433138c20 | ||
|
|
a3d61ea286 | ||
|
|
3a11068259 | ||
|
|
f5d4c04b75 | ||
|
|
04fa65107e | ||
|
|
abc0c19bd1 | ||
|
|
0d31de344d | ||
|
|
28c0ae7802 | ||
|
|
c0bef399ad | ||
|
|
21681a8240 | ||
|
|
bc0ac0cbfc | ||
|
|
7f508f0b2c | ||
|
|
ef9e957ef2 | ||
|
|
7d08e1ee2c | ||
|
|
97ac6a0612 | ||
|
|
83c311c853 | ||
|
|
df97110546 | ||
|
|
f570cfc12e | ||
|
|
70b4f75f25 | ||
|
|
1ac95438ce | ||
|
|
73ca6606e1 | ||
|
|
7a04cf5905 |
10
changelog.md
10
changelog.md
@@ -1,3 +1,13 @@
|
|||||||
|
# 3.1.0
|
||||||
|
|
||||||
|
## Features/Improvements
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
* **[Campaign AI]** Fix procurement for factions that lack some unit types.
|
||||||
|
* **[Mission Generation]** Fixed problem with mission load when control point name contained an apostrophe.
|
||||||
|
* **[UI]** Made non-interactive map elements less obstructive.
|
||||||
|
|
||||||
# 3.0.0
|
# 3.0.0
|
||||||
|
|
||||||
Saves from 2.5 are not compatible with 3.0.
|
Saves from 2.5 are not compatible with 3.0.
|
||||||
|
|||||||
@@ -593,8 +593,7 @@ class Operation:
|
|||||||
zone = data["zone"]
|
zone = data["zone"]
|
||||||
laserCode = data["laserCode"]
|
laserCode = data["laserCode"]
|
||||||
dcsUnit = data["dcsUnit"]
|
dcsUnit = data["dcsUnit"]
|
||||||
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', zone='{zone}', laserCode='{laserCode}', dcsUnit='{dcsUnit}' }}, \n"
|
lua += f" {{dcsGroupName='{dcsGroupName}', callsign='{callsign}', zone={repr(zone)}, laserCode='{laserCode}', dcsUnit='{dcsUnit}' }}, \n"
|
||||||
# lua += f" {{name='{dcsGroupName}', description='JTAC {callsign} ', information='Laser:{laserCode}', jtac={laserCode} }}, \n"
|
|
||||||
lua += "}"
|
lua += "}"
|
||||||
|
|
||||||
# Process the Target Points
|
# Process the Target Points
|
||||||
|
|||||||
@@ -59,6 +59,18 @@ class ProcurementAi:
|
|||||||
def calculate_ground_unit_budget_share(self) -> float:
|
def calculate_ground_unit_budget_share(self) -> float:
|
||||||
armor_investment = 0
|
armor_investment = 0
|
||||||
aircraft_investment = 0
|
aircraft_investment = 0
|
||||||
|
|
||||||
|
# faction has no ground units
|
||||||
|
if (
|
||||||
|
len(self.faction.artillery_units) == 0
|
||||||
|
and len(self.faction.frontline_units) == 0
|
||||||
|
):
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# faction has no planes
|
||||||
|
if len(self.faction.aircrafts) == 0:
|
||||||
|
return 1
|
||||||
|
|
||||||
for cp in self.owned_points:
|
for cp in self.owned_points:
|
||||||
cp_ground_units = cp.allocated_ground_units(self.game.transfers)
|
cp_ground_units = cp.allocated_ground_units(self.game.transfers)
|
||||||
armor_investment += cp_ground_units.total_value
|
armor_investment += cp_ground_units.total_value
|
||||||
@@ -140,6 +152,11 @@ class ProcurementAi:
|
|||||||
self.faction.artillery_units
|
self.faction.artillery_units
|
||||||
)
|
)
|
||||||
of_class = set(unit_class.unit_list) & faction_units
|
of_class = set(unit_class.unit_list) & faction_units
|
||||||
|
|
||||||
|
# faction has no access to needed unit type, take a random unit
|
||||||
|
if not of_class:
|
||||||
|
of_class = faction_units
|
||||||
|
|
||||||
affordable_units = [u for u in of_class if db.PRICES[u] <= budget]
|
affordable_units = [u for u in of_class if db.PRICES[u] <= budget]
|
||||||
if not affordable_units:
|
if not affordable_units:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ class Pilot:
|
|||||||
@dataclass
|
@dataclass
|
||||||
class Squadron:
|
class Squadron:
|
||||||
name: str
|
name: str
|
||||||
nickname: str
|
nickname: Optional[str]
|
||||||
country: str
|
country: str
|
||||||
role: str
|
role: str
|
||||||
aircraft: Type[FlyingType]
|
aircraft: Type[FlyingType]
|
||||||
@@ -99,6 +99,8 @@ class Squadron:
|
|||||||
self.auto_assignable_mission_types = set(self.mission_types)
|
self.auto_assignable_mission_types = set(self.mission_types)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
|
if self.nickname is None:
|
||||||
|
return self.name
|
||||||
return f'{self.name} "{self.nickname}"'
|
return f'{self.name} "{self.nickname}"'
|
||||||
|
|
||||||
def claim_available_pilot(self) -> Optional[Pilot]:
|
def claim_available_pilot(self) -> Optional[Pilot]:
|
||||||
@@ -215,7 +217,7 @@ class Squadron:
|
|||||||
|
|
||||||
return Squadron(
|
return Squadron(
|
||||||
name=data["name"],
|
name=data["name"],
|
||||||
nickname=data["nickname"],
|
nickname=data.get("nickname"),
|
||||||
country=data["country"],
|
country=data["country"],
|
||||||
role=data["role"],
|
role=data["role"],
|
||||||
aircraft=unit_type,
|
aircraft=unit_type,
|
||||||
|
|||||||
@@ -597,7 +597,8 @@ class EwrGroundObject(TheaterGroundObject):
|
|||||||
@property
|
@property
|
||||||
def group_name(self) -> str:
|
def group_name(self) -> str:
|
||||||
# Prefix the group names with the side color so Skynet can find them.
|
# Prefix the group names with the side color so Skynet can find them.
|
||||||
return f"{self.faction_color}|{super().group_name}"
|
# Use Group Id and uppercase EWR
|
||||||
|
return f"{self.faction_color}|EWR|{self.group_id}"
|
||||||
|
|
||||||
def mission_types(self, for_player: bool) -> Iterator[FlightType]:
|
def mission_types(self, for_player: bool) -> Iterator[FlightType]:
|
||||||
from gen.flights.flight import FlightType
|
from gen.flights.flight import FlightType
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
|
|
||||||
def _build_version_string() -> str:
|
def _build_version_string() -> str:
|
||||||
components = ["3.0"]
|
components = ["3.1.0"]
|
||||||
build_number_path = Path("resources/buildnumber")
|
build_number_path = Path("resources/buildnumber")
|
||||||
if build_number_path.exists():
|
if build_number_path.exists():
|
||||||
with build_number_path.open("r") as build_number_file:
|
with build_number_path.open("r") as build_number_file:
|
||||||
|
|||||||
@@ -42,14 +42,14 @@ class SquadronDelegate(TwoColumnRowDelegate):
|
|||||||
|
|
||||||
def text_for(self, index: QModelIndex, row: int, column: int) -> str:
|
def text_for(self, index: QModelIndex, row: int, column: int) -> str:
|
||||||
if (row, column) == (0, 0):
|
if (row, column) == (0, 0):
|
||||||
return self.air_wing_model.data(index, Qt.DisplayRole)
|
return self.squadron(index).name
|
||||||
elif (row, column) == (0, 1):
|
elif (row, column) == (0, 1):
|
||||||
squadron = self.air_wing_model.data(index, AirWingModel.SquadronRole)
|
squadron = self.air_wing_model.data(index, AirWingModel.SquadronRole)
|
||||||
return db.unit_get_expanded_info(
|
return db.unit_get_expanded_info(
|
||||||
squadron.country, squadron.aircraft, "name"
|
squadron.country, squadron.aircraft, "name"
|
||||||
)
|
)
|
||||||
elif (row, column) == (1, 0):
|
elif (row, column) == (1, 0):
|
||||||
return self.squadron(index).nickname
|
return self.squadron(index).nickname or ""
|
||||||
elif (row, column) == (1, 1):
|
elif (row, column) == (1, 1):
|
||||||
squadron = self.squadron(index)
|
squadron = self.squadron(index)
|
||||||
alive = squadron.number_of_living_pilots
|
alive = squadron.number_of_living_pilots
|
||||||
|
|||||||
Binary file not shown.
11
resources/campaigns/syria_full_map.json
Normal file
11
resources/campaigns/syria_full_map.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "Syria - Full Map",
|
||||||
|
"theater": "Syria",
|
||||||
|
"authors": "Plob",
|
||||||
|
"recommended_player_faction": "Bluefor Modern",
|
||||||
|
"recommended_enemy_faction": "Syria 2011",
|
||||||
|
"description": "<p>Syria Full map, designed for groups of 4-12 players.</p>",
|
||||||
|
"miz": "syria_full_map.miz",
|
||||||
|
"performance": 3,
|
||||||
|
"version": "6.0"
|
||||||
|
}
|
||||||
BIN
resources/campaigns/syria_full_map.miz
Normal file
BIN
resources/campaigns/syria_full_map.miz
Normal file
Binary file not shown.
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Syria - Full Map",
|
|
||||||
"theater": "Syria",
|
|
||||||
"authors": "Hawkmoon",
|
|
||||||
"description": "<p>Full map of Syria</p><p><strong>Note : </strong></p><p>For a better early game experience, it is suggested to give the AI an high amount of starting money.</p>",
|
|
||||||
"miz": "syria_full_map_remastered.miz",
|
|
||||||
"performance": 3
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -139,6 +139,20 @@
|
|||||||
"hertz": 117700000,
|
"hertz": 117700000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "MUT",
|
||||||
|
"callsign": "MUT",
|
||||||
|
"beacon_type": 4,
|
||||||
|
"hertz": 112300000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DHEKELIA",
|
||||||
|
"callsign": "DKA",
|
||||||
|
"beacon_type": 10,
|
||||||
|
"hertz": 343000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "",
|
"name": "",
|
||||||
"callsign": "IADA",
|
"callsign": "IADA",
|
||||||
@@ -157,7 +171,7 @@
|
|||||||
"name": "ADANA",
|
"name": "ADANA",
|
||||||
"callsign": "ADN",
|
"callsign": "ADN",
|
||||||
"beacon_type": 11,
|
"beacon_type": 11,
|
||||||
"hertz": 395000000,
|
"hertz": 395000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -167,6 +181,41 @@
|
|||||||
"hertz": 112700000,
|
"hertz": 112700000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IAK",
|
||||||
|
"beacon_type": 14,
|
||||||
|
"hertz": 109700000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IAK",
|
||||||
|
"beacon_type": 15,
|
||||||
|
"hertz": 109700000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Akrotiri",
|
||||||
|
"callsign": "AKR",
|
||||||
|
"beacon_type": 6,
|
||||||
|
"hertz": 116000000,
|
||||||
|
"channel": 107
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Akrotiri",
|
||||||
|
"callsign": "AKR",
|
||||||
|
"beacon_type": 3,
|
||||||
|
"hertz": 116000000,
|
||||||
|
"channel": 107
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AKROTIRI",
|
||||||
|
"callsign": "AK",
|
||||||
|
"beacon_type": 10,
|
||||||
|
"hertz": 365000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "KALDE",
|
"name": "KALDE",
|
||||||
"callsign": "KAD",
|
"callsign": "KAD",
|
||||||
@@ -220,7 +269,7 @@
|
|||||||
"name": "BEIRUT",
|
"name": "BEIRUT",
|
||||||
"callsign": "BOD",
|
"callsign": "BOD",
|
||||||
"beacon_type": 11,
|
"beacon_type": 11,
|
||||||
"hertz": 351000000,
|
"hertz": 351000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -255,14 +304,14 @@
|
|||||||
"name": "DAMASCUS",
|
"name": "DAMASCUS",
|
||||||
"callsign": "DAL",
|
"callsign": "DAL",
|
||||||
"beacon_type": 11,
|
"beacon_type": 11,
|
||||||
"hertz": 342000000,
|
"hertz": 342000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ABYAD",
|
"name": "ABYAD",
|
||||||
"callsign": "ABD",
|
"callsign": "ABD",
|
||||||
"beacon_type": 10,
|
"beacon_type": 10,
|
||||||
"hertz": 264000,
|
"hertz": 264,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -272,6 +321,69 @@
|
|||||||
"hertz": 111100000,
|
"hertz": 111100000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "ERCAN",
|
||||||
|
"callsign": "ECN",
|
||||||
|
"beacon_type": 4,
|
||||||
|
"hertz": 117000000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IGNP",
|
||||||
|
"beacon_type": 14,
|
||||||
|
"hertz": 109100000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IGNP",
|
||||||
|
"beacon_type": 15,
|
||||||
|
"hertz": 109100000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IGZP",
|
||||||
|
"beacon_type": 14,
|
||||||
|
"hertz": 108500000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IGZP",
|
||||||
|
"beacon_type": 15,
|
||||||
|
"hertz": 108500000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ALANYA/GAZIPASA",
|
||||||
|
"callsign": "GZP",
|
||||||
|
"beacon_type": 4,
|
||||||
|
"hertz": 114200000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GAZIPASA/ALANYA",
|
||||||
|
"callsign": "GZP",
|
||||||
|
"beacon_type": 10,
|
||||||
|
"hertz": 316000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "FAMAGUSTA_GECITKALE",
|
||||||
|
"callsign": "GKE",
|
||||||
|
"beacon_type": 4,
|
||||||
|
"hertz": 114300000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GECITKALE",
|
||||||
|
"callsign": "GKE",
|
||||||
|
"beacon_type": 10,
|
||||||
|
"hertz": 435000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "HATAY",
|
"name": "HATAY",
|
||||||
"callsign": "HTY",
|
"callsign": "HTY",
|
||||||
@@ -317,8 +429,8 @@
|
|||||||
{
|
{
|
||||||
"name": "INCIRLIC",
|
"name": "INCIRLIC",
|
||||||
"callsign": "DAN",
|
"callsign": "DAN",
|
||||||
"beacon_type": 6,
|
"beacon_type": 5,
|
||||||
"hertz": 108400000,
|
"hertz": null,
|
||||||
"channel": 21
|
"channel": 21
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -349,6 +461,34 @@
|
|||||||
"hertz": 111700000,
|
"hertz": 111700000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "ILC",
|
||||||
|
"beacon_type": 14,
|
||||||
|
"hertz": 110300000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Larnaca",
|
||||||
|
"callsign": "LCA",
|
||||||
|
"beacon_type": 4,
|
||||||
|
"hertz": 112800000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "ILC",
|
||||||
|
"beacon_type": 15,
|
||||||
|
"hertz": 110300000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Larnaca",
|
||||||
|
"callsign": "LCA",
|
||||||
|
"beacon_type": 9,
|
||||||
|
"hertz": 432000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "",
|
"name": "",
|
||||||
"callsign": "IBA",
|
"callsign": "IBA",
|
||||||
@@ -373,8 +513,8 @@
|
|||||||
{
|
{
|
||||||
"name": "LATAKIA",
|
"name": "LATAKIA",
|
||||||
"callsign": "LTK",
|
"callsign": "LTK",
|
||||||
"beacon_type": 11,
|
"beacon_type": 9,
|
||||||
"hertz": 414000000,
|
"hertz": 414000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -391,6 +531,41 @@
|
|||||||
"hertz": 337000,
|
"hertz": 337000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Pafos",
|
||||||
|
"callsign": "PHA",
|
||||||
|
"beacon_type": 10,
|
||||||
|
"hertz": 328000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IPA",
|
||||||
|
"beacon_type": 15,
|
||||||
|
"hertz": 108900000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "IPA",
|
||||||
|
"beacon_type": 14,
|
||||||
|
"hertz": 108900000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pafos",
|
||||||
|
"callsign": "IPA",
|
||||||
|
"beacon_type": 3,
|
||||||
|
"hertz": 108900000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pafos",
|
||||||
|
"callsign": "PHA",
|
||||||
|
"beacon_type": 4,
|
||||||
|
"hertz": 117900000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "RAMATDAVID",
|
"name": "RAMATDAVID",
|
||||||
"callsign": "RMD",
|
"callsign": "RMD",
|
||||||
@@ -398,6 +573,27 @@
|
|||||||
"hertz": 368000,
|
"hertz": 368000,
|
||||||
"channel": null
|
"channel": null
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "RAMATDAVID",
|
||||||
|
"callsign": "RMD",
|
||||||
|
"beacon_type": 6,
|
||||||
|
"hertz": 113700000,
|
||||||
|
"channel": 84
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "RMD",
|
||||||
|
"beacon_type": 14,
|
||||||
|
"hertz": 111100000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"callsign": "RMD",
|
||||||
|
"beacon_type": 15,
|
||||||
|
"hertz": 111100000,
|
||||||
|
"channel": null
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Cheka",
|
"name": "Cheka",
|
||||||
"callsign": "CAK",
|
"callsign": "CAK",
|
||||||
|
|||||||
@@ -5,12 +5,16 @@
|
|||||||
"description": "<p>Hellenic army in the mid/late 2000s.</p>",
|
"description": "<p>Hellenic army in the mid/late 2000s.</p>",
|
||||||
"locales": ["el_GR"],
|
"locales": ["el_GR"],
|
||||||
"aircrafts": [
|
"aircrafts": [
|
||||||
|
"AH_64A",
|
||||||
|
"C_130",
|
||||||
"F_16C_50",
|
"F_16C_50",
|
||||||
"F_4E",
|
"F_4E",
|
||||||
"M_2000C",
|
"M_2000C",
|
||||||
"Mirage_2000_5",
|
"Mirage_2000_5",
|
||||||
"UH_1H",
|
"UH_1H"
|
||||||
"AH_64A"
|
],
|
||||||
|
"awacs": [
|
||||||
|
"E_3A"
|
||||||
],
|
],
|
||||||
"tankers": [
|
"tankers": [
|
||||||
"KC130"
|
"KC130"
|
||||||
@@ -38,13 +42,13 @@
|
|||||||
],
|
],
|
||||||
"air_defenses": [
|
"air_defenses": [
|
||||||
"HawkGenerator",
|
"HawkGenerator",
|
||||||
|
"PatriotGenerator",
|
||||||
"SA8Generator",
|
"SA8Generator",
|
||||||
"SA10Generator",
|
"SA10Generator",
|
||||||
"SA15Generator",
|
"SA15Generator",
|
||||||
"ZU23Generator"
|
"ZU23Generator"
|
||||||
],
|
],
|
||||||
"ewrs": [
|
"ewrs": [
|
||||||
"HawkEwrGenerator",
|
|
||||||
"FlatFaceGenerator"
|
"FlatFaceGenerator"
|
||||||
],
|
],
|
||||||
"navy_generators": [
|
"navy_generators": [
|
||||||
|
|||||||
@@ -5,17 +5,20 @@
|
|||||||
"description": "<p>Turkish army in the mid/late 2000s.</p>",
|
"description": "<p>Turkish army in the mid/late 2000s.</p>",
|
||||||
"locales": ["tr_TR"],
|
"locales": ["tr_TR"],
|
||||||
"aircrafts": [
|
"aircrafts": [
|
||||||
|
"AH_1W",
|
||||||
|
"C_130",
|
||||||
|
"CH_47D",
|
||||||
"F_16C_50",
|
"F_16C_50",
|
||||||
"F_4E",
|
"F_4E",
|
||||||
|
"OH_58D",
|
||||||
"UH_1H",
|
"UH_1H",
|
||||||
"AH_1W"
|
"UH_60A"
|
||||||
],
|
],
|
||||||
"awacs": [
|
"awacs": [
|
||||||
"E_3A"
|
"E_3A"
|
||||||
],
|
],
|
||||||
"tankers": [
|
"tankers": [
|
||||||
"KC_135",
|
"KC_135"
|
||||||
"KC130"
|
|
||||||
],
|
],
|
||||||
"frontline_units": [
|
"frontline_units": [
|
||||||
"MBT_Leopard_2A4_Trs",
|
"MBT_Leopard_2A4_Trs",
|
||||||
@@ -23,9 +26,12 @@
|
|||||||
"MBT_M60A3_Patton",
|
"MBT_M60A3_Patton",
|
||||||
"Scout_Cobra",
|
"Scout_Cobra",
|
||||||
"APC_BTR_80",
|
"APC_BTR_80",
|
||||||
|
"APC_M113",
|
||||||
"SAM_Avenger__Stinger"
|
"SAM_Avenger__Stinger"
|
||||||
],
|
],
|
||||||
"artillery_units": [
|
"artillery_units": [
|
||||||
|
"MLRS_M270_227mm",
|
||||||
|
"SPH_M109_Paladin_155mm",
|
||||||
"SPH_T155_Firtina_155mm"
|
"SPH_T155_Firtina_155mm"
|
||||||
],
|
],
|
||||||
"logistics_units": [
|
"logistics_units": [
|
||||||
|
|||||||
21
resources/squadrons/viper/191-Filo.yaml
Normal file
21
resources/squadrons/viper/191-Filo.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 191. Filo
|
||||||
|
nickname: Kobra
|
||||||
|
country: Turkey
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: THK_191_Filo
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 335 Tiger Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 335 Tiger Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 335 Squadron
|
||||||
|
nickname: Tiger
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_335_Tiger
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 336 Olympus Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 336 Olympus Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 336 Squadron
|
||||||
|
nickname: Olympus
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_336_Olympus
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 337 Ghost Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 337 Ghost Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 337 Squadron
|
||||||
|
nickname: Ghost
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_337_Ghost
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 340 Fox Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 340 Fox Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 340 Squadron
|
||||||
|
nickname: Fox
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_340_Fox
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 341 Arrow Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 341 Arrow Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 341 Squadron
|
||||||
|
nickname: Arrow
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_341_Arrow
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 343 Star Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 343 Star Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 343 Squadron
|
||||||
|
nickname: Star
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_343_Star
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 346 Jason Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 346 Jason Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 346 Squadron
|
||||||
|
nickname: Jason
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_346_Jason
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF 347 Perseus Squadron.yaml
Normal file
21
resources/squadrons/viper/HAF 347 Perseus Squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 347 Squadron
|
||||||
|
nickname: Perseus
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_347_Perseus
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
21
resources/squadrons/viper/HAF_330_Thunder_squadron.yaml
Normal file
21
resources/squadrons/viper/HAF_330_Thunder_squadron.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: 330 Squadron
|
||||||
|
nickname: Thunder
|
||||||
|
country: Greece
|
||||||
|
role: Multirole Fighter
|
||||||
|
aircraft: F-16C_50
|
||||||
|
livery: HAF_ 330_Thunder
|
||||||
|
mission_types:
|
||||||
|
- BAI
|
||||||
|
- BARCAP
|
||||||
|
- CAS
|
||||||
|
- DEAD
|
||||||
|
- Escort
|
||||||
|
- Intercept
|
||||||
|
- OCA/Aircraft
|
||||||
|
- OCA/Runway
|
||||||
|
- SEAD
|
||||||
|
- SEAD Escort
|
||||||
|
- Strike
|
||||||
|
- Fighter sweep
|
||||||
|
- TARCAP
|
||||||
@@ -428,6 +428,7 @@ class ControlPoint {
|
|||||||
return L.polyline([this.cp.position, destination], {
|
return L.polyline([this.cp.position, destination], {
|
||||||
color: Colors.Green,
|
color: Colors.Green,
|
||||||
weight: 1,
|
weight: 1,
|
||||||
|
interactive: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,6 +520,7 @@ class TheaterGroundObject {
|
|||||||
color: detectionColor,
|
color: detectionColor,
|
||||||
fill: false,
|
fill: false,
|
||||||
weight: 1,
|
weight: 1,
|
||||||
|
interactive: false,
|
||||||
}).addTo(detectionLayer);
|
}).addTo(detectionLayer);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -528,6 +530,7 @@ class TheaterGroundObject {
|
|||||||
color: threatColor,
|
color: threatColor,
|
||||||
fill: false,
|
fill: false,
|
||||||
weight: 2,
|
weight: 2,
|
||||||
|
interactive: false,
|
||||||
}).addTo(threatLayer);
|
}).addTo(threatLayer);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -737,12 +740,15 @@ class Flight {
|
|||||||
const color = this.flight.blue ? Colors.Blue : Colors.Red;
|
const color = this.flight.blue ? Colors.Blue : Colors.Red;
|
||||||
const layer = this.flightPlanLayer();
|
const layer = this.flightPlanLayer();
|
||||||
if (this.flight.selected) {
|
if (this.flight.selected) {
|
||||||
this.path = L.polyline(path, { color: Colors.Highlight })
|
this.path = L.polyline(path, {
|
||||||
|
color: Colors.Highlight,
|
||||||
|
interactive: false,
|
||||||
|
})
|
||||||
.addTo(selectedFlightPlansLayer)
|
.addTo(selectedFlightPlansLayer)
|
||||||
.addTo(layer)
|
.addTo(layer)
|
||||||
.addTo(allFlightPlansLayer);
|
.addTo(allFlightPlansLayer);
|
||||||
} else {
|
} else {
|
||||||
this.path = L.polyline(path, { color: color })
|
this.path = L.polyline(path, { color: color, interactive: false })
|
||||||
.addTo(layer)
|
.addTo(layer)
|
||||||
.addTo(allFlightPlansLayer);
|
.addTo(allFlightPlansLayer);
|
||||||
}
|
}
|
||||||
@@ -760,6 +766,7 @@ class Flight {
|
|||||||
this.commitBoundary = L.polyline(this.flight.commitBoundary, {
|
this.commitBoundary = L.polyline(this.flight.commitBoundary, {
|
||||||
color: Colors.Highlight,
|
color: Colors.Highlight,
|
||||||
weight: 1,
|
weight: 1,
|
||||||
|
interactive: false,
|
||||||
})
|
})
|
||||||
.addTo(selectedFlightPlansLayer)
|
.addTo(selectedFlightPlansLayer)
|
||||||
.addTo(this.flightPlanLayer())
|
.addTo(this.flightPlanLayer())
|
||||||
@@ -819,6 +826,7 @@ function _drawThreatZones(zones, layer, player) {
|
|||||||
fill: true,
|
fill: true,
|
||||||
fillOpacity: 0.4,
|
fillOpacity: 0.4,
|
||||||
noClip: true,
|
noClip: true,
|
||||||
|
interactive: false,
|
||||||
}).addTo(layer);
|
}).addTo(layer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -874,6 +882,7 @@ function drawNavmesh(zones, layer) {
|
|||||||
color: "#000000",
|
color: "#000000",
|
||||||
weight: 1,
|
weight: 1,
|
||||||
fill: false,
|
fill: false,
|
||||||
|
interactive: false,
|
||||||
}).addTo(layer);
|
}).addTo(layer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -896,6 +905,7 @@ function drawMapZones() {
|
|||||||
color: "#344455",
|
color: "#344455",
|
||||||
fillColor: "#344455",
|
fillColor: "#344455",
|
||||||
fillOpacity: 1,
|
fillOpacity: 1,
|
||||||
|
interactive: false,
|
||||||
}).addTo(seaZones);
|
}).addTo(seaZones);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -904,6 +914,7 @@ function drawMapZones() {
|
|||||||
color: "#969696",
|
color: "#969696",
|
||||||
fillColor: "#4b4b4b",
|
fillColor: "#4b4b4b",
|
||||||
fillOpacity: 1,
|
fillOpacity: 1,
|
||||||
|
interactive: false,
|
||||||
}).addTo(inclusionZones);
|
}).addTo(inclusionZones);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -912,6 +923,7 @@ function drawMapZones() {
|
|||||||
color: "#969696",
|
color: "#969696",
|
||||||
fillColor: "#303030",
|
fillColor: "#303030",
|
||||||
fillOpacity: 1,
|
fillOpacity: 1,
|
||||||
|
interactive: false,
|
||||||
}).addTo(exclusionZones);
|
}).addTo(exclusionZones);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -923,7 +935,8 @@ function drawUnculledZones() {
|
|||||||
L.circle(zone.position, {
|
L.circle(zone.position, {
|
||||||
radius: zone.radius,
|
radius: zone.radius,
|
||||||
color: "#b4ff8c",
|
color: "#b4ff8c",
|
||||||
stroke: false,
|
fill: false,
|
||||||
|
interactive: false,
|
||||||
}).addTo(unculledZones);
|
}).addTo(unculledZones);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user