@foxdelta2/dcsjs
Version:
Mission Generator for DCS
2,245 lines (2,243 loc) • 603 kB
TypeScript
import { z } from "zod";
type AircraftType =
| "Tornado GR4"
| "Tornado IDS"
| "F/A-18A"
| "F/A-18C"
| "F-14A"
| "Tu-22M3"
| "F-4E"
| "B-52H"
| "MiG-27K"
| "Su-27"
| "MiG-23MLD"
| "Su-25"
| "Su-25TM"
| "Su-25T"
| "Su-33"
| "MiG-25PD"
| "MiG-25RBT"
| "Su-30"
| "Su-17M4"
| "MiG-31"
| "Tu-95MS"
| "Su-24M"
| "Su-24MR"
| "Tu-160"
| "F-117A"
| "B-1B"
| "S-3B"
| "S-3B Tanker"
| "Mirage 2000-5"
| "Mirage-F1CE"
| "Mirage-F1EE"
| "F-15C"
| "F-15E"
| "F-15ESE"
| "MiG-29A"
| "MiG-29G"
| "MiG-29S"
| "Tu-142"
| "C-130"
| "An-26B"
| "An-30M"
| "C-17A"
| "A-50"
| "E-3A"
| "IL-78M"
| "E-2C"
| "IL-76MD"
| "F-16C bl.50"
| "F-16C bl.52d"
| "F-16A"
| "F-16A MLU"
| "RQ-1A Predator"
| "Yak-40"
| "KC-135"
| "FW-190D9"
| "FW-190A8"
| "Bf-109K-4"
| "SpitfireLFMkIX"
| "SpitfireLFMkIXCW"
| "P-51D"
| "P-51D-30-NA"
| "P-47D-30"
| "P-47D-30bl1"
| "P-47D-40"
| "MosquitoFBMkVI"
| "Ju-88A4"
| "A-20G"
| "A-4E-C"
| "A-10A"
| "A-10C"
| "A-10C_2"
| "AJS37"
| "AV8BNA"
| "KC130"
| "KC135MPRS"
| "C-101EB"
| "C-101CC"
| "J-11A"
| "JF-17"
| "KJ-2000"
| "WingLoong-I"
| "H-6J"
| "Christen Eagle II"
| "F-16C_50"
| "F-5E"
| "F-5E-3"
| "F-86F Sabre"
| "F-14B"
| "F-14A-135-GR"
| "FA-18C_hornet"
| "Hawk"
| "I-16"
| "L-39C"
| "L-39ZA"
| "M-2000C"
| "MB-339A"
| "MB-339APAN"
| "MQ-9 Reaper"
| "MiG-15bis"
| "MiG-19P"
| "MiG-21Bis"
| "Su-34"
| "TF-51D"
| "Mi-24V"
| "Mi-8MT"
| "Mi-26"
| "Ka-27"
| "UH-60A"
| "UH-60L"
| "CH-53E"
| "CH-47D"
| "SH-3W"
| "AH-64A"
| "AH-64D"
| "AH-1W"
| "SH-60B"
| "UH-1H"
| "Mi-28N"
| "OH-58D"
| "AH-64D_BLK_II"
| "Ka-50"
| "Ka-50_3"
| "Mi-24P"
| "SA342M"
| "SA342L"
| "SA342Mistral"
| "SA342Minigun"
| "VSN_F4B"
| "VSN_F4C"
| "SK-60";
type CountryName =
| "Russia"
| "Ukraine"
| "USA"
| "Turkey"
| "UK"
| "France"
| "Germany"
| "USAF Aggressors"
| "Canada"
| "Spain"
| "The Netherlands"
| "Belgium"
| "Norway"
| "Denmark"
| "Israel"
| "Georgia"
| "Insurgents"
| "Abkhazia"
| "South Ossetia"
| "Italy"
| "Australia"
| "Switzerland"
| "Austria"
| "Belarus"
| "Bulgaria"
| "Czech Republic"
| "China"
| "Croatia"
| "Egypt"
| "Finland"
| "Greece"
| "Hungary"
| "India"
| "Iran"
| "Iraq"
| "Japan"
| "Kazakhstan"
| "North Korea"
| "Pakistan"
| "Poland"
| "Romania"
| "Saudi Arabia"
| "Serbia"
| "Slovakia"
| "South Korea"
| "Sweden"
| "Syria"
| "Yemen"
| "Vietnam"
| "Venezuela"
| "Tunisia"
| "Thailand"
| "Sudan"
| "Philippines"
| "Morocco"
| "Mexico"
| "Malaysia"
| "Libya"
| "Jordan"
| "Indonesia"
| "Honduras"
| "Ethiopia"
| "Chile"
| "Brazil"
| "Bahrain"
| "Third Reich"
| "Yugoslavia"
| "USSR"
| "Italian Social Republic"
| "Algeria"
| "Kuwait"
| "Qatar"
| "Oman"
| "United Arab Emirates"
| "South Africa"
| "Cuba"
| "Portugal"
| "GDR"
| "Lebanon"
| "Combined Joint Task Forces Blue"
| "Combined Joint Task Forces Red"
| "United Nations Peacekeepers"
| "Argentina"
| "Cyprus"
| "Slovenia"
| "Bolivia"
| "Ghana"
| "Nigeria"
| "Peru"
| "Ecuador";
type AirdromeName =
| "Anapa-Vityazevo"
| "Krasnodar-Center"
| "Novorossiysk"
| "Krymsk"
| "Maykop-Khanskaya"
| "Gelendzhik"
| "Sochi-Adler"
| "Krasnodar-Pashkovsky"
| "Sukhumi-Babushara"
| "Gudauta"
| "Batumi"
| "Senaki-Kolkhi"
| "Kobuleti"
| "Kutaisi"
| "Mineralnye Vody"
| "Nalchik"
| "Mozdok"
| "Tbilisi-Lochini"
| "Soganlug"
| "Vaziani"
| "Beslan";
type GroundUnitName =
| "2B11 mortar"
| "SAU Gvozdika"
| "SAU Msta"
| "SAU Akatsia"
| "SAU 2-C9"
| "M-109"
| "SpGH_Dana"
| "AAV7"
| "BMD-1"
| "BMP-1"
| "BMP-2"
| "BMP-3"
| "BRDM-2"
| "BTR_D"
| "Cobra"
| "LAV-25"
| "M1043 HMMWV Armament"
| "M1045 HMMWV TOW"
| "M1126 Stryker ICV"
| "M-113"
| "M1134 Stryker ATGM"
| "M-2 Bradley"
| "MCV-80"
| "MTLB"
| "Marder"
| "TPZ"
| "Grad_FDDM"
| "Bunker"
| "Paratrooper RPG-16"
| "Paratrooper AKS-74"
| "Infantry AK Ins"
| "Sandbox"
| "Soldier AK"
| "Infantry AK"
| "Soldier M249"
| "Soldier M4"
| "Soldier M4 GRG"
| "Soldier RPG"
| "MLRS FDDM"
| "Infantry AK ver2"
| "Infantry AK ver3"
| "Grad-URAL"
| "Uragan_BM-27"
| "Smerch"
| "Smerch_HE"
| "MLRS"
| "2S6 Tunguska"
| "Kub 2P25 ln"
| "5p73 s-125 ln"
| "S-300PS 5P85C ln"
| "S-300PS 5P85D ln"
| "SA-11 Buk LN 9A310M1"
| "Osa 9A33 ln"
| "Tor 9A331"
| "Strela-10M3"
| "Strela-1 9P31"
| "SA-11 Buk CC 9S470M1"
| "Patriot AMG"
| "Patriot ECS"
| "Gepard"
| "Hawk pcp"
| "Vulcan"
| "Hawk ln"
| "M48 Chaparral"
| "M6 Linebacker"
| "Patriot ln"
| "M1097 Avenger"
| "Patriot EPP"
| "Patriot cp"
| "Roland ADS"
| "S-300PS 54K6 cp"
| "Soldier stinger"
| "Stinger comm dsr"
| "Stinger comm"
| "ZSU-23-4 Shilka"
| "ZU-23 Emplacement Closed"
| "ZU-23 Emplacement"
| "Ural-375 ZU-23"
| "ZU-23 Closed Insurgent"
| "Ural-375 ZU-23 Insurgent"
| "ZU-23 Insurgent"
| "SA-18 Igla manpad"
| "SA-18 Igla comm"
| "SA-18 Igla-S manpad"
| "SA-18 Igla-S comm"
| "Igla manpad INS"
| "1L13 EWR"
| "Kub 1S91 str"
| "S-300PS 40B6M tr"
| "S-300PS 40B6MD sr"
| "55G6 EWR"
| "S-300PS 64H6E sr"
| "SA-11 Buk SR 9S18M1"
| "Dog Ear radar"
| "Hawk tr"
| "Hawk sr"
| "Patriot str"
| "Hawk cwar"
| "p-19 s-125 sr"
| "Roland Radar"
| "snr s-125 tr"
| "house1arm"
| "house2arm"
| "outpost_road"
| "outpost"
| "houseA_arm"
| "TACAN_beacon"
| "Challenger2"
| "Leclerc"
| "M-60"
| "M1128 Stryker MGS"
| "M-1 Abrams"
| "T-55"
| "T-72B"
| "T-80UD"
| "T-90"
| "Leopard1A3"
| "Merkava_Mk4"
| "Ural-4320 APA-5D"
| "ATMZ-5"
| "ATZ-10"
| "GAZ-3307"
| "GAZ-3308"
| "GAZ-66"
| "M978 HEMTT Tanker"
| "HEMTT TFFT"
| "IKARUS Bus"
| "KAMAZ Truck"
| "LAZ Bus"
| "LiAZ Bus"
| "Hummer"
| "M 818"
| "MAZ-6303"
| "Predator GCS"
| "Predator TrojanSpirit"
| "Suidae"
| "Tigr_233036"
| "Trolley bus"
| "UAZ-469"
| "Ural ATsP-6"
| "Ural-4320-31"
| "Ural-4320T"
| "Ural-375 PBU"
| "Ural-375"
| "VAZ Car"
| "ZiL-131 APA-80"
| "SKP-11"
| "ZIL-131 KUNG"
| "ZIL-4331"
| "KrAZ6322"
| "JTAC"
| "Infantry Animated"
| "Electric locomotive"
| "Locomotive"
| "Coach cargo"
| "Coach cargo open"
| "Coach a tank blue"
| "Coach a tank yellow"
| "Coach a passenger"
| "Coach a platform"
| "tacr2a"
| "LARC-V"
| "KS-19"
| "SON_9"
| "Scud_B"
| "HL_DSHK"
| "HL_KORD"
| "tt_DSHK"
| "tt_KORD"
| "HL_ZU-23"
| "tt_ZU-23"
| "HL_B8M1"
| "tt_B8M1"
| "NASAMS_Radar_MPQ64F1"
| "NASAMS_Command_Post"
| "NASAMS_LN_B"
| "NASAMS_LN_C"
| "M4_Sherman"
| "M2A1_halftrack"
| "FPS-117 Dome"
| "FPS-117 ECS"
| "FPS-117"
| "BTR-80"
| "RD_75"
| "S_75M_Volhov"
| "SNR_75V"
| "RLS_19J6"
| "RPC_5N62V"
| "S-200_Launcher"
| "ZSU_57_2"
| "S-60_Type59_Artillery"
| "generator_5i57"
| "T-72B3"
| "PT_76"
| "BTR-82A"
| "ATZ-5"
| "AA8"
| "TZ-22_KrAZ"
| "ATZ-60_Maz"
| "ZIL-135"
| "S_75_ZIL"
| "rapier_fsa_launcher"
| "rapier_fsa_optical_tracker_unit"
| "rapier_fsa_blindfire_radar"
| "bofors40"
| "Chieftain_mk3"
| "Bedford_MWD"
| "Land_Rover_101_FC"
| "Land_Rover_109_S3"
| "hy_launcher"
| "Silkworm_SR"
| "ES44AH"
| "Boxcartrinity"
| "Tankcartrinity"
| "Wellcarnsc"
| "flak18"
| "Pz_IV_H"
| "Leopard-2A5"
| "Leopard-2"
| "leopard-2A4"
| "leopard-2A4_trs"
| "Sd_Kfz_251"
| "Blitz_36-6700A"
| "T155_Firtina"
| "VAB_Mephisto"
| "ZTZ96B"
| "ZBD04A"
| "HQ-7_LN_SP"
| "HQ-7_LN_EO"
| "HQ-7_STR_SP"
| "PLZ05"
| "TYPE-59";
type Theatre = "Caucasus" | "Syria";
type RouteType = "Turning Point";
type AltitudeType = "BARO" | "RADIO";
type Skill = "Average" | "High" | "Client";
type StartType = "cold" | "hot" | "air" | "runway";
type GroundRoutePointAction = "On Road" | "Off Road";
type ObjectiveType = "Town" | "Terrain" | "Airport" | "POI" | "Ship";
type Era = "WW2" | "Korea" | "Early CW" | "Late CW" | "Modern";
type StrikeTargetType =
| "Vehicle"
| "AAA"
| "Artillery"
| "SAM"
| "Structure"
| "Farp"
| "EW";
type TakeOffAction =
| "From Parking Area"
| "From Parking Area Hot"
| "From Ground Area"
| "From Runway"
| "Turning Point"
| "Landing";
type TakeOffType =
| "TakeOffParking"
| "TakeOffParkingHot"
| "TakeOffGround"
| "TakeOff"
| "Turning Point"
| "Land";
type VehicleType =
| "MBT"
| "Track Radar"
| "Search Radar"
| "SAM Launcher"
| "Unarmored"
| "Armored"
| "IFV"
| "SHORAD"
| "Transport"
| "Power Generator"
| "Refuel"
| "Control Unit"
| "EW"
| "Infantry";
type AiSkill = "Average" | "Good" | "High" | "Excellent";
declare namespace Import {
type AirdromeSlot = {
crossroad_index: number;
large: boolean;
plane: boolean;
helicopter: boolean;
shelter: boolean;
} & Position;
type Airdrome = {
id: number;
name: string;
airport?: unknown;
standlist: Array<AirdromeSlot>;
frequencies: {
frequencyList: [
[number, number] | number | undefined,
[number, number] | number | undefined,
[number, number] | number | undefined,
[number, number] | number | undefined
];
x: number;
y: number;
angle: number;
};
};
type Objective = {
name: string;
type: ObjectiveType;
position: Position;
};
type Country = {
id: number;
name: CountryName;
short_name: string;
};
}
type AirdromeSlot = {
id: string;
crossroad_index: number;
large: boolean;
plane: boolean;
helicopter: boolean;
shelter: boolean;
inUse: boolean;
} & Position;
type RoutePointTaskAction = {
enabled: boolean;
auto: boolean;
key?: string;
id:
| "AWACS"
| "EngageTargets"
| "WrappedAction"
| "Orbit"
| "AttackGroup"
| "Bombing"
| "Escort"
| "SEAD"
| "FireAtPoint"
| "EngageTargetsInZone"
| "EWR"
| "FAC"
| "ControlledTask";
name?: string;
number: number;
params: object;
};
type RoutePointTaskActionWithoutNumber = Omit<RoutePointTaskAction, "number">;
type RoutePointTask = {
id: "ComboTask";
params: {
tasks: Array<RoutePointTaskAction>;
};
};
type RoutePoint = Waypoint;
type TakeOffPoint = {
ETA: number;
ETA_locked: boolean;
action: TakeOffAction;
airdromeId?: number;
linkUnit?: number;
helipadId?: number;
alt: number;
alt_type: AltitudeType;
formation_template: string;
name?: string;
speed: number;
speed_locked: boolean;
task: RoutePointTask;
type: TakeOffType;
} & Position;
type Waypoint = {
ETA: number;
ETA_locked: boolean;
action: TakeOffAction;
alt: number;
alt_type: AltitudeType;
name: string;
speed: number;
speed_locked: boolean;
task: RoutePointTask;
type: TakeOffType;
airdromeId?: number;
linkUnit?: number;
helipadId?: number;
formation_template?: string;
} & Position;
type GroundWaypoint = {
ETA: number;
ETA_locked: boolean;
type: "Turning Point";
action: GroundRoutePointAction;
alt: number;
alt_type: AltitudeType;
formation_template: string;
name?: string;
speed: number;
speed_locked: boolean;
task: RoutePointTask;
} & Position;
type Route = {
points: Array<RoutePoint>;
};
type Vehicle$1 = DCS.GroundUnit & {
era: Era;
vehicleTypes: Array<VehicleType>;
};
type GroundGroupUnit = {
skill: AiSkill;
coldAtStart: boolean;
type: GroundUnitName;
unitId: number;
name: string;
heading: number;
playerCanDrive: boolean;
} & Position;
declare namespace DCS {
type Plane = {
chaff: number;
display_name: string;
flare: number;
ammo_type?: number;
gun?: number;
max_fuel: number;
max_height: number;
max_speed: number;
name: AircraftType;
};
type AirdromeSlot = {
id: string;
crossroad_index: number;
large: boolean;
plane: boolean;
helicopter: boolean;
shelter: boolean;
blocked?: boolean;
} & Position;
type Airdrome = {
id: number;
name: string;
airport?: unknown;
standlist: Record<string, object>;
frequency: number;
frequencyList?: [number, number, number, number];
runwayAngle: number;
} & Position;
type GroundUnit = {
category: string;
display_name: string;
name: string;
playerCanDrive: boolean;
};
type CoalitionDefinition = {
bullseye: Position;
country: Array<CountryDefinition>;
nav_points: unknown;
};
type CountryDefinition = {
id: number;
name: CountryName;
plane?: {
group: Array<FlightGroup>;
};
helicopter?: {
group: Array<FlightGroup>;
};
vehicle?: {
group: Array<DCS.GroundGroup>;
};
ship?: {
group: Array<ShipGroup>;
};
static?: {
group: Array<StaticGroup>;
};
};
type FlightGroupUnit = {
alt: number;
alt_type: AltitudeType;
callsign:
| {
1: number;
2: number;
3: number;
name: string;
}
| number
| string;
name: string;
onboard_num: string;
parking?: string;
parking_id?: string;
livery_id: string;
payload: Payload;
psi: number;
skill: Skill;
speed: number;
type: AircraftType;
unitId: number;
Radio?: [
{
modulations: Record<number, number>;
channels: Record<number, number>;
channelsNames: object;
},
{
modulations: Record<number, number>;
channels: Record<number, number>;
channelsNames: object;
}
];
linkUnit?: number;
helipadId?: number;
AddPropAircraft?: object;
} & Position;
type FlightGroup = {
lateActivation: boolean;
communication: boolean;
frequency: number;
groupId: number;
hidden: boolean;
hiddenOnMFD: boolean;
hiddenOnPlanner: boolean;
modulation: number;
name: string;
radioSet: boolean;
route: Route;
start_time: number;
task: DCS.Task;
taskSelected: boolean;
tasks: Array<RoutePointTaskAction>;
uncontrolled: boolean;
units: Array<Partial<FlightGroupUnit>>;
} & Position;
type GroundGroup = {
lateActivation?: boolean;
visible: boolean;
task?: "Ground Nothing";
tasks?: [];
taskSelected?: boolean;
uncontrollable: boolean;
route: {
spans: object;
points: Array<GroundWaypoint>;
};
groupId: number;
hidden: boolean;
name: string;
units: Array<Partial<GroundGroupUnit>>;
start_time?: number;
} & Position;
type Loadout = {
task: Task | "default";
name: string;
displayName: string;
pylons: Array<Pylon>;
};
type Aircraft = Plane & {
loadouts: Array<Loadout>;
availableTasks: Array<Task>;
controllable: boolean;
maxWaypoints?: number;
isHelicopter: boolean;
isMod?: boolean;
isLarge?: boolean;
cruiseAltitude: number;
cruiseSpeed: number;
era: Era;
carrierCapable: boolean;
allowedFrequency?: [number, number];
};
type Pylon = {
CLSID: string;
num?: number;
};
type Payload = {
chaff: number;
flare: number;
fuel: number;
gun: number;
ammo_type?: number;
pylons: Array<Pylon>;
};
type Task =
| "SEAD"
| "DEAD"
| "Intercept"
| "Antiship Strike"
| "AWACS"
| "CAP"
| "TARCAP"
| "CAS"
| "Escort"
| "Intercept"
| "Fighter Sweep"
| "Ground Attack"
| "Pinpoint Strike"
| "Runway Attack"
| "Transport"
| "Refueling"
| "RescueHelo"
| "CSAR"
| "AFAC";
}
declare namespace DCS {}
type StaticUnit = {
category: string;
shape_name?: string;
type: string;
unitId: number;
rate?: number;
name: string;
heading: number;
heliport_callsign_id?: number;
heliport_modulation?: number;
heliport_frequency?: string;
mass?: number;
canCargo?: boolean;
} & Position;
type StaticGroup = {
route: {
points: [
{
alt: number;
type: string;
name: string;
speed: number;
formation_template: string;
action: string;
} & Position
];
};
groupId: number;
units: Array<StaticUnit>;
name: string;
dead: boolean;
heading?: number;
type?: string;
category?: string;
frequency?: number;
countryName: CountryName;
} & Position;
type ShipUnit = {
skill: Skill;
type: string;
unitId: number;
modulation: 0;
name: string;
heading: number;
frequency: number;
} & Position;
type ShipGroup = {
visible: boolean;
tasks: object;
uncontrollable: boolean;
route: Route;
groupId: number;
hidden: boolean;
units: Array<ShipUnit>;
name: string;
start_time: number;
frequency: number;
groupType: "carrier";
} & Position;
type Carrier = Position;
type AltitudeWind = {
speed: number;
dir: number;
};
type Weather = {
atmosphere_type: number;
wind: {
at8000: AltitudeWind;
atGround: AltitudeWind;
at2000: AltitudeWind;
};
enable_fog: boolean;
visibility: {
distance: number;
};
halo: {
preset: "auto" | "off";
};
fog: {
thickness: number;
visibility: number;
density?: number;
};
season: {
temperature: number;
};
type_weather: number;
qnh: number;
cyclones: object;
name: string;
dust_density: number;
modifiedTime: boolean;
groundTurbulence: number;
enable_dust: boolean;
clouds: {
thickness: number;
density: number;
preset?: string;
base: number;
iprecptns: number;
};
};
type WeatherClouds = {
density: number;
thickness: number;
preset: string;
base: number;
iprecptns: number;
};
type MissionDate = {
Day: number;
Month: number;
Year: number;
};
type Mission = {
coalitions: Partial<Record<Coalition, number[]>>;
coalition: Partial<Record<Coalition, DCS.CoalitionDefinition>>;
theatre: Theatre;
weather: Weather;
date: MissionDate;
currentKey: number;
version: number;
start_time: number;
failures: object;
goals: object;
descriptionBlueTask: string;
descriptionRedTask: string;
descriptionText: string;
pictureFileNameN?: Array<string>;
pictureFileNameR?: Array<string>;
pictureFileNameB?: Array<string>;
};
type CountryWithUnits = DCS.CountryDefinition & {
plane?: {
group: Array<Partial<DCS.FlightGroup>>;
};
vehicle?: {
group: Array<Partial<DCS.GroundGroup>>;
};
helicopter?: {
group: Array<Partial<DCS.FlightGroup>>;
};
static?: {
group: Array<Partial<StaticGroup>>;
};
ship?: {
group: Array<Partial<ShipGroup>>;
};
};
type GeneratedCoalition = {
bullseye: Position;
country: Array<CountryWithUnits>;
nav_points: unknown;
};
type GeneratedTriggerZone = TriggerZone & {
zoneId: number;
color: [number, number, number, number];
hidden: boolean;
};
type GeneratedMission = Omit<Mission, "coalition"> & {
requiredModules: Array<unknown>;
coalition: Partial<Record<Coalition, GeneratedCoalition>>;
map: {
centerX: number;
centerY: number;
zoom: number;
};
usedModules: Record<string, boolean>;
sortie: string;
maxDictId: number;
result: {
offline: {
conditions: unknown;
actions: unknown;
func: unknown;
};
total: number;
blue: {
conditions: unknown;
actions: unknown;
func: unknown;
};
red: {
conditions: unknown;
actions: unknown;
func: unknown;
};
};
groundControl: {
passwords: {
artillery_commander: unknown;
instructor: unknown;
observer: unknown;
forward_observer: unknown;
};
roles: {
artillery_commander: {
neutrals: number;
blue: number;
red: number;
};
instructor: {
neutrals: number;
blue: number;
red: number;
};
observer: {
neutrals: number;
blue: number;
red: number;
};
forward_observer: {
neutrals: number;
blue: number;
red: number;
};
};
isPilotControlVehicles: false;
};
forcedOptions: unknown;
trigrules?: Array<object>;
trig?: {
actions: Array<string>;
};
triggers: {
zones: Array<GeneratedTriggerZone>;
};
};
type WarehouseAirport = {
OperatingLevel_Air: number;
OperatingLevel_Eqp: number;
OperatingLevel_Fuel: number;
aircrafts: object;
coalition: string;
diesel: {
InitFuel: number;
};
gasoline: {
InitFuel: number;
};
jet_fuel: {
InitFuel: number;
};
methanol_mixture: {
InitFuel: number;
};
periodicity: 30;
size: 100;
speed: 16.666666;
suppliers: object;
unlimitedAircrafts: true;
unlimitedFuel: true;
unlimitedMunitions: true;
weapons: object;
};
type Warehouse = {
airports: Record<number, WarehouseAirport>;
warehouses: object;
};
type UsableAirdromeSlot = DCS.AirdromeSlot & {
reservedTill?: number;
};
type UsableAirdrome = Omit<DCS.Airdrome, "standlist"> & {
standlist: Record<string, UsableAirdromeSlot>;
};
type TriggerZone = {
radius: number;
name: string;
} & Position;
type UnitPosition = Position & {
heading: number;
};
type StrikeTarget = {
name: string;
position: Position;
spans?: [Position, Position];
blueGroup?: Omit<StrikeTarget, "bluGroup">;
objectiveName: string;
groupId: number;
type?: StrikeTargetType;
structureType?: string;
structureCategory?: string;
unitPositions: Array<UnitPosition>;
};
type FarpStructure = {
position: Position;
name: string;
type: string;
category: string;
shapeName: string | undefined;
};
type MissionDefinition = {
missionType: Task;
aircraft: AircraftType;
clients: number;
startType: "cold" | "hot";
blueFaction: Faction;
redFaction: Faction;
useCarrier?: boolean;
useFARP?: boolean;
};
type GroundUnitsTemplate = {
name: string;
sams: Array<string>;
vehicles: Array<string>;
infantries: Array<string>;
shoradVehicles: Array<string>;
shoradInfantries: Array<string>;
ews: Array<string>;
};
type FactionDefinition = {
aircraftTypes: Partial<Record<Task | "Light Attack", Array<string>>>;
countryName: string;
name: string;
year: number;
playable: boolean;
templateName: string;
created?: Date;
};
type CampaignUnitState = "idle" | "en route" | "on objective";
type CampaignUnit = {
id: string;
name: string;
displayName: string;
category: string;
alive: boolean;
vehicleTypes: Array<VehicleType>;
destroyedTime?: number;
state: CampaignUnitState;
};
type StaticCategory = "Fortifications" | "Heliports";
type StaticShapeName =
| "ceh_ang_a"
| "garage_b"
| "tr_budka"
| "tech"
| "PalatkaB"
| "kp_ug"
| "GSM Rus"
| "invisiblefarp"
| "SetkaKP"
| "him_bak_a"
| "tec_a"
| "angar_b"
| "Workshop A"
| "hozdomik2"
| "kotelnaya_a"
| "aviashtab"
| "s2"
| "tele_bash";
type StaticType =
| "Garage B"
| "Tech hangar A"
| "Electric power box"
| "Repair workshop"
| "FARP Tent"
| "FARP CP Blindage"
| "FARP Fuel Depot"
| "Invisible FARP"
| "FARP Ammo Dump Coating"
| "Chemical tank A"
| "Hangar B"
| "Workshop A"
| "Subsidiary structure 2"
| "Boiler-house A"
| "Military staff"
| "Small werehouse 2"
| "TV tower"
| "Railway station"
| "FARP_SINGLE_01"
| "outpost"
| "FARP";
type StructureBuilding = {
offset: {
x: number;
y: number;
};
heading: number;
category: StaticCategory;
shapeName: string | undefined;
type: StaticType;
};
type CampaignStructureBuilding = {
name: string;
alive: boolean;
destroyedTime?: number;
repairScore?: number;
} & StructureBuilding;
type CampaignStructureState = "active" | "destroyed" | "deactivated";
type CampaignStructureBase = {
id: string;
name: string;
position: Position;
objectiveName: string;
groupId: number;
buildings: Array<CampaignStructureBuilding>;
state: CampaignStructureState;
};
type CampaignStructureDefault = CampaignStructureBase & {
structureType:
| "Ammo Depot"
| "Farp"
| "Command Center"
| "Power Plant"
| "Fuel Storage";
};
type CampaignStructureUnitCamp = CampaignStructureBase & {
structureType: "Barrack" | "Depot";
deploymentScore: number;
};
type CampaignStructure = CampaignStructureDefault | CampaignStructureUnitCamp;
type SamType = "SA-10-300" | "SA-6" | "SA-5" | "SA-3" | "SA-2" | "Hawk";
type CampaignSam = {
id: string;
position: Position;
units: Array<CampaignUnit>;
range: number;
type: SamType;
operational: boolean;
weaponReadyTimer: number;
fireInterval: number;
name: string;
objectiveName: string;
};
type CampaignHomeBaseType = "airdrome" | "farp" | "carrier";
type CampaignHomeBase = {
type: CampaignHomeBaseType;
name: string;
};
type CampaignAircraftState =
| "idle"
| "en route"
| "on station"
| "combat"
| "rtb"
| "waiting"
| "maintenance";
type CampaignWaypoint = {
name: string;
time: number;
duration?: number;
speed: number;
position: Position;
taskStart?: boolean;
onGround?: boolean;
racetrack?: {
position: Position;
name: string;
distance: number;
duration: number;
};
hold?: boolean;
};
type CampaignFlightGroupUnit = {
id: string;
name: string;
callSign:
| number
| {
1: number;
2: number;
3: number;
name: string;
};
client: boolean;
};
type CampaignGroundGroupState = "en route" | "on objective" | "combat";
type CampaignGroundGroupType = "armor" | "mbt" | "infantry" | "ew" | "sam";
type Airdromes = Record<string, DCS.Airdrome>;
type MapData = {
objectives: Array<Import.Objective>;
strikeTargets: Record<string, StrikeTarget[]>;
airdromes: Airdromes;
info: {
center: {
x: number;
y: number;
};
weather: {
temperature: {
amplitude: number;
mean: number;
};
cloudCover: {
baseCloudCover: number;
seasonEffect: number;
};
wind: {
speed: number;
direction: number;
};
};
night: {
startHour: number;
endHour: number;
};
};
};
declare namespace Enum {
const groundGroupType: readonly ["armor", "mbt", "infantry", "ew"];
const structureTypeDefault: readonly [
"Ammo Depot",
"Farp",
"Command Center",
"Power Plant",
"Fuel Storage",
"Hospital",
"Prison"
];
const structureTypeUnitCamp: readonly ["Barrack", "Depot"];
}
declare namespace Schema {
const coalition: z.ZodEnum<["blue", "red", "neutrals"]>;
const aiSkill: z.ZodEnum<["Average", "Good", "High", "Excellent"]>;
const mapName: z.ZodEnum<
["caucasus", "normandy", "persianGulf", "southAtlantic", "syria"]
>;
const aircraftState: z.ZodEnum<
[
"idle",
"en route",
"on station",
"combat",
"rtb",
"waiting",
"maintenance"
]
>;
const homeBaseType: z.ZodEnum<["airdrome", "farp", "carrier"]>;
const task: z.ZodEnum<
["DEAD", "AWACS", "CAP", "Escort", "Pinpoint Strike", "CAS", "CSAR"]
>;
const pylonType: z.ZodEnum<
["Fuel Tank", "Targeting Pod", "Gun Pod", "ECM Pod", "Other", "Weapon"]
>;
const groundUnitType: z.ZodEnum<
[
"MBT",
"Track Radar",
"Search Radar",
"SAM Launcher",
"Unarmored",
"Armored",
"IFV",
"SHORAD",
"Transport",
"Power Generator",
"Refuel",
"Control Unit",
"EW",
"Infantry"
]
>;
const groundUnitState: z.ZodEnum<["idle", "en route", "on objective"]>;
const groundGroupState: z.ZodEnum<["en route", "on objective", "combat"]>;
const groundGroupType: z.ZodEnum<["armor", "mbt", "infantry", "ew"]>;
const samType: z.ZodEnum<
["SA-10-300", "SA-6", "SA-5", "SA-3", "SA-2", "Hawk"]
>;
const structureState: z.ZodEnum<["active", "destroyed", "deactivated"]>;
const buildingCategory: z.ZodEnum<["Fortifications", "Heliports"]>;
const structureTypeDefault: z.ZodEnum<
[
"Ammo Depot",
"Farp",
"Command Center",
"Power Plant",
"Fuel Storage",
"Hospital",
"Prison"
]
>;
const structureTypeUnitCamp: z.ZodEnum<["Barrack", "Depot"]>;
const structureType: z.ZodEnum<
[
"Ammo Depot",
"Farp",
"Command Center",
"Power Plant",
"Fuel Storage",
"Hospital",
"Prison",
"Barrack",
"Depot"
]
>;
const A2AWeaponType: z.ZodEnum<
["infrared", "active radar", "semi-active radar"]
>;
const A2GWeaponType: z.ZodEnum<
[
"Bomb",
"Cluster",
"Rocket",
"Laser Guided Bomb",
"GPS Guided Bomb",
"TV Guided Bomb",
"Laser Guided Rocket"
]
>;
const A2GRangeWeaponType: z.ZodEnum<
["Missile", "Glide Bomb", "Laser Guided Missile", "Cruise Missile"]
>;
const RangeType: z.ZodEnum<["short", "medium", "long"]>;
const A2GWeaponTarget: z.ZodEnum<
[
"Anti-Armor",
"Hard Target",
"Medium Target",
"Soft Target",
"Ship",
"Radar",
"Light Structure",
"Medium Structure",
"Hard Structure"
]
>;
const WeaponType: z.ZodUnion<
[
z.ZodEnum<["infrared", "active radar", "semi-active radar"]>,
z.ZodEnum<
[
"Bomb",
"Cluster",
"Rocket",
"Laser Guided Bomb",
"GPS Guided Bomb",
"TV Guided Bomb",
"Laser Guided Rocket"
]
>,
z.ZodEnum<
["Missile", "Glide Bomb", "Laser Guided Missile", "Cruise Missile"]
>
]
>;
const faction: z.ZodObject<
{
aircraftTypes: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>;
countryName: z.ZodString;
name: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
playable: z.ZodBoolean;
templateName: z.ZodString;
carrierName: z.ZodOptional<z.ZodString>;
created: z.ZodOptional<z.ZodDate>;
},
"strip",
z.ZodTypeAny,
{
name: string;
aircraftTypes: Record<string, string[]>;
countryName: string;
playable: boolean;
templateName: string;
year?: number | undefined;
carrierName?: string | undefined;
created?: Date | undefined;
},
{
name: string;
aircraftTypes: Record<string, string[]>;
countryName: string;
playable: boolean;
templateName: string;
year?: number | undefined;
carrierName?: string | undefined;
created?: Date | undefined;
}
>;
const factions: z.ZodObject<
{
factions: z.ZodArray<
z.ZodObject<
{
aircraftTypes: z.ZodRecord<
z.ZodString,
z.ZodArray<z.ZodString, "many">
>;
countryName: z.ZodString;
name: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
playable: z.ZodBoolean;
templateName: z.ZodString;
carrierName: z.ZodOptional<z.ZodString>;
created: z.ZodOptional<z.ZodDate>;
},
"strip",
z.ZodTypeAny,
{
name: string;
aircraftTypes: Record<string, string[]>;
countryName: string;
playable: boolean;
templateName: string;
year?: number | undefined;
carrierName?: string | undefined;
created?: Date | undefined;
},
{
name: string;
aircraftTypes: Record<string, string[]>;
countryName: string;
playable: boolean;
templateName: string;
year?: number | undefined;
carrierName?: string | undefined;
created?: Date | undefined;
}
>,
"many"
>;
version: z.ZodLiteral<0>;
},
"strip",
z.ZodTypeAny,
{
version: 0;
factions: {
name: string;
aircraftTypes: Record<string, string[]>;
countryName: string;
playable: boolean;
templateName: string;
year?: number | undefined;
carrierName?: string | undefined;
created?: Date | undefined;
}[];
},
{
version: 0;
factions: {
name: string;
aircraftTypes: Record<string, string[]>;
countryName: string;
playable: boolean;
templateName: string;
year?: number | undefined;
carrierName?: string | undefined;
created?: Date | undefined;
}[];
}
>;
const homeBase: z.ZodObject<
{
type: z.ZodEnum<["airdrome", "farp", "carrier"]>;
name: z.ZodString;
},
"strip",
z.ZodTypeAny,
{
name: string;
type: "airdrome" | "farp" | "carrier";
},
{
name: string;
type: "airdrome" | "farp" | "carrier";
}
>;
const weaponBase: z.ZodObject<
{
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
displayName: string;
year?: number | undefined;
},
{
name: string;
displayName: string;
year?: number | undefined;
}
>;
const a2AWeapon: z.ZodObject<
{
type: z.ZodEnum<["infrared", "active radar", "semi-active radar"]>;
range: z.ZodNumber;
rangeType: z.ZodEnum<["short", "medium", "long"]>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type: "infrared" | "active radar" | "semi-active radar";
displayName: string;
range: number;
rangeType: "short" | "medium" | "long";
year?: number | undefined;
},
{
name: string;
type: "infrared" | "active radar" | "semi-active radar";
displayName: string;
range: number;
rangeType: "short" | "medium" | "long";
year?: number | undefined;
}
>;
const a2GWeapon: z.ZodObject<
{
type: z.ZodEnum<
[
"Bomb",
"Cluster",
"Rocket",
"Laser Guided Bomb",
"GPS Guided Bomb",
"TV Guided Bomb",
"Laser Guided Rocket"
]
>;
target: z.ZodEnum<
[
"Anti-Armor",
"Hard Target",
"Medium Target",
"Soft Target",
"Ship",
"Radar",
"Light Structure",
"Medium Structure",
"Hard Structure"
]
>;
weight: z.ZodOptional<z.ZodNumber>;
highDrag: z.ZodOptional<z.ZodBoolean>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type:
| "Bomb"
| "Cluster"
| "Rocket"
| "Laser Guided Bomb"
| "GPS Guided Bomb"
| "TV Guided Bomb"
| "Laser Guided Rocket";
target:
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure";
displayName: string;
weight?: number | undefined;
highDrag?: boolean | undefined;
year?: number | undefined;
},
{
name: string;
type:
| "Bomb"
| "Cluster"
| "Rocket"
| "Laser Guided Bomb"
| "GPS Guided Bomb"
| "TV Guided Bomb"
| "Laser Guided Rocket";
target:
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure";
displayName: string;
weight?: number | undefined;
highDrag?: boolean | undefined;
year?: number | undefined;
}
>;
const a2GRangeWeapon: z.ZodObject<
{
type: z.ZodEnum<
["Missile", "Glide Bomb", "Laser Guided Missile", "Cruise Missile"]
>;
range: z.ZodNumber;
targets: z.ZodArray<
z.ZodEnum<
[
"Anti-Armor",
"Hard Target",
"Medium Target",
"Soft Target",
"Ship",
"Radar",
"Light Structure",
"Medium Structure",
"Hard Structure"
]
>,
"many"
>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type:
| "Missile"
| "Glide Bomb"
| "Laser Guided Missile"
| "Cruise Missile";
displayName: string;
range: number;
targets: (
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure"
)[];
year?: number | undefined;
},
{
name: string;
type:
| "Missile"
| "Glide Bomb"
| "Laser Guided Missile"
| "Cruise Missile";
displayName: string;
range: number;
targets: (
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure"
)[];
year?: number | undefined;
}
>;
const weapon: z.ZodUnion<
[
z.ZodObject<
{
type: z.ZodEnum<["infrared", "active radar", "semi-active radar"]>;
range: z.ZodNumber;
rangeType: z.ZodEnum<["short", "medium", "long"]>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type: "infrared" | "active radar" | "semi-active radar";
displayName: string;
range: number;
rangeType: "short" | "medium" | "long";
year?: number | undefined;
},
{
name: string;
type: "infrared" | "active radar" | "semi-active radar";
displayName: string;
range: number;
rangeType: "short" | "medium" | "long";
year?: number | undefined;
}
>,
z.ZodObject<
{
type: z.ZodEnum<
[
"Bomb",
"Cluster",
"Rocket",
"Laser Guided Bomb",
"GPS Guided Bomb",
"TV Guided Bomb",
"Laser Guided Rocket"
]
>;
target: z.ZodEnum<
[
"Anti-Armor",
"Hard Target",
"Medium Target",
"Soft Target",
"Ship",
"Radar",
"Light Structure",
"Medium Structure",
"Hard Structure"
]
>;
weight: z.ZodOptional<z.ZodNumber>;
highDrag: z.ZodOptional<z.ZodBoolean>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type:
| "Bomb"
| "Cluster"
| "Rocket"
| "Laser Guided Bomb"
| "GPS Guided Bomb"
| "TV Guided Bomb"
| "Laser Guided Rocket";
target:
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure";
displayName: string;
weight?: number | undefined;
highDrag?: boolean | undefined;
year?: number | undefined;
},
{
name: string;
type:
| "Bomb"
| "Cluster"
| "Rocket"
| "Laser Guided Bomb"
| "GPS Guided Bomb"
| "TV Guided Bomb"
| "Laser Guided Rocket";
target:
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure";
displayName: string;
weight?: number | undefined;
highDrag?: boolean | undefined;
year?: number | undefined;
}
>,
z.ZodObject<
{
type: z.ZodEnum<
["Missile", "Glide Bomb", "Laser Guided Missile", "Cruise Missile"]
>;
range: z.ZodNumber;
targets: z.ZodArray<
z.ZodEnum<
[
"Anti-Armor",
"Hard Target",
"Medium Target",
"Soft Target",
"Ship",
"Radar",
"Light Structure",
"Medium Structure",
"Hard Structure"
]
>,
"many"
>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type:
| "Missile"
| "Glide Bomb"
| "Laser Guided Missile"
| "Cruise Missile";
displayName: string;
range: number;
targets: (
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure"
)[];
year?: number | undefined;
},
{
name: string;
type:
| "Missile"
| "Glide Bomb"
| "Laser Guided Missile"
| "Cruise Missile";
displayName: string;
range: number;
targets: (
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure"
)[];
year?: number | undefined;
}
>
]
>;
const pylon: z.ZodObject<
{
CLSID: z.ZodString;
num: z.ZodNumber;
total: z.ZodNumber;
count: z.ZodNumber;
type: z.ZodEnum<
["Fuel Tank", "Targeting Pod", "Gun Pod", "ECM Pod", "Other", "Weapon"]
>;
weapon: z.ZodOptional<
z.ZodUnion<
[
z.ZodObject<
{
type: z.ZodEnum<
["infrared", "active radar", "semi-active radar"]
>;
range: z.ZodNumber;
rangeType: z.ZodEnum<["short", "medium", "long"]>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type: "infrared" | "active radar" | "semi-active radar";
displayName: string;
range: number;
rangeType: "short" | "medium" | "long";
year?: number | undefined;
},
{
name: string;
type: "infrared" | "active radar" | "semi-active radar";
displayName: string;
range: number;
rangeType: "short" | "medium" | "long";
year?: number | undefined;
}
>,
z.ZodObject<
{
type: z.ZodEnum<
[
"Bomb",
"Cluster",
"Rocket",
"Laser Guided Bomb",
"GPS Guided Bomb",
"TV Guided Bomb",
"Laser Guided Rocket"
]
>;
target: z.ZodEnum<
[
"Anti-Armor",
"Hard Target",
"Medium Target",
"Soft Target",
"Ship",
"Radar",
"Light Structure",
"Medium Structure",
"Hard Structure"
]
>;
weight: z.ZodOptional<z.ZodNumber>;
highDrag: z.ZodOptional<z.ZodBoolean>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type:
| "Bomb"
| "Cluster"
| "Rocket"
| "Laser Guided Bomb"
| "GPS Guided Bomb"
| "TV Guided Bomb"
| "Laser Guided Rocket";
target:
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure";
displayName: string;
weight?: number | undefined;
highDrag?: boolean | undefined;
year?: number | undefined;
},
{
name: string;
type:
| "Bomb"
| "Cluster"
| "Rocket"
| "Laser Guided Bomb"
| "GPS Guided Bomb"
| "TV Guided Bomb"
| "Laser Guided Rocket";
target:
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure";
displayName: string;
weight?: number | undefined;
highDrag?: boolean | undefined;
year?: number | undefined;
}
>,
z.ZodObject<
{
type: z.ZodEnum<
[
"Missile",
"Glide Bomb",
"Laser Guided Missile",
"Cruise Missile"
]
>;
range: z.ZodNumber;
targets: z.ZodArray<
z.ZodEnum<
[
"Anti-Armor",
"Hard Target",
"Medium Target",
"Soft Target",
"Ship",
"Radar",
"Light Structure",
"Medium Structure",
"Hard Structure"
]
>,
"many"
>;
name: z.ZodString;
displayName: z.ZodString;
year: z.ZodOptional<z.ZodNumber>;
},
"strip",
z.ZodTypeAny,
{
name: string;
type:
| "Missile"
| "Glide Bomb"
| "Laser Guided Missile"
| "Cruise Missile";
displayName: string;
range: number;
targets: (
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure"
)[];
year?: number | undefined;
},
{
name: string;
type:
| "Missile"
| "Glide Bomb"
| "Laser Guided Missile"
| "Cruise Missile";
displayName: string;
range: number;
targets: (
| "Anti-Armor"
| "Hard Target"
| "Medium Target"
| "Soft Target"
| "Ship"
| "Radar"
| "Light Structure"
| "Medium Structure"
| "Hard Structure"
)[];
year?: number | undefined;
}
>
]
>
>;
},
"strip",
z.ZodTypeAny,
{
type:
| "Fuel Tank"
| "Targeting Pod"
| "Gun Pod"
| "ECM Pod"
| "Other"
| "Weapon";
CLSID: string;
num: number;
total: number;
count: number;
weapon?:
| {
name: string;
type: "infrared" | "active radar" | "semi-active radar";
displayName: string;
range: number;
rangeType: "short" | "medium" | "long";
year?: number | undefined;
}
| {
name: string;
type:
| "Bomb"
| "Cluster"
| "Rocket"
| "Laser Guided Bomb"
| "GPS Guided Bomb"