@jtff/miztemplate-lib 3.1.0 → 3.1.2

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.
@@ -1,4 +1,4 @@
1
- env.info('*** MOOSE GITHUB Commit Hash ID: 2023-08-18T09:08:47.0000000Z-6b4c08d53f901678903a5cd2ead1dd5d4a4542d8 ***')
1
+ env.info('*** MOOSE GITHUB Commit Hash ID: 2023-09-01T06:52:46.0000000Z-d7b87b63d8b9ec7fe737bc2aef7bd73817e7cea4 ***')
2
2
  env.info('*** MOOSE STATIC INCLUDE START *** ')
3
3
  ENUMS={}
4
4
  ENUMS.ROE={
@@ -415,6 +415,574 @@ Reaper="MQ-9",
415
415
  Predator="MQ-1A",
416
416
  }
417
417
  }
418
+ ENUMS.Storage={
419
+ weapons={
420
+ missiles={},
421
+ bombs={},
422
+ nurs={},
423
+ containers={},
424
+ droptanks={},
425
+ adapters={},
426
+ torpedoes={},
427
+ }
428
+ }
429
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE253_F1B="weapons.nurs.SNEB_TYPE253_F1B"
430
+ ENUMS.Storage.weapons.missiles.P_24T="weapons.missiles.P_24T"
431
+ ENUMS.Storage.weapons.bombs.BLU_3B_OLD="weapons.bombs.BLU-3B_OLD"
432
+ ENUMS.Storage.weapons.missiles.AGM_154="weapons.missiles.AGM_154"
433
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M151_M433="weapons.nurs.HYDRA_70_M151_M433"
434
+ ENUMS.Storage.weapons.bombs.SAM_Avenger_M1097_Skid_7090lb="weapons.bombs.SAM Avenger M1097 Skid [7090lb]"
435
+ ENUMS.Storage.weapons.bombs.British_GP_250LB_Bomb_Mk5="weapons.bombs.British_GP_250LB_Bomb_Mk5"
436
+ ENUMS.Storage.weapons.containers.OV10_SMOKE="weapons.containers.{OV10_SMOKE}"
437
+ ENUMS.Storage.weapons.bombs.BLU_4B_OLD="weapons.bombs.BLU-4B_OLD"
438
+ ENUMS.Storage.weapons.bombs.FAB_500M54="weapons.bombs.FAB-500M54"
439
+ ENUMS.Storage.weapons.bombs.GBU_38="weapons.bombs.GBU_38"
440
+ ENUMS.Storage.weapons.containers.F_15E_AXQ_14_DATALINK="weapons.containers.F-15E_AXQ-14_DATALINK"
441
+ ENUMS.Storage.weapons.bombs.BEER_BOMB="weapons.bombs.BEER_BOMB"
442
+ ENUMS.Storage.weapons.bombs.P_50T="weapons.bombs.P-50T"
443
+ ENUMS.Storage.weapons.nurs.C_8CM_GN="weapons.nurs.C_8CM_GN"
444
+ ENUMS.Storage.weapons.bombs.FAB_500SL="weapons.bombs.FAB-500SL"
445
+ ENUMS.Storage.weapons.bombs.KAB_1500Kr="weapons.bombs.KAB_1500Kr"
446
+ ENUMS.Storage.weapons.bombs.two50_2="weapons.bombs.250-2"
447
+ ENUMS.Storage.weapons.droptanks.Spitfire_tank_1="weapons.droptanks.Spitfire_tank_1"
448
+ ENUMS.Storage.weapons.missiles.AGM_65G="weapons.missiles.AGM_65G"
449
+ ENUMS.Storage.weapons.missiles.AGM_65A="weapons.missiles.AGM_65A"
450
+ ENUMS.Storage.weapons.containers.Hercules_JATO="weapons.containers.Hercules_JATO"
451
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M259="weapons.nurs.HYDRA_70_M259"
452
+ ENUMS.Storage.weapons.missiles.AGM_84E="weapons.missiles.AGM_84E"
453
+ ENUMS.Storage.weapons.bombs.AN_M30A1="weapons.bombs.AN_M30A1"
454
+ ENUMS.Storage.weapons.nurs.C_25="weapons.nurs.C_25"
455
+ ENUMS.Storage.weapons.containers.AV8BNA_ALQ164="weapons.containers.AV8BNA_ALQ164"
456
+ ENUMS.Storage.weapons.containers.lav_25="weapons.containers.lav-25"
457
+ ENUMS.Storage.weapons.missiles.P_60="weapons.missiles.P_60"
458
+ ENUMS.Storage.weapons.bombs.FAB_1500="weapons.bombs.FAB_1500"
459
+ ENUMS.Storage.weapons.droptanks.FuelTank_350L="weapons.droptanks.FuelTank_350L"
460
+ ENUMS.Storage.weapons.bombs.AAA_Vulcan_M163_Skid_21577lb="weapons.bombs.AAA Vulcan M163 Skid [21577lb]"
461
+ ENUMS.Storage.weapons.missiles.Kormoran="weapons.missiles.Kormoran"
462
+ ENUMS.Storage.weapons.droptanks.HB_F14_EXT_DROPTANK_EMPTY="weapons.droptanks.HB_F14_EXT_DROPTANK_EMPTY"
463
+ ENUMS.Storage.weapons.droptanks.FuelTank_150L="weapons.droptanks.FuelTank_150L"
464
+ ENUMS.Storage.weapons.missiles.Rb_15F_for_A_I="weapons.missiles.Rb 15F (for A.I.)"
465
+ ENUMS.Storage.weapons.missiles.RB75T="weapons.missiles.RB75T"
466
+ ENUMS.Storage.weapons.missiles.Vikhr_M="weapons.missiles.Vikhr_M"
467
+ ENUMS.Storage.weapons.nurs.FFAR_M156_WP="weapons.nurs.FFAR M156 WP"
468
+ ENUMS.Storage.weapons.nurs.British_HE_60LBSAPNo2_3INCHNo1="weapons.nurs.British_HE_60LBSAPNo2_3INCHNo1"
469
+ ENUMS.Storage.weapons.missiles.DWS39_MJ2="weapons.missiles.DWS39_MJ2"
470
+ ENUMS.Storage.weapons.bombs.HEBOMBD="weapons.bombs.HEBOMBD"
471
+ ENUMS.Storage.weapons.missiles.CATM_9M="weapons.missiles.CATM_9M"
472
+ ENUMS.Storage.weapons.bombs.Mk_81="weapons.bombs.Mk_81"
473
+ ENUMS.Storage.weapons.droptanks.Drop_Tank_300_Liter="weapons.droptanks.Drop_Tank_300_Liter"
474
+ ENUMS.Storage.weapons.containers.HMMWV_M1025="weapons.containers.HMMWV_M1025"
475
+ ENUMS.Storage.weapons.bombs.SAM_CHAPARRAL_Air_21624lb="weapons.bombs.SAM CHAPARRAL Air [21624lb]"
476
+ ENUMS.Storage.weapons.missiles.AGM_154A="weapons.missiles.AGM_154A"
477
+ ENUMS.Storage.weapons.bombs.Mk_84AIR_TP="weapons.bombs.Mk_84AIR_TP"
478
+ ENUMS.Storage.weapons.bombs.GBU_31_V_3B="weapons.bombs.GBU_31_V_3B"
479
+ ENUMS.Storage.weapons.nurs.C_8CM_WH="weapons.nurs.C_8CM_WH"
480
+ ENUMS.Storage.weapons.missiles.Matra_Super_530D="weapons.missiles.Matra Super 530D"
481
+ ENUMS.Storage.weapons.nurs.ARF8M3TPSM="weapons.nurs.ARF8M3TPSM"
482
+ ENUMS.Storage.weapons.missiles.TGM_65H="weapons.missiles.TGM_65H"
483
+ ENUMS.Storage.weapons.nurs.M8rocket="weapons.nurs.M8rocket"
484
+ ENUMS.Storage.weapons.bombs.GBU_27="weapons.bombs.GBU_27"
485
+ ENUMS.Storage.weapons.missiles.AGR_20A="weapons.missiles.AGR_20A"
486
+ ENUMS.Storage.weapons.missiles.LS_6_250="weapons.missiles.LS-6-250"
487
+ ENUMS.Storage.weapons.droptanks.M2KC_RPL_522_EMPTY="weapons.droptanks.M2KC_RPL_522_EMPTY"
488
+ ENUMS.Storage.weapons.droptanks.M2KC_02_RPL541="weapons.droptanks.M2KC_02_RPL541"
489
+ ENUMS.Storage.weapons.missiles.AGM_45="weapons.missiles.AGM_45"
490
+ ENUMS.Storage.weapons.missiles.AGM_84A="weapons.missiles.AGM_84A"
491
+ ENUMS.Storage.weapons.bombs.APC_BTR_80_Air_23936lb="weapons.bombs.APC BTR-80 Air [23936lb]"
492
+ ENUMS.Storage.weapons.missiles.P_33E="weapons.missiles.P_33E"
493
+ ENUMS.Storage.weapons.missiles.Ataka_9M120="weapons.missiles.Ataka_9M120"
494
+ ENUMS.Storage.weapons.bombs.MK76="weapons.bombs.MK76"
495
+ ENUMS.Storage.weapons.bombs.AB_250_2_SD_2="weapons.bombs.AB_250_2_SD_2"
496
+ ENUMS.Storage.weapons.missiles.Rb_05A="weapons.missiles.Rb 05A"
497
+ ENUMS.Storage.weapons.bombs.ART_GVOZDIKA_34720lb="weapons.bombs.ART GVOZDIKA [34720lb]"
498
+ ENUMS.Storage.weapons.bombs.Generic_Crate_20000lb="weapons.bombs.Generic Crate [20000lb]"
499
+ ENUMS.Storage.weapons.bombs.FAB_100SV="weapons.bombs.FAB_100SV"
500
+ ENUMS.Storage.weapons.bombs.BetAB_500="weapons.bombs.BetAB_500"
501
+ ENUMS.Storage.weapons.droptanks.M2KC_02_RPL541_EMPTY="weapons.droptanks.M2KC_02_RPL541_EMPTY"
502
+ ENUMS.Storage.weapons.droptanks.PTB600_MIG15="weapons.droptanks.PTB600_MIG15"
503
+ ENUMS.Storage.weapons.missiles.Rb_24J="weapons.missiles.Rb 24J"
504
+ ENUMS.Storage.weapons.nurs.C_8CM_BU="weapons.nurs.C_8CM_BU"
505
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE259E_F1B="weapons.nurs.SNEB_TYPE259E_F1B"
506
+ ENUMS.Storage.weapons.nurs.WGr21="weapons.nurs.WGr21"
507
+ ENUMS.Storage.weapons.bombs.SAMP250HD="weapons.bombs.SAMP250HD"
508
+ ENUMS.Storage.weapons.containers.alq_184long="weapons.containers.alq-184long"
509
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE259E_H1="weapons.nurs.SNEB_TYPE259E_H1"
510
+ ENUMS.Storage.weapons.bombs.British_SAP_250LB_Bomb_Mk5="weapons.bombs.British_SAP_250LB_Bomb_Mk5"
511
+ ENUMS.Storage.weapons.bombs.Transport_UAZ_469_Air_3747lb="weapons.bombs.Transport UAZ-469 Air [3747lb]"
512
+ ENUMS.Storage.weapons.bombs.Mk_83CT="weapons.bombs.Mk_83CT"
513
+ ENUMS.Storage.weapons.missiles.AIM_7P="weapons.missiles.AIM-7P"
514
+ ENUMS.Storage.weapons.missiles.AT_6="weapons.missiles.AT_6"
515
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE254_H1_GREEN="weapons.nurs.SNEB_TYPE254_H1_GREEN"
516
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE250_F1B="weapons.nurs.SNEB_TYPE250_F1B"
517
+ ENUMS.Storage.weapons.containers.U22A="weapons.containers.U22A"
518
+ ENUMS.Storage.weapons.bombs.British_GP_250LB_Bomb_Mk1="weapons.bombs.British_GP_250LB_Bomb_Mk1"
519
+ ENUMS.Storage.weapons.bombs.CBU_105="weapons.bombs.CBU_105"
520
+ ENUMS.Storage.weapons.droptanks.FW_190_Fuel_Tank="weapons.droptanks.FW-190_Fuel-Tank"
521
+ ENUMS.Storage.weapons.missiles.X_58="weapons.missiles.X_58"
522
+ ENUMS.Storage.weapons.missiles.BK90_MJ1_MJ2="weapons.missiles.BK90_MJ1_MJ2"
523
+ ENUMS.Storage.weapons.missiles.TGM_65D="weapons.missiles.TGM_65D"
524
+ ENUMS.Storage.weapons.containers.BRD_4_250="weapons.containers.BRD-4-250"
525
+ ENUMS.Storage.weapons.missiles.P_73="weapons.missiles.P_73"
526
+ ENUMS.Storage.weapons.bombs.AN_M66="weapons.bombs.AN_M66"
527
+ ENUMS.Storage.weapons.bombs.APC_LAV_25_Air_22520lb="weapons.bombs.APC LAV-25 Air [22520lb]"
528
+ ENUMS.Storage.weapons.missiles.AIM_7MH="weapons.missiles.AIM-7MH"
529
+ ENUMS.Storage.weapons.containers.MB339_TravelPod="weapons.containers.MB339_TravelPod"
530
+ ENUMS.Storage.weapons.bombs.GBU_12="weapons.bombs.GBU_12"
531
+ ENUMS.Storage.weapons.bombs.SC_250_T3_J="weapons.bombs.SC_250_T3_J"
532
+ ENUMS.Storage.weapons.missiles.KD_20="weapons.missiles.KD-20"
533
+ ENUMS.Storage.weapons.missiles.AGM_86C="weapons.missiles.AGM_86C"
534
+ ENUMS.Storage.weapons.missiles.X_35="weapons.missiles.X_35"
535
+ ENUMS.Storage.weapons.bombs.MK106="weapons.bombs.MK106"
536
+ ENUMS.Storage.weapons.bombs.BETAB_500S="weapons.bombs.BETAB-500S"
537
+ ENUMS.Storage.weapons.nurs.C_5="weapons.nurs.C_5"
538
+ ENUMS.Storage.weapons.nurs.S_24B="weapons.nurs.S-24B"
539
+ ENUMS.Storage.weapons.bombs.British_MC_500LB_Bomb_Mk2="weapons.bombs.British_MC_500LB_Bomb_Mk2"
540
+ ENUMS.Storage.weapons.containers.ANAWW_13="weapons.containers.ANAWW_13"
541
+ ENUMS.Storage.weapons.droptanks.droptank_108_gal="weapons.droptanks.droptank_108_gal"
542
+ ENUMS.Storage.weapons.droptanks.DFT_300_GAL_A4E_LR="weapons.droptanks.DFT_300_GAL_A4E_LR"
543
+ ENUMS.Storage.weapons.bombs.CBU_87="weapons.bombs.CBU_87"
544
+ ENUMS.Storage.weapons.missiles.GAR_8="weapons.missiles.GAR-8"
545
+ ENUMS.Storage.weapons.bombs.BELOUGA="weapons.bombs.BELOUGA"
546
+ ENUMS.Storage.weapons.containers.EclairM_33="weapons.containers.{EclairM_33}"
547
+ ENUMS.Storage.weapons.bombs.ART_2S9_NONA_Air_19140lb="weapons.bombs.ART 2S9 NONA Air [19140lb]"
548
+ ENUMS.Storage.weapons.bombs.BR_250="weapons.bombs.BR_250"
549
+ ENUMS.Storage.weapons.bombs.IAB_500="weapons.bombs.IAB-500"
550
+ ENUMS.Storage.weapons.containers.AN_ASQ_228="weapons.containers.AN_ASQ_228"
551
+ ENUMS.Storage.weapons.missiles.P_27P="weapons.missiles.P_27P"
552
+ ENUMS.Storage.weapons.bombs.SD_250_Stg="weapons.bombs.SD_250_Stg"
553
+ ENUMS.Storage.weapons.missiles.R_530F_IR="weapons.missiles.R_530F_IR"
554
+ ENUMS.Storage.weapons.bombs.British_SAP_500LB_Bomb_Mk5="weapons.bombs.British_SAP_500LB_Bomb_Mk5"
555
+ ENUMS.Storage.weapons.bombs.FAB_250M54="weapons.bombs.FAB-250M54"
556
+ ENUMS.Storage.weapons.containers.M2KC_AAF="weapons.containers.{M2KC_AAF}"
557
+ ENUMS.Storage.weapons.missiles.CM_802AKG_AI="weapons.missiles.CM-802AKG_AI"
558
+ ENUMS.Storage.weapons.bombs.CBU_103="weapons.bombs.CBU_103"
559
+ ENUMS.Storage.weapons.containers.US_M10_SMOKE_TANK_RED="weapons.containers.{US_M10_SMOKE_TANK_RED}"
560
+ ENUMS.Storage.weapons.missiles.X_29T="weapons.missiles.X_29T"
561
+ ENUMS.Storage.weapons.bombs.HEMTT_TFFT_34400lb="weapons.bombs.HEMTT TFFT [34400lb]"
562
+ ENUMS.Storage.weapons.missiles.C_701IR="weapons.missiles.C-701IR"
563
+ ENUMS.Storage.weapons.containers.fullCargoSeats="weapons.containers.fullCargoSeats"
564
+ ENUMS.Storage.weapons.bombs.GBU_15_V_31_B="weapons.bombs.GBU_15_V_31_B"
565
+ ENUMS.Storage.weapons.bombs.APC_M1043_HMMWV_Armament_Air_7023lb="weapons.bombs.APC M1043 HMMWV Armament Air [7023lb]"
566
+ ENUMS.Storage.weapons.missiles.PL_5EII="weapons.missiles.PL-5EII"
567
+ ENUMS.Storage.weapons.bombs.SC_250_T1_L2="weapons.bombs.SC_250_T1_L2"
568
+ ENUMS.Storage.weapons.torpedoes.mk46torp_name="weapons.torpedoes.mk46torp_name"
569
+ ENUMS.Storage.weapons.containers.F_15E_AAQ_33_XR_ATP_SE="weapons.containers.F-15E_AAQ-33_XR_ATP-SE"
570
+ ENUMS.Storage.weapons.missiles.AIM_7="weapons.missiles.AIM_7"
571
+ ENUMS.Storage.weapons.missiles.AGM_122="weapons.missiles.AGM_122"
572
+ ENUMS.Storage.weapons.bombs.HEBOMB="weapons.bombs.HEBOMB"
573
+ ENUMS.Storage.weapons.bombs.CBU_97="weapons.bombs.CBU_97"
574
+ ENUMS.Storage.weapons.bombs.MK_81SE="weapons.bombs.MK-81SE"
575
+ ENUMS.Storage.weapons.nurs.Zuni_127="weapons.nurs.Zuni_127"
576
+ ENUMS.Storage.weapons.containers.M2KC_AGF="weapons.containers.{M2KC_AGF}"
577
+ ENUMS.Storage.weapons.droptanks.Hercules_ExtFuelTank="weapons.droptanks.Hercules_ExtFuelTank"
578
+ ENUMS.Storage.weapons.containers.SMOKE_WHITE="weapons.containers.{SMOKE_WHITE}"
579
+ ENUMS.Storage.weapons.droptanks.droptank_150_gal="weapons.droptanks.droptank_150_gal"
580
+ ENUMS.Storage.weapons.nurs.HYDRA_70_WTU1B="weapons.nurs.HYDRA_70_WTU1B"
581
+ ENUMS.Storage.weapons.missiles.GB_6_SFW="weapons.missiles.GB-6-SFW"
582
+ ENUMS.Storage.weapons.missiles.KD_63="weapons.missiles.KD-63"
583
+ ENUMS.Storage.weapons.bombs.GBU_28="weapons.bombs.GBU_28"
584
+ ENUMS.Storage.weapons.nurs.C_8CM_YE="weapons.nurs.C_8CM_YE"
585
+ ENUMS.Storage.weapons.droptanks.HB_F14_EXT_DROPTANK="weapons.droptanks.HB_F14_EXT_DROPTANK"
586
+ ENUMS.Storage.weapons.missiles.Super_530F="weapons.missiles.Super_530F"
587
+ ENUMS.Storage.weapons.missiles.Ataka_9M220="weapons.missiles.Ataka_9M220"
588
+ ENUMS.Storage.weapons.bombs.BDU_33="weapons.bombs.BDU_33"
589
+ ENUMS.Storage.weapons.bombs.British_GP_250LB_Bomb_Mk4="weapons.bombs.British_GP_250LB_Bomb_Mk4"
590
+ ENUMS.Storage.weapons.missiles.TOW="weapons.missiles.TOW"
591
+ ENUMS.Storage.weapons.bombs.ATGM_M1045_HMMWV_TOW_Air_7183lb="weapons.bombs.ATGM M1045 HMMWV TOW Air [7183lb]"
592
+ ENUMS.Storage.weapons.missiles.X_25MR="weapons.missiles.X_25MR"
593
+ ENUMS.Storage.weapons.droptanks.fueltank230="weapons.droptanks.fueltank230"
594
+ ENUMS.Storage.weapons.droptanks.PTB_490C_MIG21="weapons.droptanks.PTB-490C-MIG21"
595
+ ENUMS.Storage.weapons.bombs.M1025_HMMWV_Air_6160lb="weapons.bombs.M1025 HMMWV Air [6160lb]"
596
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE254_F1B_GREEN="weapons.nurs.SNEB_TYPE254_F1B_GREEN"
597
+ ENUMS.Storage.weapons.missiles.R_550="weapons.missiles.R_550"
598
+ ENUMS.Storage.weapons.bombs.KAB_1500LG="weapons.bombs.KAB_1500LG"
599
+ ENUMS.Storage.weapons.missiles.AGM_84D="weapons.missiles.AGM_84D"
600
+ ENUMS.Storage.weapons.missiles.YJ_83K="weapons.missiles.YJ-83K"
601
+ ENUMS.Storage.weapons.missiles.AIM_54C_Mk47="weapons.missiles.AIM_54C_Mk47"
602
+ ENUMS.Storage.weapons.missiles.BRM_1_90MM="weapons.missiles.BRM-1_90MM"
603
+ ENUMS.Storage.weapons.missiles.Ataka_9M120F="weapons.missiles.Ataka_9M120F"
604
+ ENUMS.Storage.weapons.droptanks.Eleven00L_Tank="weapons.droptanks.1100L Tank"
605
+ ENUMS.Storage.weapons.bombs.BAP_100="weapons.bombs.BAP_100"
606
+ ENUMS.Storage.weapons.adapters.lau_88="weapons.adapters.lau-88"
607
+ ENUMS.Storage.weapons.missiles.P_40T="weapons.missiles.P_40T"
608
+ ENUMS.Storage.weapons.missiles.GB_6="weapons.missiles.GB-6"
609
+ ENUMS.Storage.weapons.bombs.FAB_250M54TU="weapons.bombs.FAB-250M54TU"
610
+ ENUMS.Storage.weapons.missiles.DWS39_MJ1="weapons.missiles.DWS39_MJ1"
611
+ ENUMS.Storage.weapons.missiles.CM_802AKG="weapons.missiles.CM-802AKG"
612
+ ENUMS.Storage.weapons.bombs.FAB_250="weapons.bombs.FAB_250"
613
+ ENUMS.Storage.weapons.missiles.C_802AK="weapons.missiles.C_802AK"
614
+ ENUMS.Storage.weapons.bombs.SD_500_A="weapons.bombs.SD_500_A"
615
+ ENUMS.Storage.weapons.bombs.GBU_32_V_2B="weapons.bombs.GBU_32_V_2B"
616
+ ENUMS.Storage.weapons.containers.marder="weapons.containers.marder"
617
+ ENUMS.Storage.weapons.missiles.ADM_141B="weapons.missiles.ADM_141B"
618
+ ENUMS.Storage.weapons.bombs.ROCKEYE="weapons.bombs.ROCKEYE"
619
+ ENUMS.Storage.weapons.missiles.BK90_MJ1="weapons.missiles.BK90_MJ1"
620
+ ENUMS.Storage.weapons.containers.BTR_80="weapons.containers.BTR-80"
621
+ ENUMS.Storage.weapons.bombs.SAM_ROLAND_ADS_34720lb="weapons.bombs.SAM ROLAND ADS [34720lb]"
622
+ ENUMS.Storage.weapons.containers.wmd7="weapons.containers.wmd7"
623
+ ENUMS.Storage.weapons.missiles.C_701T="weapons.missiles.C-701T"
624
+ ENUMS.Storage.weapons.missiles.AIM_7E_2="weapons.missiles.AIM-7E-2"
625
+ ENUMS.Storage.weapons.nurs.HVAR="weapons.nurs.HVAR"
626
+ ENUMS.Storage.weapons.containers.HMMWV_M1043="weapons.containers.HMMWV_M1043"
627
+ ENUMS.Storage.weapons.droptanks.PTB_800_MIG21="weapons.droptanks.PTB-800-MIG21"
628
+ ENUMS.Storage.weapons.missiles.AGM_114="weapons.missiles.AGM_114"
629
+ ENUMS.Storage.weapons.bombs.APC_M1126_Stryker_ICV_29542lb="weapons.bombs.APC M1126 Stryker ICV [29542lb]"
630
+ ENUMS.Storage.weapons.bombs.APC_M113_Air_21624lb="weapons.bombs.APC M113 Air [21624lb]"
631
+ ENUMS.Storage.weapons.bombs.M_117="weapons.bombs.M_117"
632
+ ENUMS.Storage.weapons.missiles.AGM_65D="weapons.missiles.AGM_65D"
633
+ ENUMS.Storage.weapons.droptanks.MB339_TT320_L="weapons.droptanks.MB339_TT320_L"
634
+ ENUMS.Storage.weapons.missiles.AGM_86="weapons.missiles.AGM_86"
635
+ ENUMS.Storage.weapons.bombs.BDU_45LGB="weapons.bombs.BDU_45LGB"
636
+ ENUMS.Storage.weapons.missiles.AGM_65H="weapons.missiles.AGM_65H"
637
+ ENUMS.Storage.weapons.nurs.RS_82="weapons.nurs.RS-82"
638
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE252_F1B="weapons.nurs.SNEB_TYPE252_F1B"
639
+ ENUMS.Storage.weapons.bombs.BL_755="weapons.bombs.BL_755"
640
+ ENUMS.Storage.weapons.containers.F_15E_AAQ_28_LITENING="weapons.containers.F-15E_AAQ-28_LITENING"
641
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE256_F1B="weapons.nurs.SNEB_TYPE256_F1B"
642
+ ENUMS.Storage.weapons.missiles.AGM_84H="weapons.missiles.AGM_84H"
643
+ ENUMS.Storage.weapons.missiles.AIM_54="weapons.missiles.AIM_54"
644
+ ENUMS.Storage.weapons.missiles.X_31A="weapons.missiles.X_31A"
645
+ ENUMS.Storage.weapons.bombs.KAB_500Kr="weapons.bombs.KAB_500Kr"
646
+ ENUMS.Storage.weapons.containers.SPS_141_100="weapons.containers.SPS-141-100"
647
+ ENUMS.Storage.weapons.missiles.BK90_MJ2="weapons.missiles.BK90_MJ2"
648
+ ENUMS.Storage.weapons.missiles.Super_530D="weapons.missiles.Super_530D"
649
+ ENUMS.Storage.weapons.bombs.CBU_52B="weapons.bombs.CBU_52B"
650
+ ENUMS.Storage.weapons.droptanks.PTB_450="weapons.droptanks.PTB-450"
651
+ ENUMS.Storage.weapons.bombs.IFV_MCV_80_34720lb="weapons.bombs.IFV MCV-80 [34720lb]"
652
+ ENUMS.Storage.weapons.containers.Two_c9="weapons.containers.2-c9"
653
+ ENUMS.Storage.weapons.missiles.AIM_9JULI="weapons.missiles.AIM-9JULI"
654
+ ENUMS.Storage.weapons.droptanks.MB339_TT500_R="weapons.droptanks.MB339_TT500_R"
655
+ ENUMS.Storage.weapons.nurs.C_8CM="weapons.nurs.C_8CM"
656
+ ENUMS.Storage.weapons.containers.BARAX="weapons.containers.BARAX"
657
+ ENUMS.Storage.weapons.missiles.P_40R="weapons.missiles.P_40R"
658
+ ENUMS.Storage.weapons.missiles.YJ_12="weapons.missiles.YJ-12"
659
+ ENUMS.Storage.weapons.missiles.CM_802AKG="weapons.missiles.CM_802AKG"
660
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE254_H1_YELLOW="weapons.nurs.SNEB_TYPE254_H1_YELLOW"
661
+ ENUMS.Storage.weapons.bombs.Durandal="weapons.bombs.Durandal"
662
+ ENUMS.Storage.weapons.droptanks.i16_eft="weapons.droptanks.i16_eft"
663
+ ENUMS.Storage.weapons.droptanks.AV8BNA_AERO1D_EMPTY="weapons.droptanks.AV8BNA_AERO1D_EMPTY"
664
+ ENUMS.Storage.weapons.containers.Hercules_Battle_Station_TGP="weapons.containers.Hercules_Battle_Station_TGP"
665
+ ENUMS.Storage.weapons.nurs.C_8CM_VT="weapons.nurs.C_8CM_VT"
666
+ ENUMS.Storage.weapons.missiles.PL_12="weapons.missiles.PL-12"
667
+ ENUMS.Storage.weapons.missiles.R_3R="weapons.missiles.R-3R"
668
+ ENUMS.Storage.weapons.bombs.GBU_54_V_1B="weapons.bombs.GBU_54_V_1B"
669
+ ENUMS.Storage.weapons.droptanks.MB339_TT320_R="weapons.droptanks.MB339_TT320_R"
670
+ ENUMS.Storage.weapons.bombs.RN_24="weapons.bombs.RN-24"
671
+ ENUMS.Storage.weapons.containers.Twoc6m="weapons.containers.2c6m"
672
+ ENUMS.Storage.weapons.bombs.ARV_BRDM_2_Air_12320lb="weapons.bombs.ARV BRDM-2 Air [12320lb]"
673
+ ENUMS.Storage.weapons.bombs.ARV_BRDM_2_Skid_12210lb="weapons.bombs.ARV BRDM-2 Skid [12210lb]"
674
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE251_F1B="weapons.nurs.SNEB_TYPE251_F1B"
675
+ ENUMS.Storage.weapons.missiles.X_41="weapons.missiles.X_41"
676
+ ENUMS.Storage.weapons.containers.MIG21_SMOKE_WHITE="weapons.containers.{MIG21_SMOKE_WHITE}"
677
+ ENUMS.Storage.weapons.bombs.MK_82AIR="weapons.bombs.MK_82AIR"
678
+ ENUMS.Storage.weapons.missiles.R_530F_EM="weapons.missiles.R_530F_EM"
679
+ ENUMS.Storage.weapons.bombs.SAMP400LD="weapons.bombs.SAMP400LD"
680
+ ENUMS.Storage.weapons.bombs.FAB_50="weapons.bombs.FAB_50"
681
+ ENUMS.Storage.weapons.bombs.AB_250_2_SD_10A="weapons.bombs.AB_250_2_SD_10A"
682
+ ENUMS.Storage.weapons.missiles.ADM_141A="weapons.missiles.ADM_141A"
683
+ ENUMS.Storage.weapons.containers.KBpod="weapons.containers.KBpod"
684
+ ENUMS.Storage.weapons.bombs.British_GP_500LB_Bomb_Mk4="weapons.bombs.British_GP_500LB_Bomb_Mk4"
685
+ ENUMS.Storage.weapons.missiles.AGM_65E="weapons.missiles.AGM_65E"
686
+ ENUMS.Storage.weapons.containers.sa342_dipole_antenna="weapons.containers.sa342_dipole_antenna"
687
+ ENUMS.Storage.weapons.bombs.OFAB_100_Jupiter="weapons.bombs.OFAB-100 Jupiter"
688
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE257_F1B="weapons.nurs.SNEB_TYPE257_F1B"
689
+ ENUMS.Storage.weapons.missiles.Rb_04E_for_A_I="weapons.missiles.Rb 04E (for A.I.)"
690
+ ENUMS.Storage.weapons.bombs.AN_M66A2="weapons.bombs.AN-M66A2"
691
+ ENUMS.Storage.weapons.missiles.P_27T="weapons.missiles.P_27T"
692
+ ENUMS.Storage.weapons.droptanks.LNS_VIG_XTANK="weapons.droptanks.LNS_VIG_XTANK"
693
+ ENUMS.Storage.weapons.missiles.R_55="weapons.missiles.R-55"
694
+ ENUMS.Storage.weapons.torpedoes.YU_6="weapons.torpedoes.YU-6"
695
+ ENUMS.Storage.weapons.bombs.British_MC_250LB_Bomb_Mk2="weapons.bombs.British_MC_250LB_Bomb_Mk2"
696
+ ENUMS.Storage.weapons.droptanks.PTB_120_F86F35="weapons.droptanks.PTB_120_F86F35"
697
+ ENUMS.Storage.weapons.missiles.PL_8B="weapons.missiles.PL-8B"
698
+ ENUMS.Storage.weapons.droptanks.F_15E_Drop_Tank_Empty="weapons.droptanks.F-15E_Drop_Tank_Empty"
699
+ ENUMS.Storage.weapons.nurs.British_HE_60LBFNo1_3INCHNo1="weapons.nurs.British_HE_60LBFNo1_3INCHNo1"
700
+ ENUMS.Storage.weapons.missiles.P_77="weapons.missiles.P_77"
701
+ ENUMS.Storage.weapons.torpedoes.LTF_5B="weapons.torpedoes.LTF_5B"
702
+ ENUMS.Storage.weapons.missiles.R_3S="weapons.missiles.R-3S"
703
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE253_H1="weapons.nurs.SNEB_TYPE253_H1"
704
+ ENUMS.Storage.weapons.missiles.PL_8A="weapons.missiles.PL-8A"
705
+ ENUMS.Storage.weapons.bombs.APC_BTR_82A_Skid_24888lb="weapons.bombs.APC BTR-82A Skid [24888lb]"
706
+ ENUMS.Storage.weapons.containers.Sborka="weapons.containers.Sborka"
707
+ ENUMS.Storage.weapons.missiles.AGM_65L="weapons.missiles.AGM_65L"
708
+ ENUMS.Storage.weapons.missiles.X_28="weapons.missiles.X_28"
709
+ ENUMS.Storage.weapons.missiles.TGM_65G="weapons.missiles.TGM_65G"
710
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE257_H1="weapons.nurs.SNEB_TYPE257_H1"
711
+ ENUMS.Storage.weapons.missiles.RB75B="weapons.missiles.RB75B"
712
+ ENUMS.Storage.weapons.missiles.X_25ML="weapons.missiles.X_25ML"
713
+ ENUMS.Storage.weapons.droptanks.FPU_8A="weapons.droptanks.FPU_8A"
714
+ ENUMS.Storage.weapons.bombs.BLG66="weapons.bombs.BLG66"
715
+ ENUMS.Storage.weapons.nurs.C_8CM_RD="weapons.nurs.C_8CM_RD"
716
+ ENUMS.Storage.weapons.containers.EclairM_06="weapons.containers.{EclairM_06}"
717
+ ENUMS.Storage.weapons.bombs.RBK_500AO="weapons.bombs.RBK_500AO"
718
+ ENUMS.Storage.weapons.missiles.AIM_9P="weapons.missiles.AIM-9P"
719
+ ENUMS.Storage.weapons.bombs.British_GP_500LB_Bomb_Mk4_Short="weapons.bombs.British_GP_500LB_Bomb_Mk4_Short"
720
+ ENUMS.Storage.weapons.containers.MB339_Vinten="weapons.containers.MB339_Vinten"
721
+ ENUMS.Storage.weapons.missiles.Rb_15F="weapons.missiles.Rb 15F"
722
+ ENUMS.Storage.weapons.nurs.ARAKM70BHE="weapons.nurs.ARAKM70BHE"
723
+ ENUMS.Storage.weapons.bombs.AAA_Vulcan_M163_Air_21666lb="weapons.bombs.AAA Vulcan M163 Air [21666lb]"
724
+ ENUMS.Storage.weapons.missiles.X_29L="weapons.missiles.X_29L"
725
+ ENUMS.Storage.weapons.containers.F14_LANTIRN_TP="weapons.containers.{F14-LANTIRN-TP}"
726
+ ENUMS.Storage.weapons.bombs.FAB_250_M62="weapons.bombs.FAB-250-M62"
727
+ ENUMS.Storage.weapons.missiles.AIM_120C="weapons.missiles.AIM_120C"
728
+ ENUMS.Storage.weapons.bombs.EWR_SBORKA_Air_21624lb="weapons.bombs.EWR SBORKA Air [21624lb]"
729
+ ENUMS.Storage.weapons.bombs.SAMP250LD="weapons.bombs.SAMP250LD"
730
+ ENUMS.Storage.weapons.droptanks.Spitfire_slipper_tank="weapons.droptanks.Spitfire_slipper_tank"
731
+ ENUMS.Storage.weapons.missiles.LS_6_500="weapons.missiles.LS-6-500"
732
+ ENUMS.Storage.weapons.bombs.GBU_31_V_4B="weapons.bombs.GBU_31_V_4B"
733
+ ENUMS.Storage.weapons.droptanks.PTB400_MIG15="weapons.droptanks.PTB400_MIG15"
734
+ ENUMS.Storage.weapons.containers.m_113="weapons.containers.m-113"
735
+ ENUMS.Storage.weapons.bombs.SPG_M1128_Stryker_MGS_33036lb="weapons.bombs.SPG M1128 Stryker MGS [33036lb]"
736
+ ENUMS.Storage.weapons.missiles.AIM_9L="weapons.missiles.AIM-9L"
737
+ ENUMS.Storage.weapons.missiles.AIM_9X="weapons.missiles.AIM_9X"
738
+ ENUMS.Storage.weapons.nurs.C_8="weapons.nurs.C_8"
739
+ ENUMS.Storage.weapons.bombs.SAM_CHAPARRAL_Skid_21516lb="weapons.bombs.SAM CHAPARRAL Skid [21516lb]"
740
+ ENUMS.Storage.weapons.missiles.P_27TE="weapons.missiles.P_27TE"
741
+ ENUMS.Storage.weapons.bombs.ODAB_500PM="weapons.bombs.ODAB-500PM"
742
+ ENUMS.Storage.weapons.bombs.MK77mod1_WPN="weapons.bombs.MK77mod1-WPN"
743
+ ENUMS.Storage.weapons.droptanks.PTB400_MIG19="weapons.droptanks.PTB400_MIG19"
744
+ ENUMS.Storage.weapons.torpedoes.Mark_46="weapons.torpedoes.Mark_46"
745
+ ENUMS.Storage.weapons.containers.rightSeat="weapons.containers.rightSeat"
746
+ ENUMS.Storage.weapons.containers.US_M10_SMOKE_TANK_ORANGE="weapons.containers.{US_M10_SMOKE_TANK_ORANGE}"
747
+ ENUMS.Storage.weapons.bombs.SAB_100MN="weapons.bombs.SAB_100MN"
748
+ ENUMS.Storage.weapons.nurs.FFAR_Mk5_HEAT="weapons.nurs.FFAR Mk5 HEAT"
749
+ ENUMS.Storage.weapons.bombs.IFV_TPZ_FUCH_33440lb="weapons.bombs.IFV TPZ FUCH [33440lb]"
750
+ ENUMS.Storage.weapons.bombs.IFV_M2A2_Bradley_34720lb="weapons.bombs.IFV M2A2 Bradley [34720lb]"
751
+ ENUMS.Storage.weapons.bombs.MK77mod0_WPN="weapons.bombs.MK77mod0-WPN"
752
+ ENUMS.Storage.weapons.containers.ASO_2="weapons.containers.ASO-2"
753
+ ENUMS.Storage.weapons.bombs.Mk_84AIR_GP="weapons.bombs.Mk_84AIR_GP"
754
+ ENUMS.Storage.weapons.nurs.S_24A="weapons.nurs.S-24A"
755
+ ENUMS.Storage.weapons.bombs.RBK_250_275_AO_1SCH="weapons.bombs.RBK_250_275_AO_1SCH"
756
+ ENUMS.Storage.weapons.bombs.Transport_Tigr_Skid_15730lb="weapons.bombs.Transport Tigr Skid [15730lb]"
757
+ ENUMS.Storage.weapons.missiles.AIM_7F="weapons.missiles.AIM-7F"
758
+ ENUMS.Storage.weapons.bombs.CBU_99="weapons.bombs.CBU_99"
759
+ ENUMS.Storage.weapons.bombs.LUU_2B="weapons.bombs.LUU_2B"
760
+ ENUMS.Storage.weapons.bombs.FAB_500TA="weapons.bombs.FAB-500TA"
761
+ ENUMS.Storage.weapons.missiles.AGR_20_M282="weapons.missiles.AGR_20_M282"
762
+ ENUMS.Storage.weapons.droptanks.MB339_FT330="weapons.droptanks.MB339_FT330"
763
+ ENUMS.Storage.weapons.bombs.SAMP125LD="weapons.bombs.SAMP125LD"
764
+ ENUMS.Storage.weapons.missiles.X_25MP="weapons.missiles.X_25MP"
765
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE252_H1="weapons.nurs.SNEB_TYPE252_H1"
766
+ ENUMS.Storage.weapons.missiles.AGM_65F="weapons.missiles.AGM_65F"
767
+ ENUMS.Storage.weapons.missiles.AIM_9P5="weapons.missiles.AIM-9P5"
768
+ ENUMS.Storage.weapons.bombs.Transport_Tigr_Air_15900lb="weapons.bombs.Transport Tigr Air [15900lb]"
769
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE254_H1_RED="weapons.nurs.SNEB_TYPE254_H1_RED"
770
+ ENUMS.Storage.weapons.nurs.FFAR_Mk1_HE="weapons.nurs.FFAR Mk1 HE"
771
+ ENUMS.Storage.weapons.nurs.SPRD_99="weapons.nurs.SPRD-99"
772
+ ENUMS.Storage.weapons.bombs.BIN_200="weapons.bombs.BIN_200"
773
+ ENUMS.Storage.weapons.bombs.BLU_4B_GROUP="weapons.bombs.BLU_4B_GROUP"
774
+ ENUMS.Storage.weapons.bombs.GBU_24="weapons.bombs.GBU_24"
775
+ ENUMS.Storage.weapons.missiles.Rb_04E="weapons.missiles.Rb 04E"
776
+ ENUMS.Storage.weapons.missiles.Rb_74="weapons.missiles.Rb 74"
777
+ ENUMS.Storage.weapons.containers.leftSeat="weapons.containers.leftSeat"
778
+ ENUMS.Storage.weapons.bombs.LS_6_100="weapons.bombs.LS-6-100"
779
+ ENUMS.Storage.weapons.bombs.Transport_URAL_375_14815lb="weapons.bombs.Transport URAL-375 [14815lb]"
780
+ ENUMS.Storage.weapons.containers.US_M10_SMOKE_TANK_GREEN="weapons.containers.{US_M10_SMOKE_TANK_GREEN}"
781
+ ENUMS.Storage.weapons.missiles.X_22="weapons.missiles.X_22"
782
+ ENUMS.Storage.weapons.containers.FAS="weapons.containers.FAS"
783
+ ENUMS.Storage.weapons.nurs.S_25_O="weapons.nurs.S-25-O"
784
+ ENUMS.Storage.weapons.droptanks.para="weapons.droptanks.para"
785
+ ENUMS.Storage.weapons.droptanks.F_15E_Drop_Tank="weapons.droptanks.F-15E_Drop_Tank"
786
+ ENUMS.Storage.weapons.droptanks.M2KC_08_RPL541_EMPTY="weapons.droptanks.M2KC_08_RPL541_EMPTY"
787
+ ENUMS.Storage.weapons.missiles.X_31P="weapons.missiles.X_31P"
788
+ ENUMS.Storage.weapons.bombs.RBK_500U="weapons.bombs.RBK_500U"
789
+ ENUMS.Storage.weapons.missiles.AIM_54A_Mk47="weapons.missiles.AIM_54A_Mk47"
790
+ ENUMS.Storage.weapons.droptanks.oiltank="weapons.droptanks.oiltank"
791
+ ENUMS.Storage.weapons.missiles.AGM_154B="weapons.missiles.AGM_154B"
792
+ ENUMS.Storage.weapons.containers.MB339_SMOKE_POD="weapons.containers.MB339_SMOKE-POD"
793
+ ENUMS.Storage.weapons.containers.ECM_POD_L_175V="weapons.containers.{ECM_POD_L_175V}"
794
+ ENUMS.Storage.weapons.droptanks.PTB_580G_F1="weapons.droptanks.PTB_580G_F1"
795
+ ENUMS.Storage.weapons.containers.EclairM_15="weapons.containers.{EclairM_15}"
796
+ ENUMS.Storage.weapons.containers.F_15E_AAQ_13_LANTIRN="weapons.containers.F-15E_AAQ-13_LANTIRN"
797
+ ENUMS.Storage.weapons.droptanks.Eight00L_Tank_Empty="weapons.droptanks.800L Tank Empty"
798
+ ENUMS.Storage.weapons.containers.One6c_hts_pod="weapons.containers.16c_hts_pod"
799
+ ENUMS.Storage.weapons.bombs.AN_M81="weapons.bombs.AN-M81"
800
+ ENUMS.Storage.weapons.droptanks.Mosquito_Drop_Tank_100gal="weapons.droptanks.Mosquito_Drop_Tank_100gal"
801
+ ENUMS.Storage.weapons.droptanks.Mosquito_Drop_Tank_50gal="weapons.droptanks.Mosquito_Drop_Tank_50gal"
802
+ ENUMS.Storage.weapons.droptanks.DFT_150_GAL_A4E="weapons.droptanks.DFT_150_GAL_A4E"
803
+ ENUMS.Storage.weapons.missiles.AIM_9="weapons.missiles.AIM_9"
804
+ ENUMS.Storage.weapons.bombs.IFV_BTR_D_Air_18040lb="weapons.bombs.IFV BTR-D Air [18040lb]"
805
+ ENUMS.Storage.weapons.containers.EclairM_42="weapons.containers.{EclairM_42}"
806
+ ENUMS.Storage.weapons.bombs.KAB_1500T="weapons.bombs.KAB_1500T"
807
+ ENUMS.Storage.weapons.droptanks.PTB_490_MIG21="weapons.droptanks.PTB-490-MIG21"
808
+ ENUMS.Storage.weapons.droptanks.PTB_200_F86F35="weapons.droptanks.PTB_200_F86F35"
809
+ ENUMS.Storage.weapons.droptanks.PTB760_MIG19="weapons.droptanks.PTB760_MIG19"
810
+ ENUMS.Storage.weapons.bombs.GBU_43_B_MOAB="weapons.bombs.GBU-43/B(MOAB)"
811
+ ENUMS.Storage.weapons.torpedoes.G7A_T1="weapons.torpedoes.G7A_T1"
812
+ ENUMS.Storage.weapons.bombs.IFV_BMD_1_Air_18040lb="weapons.bombs.IFV BMD-1 Air [18040lb]"
813
+ ENUMS.Storage.weapons.bombs.SAM_LINEBACKER_34720lb="weapons.bombs.SAM LINEBACKER [34720lb]"
814
+ ENUMS.Storage.weapons.containers.ais_pod_t50_r="weapons.containers.ais-pod-t50_r"
815
+ ENUMS.Storage.weapons.containers.CE2_SMOKE_WHITE="weapons.containers.{CE2_SMOKE_WHITE}"
816
+ ENUMS.Storage.weapons.droptanks.fuel_tank_230="weapons.droptanks.fuel_tank_230"
817
+ ENUMS.Storage.weapons.droptanks.M2KC_RPL_522="weapons.droptanks.M2KC_RPL_522"
818
+ ENUMS.Storage.weapons.missiles.AGM_130="weapons.missiles.AGM_130"
819
+ ENUMS.Storage.weapons.droptanks.Eight00L_Tank="weapons.droptanks.800L Tank"
820
+ ENUMS.Storage.weapons.bombs.IFV_BTR_D_Skid_17930lb="weapons.bombs.IFV BTR-D Skid [17930lb]"
821
+ ENUMS.Storage.weapons.containers.bmp_1="weapons.containers.bmp-1"
822
+ ENUMS.Storage.weapons.bombs.GBU_31="weapons.bombs.GBU_31"
823
+ ENUMS.Storage.weapons.containers.aaq_28LEFT_litening="weapons.containers.aaq-28LEFT litening"
824
+ ENUMS.Storage.weapons.missiles.Kh_66_Grom="weapons.missiles.Kh-66_Grom"
825
+ ENUMS.Storage.weapons.containers.MIG21_SMOKE_RED="weapons.containers.{MIG21_SMOKE_RED}"
826
+ ENUMS.Storage.weapons.containers.U22="weapons.containers.U22"
827
+ ENUMS.Storage.weapons.bombs.IFV_BMD_1_Skid_17930lb="weapons.bombs.IFV BMD-1 Skid [17930lb]"
828
+ ENUMS.Storage.weapons.droptanks.Bidon="weapons.droptanks.Bidon"
829
+ ENUMS.Storage.weapons.bombs.GBU_31_V_2B="weapons.bombs.GBU_31_V_2B"
830
+ ENUMS.Storage.weapons.bombs.Mk_82Y="weapons.bombs.Mk_82Y"
831
+ ENUMS.Storage.weapons.containers.pl5eii="weapons.containers.pl5eii"
832
+ ENUMS.Storage.weapons.bombs.RBK_500U_OAB_2_5RT="weapons.bombs.RBK_500U_OAB_2_5RT"
833
+ ENUMS.Storage.weapons.bombs.British_GP_500LB_Bomb_Mk5="weapons.bombs.British_GP_500LB_Bomb_Mk5"
834
+ ENUMS.Storage.weapons.containers.Eclair="weapons.containers.{Eclair}"
835
+ ENUMS.Storage.weapons.nurs.S5MO_HEFRAG_FFAR="weapons.nurs.S5MO_HEFRAG_FFAR"
836
+ ENUMS.Storage.weapons.bombs.BETAB_500M="weapons.bombs.BETAB-500M"
837
+ ENUMS.Storage.weapons.bombs.Transport_M818_16000lb="weapons.bombs.Transport M818 [16000lb]"
838
+ ENUMS.Storage.weapons.bombs.British_MC_250LB_Bomb_Mk1="weapons.bombs.British_MC_250LB_Bomb_Mk1"
839
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE251_H1="weapons.nurs.SNEB_TYPE251_H1"
840
+ ENUMS.Storage.weapons.bombs.TYPE_200A="weapons.bombs.TYPE-200A"
841
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M151="weapons.nurs.HYDRA_70_M151"
842
+ ENUMS.Storage.weapons.bombs.IFV_BMP_3_32912lb="weapons.bombs.IFV BMP-3 [32912lb]"
843
+ ENUMS.Storage.weapons.bombs.APC_MTLB_Air_26400lb="weapons.bombs.APC MTLB Air [26400lb]"
844
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M229="weapons.nurs.HYDRA_70_M229"
845
+ ENUMS.Storage.weapons.bombs.BDU_45="weapons.bombs.BDU_45"
846
+ ENUMS.Storage.weapons.bombs.OFAB_100_120TU="weapons.bombs.OFAB-100-120TU"
847
+ ENUMS.Storage.weapons.missiles.AIM_9J="weapons.missiles.AIM-9J"
848
+ ENUMS.Storage.weapons.nurs.ARF8M3API="weapons.nurs.ARF8M3API"
849
+ ENUMS.Storage.weapons.bombs.BetAB_500ShP="weapons.bombs.BetAB_500ShP"
850
+ ENUMS.Storage.weapons.nurs.C_8OFP2="weapons.nurs.C_8OFP2"
851
+ ENUMS.Storage.weapons.bombs.GBU_10="weapons.bombs.GBU_10"
852
+ ENUMS.Storage.weapons.bombs.APC_MTLB_Skid_26290lb="weapons.bombs.APC MTLB Skid [26290lb]"
853
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE254_F1B_RED="weapons.nurs.SNEB_TYPE254_F1B_RED"
854
+ ENUMS.Storage.weapons.missiles.X_65="weapons.missiles.X_65"
855
+ ENUMS.Storage.weapons.missiles.R_550_M1="weapons.missiles.R_550_M1"
856
+ ENUMS.Storage.weapons.missiles.AGM_65K="weapons.missiles.AGM_65K"
857
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE254_F1B_YELLOW="weapons.nurs.SNEB_TYPE254_F1B_YELLOW"
858
+ ENUMS.Storage.weapons.missiles.AGM_88="weapons.missiles.AGM_88"
859
+ ENUMS.Storage.weapons.nurs.C_8OM="weapons.nurs.C_8OM"
860
+ ENUMS.Storage.weapons.bombs.SAM_ROLAND_LN_34720b="weapons.bombs.SAM ROLAND LN [34720b]"
861
+ ENUMS.Storage.weapons.missiles.AIM_120="weapons.missiles.AIM_120"
862
+ ENUMS.Storage.weapons.missiles.HOT3_MBDA="weapons.missiles.HOT3_MBDA"
863
+ ENUMS.Storage.weapons.missiles.R_13M="weapons.missiles.R-13M"
864
+ ENUMS.Storage.weapons.missiles.AIM_54C_Mk60="weapons.missiles.AIM_54C_Mk60"
865
+ ENUMS.Storage.weapons.bombs.AAA_GEPARD_34720lb="weapons.bombs.AAA GEPARD [34720lb]"
866
+ ENUMS.Storage.weapons.missiles.R_13M1="weapons.missiles.R-13M1"
867
+ ENUMS.Storage.weapons.bombs.APC_Cobra_Air_10912lb="weapons.bombs.APC Cobra Air [10912lb]"
868
+ ENUMS.Storage.weapons.bombs.RBK_250="weapons.bombs.RBK_250"
869
+ ENUMS.Storage.weapons.bombs.SC_500_J="weapons.bombs.SC_500_J"
870
+ ENUMS.Storage.weapons.missiles.AGM_114K="weapons.missiles.AGM_114K"
871
+ ENUMS.Storage.weapons.missiles.ALARM="weapons.missiles.ALARM"
872
+ ENUMS.Storage.weapons.bombs.Mk_83="weapons.bombs.Mk_83"
873
+ ENUMS.Storage.weapons.missiles.AGM_65B="weapons.missiles.AGM_65B"
874
+ ENUMS.Storage.weapons.bombs.MK_82SNAKEYE="weapons.bombs.MK_82SNAKEYE"
875
+ ENUMS.Storage.weapons.nurs.HYDRA_70_MK1="weapons.nurs.HYDRA_70_MK1"
876
+ ENUMS.Storage.weapons.bombs.BLG66_BELOUGA="weapons.bombs.BLG66_BELOUGA"
877
+ ENUMS.Storage.weapons.containers.EclairM_51="weapons.containers.{EclairM_51}"
878
+ ENUMS.Storage.weapons.missiles.AIM_54A_Mk60="weapons.missiles.AIM_54A_Mk60"
879
+ ENUMS.Storage.weapons.droptanks.DFT_300_GAL_A4E="weapons.droptanks.DFT_300_GAL_A4E"
880
+ ENUMS.Storage.weapons.bombs.ATGM_M1134_Stryker_30337lb="weapons.bombs.ATGM M1134 Stryker [30337lb]"
881
+ ENUMS.Storage.weapons.bombs.BAT_120="weapons.bombs.BAT-120"
882
+ ENUMS.Storage.weapons.missiles.DWS39_MJ1_MJ2="weapons.missiles.DWS39_MJ1_MJ2"
883
+ ENUMS.Storage.weapons.containers.SPRD="weapons.containers.SPRD"
884
+ ENUMS.Storage.weapons.bombs.BR_500="weapons.bombs.BR_500"
885
+ ENUMS.Storage.weapons.bombs.British_GP_500LB_Bomb_Mk1="weapons.bombs.British_GP_500LB_Bomb_Mk1"
886
+ ENUMS.Storage.weapons.bombs.BDU_50HD="weapons.bombs.BDU_50HD"
887
+ ENUMS.Storage.weapons.missiles.RS2US="weapons.missiles.RS2US"
888
+ ENUMS.Storage.weapons.bombs.IFV_BMP_2_25168lb="weapons.bombs.IFV BMP-2 [25168lb]"
889
+ ENUMS.Storage.weapons.bombs.SAMP400HD="weapons.bombs.SAMP400HD"
890
+ ENUMS.Storage.weapons.containers.Hercules_Battle_Station="weapons.containers.Hercules_Battle_Station"
891
+ ENUMS.Storage.weapons.bombs.AN_M64="weapons.bombs.AN_M64"
892
+ ENUMS.Storage.weapons.containers.rearCargoSeats="weapons.containers.rearCargoSeats"
893
+ ENUMS.Storage.weapons.bombs.Mk_82="weapons.bombs.Mk_82"
894
+ ENUMS.Storage.weapons.missiles.AKD_10="weapons.missiles.AKD-10"
895
+ ENUMS.Storage.weapons.bombs.BDU_50LGB="weapons.bombs.BDU_50LGB"
896
+ ENUMS.Storage.weapons.missiles.SD_10="weapons.missiles.SD-10"
897
+ ENUMS.Storage.weapons.containers.IRDeflector="weapons.containers.IRDeflector"
898
+ ENUMS.Storage.weapons.bombs.FAB_500="weapons.bombs.FAB_500"
899
+ ENUMS.Storage.weapons.bombs.KAB_500="weapons.bombs.KAB_500"
900
+ ENUMS.Storage.weapons.nurs.S_5M="weapons.nurs.S-5M"
901
+ ENUMS.Storage.weapons.missiles.MICA_R="weapons.missiles.MICA_R"
902
+ ENUMS.Storage.weapons.missiles.X_59M="weapons.missiles.X_59M"
903
+ ENUMS.Storage.weapons.nurs.UG_90MM="weapons.nurs.UG_90MM"
904
+ ENUMS.Storage.weapons.bombs.LYSBOMB="weapons.bombs.LYSBOMB"
905
+ ENUMS.Storage.weapons.nurs.R4M="weapons.nurs.R4M"
906
+ ENUMS.Storage.weapons.containers.dlpod_akg="weapons.containers.dlpod_akg"
907
+ ENUMS.Storage.weapons.missiles.LD_10="weapons.missiles.LD-10"
908
+ ENUMS.Storage.weapons.bombs.SC_50="weapons.bombs.SC_50"
909
+ ENUMS.Storage.weapons.nurs.HYDRA_70_MK5="weapons.nurs.HYDRA_70_MK5"
910
+ ENUMS.Storage.weapons.bombs.FAB_100M="weapons.bombs.FAB_100M"
911
+ ENUMS.Storage.weapons.missiles.Rb_24="weapons.missiles.Rb 24"
912
+ ENUMS.Storage.weapons.bombs.BDU_45B="weapons.bombs.BDU_45B"
913
+ ENUMS.Storage.weapons.missiles.GB_6_HE="weapons.missiles.GB-6-HE"
914
+ ENUMS.Storage.weapons.missiles.KD_63B="weapons.missiles.KD-63B"
915
+ ENUMS.Storage.weapons.missiles.P_27PE="weapons.missiles.P_27PE"
916
+ ENUMS.Storage.weapons.droptanks.PTB300_MIG15="weapons.droptanks.PTB300_MIG15"
917
+ ENUMS.Storage.weapons.bombs.Two50_3="weapons.bombs.250-3"
918
+ ENUMS.Storage.weapons.bombs.SC_500_L2="weapons.bombs.SC_500_L2"
919
+ ENUMS.Storage.weapons.containers.HMMWV_M1045="weapons.containers.HMMWV_M1045"
920
+ ENUMS.Storage.weapons.bombs.FAB_500M54TU="weapons.bombs.FAB-500M54TU"
921
+ ENUMS.Storage.weapons.containers.US_M10_SMOKE_TANK_YELLOW="weapons.containers.{US_M10_SMOKE_TANK_YELLOW}"
922
+ ENUMS.Storage.weapons.containers.EclairM_60="weapons.containers.{EclairM_60}"
923
+ ENUMS.Storage.weapons.bombs.SAB_250_200="weapons.bombs.SAB_250_200"
924
+ ENUMS.Storage.weapons.bombs.FAB_100="weapons.bombs.FAB_100"
925
+ ENUMS.Storage.weapons.bombs.KAB_500S="weapons.bombs.KAB_500S"
926
+ ENUMS.Storage.weapons.missiles.AGM_45A="weapons.missiles.AGM_45A"
927
+ ENUMS.Storage.weapons.missiles.Kh25MP_PRGS1VP="weapons.missiles.Kh25MP_PRGS1VP"
928
+ ENUMS.Storage.weapons.nurs.S5M1_HEFRAG_FFAR="weapons.nurs.S5M1_HEFRAG_FFAR"
929
+ ENUMS.Storage.weapons.containers.kg600="weapons.containers.kg600"
930
+ ENUMS.Storage.weapons.bombs.AN_M65="weapons.bombs.AN_M65"
931
+ ENUMS.Storage.weapons.bombs.AN_M57="weapons.bombs.AN_M57"
932
+ ENUMS.Storage.weapons.bombs.BLU_3B_GROUP="weapons.bombs.BLU_3B_GROUP"
933
+ ENUMS.Storage.weapons.bombs.BAP_100="weapons.bombs.BAP-100"
934
+ ENUMS.Storage.weapons.containers.HEMTT="weapons.containers.HEMTT"
935
+ ENUMS.Storage.weapons.bombs.British_MC_500LB_Bomb_Mk1_Short="weapons.bombs.British_MC_500LB_Bomb_Mk1_Short"
936
+ ENUMS.Storage.weapons.nurs.ARAKM70BAP="weapons.nurs.ARAKM70BAP"
937
+ ENUMS.Storage.weapons.missiles.AGM_119="weapons.missiles.AGM_119"
938
+ ENUMS.Storage.weapons.missiles.MMagicII="weapons.missiles.MMagicII"
939
+ ENUMS.Storage.weapons.bombs.AB_500_1_SD_10A="weapons.bombs.AB_500_1_SD_10A"
940
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M282="weapons.nurs.HYDRA_70_M282"
941
+ ENUMS.Storage.weapons.droptanks.DFT_400_GAL_A4E="weapons.droptanks.DFT_400_GAL_A4E"
942
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M257="weapons.nurs.HYDRA_70_M257"
943
+ ENUMS.Storage.weapons.droptanks.AV8BNA_AERO1D="weapons.droptanks.AV8BNA_AERO1D"
944
+ ENUMS.Storage.weapons.containers.US_M10_SMOKE_TANK_BLUE="weapons.containers.{US_M10_SMOKE_TANK_BLUE}"
945
+ ENUMS.Storage.weapons.nurs.ARF8M3HEI="weapons.nurs.ARF8M3HEI"
946
+ ENUMS.Storage.weapons.bombs.RN_28="weapons.bombs.RN-28"
947
+ ENUMS.Storage.weapons.bombs.Squad_30_x_Soldier_7950lb="weapons.bombs.Squad 30 x Soldier [7950lb]"
948
+ ENUMS.Storage.weapons.containers.uaz_469="weapons.containers.uaz-469"
949
+ ENUMS.Storage.weapons.containers.Otokar_Cobra="weapons.containers.Otokar_Cobra"
950
+ ENUMS.Storage.weapons.bombs.APC_BTR_82A_Air_24998lb="weapons.bombs.APC BTR-82A Air [24998lb]"
951
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M274="weapons.nurs.HYDRA_70_M274"
952
+ ENUMS.Storage.weapons.missiles.P_24R="weapons.missiles.P_24R"
953
+ ENUMS.Storage.weapons.nurs.HYDRA_70_MK61="weapons.nurs.HYDRA_70_MK61"
954
+ ENUMS.Storage.weapons.missiles.Igla_1E="weapons.missiles.Igla_1E"
955
+ ENUMS.Storage.weapons.missiles.C_802AK="weapons.missiles.C-802AK"
956
+ ENUMS.Storage.weapons.nurs.C_24="weapons.nurs.C_24"
957
+ ENUMS.Storage.weapons.droptanks.M2KC_08_RPL541="weapons.droptanks.M2KC_08_RPL541"
958
+ ENUMS.Storage.weapons.nurs.C_13="weapons.nurs.C_13"
959
+ ENUMS.Storage.weapons.droptanks.droptank_110_gal="weapons.droptanks.droptank_110_gal"
960
+ ENUMS.Storage.weapons.bombs.Mk_84="weapons.bombs.Mk_84"
961
+ ENUMS.Storage.weapons.missiles.Sea_Eagle="weapons.missiles.Sea_Eagle"
962
+ ENUMS.Storage.weapons.droptanks.PTB_1200_F1="weapons.droptanks.PTB_1200_F1"
963
+ ENUMS.Storage.weapons.nurs.SNEB_TYPE256_H1="weapons.nurs.SNEB_TYPE256_H1"
964
+ ENUMS.Storage.weapons.containers.MATRA_PHIMAT="weapons.containers.MATRA-PHIMAT"
965
+ ENUMS.Storage.weapons.containers.smoke_pod="weapons.containers.smoke_pod"
966
+ ENUMS.Storage.weapons.containers.F_15E_AAQ_14_LANTIRN="weapons.containers.F-15E_AAQ-14_LANTIRN"
967
+ ENUMS.Storage.weapons.containers.EclairM_24="weapons.containers.{EclairM_24}"
968
+ ENUMS.Storage.weapons.bombs.GBU_16="weapons.bombs.GBU_16"
969
+ ENUMS.Storage.weapons.nurs.HYDRA_70_M156="weapons.nurs.HYDRA_70_M156"
970
+ ENUMS.Storage.weapons.missiles.R_60="weapons.missiles.R-60"
971
+ ENUMS.Storage.weapons.containers.zsu_23_4="weapons.containers.zsu-23-4"
972
+ ENUMS.Storage.weapons.missiles.RB75="weapons.missiles.RB75"
973
+ ENUMS.Storage.weapons.missiles.Mistral="weapons.missiles.Mistral"
974
+ ENUMS.Storage.weapons.droptanks.MB339_TT500_L="weapons.droptanks.MB339_TT500_L"
975
+ ENUMS.Storage.weapons.bombs.SAM_SA_13_STRELA_21624lb="weapons.bombs.SAM SA-13 STRELA [21624lb]"
976
+ ENUMS.Storage.weapons.bombs.SAM_Avenger_M1097_Air_7200lb="weapons.bombs.SAM Avenger M1097 Air [7200lb]"
977
+ ENUMS.Storage.weapons.droptanks.Eleven00L_Tank_Empty="weapons.droptanks.1100L Tank Empty"
978
+ ENUMS.Storage.weapons.bombs.AN_M88="weapons.bombs.AN-M88"
979
+ ENUMS.Storage.weapons.missiles.S_25L="weapons.missiles.S_25L"
980
+ ENUMS.Storage.weapons.nurs.British_AP_25LBNo1_3INCHNo1="weapons.nurs.British_AP_25LBNo1_3INCHNo1"
981
+ ENUMS.Storage.weapons.bombs.BDU_50LD="weapons.bombs.BDU_50LD"
982
+ ENUMS.Storage.weapons.bombs.AGM_62="weapons.bombs.AGM_62"
983
+ ENUMS.Storage.weapons.containers.US_M10_SMOKE_TANK_WHITE="weapons.containers.{US_M10_SMOKE_TANK_WHITE}"
984
+ ENUMS.Storage.weapons.missiles.MICA_T="weapons.missiles.MICA_T"
985
+ ENUMS.Storage.weapons.containers.HVAR_rocket="weapons.containers.HVAR_rocket"
418
986
  do
