You can start an Olympus server, modify settings and uninstall below. + The following DCS installations have been identified.
You can start an Olympus server, modify settings and uninstall below.
diff --git a/client/@types/olympus/index.d.ts b/client/@types/olympus/index.d.ts
index c37bdcae..6e63fcb1 100644
--- a/client/@types/olympus/index.d.ts
+++ b/client/@types/olympus/index.d.ts
@@ -105,6 +105,10 @@ declare module "constants/constants" {
export const ROEs: string[];
export const reactionsToThreat: string[];
export const emissionsCountermeasures: string[];
+ export const ERAS: {
+ name: string;
+ chronologicalOrder: number;
+ }[];
export const ROEDescriptions: string[];
export const reactionsToThreatDescriptions: string[];
export const emissionsCountermeasuresDescriptions: string[];
@@ -836,6 +840,7 @@ declare module "other/utils" {
}): UnitBlueprint | null;
export function getMarkerCategoryByName(name: string): "aircraft" | "helicopter" | "groundunit-sam" | "navyunit" | "groundunit-other";
export function getUnitDatabaseByCategory(category: string): import("unit/databases/aircraftdatabase").AircraftDatabase | import("unit/databases/helicopterdatabase").HelicopterDatabase | import("unit/databases/groundunitdatabase").GroundUnitDatabase | import("unit/databases/navyunitdatabase").NavyUnitDatabase | null;
+ export function getCategoryBlueprintIconSVG(category: string, unitName: string): string | false;
export function base64ToBytes(base64: string): ArrayBufferLike;
export function enumToState(state: number): string;
export function enumToROE(ROE: number): string;
@@ -1600,6 +1605,7 @@ declare module "map/map" {
import { CoalitionAreaContextMenu } from "contextmenus/coalitionareacontextmenu";
import { AirbaseSpawnContextMenu } from "contextmenus/airbasespawnmenu";
export type MapMarkerVisibilityControl = {
+ "category"?: string;
"image": string;
"isProtected"?: boolean;
"name": string;
@@ -1997,6 +2003,25 @@ declare module "unit/importexport/unitdatafileexport" {
showForm(units: Unit[]): void;
}
}
+declare module "schemas/schema" {
+ import Ajv from "ajv";
+ import { AnySchemaObject } from "ajv/dist/core";
+ abstract class JSONSchemaValidator {
+ #private;
+ constructor(schema: AnySchemaObject);
+ getAjv(): Ajv;
+ getCompiledValidator(): any;
+ getErrors(): any;
+ getSchema(): AnySchemaObject;
+ validate(data: any): any;
+ }
+ export class AirbasesJSONSchemaValidator extends JSONSchemaValidator {
+ constructor();
+ }
+ export class ImportFileJSONSchemaValidator extends JSONSchemaValidator {
+ constructor();
+ }
+}
declare module "unit/importexport/unitdatafileimport" {
import { Dialog } from "dialog/dialog";
import { UnitDataFile } from "unit/importexport/unitdatafile";
diff --git a/client/public/stylesheets/leaflet/leaflet.css b/client/public/stylesheets/leaflet/leaflet.css
index 1981009f..9ade8dc4 100644
--- a/client/public/stylesheets/leaflet/leaflet.css
+++ b/client/public/stylesheets/leaflet/leaflet.css
@@ -60,6 +60,11 @@
padding: 0;
}
+.leaflet-container img.leaflet-tile {
+ /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
+ mix-blend-mode: plus-lighter;
+}
+
.leaflet-container.leaflet-touch-zoom {
-ms-touch-action: pan-x pan-y;
touch-action: pan-x pan-y;
@@ -646,7 +651,7 @@ svg.leaflet-image-layer.leaflet-interactive path {
}
/* Printing */
-
+
@media print {
/* Prevent printers from removing background-images of controls. */
.leaflet-control {
diff --git a/manager/1.js b/manager/1.js
new file mode 100644
index 00000000..ac4cd6d8
--- /dev/null
+++ b/manager/1.js
@@ -0,0 +1,97 @@
+
+ /* Get the list of DCS instances */
+ var instances = await DCSInstance.getInstances();
+
+ /* If there is only 1 DCS Instance and Olympus is not installed in it, go straight to the installation page (since there is nothing else to do) */
+ this.basic = instances.length === 1 && !instances[0].installed;
+
+ document.getElementById("loader").classList.add("hide");
+
+ /* Check if there are corrupted or outdate instances */
+ if (instances.some((instance) => {
+ return instance.installed && instance.error;
+ })) {
+ /* Ask the user for confirmation */
+ showErrorPopup("One or more Olympus instances are corrupted or need updating. Press Close to fix this.", async () => {
+ showWaitPopup("Please wait while your instances are being fixed.")
+ fixInstances(instances.filter((instance) => {
+ return instance.installed && instance.error;
+ })).then(
+ () => { location.reload() },
+ (err) => {
+ logger.error(err);
+ showErrorPopup(`An error occurred while trying to fix your installations. Please reinstall Olympus manually.
You can find more info in ${path.join(__dirname, "..", "manager.log")}`);
+ }
+ )
+ })
+ }
+
+ /* Check which buttons should be enabled */
+ const installEnabled = true;
+ const manageEnabled = instances.some((instance) => { return instance.installed; });
+
+ /* Menu */
+ var menuPage = new MenuPage(this, {
+ installEnabled: installEnabled,
+ manageEnabled: manageEnabled
+ });
+
+ /* Installations */
+ this.installationPage = new installationPage(this, {
+ instances: instances
+ });
+
+ /* Instances */
+ this.instancesPage = new InstancesPage(this, {
+ instances: instances.filter((instance) => {
+ return instance.installed;
+ })
+ });
+
+ /* Connections */
+ this.connectionsPage = new ConnectionsPage(this);
+
+ /* Passwords */
+ this.passwordsPage = new PasswordsPage(this);
+
+ /* Result */
+ this.resultPage = new ResultPage(this, {
+ logLocation: path.join(__dirname, "..", "manager.log")
+ });
+
+ /* Create all the HTML pages */
+ document.body.appendChild(this.menuPage.getElement());
+ document.body.appendChild(this.installationPage.getElement());
+ document.body.appendChild(this.instancesPage.getElement());
+ document.body.appendChild(this.connectionsPage.getElement());
+ document.body.appendChild(this.passwordsPage.getElement());
+ document.body.appendChild(this.resultPage.getElement());
+
+ /* In basic mode we directly show the connections page */
+ if (this.basic) {
+ const options = {
+ instance: instances[0],
+ basic: this.basic,
+ install: true
+ }
+ connectionsPage.options = {
+ ...connectionsPage.options,
+ ...options
+ }
+ passwordsPage.options = {
+ ...passwordsPage.options,
+ ...options
+ }
+ resultPage.options = {
+ ...resultPage.options,
+ ...options
+ }
+
+ /* Show the connections page directly */
+ instancesPage.hide();
+ connectionsPage.show();
+ } else {
+ /* Show the main menu */
+ menuPage.show();
+ }
+ }
\ No newline at end of file
diff --git a/manager/ejs/connections.ejs b/manager/ejs/connections.ejs
index 80fe1869..a9775338 100644
--- a/manager/ejs/connections.ejs
+++ b/manager/ejs/connections.ejs
@@ -1,4 +1,33 @@