@jtff/miztemplate-lib 3.7.9 → 3.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +0 -0
- package/README.md +0 -0
- package/ci/build.js +0 -0
- package/ci/clean.js +0 -0
- package/ci/ftpupload.js +0 -0
- package/ci/gdrive-upload.js +0 -0
- package/ci/get-mizfiles.js +0 -0
- package/ci/getset-version.js +0 -0
- package/ci/inject-scripts.js +0 -0
- package/ci/prepare-nextversion.js +0 -0
- package/ci/release.js +0 -0
- package/ci/template-update.js +0 -0
- package/index.js +0 -0
- package/lib/jtff-lib-ci.js +0 -0
- package/lib/mizlib.js +0 -0
- package/lua/lib/Hercules_Cargo.lua +0 -0
- package/lua/lib/HoundElint.lua +10861 -10861
- package/lua/lib/Moose_.lua +0 -0
- package/lua/lib/Splash_Damage_main.lua +2151 -2151
- package/lua/lib/funkman.lua +0 -0
- package/lua/lib/mist.lua +0 -0
- package/lua/lib/skynet-iads-compiled.lua +0 -0
- package/lua/settings/settings-RAT.lua +0 -0
- package/lua/settings/settings-airboss.lua +0 -0
- package/lua/settings/settings-atis.lua +0 -0
- package/lua/settings/settings-awacs.lua +0 -0
- package/lua/settings/settings-awacsondemand.lua +0 -0
- package/lua/settings/settings-beacons.lua +0 -0
- package/lua/settings/settings-capwarzone.lua +0 -0
- package/lua/settings/settings-capzone.lua +0 -0
- package/lua/settings/settings-elint.lua +0 -0
- package/lua/settings/settings-fac_ranges.lua +0 -0
- package/lua/settings/settings-foxzone.lua +0 -0
- package/lua/settings/settings-funkman.lua +0 -0
- package/lua/settings/settings-global.lua +0 -0
- package/lua/settings/settings-intercept.lua +0 -0
- package/lua/settings/settings-logistics.lua +0 -0
- package/lua/settings/settings-ondemandawacs.lua +0 -0
- package/lua/settings/settings-ondemandtankers.lua +0 -0
- package/lua/settings/settings-pedros.lua +0 -0
- package/lua/settings/settings-qra.lua +24 -24
- package/lua/settings/settings-ranges.lua +0 -0
- package/lua/settings/settings-reapers.lua +0 -0
- package/lua/settings/settings-sams.lua +0 -0
- package/lua/settings/settings-skynet.lua +0 -0
- package/lua/settings/settings-tankers.lua +0 -0
- package/lua/settings/settings-training_ranges.lua +0 -0
- package/lua/src/010-root_menus.lua +0 -0
- package/lua/src/020-mission_functions.lua +10 -11
- package/lua/src/110-set_clients.lua +123 -25
- package/lua/src/120-tankers.lua +3 -3
- package/lua/src/130-airboss.lua +0 -0
- package/lua/src/135-pedro.lua +0 -0
- package/lua/src/140-beacons.lua +0 -0
- package/lua/src/150-awacs.lua +0 -0
- package/lua/src/160-atis.lua +0 -0
- package/lua/src/170-cap_zone_training.lua +0 -0
- package/lua/src/172-cap_zone_war.lua +0 -0
- package/lua/src/173-fox_zone_training.lua +0 -0
- package/lua/src/174-qra-scenario.lua +362 -362
- package/lua/src/176-random_air_traffic.lua +0 -0
- package/lua/src/178-training-intercept.lua +0 -0
- package/lua/src/180-logistics.lua +0 -0
- package/lua/src/190-ranges.lua +0 -0
- package/lua/src/191-sams.lua +0 -0
- package/lua/src/193-training_ranges.lua +0 -0
- package/lua/src/195-reaper-ondemand.lua +0 -0
- package/lua/src/196-fac_ranges.lua +0 -0
- package/lua/src/197-elint-ondemand.lua +0 -0
- package/lua/src/199-skynet.lua +0 -0
- package/lua/src/200-mission.lua +0 -0
- package/package.json +1 -1
- package/resources/radios/Caucasus/354th-caucasus.lua +0 -0
- package/resources/radios/Caucasus/494th-caucasus.lua +0 -0
- package/resources/radios/Caucasus/79th-SUFA-caucasus.lua +0 -0
- package/resources/radios/Caucasus/79th-caucasus.lua +0 -0
- package/resources/radios/Caucasus/ec25-D-caucasus.lua +0 -0
- package/resources/radios/Caucasus/ec25-caucasus.lua +0 -0
- package/resources/radios/Caucasus/vf84-a-caucasus.lua +0 -0
- package/resources/radios/Caucasus/vf84-b-caucasus.lua +0 -0
- package/resources/radios/Caucasus/vfa-131-caucasus.lua +0 -0
- package/resources/radios/Caucasus/vmfa-314-caucasus.lua +0 -0
- package/resources/radios/MarianaIslands/354th-marianas.lua +0 -0
- package/resources/radios/MarianaIslands/494th-marianas.lua +0 -0
- package/resources/radios/MarianaIslands/79th-marianas.lua +0 -0
- package/resources/radios/MarianaIslands/ec25-marianas.lua +0 -0
- package/resources/radios/MarianaIslands/vf84-a-marianas.lua +0 -0
- package/resources/radios/MarianaIslands/vf84-b-marianas.lua +0 -0
- package/resources/radios/MarianaIslands/vfa-131-marianas.lua +0 -0
- package/resources/radios/MarianaIslands/vmfa-314-marianas.lua +0 -0
- package/resources/radios/Nevada/354th-nttr.lua +0 -0
- package/resources/radios/Nevada/494th-nttr.lua +0 -0
- package/resources/radios/Nevada/79th-nttr.lua +0 -0
- package/resources/radios/Nevada/ec25-nttr.lua +0 -0
- package/resources/radios/Nevada/vf84-a-nttr.lua +0 -0
- package/resources/radios/Nevada/vf84-b-nttr.lua +0 -0
- package/resources/radios/Nevada/vfa-131-nttr.lua +0 -0
- package/resources/radios/Nevada/vmfa-314-nttr.lua +0 -0
- package/resources/radios/PersianGulf/354th-persian.lua +0 -0
- package/resources/radios/PersianGulf/3_30-persian.lua +0 -0
- package/resources/radios/PersianGulf/494th-persian.lua +0 -0
- package/resources/radios/PersianGulf/79th-persian.lua +0 -0
- package/resources/radios/PersianGulf/ec25-persian.lua +0 -0
- package/resources/radios/PersianGulf/vf84-a-persian.lua +0 -0
- package/resources/radios/PersianGulf/vf84-b-persian.lua +0 -0
- package/resources/radios/PersianGulf/vfa-131-persian.lua +0 -0
- package/resources/radios/PersianGulf/vmfa-314-persian.lua +0 -0
- package/resources/radios/SinaiMap/354th-sinai.lua +0 -0
- package/resources/radios/SinaiMap/494th-sinai.lua +0 -0
- package/resources/radios/SinaiMap/79th-SUFA-sinai.lua +0 -0
- package/resources/radios/SinaiMap/79th-sinai.lua +0 -0
- package/resources/radios/SinaiMap/ec25-D-sinai.lua +0 -0
- package/resources/radios/SinaiMap/ec25-sinai.lua +0 -0
- package/resources/radios/SinaiMap/vf84-a-sinai.lua +0 -0
- package/resources/radios/SinaiMap/vf84-b-sinai.lua +0 -0
- package/resources/radios/SinaiMap/vfa-131-sinai.lua +0 -0
- package/resources/radios/SinaiMap/vmfa-314-sinai.lua +0 -0
- package/resources/radios/Syria/354th-syria.lua +0 -0
- package/resources/radios/Syria/494th-syria.lua +0 -0
- package/resources/radios/Syria/79th-SUFA-syria.lua +0 -0
- package/resources/radios/Syria/79th-syria.lua +0 -0
- package/resources/radios/Syria/ec25-D-syria.lua +0 -0
- package/resources/radios/Syria/ec25-syria.lua +0 -0
- package/resources/radios/Syria/vf84-a-syria.lua +0 -0
- package/resources/radios/Syria/vf84-b-syria.lua +0 -0
- package/resources/radios/Syria/vfa-131-syria.lua +0 -0
- package/resources/radios/Syria/vmfa-314-syria.lua +0 -0
- package/resources/sounds/AICSAR/helodown.ogg +0 -0
- package/resources/sounds/AICSAR/initialnotok.ogg +0 -0
- package/resources/sounds/AICSAR/initialok.ogg +0 -0
- package/resources/sounds/AICSAR/pilotdown.ogg +0 -0
- package/resources/sounds/AICSAR/pilotinhelo.ogg +0 -0
- package/resources/sounds/AICSAR/pilotkia.ogg +0 -0
- package/resources/sounds/AICSAR/pilotrescued.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/AIRBOSS-Noise.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/AIRBOSS-RadioClick.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/AIRBOSS-SpinIt.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-BolterBolter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-CallTheBall.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Check.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-ClearedToLand.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-ComeLeft.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-ComeLeft_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-DepartAndReenter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-ExpectHeavyWaveoff.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-ExpectSpot5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-ExpectSpot75.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Fast.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Fast_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-FoulDeck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-High.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-High_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Idle.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-LongInTheGroove.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Low.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Low_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-PaddlesContact.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Power.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Power_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-RadioCheck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-RightForLineup.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-RightForLineup_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-RogerBall.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Slow.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Slow_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-Stabilized.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-WaveOff.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/LSO-WelcomeAboard.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Affirmative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Altimeter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-BRC.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-CarrierTurnToHeading.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Case.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-CharlieTime.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-ClearedForRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-DeckClosed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Degrees.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Expected.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-FlyYourNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-HoldAtAngels.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Hours.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-MarshalRadial.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Negative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-NewFB.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Ops.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Point.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-RadioCheck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Recovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-RecoveryOpsStopped.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-RecoveryPausedNotice.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-RecoveryPausedResumed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-ReportSeeMe.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-ResumeRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-Roger.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-SayNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-StackFull.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/MARSHAL-StartingRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Angels.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Ball.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-BingoFuel.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Commencing.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-For.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-GasAtDivert.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-GasAtTanker.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Harrier.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Hawkeye.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Hornet.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-MarkingMoms.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Marshal.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Point.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Skyhawk.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-State.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Tomcat.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundfiles/PILOT-Viking.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-BolterBolter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-CallTheBall.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Check.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-ClearedToLand.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-ComeLeft.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-ComeLeft_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-DepartAndReenter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-ExpectHeavyWaveoff.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-ExpectSpot5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-ExpectSpot75.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Fast.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Fast_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-FoulDeck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-High.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-High_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Idle.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-LongInTheGroove.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Low.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Low_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-PaddlesContact.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Power.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Power_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-RadioCheck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-RightForLineup.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-RightForLineup_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-RogerBall.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Slow.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Slow_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-Stabilized.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-WaveOff.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO FF/LSO-WelcomeAboard.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-BolterBolter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-CallTheBall.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Check.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-ClearedToLand.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-ComeLeft.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-ComeLeft_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-DepartAndReenter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-ExpectHeavyWaveoff.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-ExpectSpot5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-ExpectSpot75.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Fast.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Fast_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-FoulDeck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-High.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-High_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Idle.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-LongInTheGroove.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Low.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Low_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-PaddlesContact.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Power.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Power_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-RadioCheck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-RightForLineup.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-RightForLineup_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-RogerBall.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Slow.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Slow_Loud.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-Stabilized.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-WaveOff.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack LSO Raynor/LSO-WelcomeAboard.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Affirmative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Altimeter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-BRC.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-CarrierTurnToHeading.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Case.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-CharlieTime.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-ClearedForRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-DeckClosed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Degrees.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Expected.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-FlyYourNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-HoldAtAngels.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Hours.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-MarshalRadial.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Negative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-NewFB.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Ops.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Point.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-RadioCheck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Recovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-RecoveryOpsStopped.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-RecoveryPausedNotice.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-RecoveryPausedResumed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-ReportSeeMe.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-ResumeRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-Roger.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-SayNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-StackFull.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal FF/MARSHAL-StartingRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Affirmative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Altimeter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-BRC.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-CarrierTurnToHeading.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Case.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-CharlieTime.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-ClearedForRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-DeckClosed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Degrees.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Expected.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-FlyYourNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-HoldAtAngels.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Hours.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-MarshalRadial.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Negative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-NewFB.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Ops.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Point.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-RadioCheck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Recovery-2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Recovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-RecoveryOpsStopped.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-RecoveryPausedNotice.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-RecoveryPausedResumed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-ReportSeeMe.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-ResumeRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-Roger.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-SayNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-StackFull.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Gabriella/MARSHAL-StartingRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Affirmative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Altimeter.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-BRC.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-CarrierTurnToHeading.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Case.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-CharlieTime.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-ClearedForRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-DeckClosed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Degrees.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Expected.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-FlyYourNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-HoldAtAngels.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Hours.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-MarshalRadial.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N0.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N1.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N2.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N3.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N4.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N5.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N6.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N7.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N8.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-N9.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Negative.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-NewFB.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Ops.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Point.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-RadioCheck.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Recovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-RecoveryOpsStopped.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-RecoveryPausedNotice.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-RecoveryPausedResumed.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-ReportSeeMe.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-ResumeRecovery.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-Roger.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-SayNeedles.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-StackFull.ogg +0 -0
- package/resources/sounds/AIRBOSS/Airboss Soundpack Marshal Raynor/MARSHAL-StartingRecovery.ogg +0 -0
- package/resources/sounds/CTLD CSAR/beacon.ogg +0 -0
- package/resources/sounds/CTLD CSAR/beaconsilent.ogg +0 -0
- package/resources/sounds/Misc/.gitkeep +0 -0
- package/resources/sounds/Misc/2_Bips.ogg +0 -0
- package/resources/sounds/Misc/Bip.ogg +0 -0
- package/resources/sounds/Misc/SCRAMBLE QRA.ogg +0 -0
- package/resources/sounds/Misc/crash_wood.ogg +0 -0
- package/scripts/build.js +0 -0
- package/scripts/clean.js +0 -0
- package/scripts/ftpupload.js +0 -0
- package/scripts/gdrive-upload.js +0 -0
- package/scripts/get-mizfiles.js +0 -0
- package/scripts/getset-version.js +0 -0
- package/scripts/inject-scripts.js +0 -0
- package/scripts/prepare-nextversion.js +0 -0
- package/scripts/release.js +0 -0
- package/scripts/template-update.js +0 -0
|
@@ -1,363 +1,363 @@
|
|
|
1
|
-
function playQRASoundToClient(client, time)
|
|
2
|
-
soundQRA:ToClient(client)
|
|
3
|
-
return nil
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
function QRALaunchBogey(params)
|
|
7
|
-
local objQRA = params[1]
|
|
8
|
-
local trigerringUnitName = params[2]
|
|
9
|
-
local QRAIndex = params[3]
|
|
10
|
-
local playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
11
|
-
local playerCoord = playerClient:GetCoordinate()
|
|
12
|
-
local bogeyGroup = nil
|
|
13
|
-
local bogeyRouteLengthNM = 200
|
|
14
|
-
local bogeyRangeMin = 100
|
|
15
|
-
local bogeyRangeMax = 300
|
|
16
|
-
local bogeyFLMin = 5
|
|
17
|
-
local bogeyFLMax = 250
|
|
18
|
-
local bogeyAzimuthMin = 0
|
|
19
|
-
local bogeyAzimuthMax = 359
|
|
20
|
-
local bogeyGroundSpeedKnots = 600
|
|
21
|
-
local bogeyAzimuth = math.floor(
|
|
22
|
-
math.random(
|
|
23
|
-
UTILS.FeetToMeters(bogeyAzimuthMin),
|
|
24
|
-
UTILS.FeetToMeters(bogeyAzimuthMax)
|
|
25
|
-
)
|
|
26
|
-
)
|
|
27
|
-
local bogeyFL = math.floor(
|
|
28
|
-
math.random(
|
|
29
|
-
UTILS.FeetToMeters(bogeyFLMin * 100),
|
|
30
|
-
UTILS.FeetToMeters(bogeyFLMax * 100)
|
|
31
|
-
)
|
|
32
|
-
)
|
|
33
|
-
local bogeyRangeMeters = math.floor(
|
|
34
|
-
math.random(
|
|
35
|
-
UTILS.NMToMeters(bogeyRangeMin),
|
|
36
|
-
UTILS.NMToMeters(bogeyRangeMax)
|
|
37
|
-
)
|
|
38
|
-
)
|
|
39
|
-
local bogeySpawnObj = QRAArray[QRAIndex].objSpawn
|
|
40
|
-
local bogeyCoord = POINT_VEC3:NewFromVec3(
|
|
41
|
-
{
|
|
42
|
-
x = playerCoord.x + math.floor(bogeyRangeMeters * math.cos(math.rad(bogeyAzimuth))),
|
|
43
|
-
y = math.max(
|
|
44
|
-
math.min(
|
|
45
|
-
bogeyFL,
|
|
46
|
-
UTILS.FeetToMeters(32000)
|
|
47
|
-
),
|
|
48
|
-
UTILS.FeetToMeters(500)
|
|
49
|
-
),
|
|
50
|
-
z = playerCoord.z + math.floor(bogeyRangeMeters * math.sin(math.rad(bogeyAzimuth))),
|
|
51
|
-
}
|
|
52
|
-
)
|
|
53
|
-
local bogeyDestination = playerCoord:GetRandomCoordinateInRadius(
|
|
54
|
-
UTILS.NMToMeters(10),
|
|
55
|
-
UTILS.NMToMeters(60)
|
|
56
|
-
)
|
|
57
|
-
local bogeyHeading = bogeyCoord:HeadingTo(bogeyDestination)
|
|
58
|
-
jtff_log.info(
|
|
59
|
-
string.format(
|
|
60
|
-
"Spawning bogey based on %s with Heading of %i degrees",
|
|
61
|
-
bogeySpawnObj.SpawnTemplatePrefix,
|
|
62
|
-
bogeyHeading
|
|
63
|
-
),
|
|
64
|
-
"QRA"
|
|
65
|
-
)
|
|
66
|
-
bogeyGroup = bogeySpawnObj:InitHeading(bogeyHeading):SpawnFromVec3(bogeyCoord)
|
|
67
|
-
bogeyGroup:OptionROE(ENUMS.ROE.WeaponHold)
|
|
68
|
-
bogeyGroup:OptionROT(ENUMS.ROT.NoReaction)
|
|
69
|
-
bogeyGroup:OptionRTBBingoFuel(true)
|
|
70
|
-
bogeyGroup:OptionRestrictBurner(false)
|
|
71
|
-
bogeyGroup:EnableEmission(false)
|
|
72
|
-
bogeyGroup:OptionAlarmStateGreen()
|
|
73
|
-
bogeyGroup:OptionECM_Never()
|
|
74
|
-
bogeyGroup:CommandEPLRS(true)
|
|
75
|
-
local bogeyDestinationCoord = bogeyGroup:GetCoordinate():Translate(
|
|
76
|
-
UTILS.NMToMeters(bogeyRouteLengthNM),
|
|
77
|
-
bogeyHeading,
|
|
78
|
-
true,
|
|
79
|
-
false
|
|
80
|
-
)
|
|
81
|
-
bogeyGroup:Route(
|
|
82
|
-
{
|
|
83
|
-
bogeyDestinationCoord:WaypointAirTurningPoint(
|
|
84
|
-
COORDINATE.WaypointAltType.BARO,
|
|
85
|
-
UTILS.KnotsToKmph(bogeyGroundSpeedKnots),
|
|
86
|
-
nil,
|
|
87
|
-
"End QRA"
|
|
88
|
-
),
|
|
89
|
-
bogeyDestinationCoord:GetClosestAirbase(
|
|
90
|
-
--bogeyGroup:GetCategory(),
|
|
91
|
-
--bogeyGroup:GetCoalition()
|
|
92
|
-
):GetCoordinate():WaypointAirLanding(
|
|
93
|
-
UTILS.KnotsToKmph(bogeyGroundSpeedKnots),
|
|
94
|
-
bogeyDestinationCoord:GetClosestAirbase(
|
|
95
|
-
--bogeyGroup:GetCategory(),
|
|
96
|
-
--bogeyGroup:GetCoalition()
|
|
97
|
-
)
|
|
98
|
-
)
|
|
99
|
-
}
|
|
100
|
-
)
|
|
101
|
-
return bogeyGroup
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
function QRATrigger(params)
|
|
105
|
-
local objQRA = params[1]
|
|
106
|
-
local trigerringUnitName = params[2]
|
|
107
|
-
local QRAIndex = params[3]
|
|
108
|
-
local msgTriggeredGround = ""
|
|
109
|
-
local msgTriggeredOthers = ""
|
|
110
|
-
local triggerPlayerName = ""
|
|
111
|
-
if (objQRA.customconfig.type == JTFF_QRA.Type.TangoAuto) then
|
|
112
|
-
local playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
113
|
-
local playerName = playerClient:GetPlayer()
|
|
114
|
-
triggerPlayerName = playerName
|
|
115
|
-
local playerCoord = playerClient:GetCoordinate()
|
|
116
|
-
QRAArray[QRAIndex].objBogeyGroup = QRALaunchBogey(params)
|
|
117
|
-
local bullsCoord = COORDINATE.GetBullseyeCoordinate(objQRA.customconfig.benefit_coalition)
|
|
118
|
-
local bogeyCoord = QRAArray[QRAIndex].objBogeyGroup:GetCoordinate()
|
|
119
|
-
local bullsBearing = math.floor(bullsCoord:HeadingTo(bogeyCoord))
|
|
120
|
-
local bullsRange = math.floor(UTILS.MetersToNM(bullsCoord:Get2DDistance(bogeyCoord)))
|
|
121
|
-
local bogeyAngel = math.floor(UTILS.MetersToFeet(QRAArray[QRAIndex].objBogeyGroup:GetAltitude(false))/1000)
|
|
122
|
-
local bogeyApproxDestination = playerCoord:GetClosestAirbase():GetName()
|
|
123
|
-
jtff_log.info(
|
|
124
|
-
string.format(
|
|
125
|
-
"Bogey Spawned based on %s",
|
|
126
|
-
QRAArray[QRAIndex].objSpawn.SpawnTemplatePrefix
|
|
127
|
-
),
|
|
128
|
-
"QRA"
|
|
129
|
-
)
|
|
130
|
-
jtff_log.info(
|
|
131
|
-
string.format("Bogey is Bulls %i for %i Angel %i, tracking to %s",
|
|
132
|
-
bullsBearing,
|
|
133
|
-
bullsRange,
|
|
134
|
-
bogeyAngel,
|
|
135
|
-
bogeyApproxDestination
|
|
136
|
-
),
|
|
137
|
-
"QRA"
|
|
138
|
-
)
|
|
139
|
-
local formatString = "QRA %s has been triggered by %s!\n" ..
|
|
140
|
-
"Type is : %s\n" ..
|
|
141
|
-
"Bogey is Bulls %i for %i Angel %i, tracking %s\n" ..
|
|
142
|
-
"If you're on Alert," ..
|
|
143
|
-
" you have 10 minutes to take-off and intercept the bogey.\n" ..
|
|
144
|
-
"If you're not, please give %s priority on the taxiway.\n"
|
|
145
|
-
msgTriggeredGround = string.format(
|
|
146
|
-
formatString,
|
|
147
|
-
objQRA.customconfig.name,
|
|
148
|
-
playerName,
|
|
149
|
-
objQRA.customconfig.type,
|
|
150
|
-
bullsBearing,
|
|
151
|
-
bullsRange,
|
|
152
|
-
bogeyAngel,
|
|
153
|
-
bogeyApproxDestination,
|
|
154
|
-
playerName
|
|
155
|
-
)
|
|
156
|
-
formatString = "<WARNING> : QRA Triggered by %s!\n" ..
|
|
157
|
-
"A Bogey is approaching %s, " ..
|
|
158
|
-
"stay away from the interception area\n" ..
|
|
159
|
-
"...\n" ..
|
|
160
|
-
"Bogey last position : Bulls %i for %i Angel %i, tracking to %s"
|
|
161
|
-
msgTriggeredOthers = string.format(formatString,
|
|
162
|
-
playerName,
|
|
163
|
-
playerCoord:GetClosestAirbase():GetName(),
|
|
164
|
-
bullsBearing,
|
|
165
|
-
bullsRange,
|
|
166
|
-
bogeyAngel,
|
|
167
|
-
bogeyApproxDestination
|
|
168
|
-
)
|
|
169
|
-
elseif (objQRA.customconfig.type == JTFF_QRA.Type.TangoManual) then
|
|
170
|
-
local playerClient
|
|
171
|
-
local playerName
|
|
172
|
-
local playerCoord
|
|
173
|
-
if type(trigerringUnitName) == 'nil' then
|
|
174
|
-
playerName = "GameMaster"
|
|
175
|
-
playerClient = nil
|
|
176
|
-
playerCoord = COORDINATE.GetBullseyeCoordinate(objQRA.customconfig.benefit_coalition)
|
|
177
|
-
else
|
|
178
|
-
playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
179
|
-
playerName = playerClient:GetPlayer()
|
|
180
|
-
playerCoord = playerClient:GetCoordinate()
|
|
181
|
-
end
|
|
182
|
-
triggerPlayerName = playerName
|
|
183
|
-
local formatString = "QRA %s has been triggered by %s !\n" ..
|
|
184
|
-
"Type is : %s\n" ..
|
|
185
|
-
"If you're on Alert," ..
|
|
186
|
-
" you have 10 minutes to take-off and start intercepting the the bogey.\n" ..
|
|
187
|
-
"You are cleared to start and wait your AIC for scramble information\n\n\n" ..
|
|
188
|
-
"If you're not on alert, please monitor the ground frequency" ..
|
|
189
|
-
" and let the scramble flight taxi in highest priority..."
|
|
190
|
-
msgTriggeredGround = string.format(
|
|
191
|
-
formatString,
|
|
192
|
-
objQRA.customconfig.name,
|
|
193
|
-
playerName,
|
|
194
|
-
objQRA.customconfig.type
|
|
195
|
-
)
|
|
196
|
-
formatString = "<WARNING> : QRA Training triggered by %s!\n" ..
|
|
197
|
-
"Stay away from the interception area (%s)\n" ..
|
|
198
|
-
"...\n" ..
|
|
199
|
-
"Keep monitoring your tactical frequency" ..
|
|
200
|
-
" for information about the Scramble procedure"
|
|
201
|
-
msgTriggeredOthers = string.format(formatString,
|
|
202
|
-
playerName,
|
|
203
|
-
type(playerClient) ~= 'nil' and playerCoord:ToStringMGRS() or ""
|
|
204
|
-
)
|
|
205
|
-
elseif (objQRA.customconfig.type == JTFF_QRA.Type.Alpha) then
|
|
206
|
-
local playerClient
|
|
207
|
-
local playerName
|
|
208
|
-
local playerCoord
|
|
209
|
-
if type(trigerringUnitName) == 'nil' then
|
|
210
|
-
playerName = "GameMaster"
|
|
211
|
-
playerClient = nil
|
|
212
|
-
playerCoord = COORDINATE.GetBullseyeCoordinate(objQRA.customconfig.benefit_coalition)
|
|
213
|
-
else
|
|
214
|
-
playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
215
|
-
playerName = playerClient:GetPlayer()
|
|
216
|
-
playerCoord = playerClient:GetCoordinate()
|
|
217
|
-
end
|
|
218
|
-
triggerPlayerName = playerName
|
|
219
|
-
local formatString = "QRA %s has been triggered by %s !\n" ..
|
|
220
|
-
"Type is : %s\n" ..
|
|
221
|
-
"If you're on Alert," ..
|
|
222
|
-
" you have 10 minutes to take-off and start intercepting the the bogey.\n" ..
|
|
223
|
-
"You are cleared to start and wait your AIC for scramble information\n\n\n" ..
|
|
224
|
-
"If you're not on alert, please monitor the ground frequency" ..
|
|
225
|
-
" and let the scramble flight taxi in highest priority..."
|
|
226
|
-
msgTriggeredGround = string.format(
|
|
227
|
-
formatString,
|
|
228
|
-
objQRA.customconfig.name,
|
|
229
|
-
playerName,
|
|
230
|
-
objQRA.customconfig.type
|
|
231
|
-
)
|
|
232
|
-
formatString = "<WARNING> : QRA Triggered by %s!\n" ..
|
|
233
|
-
"Stay away from the interception area (%s)\n" ..
|
|
234
|
-
"...\n" ..
|
|
235
|
-
"Keep monitoring your tactical frequency" ..
|
|
236
|
-
" for information about the Scramble procedure"
|
|
237
|
-
msgTriggeredOthers = string.format(formatString,
|
|
238
|
-
playerName,
|
|
239
|
-
type(playerClient) ~= 'nil' and playerCoord:ToStringMGRS() or ""
|
|
240
|
-
)
|
|
241
|
-
else
|
|
242
|
-
end
|
|
243
|
-
objQRA.clientSet:ForEachClient(
|
|
244
|
-
function(clientObject)
|
|
245
|
-
if ClientIsOnGround(clientObject) then
|
|
246
|
-
playQRASoundToClient(clientObject)
|
|
247
|
-
timer.scheduleFunction(
|
|
248
|
-
playQRASoundToClient,
|
|
249
|
-
clientObject,
|
|
250
|
-
timer.getTime() + 17
|
|
251
|
-
)
|
|
252
|
-
MESSAGE:New(msgTriggeredGround,60):ToClient(clientObject)
|
|
253
|
-
end
|
|
254
|
-
end
|
|
255
|
-
)
|
|
256
|
-
MESSAGE:New(msgTriggeredOthers,30):ToCoalition(objQRA.customconfig.benefit_coalition)
|
|
257
|
-
QRAArray[QRAIndex].menu_finex[QRAArray[QRAIndex].customconfig.benefit_coalition] = MENU_COALITION_COMMAND:New(
|
|
258
|
-
QRAArray[QRAIndex].customconfig.benefit_coalition,
|
|
259
|
-
"FinEx - " .. QRAArray[QRAIndex].customconfig.name .. " !!",
|
|
260
|
-
MenuCoalitionQRA[QRAArray[QRAIndex].customconfig.benefit_coalition],
|
|
261
|
-
QRAFinex,
|
|
262
|
-
QRAIndex
|
|
263
|
-
)
|
|
264
|
-
if (type(dcsbot) ~= 'nil') then
|
|
265
|
-
local title = string.format('QRA triggered !')
|
|
266
|
-
local description = string.format("[%s] triggered a QRA scenario : All QRA pilots, startup and scramble following the procedure",triggerPlayerName)
|
|
267
|
-
local img = 'https://www.defense.gouv.fr/sites/default/files/styles/16_9_sm/public/air/22_09_2023_13.jpeg?itok=n_MPmvZc'
|
|
268
|
-
local fields = {
|
|
269
|
-
['Trigger'] = triggerPlayerName,
|
|
270
|
-
['Type'] = QRAArray[QRAIndex].customconfig.type,
|
|
271
|
-
['Coalition'] = UTILS.GetCoalitionName(QRAArray[QRAIndex].customconfig.benefit_coalition),
|
|
272
|
-
}
|
|
273
|
-
local footer = 'Scramble scramble scramble...'
|
|
274
|
-
dcsbot.sendEmbed(title, description, img, fields, footer)
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
function QRAFinex(objQRAIndex)
|
|
279
|
-
local objQRA = QRAArray[objQRAIndex]
|
|
280
|
-
if objQRA.customconfig.type == JTFF_QRA.Type.TangoAuto then
|
|
281
|
-
jtff_log.trace(string.format("objQRA.objSpawn is %s", net.lua2json(objQRA.objSpawn)),"QRA")
|
|
282
|
-
local GroupPlane, Index = objQRA.objSpawn:GetFirstAliveGroup()
|
|
283
|
-
while GroupPlane ~= nil do
|
|
284
|
-
GroupPlane:ScheduleStop()
|
|
285
|
-
GroupPlane:Destroy(true,0)
|
|
286
|
-
GroupPlane, Index = objQRA.objSpawn:GetNextAliveGroup( Index )
|
|
287
|
-
end
|
|
288
|
-
collectgarbage()
|
|
289
|
-
end
|
|
290
|
-
QRAArray[objQRAIndex].menu_finex[QRAArray[objQRAIndex].customconfig.benefit_coalition]:Remove()
|
|
291
|
-
QRAArray[objQRAIndex].menu_finex[QRAArray[objQRAIndex].customconfig.benefit_coalition] = nil
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
-- *****************************************************************************
|
|
297
|
-
-- ** QRA **
|
|
298
|
-
-- *********************************************************
|
|
299
|
-
QRAArray = {}
|
|
300
|
-
compteur = 0
|
|
301
|
-
MenuCoalitionQRA = {}
|
|
302
|
-
MenuCoalitionQRA[coalition.side.BLUE] = MENU_COALITION:New(coalition.side.BLUE, "QRA", MenuCoalitionBlue)
|
|
303
|
-
MenuCoalitionQRA[coalition.side.RED] = MENU_COALITION:New(coalition.side.RED, "QRA", MenuCoalitionRed)
|
|
304
|
-
for index, qraconfig in ipairs(QRAConfig) do
|
|
305
|
-
if qraconfig.enable == true then
|
|
306
|
-
compteur = compteur + 1
|
|
307
|
-
jtff_log.info('creation QRA : '.. qraconfig.name..'...',"QRA")
|
|
308
|
-
local objQRA = {
|
|
309
|
-
customconfig = {},
|
|
310
|
-
clientSet = nil,
|
|
311
|
-
objSpawn = nil,
|
|
312
|
-
objBogeyGroup = nil,
|
|
313
|
-
menu = {},
|
|
314
|
-
menu_finex = {},
|
|
315
|
-
}
|
|
316
|
-
if ( qraconfig.type == JTFF_QRA.Type.TangoAuto) then
|
|
317
|
-
objQRA.objSpawn = SPAWN:New(qraconfig.templates[1])
|
|
318
|
-
:InitSkill(qraconfig.skill)
|
|
319
|
-
:InitRandomizeTemplate(qraconfig.templates or {})
|
|
320
|
-
end
|
|
321
|
-
objQRA.clientSet = SET_CLIENT:New()
|
|
322
|
-
:FilterCoalitions(string.lower(UTILS.GetCoalitionName(qraconfig.benefit_coalition)))
|
|
323
|
-
:FilterCategories("plane")
|
|
324
|
-
:FilterActive(true)
|
|
325
|
-
:FilterFunction(ClientIsOnGround)
|
|
326
|
-
:FilterStart()
|
|
327
|
-
objQRA.clientSet:HandleEvent(EVENTS.PlayerEnterAircraft)
|
|
328
|
-
jtff_log.debug(string.format("Nbr Clients getting QRA Calls : %i", objQRA.clientSet:Count()),"QRA")
|
|
329
|
-
|
|
330
|
-
function objQRA.clientSet:OnEventPlayerEnterAircraft(EventData)
|
|
331
|
-
local clientObject = CLIENT:Find(EventData.IniUnit:GetDCSObject())
|
|
332
|
-
if ClientIsOnGround(clientObject) then
|
|
333
|
-
--self:Add(clientObject:GetPlayer(), clientObject)
|
|
334
|
-
jtff_log.debug(string.format("Added %s to QRA receivers", clientObject:GetPlayer() or ""),"QRA")
|
|
335
|
-
jtff_log.debug(string.format("Nbr Clients getting QRA Calls : %i", objQRA.clientSet:Count()),"QRA")
|
|
336
|
-
end
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
if ( qraconfig.type ~= JTFF_QRA.Type.TangoAuto) then
|
|
340
|
-
objQRA.menu[qraconfig.benefit_coalition] = MENU_COALITION_COMMAND:New(
|
|
341
|
-
qraconfig.benefit_coalition,
|
|
342
|
-
"Trigger " .. qraconfig.name,
|
|
343
|
-
MenuCoalitionQRA[qraconfig.benefit_coalition],
|
|
344
|
-
QRATrigger,
|
|
345
|
-
{
|
|
346
|
-
objQRA,
|
|
347
|
-
nil,
|
|
348
|
-
index,
|
|
349
|
-
}
|
|
350
|
-
)
|
|
351
|
-
end
|
|
352
|
-
|
|
353
|
-
objQRA.customconfig = qraconfig
|
|
354
|
-
|
|
355
|
-
QRAArray[compteur] = objQRA
|
|
356
|
-
end
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
if compteur == 0 then
|
|
360
|
-
MenuCoalitionQRA[coalition.side.BLUE]:Remove()
|
|
361
|
-
MenuCoalitionQRA[coalition.side.RED]:Remove()
|
|
362
|
-
MenuCoalitionQRA = {}
|
|
1
|
+
function playQRASoundToClient(client, time)
|
|
2
|
+
soundQRA:ToClient(client)
|
|
3
|
+
return nil
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
function QRALaunchBogey(params)
|
|
7
|
+
local objQRA = params[1]
|
|
8
|
+
local trigerringUnitName = params[2]
|
|
9
|
+
local QRAIndex = params[3]
|
|
10
|
+
local playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
11
|
+
local playerCoord = playerClient:GetCoordinate()
|
|
12
|
+
local bogeyGroup = nil
|
|
13
|
+
local bogeyRouteLengthNM = 200
|
|
14
|
+
local bogeyRangeMin = 100
|
|
15
|
+
local bogeyRangeMax = 300
|
|
16
|
+
local bogeyFLMin = 5
|
|
17
|
+
local bogeyFLMax = 250
|
|
18
|
+
local bogeyAzimuthMin = 0
|
|
19
|
+
local bogeyAzimuthMax = 359
|
|
20
|
+
local bogeyGroundSpeedKnots = 600
|
|
21
|
+
local bogeyAzimuth = math.floor(
|
|
22
|
+
math.random(
|
|
23
|
+
UTILS.FeetToMeters(bogeyAzimuthMin),
|
|
24
|
+
UTILS.FeetToMeters(bogeyAzimuthMax)
|
|
25
|
+
)
|
|
26
|
+
)
|
|
27
|
+
local bogeyFL = math.floor(
|
|
28
|
+
math.random(
|
|
29
|
+
UTILS.FeetToMeters(bogeyFLMin * 100),
|
|
30
|
+
UTILS.FeetToMeters(bogeyFLMax * 100)
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
local bogeyRangeMeters = math.floor(
|
|
34
|
+
math.random(
|
|
35
|
+
UTILS.NMToMeters(bogeyRangeMin),
|
|
36
|
+
UTILS.NMToMeters(bogeyRangeMax)
|
|
37
|
+
)
|
|
38
|
+
)
|
|
39
|
+
local bogeySpawnObj = QRAArray[QRAIndex].objSpawn
|
|
40
|
+
local bogeyCoord = POINT_VEC3:NewFromVec3(
|
|
41
|
+
{
|
|
42
|
+
x = playerCoord.x + math.floor(bogeyRangeMeters * math.cos(math.rad(bogeyAzimuth))),
|
|
43
|
+
y = math.max(
|
|
44
|
+
math.min(
|
|
45
|
+
bogeyFL,
|
|
46
|
+
UTILS.FeetToMeters(32000)
|
|
47
|
+
),
|
|
48
|
+
UTILS.FeetToMeters(500)
|
|
49
|
+
),
|
|
50
|
+
z = playerCoord.z + math.floor(bogeyRangeMeters * math.sin(math.rad(bogeyAzimuth))),
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
local bogeyDestination = playerCoord:GetRandomCoordinateInRadius(
|
|
54
|
+
UTILS.NMToMeters(10),
|
|
55
|
+
UTILS.NMToMeters(60)
|
|
56
|
+
)
|
|
57
|
+
local bogeyHeading = bogeyCoord:HeadingTo(bogeyDestination)
|
|
58
|
+
jtff_log.info(
|
|
59
|
+
string.format(
|
|
60
|
+
"Spawning bogey based on %s with Heading of %i degrees",
|
|
61
|
+
bogeySpawnObj.SpawnTemplatePrefix,
|
|
62
|
+
bogeyHeading
|
|
63
|
+
),
|
|
64
|
+
"QRA"
|
|
65
|
+
)
|
|
66
|
+
bogeyGroup = bogeySpawnObj:InitHeading(bogeyHeading):SpawnFromVec3(bogeyCoord)
|
|
67
|
+
bogeyGroup:OptionROE(ENUMS.ROE.WeaponHold)
|
|
68
|
+
bogeyGroup:OptionROT(ENUMS.ROT.NoReaction)
|
|
69
|
+
bogeyGroup:OptionRTBBingoFuel(true)
|
|
70
|
+
bogeyGroup:OptionRestrictBurner(false)
|
|
71
|
+
bogeyGroup:EnableEmission(false)
|
|
72
|
+
bogeyGroup:OptionAlarmStateGreen()
|
|
73
|
+
bogeyGroup:OptionECM_Never()
|
|
74
|
+
bogeyGroup:CommandEPLRS(true)
|
|
75
|
+
local bogeyDestinationCoord = bogeyGroup:GetCoordinate():Translate(
|
|
76
|
+
UTILS.NMToMeters(bogeyRouteLengthNM),
|
|
77
|
+
bogeyHeading,
|
|
78
|
+
true,
|
|
79
|
+
false
|
|
80
|
+
)
|
|
81
|
+
bogeyGroup:Route(
|
|
82
|
+
{
|
|
83
|
+
bogeyDestinationCoord:WaypointAirTurningPoint(
|
|
84
|
+
COORDINATE.WaypointAltType.BARO,
|
|
85
|
+
UTILS.KnotsToKmph(bogeyGroundSpeedKnots),
|
|
86
|
+
nil,
|
|
87
|
+
"End QRA"
|
|
88
|
+
),
|
|
89
|
+
bogeyDestinationCoord:GetClosestAirbase(
|
|
90
|
+
--bogeyGroup:GetCategory(),
|
|
91
|
+
--bogeyGroup:GetCoalition()
|
|
92
|
+
):GetCoordinate():WaypointAirLanding(
|
|
93
|
+
UTILS.KnotsToKmph(bogeyGroundSpeedKnots),
|
|
94
|
+
bogeyDestinationCoord:GetClosestAirbase(
|
|
95
|
+
--bogeyGroup:GetCategory(),
|
|
96
|
+
--bogeyGroup:GetCoalition()
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
return bogeyGroup
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
function QRATrigger(params)
|
|
105
|
+
local objQRA = params[1]
|
|
106
|
+
local trigerringUnitName = params[2]
|
|
107
|
+
local QRAIndex = params[3]
|
|
108
|
+
local msgTriggeredGround = ""
|
|
109
|
+
local msgTriggeredOthers = ""
|
|
110
|
+
local triggerPlayerName = ""
|
|
111
|
+
if (objQRA.customconfig.type == JTFF_QRA.Type.TangoAuto) then
|
|
112
|
+
local playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
113
|
+
local playerName = playerClient:GetPlayer()
|
|
114
|
+
triggerPlayerName = playerName
|
|
115
|
+
local playerCoord = playerClient:GetCoordinate()
|
|
116
|
+
QRAArray[QRAIndex].objBogeyGroup = QRALaunchBogey(params)
|
|
117
|
+
local bullsCoord = COORDINATE.GetBullseyeCoordinate(objQRA.customconfig.benefit_coalition)
|
|
118
|
+
local bogeyCoord = QRAArray[QRAIndex].objBogeyGroup:GetCoordinate()
|
|
119
|
+
local bullsBearing = math.floor(bullsCoord:HeadingTo(bogeyCoord))
|
|
120
|
+
local bullsRange = math.floor(UTILS.MetersToNM(bullsCoord:Get2DDistance(bogeyCoord)))
|
|
121
|
+
local bogeyAngel = math.floor(UTILS.MetersToFeet(QRAArray[QRAIndex].objBogeyGroup:GetAltitude(false))/1000)
|
|
122
|
+
local bogeyApproxDestination = playerCoord:GetClosestAirbase():GetName()
|
|
123
|
+
jtff_log.info(
|
|
124
|
+
string.format(
|
|
125
|
+
"Bogey Spawned based on %s",
|
|
126
|
+
QRAArray[QRAIndex].objSpawn.SpawnTemplatePrefix
|
|
127
|
+
),
|
|
128
|
+
"QRA"
|
|
129
|
+
)
|
|
130
|
+
jtff_log.info(
|
|
131
|
+
string.format("Bogey is Bulls %i for %i Angel %i, tracking to %s",
|
|
132
|
+
bullsBearing,
|
|
133
|
+
bullsRange,
|
|
134
|
+
bogeyAngel,
|
|
135
|
+
bogeyApproxDestination
|
|
136
|
+
),
|
|
137
|
+
"QRA"
|
|
138
|
+
)
|
|
139
|
+
local formatString = "QRA %s has been triggered by %s!\n" ..
|
|
140
|
+
"Type is : %s\n" ..
|
|
141
|
+
"Bogey is Bulls %i for %i Angel %i, tracking %s\n" ..
|
|
142
|
+
"If you're on Alert," ..
|
|
143
|
+
" you have 10 minutes to take-off and intercept the bogey.\n" ..
|
|
144
|
+
"If you're not, please give %s priority on the taxiway.\n"
|
|
145
|
+
msgTriggeredGround = string.format(
|
|
146
|
+
formatString,
|
|
147
|
+
objQRA.customconfig.name,
|
|
148
|
+
playerName,
|
|
149
|
+
objQRA.customconfig.type,
|
|
150
|
+
bullsBearing,
|
|
151
|
+
bullsRange,
|
|
152
|
+
bogeyAngel,
|
|
153
|
+
bogeyApproxDestination,
|
|
154
|
+
playerName
|
|
155
|
+
)
|
|
156
|
+
formatString = "<WARNING> : QRA Triggered by %s!\n" ..
|
|
157
|
+
"A Bogey is approaching %s, " ..
|
|
158
|
+
"stay away from the interception area\n" ..
|
|
159
|
+
"...\n" ..
|
|
160
|
+
"Bogey last position : Bulls %i for %i Angel %i, tracking to %s"
|
|
161
|
+
msgTriggeredOthers = string.format(formatString,
|
|
162
|
+
playerName,
|
|
163
|
+
playerCoord:GetClosestAirbase():GetName(),
|
|
164
|
+
bullsBearing,
|
|
165
|
+
bullsRange,
|
|
166
|
+
bogeyAngel,
|
|
167
|
+
bogeyApproxDestination
|
|
168
|
+
)
|
|
169
|
+
elseif (objQRA.customconfig.type == JTFF_QRA.Type.TangoManual) then
|
|
170
|
+
local playerClient
|
|
171
|
+
local playerName
|
|
172
|
+
local playerCoord
|
|
173
|
+
if type(trigerringUnitName) == 'nil' then
|
|
174
|
+
playerName = "GameMaster"
|
|
175
|
+
playerClient = nil
|
|
176
|
+
playerCoord = COORDINATE.GetBullseyeCoordinate(objQRA.customconfig.benefit_coalition)
|
|
177
|
+
else
|
|
178
|
+
playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
179
|
+
playerName = playerClient:GetPlayer()
|
|
180
|
+
playerCoord = playerClient:GetCoordinate()
|
|
181
|
+
end
|
|
182
|
+
triggerPlayerName = playerName
|
|
183
|
+
local formatString = "QRA %s has been triggered by %s !\n" ..
|
|
184
|
+
"Type is : %s\n" ..
|
|
185
|
+
"If you're on Alert," ..
|
|
186
|
+
" you have 10 minutes to take-off and start intercepting the the bogey.\n" ..
|
|
187
|
+
"You are cleared to start and wait your AIC for scramble information\n\n\n" ..
|
|
188
|
+
"If you're not on alert, please monitor the ground frequency" ..
|
|
189
|
+
" and let the scramble flight taxi in highest priority..."
|
|
190
|
+
msgTriggeredGround = string.format(
|
|
191
|
+
formatString,
|
|
192
|
+
objQRA.customconfig.name,
|
|
193
|
+
playerName,
|
|
194
|
+
objQRA.customconfig.type
|
|
195
|
+
)
|
|
196
|
+
formatString = "<WARNING> : QRA Training triggered by %s!\n" ..
|
|
197
|
+
"Stay away from the interception area (%s)\n" ..
|
|
198
|
+
"...\n" ..
|
|
199
|
+
"Keep monitoring your tactical frequency" ..
|
|
200
|
+
" for information about the Scramble procedure"
|
|
201
|
+
msgTriggeredOthers = string.format(formatString,
|
|
202
|
+
playerName,
|
|
203
|
+
type(playerClient) ~= 'nil' and playerCoord:ToStringMGRS() or ""
|
|
204
|
+
)
|
|
205
|
+
elseif (objQRA.customconfig.type == JTFF_QRA.Type.Alpha) then
|
|
206
|
+
local playerClient
|
|
207
|
+
local playerName
|
|
208
|
+
local playerCoord
|
|
209
|
+
if type(trigerringUnitName) == 'nil' then
|
|
210
|
+
playerName = "GameMaster"
|
|
211
|
+
playerClient = nil
|
|
212
|
+
playerCoord = COORDINATE.GetBullseyeCoordinate(objQRA.customconfig.benefit_coalition)
|
|
213
|
+
else
|
|
214
|
+
playerClient = CLIENT:FindByName(trigerringUnitName)
|
|
215
|
+
playerName = playerClient:GetPlayer()
|
|
216
|
+
playerCoord = playerClient:GetCoordinate()
|
|
217
|
+
end
|
|
218
|
+
triggerPlayerName = playerName
|
|
219
|
+
local formatString = "QRA %s has been triggered by %s !\n" ..
|
|
220
|
+
"Type is : %s\n" ..
|
|
221
|
+
"If you're on Alert," ..
|
|
222
|
+
" you have 10 minutes to take-off and start intercepting the the bogey.\n" ..
|
|
223
|
+
"You are cleared to start and wait your AIC for scramble information\n\n\n" ..
|
|
224
|
+
"If you're not on alert, please monitor the ground frequency" ..
|
|
225
|
+
" and let the scramble flight taxi in highest priority..."
|
|
226
|
+
msgTriggeredGround = string.format(
|
|
227
|
+
formatString,
|
|
228
|
+
objQRA.customconfig.name,
|
|
229
|
+
playerName,
|
|
230
|
+
objQRA.customconfig.type
|
|
231
|
+
)
|
|
232
|
+
formatString = "<WARNING> : QRA Triggered by %s!\n" ..
|
|
233
|
+
"Stay away from the interception area (%s)\n" ..
|
|
234
|
+
"...\n" ..
|
|
235
|
+
"Keep monitoring your tactical frequency" ..
|
|
236
|
+
" for information about the Scramble procedure"
|
|
237
|
+
msgTriggeredOthers = string.format(formatString,
|
|
238
|
+
playerName,
|
|
239
|
+
type(playerClient) ~= 'nil' and playerCoord:ToStringMGRS() or ""
|
|
240
|
+
)
|
|
241
|
+
else
|
|
242
|
+
end
|
|
243
|
+
objQRA.clientSet:ForEachClient(
|
|
244
|
+
function(clientObject)
|
|
245
|
+
if ClientIsOnGround(clientObject) then
|
|
246
|
+
playQRASoundToClient(clientObject)
|
|
247
|
+
timer.scheduleFunction(
|
|
248
|
+
playQRASoundToClient,
|
|
249
|
+
clientObject,
|
|
250
|
+
timer.getTime() + 17
|
|
251
|
+
)
|
|
252
|
+
MESSAGE:New(msgTriggeredGround,60):ToClient(clientObject)
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
)
|
|
256
|
+
MESSAGE:New(msgTriggeredOthers,30):ToCoalition(objQRA.customconfig.benefit_coalition)
|
|
257
|
+
QRAArray[QRAIndex].menu_finex[QRAArray[QRAIndex].customconfig.benefit_coalition] = MENU_COALITION_COMMAND:New(
|
|
258
|
+
QRAArray[QRAIndex].customconfig.benefit_coalition,
|
|
259
|
+
"FinEx - " .. QRAArray[QRAIndex].customconfig.name .. " !!",
|
|
260
|
+
MenuCoalitionQRA[QRAArray[QRAIndex].customconfig.benefit_coalition],
|
|
261
|
+
QRAFinex,
|
|
262
|
+
QRAIndex
|
|
263
|
+
)
|
|
264
|
+
if (type(dcsbot) ~= 'nil') then
|
|
265
|
+
local title = string.format('QRA triggered !')
|
|
266
|
+
local description = string.format("[%s] triggered a QRA scenario : All QRA pilots, startup and scramble following the procedure",triggerPlayerName)
|
|
267
|
+
local img = 'https://www.defense.gouv.fr/sites/default/files/styles/16_9_sm/public/air/22_09_2023_13.jpeg?itok=n_MPmvZc'
|
|
268
|
+
local fields = {
|
|
269
|
+
['Trigger'] = triggerPlayerName,
|
|
270
|
+
['Type'] = QRAArray[QRAIndex].customconfig.type,
|
|
271
|
+
['Coalition'] = UTILS.GetCoalitionName(QRAArray[QRAIndex].customconfig.benefit_coalition),
|
|
272
|
+
}
|
|
273
|
+
local footer = 'Scramble scramble scramble...'
|
|
274
|
+
dcsbot.sendEmbed(title, description, img, fields, footer)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
function QRAFinex(objQRAIndex)
|
|
279
|
+
local objQRA = QRAArray[objQRAIndex]
|
|
280
|
+
if objQRA.customconfig.type == JTFF_QRA.Type.TangoAuto then
|
|
281
|
+
jtff_log.trace(string.format("objQRA.objSpawn is %s", net.lua2json(objQRA.objSpawn)),"QRA")
|
|
282
|
+
local GroupPlane, Index = objQRA.objSpawn:GetFirstAliveGroup()
|
|
283
|
+
while GroupPlane ~= nil do
|
|
284
|
+
GroupPlane:ScheduleStop()
|
|
285
|
+
GroupPlane:Destroy(true,0)
|
|
286
|
+
GroupPlane, Index = objQRA.objSpawn:GetNextAliveGroup( Index )
|
|
287
|
+
end
|
|
288
|
+
collectgarbage()
|
|
289
|
+
end
|
|
290
|
+
QRAArray[objQRAIndex].menu_finex[QRAArray[objQRAIndex].customconfig.benefit_coalition]:Remove()
|
|
291
|
+
QRAArray[objQRAIndex].menu_finex[QRAArray[objQRAIndex].customconfig.benefit_coalition] = nil
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
-- *****************************************************************************
|
|
297
|
+
-- ** QRA **
|
|
298
|
+
-- *********************************************************
|
|
299
|
+
QRAArray = {}
|
|
300
|
+
compteur = 0
|
|
301
|
+
MenuCoalitionQRA = {}
|
|
302
|
+
MenuCoalitionQRA[coalition.side.BLUE] = MENU_COALITION:New(coalition.side.BLUE, "QRA", MenuCoalitionBlue)
|
|
303
|
+
MenuCoalitionQRA[coalition.side.RED] = MENU_COALITION:New(coalition.side.RED, "QRA", MenuCoalitionRed)
|
|
304
|
+
for index, qraconfig in ipairs(QRAConfig) do
|
|
305
|
+
if qraconfig.enable == true then
|
|
306
|
+
compteur = compteur + 1
|
|
307
|
+
jtff_log.info('creation QRA : '.. qraconfig.name..'...',"QRA")
|
|
308
|
+
local objQRA = {
|
|
309
|
+
customconfig = {},
|
|
310
|
+
clientSet = nil,
|
|
311
|
+
objSpawn = nil,
|
|
312
|
+
objBogeyGroup = nil,
|
|
313
|
+
menu = {},
|
|
314
|
+
menu_finex = {},
|
|
315
|
+
}
|
|
316
|
+
if ( qraconfig.type == JTFF_QRA.Type.TangoAuto) then
|
|
317
|
+
objQRA.objSpawn = SPAWN:New(qraconfig.templates[1])
|
|
318
|
+
:InitSkill(qraconfig.skill)
|
|
319
|
+
:InitRandomizeTemplate(qraconfig.templates or {})
|
|
320
|
+
end
|
|
321
|
+
objQRA.clientSet = SET_CLIENT:New()
|
|
322
|
+
:FilterCoalitions(string.lower(UTILS.GetCoalitionName(qraconfig.benefit_coalition)))
|
|
323
|
+
:FilterCategories("plane")
|
|
324
|
+
:FilterActive(true)
|
|
325
|
+
:FilterFunction(ClientIsOnGround)
|
|
326
|
+
:FilterStart()
|
|
327
|
+
objQRA.clientSet:HandleEvent(EVENTS.PlayerEnterAircraft)
|
|
328
|
+
jtff_log.debug(string.format("Nbr Clients getting QRA Calls : %i", objQRA.clientSet:Count()),"QRA")
|
|
329
|
+
|
|
330
|
+
function objQRA.clientSet:OnEventPlayerEnterAircraft(EventData)
|
|
331
|
+
local clientObject = CLIENT:Find(EventData.IniUnit:GetDCSObject())
|
|
332
|
+
if ClientIsOnGround(clientObject) then
|
|
333
|
+
--self:Add(clientObject:GetPlayer(), clientObject)
|
|
334
|
+
jtff_log.debug(string.format("Added %s to QRA receivers", clientObject:GetPlayer() or ""),"QRA")
|
|
335
|
+
jtff_log.debug(string.format("Nbr Clients getting QRA Calls : %i", objQRA.clientSet:Count()),"QRA")
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
if ( qraconfig.type ~= JTFF_QRA.Type.TangoAuto) then
|
|
340
|
+
objQRA.menu[qraconfig.benefit_coalition] = MENU_COALITION_COMMAND:New(
|
|
341
|
+
qraconfig.benefit_coalition,
|
|
342
|
+
"Trigger " .. qraconfig.name,
|
|
343
|
+
MenuCoalitionQRA[qraconfig.benefit_coalition],
|
|
344
|
+
QRATrigger,
|
|
345
|
+
{
|
|
346
|
+
objQRA,
|
|
347
|
+
nil,
|
|
348
|
+
index,
|
|
349
|
+
}
|
|
350
|
+
)
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
objQRA.customconfig = qraconfig
|
|
354
|
+
|
|
355
|
+
QRAArray[compteur] = objQRA
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
if compteur == 0 then
|
|
360
|
+
MenuCoalitionQRA[coalition.side.BLUE]:Remove()
|
|
361
|
+
MenuCoalitionQRA[coalition.side.RED]:Remove()
|
|
362
|
+
MenuCoalitionQRA = {}
|
|
363
363
|
end
|