419
987
  FIFO={
420
988
  ClassName="FIFO",
@@ -24721,6 +25289,842 @@ end
24721
25289
  end
24722
25290
  return self
24723
25291
  end
25292
+ function CONTROLLABLE:TaskAerobatics()
25293
+ local DCSTaskAerobatics={
25294
+ id="Aerobatics",
25295
+ params={
25296
+ ["maneuversSequency"]={},
25297
+ },
25298
+ ["enabled"]=true,
25299
+ ["auto"]=false,
25300
+ }
25301
+ return DCSTaskAerobatics
25302
+ end
25303
+ function CONTROLLABLE:TaskAerobaticsCandle(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately)
25304
+ local maxrepeats=10
25305
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25306
+ local usesmoke=UseSmoke and 1 or 0
25307
+ local startimmediately=StartImmediately and 1 or 0
25308
+ local CandleTask={
25309
+ ["name"]="CANDLE",
25310
+ ["params"]={
25311
+ ["RepeatQty"]={
25312
+ ["max_v"]=maxrepeats,
25313
+ ["min_v"]=1,
25314
+ ["order"]=1,
25315
+ ["value"]=Repeats or 1,
25316
+ },
25317
+ ["InitAltitude"]={
25318
+ ["order"]=2,
25319
+ ["value"]=InitAltitude or 0,
25320
+ },
25321
+ ["InitSpeed"]={
25322
+ ["order"]=3,
25323
+ ["value"]=InitSpeed or 0,
25324
+ },
25325
+ ["UseSmoke"]={
25326
+ ["order"]=4,
25327
+ ["value"]=usesmoke,
25328
+ },
25329
+ ["StartImmediatly"]={
25330
+ ["order"]=5,
25331
+ ["value"]=startimmediately,
25332
+ }
25333
+ }
25334
+ }
25335
+ table.insert(TaskAerobatics.params["maneuversSequency"],CandleTask)
25336
+ return TaskAerobatics
25337
+ end
25338
+ function CONTROLLABLE:TaskAerobaticsEdgeFlight(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,FlightTime,Side)
25339
+ local maxrepeats=10
25340
+ local maxflight=200
25341
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25342
+ local usesmoke=UseSmoke and 1 or 0
25343
+ local startimmediately=StartImmediately and 1 or 0
25344
+ local flighttime=FlightTime or 10
25345
+ if flighttime>200 then maxflight=flighttime end
25346
+ local EdgeTask={
25347
+ ["name"]="EDGE_FLIGHT",
25348
+ ["params"]={
25349
+ ["RepeatQty"]={
25350
+ ["max_v"]=maxrepeats,
25351
+ ["min_v"]=1,
25352
+ ["order"]=1,
25353
+ ["value"]=Repeats or 1,
25354
+ },
25355
+ ["InitAltitude"]={
25356
+ ["order"]=2,
25357
+ ["value"]=InitAltitude or 0,
25358
+ },
25359
+ ["InitSpeed"]={
25360
+ ["order"]=3,
25361
+ ["value"]=InitSpeed or 0,
25362
+ },
25363
+ ["UseSmoke"]={
25364
+ ["order"]=4,
25365
+ ["value"]=usesmoke,
25366
+ },
25367
+ ["StartImmediatly"]={
25368
+ ["order"]=5,
25369
+ ["value"]=startimmediately,
25370
+ },
25371
+ ["FlightTime"]={
25372
+ ["max_v"]=maxflight,
25373
+ ["min_v"]=1,
25374
+ ["order"]=6,
25375
+ ["step"]=0.1,
25376
+ ["value"]=flighttime or 10,
25377
+ },
25378
+ ["SIDE"]={
25379
+ ["order"]=7,
25380
+ ["value"]=Side or 0,
25381
+ },
25382
+ }
25383
+ }
25384
+ table.insert(TaskAerobatics.params["maneuversSequency"],EdgeTask)
25385
+ return TaskAerobatics
25386
+ end
25387
+ function CONTROLLABLE:TaskAerobaticsWingoverFlight(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,FlightTime)
25388
+ local maxrepeats=10
25389
+ local maxflight=200
25390
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25391
+ local usesmoke=UseSmoke and 1 or 0
25392
+ local startimmediately=StartImmediately and 1 or 0
25393
+ local flighttime=FlightTime or 10
25394
+ if flighttime>200 then maxflight=flighttime end
25395
+ local WingoverTask={
25396
+ ["name"]="WINGOVER_FLIGHT",
25397
+ ["params"]={
25398
+ ["RepeatQty"]={
25399
+ ["max_v"]=maxrepeats,
25400
+ ["min_v"]=1,
25401
+ ["order"]=1,
25402
+ ["value"]=Repeats or 1,
25403
+ },
25404
+ ["InitAltitude"]={
25405
+ ["order"]=2,
25406
+ ["value"]=InitAltitude or 0,
25407
+ },
25408
+ ["InitSpeed"]={
25409
+ ["order"]=3,
25410
+ ["value"]=InitSpeed or 0,
25411
+ },
25412
+ ["UseSmoke"]={
25413
+ ["order"]=4,
25414
+ ["value"]=usesmoke,
25415
+ },
25416
+ ["StartImmediatly"]={
25417
+ ["order"]=5,
25418
+ ["value"]=startimmediately,
25419
+ },
25420
+ ["FlightTime"]={
25421
+ ["max_v"]=maxflight,
25422
+ ["min_v"]=1,
25423
+ ["order"]=6,
25424
+ ["step"]=0.1,
25425
+ ["value"]=flighttime or 10,
25426
+ },
25427
+ }
25428
+ }
25429
+ table.insert(TaskAerobatics.params["maneuversSequency"],WingoverTask)
25430
+ return TaskAerobatics
25431
+ end
25432
+ function CONTROLLABLE:TaskAerobaticsLoop(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately)
25433
+ local maxrepeats=10
25434
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25435
+ local usesmoke=UseSmoke and 1 or 0
25436
+ local startimmediately=StartImmediately and 1 or 0
25437
+ local LoopTask={
25438
+ ["name"]="LOOP",
25439
+ ["params"]={
25440
+ ["RepeatQty"]={
25441
+ ["max_v"]=maxrepeats,
25442
+ ["min_v"]=1,
25443
+ ["order"]=1,
25444
+ ["value"]=Repeats or 1,
25445
+ },
25446
+ ["InitAltitude"]={
25447
+ ["order"]=2,
25448
+ ["value"]=InitAltitude or 0,
25449
+ },
25450
+ ["InitSpeed"]={
25451
+ ["order"]=3,
25452
+ ["value"]=InitSpeed or 0,
25453
+ },
25454
+ ["UseSmoke"]={
25455
+ ["order"]=4,
25456
+ ["value"]=usesmoke,
25457
+ },
25458
+ ["StartImmediatly"]={
25459
+ ["order"]=5,
25460
+ ["value"]=startimmediately,
25461
+ }
25462
+ }
25463
+ }
25464
+ table.insert(TaskAerobatics.params["maneuversSequency"],LoopTask)
25465
+ return TaskAerobatics
25466
+ end
25467
+ function CONTROLLABLE:TaskAerobaticsHorizontalEight(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Side,RollDeg)
25468
+ local maxrepeats=10
25469
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25470
+ local usesmoke=UseSmoke and 1 or 0
25471
+ local startimmediately=StartImmediately and 1 or 0
25472
+ local LoopTask={
25473
+ ["name"]="HORIZONTAL_EIGHT",
25474
+ ["params"]={
25475
+ ["RepeatQty"]={
25476
+ ["max_v"]=maxrepeats,
25477
+ ["min_v"]=1,
25478
+ ["order"]=1,
25479
+ ["value"]=Repeats or 1,
25480
+ },
25481
+ ["InitAltitude"]={
25482
+ ["order"]=2,
25483
+ ["value"]=InitAltitude or 0,
25484
+ },
25485
+ ["InitSpeed"]={
25486
+ ["order"]=3,
25487
+ ["value"]=InitSpeed or 0,
25488
+ },
25489
+ ["UseSmoke"]={
25490
+ ["order"]=4,
25491
+ ["value"]=usesmoke,
25492
+ },
25493
+ ["StartImmediatly"]={
25494
+ ["order"]=5,
25495
+ ["value"]=startimmediately,
25496
+ },
25497
+ ["SIDE"]={
25498
+ ["order"]=6,
25499
+ ["value"]=Side or 0,
25500
+ },
25501
+ ["ROLL1"]={
25502
+ ["order"]=7,
25503
+ ["value"]=RollDeg or 60,
25504
+ },
25505
+ ["ROLL2"]={
25506
+ ["order"]=8,
25507
+ ["value"]=RollDeg or 60,
25508
+ },
25509
+ }
25510
+ }
25511
+ table.insert(TaskAerobatics.params["maneuversSequency"],LoopTask)
25512
+ return TaskAerobatics
25513
+ end
25514
+ function CONTROLLABLE:TaskAerobaticsHammerhead(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Side)
25515
+ local maxrepeats=10
25516
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25517
+ local usesmoke=UseSmoke and 1 or 0
25518
+ local startimmediately=StartImmediately and 1 or 0
25519
+ local Task={
25520
+ ["name"]="HUMMERHEAD",
25521
+ ["params"]={
25522
+ ["RepeatQty"]={
25523
+ ["max_v"]=maxrepeats,
25524
+ ["min_v"]=1,
25525
+ ["order"]=1,
25526
+ ["value"]=Repeats or 1,
25527
+ },
25528
+ ["InitAltitude"]={
25529
+ ["order"]=2,
25530
+ ["value"]=InitAltitude or 0,
25531
+ },
25532
+ ["InitSpeed"]={
25533
+ ["order"]=3,
25534
+ ["value"]=InitSpeed or 0,
25535
+ },
25536
+ ["UseSmoke"]={
25537
+ ["order"]=4,
25538
+ ["value"]=usesmoke,
25539
+ },
25540
+ ["StartImmediatly"]={
25541
+ ["order"]=5,
25542
+ ["value"]=startimmediately,
25543
+ },
25544
+ ["SIDE"]={
25545
+ ["order"]=6,
25546
+ ["value"]=Side or 0,
25547
+ },
25548
+ }
25549
+ }
25550
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25551
+ return TaskAerobatics
25552
+ end
25553
+ function CONTROLLABLE:TaskAerobaticsSkewedLoop(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Side,RollDeg)
25554
+ local maxrepeats=10
25555
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25556
+ local usesmoke=UseSmoke and 1 or 0
25557
+ local startimmediately=StartImmediately and 1 or 0
25558
+ local Task={
25559
+ ["name"]="SKEWED_LOOP",
25560
+ ["params"]={
25561
+ ["RepeatQty"]={
25562
+ ["max_v"]=maxrepeats,
25563
+ ["min_v"]=1,
25564
+ ["order"]=1,
25565
+ ["value"]=Repeats or 1,
25566
+ },
25567
+ ["InitAltitude"]={
25568
+ ["order"]=2,
25569
+ ["value"]=InitAltitude or 0,
25570
+ },
25571
+ ["InitSpeed"]={
25572
+ ["order"]=3,
25573
+ ["value"]=InitSpeed or 0,
25574
+ },
25575
+ ["UseSmoke"]={
25576
+ ["order"]=4,
25577
+ ["value"]=usesmoke,
25578
+ },
25579
+ ["StartImmediatly"]={
25580
+ ["order"]=5,
25581
+ ["value"]=startimmediately,
25582
+ },
25583
+ ["ROLL"]={
25584
+ ["order"]=6,
25585
+ ["value"]=RollDeg or 60,
25586
+ },
25587
+ ["SIDE"]={
25588
+ ["order"]=7,
25589
+ ["value"]=Side or 0,
25590
+ },
25591
+ }
25592
+ }
25593
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25594
+ return TaskAerobatics
25595
+ end
25596
+ function CONTROLLABLE:TaskAerobaticsTurn(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Side,RollDeg,Pull,Angle)
25597
+ local maxrepeats=10
25598
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25599
+ local usesmoke=UseSmoke and 1 or 0
25600
+ local startimmediately=StartImmediately and 1 or 0
25601
+ local Task={
25602
+ ["name"]="TURN",
25603
+ ["params"]={
25604
+ ["RepeatQty"]={
25605
+ ["max_v"]=maxrepeats,
25606
+ ["min_v"]=1,
25607
+ ["order"]=1,
25608
+ ["value"]=Repeats or 1,
25609
+ },
25610
+ ["InitAltitude"]={
25611
+ ["order"]=2,
25612
+ ["value"]=InitAltitude or 0,
25613
+ },
25614
+ ["InitSpeed"]={
25615
+ ["order"]=3,
25616
+ ["value"]=InitSpeed or 0,
25617
+ },
25618
+ ["UseSmoke"]={
25619
+ ["order"]=4,
25620
+ ["value"]=usesmoke,
25621
+ },
25622
+ ["StartImmediatly"]={
25623
+ ["order"]=5,
25624
+ ["value"]=startimmediately,
25625
+ },
25626
+ ["Ny_req"]={
25627
+ ["order"]=6,
25628
+ ["value"]=Pull or 2,
25629
+ },
25630
+ ["ROLL"]={
25631
+ ["order"]=7,
25632
+ ["value"]=RollDeg or 60,
25633
+ },
25634
+ ["SECTOR"]={
25635
+ ["order"]=8,
25636
+ ["value"]=Angle or 180,
25637
+ },
25638
+ ["SIDE"]={
25639
+ ["order"]=9,
25640
+ ["value"]=Side or 0,
25641
+ },
25642
+ }
25643
+ }
25644
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25645
+ return TaskAerobatics
25646
+ end
25647
+ function CONTROLLABLE:TaskAerobaticsDive(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Angle,FinalAltitude)
25648
+ local maxrepeats=10
25649
+ local angle=Angle
25650
+ if angle<15 then angle=15 elseif angle>90 then angle=90 end
25651
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25652
+ local usesmoke=UseSmoke and 1 or 0
25653
+ local startimmediately=StartImmediately and 1 or 0
25654
+ local Task={
25655
+ ["name"]="DIVE",
25656
+ ["params"]={
25657
+ ["RepeatQty"]={
25658
+ ["max_v"]=maxrepeats,
25659
+ ["min_v"]=1,
25660
+ ["order"]=1,
25661
+ ["value"]=Repeats or 1,
25662
+ },
25663
+ ["InitAltitude"]={
25664
+ ["order"]=2,
25665
+ ["value"]=InitAltitude or 5000,
25666
+ },
25667
+ ["InitSpeed"]={
25668
+ ["order"]=3,
25669
+ ["value"]=InitSpeed or 0,
25670
+ },
25671
+ ["UseSmoke"]={
25672
+ ["order"]=4,
25673
+ ["value"]=usesmoke,
25674
+ },
25675
+ ["StartImmediatly"]={
25676
+ ["order"]=5,
25677
+ ["value"]=startimmediately,
25678
+ },
25679
+ ["Angle"]={
25680
+ ["max_v"]=90,
25681
+ ["min_v"]=15,
25682
+ ["order"]=6,
25683
+ ["step"]=5,
25684
+ ["value"]=angle or 45,
25685
+ },
25686
+ ["FinalAltitude"]={
25687
+ ["order"]=7,
25688
+ ["value"]=FinalAltitude or 1000,
25689
+ },
25690
+ }
25691
+ }
25692
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25693
+ return TaskAerobatics
25694
+ end
25695
+ function CONTROLLABLE:TaskAerobaticsMilitaryTurn(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately)
25696
+ local maxrepeats=10
25697
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25698
+ local usesmoke=UseSmoke and 1 or 0
25699
+ local startimmediately=StartImmediately and 1 or 0
25700
+ local Task={
25701
+ ["name"]="MILITARY_TURN",
25702
+ ["params"]={
25703
+ ["RepeatQty"]={
25704
+ ["max_v"]=maxrepeats,
25705
+ ["min_v"]=1,
25706
+ ["order"]=1,
25707
+ ["value"]=Repeats or 1,
25708
+ },
25709
+ ["InitAltitude"]={
25710
+ ["order"]=2,
25711
+ ["value"]=InitAltitude or 0,
25712
+ },
25713
+ ["InitSpeed"]={
25714
+ ["order"]=3,
25715
+ ["value"]=InitSpeed or 0,
25716
+ },
25717
+ ["UseSmoke"]={
25718
+ ["order"]=4,
25719
+ ["value"]=usesmoke,
25720
+ },
25721
+ ["StartImmediatly"]={
25722
+ ["order"]=5,
25723
+ ["value"]=startimmediately,
25724
+ }
25725
+ }
25726
+ }
25727
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25728
+ return TaskAerobatics
25729
+ end
25730
+ function CONTROLLABLE:TaskAerobaticsImmelmann(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately)
25731
+ local maxrepeats=10
25732
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25733
+ local usesmoke=UseSmoke and 1 or 0
25734
+ local startimmediately=StartImmediately and 1 or 0
25735
+ local Task={
25736
+ ["name"]="IMMELMAN",
25737
+ ["params"]={
25738
+ ["RepeatQty"]={
25739
+ ["max_v"]=maxrepeats,
25740
+ ["min_v"]=1,
25741
+ ["order"]=1,
25742
+ ["value"]=Repeats or 1,
25743
+ },
25744
+ ["InitAltitude"]={
25745
+ ["order"]=2,
25746
+ ["value"]=InitAltitude or 0,
25747
+ },
25748
+ ["InitSpeed"]={
25749
+ ["order"]=3,
25750
+ ["value"]=InitSpeed or 0,
25751
+ },
25752
+ ["UseSmoke"]={
25753
+ ["order"]=4,
25754
+ ["value"]=usesmoke,
25755
+ },
25756
+ ["StartImmediatly"]={
25757
+ ["order"]=5,
25758
+ ["value"]=startimmediately,
25759
+ }
25760
+ }
25761
+ }
25762
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25763
+ return TaskAerobatics
25764
+ end
25765
+ function CONTROLLABLE:TaskAerobaticsStraightFlight(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,FlightTime)
25766
+ local maxrepeats=10
25767
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25768
+ local maxflight=200
25769
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25770
+ local flighttime=FlightTime or 10
25771
+ if flighttime>200 then maxflight=flighttime end
25772
+ local usesmoke=UseSmoke and 1 or 0
25773
+ local startimmediately=StartImmediately and 1 or 0
25774
+ local Task={
25775
+ ["name"]="STRAIGHT_FLIGHT",
25776
+ ["params"]={
25777
+ ["RepeatQty"]={
25778
+ ["max_v"]=maxrepeats,
25779
+ ["min_v"]=1,
25780
+ ["order"]=1,
25781
+ ["value"]=Repeats or 1,
25782
+ },
25783
+ ["InitAltitude"]={
25784
+ ["order"]=2,
25785
+ ["value"]=InitAltitude or 0,
25786
+ },
25787
+ ["InitSpeed"]={
25788
+ ["order"]=3,
25789
+ ["value"]=InitSpeed or 0,
25790
+ },
25791
+ ["UseSmoke"]={
25792
+ ["order"]=4,
25793
+ ["value"]=usesmoke,
25794
+ },
25795
+ ["StartImmediatly"]={
25796
+ ["order"]=5,
25797
+ ["value"]=startimmediately,
25798
+ },
25799
+ ["FlightTime"]={
25800
+ ["max_v"]=maxflight,
25801
+ ["min_v"]=1,
25802
+ ["order"]=6,
25803
+ ["step"]=0.1,
25804
+ ["value"]=flighttime or 10,
25805
+ },
25806
+ }
25807
+ }
25808
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25809
+ return TaskAerobatics
25810
+ end
25811
+ function CONTROLLABLE:TaskAerobaticsClimb(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Angle,FinalAltitude)
25812
+ local maxrepeats=10
25813
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25814
+ local usesmoke=UseSmoke and 1 or 0
25815
+ local startimmediately=StartImmediately and 1 or 0
25816
+ local Task={
25817
+ ["name"]="CLIMB",
25818
+ ["params"]={
25819
+ ["RepeatQty"]={
25820
+ ["max_v"]=maxrepeats,
25821
+ ["min_v"]=1,
25822
+ ["order"]=1,
25823
+ ["value"]=Repeats or 1,
25824
+ },
25825
+ ["InitAltitude"]={
25826
+ ["order"]=2,
25827
+ ["value"]=InitAltitude or 0,
25828
+ },
25829
+ ["InitSpeed"]={
25830
+ ["order"]=3,
25831
+ ["value"]=InitSpeed or 0,
25832
+ },
25833
+ ["UseSmoke"]={
25834
+ ["order"]=4,
25835
+ ["value"]=usesmoke,
25836
+ },
25837
+ ["StartImmediatly"]={
25838
+ ["order"]=5,
25839
+ ["value"]=startimmediately,
25840
+ },
25841
+ ["Angle"]={
25842
+ ["max_v"]=90,
25843
+ ["min_v"]=15,
25844
+ ["order"]=6,
25845
+ ["step"]=5,
25846
+ ["value"]=Angle or 45,
25847
+ },
25848
+ ["FinalAltitude"]={
25849
+ ["order"]=7,
25850
+ ["value"]=FinalAltitude or 5000,
25851
+ },
25852
+ }
25853
+ }
25854
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25855
+ return TaskAerobatics
25856
+ end
25857
+ function CONTROLLABLE:TaskAerobaticsSpiral(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,TurnAngle,Roll,Side,UpDown,Angle)
25858
+ local maxrepeats=10
25859
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25860
+ local usesmoke=UseSmoke and 1 or 0
25861
+ local startimmediately=StartImmediately and 1 or 0
25862
+ local updown=UpDown and 1 or 0
25863
+ local side=Side and 1 or 0
25864
+ local Task={
25865
+ ["name"]="SPIRAL",
25866
+ ["params"]={
25867
+ ["RepeatQty"]={
25868
+ ["max_v"]=maxrepeats,
25869
+ ["min_v"]=1,
25870
+ ["order"]=1,
25871
+ ["value"]=Repeats or 1,
25872
+ },
25873
+ ["InitAltitude"]={
25874
+ ["order"]=2,
25875
+ ["value"]=InitAltitude or 0,
25876
+ },
25877
+ ["InitSpeed"]={
25878
+ ["order"]=3,
25879
+ ["value"]=InitSpeed or 0,
25880
+ },
25881
+ ["UseSmoke"]={
25882
+ ["order"]=4,
25883
+ ["value"]=usesmoke,
25884
+ },
25885
+ ["StartImmediatly"]={
25886
+ ["order"]=5,
25887
+ ["value"]=startimmediately,
25888
+ },
25889
+ ["SECTOR"]={
25890
+ ["order"]=6,
25891
+ ["value"]=TurnAngle or 360,
25892
+ },
25893
+ ["ROLL"]={
25894
+ ["order"]=7,
25895
+ ["value"]=Roll or 60,
25896
+ },
25897
+ ["SIDE"]={
25898
+ ["order"]=8,
25899
+ ["value"]=side or 0,
25900
+ },
25901
+ ["UPDOWN"]={
25902
+ ["order"]=9,
25903
+ ["value"]=updown or 0,
25904
+ },
25905
+ ["Angle"]={
25906
+ ["max_v"]=90,
25907
+ ["min_v"]=15,
25908
+ ["order"]=10,
25909
+ ["step"]=5,
25910
+ ["value"]=Angle or 45,
25911
+ },
25912
+ }
25913
+ }
25914
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25915
+ return TaskAerobatics
25916
+ end
25917
+ function CONTROLLABLE:TaskAerobaticsSplitS(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,FinalSpeed)
25918
+ local maxrepeats=10
25919
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25920
+ local maxflight=200
25921
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25922
+ local finalspeed=FinalSpeed or 500
25923
+ local usesmoke=UseSmoke and 1 or 0
25924
+ local startimmediately=StartImmediately and 1 or 0
25925
+ local Task={
25926
+ ["name"]="SPLIT_S",
25927
+ ["params"]={
25928
+ ["RepeatQty"]={
25929
+ ["max_v"]=maxrepeats,
25930
+ ["min_v"]=1,
25931
+ ["order"]=1,
25932
+ ["value"]=Repeats or 1,
25933
+ },
25934
+ ["InitAltitude"]={
25935
+ ["order"]=2,
25936
+ ["value"]=InitAltitude or 0,
25937
+ },
25938
+ ["InitSpeed"]={
25939
+ ["order"]=3,
25940
+ ["value"]=InitSpeed or 0,
25941
+ },
25942
+ ["UseSmoke"]={
25943
+ ["order"]=4,
25944
+ ["value"]=usesmoke,
25945
+ },
25946
+ ["StartImmediatly"]={
25947
+ ["order"]=5,
25948
+ ["value"]=startimmediately,
25949
+ },
25950
+ ["FinalSpeed"]={
25951
+ ["order"]=6,
25952
+ ["value"]=finalspeed,
25953
+ },
25954
+ }
25955
+ }
25956
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
25957
+ return TaskAerobatics
25958
+ end
25959
+ function CONTROLLABLE:TaskAerobaticsAileronRoll(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Side,RollRate,TurnAngle,FixAngle)
25960
+ local maxrepeats=10
25961
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25962
+ local maxflight=200
25963
+ if Repeats>maxrepeats then maxrepeats=Repeats end
25964
+ local usesmoke=UseSmoke and 1 or 0
25965
+ local startimmediately=StartImmediately and 1 or 0
25966
+ local Task={
25967
+ ["name"]="AILERON_ROLL",
25968
+ ["params"]={
25969
+ ["RepeatQty"]={
25970
+ ["max_v"]=maxrepeats,
25971
+ ["min_v"]=1,
25972
+ ["order"]=1,
25973
+ ["value"]=Repeats or 1,
25974
+ },
25975
+ ["InitAltitude"]={
25976
+ ["order"]=2,
25977
+ ["value"]=InitAltitude or 0,
25978
+ },
25979
+ ["InitSpeed"]={
25980
+ ["order"]=3,
25981
+ ["value"]=InitSpeed or 0,
25982
+ },
25983
+ ["UseSmoke"]={
25984
+ ["order"]=4,
25985
+ ["value"]=usesmoke,
25986
+ },
25987
+ ["StartImmediatly"]={
25988
+ ["order"]=5,
25989
+ ["value"]=startimmediately,
25990
+ },
25991
+ ["SIDE"]={
25992
+ ["order"]=6,
25993
+ ["value"]=Side or 0,
25994
+ },
25995
+ ["RollRate"]={
25996
+ ["max_v"]=450,
25997
+ ["min_v"]=15,
25998
+ ["order"]=7,
25999
+ ["step"]=5,
26000
+ ["value"]=RollRate or 90,
26001
+ },
26002
+ ["SECTOR"]={
26003
+ ["order"]=8,
26004
+ ["value"]=TurnAngle or 360,
26005
+ },
26006
+ ["FIXSECTOR"]={
26007
+ ["max_v"]=180,
26008
+ ["min_v"]=0,
26009
+ ["order"]=9,
26010
+ ["step"]=5,
26011
+ ["value"]=FixAngle or 0,
26012
+ },
26013
+ }
26014
+ }
26015
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
26016
+ return TaskAerobatics
26017
+ end
26018
+ function CONTROLLABLE:TaskAerobaticsForcedTurn(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,TurnAngle,Side,FlightTime,MinSpeed)
26019
+ local maxrepeats=10
26020
+ local flighttime=FlightTime or 30
26021
+ local maxtime=200
26022
+ if flighttime>200 then maxtime=flighttime end
26023
+ if Repeats>maxrepeats then maxrepeats=Repeats end
26024
+ local usesmoke=UseSmoke and 1 or 0
26025
+ local startimmediately=StartImmediately and 1 or 0
26026
+ local Task={
26027
+ ["name"]="FORCED_TURN",
26028
+ ["params"]={
26029
+ ["RepeatQty"]={
26030
+ ["max_v"]=maxrepeats,
26031
+ ["min_v"]=1,
26032
+ ["order"]=1,
26033
+ ["value"]=Repeats or 1,
26034
+ },
26035
+ ["InitAltitude"]={
26036
+ ["order"]=2,
26037
+ ["value"]=InitAltitude or 0,
26038
+ },
26039
+ ["InitSpeed"]={
26040
+ ["order"]=3,
26041
+ ["value"]=InitSpeed or 0,
26042
+ },
26043
+ ["UseSmoke"]={
26044
+ ["order"]=4,
26045
+ ["value"]=usesmoke,
26046
+ },
26047
+ ["StartImmediatly"]={
26048
+ ["order"]=5,
26049
+ ["value"]=startimmediately,
26050
+ },
26051
+ ["SECTOR"]={
26052
+ ["order"]=6,
26053
+ ["value"]=TurnAngle or 360,
26054
+ },
26055
+ ["SIDE"]={
26056
+ ["order"]=7,
26057
+ ["value"]=Side or 0,
26058
+ },
26059
+ ["FlightTime"]={
26060
+ ["max_v"]=maxtime or 200,
26061
+ ["min_v"]=0,
26062
+ ["order"]=8,
26063
+ ["step"]=0.1,
26064
+ ["value"]=flighttime or 30,
26065
+ },
26066
+ ["MinSpeed"]={
26067
+ ["max_v"]=3000,
26068
+ ["min_v"]=30,
26069
+ ["order"]=9,
26070
+ ["step"]=10,
26071
+ ["value"]=MinSpeed or 250,
26072
+ },
26073
+ }
26074
+ }
26075
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
26076
+ return TaskAerobatics
26077
+ end
26078
+ function CONTROLLABLE:TaskAerobaticsBarrelRoll(TaskAerobatics,Repeats,InitAltitude,InitSpeed,UseSmoke,StartImmediately,Side,RollRate,TurnAngle)
26079
+ local maxrepeats=10
26080
+ if Repeats>maxrepeats then maxrepeats=Repeats end
26081
+ local usesmoke=UseSmoke and 1 or 0
26082
+ local startimmediately=StartImmediately and 1 or 0
26083
+ local Task={
26084
+ ["name"]="BARREL_ROLL",
26085
+ ["params"]={
26086
+ ["RepeatQty"]={
26087
+ ["max_v"]=maxrepeats,
26088
+ ["min_v"]=1,
26089
+ ["order"]=1,
26090
+ ["value"]=Repeats or 1,
26091
+ },
26092
+ ["InitAltitude"]={
26093
+ ["order"]=2,
26094
+ ["value"]=InitAltitude or 0,
26095
+ },
26096
+ ["InitSpeed"]={
26097
+ ["order"]=3,
26098
+ ["value"]=InitSpeed or 0,
26099
+ },
26100
+ ["UseSmoke"]={
26101
+ ["order"]=4,
26102
+ ["value"]=usesmoke,
26103
+ },
26104
+ ["StartImmediatly"]={
26105
+ ["order"]=5,
26106
+ ["value"]=startimmediately,
26107
+ },
26108
+ ["SIDE"]={
26109
+ ["order"]=6,
26110
+ ["value"]=Side or 0,
26111
+ },
26112
+ ["RollRate"]={
26113
+ ["max_v"]=450,
26114
+ ["min_v"]=15,
26115
+ ["order"]=7,
26116
+ ["step"]=5,
26117
+ ["value"]=RollRate or 90,
26118
+ },
26119
+ ["SECTOR"]={
26120
+ ["order"]=8,
26121
+ ["value"]=TurnAngle or 360,
26122
+ },
26123
+ }
26124
+ }
26125
+ table.insert(TaskAerobatics.params["maneuversSequency"],Task)
26126
+ return TaskAerobatics
26127
+ end
24724
26128
  GROUP={
24725
26129
  ClassName="GROUP",
24726
26130
  }
@@ -29524,6 +30928,81 @@ self:E(self.lid..string.format("ERROR: Unknown liquid type %s",tostring(Type)))
29524
30928
  end
29525
30929
  return name
29526
30930
  end
30931
+ function STORAGE:AddAmount(Type,Amount)
30932
+ if type(Type)=="number"then
30933
+ self:AddLiquid(Type,Amount)
30934
+ else
30935
+ self:AddItem(Type,Amount)
30936
+ end
30937
+ return self
30938
+ end
30939
+ function STORAGE:RemoveAmount(Type,Amount)
30940
+ if type(Type)=="number"then
30941
+ self:RemoveLiquid(Type,Amount)
30942
+ else
30943
+ self:RemoveItem(Type,Amount)
30944
+ end
30945
+ return self
30946
+ end
30947
+ function STORAGE:SetAmount(Type,Amount)
30948
+ if type(Type)=="number"then
30949
+ self:SetLiquid(Type,Amount)
30950
+ else
30951
+ self:SetItem(Type,Amount)
30952
+ end
30953
+ return self
30954
+ end
30955
+ function STORAGE:GetAmount(Type)
30956
+ local N=0
30957
+ if type(Type)=="number"then
30958
+ N=self:GetLiquidAmount(Type)
30959
+ else
30960
+ N=self:GetItemAmount(Type)
30961
+ end
30962
+ return N
30963
+ end
30964
+ function STORAGE:IsUnlimited(Type)
30965
+ local N=self:GetAmount(Type)
30966
+ local unlimited=false
30967
+ if N>0 then
30968
+ self:RemoveAmount(Type,1)
30969
+ local n=self:GetAmount(Type)
30970
+ unlimited=n==N
30971
+ if not unlimited then
30972
+ self:AddAmount(Type,1)
30973
+ end
30974
+ self:I(self.lid..string.format("Type=%s: unlimited=%s (N=%d n=%d)",tostring(Type),tostring(unlimited),N,n))
30975
+ end
30976
+ return unlimited
30977
+ end
30978
+ function STORAGE:IsLimited(Type)
30979
+ local limited=not self:IsUnlimited(Type)
30980
+ return limited
30981
+ end
30982
+ function STORAGE:IsUnlimitedAircraft()
30983
+ local unlimited=self:IsUnlimited("A-10C")
30984
+ return unlimited
30985
+ end
30986
+ function STORAGE:IsUnlimitedLiquids()
30987
+ local unlimited=self:IsUnlimited(STORAGE.Liquid.DIESEL)
30988
+ return unlimited
30989
+ end
30990
+ function STORAGE:IsUnlimitedWeapons()
30991
+ local unlimited=self:IsUnlimited(ENUMS.Storage.weapons.bombs.Mk_82)
30992
+ return unlimited
30993
+ end
30994
+ function STORAGE:IsLimitedAircraft()
30995
+ local limited=self:IsLimited("A-10C")
30996
+ return limited
30997
+ end
30998
+ function STORAGE:IsLimitedLiquids()
30999
+ local limited=self:IsLimited(STORAGE.Liquid.DIESEL)
31000
+ return limited
31001
+ end
31002
+ function STORAGE:IsLimitedWeapons()
31003
+ local limited=self:IsLimited(ENUMS.Storage.weapons.bombs.Mk_82)
31004
+ return limited
31005
+ end
29527
31006
  function STORAGE:GetInventory(Item)
29528
31007
  local inventory=self.warehouse:getInventory(Item)
29529
31008
  return inventory.aircraft,inventory.liquids,inventory.weapon
@@ -39684,9 +41163,11 @@ MANTIS.SamDataCH={
39684
41163
  ["PGZ-09 CH"]={Range=4,Blindspot=0,Height=3,Type="Short",Radar="CH_PGZ09"},
39685
41164
  ["S350-9M100 CH"]={Range=15,Blindspot=1.5,Height=8,Type="Short",Radar="CH_S350_50P6_9M100"},
39686
41165
  ["S350-9M96D CH"]={Range=150,Blindspot=2.5,Height=30,Type="Long",Radar="CH_S350_50P6_9M96D"},
41166
+ ["LAV-AD CH"]={Range=8,Blindspot=0.2,Height=4.8,Type="Short",Radar="CH_LAVAD"},
41167
+ ["HQ-22 CH"]={Range=170,Blindspot=5,Height=27,Type="Long",Radar="CH_HQ22_LN"},
39687
41168
  }
39688
41169
  do
39689
- function MANTIS:New(name,samprefix,ewrprefix,hq,coalition,dynamic,awacs,EmOnOff,Padding)
41170
+ function MANTIS:New(name,samprefix,ewrprefix,hq,coalition,dynamic,awacs,EmOnOff,Padding,Zones)
39690
41171
  self.SAM_Templates_Prefix=samprefix or"Red SAM"
39691
41172
  self.EWR_Templates_Prefix=ewrprefix or"Red EWR"
39692
41173
  self.HQ_Template_CC=hq or nil
@@ -39736,6 +41217,7 @@ self.maxshortrange=2
39736
41217
  self.maxclassic=6
39737
41218
  self.autoshorad=true
39738
41219
  self.ShoradGroupSet=SET_GROUP:New()
41220
+ self.FilterZones=Zones
39739
41221
  self.UseEmOnOff=true
39740
41222
  if EmOnOff==false then
39741
41223
  self.UseEmOnOff=false
@@ -39769,17 +41251,22 @@ if self.advAwacs then
39769
41251
  table.insert(self.ewr_templates,awacs)
39770
41252
  end
39771
41253
  self:T({self.ewr_templates})
41254
+ self.SAM_Group=SET_GROUP:New():FilterPrefixes(self.SAM_Templates_Prefix):FilterCoalitions(self.Coalition)
41255
+ self.EWR_Group=SET_GROUP:New():FilterPrefixes(self.ewr_templates):FilterCoalitions(self.Coalition)
41256
+ if self.FilterZones then
41257
+ self.SAM_Group:FilterZones(self.FilterZones)
41258
+ end
39772
41259
  if self.dynamic then
39773
- self.SAM_Group=SET_GROUP:New():FilterPrefixes(self.SAM_Templates_Prefix):FilterCoalitions(self.Coalition):FilterStart()
39774
- self.EWR_Group=SET_GROUP:New():FilterPrefixes(self.ewr_templates):FilterCoalitions(self.Coalition):FilterStart()
41260
+ self.SAM_Group:FilterStart()
41261
+ self.EWR_Group:FilterStart()
39775
41262
  else
39776
- self.SAM_Group=SET_GROUP:New():FilterPrefixes(self.SAM_Templates_Prefix):FilterCoalitions(self.Coalition):FilterOnce()
39777
- self.EWR_Group=SET_GROUP:New():FilterPrefixes(self.ewr_templates):FilterCoalitions(self.Coalition):FilterOnce()
41263
+ self.SAM_Group:FilterOnce()
41264
+ self.EWR_Group:FilterOnce()
39778
41265
  end
39779
41266
  if self.HQ_Template_CC then
39780
41267
  self.HQ_CC=GROUP:FindByName(self.HQ_Template_CC)
39781
41268
  end
39782
- self.version="0.8.11"
41269
+ self.version="0.8.14"
39783
41270
  self:I(string.format("***** Starting MANTIS Version %s *****",self.version))
39784
41271
  self:SetStartState("Stopped")
39785
41272
  self:AddTransition("Stopped","Start","Running")
@@ -41644,7 +43131,7 @@ IRExitRange={filename="IR-ExitRange.ogg",duration=3.10},
41644
43131
  RANGE.Names={}
41645
43132
  RANGE.MenuF10={}
41646
43133
  RANGE.MenuF10Root=nil
41647
- RANGE.version="2.7.0"
43134
+ RANGE.version="2.7.1"
41648
43135
  function RANGE:New(RangeName)
41649
43136
  local self=BASE:Inherit(self,FSM:New())
41650
43137
  self.rangename=RangeName or"Practice Range"
@@ -42359,6 +43846,7 @@ if _track and dPR<=self.BombtrackThreshold and _unit and _playername then
42359
43846
  local playerData=self.PlayerSettings[_playername]
42360
43847
  local attackHdg=_unit:GetHeading()
42361
43848
  local attackAlt=_unit:GetHeight()
43849
+ attackAlt=UTILS.MetersToFeet(attackAlt)
42362
43850
  local attackVel=_unit:GetVelocityKNOTS()
42363
43851
  self:T(self.lid..string.format("RANGE %s: Tracking %s - %s.",self.rangename,weapon:GetTypeName(),weapon:GetName()))
42364
43852
  weapon:SetFuncImpact(RANGE._OnImpact,self,playerData,attackHdg,attackAlt,attackVel)
@@ -63895,7 +65383,7 @@ RSBNChannel={filename="RSBNChannel.ogg",duration=1.14},
63895
65383
  Zulu={filename="Zulu.ogg",duration=0.62},
63896
65384
  }
