mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Compare commits
17 Commits
develop-8.
...
develop-8.
| 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
|
||||
|
||||
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 { Polyline, Tooltip } from "react-leaflet";
|
||||
|
||||
export enum RouteColor {
|
||||
Blue = "#2d3e50",
|
||||
Contested = "#c85050",
|
||||
Highlight = "#ffffff",
|
||||
Red = "#8c1414",
|
||||
}
|
||||
|
||||
interface SupplyRouteProps {
|
||||
route: SupplyRouteModel;
|
||||
}
|
||||
@@ -26,18 +33,22 @@ function ActiveSupplyRouteHighlight(props: SupplyRouteProps) {
|
||||
}
|
||||
|
||||
return (
|
||||
<Polyline positions={props.route.points} color={"#ffffff"} weight={2} />
|
||||
<Polyline
|
||||
positions={props.route.points}
|
||||
color={RouteColor.Highlight}
|
||||
weight={2}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function colorFor(route: SupplyRouteModel) {
|
||||
if (route.front_active) {
|
||||
return "#c85050";
|
||||
return RouteColor.Contested;
|
||||
}
|
||||
if (route.blue) {
|
||||
return "#2d3e50";
|
||||
return RouteColor.Blue;
|
||||
}
|
||||
return "#8c1414";
|
||||
return RouteColor.Red;
|
||||
}
|
||||
|
||||
export default function SupplyRoute(props: SupplyRouteProps) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
project = "DCS Liberation"
|
||||
copyright = "2023, DCS Liberation Team"
|
||||
author = "DCS Liberation Team"
|
||||
release = "8.0.0"
|
||||
release = "8.1.0"
|
||||
|
||||
# -- 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.ato import Flight
|
||||
from game.ato.flightwaypoint import FlightWaypoint
|
||||
from game.ato.flightwaypointtype import FlightWaypointType
|
||||
from game.server import GameContext
|
||||
from game.server.leaflet import LeafletPoint
|
||||
from game.server.waypoints.models import FlightWaypointJs
|
||||
from game.sim import GameUpdateEvents
|
||||
from game.utils import meters
|
||||
|
||||
router: APIRouter = APIRouter(prefix="/waypoints")
|
||||
|
||||
|
||||
def waypoints_for_flight(flight: Flight) -> list[FlightWaypointJs]:
|
||||
departure = FlightWaypointJs.for_waypoint(
|
||||
FlightWaypoint(
|
||||
"TAKEOFF",
|
||||
FlightWaypointType.TAKEOFF,
|
||||
flight.departure.position,
|
||||
meters(0),
|
||||
"RADIO",
|
||||
),
|
||||
flight,
|
||||
0,
|
||||
)
|
||||
return [departure] + [
|
||||
return [
|
||||
FlightWaypointJs.for_waypoint(w, flight, i)
|
||||
for i, w in enumerate(flight.flight_plan.waypoints, 1)
|
||||
]
|
||||
@@ -64,7 +50,7 @@ def set_position(
|
||||
if waypoint_idx == 0:
|
||||
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(
|
||||
LatLng(position.lat, position.lng), game.theater.terrain
|
||||
)
|
||||
|
||||
@@ -2,7 +2,7 @@ from pathlib import Path
|
||||
|
||||
|
||||
MAJOR_VERSION = 8
|
||||
MINOR_VERSION = 0
|
||||
MINOR_VERSION = 1
|
||||
MICRO_VERSION = 0
|
||||
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["Mirage-F1M-CE"] = AIRCRAFT_ICONS["Mirage-F1CE"]
|
||||
AIRCRAFT_ICONS["MB-339A"] = AIRCRAFT_ICONS["MB-339A PAN"]
|
||||
AIRCRAFT_ICONS["F-15ESE"] = AIRCRAFT_ICONS["F-15E"]
|
||||
|
||||
|
||||
def load_vehicle_icons():
|
||||
|
||||
@@ -24,7 +24,8 @@ class LiverySelector(QComboBox):
|
||||
for idx, livery in enumerate(
|
||||
squadron.aircraft.dcs_unit_type.iter_liveries_for_country(
|
||||
dcs.countries.get_by_name(squadron.country)
|
||||
)
|
||||
),
|
||||
1, # First entry is "Default".
|
||||
):
|
||||
self.addItem(livery.name, livery)
|
||||
if squadron.livery == livery.id:
|
||||
|
||||
@@ -26,6 +26,8 @@ def aircraft_banner_for(unit_type: AircraftType) -> Path:
|
||||
name = "Mirage-F1C-200"
|
||||
elif unit_type.dcs_id in {"Mirage-F1CE", "Mirage-F1M-CE"}:
|
||||
name = "Mirage-F1C"
|
||||
elif unit_type.dcs_id == "F-15ESE":
|
||||
name = "F-15E"
|
||||
else:
|
||||
name = unit_type.dcs_id
|
||||
return AIRCRAFT_BANNERS_BASE / f"{name}.jpg"
|
||||
|
||||
@@ -4,6 +4,8 @@ from PySide6.QtWidgets import (
|
||||
QFrame,
|
||||
QLabel,
|
||||
QVBoxLayout,
|
||||
QScrollArea,
|
||||
QWidget,
|
||||
)
|
||||
|
||||
from game import Game
|
||||
@@ -35,6 +37,16 @@ class QFlightPayloadTab(QFrame):
|
||||
|
||||
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
|
||||
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>'
|
||||
@@ -42,12 +54,12 @@ class QFlightPayloadTab(QFrame):
|
||||
docsText.setAlignment(Qt.AlignCenter)
|
||||
docsText.setOpenExternalLinks(True)
|
||||
|
||||
layout.addLayout(PropertyEditor(self.flight))
|
||||
scrolling_layout.addLayout(PropertyEditor(self.flight))
|
||||
self.loadout_selector = DcsLoadoutSelector(flight)
|
||||
self.loadout_selector.currentIndexChanged.connect(self.on_new_loadout)
|
||||
layout.addWidget(self.loadout_selector)
|
||||
layout.addWidget(self.payload_editor)
|
||||
layout.addWidget(docsText)
|
||||
scrolling_layout.addWidget(self.loadout_selector)
|
||||
scrolling_layout.addWidget(self.payload_editor)
|
||||
scrolling_layout.addWidget(docsText)
|
||||
|
||||
self.setLayout(layout)
|
||||
|
||||
|
||||
@@ -64,7 +64,23 @@ class QFlightWaypointList(QTableView):
|
||||
self.model.setHorizontalHeaderLabels(HEADER_LABELS)
|
||||
|
||||
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.selectionModel().setCurrentIndex(
|
||||
self.model.index(current_index, 0), QItemSelectionModel.Select
|
||||
|
||||
@@ -32,7 +32,7 @@ platformdirs==2.6.2
|
||||
pluggy==1.0.0
|
||||
pre-commit==2.21.0
|
||||
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-hooks-contrib==2022.14
|
||||
pyproj==3.4.1
|
||||
|
||||
@@ -16,11 +16,11 @@ squadrons:
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
size: 20
|
||||
size: 24
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
size: 20
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
@@ -41,7 +41,7 @@ squadrons:
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Mirage 2000C
|
||||
size: 16
|
||||
size: 12
|
||||
# Kedem
|
||||
12:
|
||||
- primary: Transport
|
||||
|
||||
@@ -12,10 +12,10 @@ version: "10.9"
|
||||
squadrons:
|
||||
# Tonopah Airport
|
||||
17:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
size: 12
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
|
||||
@@ -42,9 +42,9 @@ squadrons:
|
||||
#San Julian
|
||||
11:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
size: 8
|
||||
- primary: Air Assault
|
||||
secondary: any
|
||||
|
||||
@@ -43,10 +43,10 @@ squadrons:
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
size: 8
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
size: 12
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
|
||||
@@ -66,6 +66,11 @@ squadrons:
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
size: 16
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
size: 12
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
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
|
||||
authors: Hawkmoon
|
||||
description:
|
||||
<p>A faction to recreate the actual unit lineup during Desert Storm as
|
||||
closely as possible</p>
|
||||
<p>A faction to recreate the actual unit lineup during Desert Storm as closely
|
||||
as possible</p>
|
||||
aircrafts:
|
||||
- A-10A Thunderbolt II
|
||||
- AH-64A Apache
|
||||
@@ -18,6 +18,7 @@ aircrafts:
|
||||
- F-14B Tomcat
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F-4E Phantom II
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
|
||||
@@ -3,8 +3,8 @@ country: Combined Joint Task Forces Blue
|
||||
name: NATO OIF
|
||||
authors: Fuzzle
|
||||
description:
|
||||
<p>A more modern NATO mixed faction reflecting the units involved in
|
||||
Operation Iraqi Freedom.</p>
|
||||
<p>A more modern NATO mixed faction reflecting the units involved in Operation
|
||||
Iraqi Freedom.</p>
|
||||
aircrafts:
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- AH-64D Apache Longbow
|
||||
@@ -19,6 +19,7 @@ aircrafts:
|
||||
- F-14B Tomcat
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F-22A Raptor
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
|
||||
@@ -24,6 +24,7 @@ aircrafts:
|
||||
- F-14B Tomcat
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F-22A Raptor
|
||||
- F-5E Tiger II
|
||||
|
||||
@@ -13,6 +13,7 @@ aircrafts:
|
||||
- C-130J-30 Super Hercules
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F-4E Phantom II
|
||||
- UH-1H Iroquois
|
||||
|
||||
@@ -13,6 +13,7 @@ aircrafts:
|
||||
- C-130J-30 Super Hercules
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- Mirage 2000C
|
||||
|
||||
@@ -20,6 +20,7 @@ aircrafts:
|
||||
- F-14B Tomcat
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- Ka-50 Hokum
|
||||
|
||||
@@ -20,6 +20,7 @@ aircrafts:
|
||||
- F-14B Tomcat
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- S-3B Viking
|
||||
|
||||
@@ -22,6 +22,7 @@ aircrafts:
|
||||
- F-14B Tomcat
|
||||
- F-15C Eagle
|
||||
- F-15E Strike Eagle
|
||||
- F-15E Strike Eagle (Suite 4+)
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F-22A Raptor
|
||||
- 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:
|
||||
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.
|
||||
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
|
||||
|
||||
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