mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Compare commits
17 Commits
develop-10
...
8.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4da4956df8 | ||
|
|
618159c1fa | ||
|
|
d8c662e7f8 | ||
|
|
12c41b57c9 | ||
|
|
85a27845bc | ||
|
|
e3f6347e16 | ||
|
|
fffe1b6e94 | ||
|
|
5a7a730e23 | ||
|
|
576f777320 | ||
|
|
87f7fe5307 | ||
|
|
e1434378a8 | ||
|
|
e03b0d99d8 | ||
|
|
e4eb3dec1b | ||
|
|
b365016496 | ||
|
|
c359b3f7fc | ||
|
|
302613069e | ||
|
|
5a22b62e3b |
14
changelog.md
14
changelog.md
@@ -1,3 +1,17 @@
|
|||||||
|
# 8.1.0
|
||||||
|
|
||||||
|
Saves from 8.0.0 are compatible with 8.1.0
|
||||||
|
|
||||||
|
## Features/Improvements
|
||||||
|
|
||||||
|
* **[Engine]** Support for DCS 2.8.6.41363, including F-15E support.
|
||||||
|
* **[UI]** Flight loadout/properties tab is now scrollable.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
* **[Campaign]** Fixed liveries for premade squadrons all being off-by-one.
|
||||||
|
* **[UI]** Fixed numbering of waypoints in the map and flight dialog (first waypoint is now 0 rather than 1).
|
||||||
|
|
||||||
# 8.0.0
|
# 8.0.0
|
||||||
|
|
||||||
Saves from 7.x are not compatible with 8.0.
|
Saves from 7.x are not compatible with 8.0.
|
||||||
|
|||||||
16
client/src/components/splitlines/SplitLines.test.tsx
Normal file
16
client/src/components/splitlines/SplitLines.test.tsx
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import SplitLines from "./SplitLines";
|
||||||
|
import { screen } from "@testing-library/dom";
|
||||||
|
import { render } from "@testing-library/react";
|
||||||
|
|
||||||
|
describe("SplitLines", () => {
|
||||||
|
it("joins items with line break tags", () => {
|
||||||
|
render(
|
||||||
|
<div data-testid={"container"}>
|
||||||
|
<SplitLines items={["foo", "bar", "baz"]} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
const container = screen.getByTestId("container");
|
||||||
|
expect(container).toContainHTML("foo<br />bar<br />baz<br />");
|
||||||
|
});
|
||||||
|
});
|
||||||
159
client/src/components/supplyroute/SupplyRoute.test.tsx
Normal file
159
client/src/components/supplyroute/SupplyRoute.test.tsx
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
import { renderWithProviders } from "../../testutils";
|
||||||
|
import SupplyRoute, { RouteColor } from "./SupplyRoute";
|
||||||
|
import { screen } from "@testing-library/react";
|
||||||
|
import { PropsWithChildren } from "react";
|
||||||
|
|
||||||
|
const mockPolyline = jest.fn();
|
||||||
|
jest.mock("react-leaflet", () => ({
|
||||||
|
Polyline: (props: PropsWithChildren<any>) => {
|
||||||
|
mockPolyline(props);
|
||||||
|
return <>{props.children}</>;
|
||||||
|
},
|
||||||
|
Tooltip: (props: PropsWithChildren<any>) => {
|
||||||
|
return <p data-testid="tooltip">{props.children}</p>;
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe("SupplyRoute", () => {
|
||||||
|
it("is red when inactive and owned by opfor", () => {
|
||||||
|
renderWithProviders(
|
||||||
|
<SupplyRoute
|
||||||
|
route={{
|
||||||
|
id: "",
|
||||||
|
points: [],
|
||||||
|
front_active: false,
|
||||||
|
is_sea: false,
|
||||||
|
blue: false,
|
||||||
|
active_transports: [],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
expect(mockPolyline).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
color: RouteColor.Red,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("is blue when inactive and owned by bluefor", () => {
|
||||||
|
renderWithProviders(
|
||||||
|
<SupplyRoute
|
||||||
|
route={{
|
||||||
|
id: "",
|
||||||
|
points: [],
|
||||||
|
front_active: false,
|
||||||
|
is_sea: false,
|
||||||
|
blue: true,
|
||||||
|
active_transports: [],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
expect(mockPolyline).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
color: RouteColor.Blue,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("is orange when contested", () => {
|
||||||
|
renderWithProviders(
|
||||||
|
<SupplyRoute
|
||||||
|
route={{
|
||||||
|
id: "",
|
||||||
|
points: [],
|
||||||
|
front_active: true,
|
||||||
|
is_sea: false,
|
||||||
|
blue: false,
|
||||||
|
active_transports: [],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
expect(mockPolyline).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
color: RouteColor.Contested,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("is highlighted when the route has active transports", () => {
|
||||||
|
renderWithProviders(
|
||||||
|
<SupplyRoute
|
||||||
|
route={{
|
||||||
|
id: "",
|
||||||
|
points: [],
|
||||||
|
front_active: false,
|
||||||
|
is_sea: false,
|
||||||
|
blue: false,
|
||||||
|
active_transports: ["foo"],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
expect(mockPolyline).toHaveBeenCalledTimes(2);
|
||||||
|
expect(mockPolyline).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
color: RouteColor.Highlight,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("is drawn in the right place", () => {
|
||||||
|
const points = [
|
||||||
|
{ lat: 0, lng: 0 },
|
||||||
|
{ lat: 1, lng: 1 },
|
||||||
|
];
|
||||||
|
renderWithProviders(
|
||||||
|
<SupplyRoute
|
||||||
|
route={{
|
||||||
|
id: "",
|
||||||
|
points: points,
|
||||||
|
front_active: false,
|
||||||
|
is_sea: false,
|
||||||
|
blue: false,
|
||||||
|
active_transports: ["foo"],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
expect(mockPolyline).toHaveBeenCalledTimes(2);
|
||||||
|
expect(mockPolyline).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
positions: points,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("has a tooltip describing an inactive supply route", () => {
|
||||||
|
renderWithProviders(
|
||||||
|
<SupplyRoute
|
||||||
|
route={{
|
||||||
|
id: "",
|
||||||
|
points: [],
|
||||||
|
front_active: false,
|
||||||
|
is_sea: false,
|
||||||
|
blue: false,
|
||||||
|
active_transports: [],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
const tooltip = screen.getByTestId("tooltip");
|
||||||
|
expect(tooltip).toHaveTextContent("This supply route is inactive.");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("has a tooltip describing active supply routes", () => {
|
||||||
|
renderWithProviders(
|
||||||
|
<SupplyRoute
|
||||||
|
route={{
|
||||||
|
id: "",
|
||||||
|
points: [],
|
||||||
|
front_active: false,
|
||||||
|
is_sea: false,
|
||||||
|
blue: false,
|
||||||
|
active_transports: ["foo", "bar"],
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
const tooltip = screen.getByTestId("tooltip");
|
||||||
|
expect(tooltip).toContainHTML("foo<br />bar");
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -4,6 +4,13 @@ import { Polyline as LPolyline } from "leaflet";
|
|||||||
import { useEffect, useRef } from "react";
|
import { useEffect, useRef } from "react";
|
||||||
import { Polyline, Tooltip } from "react-leaflet";
|
import { Polyline, Tooltip } from "react-leaflet";
|
||||||
|
|
||||||
|
export enum RouteColor {
|
||||||
|
Blue = "#2d3e50",
|
||||||
|
Contested = "#c85050",
|
||||||
|
Highlight = "#ffffff",
|
||||||
|
Red = "#8c1414",
|
||||||
|
}
|
||||||
|
|
||||||
interface SupplyRouteProps {
|
interface SupplyRouteProps {
|
||||||
route: SupplyRouteModel;
|
route: SupplyRouteModel;
|
||||||
}
|
}
|
||||||
@@ -26,18 +33,22 @@ function ActiveSupplyRouteHighlight(props: SupplyRouteProps) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Polyline positions={props.route.points} color={"#ffffff"} weight={2} />
|
<Polyline
|
||||||
|
positions={props.route.points}
|
||||||
|
color={RouteColor.Highlight}
|
||||||
|
weight={2}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function colorFor(route: SupplyRouteModel) {
|
function colorFor(route: SupplyRouteModel) {
|
||||||
if (route.front_active) {
|
if (route.front_active) {
|
||||||
return "#c85050";
|
return RouteColor.Contested;
|
||||||
}
|
}
|
||||||
if (route.blue) {
|
if (route.blue) {
|
||||||
return "#2d3e50";
|
return RouteColor.Blue;
|
||||||
}
|
}
|
||||||
return "#8c1414";
|
return RouteColor.Red;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function SupplyRoute(props: SupplyRouteProps) {
|
export default function SupplyRoute(props: SupplyRouteProps) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
project = "DCS Liberation"
|
project = "DCS Liberation"
|
||||||
copyright = "2023, DCS Liberation Team"
|
copyright = "2023, DCS Liberation Team"
|
||||||
author = "DCS Liberation Team"
|
author = "DCS Liberation Team"
|
||||||
release = "8.0.0"
|
release = "8.1.0"
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
# -- General configuration ---------------------------------------------------
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||||
|
|||||||
@@ -6,30 +6,16 @@ from starlette.responses import Response
|
|||||||
|
|
||||||
from game import Game
|
from game import Game
|
||||||
from game.ato import Flight
|
from game.ato import Flight
|
||||||
from game.ato.flightwaypoint import FlightWaypoint
|
|
||||||
from game.ato.flightwaypointtype import FlightWaypointType
|
|
||||||
from game.server import GameContext
|
from game.server import GameContext
|
||||||
from game.server.leaflet import LeafletPoint
|
from game.server.leaflet import LeafletPoint
|
||||||
from game.server.waypoints.models import FlightWaypointJs
|
from game.server.waypoints.models import FlightWaypointJs
|
||||||
from game.sim import GameUpdateEvents
|
from game.sim import GameUpdateEvents
|
||||||
from game.utils import meters
|
|
||||||
|
|
||||||
router: APIRouter = APIRouter(prefix="/waypoints")
|
router: APIRouter = APIRouter(prefix="/waypoints")
|
||||||
|
|
||||||
|
|
||||||
def waypoints_for_flight(flight: Flight) -> list[FlightWaypointJs]:
|
def waypoints_for_flight(flight: Flight) -> list[FlightWaypointJs]:
|
||||||
departure = FlightWaypointJs.for_waypoint(
|
return [
|
||||||
FlightWaypoint(
|
|
||||||
"TAKEOFF",
|
|
||||||
FlightWaypointType.TAKEOFF,
|
|
||||||
flight.departure.position,
|
|
||||||
meters(0),
|
|
||||||
"RADIO",
|
|
||||||
),
|
|
||||||
flight,
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
return [departure] + [
|
|
||||||
FlightWaypointJs.for_waypoint(w, flight, i)
|
FlightWaypointJs.for_waypoint(w, flight, i)
|
||||||
for i, w in enumerate(flight.flight_plan.waypoints, 1)
|
for i, w in enumerate(flight.flight_plan.waypoints, 1)
|
||||||
]
|
]
|
||||||
@@ -64,7 +50,7 @@ def set_position(
|
|||||||
if waypoint_idx == 0:
|
if waypoint_idx == 0:
|
||||||
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
waypoint = flight.flight_plan.waypoints[waypoint_idx - 1]
|
waypoint = flight.flight_plan.waypoints[waypoint_idx]
|
||||||
waypoint.position = Point.from_latlng(
|
waypoint.position = Point.from_latlng(
|
||||||
LatLng(position.lat, position.lng), game.theater.terrain
|
LatLng(position.lat, position.lng), game.theater.terrain
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
|
|
||||||
MAJOR_VERSION = 8
|
MAJOR_VERSION = 8
|
||||||
MINOR_VERSION = 0
|
MINOR_VERSION = 1
|
||||||
MICRO_VERSION = 0
|
MICRO_VERSION = 0
|
||||||
VERSION_NUMBER = ".".join(str(v) for v in (MAJOR_VERSION, MINOR_VERSION, MICRO_VERSION))
|
VERSION_NUMBER = ".".join(str(v) for v in (MAJOR_VERSION, MINOR_VERSION, MICRO_VERSION))
|
||||||
|
|
||||||
|
|||||||
@@ -202,6 +202,7 @@ def load_aircraft_icons():
|
|||||||
AIRCRAFT_ICONS[f1] = AIRCRAFT_ICONS["Mirage-F1C-200"]
|
AIRCRAFT_ICONS[f1] = AIRCRAFT_ICONS["Mirage-F1C-200"]
|
||||||
AIRCRAFT_ICONS["Mirage-F1M-CE"] = AIRCRAFT_ICONS["Mirage-F1CE"]
|
AIRCRAFT_ICONS["Mirage-F1M-CE"] = AIRCRAFT_ICONS["Mirage-F1CE"]
|
||||||
AIRCRAFT_ICONS["MB-339A"] = AIRCRAFT_ICONS["MB-339A PAN"]
|
AIRCRAFT_ICONS["MB-339A"] = AIRCRAFT_ICONS["MB-339A PAN"]
|
||||||
|
AIRCRAFT_ICONS["F-15ESE"] = AIRCRAFT_ICONS["F-15E"]
|
||||||
|
|
||||||
|
|
||||||
def load_vehicle_icons():
|
def load_vehicle_icons():
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ class LiverySelector(QComboBox):
|
|||||||
for idx, livery in enumerate(
|
for idx, livery in enumerate(
|
||||||
squadron.aircraft.dcs_unit_type.iter_liveries_for_country(
|
squadron.aircraft.dcs_unit_type.iter_liveries_for_country(
|
||||||
dcs.countries.get_by_name(squadron.country)
|
dcs.countries.get_by_name(squadron.country)
|
||||||
)
|
),
|
||||||
|
1, # First entry is "Default".
|
||||||
):
|
):
|
||||||
self.addItem(livery.name, livery)
|
self.addItem(livery.name, livery)
|
||||||
if squadron.livery == livery.id:
|
if squadron.livery == livery.id:
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ def aircraft_banner_for(unit_type: AircraftType) -> Path:
|
|||||||
name = "Mirage-F1C-200"
|
name = "Mirage-F1C-200"
|
||||||
elif unit_type.dcs_id in {"Mirage-F1CE", "Mirage-F1M-CE"}:
|
elif unit_type.dcs_id in {"Mirage-F1CE", "Mirage-F1M-CE"}:
|
||||||
name = "Mirage-F1C"
|
name = "Mirage-F1C"
|
||||||
|
elif unit_type.dcs_id == "F-15ESE":
|
||||||
|
name = "F-15E"
|
||||||
else:
|
else:
|
||||||
name = unit_type.dcs_id
|
name = unit_type.dcs_id
|
||||||
return AIRCRAFT_BANNERS_BASE / f"{name}.jpg"
|
return AIRCRAFT_BANNERS_BASE / f"{name}.jpg"
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ from PySide6.QtWidgets import (
|
|||||||
QFrame,
|
QFrame,
|
||||||
QLabel,
|
QLabel,
|
||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
|
QScrollArea,
|
||||||
|
QWidget,
|
||||||
)
|
)
|
||||||
|
|
||||||
from game import Game
|
from game import Game
|
||||||
@@ -35,6 +37,16 @@ class QFlightPayloadTab(QFrame):
|
|||||||
|
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
|
|
||||||
|
scroll_content = QWidget()
|
||||||
|
scrolling_layout = QVBoxLayout()
|
||||||
|
scroll_content.setLayout(scrolling_layout)
|
||||||
|
|
||||||
|
scroll = QScrollArea()
|
||||||
|
scroll.setWidgetResizable(True)
|
||||||
|
scroll.setWidget(scroll_content)
|
||||||
|
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
|
layout.addWidget(scroll)
|
||||||
|
|
||||||
# Docs Link
|
# Docs Link
|
||||||
docsText = QLabel(
|
docsText = QLabel(
|
||||||
'<a href="https://github.com/dcs-liberation/dcs_liberation/wiki/Custom-Loadouts"><span style="color:#FFFFFF;">How to create your own default loadout</span></a>'
|
'<a href="https://github.com/dcs-liberation/dcs_liberation/wiki/Custom-Loadouts"><span style="color:#FFFFFF;">How to create your own default loadout</span></a>'
|
||||||
@@ -42,12 +54,12 @@ class QFlightPayloadTab(QFrame):
|
|||||||
docsText.setAlignment(Qt.AlignCenter)
|
docsText.setAlignment(Qt.AlignCenter)
|
||||||
docsText.setOpenExternalLinks(True)
|
docsText.setOpenExternalLinks(True)
|
||||||
|
|
||||||
layout.addLayout(PropertyEditor(self.flight))
|
scrolling_layout.addLayout(PropertyEditor(self.flight))
|
||||||
self.loadout_selector = DcsLoadoutSelector(flight)
|
self.loadout_selector = DcsLoadoutSelector(flight)
|
||||||
self.loadout_selector.currentIndexChanged.connect(self.on_new_loadout)
|
self.loadout_selector.currentIndexChanged.connect(self.on_new_loadout)
|
||||||
layout.addWidget(self.loadout_selector)
|
scrolling_layout.addWidget(self.loadout_selector)
|
||||||
layout.addWidget(self.payload_editor)
|
scrolling_layout.addWidget(self.payload_editor)
|
||||||
layout.addWidget(docsText)
|
scrolling_layout.addWidget(docsText)
|
||||||
|
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,23 @@ class QFlightWaypointList(QTableView):
|
|||||||
self.model.setHorizontalHeaderLabels(HEADER_LABELS)
|
self.model.setHorizontalHeaderLabels(HEADER_LABELS)
|
||||||
|
|
||||||
waypoints = self.flight.flight_plan.waypoints
|
waypoints = self.flight.flight_plan.waypoints
|
||||||
for row, waypoint in enumerate(waypoints):
|
# Why [1:]? Qt starts indexing at 1 rather than 0, whereas DCS numbers
|
||||||
|
# waypoints starting with 0, and for whatever reason Qt crashes whenever I
|
||||||
|
# set the vertical labels manually.
|
||||||
|
#
|
||||||
|
# Starting with the second waypoint is a bit of a hack, but it's also the
|
||||||
|
# historical behavior anyway. This view used to have waypoints starting at 1
|
||||||
|
# and just didn't show the departure waypoint because the departure waypoint
|
||||||
|
# wasn't actually part of the flight plan tracked by Liberation. That
|
||||||
|
# changed at some point, so now we need to skip it manually to preserve that
|
||||||
|
# behavior.
|
||||||
|
#
|
||||||
|
# It really ought to show the departure waypoint and start indexing at 0,
|
||||||
|
# but since this all pending a move to React anyway, it's not worth fighting
|
||||||
|
# the Qt crashes for now.
|
||||||
|
#
|
||||||
|
# https://github.com/dcs-liberation/dcs_liberation/issues/3037
|
||||||
|
for row, waypoint in enumerate(waypoints[1:]):
|
||||||
self._add_waypoint_row(row, self.flight, waypoint)
|
self._add_waypoint_row(row, self.flight, waypoint)
|
||||||
self.selectionModel().setCurrentIndex(
|
self.selectionModel().setCurrentIndex(
|
||||||
self.model.index(current_index, 0), QItemSelectionModel.Select
|
self.model.index(current_index, 0), QItemSelectionModel.Select
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ platformdirs==2.6.2
|
|||||||
pluggy==1.0.0
|
pluggy==1.0.0
|
||||||
pre-commit==2.21.0
|
pre-commit==2.21.0
|
||||||
pydantic==1.10.7
|
pydantic==1.10.7
|
||||||
git+https://github.com/pydcs/dcs@60f5121d89f23a062a0494803f8105361cdf36e8#egg=pydcs
|
git+https://github.com/pydcs/dcs@e006f0df6db933fa34b2d5cb04db41653537503e#egg=pydcs
|
||||||
pyinstaller==5.12.0
|
pyinstaller==5.12.0
|
||||||
pyinstaller-hooks-contrib==2022.14
|
pyinstaller-hooks-contrib==2022.14
|
||||||
pyproj==3.4.1
|
pyproj==3.4.1
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ squadrons:
|
|||||||
secondary: any
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
size: 20
|
size: 24
|
||||||
- primary: TARCAP
|
- primary: TARCAP
|
||||||
secondary: any
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- F-15C Eagle
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
size: 20
|
size: 20
|
||||||
- primary: Strike
|
- primary: Strike
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
@@ -41,7 +41,7 @@ squadrons:
|
|||||||
secondary: any
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- Mirage 2000C
|
- Mirage 2000C
|
||||||
size: 16
|
size: 12
|
||||||
# Kedem
|
# Kedem
|
||||||
12:
|
12:
|
||||||
- primary: Transport
|
- primary: Transport
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ version: "10.9"
|
|||||||
squadrons:
|
squadrons:
|
||||||
# Tonopah Airport
|
# Tonopah Airport
|
||||||
17:
|
17:
|
||||||
- primary: BARCAP
|
- primary: TARCAP
|
||||||
secondary: air-to-air
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- F-15C Eagle
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
size: 12
|
size: 12
|
||||||
- primary: Strike
|
- primary: Strike
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ squadrons:
|
|||||||
#San Julian
|
#San Julian
|
||||||
11:
|
11:
|
||||||
- primary: BAI
|
- primary: BAI
|
||||||
secondary: air-to-ground
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
size: 8
|
size: 8
|
||||||
- primary: Air Assault
|
- primary: Air Assault
|
||||||
secondary: any
|
secondary: any
|
||||||
|
|||||||
@@ -43,10 +43,10 @@ squadrons:
|
|||||||
aircraft:
|
aircraft:
|
||||||
- AV-8B Harrier II Night Attack
|
- AV-8B Harrier II Night Attack
|
||||||
size: 8
|
size: 8
|
||||||
- primary: BARCAP
|
- primary: TARCAP
|
||||||
secondary: air-to-air
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- F-15C Eagle
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
size: 12
|
size: 12
|
||||||
- primary: CAS
|
- primary: CAS
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
|
|||||||
@@ -66,6 +66,11 @@ squadrons:
|
|||||||
aircraft:
|
aircraft:
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
size: 16
|
size: 16
|
||||||
|
- primary: BAI
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
|
size: 12
|
||||||
- primary: BAI
|
- primary: BAI
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
aircraft:
|
aircraft:
|
||||||
|
|||||||
560
resources/customized_payloads/F-15ESE.lua
Normal file
560
resources/customized_payloads/F-15ESE.lua
Normal file
@@ -0,0 +1,560 @@
|
|||||||
|
local unitPayloads = {
|
||||||
|
["name"] = "F-15ESE",
|
||||||
|
["payloads"] = {
|
||||||
|
[1] = {
|
||||||
|
["displayName"] = "Liberation Strike",
|
||||||
|
["name"] = "Liberation Strike",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{CFT_R_MK84LD_x_2}",
|
||||||
|
["num"] = 12,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
|
||||||
|
["num"] = 8,
|
||||||
|
["settings"] = {
|
||||||
|
["GUI_fuze_type"] = 1,
|
||||||
|
["arm_delay_ctrl_FMU139CB_LD"] = 1,
|
||||||
|
["function_delay_ctrl_FMU139CB_LD"] = 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{CFT_L_MK84LD_x_2}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 14,
|
||||||
|
},
|
||||||
|
[11] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["name"] = "Liberation BAI",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 8,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{CFT_L_CBU_97_x_6}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{CFT_R_CBU_97_x_6}",
|
||||||
|
["num"] = 12,
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["name"] = "Liberation BARCAP",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 14,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 11,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 10,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 8,
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 5,
|
||||||
|
},
|
||||||
|
[11] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[12] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
[13] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["displayName"] = "Liberation Escort",
|
||||||
|
["name"] = "Liberation Escort",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 14,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 11,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 10,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 8,
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 5,
|
||||||
|
},
|
||||||
|
[11] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[12] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
[13] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["displayName"] = "Liberation OCA/Runway",
|
||||||
|
["name"] = "Liberation OCA/Runway",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{CFT_R_MK84LD_x_2}",
|
||||||
|
["num"] = 12,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
|
||||||
|
["num"] = 8,
|
||||||
|
["settings"] = {
|
||||||
|
["GUI_fuze_type"] = 1,
|
||||||
|
["arm_delay_ctrl_FMU139CB_LD"] = 1,
|
||||||
|
["function_delay_ctrl_FMU139CB_LD"] = 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{CFT_L_MK84LD_x_2}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 14,
|
||||||
|
},
|
||||||
|
[11] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["displayName"] = "Liberation OCA/Aircraft",
|
||||||
|
["name"] = "Liberation OCA/Aircraft",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{CFT_R_MK82LD_x_6}",
|
||||||
|
["num"] = 12,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||||
|
["num"] = 8,
|
||||||
|
["settings"] = {
|
||||||
|
["GUI_fuze_type"] = 1,
|
||||||
|
["arm_delay_ctrl_FMU139CB_LD"] = 1,
|
||||||
|
["function_delay_ctrl_FMU139CB_LD"] = 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{CFT_L_MK82LD_x_6}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 14,
|
||||||
|
},
|
||||||
|
[11] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["displayName"] = "Liberation Fighter Sweep",
|
||||||
|
["name"] = "Liberation Fighter Sweep",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 14,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 11,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 10,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 8,
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 5,
|
||||||
|
},
|
||||||
|
[11] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[12] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
[13] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["displayName"] = "Liberation DEAD",
|
||||||
|
["name"] = "Liberation DEAD",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 8,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{CFT_L_CBU_97_x_6}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{CFT_R_CBU_97_x_6}",
|
||||||
|
["num"] = 12,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["displayName"] = "Liberation TARCAP",
|
||||||
|
["name"] = "Liberation TARCAP",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 14,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 11,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 10,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 8,
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 5,
|
||||||
|
},
|
||||||
|
[11] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[12] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
[13] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[10] = {
|
||||||
|
["displayName"] = "Liberation CAS",
|
||||||
|
["name"] = "Liberation CAS",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 15,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 13,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{CFT_R_CBU_97_x_6}",
|
||||||
|
["num"] = 12,
|
||||||
|
},
|
||||||
|
[6] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-13_LANTIRN}",
|
||||||
|
["num"] = 9,
|
||||||
|
},
|
||||||
|
[7] = {
|
||||||
|
["CLSID"] = "{F15E_EXTTANK}",
|
||||||
|
["num"] = 8,
|
||||||
|
},
|
||||||
|
[8] = {
|
||||||
|
["CLSID"] = "{F-15E_AAQ-14_LANTIRN}",
|
||||||
|
["num"] = 7,
|
||||||
|
},
|
||||||
|
[9] = {
|
||||||
|
["CLSID"] = "{CFT_L_CBU_97_x_6}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 32,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
},
|
||||||
|
["unitType"] = "F-15ESE",
|
||||||
|
}
|
||||||
|
return unitPayloads
|
||||||
@@ -3,8 +3,8 @@ country: Combined Joint Task Forces Blue
|
|||||||
name: NATO Desert Storm
|
name: NATO Desert Storm
|
||||||
authors: Hawkmoon
|
authors: Hawkmoon
|
||||||
description:
|
description:
|
||||||
<p>A faction to recreate the actual unit lineup during Desert Storm as
|
<p>A faction to recreate the actual unit lineup during Desert Storm as closely
|
||||||
closely as possible</p>
|
as possible</p>
|
||||||
aircrafts:
|
aircrafts:
|
||||||
- A-10A Thunderbolt II
|
- A-10A Thunderbolt II
|
||||||
- AH-64A Apache
|
- AH-64A Apache
|
||||||
@@ -18,6 +18,7 @@ aircrafts:
|
|||||||
- F-14B Tomcat
|
- F-14B Tomcat
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F-4E Phantom II
|
- F-4E Phantom II
|
||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ country: Combined Joint Task Forces Blue
|
|||||||
name: NATO OIF
|
name: NATO OIF
|
||||||
authors: Fuzzle
|
authors: Fuzzle
|
||||||
description:
|
description:
|
||||||
<p>A more modern NATO mixed faction reflecting the units involved in
|
<p>A more modern NATO mixed faction reflecting the units involved in Operation
|
||||||
Operation Iraqi Freedom.</p>
|
Iraqi Freedom.</p>
|
||||||
aircrafts:
|
aircrafts:
|
||||||
- A-10C Thunderbolt II (Suite 3)
|
- A-10C Thunderbolt II (Suite 3)
|
||||||
- AH-64D Apache Longbow
|
- AH-64D Apache Longbow
|
||||||
@@ -19,6 +19,7 @@ aircrafts:
|
|||||||
- F-14B Tomcat
|
- F-14B Tomcat
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F-22A Raptor
|
- F-22A Raptor
|
||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ aircrafts:
|
|||||||
- F-14B Tomcat
|
- F-14B Tomcat
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F-22A Raptor
|
- F-22A Raptor
|
||||||
- F-5E Tiger II
|
- F-5E Tiger II
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ aircrafts:
|
|||||||
- C-130J-30 Super Hercules
|
- C-130J-30 Super Hercules
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F-4E Phantom II
|
- F-4E Phantom II
|
||||||
- UH-1H Iroquois
|
- UH-1H Iroquois
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ aircrafts:
|
|||||||
- C-130J-30 Super Hercules
|
- C-130J-30 Super Hercules
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
- Mirage 2000C
|
- Mirage 2000C
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ aircrafts:
|
|||||||
- F-14B Tomcat
|
- F-14B Tomcat
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
- Ka-50 Hokum
|
- Ka-50 Hokum
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ aircrafts:
|
|||||||
- F-14B Tomcat
|
- F-14B Tomcat
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
- S-3B Viking
|
- S-3B Viking
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ aircrafts:
|
|||||||
- F-14B Tomcat
|
- F-14B Tomcat
|
||||||
- F-15C Eagle
|
- F-15C Eagle
|
||||||
- F-15E Strike Eagle
|
- F-15E Strike Eagle
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
- F-16CM Fighting Falcon (Block 50)
|
- F-16CM Fighting Falcon (Block 50)
|
||||||
- F-22A Raptor
|
- F-22A Raptor
|
||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 17th Weapons Squadron
|
||||||
|
nickname: Hooters
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 17th WS AF90 Low Vis Clean
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 333rd Fighter Squadron
|
||||||
|
nickname: Lancers
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 333rd Rocketeers FS AF87-199 333 FGS
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 334th Fighter Squadron
|
||||||
|
nickname: Eagles
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 334th Eagles FS AF89 Aim High
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 335th Fighter Squadron
|
||||||
|
nickname: Chiefs
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 335th Chiefs FS AF89 Low Vis Combat
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 336th Fighter Squadron
|
||||||
|
nickname: Rocketeers
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 336th Rocketeers FS AF88 Low Vis Combat
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 389th Fighter Squadron
|
||||||
|
nickname: Thunderbolts
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 389th Thunderbolts FS AF90 Low Vis Combat
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 391st Fighter Squadron
|
||||||
|
nickname: Bold Tigers
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 391st Bold Tigers FS AF90-241 High Vis Combat
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 492th Fighter Squadron
|
||||||
|
nickname: Madhatters
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 492nd Madhatters FS AF91-315 Vader
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 494th Fighter Squadron
|
||||||
|
nickname: Panthers
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: USA
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: USAF 494th Panthers FS 91-603 75th D-Day Anniversary
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
name: 69th Squadron
|
||||||
|
nickname: Hammers
|
||||||
|
female_pilot_percentage: 7
|
||||||
|
country: Israel
|
||||||
|
role: Strike Fighter
|
||||||
|
aircraft: F-15E Strike Eagle (Suite 4+)
|
||||||
|
livery: IDF RA'AM, 69 Hammer Sqn
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
description:
|
description:
|
||||||
The F-15 has often been labeled as the greatest U.S. fighter aircraft
|
The F-15 has often been labeled as the greatest U.S. fighter aircraft from the
|
||||||
from the 1970s until the early 21st century. The F-15E is a multirole fighter and
|
1970s until the early 21st century. The F-15E is a multirole fighter and
|
||||||
exceeds in CAS operations. It served worldwide without suffering any confirmed losses.
|
exceeds in CAS operations. It served worldwide without suffering any confirmed
|
||||||
|
losses.
|
||||||
introduced: 1988
|
introduced: 1988
|
||||||
manufacturer: McDonnell Douglas
|
manufacturer: McDonnell Douglas
|
||||||
origin: USA
|
origin: USA
|
||||||
|
|||||||
36
resources/units/aircraft/F-15ESE.yaml
Normal file
36
resources/units/aircraft/F-15ESE.yaml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
description:
|
||||||
|
The F-15 has often been labeled as the greatest U.S. fighter aircraft from the
|
||||||
|
1970s until the early 21st century. The F-15E is a multirole fighter and
|
||||||
|
exceeds in CAS operations. It served worldwide without suffering any confirmed
|
||||||
|
losses.
|
||||||
|
introduced: 1988
|
||||||
|
manufacturer: McDonnell Douglas
|
||||||
|
origin: USA
|
||||||
|
price: 24
|
||||||
|
role: Multirole Strike Fighter
|
||||||
|
max_range: 300
|
||||||
|
variants:
|
||||||
|
F-15E Strike Eagle (Suite 4+): {}
|
||||||
|
radios:
|
||||||
|
intra_flight: AN/ARC-210
|
||||||
|
inter_flight: AN/ARC-164
|
||||||
|
channels:
|
||||||
|
type: common
|
||||||
|
# Radio 1 is the UHF AN/ARC-164, and Radio 2 is the V/UHF AN/ARC-210. We
|
||||||
|
# only ever allocate UHF for inter-flight, so we'd prefer to use radio 2 for
|
||||||
|
# intra-flight, but as is often the case the flight's frequency will be
|
||||||
|
# assigned to radio 1 channel 1 no matter what we do.
|
||||||
|
intra_flight_radio_index: 1
|
||||||
|
inter_flight_radio_index: 2
|
||||||
|
tasks:
|
||||||
|
BAI: 760
|
||||||
|
BARCAP: 240
|
||||||
|
CAS: 760
|
||||||
|
DEAD: 260
|
||||||
|
Escort: 240
|
||||||
|
Fighter sweep: 240
|
||||||
|
Intercept: 240
|
||||||
|
OCA/Aircraft: 760
|
||||||
|
OCA/Runway: 630
|
||||||
|
Strike: 640
|
||||||
|
TARCAP: 240
|
||||||
Reference in New Issue
Block a user