63897
65385
  _ATIS={}
63898
- ATIS.version="0.9.15"
65386
+ ATIS.version="0.9.16"
63899
65387
  function ATIS:New(AirbaseName,Frequency,Modulation)
63900
65388
  local self=BASE:Inherit(self,FSM:New())
63901
65389
  self.airbasename=AirbaseName
@@ -64173,7 +65661,8 @@ local coal=self.airbase and self.airbase:GetCoalition()or nil
64173
65661
  return coal
64174
65662
  end
64175
65663
  function ATIS:onafterStart(From,Event,To)
64176
- self:I("Airbase category is "..self.airbase:GetAirbaseCategory())
65664
+ self:T({From,Event,To})
65665
+ self:T("Airbase category is "..self.airbase:GetAirbaseCategory())
64177
65666
  if self.airbase:GetAirbaseCategory()==Airbase.Category.SHIP then
64178
65667
  self:E(self.lid..string.format("ERROR: Cannot start ATIS for airbase %s! Only AIRDROMES are supported but NOT SHIPS.",self.airbasename))
64179
65668
  return
@@ -64206,6 +65695,7 @@ self:__Status(-2)
64206
65695
  self:__CheckQueue(-3)
64207
65696
  end
64208
65697
  function ATIS:onafterStatus(From,Event,To)
65698
+ self:T({From,Event,To})
64209
65699
  local fsmstate=self:GetState()
64210
65700
  local relayunitstatus="N/A"
64211
65701
  if self.relayunitname then
@@ -64222,10 +65712,12 @@ text=text..string.format(", Relay unit=%s (alive=%s)",tostring(self.relayunitnam
64222
65712
  end
64223
65713
  self:T(self.lid..text)
64224
65714
  if not self:Is("Stopped")then
64225
- self:__Status(-60)
65715
+ self:__Status(60)
64226
65716
  end
64227
65717
  end
64228
65718
  function ATIS:onafterCheckQueue(From,Event,To)
65719
+ self:T({From,Event,To})
65720
+ if not self:Is("Stopped")then
64229
65721
  if self.useSRS then
64230
65722
  self:Broadcast()
64231
65723
  else
@@ -64236,11 +65728,11 @@ else
64236
65728
  self:T2(self.lid..string.format("Radio queue %d transmissions queued.",#self.radioqueue.queue))
64237
65729
  end
64238
65730
  end
64239
- if not self:Is("Stopped")then
64240
- self:__CheckQueue(-math.abs(self.dTQueueCheck))
65731
+ self:__CheckQueue(math.abs(self.dTQueueCheck))
64241
65732
  end
64242
65733
  end
64243
65734
  function ATIS:onafterBroadcast(From,Event,To)
65735
+ self:T({From,Event,To})
64244
65736
  local coord=self.airbase:GetCoordinate()
64245
65737
  local height=coord:GetLandHeight()
64246
65738
  local qfe=coord:GetPressure(height)
@@ -64794,8 +66286,9 @@ end
64794
66286
  alltext=alltext..";\n"..subtitle
64795
66287
  local _RUNACT
64796
66288
  if not self.ATISforFARPs then
66289
+ local subtitle
64797
66290
  if runwayLanding then
64798
- local subtitle=string.format("Active runway %s",runwayLanding)
66291
+ subtitle=string.format("Active runway %s",runwayLanding)
64799
66292
  if rwyLandingLeft==true then
64800
66293
  subtitle=subtitle.." Left"
64801
66294
  elseif rwyLandingLeft==false then
@@ -65006,6 +66499,7 @@ self:UpdateMarker(_INFORMATION,_RUNACT,_WIND,_ALTIMETER,_TEMPERATURE)
65006
66499
  end
65007
66500
  end
65008
66501
  function ATIS:onafterReport(From,Event,To,Text)
66502
+ self:T({From,Event,To})
65009
66503
  self:T(self.lid..string.format("Report:\n%s",Text))
65010
66504
  if self.useSRS and self.msrs then
65011
66505
  local text=string.gsub(Text,"[\r\n]","")
@@ -65460,7 +66954,8 @@ return mission
65460
66954
  end
65461
66955
  function AUFTRAG:NewCAP(ZoneCAP,Altitude,Speed,Coordinate,Heading,Leg,TargetTypes)
65462
66956
  TargetTypes=UTILS.EnsureTable(TargetTypes,true)
65463
- local mission=AUFTRAG:NewORBIT(Coordinate or ZoneCAP:GetCoordinate(),Altitude or 10000,Speed or 350,Heading,Leg)
66957
+ Altitude=Altitude or 10000
66958
+ local mission=AUFTRAG:NewORBIT(Coordinate or ZoneCAP:GetCoordinate(),Altitude,Speed or 350,Heading,Leg)
65464
66959
  mission.type=AUFTRAG.Type.CAP
65465
66960
  mission:_SetLogID()
65466
66961
  mission.engageZone=ZoneCAP
@@ -83804,6 +85299,20 @@ element.fuelrel=fuel
83804
85299
  end
83805
85300
  self:T(self.lid..string.format("Travelled ds=%.1f km dt=%.1f s ==> v=%.1f knots. Fuel left for %.1f min",self.traveldist/1000,dt,UTILS.MpsToKnots(v),TmaxFuel/60))
83806
85301
  end
85302
+ if false then
85303
+ for _,_element in pairs(self.elements)do
85304
+ local element=_element
85305
+ local unit=element.unit
85306
+ if unit and unit:IsAlive()then
85307
+ local vec3=unit:GetVec3()
85308
+ if vec3 and element.pos then
85309
+ local id=UTILS.GetMarkID()
85310
+ trigger.action.lineToAll(-1,id,vec3,element.pos,{1,1,1,0.5},1)
85311
+ end
85312
+ element.pos=vec3
85313
+ end
85314
+ end
85315
+ end
83807
85316
  if alive and self.group:IsAirborne(true)then
83808
85317
  local fuelmin=self:GetFuelMin()
83809
85318
  self:T2(self.lid..string.format("Fuel state=%d",fuelmin))
@@ -90548,18 +92057,20 @@ end
90548
92057
  end
90549
92058
  return self
90550
92059
  end
90551
- function OPSGROUP:SelfDestruction(Delay,ExplosionPower)
92060
+ function OPSGROUP:SelfDestruction(Delay,ExplosionPower,ElementName)
90552
92061
  if Delay and Delay>0 then
90553
- self:ScheduleOnce(Delay,OPSGROUP.SelfDestruction,self,0,ExplosionPower)
92062
+ self:ScheduleOnce(Delay,OPSGROUP.SelfDestruction,self,0,ExplosionPower,ElementName)
90554
92063
  else
90555
92064
  for i,_element in pairs(self.elements)do
90556
92065
  local element=_element
92066
+ if ElementName==nil or ElementName==element.name then
90557
92067
  local unit=element.unit
90558
92068
  if unit and unit:IsAlive()then
90559
92069
  unit:Explode(ExplosionPower or 100)
90560
92070
  end
90561
92071
  end
90562
92072
  end
92073
+ end
90563
92074
  return self
90564
92075
  end
90565
92076
  function OPSGROUP:SetSRS(PathToSRS,Gender,Culture,Voice,Port,PathToGoogleKey,Label,Volume)
@@ -92122,10 +93633,10 @@ end
92122
93633
  if self.isFlightgroup then
92123
93634
  if Mission.prohibitABExecute==true then
92124
93635
  self:SetProhibitAfterburner()
92125
- self:I("Set prohibit AB")
93636
+ self:T(self.lid.."Set prohibit AB")
92126
93637
  elseif Mission.prohibitABExecute==false then
92127
93638
  self:SetAllowAfterburner()
92128
- self:T2("Set allow AB")
93639
+ self:T2(self.lid.."Set allow AB")
92129
93640
  end
92130
93641
  end
92131
93642
  end
@@ -93041,19 +94552,31 @@ end
93041
94552
  end
93042
94553
  end
93043
94554
  for i=#Element.cargoBay,1,-1 do
93044
- local cargo=Element.cargoBay[i]
93045
- self:_DelCargobay(cargo.group)
93046
- if cargo.group and not(cargo.group:IsDead()or cargo.group:IsStopped())then
93047
- cargo.group:_RemoveMyCarrier()
93048
- if cargo.reserved then
93049
- cargo.group:_NewCargoStatus(OPSGROUP.CargoStatus.NOTCARGO)
93050
- else
93051
- for _,cargoelement in pairs(cargo.group.elements)do
94555
+ local mycargo=Element.cargoBay[i]
94556
+ if mycargo.group then
94557
+ self:_DelCargobay(mycargo.group)
94558
+ if mycargo.group and not(mycargo.group:IsDead()or mycargo.group:IsStopped())then
94559
+ mycargo.group:_RemoveMyCarrier()
94560
+ if mycargo.reserved then
94561
+ mycargo.group:_NewCargoStatus(OPSGROUP.CargoStatus.NOTCARGO)
94562
+ else
94563
+ for _,cargoelement in pairs(mycargo.group.elements)do
93052
94564
  self:T2(self.lid.."Cargo element dead "..cargoelement.name)
93053
- cargo.group:ElementDead(cargoelement)
94565
+ mycargo.group:ElementDead(cargoelement)
93054
94566
  end
93055
94567
  end
93056
94568
  end
94569
+ else
94570
+ if self.cargoTZC then
94571
+ for _,_cargo in pairs(self.cargoTZC.Cargos)do
94572
+ local cargo=_cargo
94573
+ if cargo.uid==mycargo.cargoUID then
94574
+ cargo.storage.cargoLost=cargo.storage.cargoLost+mycargo.storageAmount
94575
+ end
94576
+ end
94577
+ end
94578
+ self:_DelCargobayElement(Element,mycargo)
94579
+ end
93057
94580
  end
93058
94581
  end
93059
94582
  function OPSGROUP:onafterRespawn(From,Event,To,Template)
@@ -93280,7 +94803,12 @@ for _,_element in pairs(self.elements)do
93280
94803
  local element=_element
93281
94804
  for _,_cargo in pairs(element.cargoBay)do
93282
94805
  local cargo=_cargo
94806
+ if cargo.group then
93283
94807
  text=text..string.format("\n- %s in carrier %s, reserved=%s",tostring(cargo.group:GetName()),tostring(element.name),tostring(cargo.reserved))
94808
+ else
94809
+ text=text..string.format("\n- storage %s=%d kg in carrier %s [UID=%s]",
94810
+ tostring(cargo.storageType),tostring(cargo.storageAmount*cargo.storageWeight),tostring(element.name),tostring(cargo.cargoUID))
94811
+ end
93284
94812
  end
93285
94813
  end
93286
94814
  if text==""then
@@ -93299,6 +94827,7 @@ local deployname=deployzone and deployzone:GetName()or"unknown"
93299
94827
  text=text..string.format("\n[%d] UID=%d Status=%s: %s --> %s",i,transport.uid,transport:GetState(),pickupname,deployname)
93300
94828
  for j,_cargo in pairs(transport:GetCargos())do
93301
94829
  local cargo=_cargo
94830
+ if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
93302
94831
  local state=cargo.opsgroup:GetState()
93303
94832
  local status=cargo.opsgroup.cargoStatus
93304
94833
  local name=cargo.opsgroup.groupname
@@ -93306,6 +94835,8 @@ local carriergroup,carrierelement,reserved=cargo.opsgroup:_GetMyCarrier()
93306
94835
  local carrierGroupname=carriergroup and carriergroup.groupname or"none"
93307
94836
  local carrierElementname=carrierelement and carrierelement.name or"none"
93308
94837
  text=text..string.format("\n (%d) %s [%s]: %s, carrier=%s(%s), delivered=%s",j,name,state,status,carrierGroupname,carrierElementname,tostring(cargo.delivered))
94838
+ else
94839
+ end
93309
94840
  end
93310
94841
  end
93311
94842
  if text~=""then
@@ -93347,26 +94878,32 @@ self:T(self.lid..string.format("Picking up at %s [TZC UID=%d] for %s sec...",sel
93347
94878
  elseif self:IsLoading()then
93348
94879
  self.Tloading=self.Tloading or Time
93349
94880
  local tloading=Time-self.Tloading
93350
- self:T(self.lid..string.format("Loading at %s [TZC UID=%d] for %s sec...",self.cargoTZC.PickupZone and self.cargoTZC.PickupZone:GetName()or"unknown",self.cargoTZC.uid,tloading))
94881
+ self:T(self.lid..string.format("Loading at %s [TZC UID=%d] for %.1f sec...",self.cargoTZC.PickupZone and self.cargoTZC.PickupZone:GetName()or"unknown",self.cargoTZC.uid,tloading))
93351
94882
  local boarding=false
93352
94883
  local gotcargo=false
93353
94884
  for _,_cargo in pairs(self.cargoTZC.Cargos)do
93354
94885
  local cargo=_cargo
93355
- if cargo.opsgroup:IsBoarding(self.groupname)then
94886
+ if cargo.type==OPSTRANSPORT.CargoType.OPSTRANPORT then
94887
+ if cargo.opsgroup and cargo.opsgroup:IsBoarding(self.groupname)then
93356
94888
  boarding=true
93357
94889
  end
93358
- if cargo.opsgroup:IsLoaded(self.groupname)then
94890
+ if cargo.opsgroup and cargo.opsgroup:IsLoaded(self.groupname)then
94891
+ gotcargo=true
94892
+ end
94893
+ else
94894
+ local mycargo=self:_GetMyCargoBayFromUID(cargo.uid)
94895
+ if mycargo and mycargo.storageAmount>0 then
93359
94896
  gotcargo=true
93360
94897
  end
93361
94898
  end
94899
+ end
93362
94900
  if gotcargo and self.cargoTransport:_CheckRequiredCargos(self.cargoTZC,self)and not boarding then
93363
- self:T(self.lid.."Boarding finished ==> Loaded")
94901
+ self:T(self.lid.."Boarding/loading finished ==> Loaded")
94902
+ self.Tloading=nil
93364
94903
  self:LoadingDone()
93365
94904
  else
93366
94905
  self:Loading()
93367
94906
  end
93368
- if not gotcargo and not boarding then
93369
- end
93370
94907
  elseif self:IsTransporting()then
93371
94908
  self.Ttransporting=self.Ttransporting or Time
93372
94909
  local ttransporting=Time-self.Ttransporting
@@ -93378,11 +94915,19 @@ self:T(self.lid.."Unloading ==> Checking if all cargo was delivered")
93378
94915
  local delivered=true
93379
94916
  for _,_cargo in pairs(self.cargoTZC.Cargos)do
93380
94917
  local cargo=_cargo
94918
+ if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
93381
94919
  local carrierGroup=cargo.opsgroup:_GetMyCarrierGroup()
93382
94920
  if(carrierGroup and carrierGroup:GetName()==self:GetName())and not cargo.delivered then
93383
94921
  delivered=false
93384
94922
  break
93385
94923
  end
94924
+ else
94925
+ local mycargo=self:_GetMyCargoBayFromUID(cargo.uid)
94926
+ if mycargo and not cargo.delivered then
94927
+ delivered=false
94928
+ break
94929
+ end
94930
+ end
93386
94931
  end
93387
94932
  if delivered then
93388
94933
  self:T(self.lid.."Unloading finished ==> UnloadingDone")
@@ -93399,6 +94944,7 @@ local deployname=deployzone and deployzone:GetName()or"unknown"
93399
94944
  local text=string.format("Carrier [%s]: %s --> %s",self.carrierStatus,pickupname,deployname)
93400
94945
  for _,_cargo in pairs(self.cargoTransport:GetCargos(self.cargoTZC))do
93401
94946
  local cargo=_cargo
94947
+ if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
93402
94948
  local name=cargo.opsgroup:GetName()
93403
94949
  local gstatus=cargo.opsgroup:GetState()
93404
94950
  local cstatus=cargo.opsgroup.cargoStatus
@@ -93407,6 +94953,8 @@ local carriergroup,carrierelement,reserved=cargo.opsgroup:_GetMyCarrier()
93407
94953
  local carrierGroupname=carriergroup and carriergroup.groupname or"none"
93408
94954
  local carrierElementname=carrierelement and carrierelement.name or"none"
93409
94955
  text=text..string.format("\n- %s (%.1f kg) [%s]: %s, carrier=%s (%s), delivered=%s",name,weight,gstatus,cstatus,carrierElementname,carrierGroupname,tostring(cargo.delivered))
94956
+ else
94957
+ end
93410
94958
  end
93411
94959
  self:I(self.lid..text)
93412
94960
  end
@@ -93443,6 +94991,44 @@ self:AddWeightCargo(CarrierElement.name,weight)
93443
94991
  end
93444
94992
  return self
93445
94993
  end
94994
+ function OPSGROUP:_AddCargobayStorage(CarrierElement,CargoUID,StorageType,StorageAmount,StorageWeight)
94995
+ local MyCargo=self:_CreateMyCargo(CargoUID,nil,StorageType,StorageAmount,StorageWeight)
94996
+ self:_AddMyCargoBay(MyCargo,CarrierElement)
94997
+ end
94998
+ function OPSGROUP:_CreateMyCargo(CargoUID,OpsGroup,StorageType,StorageAmount,StorageWeight)
94999
+ local cargo={}
95000
+ cargo.cargoUID=CargoUID
95001
+ cargo.group=OpsGroup
95002
+ cargo.storageType=StorageType
95003
+ cargo.storageAmount=StorageAmount
95004
+ cargo.storageWeight=StorageWeight
95005
+ cargo.reserved=false
95006
+ return cargo
95007
+ end
95008
+ function OPSGROUP:_AddMyCargoBay(MyCargo,CarrierElement)
95009
+ table.insert(CarrierElement.cargoBay,MyCargo)
95010
+ if not MyCargo.reserved then
95011
+ local weight=0
95012
+ if MyCargo.group then
95013
+ weight=MyCargo.group:GetWeightTotal()
95014
+ else
95015
+ weight=MyCargo.storageAmount*MyCargo.storageWeight
95016
+ end
95017
+ self:AddWeightCargo(CarrierElement.name,weight)
95018
+ end
95019
+ end
95020
+ function OPSGROUP:_GetMyCargoBayFromUID(uid)
95021
+ for _,_element in pairs(self.elements)do
95022
+ local element=_element
95023
+ for i,_mycargo in pairs(element.cargoBay)do
95024
+ local mycargo=_mycargo
95025
+ if mycargo.cargoUID and mycargo.cargoUID==uid then
95026
+ return mycargo,element,i
95027
+ end
95028
+ end
95029
+ end
95030
+ return nil,nil,nil
95031
+ end
93446
95032
  function OPSGROUP:GetCargoGroups(CarrierName)
93447
95033
  local cargos={}
93448
95034
  for _,_element in pairs(self.elements)do
@@ -93473,6 +95059,31 @@ end
93473
95059
  end
93474
95060
  return nil,nil,nil
93475
95061
  end
95062
+ function OPSGROUP:_GetCargobayElement(Element,CargoUID)
95063
+ self:T3({Element=Element,CargoUID=CargoUID})
95064
+ for i,_mycargo in pairs(Element.cargoBay)do
95065
+ local mycargo=_mycargo
95066
+ if mycargo.cargoUID and mycargo.cargoUID==CargoUID then
95067
+ return mycargo
95068
+ end
95069
+ end
95070
+ return nil
95071
+ end
95072
+ function OPSGROUP:_DelCargobayElement(Element,MyCargo)
95073
+ for i,_mycargo in pairs(Element.cargoBay)do
95074
+ local mycargo=_mycargo
95075
+ if mycargo.cargoUID and MyCargo.cargoUID and mycargo.cargoUID==MyCargo.cargoUID then
95076
+ if MyCargo.group then
95077
+ self:RedWeightCargo(Element.name,MyCargo.group:GetWeightTotal())
95078
+ else
95079
+ self:RedWeightCargo(Element.name,MyCargo.storageAmount*MyCargo.storageWeight)
95080
+ end
95081
+ table.remove(Element.cargoBay,i)
95082
+ return true
95083
+ end
95084
+ end
95085
+ return false
95086
+ end
93476
95087
  function OPSGROUP:_DelCargobay(CargoGroup)
93477
95088
  if self.cargoBay[CargoGroup.groupname]then
93478
95089
  self.cargoBay[CargoGroup.groupname]=nil
@@ -93520,9 +95131,10 @@ function OPSGROUP:_CheckDelivered(CargoTransport)
93520
95131
  local done=true
93521
95132
  for _,_cargo in pairs(CargoTransport:GetCargos())do
93522
95133
  local cargo=_cargo
93523
- if self:CanCargo(cargo.opsgroup)then
95134
+ if self:CanCargo(cargo)then
93524
95135
  if cargo.delivered then
93525
- elseif cargo.opsgroup==nil or cargo.opsgroup:IsDead()or cargo.opsgroup:IsStopped()then
95136
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and cargo.opsgroup==nil then
95137
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and(cargo.opsgroup:IsDead()or cargo.opsgroup:IsStopped())then
93526
95138
  else
93527
95139
  done=false
93528
95140
  end
@@ -93536,10 +95148,10 @@ local done=true
93536
95148
  if CargoTransport then
93537
95149
  for _,_cargo in pairs(CargoTransport:GetCargos())do
93538
95150
  local cargo=_cargo
93539
- if self:CanCargo(cargo.opsgroup)then
95151
+ if self:CanCargo(cargo)then
93540
95152
  if cargo.delivered then
93541
- elseif cargo.opsgroup==nil or cargo.opsgroup:IsDead()or cargo.opsgroup:IsStopped()then
93542
- elseif cargo.opsgroup:IsLoaded(CargoTransport:_GetCarrierNames())then
95153
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and(cargo.opsgroup==nil or cargo.opsgroup:IsDead()or cargo.opsgroup:IsStopped())then
95154
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and(cargo.opsgroup:IsLoaded(CargoTransport:_GetCarrierNames()))then
93543
95155
  else
93544
95156
  done=false
93545
95157
  end
@@ -93643,8 +95255,11 @@ if(UnitName==nil or UnitName==element.name)and(element and element.status~=OPSGR
93643
95255
  for _,_cargo in pairs(element.cargoBay)do
93644
95256
  local cargo=_cargo
93645
95257
  if(not cargo.reserved)or(cargo.reserved==true and(IncludeReserved==true or IncludeReserved==nil))then
93646
- local cargoweight=cargo.group:GetWeightTotal()
93647
- gewicht=gewicht+cargoweight
95258
+ if cargo.group then
95259
+ gewicht=gewicht+cargo.group:GetWeightTotal()
95260
+ else
95261
+ gewicht=gewicht+cargo.storageAmount*cargo.storageWeight
95262
+ end
93648
95263
  end
93649
95264
  end
93650
95265
  end
@@ -93691,27 +95306,54 @@ function OPSGROUP:RedWeightCargo(UnitName,Weight)
93691
95306
  self:AddWeightCargo(UnitName,-Weight)
93692
95307
  return self
93693
95308
  end
93694
- function OPSGROUP:CanCargo(CargoGroup)
93695
- if CargoGroup then
93696
- local weight=CargoGroup:GetWeightTotal()
95309
+ function OPSGROUP:_GetWeightStorage(Storage,Total,Reserved,Amount)
95310
+ local weight=Storage.cargoAmount
95311
+ if not Total then
95312
+ weight=weight-Storage.cargoLost-Storage.cargoLoaded-Storage.cargoDelivered
95313
+ end
95314
+ if Reserved then
95315
+ weight=weight-Storage.cargoReserved
95316
+ end
95317
+ if not Amount then
95318
+ weight=weight*Storage.cargoWeight
95319
+ end
95320
+ return weight
95321
+ end
95322
+ function OPSGROUP:CanCargo(Cargo)
95323
+ if Cargo then
95324
+ local weight=math.huge
95325
+ if Cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
95326
+ local weight=Cargo.opsgroup:GetWeightTotal()
93697
95327
  for _,_element in pairs(self.elements)do
93698
95328
  local element=_element
93699
95329
  if element and element.status~=OPSGROUP.ElementStatus.DEAD and element.weightMaxCargo>=weight then
93700
95330
  return true
93701
95331
  end
93702
95332
  end
95333
+ else
95334
+ weight=Cargo.storage.cargoWeight
95335
+ end
95336
+ local bay=0
95337
+ for _,_element in pairs(self.elements)do
95338
+ local element=_element
95339
+ if element and element.status~=OPSGROUP.ElementStatus.DEAD then
95340
+ bay=bay+element.weightMaxCargo
95341
+ end
95342
+ end
95343
+ if bay>=weight then
95344
+ return true
95345
+ end
93703
95346
  end
93704
95347
  return false
93705
95348
  end
93706
- function OPSGROUP:FindCarrierForCargo(CargoGroup)
93707
- local weight=CargoGroup:GetWeightTotal()
95349
+ function OPSGROUP:FindCarrierForCargo(Weight)
93708
95350
  for _,_element in pairs(self.elements)do
93709
95351
  local element=_element
93710
95352
  local free=self:GetFreeCargobay(element.name)
93711
- if free>=weight then
95353
+ if free>=Weight then
93712
95354
  return element
93713
95355
  else
93714
- self:T3(self.lid..string.format("%s: Weight %d>%d free cargo bay",element.name,weight,free))
95356
+ self:T3(self.lid..string.format("%s: Weight %d>%d free cargo bay",element.name,Weight,free))
93715
95357
  end
93716
95358
  end
93717
95359
  return nil
@@ -93848,42 +95490,97 @@ self:__Cruise(-2,nil,Formation)
93848
95490
  end
93849
95491
  end
93850
95492
  end
95493
+ function OPSGROUP:_SortCargo(Cargos)
95494
+ local function _sort(a,b)
95495
+ local cargoA=a
95496
+ local cargoB=b
95497
+ local weightA=0
95498
+ local weightB=0
95499
+ if cargoA.opsgroup then
95500
+ weightA=cargoA.opsgroup:GetWeightTotal()
95501
+ else
95502
+ weightA=self:_GetWeightStorage(cargoA.storage)
95503
+ end
95504
+ if cargoB.opsgroup then
95505
+ weightB=cargoB.opsgroup:GetWeightTotal()
95506
+ else
95507
+ weightB=self:_GetWeightStorage(cargoB.storage)
95508
+ end
95509
+ return weightA>weightB
95510
+ end
95511
+ table.sort(Cargos,_sort)
95512
+ return Cargos
95513
+ end
93851
95514
  function OPSGROUP:onafterLoading(From,Event,To)
93852
95515
  self:_NewCarrierStatus(OPSGROUP.CarrierStatus.LOADING)
93853
- self.Tloading=timer.getAbsTime()
93854
95516
  local cargos={}
93855
95517
  for _,_cargo in pairs(self.cargoTZC.Cargos)do
93856
95518
  local cargo=_cargo
93857
- local canCargo=self:CanCargo(cargo.opsgroup)
93858
- local isCarrier=cargo.opsgroup:IsPickingup()or cargo.opsgroup:IsLoading()or cargo.opsgroup:IsTransporting()or cargo.opsgroup:IsUnloading()
93859
- local isNotCargo=cargo.opsgroup:IsNotCargo(true)
93860
- local isHolding=cargo.opsgroup:IsHolding()or cargo.opsgroup:IsLoaded()
93861
- local inZone=cargo.opsgroup:IsInZone(self.cargoTZC.EmbarkZone)or cargo.opsgroup:IsInUtero()
93862
- local isOnMission=cargo.opsgroup:IsOnMission()
95519
+ local canCargo=self:CanCargo(cargo)
95520
+ local isCarrier=false
95521
+ local isNotCargo=true
95522
+ local isHolding=cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and(cargo.opsgroup:IsHolding()or cargo.opsgroup:IsLoaded())or true
95523
+ local inZone=cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and(cargo.opsgroup:IsInZone(self.cargoTZC.EmbarkZone)or cargo.opsgroup:IsInUtero())or true
95524
+ local isOnMission=cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and cargo.opsgroup:IsOnMission()or false
93863
95525
  if isOnMission then
93864
95526
  local mission=cargo.opsgroup:GetMissionCurrent()
93865
95527
  if mission and((mission.opstransport and mission.opstransport.uid==self.cargoTransport.uid)or mission.type==AUFTRAG.Type.NOTHING)then
93866
95528
  isOnMission=not isHolding
93867
95529
  end
93868
95530
  end
95531
+ local isAvail=true
95532
+ if cargo.type==OPSTRANSPORT.CargoType.STORAGE then
95533
+ local nAvail=cargo.storage.storageFrom:GetAmount(cargo.storage.cargoType)
95534
+ if nAvail>0 then
95535
+ isAvail=true
95536
+ else
95537
+ isAvail=false
95538
+ end
95539
+ else
95540
+ isCarrier=cargo.opsgroup:IsPickingup()or cargo.opsgroup:IsLoading()or cargo.opsgroup:IsTransporting()or cargo.opsgroup:IsUnloading()
95541
+ isNotCargo=cargo.opsgroup:IsNotCargo(true)
95542
+ end
95543
+ local isDead=cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and cargo.opsgroup:IsDead()or false
93869
95544
  self:T(self.lid..string.format("Loading: canCargo=%s, isCarrier=%s, isNotCargo=%s, isHolding=%s, isOnMission=%s",
93870
95545
  tostring(canCargo),tostring(isCarrier),tostring(isNotCargo),tostring(isHolding),tostring(isOnMission)))
93871
- if canCargo and inZone and isNotCargo and isHolding and(not(cargo.delivered or cargo.opsgroup:IsDead()or isCarrier or isOnMission))then
95546
+ if canCargo and inZone and isNotCargo and isHolding and isAvail and(not(cargo.delivered or isDead or isCarrier or isOnMission))then
93872
95547
  table.insert(cargos,cargo)
93873
95548
  end
93874
95549
  end
93875
- local function _sort(a,b)
93876
- local cargoA=a
93877
- local cargoB=b
93878
- return cargoA.opsgroup:GetWeightTotal()>cargoB.opsgroup:GetWeightTotal()
93879
- end
93880
- table.sort(cargos,_sort)
95550
+ self:_SortCargo(cargos)
93881
95551
  for _,_cargo in pairs(cargos)do
93882
95552
  local cargo=_cargo
93883
- local carrier=self:FindCarrierForCargo(cargo.opsgroup)
95553
+ local weight=nil
95554
+ if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
95555
+ weight=cargo.opsgroup:GetWeightTotal()
95556
+ local carrier=self:FindCarrierForCargo(weight)
93884
95557
  if carrier then
93885
95558
  cargo.opsgroup:Board(self,carrier)
93886
95559
  end
95560
+ else
95561
+ weight=self:_GetWeightStorage(cargo.storage,false)
95562
+ local Amount=cargo.storage.storageFrom:GetAmount(cargo.storage.cargoType)
95563
+ local Weight=Amount*cargo.storage.cargoWeight
95564
+ weight=math.min(weight,Weight)
95565
+ self:T(self.lid..string.format("Loading storage weight=%d kg (warehouse has %d kg)!",weight,Weight))
95566
+ for _,_element in pairs(self.elements)do
95567
+ local element=_element
95568
+ local free=self:GetFreeCargobay(element.name)
95569
+ local w=math.min(weight,free)
95570
+ if w>=cargo.storage.cargoWeight then
95571
+ local amount=math.floor(w/cargo.storage.cargoWeight)
95572
+ cargo.storage.storageFrom:RemoveAmount(cargo.storage.cargoType,amount)
95573
+ cargo.storage.cargoLoaded=cargo.storage.cargoLoaded+amount
95574
+ self:_AddCargobayStorage(element,cargo.uid,cargo.storage.cargoType,amount,cargo.storage.cargoWeight)
95575
+ weight=weight-amount*cargo.storage.cargoWeight
95576
+ local text=string.format("Element %s: loaded amount=%d (weight=%d) ==> left=%d kg",element.name,amount,amount*cargo.storage.cargoWeight,weight)
95577
+ self:T(self.lid..text)
95578
+ if weight<=0 then
95579
+ break
95580
+ end
95581
+ end
95582
+ end
95583
+ end
93887
95584
  end
93888
95585
  end
93889
95586
  function OPSGROUP:_NewCargoStatus(Status)
@@ -93907,7 +95604,8 @@ function OPSGROUP:onafterLoad(From,Event,To,CargoGroup,Carrier)
93907
95604
  self:T(self.lid..string.format("Loading group %s",tostring(CargoGroup.groupname)))
93908
95605
  local carrier=Carrier or CargoGroup:_GetMyCarrierElement()
93909
95606
  if not carrier then
93910
- carrier=self:FindCarrierForCargo(CargoGroup)
95607
+ local weight=CargoGroup:GetWeightTotal()
95608
+ carrier=self:FindCarrierForCargo(weight)
93911
95609
  end
93912
95610
  if carrier then
93913
95611
  CargoGroup:_NewCargoStatus(OPSGROUP.CargoStatus.LOADED)
@@ -94036,6 +95734,7 @@ self:T(self.lid.."Unloading..")
94036
95734
  local zone=self.cargoTZC.DisembarkZone or self.cargoTZC.DeployZone
94037
95735
  for _,_cargo in pairs(self.cargoTZC.Cargos)do
94038
95736
  local cargo=_cargo
95737
+ if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
94039
95738
  if cargo.opsgroup:IsLoaded(self.groupname)and not cargo.opsgroup:IsDead()then
94040
95739
  local carrier=nil
94041
95740
  local carrierGroup=nil
@@ -94095,6 +95794,31 @@ self:T(self.lid.."Cargo needs carrier but no carrier is avaiable (yet)!")
94095
95794
  end
94096
95795
  else
94097
95796
  end
95797
+ else
95798
+ if not cargo.delivered then
95799
+ for _,_element in pairs(self.elements)do
95800
+ local element=_element
95801
+ local mycargo=self:_GetCargobayElement(element,cargo.uid)
95802
+ if mycargo then
95803
+ cargo.storage.storageTo:AddAmount(mycargo.storageType,mycargo.storageAmount)
95804
+ cargo.storage.cargoDelivered=cargo.storage.cargoDelivered+mycargo.storageAmount
95805
+ cargo.storage.cargoLoaded=cargo.storage.cargoLoaded-mycargo.storageAmount
95806
+ self:_DelCargobayElement(element,mycargo)
95807
+ self:T2(self.lid..string.format("Cargo loaded=%d, delivered=%d, lost=%d",cargo.storage.cargoLoaded,cargo.storage.cargoDelivered,cargo.storage.cargoLost))
95808
+ end
95809
+ end
95810
+ local amountToDeliver=self:_GetWeightStorage(cargo.storage,false,false,true)
95811
+ local amountTotal=self:_GetWeightStorage(cargo.storage,true,false,true)
95812
+ local text=string.format("Amount delivered=%d, total=%d",amountToDeliver,amountTotal)
95813
+ self:T(self.lid..text)
95814
+ if amountToDeliver<=0 then
95815
+ cargo.delivered=true
95816
+ self.cargoTransport.Ndelivered=self.cargoTransport.Ndelivered+1
95817
+ local text=string.format("Ndelivered=%d delivered=%s",self.cargoTransport.Ndelivered,tostring(cargo.delivered))
95818
+ self:T(self.lid..text)
95819
+ end
95820
+ end
95821
+ end
94098
95822
  end
94099
95823
  end
94100
95824
  function OPSGROUP:onbeforeUnload(From,Event,To,OpsGroup,Coordinate,Heading)
@@ -96074,6 +97798,7 @@ assets={},
96074
97798
  legions={},
96075
97799
  statusLegion={},
96076
97800
  requestID={},
97801
+ cargocounter=0,
96077
97802
  }
96078
97803
  OPSTRANSPORT.Status={
96079
97804
  PLANNED="planned",
@@ -96086,8 +97811,12 @@ CANCELLED="cancelled",
96086
97811
  SUCCESS="success",
96087
97812
  FAILED="failed",
96088
97813
  }
97814
+ OPSTRANSPORT.CargoType={
97815
+ OPSGROUP="OPSGROUP",
97816
+ STORAGE="STORAGE",
97817
+ }
96089
97818
  _OPSTRANSPORTID=0
96090
- OPSTRANSPORT.version="0.7.0"
97819
+ OPSTRANSPORT.version="0.8.0"
96091
97820
  function OPSTRANSPORT:New(CargoGroups,PickupZone,DeployZone)
96092
97821
  local self=BASE:Inherit(self,FSM:New())
96093
97822
  _OPSTRANSPORTID=_OPSTRANSPORTID+1
@@ -96174,6 +97903,14 @@ self:I(self.lid..text)
96174
97903
  end
96175
97904
  return self
96176
97905
  end
97906
+ function OPSTRANSPORT:AddCargoStorage(StorageFrom,StorageTo,CargoType,CargoAmount,CargoWeight,TransportZoneCombo)
97907
+ TransportZoneCombo=TransportZoneCombo or self.tzcDefault
97908
+ local cargo=self:_CreateCargoStorage(StorageFrom,StorageTo,CargoType,CargoAmount,CargoWeight,TransportZoneCombo)
97909
+ if cargo then
97910
+ self.Ncargo=self.Ncargo+1
97911
+ table.insert(TransportZoneCombo.Cargos,cargo)
97912
+ end
97913
+ end
96177
97914
  function OPSTRANSPORT:SetPickupZone(PickupZone,TransportZoneCombo)
96178
97915
  TransportZoneCombo=TransportZoneCombo or self.tzcDefault
96179
97916
  TransportZoneCombo.PickupZone=PickupZone
@@ -96376,36 +98113,71 @@ end
96376
98113
  return names
96377
98114
  end
96378
98115
  function OPSTRANSPORT:GetCargoOpsGroups(Delivered,Carrier,TransportZoneCombo)
96379
- local cargos=self:GetCargos(TransportZoneCombo)
98116
+ local cargos=self:GetCargos(TransportZoneCombo,Carrier,Delivered)
96380
98117
  local opsgroups={}
96381
98118
  for _,_cargo in pairs(cargos)do
96382
98119
  local cargo=_cargo
96383
- if Delivered==nil or cargo.delivered==Delivered then
98120
+ if cargo.type=="OPSGROUP"then
96384
98121
  if cargo.opsgroup and not(cargo.opsgroup:IsDead()or cargo.opsgroup:IsStopped())then
96385
- if Carrier==nil or Carrier:CanCargo(cargo.opsgroup)then
96386
98122
  table.insert(opsgroups,cargo.opsgroup)
96387
98123
  end
96388
98124
  end
96389
98125
  end
98126
+ return opsgroups
98127
+ end
98128
+ function OPSTRANSPORT:GetCargoStorages(Delivered,Carrier,TransportZoneCombo)
98129
+ local cargos=self:GetCargos(TransportZoneCombo,Carrier,Delivered)
98130
+ local opsgroups={}
98131
+ for _,_cargo in pairs(cargos)do
98132
+ local cargo=_cargo
98133
+ if cargo.type=="STORAGE"then
98134
+ table.insert(opsgroups,cargo.storage)
98135
+ end
96390
98136
  end
96391
98137
  return opsgroups
96392
98138
  end
96393
98139
  function OPSTRANSPORT:GetCarriers()
96394
98140
  return self.carriers
96395
98141
  end
96396
- function OPSTRANSPORT:GetCargos(TransportZoneCombo)
98142
+ function OPSTRANSPORT:GetCargos(TransportZoneCombo,Carrier,Delivered)
98143
+ local tczs=self.tzCombos
96397
98144
  if TransportZoneCombo then
96398
- return TransportZoneCombo.Cargos
96399
- else
98145
+ tczs={TransportZoneCombo}
98146
+ end
96400
98147
  local cargos={}
96401
- for _,_tzc in pairs(self.tzCombos)do
96402
- local tzc=_tzc
96403
- for _,cargo in pairs(tzc.Cargos)do
98148
+ for _,_tcz in pairs(tczs)do
98149
+ local tcz=_tcz
98150
+ for _,_cargo in pairs(tcz.Cargos)do
98151
+ local cargo=_cargo
98152
+ if Delivered==nil or cargo.delivered==Delivered then
98153
+ if Carrier==nil or Carrier:CanCargo(cargo)then
96404
98154
  table.insert(cargos,cargo)
96405
98155
  end
96406
98156
  end
98157
+ end
98158
+ end
96407
98159
  return cargos
96408
98160
  end
98161
+ function OPSTRANSPORT:GetCargoTotalWeight(Cargo,IncludeReserved)
98162
+ local weight=0
98163
+ if Cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
98164
+ weight=Cargo.opsgroup:GetWeightTotal(nil,IncludeReserved)
98165
+ else
98166
+ if type(Cargo.storage.cargoType)=="number"then
98167
+ if IncludeReserved then
98168
+ return Cargo.storage.cargoAmount+Cargo.storage.cargoReserved
98169
+ else
98170
+ return Cargo.storage.cargoAmount
98171
+ end
98172
+ else
98173
+ if IncludeReserved then
98174
+ return Cargo.storage.cargoAmount*100
98175
+ else
98176
+ return(Cargo.storage.cargoAmount+Cargo.storage.cargoReserved)*100
98177
+ end
98178
+ end
98179
+ end
98180
+ return weight
96409
98181
  end
96410
98182
  function OPSTRANSPORT:SetTime(ClockStart,ClockStop)
96411
98183
  local Tnow=timer.getAbsTime()
@@ -96660,11 +98432,17 @@ if self.verbose>=3 then
96660
98432
  text=text..string.format("\nCargos:")
96661
98433
  for _,_cargo in pairs(self:GetCargos())do
96662
98434
  local cargo=_cargo
98435
+ if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
96663
98436
  local carrier=cargo.opsgroup:_GetMyCarrierElement()
96664
98437
  local name=carrier and carrier.name or"none"
96665
98438
  local cstate=carrier and carrier.status or"N/A"
96666
98439
  text=text..string.format("\n- %s: %s [%s], weight=%d kg, carrier=%s [%s], delivered=%s [UID=%s]",
96667
98440
  cargo.opsgroup:GetName(),cargo.opsgroup.cargoStatus:upper(),cargo.opsgroup:GetState(),cargo.opsgroup:GetWeightTotal(),name,cstate,tostring(cargo.delivered),tostring(cargo.opsgroup.cargoTransportUID))
98441
+ else
98442
+ local storage=cargo.storage
98443
+ text=text..string.format("\n- storage type=%s: amount: total=%d loaded=%d, lost=%d, delivered=%d, delivered=%s [UID=%s]",
98444
+ storage.cargoType,storage.cargoAmount,storage.cargoLoaded,storage.cargoLost,storage.cargoDelivered,tostring(cargo.delivered),tostring(cargo.uid))
98445
+ end
96668
98446
  end
96669
98447
  text=text..string.format("\nCarriers:")
96670
98448
  for _,_carrier in pairs(self.carriers)do
@@ -96782,11 +98560,11 @@ for _,_cargo in pairs(self:GetCargos())do
96782
98560
  local cargo=_cargo
96783
98561
  if cargo.delivered then
96784
98562
  dead=false
96785
- elseif cargo.opsgroup==nil then
98563
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and cargo.opsgroup==nil then
96786
98564
  dead=false
96787
- elseif cargo.opsgroup:IsDestroyed()then
96788
- elseif cargo.opsgroup:IsDead()then
96789
- elseif cargo.opsgroup:IsStopped()then
98565
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and cargo.opsgroup:IsDestroyed()then
98566
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and cargo.opsgroup:IsDead()then
98567
+ elseif cargo.type==OPSTRANSPORT.CargoType.OPSGROUP and cargo.opsgroup:IsStopped()then
96790
98568
  dead=false
96791
98569
  else
96792
98570
  done=false
@@ -96879,7 +98657,10 @@ if cargo.opsgroup.groupname==opsgroup.groupname then
96879
98657
  return nil
96880
98658
  end
96881
98659
  end
98660
+ self.cargocounter=self.cargocounter+1
96882
98661
  local cargo={}
98662
+ cargo.uid=self.cargocounter
98663
+ cargo.type="OPSGROUP"
96883
98664
  cargo.opsgroup=opsgroup
96884
98665
  cargo.delivered=false
96885
98666
  cargo.status="Unknown"
@@ -96891,8 +98672,32 @@ self:_AddDisembarkCarriers(DisembarkCarriers,cargo.disembarkCarriers)
96891
98672
  end
96892
98673
  return cargo
96893
98674
  end
98675
+ function OPSTRANSPORT:_CreateCargoStorage(StorageFrom,StorageTo,CargoType,CargoAmount,CargoWeight,TransportZoneCombo)
98676
+ local storage={}
98677
+ storage.storageFrom=StorageFrom
98678
+ storage.storageTo=StorageTo
98679
+ storage.cargoType=CargoType
98680
+ storage.cargoAmount=CargoAmount
98681
+ storage.cargoDelivered=0
98682
+ storage.cargoLost=0
98683
+ storage.cargoReserved=0
98684
+ storage.cargoLoaded=0
98685
+ storage.cargoWeight=CargoWeight or 1
98686
+ self.cargocounter=self.cargocounter+1
98687
+ local cargo={}
98688
+ cargo.uid=self.cargocounter
98689
+ cargo.type="STORAGE"
98690
+ cargo.opsgroup=nil
98691
+ cargo.storage=storage
98692
+ cargo.delivered=false
98693
+ cargo.status="Unknown"
98694
+ cargo.tzcUID=TransportZoneCombo
98695
+ cargo.disembarkZone=nil
98696
+ cargo.disembarkCarriers=nil
98697
+ return cargo
98698
+ end
96894
98699
  function OPSTRANSPORT:_CountCargosInZone(Zone,Delivered,Carrier,TransportZoneCombo)
96895
- local cargos=self:GetCargoOpsGroups(Delivered,Carrier,TransportZoneCombo)
98700
+ local cargos=self:GetCargos(TransportZoneCombo,Carrier,Delivered)
96896
98701
  local function iscarrier(_cargo)
96897
98702
  local cargo=_cargo
96898
98703
  local mycarrier=cargo:_GetMyCarrierGroup()
@@ -96923,13 +98728,19 @@ end
96923
98728
  local N=0
96924
98729
  for _,_cargo in pairs(cargos)do
96925
98730
  local cargo=_cargo
96926
- local isNotCargo=cargo:IsNotCargo(true)
98731
+ local isNotCargo=true
98732
+ local isInZone=true
98733
+ local isInUtero=true
98734
+ if cargo.type==OPSTRANSPORT.CargoType.OPSGROUP then
98735
+ local opsgroup=cargo.opsgroup
98736
+ isNotCargo=opsgroup:IsNotCargo(true)
96927
98737
  if not isNotCargo then
96928
- isNotCargo=iscarrier(cargo)
98738
+ isNotCargo=iscarrier(opsgroup)
98739
+ end
98740
+ isInZone=opsgroup:IsInZone(Zone)
98741
+ isInUtero=opsgroup:IsInUtero()
98742
+ self:T(self.lid..string.format("Cargo=%s: notcargo=%s, iscarrier=%s inzone=%s, inutero=%s",opsgroup:GetName(),tostring(opsgroup:IsNotCargo(true)),tostring(iscarrier(opsgroup)),tostring(isInZone),tostring(isInUtero)))
96929
98743
  end
96930
- local isInZone=cargo:IsInZone(Zone)
96931
- local isInUtero=cargo:IsInUtero()
96932
- self:T(self.lid..string.format("Cargo=%s: notcargo=%s, iscarrier=%s inzone=%s, inutero=%s",cargo:GetName(),tostring(cargo:IsNotCargo(true)),tostring(iscarrier(cargo)),tostring(isInZone),tostring(isInUtero)))
96933
98744
  if isNotCargo and(isInZone or isInUtero)then
96934
98745
  N=N+1
96935
98746
  end
@@ -100237,7 +102048,7 @@ PLAYERRECCE={
100237
102048
  ClassName="PLAYERRECCE",
100238
102049
  verbose=true,
100239
102050
  lid=nil,
100240
- version="0.0.17",
102051
+ version="0.0.18",
100241
102052
  ViewZone={},
100242
102053
  ViewZoneVisual={},
100243
102054
  ViewZoneLaser={},
@@ -100746,6 +102557,7 @@ if self.ClientMenus[playername]then
100746
102557
  self.ClientMenus[playername]:Remove()
100747
102558
  self.ClientMenus[playername]=nil
100748
102559
  end
102560
+ self:_BuildMenus()
100749
102561
  return self
100750
102562
  end
100751
102563
  function PLAYERRECCE:_SwitchOnStation(client,group,playername)
@@ -100761,6 +102573,7 @@ if self.ClientMenus[playername]then
100761
102573
  self.ClientMenus[playername]:Remove()
100762
102574
  self.ClientMenus[playername]=nil
100763
102575
  end
102576
+ self:_BuildMenus(client)
100764
102577
  return self
100765
102578
  end
100766
102579
  function PLAYERRECCE:_SwitchSmoke(client,group,playername)
@@ -100776,6 +102589,7 @@ if self.ClientMenus[playername]then
100776
102589
  self.ClientMenus[playername]:Remove()
100777
102590
  self.ClientMenus[playername]=nil
100778
102591
  end
102592
+ self:_BuildMenus(client)
100779
102593
  return self
100780
102594
  end
100781
102595
  function PLAYERRECCE:_SwitchLasing(client,group,playername)
@@ -100791,6 +102605,7 @@ if self.ClientMenus[playername]then
100791
102605
  self.ClientMenus[playername]:Remove()
100792
102606
  self.ClientMenus[playername]=nil
100793
102607
  end
102608
+ self:_BuildMenus(client)
100794
102609
  return self
100795
102610
  end
100796
102611
  function PLAYERRECCE:_SwitchLasingDist(client,group,playername,mindist,maxdist)
@@ -100811,6 +102626,7 @@ if self.ClientMenus[playername]then
100811
102626
  self.ClientMenus[playername]:Remove()
100812
102627
  self.ClientMenus[playername]=nil
100813
102628
  end
102629
+ self:_BuildMenus(client)
100814
102630
  return self
100815
102631
  end
100816
102632
  function PLAYERRECCE:_WIP(client,group,playername)
@@ -100824,6 +102640,8 @@ local visualset=self:_GetTargetSet(client,false)
100824
102640
  cameraset:AddSet(visualset)
100825
102641
  if cameraset:CountAlive()>0 then
100826
102642
  self:__TargetsSmoked(-1,client,playername,cameraset)
102643
+ else
102644
+ return self
100827
102645
  end
100828
102646
  local highsmoke=self.SmokeColor.highsmoke
100829
102647
  local medsmoke=self.SmokeColor.medsmoke
@@ -100918,7 +102736,7 @@ local targetset,number=self:_GetTargetSet(client,true,true)
100918
102736
  if number>0 and self.AutoLase[playername]then
100919
102737
  local Settings=(client and _DATABASE:GetPlayerSettings(playername))or _SETTINGS
100920
102738
  local target=self:_GetHVTTarget(targetset)
100921
- local ThreatLevel=target:GetThreatLevel()
102739
+ local ThreatLevel=target:GetThreatLevel()or 1
100922
102740
  local ThreatLevelText="high"
100923
102741
  if ThreatLevel>3 and ThreatLevel<8 then
100924
102742
  ThreatLevelText="medium"
@@ -100928,7 +102746,7 @@ end
100928
102746
  local ThreatGraph="["..string.rep("■",ThreatLevel)..string.rep("□",10-ThreatLevel).."]: "..ThreatLevel
100929
102747
  local report=REPORT:New("Lasing Report")
100930
102748
  report:Add(string.rep("-",15))
100931
- report:Add("Target type: "..target:GetTypeName())
102749
+ report:Add("Target type: "..target:GetTypeName()or"unknown")
100932
102750
  report:Add("Threat Level: "..ThreatGraph.." ("..ThreatLevelText..")")
100933
102751
  if not self.ReferencePoint then
100934
102752
  report:Add("Location: "..client:GetCoordinate():ToStringBULLS(self.Coalition,Settings))
@@ -100938,14 +102756,14 @@ end
100938
102756
  report:Add("Laser Code: "..self.UnitLaserCodes[playername]or 1688)
100939
102757
  report:Add(string.rep("-",15))
100940
102758
  local text=report:Text()
100941
- self:__TargetReport(-1,client,targetset,target,text)
102759
+ self:__TargetReport(1,client,targetset,target,text)
100942
102760
  else
100943
102761
  local report=REPORT:New("Lasing Report")
100944
102762
  report:Add(string.rep("-",15))
100945
102763
  report:Add("N O T A R G E T S")
100946
102764
  report:Add(string.rep("-",15))
100947
102765
  local text=report:Text()
100948
- self:__TargetReport(-1,client,nil,nil,text)
102766
+ self:__TargetReport(1,client,nil,nil,text)
100949
102767
  end
100950
102768
  return self
100951
102769
  end
@@ -100973,21 +102791,22 @@ report:Add("Location: "..client:GetCoordinate():ToStringFromRPShort(self.Referen
100973
102791
  end
100974
102792
  report:Add(string.rep("-",15))
100975
102793
  local text=report:Text()
100976
- self:__TargetReport(-1,client,targetset,nil,text)
102794
+ self:__TargetReport(1,client,targetset,nil,text)
100977
102795
  else
100978
102796
  local report=REPORT:New("Target Report")
100979
102797
  report:Add(string.rep("-",15))
100980
102798
  report:Add("N O T A R G E T S")
100981
102799
  report:Add(string.rep("-",15))
100982
102800
  local text=report:Text()
100983
- self:__TargetReport(-1,client,nil,nil,text)
102801
+ self:__TargetReport(1,client,nil,nil,text)
100984
102802
  end
100985
102803
  return self
100986
102804
  end
100987
- function PLAYERRECCE:_BuildMenus()
102805
+ function PLAYERRECCE:_BuildMenus(Client)
100988
102806
  self:T(self.lid.."_BuildMenus")
100989
102807
  local clients=self.PlayerSet
100990
102808
  local clientset=clients:GetSetObjects()
102809
+ if Client then clientset={Client}end
100991
102810
  for _,_client in pairs(clientset)do
100992
102811
  local client=_client
100993
102812
  if client and client:IsAlive()then
@@ -100995,7 +102814,7 @@ local playername=client:GetPlayerName()
100995
102814
  if not self.UnitLaserCodes[playername]then
100996
102815
  self:_SetClientLaserCode(nil,nil,playername,1688)
100997
102816
  end
100998
- if not self.SmokeOwn[playername]then
102817
+ if self.SmokeOwn[playername]==nil then
100999
102818
  self.SmokeOwn[playername]=self.smokeownposition
101000
102819
  end
101001
102820
  local group=client:GetGroup()
@@ -101582,7 +103401,7 @@ MESSAGE:New(Text,45,self.Name or"FACA"):ToClient(Client)
101582
103401
  if self.AttackSet then
101583
103402
  for _,_client in pairs(self.AttackSet.Set)do
101584
103403
  local client=_client
101585
- if client and client:IsAlive()then
103404
+ if client and client:IsAlive()and client~=Client then
101586
103405
  MESSAGE:New(Text,45,self.Name or"FACA"):ToClient(client)
101587
103406
  end
101588
103407
  end
@@ -113464,6 +115283,16 @@ self:T("MSRS execute VBS command="..runvbs)
113464
115283
  res=os.execute(runvbs)
113465
115284
  timer.scheduleFunction(os.remove,filename,timer.getTime()+1)
113466
115285
  timer.scheduleFunction(os.remove,filenvbs,timer.getTime()+1)
115286
+ elseif false then
115287
+ local filenvbs=os.getenv('TMP').."\\MSRS-"..STTS.uuid()..".vbs"
115288
+ local script=io.open(filenvbs,"w+")
115289
+ script:write(string.format('Set oShell = CreateObject ("Wscript.Shell")\n'))
115290
+ script:write(string.format('Dim strArgs\n'))
115291
+ script:write(string.format('strArgs = "cmd /c %s"\n',filename))
115292
+ script:write(string.format('oShell.Run strArgs, 0, false'))
115293
+ script:close()
115294
+ local runvbs=string.format('cscript.exe //Nologo //B "%s"',filenvbs)
115295
+ res=os.execute(runvbs)
113467
115296
  else
113468
115297
  self:T("MSRS execute command="..command)
113469
115298
  res=os.execute(command)