From cd4d4af559200098cd2d1d72376ccd2545082c65 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Mon, 12 Sep 2016 12:29:20 +0200 Subject: [PATCH] Last Updates --- Moose Development/Moose/{ => Core}/Base.lua | 0 .../Moose/{ => Core}/Database.lua | 0 Moose Development/Moose/{ => Core}/Event.lua | 0 Moose Development/Moose/{ => Core}/Menu.lua | 0 .../Moose/{ => Core}/Message.lua | 0 Moose Development/Moose/{ => Core}/Point.lua | 0 .../Moose/{ => Core}/Scheduler.lua | 0 Moose Development/Moose/{ => Core}/Set.lua | 0 .../Moose/{ => Core}/StateMachine.lua | 27 +- Moose Development/Moose/{ => Core}/Zone.lua | 0 .../{ => Moose}/Dcs/DCSAirbase.lua | 0 .../{ => Moose}/Dcs/DCSCoalitionObject.lua | 0 .../{ => Moose}/Dcs/DCSCommand.lua | 0 .../{ => Moose}/Dcs/DCSController.lua | 0 .../{ => Moose}/Dcs/DCSGroup.lua | 0 .../{ => Moose}/Dcs/DCSObject.lua | 0 .../{ => Moose}/Dcs/DCSStaticObject.lua | 0 Moose Development/{ => Moose}/Dcs/DCSTask.lua | 0 Moose Development/{ => Moose}/Dcs/DCSTime.lua | 0 .../{ => Moose}/Dcs/DCSTypes.lua | 0 Moose Development/{ => Moose}/Dcs/DCSUnit.lua | 0 .../{ => Moose}/Dcs/DCScountry.lua | 0 Moose Development/{ => Moose}/Dcs/DCSenv.lua | 0 Moose Development/{ => Moose}/Dcs/DCSland.lua | 0 .../{ => Moose}/Dcs/DCStimer.lua | 0 .../{ => Moose}/Dcs/DCStrigger.lua | 0 .../{ => Moose}/Dcs/DCSworld.lua | 0 Moose Development/Moose/Fsm/Account.lua | 249 +++ Moose Development/Moose/Fsm/Assign.lua | 258 +++ Moose Development/Moose/{ => Fsm}/Cargo.lua | 216 ++- .../Patrol.lua} | 144 +- Moose Development/Moose/{ => Fsm}/Process.lua | 51 +- .../Moose/{ => Fsm}/Process_JTAC.lua | 0 .../Moose/{ => Fsm}/Process_Pickup.lua | 0 .../Moose/{ => Fsm}/Process_Smoke.lua | 51 +- Moose Development/Moose/Fsm/Route.lua | 233 +++ .../Moose/{ => Functional}/AIBalancer.lua | 2 +- .../Moose/{ => Functional}/AirbasePolice.lua | 0 .../Moose/{ => Functional}/CleanUp.lua | 0 .../Moose/{ => Functional}/Detection.lua | 0 .../Moose/{ => Functional}/Escort.lua | 0 .../Moose/{ => Functional}/MissileTrainer.lua | 0 .../Moose/{ => Functional}/Movement.lua | 0 .../Moose/{ => Functional}/Scoring.lua | 0 .../Moose/{ => Functional}/Sead.lua | 0 .../Moose/{ => Functional}/Spawn.lua | 0 Moose Development/Moose/Moose.lua | 97 +- Moose Development/Moose/Process_Assign.lua | 185 -- Moose Development/Moose/Process_Destroy.lua | 180 -- Moose Development/Moose/Process_Route.lua | 86 - .../Moose/{ => Tasking}/DetectionManager.lua | 0 .../Moose/{ => Tasking}/Mission.lua | 0 .../Moose/{ => Tasking}/Task.lua | 64 +- .../Moose/{ => Tasking}/TaskMenu.lua | 0 .../Moose/{ => Tasking}/Task_A2G.lua | 2 +- .../Moose/{ => Tasking}/Task_AIBalancer.lua | 0 .../Moose/{ => Tasking}/Task_Pickup.lua | 0 .../Moose/{ => Tasking}/Task_SEAD.lua | 65 +- .../Moose/{ => Utilities}/Routines.lua | 0 .../Moose/{ => Utilities}/StatHandler.lua | 0 .../Moose/{ => Utilities}/Utils.lua | 0 .../Moose/{ => Wrapper}/Airbase.lua | 0 .../Moose/{ => Wrapper}/Client.lua | 0 .../Moose/{ => Wrapper}/Controllable.lua | 0 .../Moose/{ => Wrapper}/Group.lua | 0 .../Moose/{ => Wrapper}/Identifiable.lua | 0 .../Moose/{ => Wrapper}/Object.lua | 0 .../Moose/{ => Wrapper}/Positionable.lua | 0 .../Moose/{ => Wrapper}/Static.lua | 0 .../Moose/{ => Wrapper}/Unit.lua | 0 Moose Development/ReleaseNotes.txt | 14 +- .../l10n/DEFAULT/Moose.lua | 2 +- Moose Mission Setup/Moose.lua | 2 +- Moose Test Missions/MOOSE_Test_Template.miz | Bin 5772 -> 5770 bytes .../Moose_Test_AIBALANCER.lua | 0 .../Moose_Test_AIBALANCER.miz | Bin 31071 -> 31101 bytes .../Moose_Test_AIRBASEPOLICE-DB.miz | Bin 50307 -> 50305 bytes .../Moose_Test_AIRBASEPOLICE.miz | Bin 43105 -> 43103 bytes .../Moose_Test_AIRBASEPOLICE_CAUCASUS.lua | 0 .../Moose_Test_AIRBASEPOLICE_CAUCASUS.miz | Bin 43111 -> 43109 bytes .../Moose_Test_AIRBASEPOLICE_NEVADA.lua | 0 .../Moose_Test_AIRBASEPOLICE_NEVADA.miz | Bin 27344 -> 27342 bytes .../Moose_Test_AIRBLANCER_with_Moose.miz | Bin 20558 -> 0 bytes .../Moose_Test_AIRBLANCER_without_Moose.miz | Bin 19823 -> 0 bytes .../Moose_Test_BASE/Moose_Test_BASE.miz | Bin 19189 -> 0 bytes .../MOOSE_Test_CARGO_GROUPED_Board.miz | Bin 18548 -> 18525 bytes .../Moose_Test_CARGO_GROUPED_Board.lua | 10 +- .../MOOSE_Test_CARGO_UNIT_Transfer.miz | Bin 18874 -> 18073 bytes .../MOOSE_Test_CARGO_GROUPED_UnBoard.miz | Bin 18527 -> 17740 bytes .../Moose_Test_CARGO_GROUPED_UnBoard.lua | 10 +- .../MOOSE_Test_CARGO_PACKAGE_Board.miz | Bin 17620 -> 17618 bytes .../Moose_Test_CARGO_PACKAGE_Board.lua | 4 +- .../MOOSE_Test_CARGO_PACKAGE_UnBoard.miz | Bin 17624 -> 17622 bytes .../Moose_Test_CARGO_PACKAGE_UnBoard.lua | 4 +- .../MOOSE_Test_CARGO_UNIT_Board.miz | Bin 18269 -> 17534 bytes .../Moose_Test_CARGO_UNIT_Board.lua | 4 +- .../MOOSE_Test_CARGO_UNIT_Transfer.miz | Bin 18579 -> 17835 bytes .../Moose_Test_CARGO_UNIT_Transfer.lua | 4 +- .../MOOSE_Test_CARGO_UNIT_UnBoard.miz | Bin 18276 -> 17526 bytes .../Moose_Test_CARGO_UNIT_UnBoard.lua | 4 +- .../Moose_Test_CLEANUP/Moose_Test_CLEANUP.miz | Bin 99353 -> 99351 bytes .../MOOSE_Test_CARGO_GROUPED_Transfer.miz | Bin 0 -> 18810 bytes .../Moose_Test_CARGO_GROUPED_Transfer.lua} | 10 +- .../Moose_Test_DETECTION_Laser.miz | Bin 21843 -> 0 bytes .../Moose_Test_Detection_Areas.lua} | 0 .../Moose_Test_Detection_Areas.miz} | Bin 25376 -> 25374 bytes .../Moose_Test_Detection_Reporting.lua} | 0 .../Moose_Test_Detection_Reporting.miz} | Bin 45231 -> 45229 bytes .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 59703 -> 59701 bytes .../Moose_Test_MENU_CLIENT.lua | 0 .../Moose_Test_MENU_CLIENT.miz | Bin 19451 -> 19449 bytes .../Moose_Test_MENU_COALITION.lua | 0 .../Moose_Test_MENU_COALITION.miz | Bin 19287 -> 19285 bytes .../Moose_Test_MENU_GROUP.lua | 0 .../Moose_Test_MENU_GROUP.miz | Bin 19463 -> 19461 bytes .../Moose_Test_MISSILETRAINER.lua | 0 .../Moose_Test_MISSILETRAINER.miz | Bin 126267 -> 126265 bytes ...oose_Test_PROCESS_PATROLZONE_Switching.lua | 0 ...oose_Test_PROCESS_PATROLZONE_Switching.miz | Bin 19667 -> 19665 bytes .../Moose_Test_SCHEDULER_Nested.lua | 0 .../Moose_Test_SCHEDULER_Nested.miz | Bin 18099 -> 18097 bytes .../Moose_Test_SCHEDULER_Repeated.lua | 0 .../Moose_Test_SCHEDULER_Repeated.miz | Bin 18083 -> 18081 bytes .../Moose_Test_SCHEDULER_Simple.lua | 0 .../Moose_Test_SCHEDULER_Simple.miz | Bin 19196 -> 19194 bytes .../MOOSE_Test_SEAD.miz | Bin 25625 -> 25623 bytes .../Moose_Test_SEAD.lua | 0 .../Moose_Test_SET_AIRBASE.lua | 0 .../Moose_Test_SET_AIRBASE.miz | Bin 17833 -> 17831 bytes .../Moose_Test_SET_CLIENT.lua | 0 .../Moose_Test_SET_CLIENT.miz | Bin 19478 -> 19476 bytes .../Moose_Test_SET_GROUP.lua | 0 .../Moose_Test_SET_GROUP.miz | Bin 41136 -> 41134 bytes .../MOOSE_Test_SPAWN.lua | 0 .../MOOSE_Test_SPAWN.miz | Bin 53551 -> 53549 bytes .../MOOSE_Test_SPAWN_CleanUp.lua | 0 .../MOOSE_Test_SPAWN_CleanUp.miz | Bin 27915 -> 27913 bytes .../MOOSE_Test_SPAWN_InitLimit.lua | 0 .../MOOSE_Test_SPAWN_InitLimit.miz | Bin 38541 -> 38539 bytes ...MOOSE_Test_SPAWN_InitRandomizeTemplate.lua | 0 ...MOOSE_Test_SPAWN_InitRandomizeTemplate.miz | Bin 34050 -> 34048 bytes .../Moose_Test_SPAWN_InitRandomizeZones.lua | 0 .../Moose_Test_SPAWN_InitRandomizeZones.miz | Bin 29119 -> 29117 bytes .../MOOSE_Test_SPAWN_InitRepeat.lua | 0 .../MOOSE_Test_SPAWN_InitRepeat.miz | Bin 25653 -> 25651 bytes .../Moose_Test_SPAWN_SpawnFromStatic.lua | 0 .../Moose_Test_SPAWN_SpawnFromStatic.miz | Bin 26472 -> 26470 bytes .../Moose_Test_SPAWN_SpawnFromUnit.lua | 0 .../Moose_Test_SPAWN_SpawnFromUnit.miz | Bin 28636 -> 28634 bytes .../Moose_Test_SPAWN_SpawnFromVec2.lua | 0 .../Moose_Test_SPAWN_SpawnFromVec2.miz | Bin 28217 -> 28215 bytes .../Moose_Test_SPAWN_SpawnFromVec3.lua | 0 .../Moose_Test_SPAWN_SpawnFromVec3.miz | Bin 28454 -> 28452 bytes .../Moose_Test_TASK_SEAD.lua | 16 - .../Moose_Test_TASK_SEAD.miz | Bin 25739 -> 0 bytes .../Moose_Test_Detection_Dispatcher.lua} | 0 .../Moose_Test_Detection_Dispatcher.miz} | Bin 40952 -> 40950 bytes .../MOOSE_Test_Task_Pickup_and_Deploy.lua} | 0 .../MOOSE_Test_Task_Pickup_and_Deploy.miz} | Bin 33252 -> 33250 bytes .../Moose_Test_Task_SEAD.lua | 28 + .../Moose_Test_Task_SEAD.miz | Bin 0 -> 26122 bytes .../Moose_Test_WRAPPER/Moose_Test_WRAPPER.miz | Bin 40786 -> 40784 bytes .../MOOSE_Test_GROUP_SwitchWayPoint.miz | Bin 18877 -> 18875 bytes .../Moose_Test_GROUP_SwitchWayPoint.lua | 0 .../Moose_Test_ZONE/Moose_Test_ZONE.lua | 0 .../Moose_Test_ZONE/Moose_Test_ZONE.miz | Bin 26051 -> 26049 bytes .../Moose_Test_ZONE_GROUP.lua | 0 .../Moose_Test_ZONE_GROUP.miz | Bin 19781 -> 19779 bytes .../Moose_Test_ZONE_POLYGON.lua | 0 .../Moose_Test_ZONE_POLYGON.miz | Bin 27297 -> 27295 bytes .../Moose_Test_ZONE_RADIUS.lua | 0 .../Moose_Test_ZONE_RADIUS.miz | Bin 20919 -> 20917 bytes .../Moose_Test_ZONE_UNIT.lua | 0 .../Moose_Test_ZONE_UNIT.miz | Bin 19316 -> 19314 bytes Moose Training/Documentation/AIBalancer.html | 10 +- Moose Training/Documentation/Account.html | 800 +++++++++ Moose Training/Documentation/Airbase.html | 10 +- .../Documentation/AirbasePolice.html | 10 +- Moose Training/Documentation/Assign.html | 788 ++++++++ Moose Training/Documentation/Base.html | 10 +- Moose Training/Documentation/CARGO.html | 1589 ++++++++++++----- Moose Training/Documentation/CleanUp.html | 10 +- Moose Training/Documentation/Client.html | 10 +- .../Documentation/Controllable.html | 10 +- Moose Training/Documentation/DCSAirbase.html | 10 +- .../Documentation/DCSCoalitionObject.html | 10 +- Moose Training/Documentation/DCSCommand.html | 10 +- .../Documentation/DCSController.html | 10 +- Moose Training/Documentation/DCSGroup.html | 10 +- Moose Training/Documentation/DCSObject.html | 10 +- Moose Training/Documentation/DCSTask.html | 10 +- Moose Training/Documentation/DCSTypes.html | 10 +- Moose Training/Documentation/DCSUnit.html | 10 +- Moose Training/Documentation/DCSWorld.html | 10 +- Moose Training/Documentation/DCScountry.html | 10 +- Moose Training/Documentation/DCStimer.html | 10 +- Moose Training/Documentation/DCStrigger.html | 10 +- Moose Training/Documentation/Database.html | 10 +- Moose Training/Documentation/Detection.html | 10 +- .../Documentation/DetectionManager.html | 10 +- Moose Training/Documentation/Escort.html | 10 +- Moose Training/Documentation/Event.html | 10 +- Moose Training/Documentation/Group.html | 10 +- .../Documentation/Identifiable.html | 10 +- Moose Training/Documentation/MISSION.html | 10 +- Moose Training/Documentation/MOVEMENT.html | 10 +- Moose Training/Documentation/Menu.html | 10 +- Moose Training/Documentation/Message.html | 10 +- .../Documentation/MissileTrainer.html | 10 +- Moose Training/Documentation/Object.html | 10 +- Moose Training/Documentation/Patrol.html | 786 ++++++++ Moose Training/Documentation/Point.html | 10 +- .../Documentation/Positionable.html | 10 +- Moose Training/Documentation/Process.html | 123 +- .../Documentation/Process_Destroy.html | 2 - .../Documentation/Process_JTAC.html | 10 +- .../Documentation/Process_PatrolZone.html | 10 +- .../Documentation/Process_Pickup.html | 10 +- .../Documentation/Process_Smoke.html | 30 +- Moose Training/Documentation/Route.html | 459 +++++ Moose Training/Documentation/Scheduler.html | 10 +- Moose Training/Documentation/Scoring.html | 10 +- Moose Training/Documentation/Sead.html | 10 +- Moose Training/Documentation/Set.html | 44 +- Moose Training/Documentation/Spawn.html | 16 +- .../Documentation/StateMachine.html | 20 +- Moose Training/Documentation/Static.html | 10 +- .../Documentation/StaticObject.html | 10 +- Moose Training/Documentation/TASK.html | 14 +- Moose Training/Documentation/Task_A2G.html | 12 +- Moose Training/Documentation/Task_Assign.html | 2 - .../Documentation/Task_Client_Menu.html | 10 +- Moose Training/Documentation/Task_PICKUP.html | 10 +- Moose Training/Documentation/Task_Route.html | 2 - Moose Training/Documentation/Task_SEAD.html | 68 +- Moose Training/Documentation/TrackHits.html | 776 ++++++++ Moose Training/Documentation/Unit.html | 33 +- Moose Training/Documentation/Zone.html | 10 +- Moose Training/Documentation/env.html | 10 +- Moose Training/Documentation/index.html | 75 +- Moose Training/Documentation/land.html | 10 +- 241 files changed, 6314 insertions(+), 1827 deletions(-) rename Moose Development/Moose/{ => Core}/Base.lua (100%) rename Moose Development/Moose/{ => Core}/Database.lua (100%) rename Moose Development/Moose/{ => Core}/Event.lua (100%) rename Moose Development/Moose/{ => Core}/Menu.lua (100%) rename Moose Development/Moose/{ => Core}/Message.lua (100%) rename Moose Development/Moose/{ => Core}/Point.lua (100%) rename Moose Development/Moose/{ => Core}/Scheduler.lua (100%) rename Moose Development/Moose/{ => Core}/Set.lua (100%) rename Moose Development/Moose/{ => Core}/StateMachine.lua (95%) rename Moose Development/Moose/{ => Core}/Zone.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSAirbase.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSCoalitionObject.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSCommand.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSController.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSGroup.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSObject.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSStaticObject.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSTask.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSTime.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSTypes.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSUnit.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCScountry.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSenv.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSland.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCStimer.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCStrigger.lua (100%) rename Moose Development/{ => Moose}/Dcs/DCSworld.lua (100%) create mode 100644 Moose Development/Moose/Fsm/Account.lua create mode 100644 Moose Development/Moose/Fsm/Assign.lua rename Moose Development/Moose/{ => Fsm}/Cargo.lua (79%) rename Moose Development/Moose/{Process_PatrolZone.lua => Fsm/Patrol.lua} (70%) rename Moose Development/Moose/{ => Fsm}/Process.lua (51%) rename Moose Development/Moose/{ => Fsm}/Process_JTAC.lua (100%) rename Moose Development/Moose/{ => Fsm}/Process_Pickup.lua (100%) rename Moose Development/Moose/{ => Fsm}/Process_Smoke.lua (58%) create mode 100644 Moose Development/Moose/Fsm/Route.lua rename Moose Development/Moose/{ => Functional}/AIBalancer.lua (98%) rename Moose Development/Moose/{ => Functional}/AirbasePolice.lua (100%) rename Moose Development/Moose/{ => Functional}/CleanUp.lua (100%) rename Moose Development/Moose/{ => Functional}/Detection.lua (100%) rename Moose Development/Moose/{ => Functional}/Escort.lua (100%) rename Moose Development/Moose/{ => Functional}/MissileTrainer.lua (100%) rename Moose Development/Moose/{ => Functional}/Movement.lua (100%) rename Moose Development/Moose/{ => Functional}/Scoring.lua (100%) rename Moose Development/Moose/{ => Functional}/Sead.lua (100%) rename Moose Development/Moose/{ => Functional}/Spawn.lua (100%) delete mode 100644 Moose Development/Moose/Process_Assign.lua delete mode 100644 Moose Development/Moose/Process_Destroy.lua delete mode 100644 Moose Development/Moose/Process_Route.lua rename Moose Development/Moose/{ => Tasking}/DetectionManager.lua (100%) rename Moose Development/Moose/{ => Tasking}/Mission.lua (100%) rename Moose Development/Moose/{ => Tasking}/Task.lua (91%) rename Moose Development/Moose/{ => Tasking}/TaskMenu.lua (100%) rename Moose Development/Moose/{ => Tasking}/Task_A2G.lua (99%) rename Moose Development/Moose/{ => Tasking}/Task_AIBalancer.lua (100%) rename Moose Development/Moose/{ => Tasking}/Task_Pickup.lua (100%) rename Moose Development/Moose/{ => Tasking}/Task_SEAD.lua (69%) rename Moose Development/Moose/{ => Utilities}/Routines.lua (100%) rename Moose Development/Moose/{ => Utilities}/StatHandler.lua (100%) rename Moose Development/Moose/{ => Utilities}/Utils.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Airbase.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Client.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Controllable.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Group.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Identifiable.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Object.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Positionable.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Static.lua (100%) rename Moose Development/Moose/{ => Wrapper}/Unit.lua (100%) rename Moose Test Missions/{Moose_Test_AIBALANCER => Moose_Test_AI_Balancer}/Moose_Test_AIBALANCER.lua (100%) rename Moose Test Missions/{Moose_Test_AIBALANCER => Moose_Test_AI_Balancer}/Moose_Test_AIBALANCER.miz (94%) rename Moose Test Missions/{Moose_Test_AIRBASEPOLICE => Moose_Test_Airbase_Police}/Moose_Test_AIRBASEPOLICE-DB.miz (97%) rename Moose Test Missions/{Moose_Test_AIRBASEPOLICE => Moose_Test_Airbase_Police}/Moose_Test_AIRBASEPOLICE.miz (97%) rename Moose Test Missions/{Moose_Test_AIRBASEPOLICE => Moose_Test_Airbase_Police}/Moose_Test_AIRBASEPOLICE_CAUCASUS.lua (100%) rename Moose Test Missions/{Moose_Test_AIRBASEPOLICE => Moose_Test_Airbase_Police}/Moose_Test_AIRBASEPOLICE_CAUCASUS.miz (97%) rename Moose Test Missions/{Moose_Test_AIRBASEPOLICE => Moose_Test_Airbase_Police}/Moose_Test_AIRBASEPOLICE_NEVADA.lua (100%) rename Moose Test Missions/{Moose_Test_AIRBASEPOLICE => Moose_Test_Airbase_Police}/Moose_Test_AIRBASEPOLICE_NEVADA.miz (87%) delete mode 100644 Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_with_Moose.miz delete mode 100644 Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_without_Moose.miz delete mode 100644 Moose Test Missions/Moose_Test_BASE/Moose_Test_BASE.miz create mode 100644 Moose Test Missions/Moose_Test_Cargo/Moose_Test_CARGO_GROUPED_Transfer/MOOSE_Test_CARGO_GROUPED_Transfer.miz rename Moose Test Missions/{Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_Transfer/Moose_Test_CARGO_UNIT_Transfer.lua => Moose_Test_Cargo/Moose_Test_CARGO_GROUPED_Transfer/Moose_Test_CARGO_GROUPED_Transfer.lua} (60%) delete mode 100644 Moose Test Missions/Moose_Test_DETECTION/Moose_Test_DETECTION_Laser.miz rename Moose Test Missions/{Moose_Test_DETECTION/Moose_Test_DETECTION.lua => Moose_Test_Detection/Moose_Test_Detection_Areas/Moose_Test_Detection_Areas.lua} (100%) rename Moose Test Missions/{Moose_Test_DETECTION/Moose_Test_DETECTION.miz => Moose_Test_Detection/Moose_Test_Detection_Areas/Moose_Test_Detection_Areas.miz} (94%) rename Moose Test Missions/{Moose_Test_FAC/Moose_Test_FAC.lua => Moose_Test_Detection/Moose_Test_Detection_Reporting/Moose_Test_Detection_Reporting.lua} (100%) rename Moose Test Missions/{Moose_Test_FAC/Moose_Test_FAC.miz => Moose_Test_Detection/Moose_Test_Detection_Reporting/Moose_Test_Detection_Reporting.miz} (97%) rename Moose Test Missions/{ => Moose_Test_Menus}/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.lua (100%) rename Moose Test Missions/{ => Moose_Test_Menus}/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.miz (94%) rename Moose Test Missions/{ => Moose_Test_Menus}/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.lua (100%) rename Moose Test Missions/{ => Moose_Test_Menus}/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.miz (94%) rename Moose Test Missions/{ => Moose_Test_Menus}/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.lua (100%) rename Moose Test Missions/{ => Moose_Test_Menus}/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.miz (94%) rename Moose Test Missions/{Moose_Test_MISSILETRAINER => Moose_Test_Missile_Trainer}/Moose_Test_MISSILETRAINER.lua (100%) rename Moose Test Missions/{Moose_Test_MISSILETRAINER => Moose_Test_Missile_Trainer}/Moose_Test_MISSILETRAINER.miz (99%) rename Moose Test Missions/{Moose_Test_PROCESS_PATROLZONE => Moose_Test_Patrolling}/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.lua (100%) rename Moose Test Missions/{Moose_Test_PROCESS_PATROLZONE => Moose_Test_Patrolling}/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.miz (94%) rename Moose Test Missions/{Moose_Test_SCHEDULER => Moose_Test_Scheduling}/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.lua (100%) rename Moose Test Missions/{Moose_Test_SCHEDULER => Moose_Test_Scheduling}/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.miz (93%) rename Moose Test Missions/{Moose_Test_SCHEDULER => Moose_Test_Scheduling}/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.lua (100%) rename Moose Test Missions/{Moose_Test_SCHEDULER => Moose_Test_Scheduling}/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.miz (91%) rename Moose Test Missions/{Moose_Test_SCHEDULER => Moose_Test_Scheduling}/Moose_Test_SCHEDULER_Simple/Moose_Test_SCHEDULER_Simple.lua (100%) rename Moose Test Missions/{Moose_Test_SCHEDULER => Moose_Test_Scheduling}/Moose_Test_SCHEDULER_Simple/Moose_Test_SCHEDULER_Simple.miz (94%) rename Moose Test Missions/{Moose_Test_SEAD => Moose_Test_Sead_Avoidance}/MOOSE_Test_SEAD.miz (96%) rename Moose Test Missions/{Moose_Test_SEAD => Moose_Test_Sead_Avoidance}/Moose_Test_SEAD.lua (100%) rename Moose Test Missions/{ => Moose_Test_Sets}/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.lua (100%) rename Moose Test Missions/{ => Moose_Test_Sets}/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.miz (91%) rename Moose Test Missions/{ => Moose_Test_Sets}/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.lua (100%) rename Moose Test Missions/{ => Moose_Test_Sets}/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.miz (94%) rename Moose Test Missions/{ => Moose_Test_Sets}/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.lua (100%) rename Moose Test Missions/{ => Moose_Test_Sets}/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.miz (97%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/MOOSE_Test_SPAWN.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/MOOSE_Test_SPAWN.miz (97%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.miz (95%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitLimit/MOOSE_Test_SPAWN_InitLimit.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitLimit/MOOSE_Test_SPAWN_InitLimit.miz (97%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.miz (96%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.miz (89%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitRepeat/MOOSE_Test_SPAWN_InitRepeat.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_InitRepeat/MOOSE_Test_SPAWN_InitRepeat.miz (96%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromStatic/Moose_Test_SPAWN_SpawnFromStatic.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromStatic/Moose_Test_SPAWN_SpawnFromStatic.miz (95%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromUnit/Moose_Test_SPAWN_SpawnFromUnit.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromUnit/Moose_Test_SPAWN_SpawnFromUnit.miz (96%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.miz (96%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromVec3/Moose_Test_SPAWN_SpawnFromVec3.lua (100%) rename Moose Test Missions/{Moose_Test_SPAWN => Moose_Test_Spawning}/Moose_Test_SPAWN_SpawnFromVec3/Moose_Test_SPAWN_SpawnFromVec3.miz (95%) delete mode 100644 Moose Test Missions/Moose_Test_TASK_SEAD/Moose_Test_TASK_SEAD.lua delete mode 100644 Moose Test Missions/Moose_Test_TASK_SEAD/Moose_Test_TASK_SEAD.miz rename Moose Test Missions/{Moose_Test_DETECTION_DISPATCHER/Moose_Test_DETECTION_DISPATCHER.lua => Moose_Test_Tasking/Moose_Test_Detection_Dispatcher/Moose_Test_Detection_Dispatcher.lua} (100%) rename Moose Test Missions/{Moose_Test_DETECTION_DISPATCHER/Moose_Test_DETECTION_DISPATCHER.miz => Moose_Test_Tasking/Moose_Test_Detection_Dispatcher/Moose_Test_Detection_Dispatcher.miz} (97%) rename Moose Test Missions/{Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.lua => Moose_Test_Tasking/Moose_Test_Task_Pickup_and_Deploy/MOOSE_Test_Task_Pickup_and_Deploy.lua} (100%) rename Moose Test Missions/{Moose_Test_TASK_Pickup_and_Deploy/MOOSE_Test_TASK_Pickup_and_Deploy.miz => Moose_Test_Tasking/Moose_Test_Task_Pickup_and_Deploy/MOOSE_Test_Task_Pickup_and_Deploy.miz} (95%) create mode 100644 Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua create mode 100644 Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.miz rename Moose Test Missions/{ => Moose_Test_Wrapper/Moose_Test_Group}/Moose_Test_GROUP_SwitchWayPoint/MOOSE_Test_GROUP_SwitchWayPoint.miz (92%) rename Moose Test Missions/{ => Moose_Test_Wrapper/Moose_Test_Group}/Moose_Test_GROUP_SwitchWayPoint/Moose_Test_GROUP_SwitchWayPoint.lua (100%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE/Moose_Test_ZONE.lua (100%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE/Moose_Test_ZONE.miz (95%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_GROUP/Moose_Test_ZONE_GROUP.lua (100%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_GROUP/Moose_Test_ZONE_GROUP.miz (94%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.lua (100%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.miz (96%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_RADIUS/Moose_Test_ZONE_RADIUS.lua (100%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_RADIUS/Moose_Test_ZONE_RADIUS.miz (93%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.lua (100%) rename Moose Test Missions/{ => Moose_Test_Zones}/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.miz (92%) create mode 100644 Moose Training/Documentation/Account.html create mode 100644 Moose Training/Documentation/Assign.html create mode 100644 Moose Training/Documentation/Patrol.html create mode 100644 Moose Training/Documentation/Route.html create mode 100644 Moose Training/Documentation/TrackHits.html diff --git a/Moose Development/Moose/Base.lua b/Moose Development/Moose/Core/Base.lua similarity index 100% rename from Moose Development/Moose/Base.lua rename to Moose Development/Moose/Core/Base.lua diff --git a/Moose Development/Moose/Database.lua b/Moose Development/Moose/Core/Database.lua similarity index 100% rename from Moose Development/Moose/Database.lua rename to Moose Development/Moose/Core/Database.lua diff --git a/Moose Development/Moose/Event.lua b/Moose Development/Moose/Core/Event.lua similarity index 100% rename from Moose Development/Moose/Event.lua rename to Moose Development/Moose/Core/Event.lua diff --git a/Moose Development/Moose/Menu.lua b/Moose Development/Moose/Core/Menu.lua similarity index 100% rename from Moose Development/Moose/Menu.lua rename to Moose Development/Moose/Core/Menu.lua diff --git a/Moose Development/Moose/Message.lua b/Moose Development/Moose/Core/Message.lua similarity index 100% rename from Moose Development/Moose/Message.lua rename to Moose Development/Moose/Core/Message.lua diff --git a/Moose Development/Moose/Point.lua b/Moose Development/Moose/Core/Point.lua similarity index 100% rename from Moose Development/Moose/Point.lua rename to Moose Development/Moose/Core/Point.lua diff --git a/Moose Development/Moose/Scheduler.lua b/Moose Development/Moose/Core/Scheduler.lua similarity index 100% rename from Moose Development/Moose/Scheduler.lua rename to Moose Development/Moose/Core/Scheduler.lua diff --git a/Moose Development/Moose/Set.lua b/Moose Development/Moose/Core/Set.lua similarity index 100% rename from Moose Development/Moose/Set.lua rename to Moose Development/Moose/Core/Set.lua diff --git a/Moose Development/Moose/StateMachine.lua b/Moose Development/Moose/Core/StateMachine.lua similarity index 95% rename from Moose Development/Moose/StateMachine.lua rename to Moose Development/Moose/Core/StateMachine.lua index ee863e9e3..ba8fb1261 100644 --- a/Moose Development/Moose/StateMachine.lua +++ b/Moose Development/Moose/Core/StateMachine.lua @@ -285,24 +285,23 @@ STATEMACHINE_TASK = { --- Creates a new STATEMACHINE_TASK object. -- @param #STATEMACHINE_TASK self +-- @param #table FSMT +-- @param Task#TASK_BASE Task +-- @param Unit#UNIT TaskUnit -- @return #STATEMACHINE_TASK -function STATEMACHINE_TASK:New( Task, TaskUnit, options ) +function STATEMACHINE_TASK:New( FSMT, Task, TaskUnit ) - local FsmTask = routines.utils.deepCopy( self ) -- Create a new self instance - local Parent = STATEMACHINE:New(options) + local self = BASE:Inherit( self, STATEMACHINE:New( FSMT ) ) -- StateMachine#STATEMACHINE_PROCESS - setmetatable( FsmTask, Parent ) - FsmTask.__index = FsmTask + self["onstatechange"] = Task.OnStateChange + self["onAssigned"] = Task.OnAssigned + self["onSuccess"] = Task.OnSuccess + self["onFailed"] = Task.OnFailed - FsmTask["onstatechange"] = Task.OnStateChange - FsmTask["onAssigned"] = Task.OnAssigned - FsmTask["onSuccess"] = Task.OnSuccess - FsmTask["onFailed"] = Task.OnFailed + self.Task = Task + self.TaskUnit = TaskUnit - FsmTask.Task = Task - FsmTask.TaskUnit = TaskUnit - - return FsmTask + return self end function STATEMACHINE_TASK:_call_handler( handler, params ) @@ -338,7 +337,7 @@ end --- Sets the CONTROLLABLE object that the STATEMACHINE_CONTROLLABLE governs. -- @param #STATEMACHINE_CONTROLLABLE self --- @param Controllable#CONTROLLABLE Controllable +-- @param Controllable#CONTROLLABLE FSMControllable -- @return #STATEMACHINE_CONTROLLABLE function STATEMACHINE_CONTROLLABLE:SetControllable( FSMControllable ) self:F( FSMControllable ) diff --git a/Moose Development/Moose/Zone.lua b/Moose Development/Moose/Core/Zone.lua similarity index 100% rename from Moose Development/Moose/Zone.lua rename to Moose Development/Moose/Core/Zone.lua diff --git a/Moose Development/Dcs/DCSAirbase.lua b/Moose Development/Moose/Dcs/DCSAirbase.lua similarity index 100% rename from Moose Development/Dcs/DCSAirbase.lua rename to Moose Development/Moose/Dcs/DCSAirbase.lua diff --git a/Moose Development/Dcs/DCSCoalitionObject.lua b/Moose Development/Moose/Dcs/DCSCoalitionObject.lua similarity index 100% rename from Moose Development/Dcs/DCSCoalitionObject.lua rename to Moose Development/Moose/Dcs/DCSCoalitionObject.lua diff --git a/Moose Development/Dcs/DCSCommand.lua b/Moose Development/Moose/Dcs/DCSCommand.lua similarity index 100% rename from Moose Development/Dcs/DCSCommand.lua rename to Moose Development/Moose/Dcs/DCSCommand.lua diff --git a/Moose Development/Dcs/DCSController.lua b/Moose Development/Moose/Dcs/DCSController.lua similarity index 100% rename from Moose Development/Dcs/DCSController.lua rename to Moose Development/Moose/Dcs/DCSController.lua diff --git a/Moose Development/Dcs/DCSGroup.lua b/Moose Development/Moose/Dcs/DCSGroup.lua similarity index 100% rename from Moose Development/Dcs/DCSGroup.lua rename to Moose Development/Moose/Dcs/DCSGroup.lua diff --git a/Moose Development/Dcs/DCSObject.lua b/Moose Development/Moose/Dcs/DCSObject.lua similarity index 100% rename from Moose Development/Dcs/DCSObject.lua rename to Moose Development/Moose/Dcs/DCSObject.lua diff --git a/Moose Development/Dcs/DCSStaticObject.lua b/Moose Development/Moose/Dcs/DCSStaticObject.lua similarity index 100% rename from Moose Development/Dcs/DCSStaticObject.lua rename to Moose Development/Moose/Dcs/DCSStaticObject.lua diff --git a/Moose Development/Dcs/DCSTask.lua b/Moose Development/Moose/Dcs/DCSTask.lua similarity index 100% rename from Moose Development/Dcs/DCSTask.lua rename to Moose Development/Moose/Dcs/DCSTask.lua diff --git a/Moose Development/Dcs/DCSTime.lua b/Moose Development/Moose/Dcs/DCSTime.lua similarity index 100% rename from Moose Development/Dcs/DCSTime.lua rename to Moose Development/Moose/Dcs/DCSTime.lua diff --git a/Moose Development/Dcs/DCSTypes.lua b/Moose Development/Moose/Dcs/DCSTypes.lua similarity index 100% rename from Moose Development/Dcs/DCSTypes.lua rename to Moose Development/Moose/Dcs/DCSTypes.lua diff --git a/Moose Development/Dcs/DCSUnit.lua b/Moose Development/Moose/Dcs/DCSUnit.lua similarity index 100% rename from Moose Development/Dcs/DCSUnit.lua rename to Moose Development/Moose/Dcs/DCSUnit.lua diff --git a/Moose Development/Dcs/DCScountry.lua b/Moose Development/Moose/Dcs/DCScountry.lua similarity index 100% rename from Moose Development/Dcs/DCScountry.lua rename to Moose Development/Moose/Dcs/DCScountry.lua diff --git a/Moose Development/Dcs/DCSenv.lua b/Moose Development/Moose/Dcs/DCSenv.lua similarity index 100% rename from Moose Development/Dcs/DCSenv.lua rename to Moose Development/Moose/Dcs/DCSenv.lua diff --git a/Moose Development/Dcs/DCSland.lua b/Moose Development/Moose/Dcs/DCSland.lua similarity index 100% rename from Moose Development/Dcs/DCSland.lua rename to Moose Development/Moose/Dcs/DCSland.lua diff --git a/Moose Development/Dcs/DCStimer.lua b/Moose Development/Moose/Dcs/DCStimer.lua similarity index 100% rename from Moose Development/Dcs/DCStimer.lua rename to Moose Development/Moose/Dcs/DCStimer.lua diff --git a/Moose Development/Dcs/DCStrigger.lua b/Moose Development/Moose/Dcs/DCStrigger.lua similarity index 100% rename from Moose Development/Dcs/DCStrigger.lua rename to Moose Development/Moose/Dcs/DCStrigger.lua diff --git a/Moose Development/Dcs/DCSworld.lua b/Moose Development/Moose/Dcs/DCSworld.lua similarity index 100% rename from Moose Development/Dcs/DCSworld.lua rename to Moose Development/Moose/Dcs/DCSworld.lua diff --git a/Moose Development/Moose/Fsm/Account.lua b/Moose Development/Moose/Fsm/Account.lua new file mode 100644 index 000000000..736e46872 --- /dev/null +++ b/Moose Development/Moose/Fsm/Account.lua @@ -0,0 +1,249 @@ +--- (SP) (MP) (FSM) Account for (Detect, count and report) DCS events occuring on DCS objects (units). +-- +-- === +-- +-- # @{#ACCOUNT} FSM class, extends @{Process#PROCESS} +-- +-- ## ACCOUNT state machine: +-- +-- This class is a state machine: it manages a process that is triggered by events causing state transitions to occur. +-- All derived classes from this class will start with the class name, followed by a \_. See the relevant derived class descriptions below. +-- Each derived class follows exactly the same process, using the same events and following the same state transitions, +-- but will have **different implementation behaviour** upon each event or state transition. +-- +-- ### ACCOUNT **Events**: +-- +-- These are the events defined in this class: +-- +-- * **Start**: The process is started. The process will go into the Report state. +-- * **Event**: A relevant event has occured that needs to be accounted for. The process will go into the Account state. +-- * **Report**: The process is reporting to the player the accounting status of the DCS events. +-- * **More**: There are more DCS events that need to be accounted for. The process will go back into the Report state. +-- * **NoMore**: There are no more DCS events that need to be accounted for. The process will go into the Success state. +-- +-- ### ACCOUNT **Event methods**: +-- +-- Event methods are available (dynamically allocated by the state machine), that accomodate for state transitions occurring in the process. +-- There are two types of event methods, which you can use to influence the normal mechanisms in the state machine: +-- +-- * **Immediate**: The event method has exactly the name of the event. +-- * **Delayed**: The event method starts with a __ + the name of the event. The first parameter of the event method is a number value, expressing the delay in seconds when the event will be executed. +-- +-- ### ACCOUNT **States**: +-- +-- * **Assigned**: The player is assigned to the task. This is the initialization state for the process. +-- * **Waiting**: the process is waiting for a DCS event to occur within the simulator. This state is set automatically. +-- * **Report**: The process is Reporting to the players in the group of the unit. This state is set automatically every 30 seconds. +-- * **Account**: The relevant DCS event has occurred, and is accounted for. +-- * **Success (*)**: All DCS events were accounted for. +-- * **Failed (*)**: The process has failed. +-- +-- (*) End states of the process. +-- +-- ### ACCOUNT state transition methods: +-- +-- State transition functions can be set **by the mission designer** customizing or improving the behaviour of the state. +-- There are 2 moments when state transition methods will be called by the state machine: +-- +-- * **Before** the state transition. +-- The state transition method needs to start with the name **OnBefore + the name of the state**. +-- If the state transition method returns false, then the processing of the state transition will not be done! +-- If you want to change the behaviour of the AIControllable at this event, return false, +-- but then you'll need to specify your own logic using the AIControllable! +-- +-- * **After** the state transition. +-- The state transition method needs to start with the name **OnAfter + the name of the state**. +-- These state transition methods need to provide a return value, which is specified at the function description. +-- +-- # 1) @{#ACCOUNT_DEADS} FSM class, extends @{Account#ACCOUNT} +-- +-- The ACCOUNT_DEADS class accounts (detects, counts and reports) successful kills of DCS units. +-- The process is given a @{Set} of units that will be tracked upon successful destruction. +-- The process will end after each target has been successfully destroyed. +-- Each successful dead will trigger an Account state transition that can be scored, modified or administered. +-- +-- +-- ## ACCOUNT_DEADS constructor: +-- +-- * @{#ACCOUNT_DEADS.New}(): Creates a new ACCOUNT_DEADS object. +-- +-- === +-- +-- @module Account + + +do -- ACCOUNT + + --- ACCOUNT class + -- @type ACCOUNT + -- @field Set#SET_UNIT TargetSetUnit + -- @extends Process#PROCESS + ACCOUNT = { + ClassName = "ACCOUNT", + TargetSetUnit = nil, + } + + --- Creates a new DESTROY process. + -- @param #ACCOUNT self + -- @return #ACCOUNT + function ACCOUNT:New() + + local FSMT = { + initial = 'Assigned', + events = { + { name = 'Start', from = 'Assigned', to = 'Waiting' }, + { name = 'Wait', from = '*', to = 'Waiting' }, + { name = 'Report', from = '*', to = 'Report' }, + { name = 'Event', from = '*', to = 'Account' }, + { name = 'More', from = 'Account', to = 'Wait' }, + { name = 'NoMore', from = 'Account', to = 'Success' }, + { name = 'Fail', from = '*', to = 'Failed' }, + }, + endstates = { 'Success', 'Failed' } + } + + -- Inherits from BASE + local self = BASE:Inherit( self, PROCESS:New( FSMT, "ACCOUNT" ) ) -- #ACCOUNT + + self.DisplayInterval = 30 + self.DisplayCount = 30 + self.DisplayMessage = true + self.DisplayTime = 10 -- 10 seconds is the default + self.DisplayCategory = "HQ" -- Targets is the default display category + + return self + end + + --- Process Events + + --- StateMachine callback function + -- @param #ACCOUNT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ACCOUNT:onafterStart( ProcessUnit, Event, From, To ) + + self:__Wait( 1 ) + end + + --- StateMachine callback function + -- @param #ACCOUNT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ACCOUNT:onenterWaiting( ProcessUnit, Event, From, To ) + + if self.DisplayCount >= self.DisplayInterval then + self:Report() + self.DisplayCount = 1 + else + self.DisplayCount = self.DisplayCount + 1 + end + + return true -- Process always the event. + end + + --- StateMachine callback function + -- @param #ACCOUNT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ACCOUNT:onafterEvent( ProcessUnit, Event, From, To, Event ) + + self:__NoMore( 1 ) + end + +end -- ACCOUNT + +do -- ACCOUNT_DEADS + + --- ACCOUNT_DEADS class + -- @type ACCOUNT_DEADS + -- @field Set#SET_UNIT TargetSetUnit + -- @extends Process#PROCESS + ACCOUNT_DEADS = { + ClassName = "ACCOUNT_DEADS", + TargetSetUnit = nil, + } + + + --- Creates a new DESTROY process. + -- @param #ACCOUNT_DEADS self + -- @param Set#SET_UNIT TargetSetUnit + -- @param #string TaskName + -- @return #ACCOUNT_DEADS self + function ACCOUNT_DEADS:New( TargetSetUnit, TaskName ) + + -- Inherits from BASE + local self = BASE:Inherit( self, ACCOUNT:New() ) -- #ACCOUNT_DEADS + + self.TargetSetUnit = TargetSetUnit + self.TaskName = TaskName + + _EVENTDISPATCHER:OnDead( self.EventDead, self ) + + return self + end + + --- Process Events + + --- StateMachine callback function + -- @param #ASSIGN_MENU_ACCEPT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ACCOUNT_DEADS:onenterReport( ProcessUnit, Event, From, To ) + + local TaskGroup = ProcessUnit:GetGroup() + MESSAGE:New( "Your group with assigned " .. self.TaskName .. " task has " .. self.TargetSetUnit:GetUnitTypesText() .. " targets left to be destroyed.", 5, "HQ" ):ToGroup( TaskGroup ) + end + + + --- StateMachine callback function + -- @param #ASSIGN_MENU_ACCEPT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ACCOUNT_DEADS:onenterAccount( ProcessUnit, Event, From, To, Event ) + + self.TargetSetUnit:Flush() + + if self.TargetSetUnit:FindUnit( Event.IniUnitName ) then + self.TargetSetUnit:RemoveUnitsByName( Event.IniUnitName ) + local TaskGroup = ProcessUnit:GetGroup() + MESSAGE:New( "You hit a target. Your group with assigned " .. self.TaskName .. " task has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed.", 15, "HQ" ):ToGroup( TaskGroup ) + end + end + + --- StateMachine callback function + -- @param #ASSIGN_MENU_ACCEPT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ACCOUNT_DEADS:onafterEvent( ProcessUnit, Event, From, To, Event ) + + if self.TargetSetUnit:Count() > 0 then + self:__More( 1 ) + else + self:__NoMore( 1 ) + end + end + + --- DCS Events + + --- @param #ACCOUNT_DEADS self + -- @param Event#EVENTDATA Event + function ACCOUNT_DEADS:EventDead( Event ) + + if Event.IniDCSUnit then + self:__Event( 1 ) + end + end + +end -- ACCOUNT DEADS \ No newline at end of file diff --git a/Moose Development/Moose/Fsm/Assign.lua b/Moose Development/Moose/Fsm/Assign.lua new file mode 100644 index 000000000..fd2366e75 --- /dev/null +++ b/Moose Development/Moose/Fsm/Assign.lua @@ -0,0 +1,258 @@ +--- (SP) (MP) (FSM) Accept or reject process for player (task) assignments. +-- +-- === +-- +-- # @{#ASSIGN} FSM class, extends @{Process#PROCESS} +-- +-- ## ASSIGN state machine: +-- +-- This class is a state machine: it manages a process that is triggered by events causing state transitions to occur. +-- All derived classes from this class will start with the class name, followed by a \_. See the relevant derived class descriptions below. +-- Each derived class follows exactly the same process, using the same events and following the same state transitions, +-- but will have **different implementation behaviour** upon each event or state transition. +-- +-- ### ASSIGN **Events**: +-- +-- These are the events defined in this class: +-- +-- * **Start**: Start the tasking acceptance process. +-- * **Assign**: Assign the task. +-- * **Reject**: Reject the task.. +-- +-- ### ASSIGN **Event methods**: +-- +-- Event methods are available (dynamically allocated by the state machine), that accomodate for state transitions occurring in the process. +-- There are two types of event methods, which you can use to influence the normal mechanisms in the state machine: +-- +-- * **Immediate**: The event method has exactly the name of the event. +-- * **Delayed**: The event method starts with a __ + the name of the event. The first parameter of the event method is a number value, expressing the delay in seconds when the event will be executed. +-- +-- ### ASSIGN **States**: +-- +-- * **UnAssigned**: The player has not accepted the task. +-- * **Assigned (*)**: The player has accepted the task. +-- * **Rejected (*)**: The player has not accepted the task. +-- * **Waiting**: The process is awaiting player feedback. +-- * **Failed (*)**: The process has failed. +-- +-- (*) End states of the process. +-- +-- ### ASSIGN state transition methods: +-- +-- State transition functions can be set **by the mission designer** customizing or improving the behaviour of the state. +-- There are 2 moments when state transition methods will be called by the state machine: +-- +-- * **Before** the state transition. +-- The state transition method needs to start with the name **OnBefore + the name of the state**. +-- If the state transition method returns false, then the processing of the state transition will not be done! +-- If you want to change the behaviour of the AIControllable at this event, return false, +-- but then you'll need to specify your own logic using the AIControllable! +-- +-- * **After** the state transition. +-- The state transition method needs to start with the name **OnAfter + the name of the state**. +-- These state transition methods need to provide a return value, which is specified at the function description. +-- +-- === +-- +-- # 1) @{#ASSIGN_ACCEPT} class, extends @{Assign#ASSIGN} +-- +-- The ASSIGN_ACCEPT class accepts by default a task for a player. No player intervention is allowed to reject the task. +-- +-- ## 1.1) ASSIGN_ACCEPT constructor: +-- +-- * @{#ASSIGN_ACCEPT.New}(): Creates a new ASSIGN_ACCEPT object. +-- +-- === +-- +-- # 2) @{#ASSIGN_MENU_ACCEPT} class, extends @{Assign#ASSIGN} +-- +-- The ASSIGN_MENU_ACCEPT class accepts a task when the player accepts the task through an added menu option. +-- This assignment type is useful to conditionally allow the player to choose whether or not he would accept the task. +-- The assignment type also allows to reject the task. +-- +-- ## 2.1) ASSIGN_MENU_ACCEPT constructor: +-- ----------------------------------------- +-- +-- * @{#ASSIGN_MENU_ACCEPT.New}(): Creates a new ASSIGN_MENU_ACCEPT object. +-- +-- === +-- +-- @module Assign + + +do -- ASSIGN + + --- ASSIGN class + -- @type ASSIGN + -- @field Task#TASK_BASE Task + -- @field Unit#UNIT ProcessUnit + -- @field Zone#ZONE_BASE TargetZone + -- @extends Process#PROCESS + ASSIGN = { + ClassName = "ASSIGN", + } + + + --- Creates a new task assignment state machine. The process will accept the task by default, no player intervention accepted. + -- @param #ASSIGN self + -- @return #ASSIGN The task acceptance process. + function ASSIGN:New() + + local FSMT = { + initial = 'UnAssigned', + events = { + { name = 'Start', from = 'UnAssigned', to = 'Waiting' }, + { name = 'Assign', from = 'Waiting', to = 'Assigned' }, + { name = 'Reject', from = 'Waiting', to = 'Rejected' }, + { name = 'Fail', from = '*', to = 'Failed' }, + }, + endstates = { + 'Assigned', 'Rejected', 'Failed' + }, + } + + -- Inherits from BASE + local self = BASE:Inherit( self, PROCESS:New( FSMT, "ASSIGN" ) ) -- #ASSIGN + + return self + end + +end -- ASSIGN + + + +do -- ASSIGN_ACCEPT + + --- ASSIGN_ACCEPT class + -- @type ASSIGN_ACCEPT + -- @field Task#TASK_BASE Task + -- @field Unit#UNIT ProcessUnit + -- @field Zone#ZONE_BASE TargetZone + -- @extends Process#PROCESS + ASSIGN_ACCEPT = { + ClassName = "ASSIGN_ACCEPT", + } + + + --- Creates a new task assignment state machine. The process will accept the task by default, no player intervention accepted. + -- @param #ASSIGN_ACCEPT self + -- @param #string TaskBriefing + -- @return #ASSIGN_ACCEPT The task acceptance process. + function ASSIGN_ACCEPT:New( TaskBriefing ) + + -- Inherits from BASE + local self = BASE:Inherit( self, ASSIGN:New() ) -- #ASSIGN_ACCEPT + + self.TaskBriefing = TaskBriefing + + return self + end + + + --- StateMachine callback function + -- @param #ASSIGN_ACCEPT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ASSIGN_ACCEPT:onafterStart( ProcessUnit, Event, From, To ) + self:E( { ProcessUnit, Event, From, To } ) + + MESSAGE:New( self.TaskBriefing, 30, "Task Assignment" ):ToGroup( ProcessUnit:GetGroup() ) + + self:__Assign( 1 ) + end + +end -- ASSIGN_ACCEPT + + +do -- ASSIGN_MENU_ACCEPT + + --- ASSIGN_MENU_ACCEPT class + -- @type ASSIGN_MENU_ACCEPT + -- @field Task#TASK_BASE Task + -- @field Unit#UNIT ProcessUnit + -- @field Zone#ZONE_BASE TargetZone + -- @extends Task2#TASK2 + ASSIGN_MENU_ACCEPT = { + ClassName = "ASSIGN_MENU_ACCEPT", + } + + + --- Creates a new task assignment state machine. The process will request from the menu if it accepts the task, if not, the unit is removed from the simulator. + -- @param #ASSIGN_MENU_ACCEPT self + -- @param #string TaskName + -- @param #string TaskBriefing + -- @return #ASSIGN_MENU_ACCEPT self + function ASSIGN_MENU_ACCEPT:New( TaskName, TaskBriefing ) + + -- Inherits from BASE + local self = BASE:Inherit( self, ASSIGN:New() ) -- #ASSIGN_MENU_ACCEPT + + self.TaskBriefing = TaskBriefing + self.TaskName = TaskName + + return self + end + + --- StateMachine callback function + -- @param #ASSIGN_MENU_ACCEPT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ASSIGN_MENU_ACCEPT:onafterStart( ProcessUnit, Event, From, To ) + self:E( { ProcessUnit, Event, From, To } ) + + MESSAGE:New( self.TaskBriefing .. "\nAccess the radio menu to accept the task. You have 30 seconds or the assignment will be cancelled.", 30, "Task Assignment" ):ToGroup( ProcessUnit:GetGroup() ) + + local ProcessGroup = ProcessUnit:GetGroup() + self.Menu = MENU_GROUP:New( ProcessGroup, "Task " .. self.TaskName .. " acceptance" ) + self.MenuAcceptTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Accept task " .. self.MenuText, self.Menu, self.MenuAssign, self ) + self.MenuRejectTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Reject task " .. self.MenuText, self.Menu, self.MenuReject, self ) + end + + --- Menu function. + -- @param #ASSIGN_MENU_ACCEPT self + function ASSIGN_MENU_ACCEPT:MenuAssign() + self:E( ) + + self:__Assign( 1 ) + end + + --- Menu function. + -- @param #ASSIGN_MENU_ACCEPT self + function ASSIGN_MENU_ACCEPT:MenuReject() + self:E( ) + + self:__Reject( 1 ) + end + + --- StateMachine callback function + -- @param #ASSIGN_MENU_ACCEPT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ASSIGN_MENU_ACCEPT:onafterAssign( ProcessUnit, Event, From, To ) + self:E( { ProcessUnit.UnitNameEvent, From, To } ) + + self.Menu:Remove() + end + + --- StateMachine callback function + -- @param #ASSIGN_MENU_ACCEPT self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ASSIGN_MENU_ACCEPT:onafterReject( ProcessUnit, Event, From, To ) + self:E( { ProcessUnit.UnitName, Event, From, To } ) + + self.Menu:Remove() + --TODO: need to resolve this problem ... it has to do with the events ... + --self.Task:UnAssignFromUnit( ProcessUnit )needs to become a callback funtion call upon the event + ProcessUnit:Destroy() + end + +end -- ASSIGN_MENU_ACCEPT diff --git a/Moose Development/Moose/Cargo.lua b/Moose Development/Moose/Fsm/Cargo.lua similarity index 79% rename from Moose Development/Moose/Cargo.lua rename to Moose Development/Moose/Fsm/Cargo.lua index 798c3000e..f43de4acb 100644 --- a/Moose Development/Moose/Cargo.lua +++ b/Moose Development/Moose/Fsm/Cargo.lua @@ -1,12 +1,7 @@ --- Management of logical cargo objects, that can be transported from and to transportation carriers. -- -- === --- --- 1) @{Cargo#CARGO_BASE} class, extends @{Base#BASE} --- ================================================== --- The @{#CARGO_BASE} class defines the core functions that defines a cargo object within MOOSE. --- A cargo is a logical object defined that is available for transport, and has a life status within a simulation. --- +-- -- Cargo can be of various forms, always are composed out of ONE object ( one unit or one static or one slingload crate ): -- -- * CARGO_UNIT, represented by a @{Unit} in a @{Group}: Cargo can be represented by a Unit in a Group. Destruction of the Unit will mean that the cargo is lost. @@ -16,20 +11,24 @@ -- * CARGO_SLINGLOAD, represented by a @{Cargo} that is transportable: Cargo can be represented by a Cargo object that is transportable. Destruction of the Cargo will mean that the cargo is lost. -- -- * CARGO_GROUPED, represented by a Group of CARGO_UNITs. +-- +-- 1) @{Cargo#CARGO_BASE} class, extends @{StateMachine#STATEMACHINE_PROCESS} +-- ========================================================================== +-- The @{#CARGO_BASE} class defines the core functions that defines a cargo object within MOOSE. +-- A cargo is a logical object defined that is available for transport, and has a life status within a simulation. -- --- 1.2) CARGO state machine: --- ------------------------- --- The CARGO is a state machine: it manages the different events and states of the cargo. +-- The CARGO_BASE is a state machine: it manages the different events and states of the cargo. +-- All derived classes from CARGO_BASE follow the same state machine, expose the same cargo event functions, and provide the same cargo states. -- --- ### 1.2.1) CARGO Events: +-- ## 1.2.1) CARBO_BASE Events: -- --- * @{#CARGO.Board}( ToCarrier ): Boards the cargo to a Carrier. --- * @{#CARGO.Load}( ToCarrier ): Loads the cargo into a Carrier, regardless of its position. --- * @{#CARGO.UnBoard}( ToPointVec2 ): UnBoard the cargo from a Carrier. This will trigger a movement of the cargo to the option ToPointVec2. --- * @{#CARGO.UnLoad}( ToPointVec2 ): UnLoads the cargo from a Carrier. --- * @{#CARGO.Dead}( Controllable ): The cargo is dead. The cargo process will be ended. +-- * @{#CARBO_BASE.Board}( ToCarrier ): Boards the cargo to a carrier. +-- * @{#CARBO_BASE.Load}( ToCarrier ): Loads the cargo into a carrier, regardless of its position. +-- * @{#CARBO_BASE.UnBoard}( ToPointVec2 ): UnBoard the cargo from a carrier. This will trigger a movement of the cargo to the option ToPointVec2. +-- * @{#CARBO_BASE.UnLoad}( ToPointVec2 ): UnLoads the cargo from a carrier. +-- * @{#CARBO_BASE.Dead}( Controllable ): The cargo is dead. The cargo process will be ended. -- --- ### 1.2.2) CARGO States: +-- ## 1.2.2) CARBO_BASE States: -- -- * **UnLoaded**: The cargo is unloaded from a carrier. -- * **Boarding**: The cargo is currently boarding (= running) into a carrier. @@ -38,93 +37,144 @@ -- * **Dead**: The cargo is dead ... -- * **End**: The process has come to an end. -- --- ### 1.2.3) CARGO state transition functions: +-- ## 1.2.3) CARBO_BASE state transition methods: -- -- State transition functions can be set **by the mission designer** customizing or improving the behaviour of the state. --- There are 2 moments when state transition functions will be called by the state machine: +-- There are 2 moments when state transition methods will be called by the state machine: -- -- * **Before** the state transition. --- The state transition function needs to start with the name **OnBefore + the name of the state**. --- If the state transition function returns false, then the processing of the state transition will not be done! +-- The state transition method needs to start with the name **OnBefore + the name of the state**. +-- If the state transition method returns false, then the processing of the state transition will not be done! -- If you want to change the behaviour of the AIControllable at this event, return false, -- but then you'll need to specify your own logic using the AIControllable! -- -- * **After** the state transition. --- The state transition function needs to start with the name **OnAfter + the name of the state**. --- These state transition functions need to provide a return value, which is specified at the function description. --- +-- The state transition method needs to start with the name **OnAfter + the name of the state**. +-- These state transition methods need to provide a return value, which is specified at the function description. +-- +-- 2) #CARGO_UNIT class +-- ==================== +-- The CARGO_UNIT class defines a cargo that is represented by a UNIT object within the simulator, and can be transported by a carrier. +-- Use the event functions as described above to Load, UnLoad, Board, UnBoard the CARGO_UNIT objects to and from carriers. +-- +-- 5) #CARGO_GROUPED class +-- ======================= +-- The CARGO_GROUPED class defines a cargo that is represented by a group of UNIT objects within the simulator, and can be transported by a carrier. +-- Use the event functions as described above to Load, UnLoad, Board, UnBoard the CARGO_UNIT objects to and from carriers. +-- +-- This module is still under construction, but is described above works already, and will keep working ... +-- -- @module Cargo -- Events ---- Event Function. The cargo must be in the **UnLoaded** state. --- Boards the cargo to a Carrier. The event will create a movement (= running or driving) of the cargo to the Carrier. --- @function [parent=#CARGO] Board --- @param #CARGO self +-- Board + +--- Boards the cargo to a Carrier. The event will create a movement (= running or driving) of the cargo to the Carrier. +-- The cargo must be in the **UnLoaded** state. +-- @function [parent=#CARBO_BASE] Board +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE ToCarrier The Carrier that will hold the cargo. ---- Event Function. The cargo must be in the **Loaded** state. --- UnBoards the cargo to a Carrier. The event will create a movement (= running or driving) of the cargo from the Carrier. --- @function [parent=#CARGO] UnBoard --- @param #CARGO self +--- Boards the cargo to a Carrier. The event will create a movement (= running or driving) of the cargo to the Carrier. +-- The cargo must be in the **UnLoaded** state. +-- @function [parent=#CARBO_BASE] __Board +-- @param #CARBO_BASE self +-- @param #number DelaySeconds The amount of seconds to delay the action. +-- @param Controllable#CONTROLLABLE ToCarrier The Carrier that will hold the cargo. + + +-- UnBoard + +--- UnBoards the cargo to a Carrier. The event will create a movement (= running or driving) of the cargo from the Carrier. +-- The cargo must be in the **Loaded** state. +-- @function [parent=#CARBO_BASE] UnBoard +-- @param #CARBO_BASE self -- @param Point#POINT_VEC2 ToPointVec2 (optional) @{Point#POINT_VEC2) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location. ---- Event Function. The cargo must be in the **UnLoaded** state. --- Loads the cargo to a Carrier. The event will load the cargo into the Carrier regardless of its position. There will be no movement simulated of the cargo loading. --- @function [parent=#CARGO] Load --- @param #CARGO self +--- UnBoards the cargo to a Carrier. The event will create a movement (= running or driving) of the cargo from the Carrier. +-- The cargo must be in the **Loaded** state. +-- @function [parent=#CARBO_BASE] __UnBoard +-- @param #CARBO_BASE self +-- @param #number DelaySeconds The amount of seconds to delay the action. +-- @param Point#POINT_VEC2 ToPointVec2 (optional) @{Point#POINT_VEC2) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location. + + +-- Load + +--- Loads the cargo to a Carrier. The event will load the cargo into the Carrier regardless of its position. There will be no movement simulated of the cargo loading. +-- The cargo must be in the **UnLoaded** state. +-- @function [parent=#CARBO_BASE] Load +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE ToCarrier The Carrier that will hold the cargo. ---- Event Function. The cargo must be in the **Loaded** state. --- UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier. There will be no movement simulated of the cargo loading. --- @function [parent=#CARGO] Board --- @param #CARGO self +--- Loads the cargo to a Carrier. The event will load the cargo into the Carrier regardless of its position. There will be no movement simulated of the cargo loading. +-- The cargo must be in the **UnLoaded** state. +-- @function [parent=#CARBO_BASE] __Load +-- @param #CARBO_BASE self +-- @param #number DelaySeconds The amount of seconds to delay the action. +-- @param Controllable#CONTROLLABLE ToCarrier The Carrier that will hold the cargo. + + +-- UnLoad + +--- UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier. There will be no movement simulated of the cargo loading. +-- The cargo must be in the **Loaded** state. +-- @function [parent=#CARBO_BASE] UnLoad +-- @param #CARBO_BASE self +-- @param Point#POINT_VEC2 ToPointVec2 (optional) @{Point#POINT_VEC2) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location. + +--- UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier. There will be no movement simulated of the cargo loading. +-- The cargo must be in the **Loaded** state. +-- @function [parent=#CARBO_BASE] __UnLoad +-- @param #CARBO_BASE self +-- @param #number DelaySeconds The amount of seconds to delay the action. -- @param Point#POINT_VEC2 ToPointVec2 (optional) @{Point#POINT_VEC2) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location. -- State Transition Functions -- UnLoaded ---- @function [parent=#CARGO] OnBeforeUnLoaded --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnBeforeUnLoaded +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable -- @return #boolean ---- @function [parent=#CARGO] OnAfterUnLoaded --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnAfterUnLoaded +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable -- Loaded ---- @function [parent=#CARGO] OnBeforeLoaded --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnBeforeLoaded +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable -- @return #boolean ---- @function [parent=#CARGO] OnAfterLoaded --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnAfterLoaded +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable -- Boarding ---- @function [parent=#CARGO] OnBeforeBoarding --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnBeforeBoarding +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable -- @return #boolean ---- @function [parent=#CARGO] OnAfterBoarding --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnAfterBoarding +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable -- UnBoarding ---- @function [parent=#CARGO] OnBeforeUnBoarding --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnBeforeUnBoarding +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable -- @return #boolean ---- @function [parent=#CARGO] OnAfterUnBoarding --- @param #CARGO self +--- @function [parent=#CARBO_BASE] OnAfterUnBoarding +-- @param #CARBO_BASE self -- @param Controllable#CONTROLLABLE Controllable @@ -132,9 +182,9 @@ CARGOS = {} -do -- CARGO +do -- CARBO_BASE - --- @type CARGO + --- @type CARBO_BASE -- @extends StateMachine#STATEMACHINE_PROCESS -- @field #string Type A string defining the type of the cargo. eg. Engineers, Equipment, Screwdrivers. -- @field #string Name A string defining the name of the cargo. The name is the unique identifier of the cargo. @@ -147,8 +197,8 @@ do -- CARGO -- @field #boolean Moveable This flag defines if the cargo is moveable. -- @field #boolean Representable This flag defines if the cargo can be represented by a DCS Unit. -- @field #boolean Containable This flag defines if the cargo can be contained within a DCS Unit. - CARGO = { - ClassName = "CARGO", + CARBO_BASE = { + ClassName = "CARBO_BASE", Type = nil, Name = nil, Weight = nil, @@ -160,20 +210,19 @@ do -- CARGO Containable = false, } ---- @type CARGO.CargoObjects +--- @type CARBO_BASE.CargoObjects -- @map < #string, Positionable#POSITIONABLE > The alive POSITIONABLE objects representing the the cargo. ---- CARGO Constructor. This class is an abstract class and should not be instantiated. --- @param #CARGO self --- @param Mission#MISSION Mission +--- CARBO_BASE Constructor. This class is an abstract class and should not be instantiated. +-- @param #CARBO_BASE self -- @param #string Type -- @param #string Name -- @param #number Weight -- @param #number ReportRadius (optional) -- @param #number NearRadius (optional) --- @return #CARGO -function CARGO:New( Mission, Type, Name, Weight, ReportRadius, NearRadius ) +-- @return #CARBO_BASE +function CARBO_BASE:New( Type, Name, Weight, ReportRadius, NearRadius ) FSMT = { initial = 'UnLoaded', @@ -189,7 +238,7 @@ function CARGO:New( Mission, Type, Name, Weight, ReportRadius, NearRadius ) }, } - local self = BASE:Inherit( self, STATEMACHINE_PROCESS:New( FSMT ) ) -- #CARGO + local self = BASE:Inherit( self, STATEMACHINE_PROCESS:New( FSMT ) ) -- #CARBO_BASE self:F( { Type, Name, Weight, ReportRadius, NearRadius } ) @@ -214,20 +263,20 @@ function CARGO:New( Mission, Type, Name, Weight, ReportRadius, NearRadius ) end ---- Template method to spawn a new representation of the CARGO in the simulator. --- @param #CARGO self --- @return #CARGO -function CARGO:Spawn( PointVec2 ) +--- Template method to spawn a new representation of the CARBO_BASE in the simulator. +-- @param #CARBO_BASE self +-- @return #CARBO_BASE +function CARBO_BASE:Spawn( PointVec2 ) self:F() end --- Check if CargoCarrier is near the Cargo to be Loaded. --- @param #CARGO self +-- @param #CARBO_BASE self -- @param Point#POINT_VEC2 PointVec2 -- @return #boolean -function CARGO:IsNear( PointVec2 ) +function CARBO_BASE:IsNear( PointVec2 ) self:F( { PointVec2 } ) local Distance = PointVec2:DistanceFromPointVec2( self.CargoObject:GetPointVec2() ) @@ -245,14 +294,13 @@ end do -- CARGO_REPRESENTABLE --- @type CARGO_REPRESENTABLE - -- @extends #CARGO + -- @extends #CARBO_BASE CARGO_REPRESENTABLE = { ClassName = "CARGO_REPRESENTABLE" } --- CARGO_REPRESENTABLE Constructor. -- @param #CARGO_REPRESENTABLE self --- @param Mission#MISSION Mission -- @param Controllable#Controllable CargoObject -- @param #string Type -- @param #string Name @@ -260,8 +308,8 @@ do -- CARGO_REPRESENTABLE -- @param #number ReportRadius (optional) -- @param #number NearRadius (optional) -- @return #CARGO_REPRESENTABLE -function CARGO_REPRESENTABLE:New( Mission, CargoObject, Type, Name, Weight, ReportRadius, NearRadius ) - local self = BASE:Inherit( self, CARGO:New( Mission, Type, Name, Weight, ReportRadius, NearRadius ) ) -- #CARGO +function CARGO_REPRESENTABLE:New( CargoObject, Type, Name, Weight, ReportRadius, NearRadius ) + local self = BASE:Inherit( self, CARBO_BASE:New( Type, Name, Weight, ReportRadius, NearRadius ) ) -- #CARBO_BASE self:F( { Type, Name, Weight, ReportRadius, NearRadius } ) @@ -290,7 +338,7 @@ function CARGO_REPRESENTABLE:RouteTo( ToPointVec2, Speed ) return self end -end -- CARGO +end -- CARBO_BASE do -- CARGO_UNIT @@ -302,7 +350,6 @@ do -- CARGO_UNIT --- CARGO_UNIT Constructor. -- @param #CARGO_UNIT self --- @param Mission#MISSION Mission -- @param Unit#UNIT CargoUnit -- @param #string Type -- @param #string Name @@ -310,8 +357,8 @@ do -- CARGO_UNIT -- @param #number ReportRadius (optional) -- @param #number NearRadius (optional) -- @return #CARGO_UNIT -function CARGO_UNIT:New( Mission, CargoUnit, Type, Name, Weight, ReportRadius, NearRadius ) - local self = BASE:Inherit( self, CARGO_REPRESENTABLE:New( Mission, CargoUnit, Type, Name, Weight, ReportRadius, NearRadius ) ) -- #CARGO_UNIT +function CARGO_UNIT:New( CargoUnit, Type, Name, Weight, ReportRadius, NearRadius ) + local self = BASE:Inherit( self, CARGO_REPRESENTABLE:New( CargoUnit, Type, Name, Weight, ReportRadius, NearRadius ) ) -- #CARGO_UNIT self:F( { Type, Name, Weight, ReportRadius, NearRadius } ) self:T( CargoUnit ) @@ -555,7 +602,6 @@ do -- CARGO_PACKAGE --- CARGO_PACKAGE Constructor. -- @param #CARGO_PACKAGE self --- @param Mission#MISSION Mission -- @param Unit#UNIT CargoCarrier The UNIT carrying the package. -- @param #string Type -- @param #string Name @@ -563,8 +609,8 @@ do -- CARGO_PACKAGE -- @param #number ReportRadius (optional) -- @param #number NearRadius (optional) -- @return #CARGO_PACKAGE -function CARGO_PACKAGE:New( Mission, CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius ) - local self = BASE:Inherit( self, CARGO_REPRESENTABLE:New( Mission, CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius ) ) -- #CARGO_PACKAGE +function CARGO_PACKAGE:New( CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius ) + local self = BASE:Inherit( self, CARGO_REPRESENTABLE:New( CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius ) ) -- #CARGO_PACKAGE self:F( { Type, Name, Weight, ReportRadius, NearRadius } ) self:T( CargoCarrier ) @@ -770,7 +816,7 @@ end do -- CARGO_GROUP --- @type CARGO_GROUP - -- @extends Cargo#CARGO + -- @extends Cargo#CARBO_BASE -- @field Set#SET_BASE CargoSet A set of cargo objects. -- @field #string Name A string defining the name of the cargo group. The name is the unique identifier of the cargo. CARGO_GROUP = { @@ -787,7 +833,7 @@ do -- CARGO_GROUP -- @param #number NearRadius (optional) -- @return #CARGO_GROUP function CARGO_GROUP:New( CargoSet, Type, Name, ReportRadius, NearRadius ) - local self = BASE:Inherit( self, CARGO:New( Type, Name, 0, ReportRadius, NearRadius ) ) -- #CARGO_GROUP + local self = BASE:Inherit( self, CARBO_BASE:New( Type, Name, 0, ReportRadius, NearRadius ) ) -- #CARGO_GROUP self:F( { Type, Name, ReportRadius, NearRadius } ) self.CargoSet = CargoSet diff --git a/Moose Development/Moose/Process_PatrolZone.lua b/Moose Development/Moose/Fsm/Patrol.lua similarity index 70% rename from Moose Development/Moose/Process_PatrolZone.lua rename to Moose Development/Moose/Fsm/Patrol.lua index 0f75430c6..183e730e5 100644 --- a/Moose Development/Moose/Process_PatrolZone.lua +++ b/Moose Development/Moose/Fsm/Patrol.lua @@ -1,10 +1,10 @@ ---- This module contains the PROCESS\_PATROLZONE class. +--- (AI) (FSM) Make AI patrol routes or zones. -- -- === -- --- 1) @{#PROCESS_PATROLZONE} class, extends @{StateMachine#STATEMACHINE} +-- 1) @{#PATROLZONE} class, extends @{StateMachine#STATEMACHINE} -- ================================================================ --- The @{#PROCESS_PATROLZONE} class implements the core functions to patrol a @{Zone} by an AIR @{Controllable}. +-- The @{#PATROLZONE} class implements the core functions to patrol a @{Zone} by an AIR @{Controllable} @{Group}. -- The patrol algorithm works that for each airplane patrolling, upon arrival at the patrol zone, -- a random point is selected as the route point within the 3D space, within the given boundary limits. -- The airplane will fly towards the random 3D point within the patrol zone, using a random speed within the given altitude and speed limits. @@ -12,47 +12,47 @@ -- This cycle will continue until a fuel treshold has been reached by the airplane. -- When the fuel treshold has been reached, the airplane will fly towards the nearest friendly airbase and will land. -- --- 1.1) PROCESS\_PATROLZONE constructor: +-- 1.1) PATROLZONE constructor: -- ---------------------------- -- --- * @{#PROCESS_PATROLZONE.New}(): Creates a new PROCESS\_PATROLZONE object. +-- * @{#PATROLZONE.New}(): Creates a new PATROLZONE object. -- --- 1.2) PROCESS\_PATROLZONE state machine: +-- 1.2) PATROLZONE state machine: -- ---------------------------------- --- The PROCESS\_PATROLZONE is a state machine: it manages the different events and states of the AIControllable it is controlling. +-- The PATROLZONE is a state machine: it manages the different events and states of the AIControllable it is controlling. -- --- ### 1.2.1) PROCESS\_PATROLZONE Events: +-- ### 1.2.1) PATROLZONE Events: -- --- * @{#PROCESS_PATROLZONE.Route}( AIControllable ): A new 3D route point is selected and the AIControllable will fly towards that point with the given speed. --- * @{#PROCESS_PATROLZONE.Patrol}( AIControllable ): The AIControllable reports it is patrolling. This event is called every 30 seconds. --- * @{#PROCESS_PATROLZONE.RTB}( AIControllable ): The AIControllable will report return to base. --- * @{#PROCESS_PATROLZONE.End}( AIControllable ): The end of the PROCESS\_PATROLZONE process. --- * @{#PROCESS_PATROLZONE.Dead}( AIControllable ): The AIControllable is dead. The PROCESS\_PATROLZONE process will be ended. +-- * @{#PATROLZONE.Route}( AIControllable ): A new 3D route point is selected and the AIControllable will fly towards that point with the given speed. +-- * @{#PATROLZONE.Patrol}( AIControllable ): The AIControllable reports it is patrolling. This event is called every 30 seconds. +-- * @{#PATROLZONE.RTB}( AIControllable ): The AIControllable will report return to base. +-- * @{#PATROLZONE.End}( AIControllable ): The end of the PATROLZONE process. +-- * @{#PATROLZONE.Dead}( AIControllable ): The AIControllable is dead. The PATROLZONE process will be ended. -- --- ### 1.2.2) PROCESS\_PATROLZONE States: +-- ### 1.2.2) PATROLZONE States: -- -- * **Route**: A new 3D route point is selected and the AIControllable will fly towards that point with the given speed. --- * **Patrol**: The AIControllable is patrolling. This state is set every 30 seconds, so every 30 seconds, a state transition function can be used. +-- * **Patrol**: The AIControllable is patrolling. This state is set every 30 seconds, so every 30 seconds, a state transition method can be used. -- * **RTB**: The AIControllable reports it wants to return to the base. -- * **Dead**: The AIControllable is dead ... -- * **End**: The process has come to an end. -- --- ### 1.2.3) PROCESS\_PATROLZONE state transition functions: +-- ### 1.2.3) PATROLZONE state transition methods: -- -- State transition functions can be set **by the mission designer** customizing or improving the behaviour of the state. --- There are 2 moments when state transition functions will be called by the state machine: +-- There are 2 moments when state transition methods will be called by the state machine: -- -- * **Before** the state transition. --- The state transition function needs to start with the name **OnBefore + the name of the state**. --- If the state transition function returns false, then the processing of the state transition will not be done! +-- The state transition method needs to start with the name **OnBefore + the name of the state**. +-- If the state transition method returns false, then the processing of the state transition will not be done! -- If you want to change the behaviour of the AIControllable at this event, return false, -- but then you'll need to specify your own logic using the AIControllable! -- -- * **After** the state transition. --- The state transition function needs to start with the name **OnAfter + the name of the state**. --- These state transition functions need to provide a return value, which is specified at the function description. +-- The state transition method needs to start with the name **OnAfter + the name of the state**. +-- These state transition methods need to provide a return value, which is specified at the function description. -- --- An example how to manage a state transition for an PROCESS\_PATROLZONE object **Patrol** for the state **RTB**: +-- An example how to manage a state transition for an PATROLZONE object **Patrol** for the state **RTB**: -- -- local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone" ) -- local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup ) @@ -60,46 +60,46 @@ -- local PatrolSpawn = SPAWN:New( "Patrol Group" ) -- local PatrolGroup = PatrolSpawn:Spawn() -- --- local Patrol = PROCESS_PATROLZONE:New( PatrolZone, 3000, 6000, 300, 600 ) +-- local Patrol = PATROLZONE:New( PatrolZone, 3000, 6000, 300, 600 ) -- Patrol:SetControllable( PatrolGroup ) -- Patrol:ManageFuel( 0.2, 60 ) -- --- **OnBefore**RTB( AIGroup ) will be called by the PROCESS\_PATROLZONE object when the AIGroup reports RTB, but **before** the RTB default action is processed by the PROCESS_PATROLZONE object. +-- **OnBefore**RTB( AIGroup ) will be called by the PATROLZONE object when the AIGroup reports RTB, but **before** the RTB default action is processed by the PATROLZONE object. -- --- --- State transition function for the PROCESS\_PATROLZONE **Patrol** object --- -- @param #PROCESS_PATROLZONE self +-- --- State transition function for the PATROLZONE **Patrol** object +-- -- @param #PATROLZONE self -- -- @param Controllable#CONTROLLABLE AIGroup --- -- @return #boolean If false is returned, then the OnAfter state transition function will not be called. +-- -- @return #boolean If false is returned, then the OnAfter state transition method will not be called. -- function Patrol:OnBeforeRTB( AIGroup ) -- AIGroup:MessageToRed( "Returning to base", 20 ) -- end -- --- **OnAfter**RTB( AIGroup ) will be called by the PROCESS\_PATROLZONE object when the AIGroup reports RTB, but **after** the RTB default action was processed by the PROCESS_PATROLZONE object. +-- **OnAfter**RTB( AIGroup ) will be called by the PATROLZONE object when the AIGroup reports RTB, but **after** the RTB default action was processed by the PATROLZONE object. -- --- --- State transition function for the PROCESS\_PATROLZONE **Patrol** object --- -- @param #PROCESS_PATROLZONE self +-- --- State transition function for the PATROLZONE **Patrol** object +-- -- @param #PATROLZONE self -- -- @param Controllable#CONTROLLABLE AIGroup -- -- @return #Controllable#CONTROLLABLE The new AIGroup object that is set to be patrolling the zone. -- function Patrol:OnAfterRTB( AIGroup ) -- return PatrolSpawn:Spawn() -- end -- --- 1.3) Manage the PROCESS\_PATROLZONE parameters: +-- 1.3) Manage the PATROLZONE parameters: -- ------------------------------------------ --- The following methods are available to modify the parameters of a PROCESS\_PATROLZONE object: +-- The following methods are available to modify the parameters of a PATROLZONE object: -- --- * @{#PROCESS_PATROLZONE.SetControllable}(): Set the AIControllable. --- * @{#PROCESS_PATROLZONE.GetControllable}(): Get the AIControllable. --- * @{#PROCESS_PATROLZONE.SetSpeed}(): Set the patrol speed of the AI, for the next patrol. --- * @{#PROCESS_PATROLZONE.SetAltitude}(): Set altitude of the AI, for the next patrol. +-- * @{#PATROLZONE.SetControllable}(): Set the AIControllable. +-- * @{#PATROLZONE.GetControllable}(): Get the AIControllable. +-- * @{#PATROLZONE.SetSpeed}(): Set the patrol speed of the AI, for the next patrol. +-- * @{#PATROLZONE.SetAltitude}(): Set altitude of the AI, for the next patrol. -- --- 1.3) Manage the out of fuel in the PROCESS\_PATROLZONE: +-- 1.3) Manage the out of fuel in the PATROLZONE: -- ---------------------------------------------- -- When the AIControllable is out of fuel, it is required that a new AIControllable is started, before the old AIControllable can return to the home base. -- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. --- When the fuel treshold is reached, the AIControllable will continue for a given time its patrol task in orbit, while a new AIControllable is targetted to the PROCESS\_PATROLZONE. +-- When the fuel treshold is reached, the AIControllable will continue for a given time its patrol task in orbit, while a new AIControllable is targetted to the PATROLZONE. -- Once the time is finished, the old AIControllable will return to the base. --- Use the method @{#PROCESS_PATROLZONE.ManageFuel}() to have this proces in place. +-- Use the method @{#PATROLZONE.ManageFuel}() to have this proces in place. -- -- ==== -- @@ -113,9 +113,7 @@ -- -- Hereby the change log: -- --- 2016-08-17: PROCESS\_PATROLZONE:New( **PatrolSpawn,** PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) replaces PROCESS\_PATROLZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) --- --- 2016-07-01: Initial class and API. +-- 2016-09-01: Initial class and API. -- -- === -- @@ -132,25 +130,25 @@ -- * **FlightControl**: Design & Programming. -- -- --- @module Process_PatrolZone +-- @module Patrol -- State Transition Functions --- OnBefore State Transition Function --- @function [parent=#PROCESS_PATROLZONE] OnBeforeRoute --- @param #PROCESS_PATROLZONE self +-- @function [parent=#PATROLZONE] OnBeforeRoute +-- @param #PATROLZONE self -- @param Controllable#CONTROLLABLE Controllable -- @return #boolean --- OnAfter State Transition Function --- @function [parent=#PROCESS_PATROLZONE] OnAfterRoute --- @param #PROCESS_PATROLZONE self +-- @function [parent=#PATROLZONE] OnAfterRoute +-- @param #PATROLZONE self -- @param Controllable#CONTROLLABLE Controllable ---- PROCESS\_PATROLZONE class --- @type PROCESS_PATROLZONE +--- PATROLZONE class +-- @type PATROLZONE -- @field Controllable#CONTROLLABLE AIControllable The @{Controllable} patrolling. -- @field Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. -- @field DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. @@ -158,26 +156,26 @@ -- @field DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Controllable} in km/h. -- @field DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Controllable} in km/h. -- @extends StateMachine#STATEMACHINE_CONTROLLABLE -PROCESS_PATROLZONE = { - ClassName = "PROCESS_PATROLZONE", +PATROLZONE = { + ClassName = "PATROLZONE", } ---- Creates a new PROCESS\_PATROLZONE object --- @param #PROCESS_PATROLZONE self +--- Creates a new PATROLZONE object +-- @param #PATROLZONE self -- @param Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. -- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. -- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. -- @param DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Controllable} in km/h. -- @param DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Controllable} in km/h. --- @return #PROCESS_PATROLZONE self +-- @return #PATROLZONE self -- @usage --- -- Define a new PROCESS_PATROLZONE Object. This PatrolArea will patrol an AIControllable within PatrolZone between 3000 and 6000 meters, with a variying speed between 600 and 900 km/h. +-- -- Define a new PATROLZONE Object. This PatrolArea will patrol an AIControllable within PatrolZone between 3000 and 6000 meters, with a variying speed between 600 and 900 km/h. -- PatrolZone = ZONE:New( 'PatrolZone' ) -- PatrolSpawn = SPAWN:New( 'Patrol Group' ) --- PatrolArea = PROCESS_PATROLZONE:New( PatrolZone, 3000, 6000, 600, 900 ) -function PROCESS_PATROLZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) +-- PatrolArea = PATROLZONE:New( PatrolZone, 3000, 6000, 600, 900 ) +function PATROLZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) local FSMT = { initial = 'None', @@ -207,11 +205,11 @@ end --- Sets (modifies) the minimum and maximum speed of the patrol. --- @param #PROCESS_PATROLZONE self +-- @param #PATROLZONE self -- @param DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Controllable} in km/h. -- @param DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Controllable} in km/h. --- @return #PROCESS_PATROLZONE self -function PROCESS_PATROLZONE:SetSpeed( PatrolMinSpeed, PatrolMaxSpeed ) +-- @return #PATROLZONE self +function PATROLZONE:SetSpeed( PatrolMinSpeed, PatrolMaxSpeed ) self:F2( { PatrolMinSpeed, PatrolMaxSpeed } ) self.PatrolMinSpeed = PatrolMinSpeed @@ -221,11 +219,11 @@ end --- Sets the floor and ceiling altitude of the patrol. --- @param #PROCESS_PATROLZONE self +-- @param #PATROLZONE self -- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. -- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. --- @return #PROCESS_PATROLZONE self -function PROCESS_PATROLZONE:SetAltitude( PatrolFloorAltitude, PatrolCeilingAltitude ) +-- @return #PATROLZONE self +function PATROLZONE:SetAltitude( PatrolFloorAltitude, PatrolCeilingAltitude ) self:F2( { PatrolFloorAltitude, PatrolCeilingAltitude } ) self.PatrolFloorAltitude = PatrolFloorAltitude @@ -238,7 +236,7 @@ end function _NewPatrolRoute( AIControllable ) AIControllable:T( "NewPatrolRoute" ) - local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolZone#PROCESS_PATROLZONE + local PatrolZone = AIControllable:GetState( AIControllable, "PatrolZone" ) -- PatrolZone#PATROLZONE PatrolZone:__Route( 1 ) end @@ -247,13 +245,13 @@ end --- When the AIControllable is out of fuel, it is required that a new AIControllable is started, before the old AIControllable can return to the home base. -- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. --- When the fuel treshold is reached, the AIControllable will continue for a given time its patrol task in orbit, while a new AIControllable is targetted to the PROCESS\_PATROLZONE. +-- When the fuel treshold is reached, the AIControllable will continue for a given time its patrol task in orbit, while a new AIControllable is targetted to the PATROLZONE. -- Once the time is finished, the old AIControllable will return to the base. --- @param #PROCESS_PATROLZONE self +-- @param #PATROLZONE self -- @param #number PatrolFuelTresholdPercentage The treshold in percentage (between 0 and 1) when the AIControllable is considered to get out of fuel. -- @param #number PatrolOutOfFuelOrbitTime The amount of seconds the out of fuel AIControllable will orbit before returning to the base. --- @return #PROCESS_PATROLZONE self -function PROCESS_PATROLZONE:ManageFuel( PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime ) +-- @return #PATROLZONE self +function PATROLZONE:ManageFuel( PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime ) self.PatrolManageFuel = true self.PatrolFuelTresholdPercentage = PatrolFuelTresholdPercentage @@ -263,9 +261,9 @@ function PROCESS_PATROLZONE:ManageFuel( PatrolFuelTresholdPercentage, PatrolOutO end --- Defines a new patrol route using the @{Process_PatrolZone} parameters and settings. --- @param #PROCESS_PATROLZONE self --- @return #PROCESS_PATROLZONE self -function PROCESS_PATROLZONE:onenterRoute() +-- @param #PATROLZONE self +-- @return #PATROLZONE self +function PATROLZONE:onenterRoute() self:F2() @@ -360,8 +358,8 @@ function PROCESS_PATROLZONE:onenterRoute() end ---- @param #PROCESS_PATROLZONE self -function PROCESS_PATROLZONE:onenterPatrol() +--- @param #PATROLZONE self +function PATROLZONE:onenterPatrol() self:F2() if self.Controllable and self.Controllable:IsAlive() then diff --git a/Moose Development/Moose/Process.lua b/Moose Development/Moose/Fsm/Process.lua similarity index 51% rename from Moose Development/Moose/Process.lua rename to Moose Development/Moose/Fsm/Process.lua index 6c728c301..059c2a2dc 100644 --- a/Moose Development/Moose/Process.lua +++ b/Moose Development/Moose/Fsm/Process.lua @@ -2,17 +2,13 @@ --- The PROCESS class -- @type PROCESS --- @field Scheduler#SCHEDULER ProcessScheduler --- @field Unit#UNIT ProcessUnit -- @field Group#GROUP ProcessGroup -- @field Menu#MENU_GROUP MissionMenu -- @field Task#TASK_BASE Task --- @field StateMachine#STATEMACHINE_TASK Fsm -- @field #string ProcessName --- @extends Base#BASE +-- @extends StateMachine#STATEMACHINE_CONTROLLABLE PROCESS = { - ClassName = "TASK", - ProcessScheduler = nil, + ClassName = "PROCESS", NextEvent = nil, Scores = {}, } @@ -23,66 +19,55 @@ PROCESS = { -- @param Task#TASK_BASE Task -- @param Unit#UNIT ProcessUnit -- @return #PROCESS self -function PROCESS:New( ProcessName, Task, ProcessUnit ) - local self = BASE:Inherit( self, BASE:New() ) +function PROCESS:New( FSMT, ProcessUnit, ProcessName ) + local self = BASE:Inherit( self, STATEMACHINE_CONTROLLABLE:New( FSMT, ProcessUnit ) ) self:F() - self.ProcessUnit = ProcessUnit self.ProcessGroup = ProcessUnit:GetGroup() - self.MissionMenu = Task.Mission:GetMissionMenu( self.ProcessGroup ) - self.Task = Task + --self.MissionMenu = Task.Mission:GetMissionMenu( self.ProcessGroup ) self.ProcessName = ProcessName - self.ProcessScheduler = SCHEDULER:New() - return self end ---- @param #PROCESS self -function PROCESS:NextEvent( NextEvent, ... ) - self:F(self.ProcessName) - self.ProcessScheduler:Schedule( self.Fsm, NextEvent, arg, 1 ) -- This schedules the next event, but only if scheduling is activated. -end - ---- @param #PROCESS self -function PROCESS:StopEvents() - self:F( { "Stop Process ", self.ProcessName } ) - self.ProcessScheduler:Stop() -end - --- Adds a score for the PROCESS to be achieved. -- @param #PROCESS self --- @param #string ProcessStatus is the status of the PROCESS when the score needs to be given. +-- @param Task#TASK_BASE Task The task for which the process needs to account score. +-- @param #string ProcessStatus is the state of the process when the score needs to be given. (See the relevant state descriptions of the process). -- @param #string ScoreText is a text describing the score that is given according the status. -- @param #number Score is a number providing the score of the status. -- @return #PROCESS self -function PROCESS:AddScore( ProcessStatus, ScoreText, Score ) +function PROCESS:AddScore( Task, ProcessStatus, ScoreText, Score ) self:F2( { ProcessStatus, ScoreText, Score } ) self.Scores[ProcessStatus] = self.Scores[ProcessStatus] or {} self.Scores[ProcessStatus].ScoreText = ScoreText self.Scores[ProcessStatus].Score = Score + self.Scores[ProcessStatus].Task = Task + return self end --- StateMachine callback function for a PROCESS -- @param #PROCESS self --- @param StateMachine#STATEMACHINE_PROCESS Fsm +-- @param Controllable#CONTROLLABLE ProcessUnit -- @param #string Event -- @param #string From -- @param #string To -function PROCESS:OnStateChange( Fsm, Event, From, To ) - self:E( { self.ProcessName, Event, From, To, self.ProcessUnit.UnitName } ) +function PROCESS:OnStateChange( ProcessUnit, Event, From, To ) + self:E( { self.ProcessName, Event, From, To, ProcessUnit.UnitName } ) if self:IsTrace() then MESSAGE:New( "Process " .. self.ProcessName .. " : " .. Event .. " changed to state " .. To, 15 ):ToAll() end + -- TODO: This needs to be reworked with a callback functions allocated within Task, and set within the mission script from the Task Objects... if self.Scores[To] then - - local Scoring = self.Task:GetScoring() + + local Task = self.Scores[To].Task + local Scoring = Task:GetScoring() if Scoring then - Scoring:_AddMissionTaskScore( self.Task.Mission, self.ProcessUnit, self.Scores[To].ScoreText, self.Scores[To].Score ) + Scoring:_AddMissionTaskScore( Task.Mission, ProcessUnit, self.Scores[To].ScoreText, self.Scores[To].Score ) end end end diff --git a/Moose Development/Moose/Process_JTAC.lua b/Moose Development/Moose/Fsm/Process_JTAC.lua similarity index 100% rename from Moose Development/Moose/Process_JTAC.lua rename to Moose Development/Moose/Fsm/Process_JTAC.lua diff --git a/Moose Development/Moose/Process_Pickup.lua b/Moose Development/Moose/Fsm/Process_Pickup.lua similarity index 100% rename from Moose Development/Moose/Process_Pickup.lua rename to Moose Development/Moose/Fsm/Process_Pickup.lua diff --git a/Moose Development/Moose/Process_Smoke.lua b/Moose Development/Moose/Fsm/Process_Smoke.lua similarity index 58% rename from Moose Development/Moose/Process_Smoke.lua rename to Moose Development/Moose/Fsm/Process_Smoke.lua index b21b990df..4bcf480f7 100644 --- a/Moose Development/Moose/Process_Smoke.lua +++ b/Moose Development/Moose/Fsm/Process_Smoke.lua @@ -21,13 +21,7 @@ do -- PROCESS_SMOKE_TARGETS -- @return #PROCESS_SMOKE_TARGETS self function PROCESS_SMOKE_TARGETS:New( Task, ProcessUnit, TargetSetUnit, TargetZone ) - -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( "ASSIGN_MENU_ACCEPT", Task, ProcessUnit ) ) -- #PROCESS_SMOKE_TARGETS - - self.TargetSetUnit = TargetSetUnit - self.TargetZone = TargetZone - - self.Fsm = STATEMACHINE_PROCESS:New( self, { + local FSMT = { initial = 'None', events = { { name = 'Start', from = 'None', to = 'AwaitSmoke' }, @@ -44,49 +38,56 @@ do -- PROCESS_SMOKE_TARGETS }, endstates = { }, - } ) + } + + -- Inherits from BASE + local self = BASE:Inherit( self, PROCESS:New( FSMT, ProcessUnit, "SMOKE_TARGETS" ) ) -- #PROCESS_SMOKE_TARGETS + + self.TargetSetUnit = TargetSetUnit + self.TargetZone = TargetZone + return self end - --- StateMachine callback function for a TASK2 + --- StateMachine callback function -- @param #PROCESS_SMOKE_TARGETS self - -- @param StateMachine#STATEMACHINE_TASK Fsm + -- @param Controllable#CONTROLLABLE ProcessUnit -- @param #string Event -- @param #string From -- @param #string To - function PROCESS_SMOKE_TARGETS:OnStart( Fsm, Event, From, To ) - self:E( { Event, From, To, self.ProcessUnit.UnitName} ) + function PROCESS_SMOKE_TARGETS:OnStart( ProcessUnit, Event, From, To ) + self:E( { Event, From, To, ProcessUnit.UnitName} ) self:E("Set smoke menu") - local ProcessGroup = self.ProcessUnit:GetGroup() - local MissionMenu = self.Task.Mission:GetMissionMenu( ProcessGroup ) + local ProcessGroup = ProcessUnit:GetGroup() + --local MissionMenu = self.Task.Mission:GetMissionMenu( ProcessGroup ) local function MenuSmoke( MenuParam ) self:E( MenuParam ) local self = MenuParam.self local SmokeColor = MenuParam.SmokeColor self.SmokeColor = SmokeColor - self:NextEvent( self.Fsm.Next ) + self:__Next( 1 ) end - self.Menu = MENU_GROUP:New( ProcessGroup, "Target acquisition", MissionMenu ) - self.MenuSmokeBlue = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop blue smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Blue } ) - self.MenuSmokeGreen = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop green smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Green } ) - self.MenuSmokeOrange = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop Orange smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Orange } ) - self.MenuSmokeRed = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop Red smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Red } ) - self.MenuSmokeWhite = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop White smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.White } ) + --self.Menu = MENU_GROUP:New( ProcessGroup, "Target acquisition", MissionMenu ) + --self.MenuSmokeBlue = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop blue smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Blue } ) + --self.MenuSmokeGreen = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop green smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Green } ) + --self.MenuSmokeOrange = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop Orange smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Orange } ) + --self.MenuSmokeRed = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop Red smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.Red } ) + --self.MenuSmokeWhite = MENU_GROUP_COMMAND:New( ProcessGroup, "Drop White smoke on targets", self.Menu, MenuSmoke, { self = self, SmokeColor = SMOKECOLOR.White } ) end - --- StateMachine callback function for a TASK2 + --- StateMachine callback function -- @param #PROCESS_SMOKE_TARGETS self - -- @param StateMachine#STATEMACHINE_PROCESS Fsm + -- @param Controllable#CONTROLLABLE ProcessUnit -- @param #string Event -- @param #string From -- @param #string To - function PROCESS_SMOKE_TARGETS:OnSmoking( Fsm, Event, From, To ) - self:E( { Event, From, To, self.ProcessUnit.UnitName} ) + function PROCESS_SMOKE_TARGETS:OnSmoking( ProcessUnit, Event, From, To ) + self:E( { Event, From, To, ProcessUnit.UnitName} ) self.TargetSetUnit:ForEachUnit( --- @param Unit#UNIT SmokeUnit diff --git a/Moose Development/Moose/Fsm/Route.lua b/Moose Development/Moose/Fsm/Route.lua new file mode 100644 index 000000000..69287d868 --- /dev/null +++ b/Moose Development/Moose/Fsm/Route.lua @@ -0,0 +1,233 @@ +--- (SP) (MP) (FSM) Route AI or players through waypoints or to zones. +-- +-- === +-- +-- # @{#ROUTE} FSM class, extends @{Process#PROCESS} +-- +-- ## ROUTE state machine: +-- +-- This class is a state machine: it manages a process that is triggered by events causing state transitions to occur. +-- All derived classes from this class will start with the class name, followed by a \_. See the relevant derived class descriptions below. +-- Each derived class follows exactly the same process, using the same events and following the same state transitions, +-- but will have **different implementation behaviour** upon each event or state transition. +-- +-- ### ROUTE **Events**: +-- +-- These are the events defined in this class: +-- +-- * **Start**: The process is started. The process will go into the Report state. +-- * **Report**: The process is reporting to the player the route to be followed. +-- * **Route**: The process is routing the controllable. +-- * **Pause**: The process is pausing the route of the controllable. +-- * **Arrive**: The controllable has arrived at a route point. +-- * **More**: There are more route points that need to be followed. The process will go back into the Report state. +-- * **NoMore**: There are no more route points that need to be followed. The process will go into the Success state. +-- +-- ### ROUTE **Event methods**: +-- +-- Event methods are available (dynamically allocated by the state machine), that accomodate for state transitions occurring in the process. +-- There are two types of event methods, which you can use to influence the normal mechanisms in the state machine: +-- +-- * **Immediate**: The event method has exactly the name of the event. +-- * **Delayed**: The event method starts with a __ + the name of the event. The first parameter of the event method is a number value, expressing the delay in seconds when the event will be executed. +-- +-- ### ROUTE **States**: +-- +-- * **None**: The controllable did not receive route commands. +-- * **Arrived (*)**: The controllable has arrived at a route point. +-- * **Aborted (*)**: The controllable has aborted the route path. +-- * **Routing**: The controllable is understay to the route point. +-- * **Pausing**: The process is pausing the routing. AI air will go into hover, AI ground will stop moving. Players can fly around. +-- * **Success (*)**: All route points were reached. +-- * **Failed (*)**: The process has failed. +-- +-- (*) End states of the process. +-- +-- ### ROUTE state transition methods: +-- +-- State transition functions can be set **by the mission designer** customizing or improving the behaviour of the state. +-- There are 2 moments when state transition methods will be called by the state machine: +-- +-- * **Before** the state transition. +-- The state transition method needs to start with the name **OnBefore + the name of the state**. +-- If the state transition method returns false, then the processing of the state transition will not be done! +-- If you want to change the behaviour of the AIControllable at this event, return false, +-- but then you'll need to specify your own logic using the AIControllable! +-- +-- * **After** the state transition. +-- The state transition method needs to start with the name **OnAfter + the name of the state**. +-- These state transition methods need to provide a return value, which is specified at the function description. +-- +-- === +-- +-- # 1) @{#ROUTE_ZONE} class, extends @{Route#ROUTE} +-- +-- The ROUTE_ZONE class implements the core functions to route an AIR @{Controllable} player @{Unit} to a @{Zone}. +-- The player receives on perioding times messages with the coordinates of the route to follow. +-- Upon arrival at the zone, a confirmation of arrival is sent, and the process will be ended. +-- +-- # 1.1) ROUTE_ZONE constructor: +-- +-- * @{#ROUTE_ZONE.New}(): Creates a new ROUTE_ZONE object. +-- +-- === +-- +-- @module Route + + +do -- ROUTE + + --- ROUTE class + -- @type ROUTE + -- @field Task#TASK TASK + -- @field Unit#UNIT ProcessUnit + -- @field Zone#ZONE_BASE TargetZone + -- @extends Task2#TASK2 + ROUTE = { + ClassName = "ROUTE", + } + + + --- Creates a new routing state machine. The task will route a CLIENT to a ZONE until the CLIENT is within that ZONE. + -- @param #ROUTE self + -- @return #ROUTE self + function ROUTE:New() + + + local FSMT = { + initial = 'None', + events = { + { name = 'Start', from = 'None', to = 'Routing' }, + { name = 'Report', from = '*', to = 'Reporting' }, + { name = 'Route', from = '*', to = 'Routing' }, + { name = 'Pause', from = 'Routing', to = 'Pausing' }, + { name = 'Abort', from = '*', to = 'Aborted' }, + { name = 'Arrive', from = 'Routing', to = 'Arrived' }, + { name = 'Success', from = 'Arrived', to = 'Success' }, + { name = 'Fail', from = '*', to = 'Failed' }, + }, + endstates = { + 'Arrived', 'Failed', 'Success' + }, + } + + -- Inherits from BASE + local self = BASE:Inherit( self, PROCESS:New( FSMT, "ROUTE" ) ) -- #ROUTE + + self.DisplayInterval = 30 + self.DisplayCount = 30 + self.DisplayMessage = true + self.DisplayTime = 10 -- 10 seconds is the default + self.DisplayCategory = "HQ" -- Route is the default display category + + return self + end + + --- Task Events + + --- StateMachine callback function + -- @param #ROUTE self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ROUTE:onafterStart( ProcessUnit, Event, From, To ) + + self:__Route( 1 ) + end + + --- Check if the controllable has arrived. + -- @param #ROUTE self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @return #boolean + function ROUTE:HasArrived( ProcessUnit ) + return false + end + + --- StateMachine callback function + -- @param #ROUTE self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ROUTE:onafterRoute( ProcessUnit, Event, From, To ) + + if ProcessUnit:IsAlive() then + local HasArrived = self:HasArrived( ProcessUnit ) + if self.DisplayCount >= self.DisplayInterval then + self:T( { HasArrived = HasArrived } ) + if not HasArrived then + self:__Report( 1 ) + end + self.DisplayCount = 1 + else + self.DisplayCount = self.DisplayCount + 1 + end + + self:T( { DisplayCount = self.DisplayCount } ) + self:__Route( 1 ) + + return HasArrived -- if false, then the event will not be executed... + end + + return false + + end + +end -- ROUTE + + + +do -- ROUTE_ZONE + + --- ROUTE_ZONE class + -- @type ROUTE_ZONE + -- @field Task#TASK TASK + -- @field Unit#UNIT ProcessUnit + -- @field Zone#ZONE_BASE TargetZone + -- @extends Task2#TASK2 + ROUTE_ZONE = { + ClassName = "ROUTE_ZONE", + } + + + --- Creates a new routing state machine. The task will route a controllable to a ZONE until the controllable is within that ZONE. + -- @param #ROUTE_ZONE self + -- @param Zone#ZONE_BASE TargetZone + -- @return #ROUTE_ZONE self + function ROUTE_ZONE:New( TargetZone ) + + local self = BASE:Inherit( self, ROUTE:New() ) -- #ROUTE_ZONE + + self.TargetZone = TargetZone + + return self + end + + --- Method override to check if the controllable has arrived. + -- @param #ROUTE self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @return #boolean + function ROUTE_ZONE:HasArrived( ProcessUnit ) + return ProcessUnit:IsInZone( self.TargetZone ) + end + + --- Task Events + + --- StateMachine callback function + -- @param #ROUTE_ZONE self + -- @param Controllable#CONTROLLABLE ProcessUnit + -- @param #string Event + -- @param #string From + -- @param #string To + function ROUTE_ZONE:onenterReporting( ProcessUnit, Event, From, To ) + + local ZoneVec2 = self.TargetZone:GetVec2() + local ZonePointVec2 = POINT_VEC2:New( ZoneVec2.x, ZoneVec2.y ) + local TaskUnitVec2 = ProcessUnit:GetVec2() + local TaskUnitPointVec2 = POINT_VEC2:New( TaskUnitVec2.x, TaskUnitVec2.y ) + local RouteText = ProcessUnit:GetCallsign() .. ": Route to " .. TaskUnitPointVec2:GetBRText( ZonePointVec2 ) .. " km to target." + MESSAGE:New( RouteText, self.DisplayTime, self.DisplayCategory ):ToGroup( ProcessUnit:GetGroup() ) + end + +end -- ROUTE_ZONE diff --git a/Moose Development/Moose/AIBalancer.lua b/Moose Development/Moose/Functional/AIBalancer.lua similarity index 98% rename from Moose Development/Moose/AIBalancer.lua rename to Moose Development/Moose/Functional/AIBalancer.lua index 5ead70e44..fc52ae994 100644 --- a/Moose Development/Moose/AIBalancer.lua +++ b/Moose Development/Moose/Functional/AIBalancer.lua @@ -10,7 +10,7 @@ -- of the underlying AI GROUPS. -- -- The parent class @{StateMachine#STATEMACHINE_SET} manages the functionality to control the Finite State Machine (FSM) --- and calls for each event the state transition functions providing the internal @{StateMachine#STATEMACHINE_SET.Set} object containing the +-- and calls for each event the state transition methods providing the internal @{StateMachine#STATEMACHINE_SET.Set} object containing the -- SET_GROUP and additional event parameters provided during the event. -- -- 1.1) AIBALANCER construction method diff --git a/Moose Development/Moose/AirbasePolice.lua b/Moose Development/Moose/Functional/AirbasePolice.lua similarity index 100% rename from Moose Development/Moose/AirbasePolice.lua rename to Moose Development/Moose/Functional/AirbasePolice.lua diff --git a/Moose Development/Moose/CleanUp.lua b/Moose Development/Moose/Functional/CleanUp.lua similarity index 100% rename from Moose Development/Moose/CleanUp.lua rename to Moose Development/Moose/Functional/CleanUp.lua diff --git a/Moose Development/Moose/Detection.lua b/Moose Development/Moose/Functional/Detection.lua similarity index 100% rename from Moose Development/Moose/Detection.lua rename to Moose Development/Moose/Functional/Detection.lua diff --git a/Moose Development/Moose/Escort.lua b/Moose Development/Moose/Functional/Escort.lua similarity index 100% rename from Moose Development/Moose/Escort.lua rename to Moose Development/Moose/Functional/Escort.lua diff --git a/Moose Development/Moose/MissileTrainer.lua b/Moose Development/Moose/Functional/MissileTrainer.lua similarity index 100% rename from Moose Development/Moose/MissileTrainer.lua rename to Moose Development/Moose/Functional/MissileTrainer.lua diff --git a/Moose Development/Moose/Movement.lua b/Moose Development/Moose/Functional/Movement.lua similarity index 100% rename from Moose Development/Moose/Movement.lua rename to Moose Development/Moose/Functional/Movement.lua diff --git a/Moose Development/Moose/Scoring.lua b/Moose Development/Moose/Functional/Scoring.lua similarity index 100% rename from Moose Development/Moose/Scoring.lua rename to Moose Development/Moose/Functional/Scoring.lua diff --git a/Moose Development/Moose/Sead.lua b/Moose Development/Moose/Functional/Sead.lua similarity index 100% rename from Moose Development/Moose/Sead.lua rename to Moose Development/Moose/Functional/Sead.lua diff --git a/Moose Development/Moose/Spawn.lua b/Moose Development/Moose/Functional/Spawn.lua similarity index 100% rename from Moose Development/Moose/Spawn.lua rename to Moose Development/Moose/Functional/Spawn.lua diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index 76ec1a202..cf72666e0 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -1,61 +1,60 @@ --- The main include file for the MOOSE system. --- Core Routines -Include.File( "Routines" ) -Include.File( "Utils" ) +Include.File( "Utilities/Routines" ) +Include.File( "Utilities/Utils" ) --- Core Classes -Include.File( "Base" ) -Include.File( "Object" ) -Include.File( "Identifiable" ) -Include.File( "Positionable" ) -Include.File( "Controllable" ) -Include.File( "Scheduler" ) -Include.File( "Event" ) -Include.File( "Menu" ) -Include.File( "Group" ) -Include.File( "Unit" ) -Include.File( "Zone" ) -Include.File( "Client" ) -Include.File( "Static" ) -Include.File( "Airbase" ) -Include.File( "Database" ) -Include.File( "Set" ) -Include.File( "Point" ) -Include.File( "Scoring" ) +Include.File( "Core/Base" ) +Include.File( "Core/Scheduler" ) +Include.File( "Core/Event" ) +Include.File( "Core/Menu" ) +Include.File( "Core/Zone" ) +Include.File( "Core/Database" ) +Include.File( "Core/Set" ) +Include.File( "Core/Point" ) +Include.File( "Core/Message" ) +Include.File( "Core/StateMachine" ) + +--- Wrapper Classes +Include.File( "Wrapper/Object" ) +Include.File( "Wrapper/Identifiable" ) +Include.File( "Wrapper/Positionable" ) +Include.File( "Wrapper/Controllable" ) +Include.File( "Wrapper/Group" ) +Include.File( "Wrapper/Unit" ) +Include.File( "Wrapper/Client" ) +Include.File( "Wrapper/Static" ) +Include.File( "Wrapper/Airbase" ) --- Functional Classes -Include.File( "Cargo" ) -Include.File( "Message" ) -Include.File( "Mission" ) -Include.File( "CleanUp" ) -Include.File( "Spawn" ) -Include.File( "Movement" ) -Include.File( "Sead" ) -Include.File( "Escort" ) -Include.File( "MissileTrainer" ) -Include.File( "AirbasePolice" ) -Include.File( "Detection" ) +Include.File( "Functional/Scoring" ) +Include.File( "Functional/CleanUp" ) +Include.File( "Functional/Spawn" ) +Include.File( "Functional/Movement" ) +Include.File( "Functional/Sead" ) +Include.File( "Functional/Escort" ) +Include.File( "Functional/MissileTrainer" ) +Include.File( "Functional/AirbasePolice" ) +Include.File( "Functional/Detection" ) +Include.File( "Functional/AIBalancer" ) + +--- Process Classes +Include.File( "Fsm/Process" ) +Include.File( "Fsm/Assign" ) +Include.File( "Fsm/Route" ) +Include.File( "Fsm/Process_Smoke" ) +Include.File( "Fsm/Account" ) +Include.File( "Fsm/Process_JTAC" ) +Include.File( "Fsm/Patrol" ) +Include.File( "Fsm/Cargo" ) --- Task Handling Classes -Include.File( "DetectionManager" ) - -Include.File( "StateMachine" ) - -Include.File( "Process" ) -Include.File( "Process_Assign" ) -Include.File( "Process_Route" ) -Include.File( "Process_Smoke" ) -Include.File( "Process_Destroy" ) -Include.File( "Process_JTAC" ) -Include.File( "Process_PatrolZone" ) - -Include.File( "Task" ) -Include.File( "Task_SEAD" ) -Include.File( "Task_A2G" ) - ---- AI Set Handling Classes -Include.File( "AIBalancer" ) +Include.File( "Tasking/Mission" ) +Include.File( "Tasking/Task" ) +Include.File( "Tasking/DetectionManager" ) +Include.File( "Tasking/Task_SEAD" ) +Include.File( "Tasking/Task_A2G" ) -- The order of the declarations is important here. Don't touch it. diff --git a/Moose Development/Moose/Process_Assign.lua b/Moose Development/Moose/Process_Assign.lua deleted file mode 100644 index de51b8499..000000000 --- a/Moose Development/Moose/Process_Assign.lua +++ /dev/null @@ -1,185 +0,0 @@ ---- This module contains the PROCESS_ASSIGN classes. --- --- === --- --- 1) @{Task_Assign#TASK_ASSIGN_ACCEPT} class, extends @{Task#TASK_BASE} --- ===================================================================== --- The @{Task_Assign#TASK_ASSIGN_ACCEPT} class accepts by default a task for a player. No player intervention is allowed to reject the task. --- --- 2) @{Task_Assign#TASK_ASSIGN_MENU_ACCEPT} class, extends @{Task#TASK_BASE} --- ========================================================================== --- The @{Task_Assign#TASK_ASSIGN_MENU_ACCEPT} class accepts a task when the player accepts the task through an added menu option. --- This assignment type is useful to conditionally allow the player to choose whether or not he would accept the task. --- The assignment type also allows to reject the task. --- --- --- --- --- --- --- @module Task_Assign --- - - -do -- PROCESS_ASSIGN_ACCEPT - - --- PROCESS_ASSIGN_ACCEPT class - -- @type PROCESS_ASSIGN_ACCEPT - -- @field Task#TASK_BASE Task - -- @field Unit#UNIT ProcessUnit - -- @field Zone#ZONE_BASE TargetZone - -- @extends Task2#TASK2 - PROCESS_ASSIGN_ACCEPT = { - ClassName = "PROCESS_ASSIGN_ACCEPT", - } - - - --- Creates a new task assignment state machine. The process will accept the task by default, no player intervention accepted. - -- @param #PROCESS_ASSIGN_ACCEPT self - -- @param Task#TASK Task - -- @param Unit#UNIT Unit - -- @return #PROCESS_ASSIGN_ACCEPT self - function PROCESS_ASSIGN_ACCEPT:New( Task, ProcessUnit, TaskBriefing ) - - -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( "ASSIGN_ACCEPT", Task, ProcessUnit ) ) -- #PROCESS_ASSIGN_ACCEPT - - self.TaskBriefing = TaskBriefing - - self.Fsm = STATEMACHINE_PROCESS:New( self, { - initial = 'UnAssigned', - events = { - { name = 'Start', from = 'UnAssigned', to = 'Assigned' }, - { name = 'Fail', from = 'UnAssigned', to = 'Failed' }, - }, - callbacks = { - onAssign = self.OnAssign, - }, - endstates = { - 'Assigned', 'Failed' - }, - } ) - - return self - end - - --- StateMachine callback function for a TASK2 - -- @param #PROCESS_ASSIGN_ACCEPT self - -- @param StateMachine#STATEMACHINE_PROCESS Fsm - -- @param #string Event - -- @param #string From - -- @param #string To - function PROCESS_ASSIGN_ACCEPT:OnAssigned( Fsm, Event, From, To ) - self:E( { Event, From, To, self.ProcessUnit.UnitName} ) - - end - -end - - -do -- PROCESS_ASSIGN_MENU_ACCEPT - - --- PROCESS_ASSIGN_MENU_ACCEPT class - -- @type PROCESS_ASSIGN_MENU_ACCEPT - -- @field Task#TASK_BASE Task - -- @field Unit#UNIT ProcessUnit - -- @field Zone#ZONE_BASE TargetZone - -- @extends Task2#TASK2 - PROCESS_ASSIGN_MENU_ACCEPT = { - ClassName = "PROCESS_ASSIGN_MENU_ACCEPT", - } - - - --- Creates a new task assignment state machine. The process will request from the menu if it accepts the task, if not, the unit is removed from the simulator. - -- @param #PROCESS_ASSIGN_MENU_ACCEPT self - -- @param Task#TASK Task - -- @param Unit#UNIT Unit - -- @return #PROCESS_ASSIGN_MENU_ACCEPT self - function PROCESS_ASSIGN_MENU_ACCEPT:New( Task, ProcessUnit, TaskBriefing ) - - -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( "ASSIGN_MENU_ACCEPT", Task, ProcessUnit ) ) -- #PROCESS_ASSIGN_MENU_ACCEPT - - self.TaskBriefing = TaskBriefing - - self.Fsm = STATEMACHINE_PROCESS:New( self, { - initial = 'UnAssigned', - events = { - { name = 'Start', from = 'UnAssigned', to = 'AwaitAccept' }, - { name = 'Assign', from = 'AwaitAccept', to = 'Assigned' }, - { name = 'Reject', from = 'AwaitAccept', to = 'Rejected' }, - { name = 'Fail', from = 'AwaitAccept', to = 'Rejected' }, - }, - callbacks = { - onStart = self.OnStart, - onAssign = self.OnAssign, - onReject = self.OnReject, - }, - endstates = { - 'Assigned', 'Rejected' - }, - } ) - - return self - end - - --- StateMachine callback function for a TASK2 - -- @param #PROCESS_ASSIGN_MENU_ACCEPT self - -- @param StateMachine#STATEMACHINE_TASK Fsm - -- @param #string Event - -- @param #string From - -- @param #string To - function PROCESS_ASSIGN_MENU_ACCEPT:OnStart( Fsm, Event, From, To ) - self:E( { Event, From, To, self.ProcessUnit.UnitName} ) - - MESSAGE:New( self.TaskBriefing .. "\nAccess the radio menu to accept the task. You have 30 seconds or the assignment will be cancelled.", 30, "Assignment" ):ToGroup( self.ProcessUnit:GetGroup() ) - self.MenuText = self.Task.TaskName - - local ProcessGroup = self.ProcessUnit:GetGroup() - self.Menu = MENU_GROUP:New( ProcessGroup, "Task " .. self.MenuText .. " acceptance" ) - self.MenuAcceptTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Accept task " .. self.MenuText, self.Menu, self.MenuAssign, self ) - self.MenuRejectTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Reject task " .. self.MenuText, self.Menu, self.MenuReject, self ) - end - - --- Menu function. - -- @param #PROCESS_ASSIGN_MENU_ACCEPT self - function PROCESS_ASSIGN_MENU_ACCEPT:MenuAssign() - self:E( ) - - self:NextEvent( self.Fsm.Assign ) - end - - --- Menu function. - -- @param #PROCESS_ASSIGN_MENU_ACCEPT self - function PROCESS_ASSIGN_MENU_ACCEPT:MenuReject() - self:E( ) - - self:NextEvent( self.Fsm.Reject ) - end - - --- StateMachine callback function for a TASK2 - -- @param #PROCESS_ASSIGN_MENU_ACCEPT self - -- @param StateMachine#STATEMACHINE_PROCESS Fsm - -- @param #string Event - -- @param #string From - -- @param #string To - function PROCESS_ASSIGN_MENU_ACCEPT:OnAssign( Fsm, Event, From, To ) - self:E( { Event, From, To, self.ProcessUnit.UnitName} ) - - self.Menu:Remove() - end - - --- StateMachine callback function for a TASK2 - -- @param #PROCESS_ASSIGN_MENU_ACCEPT self - -- @param StateMachine#STATEMACHINE_PROCESS Fsm - -- @param #string Event - -- @param #string From - -- @param #string To - function PROCESS_ASSIGN_MENU_ACCEPT:OnReject( Fsm, Event, From, To ) - self:E( { Event, From, To, self.ProcessUnit.UnitName} ) - - self.Menu:Remove() - self.Task:UnAssignFromUnit( self.ProcessUnit ) - self.ProcessUnit:Destroy() - end -end diff --git a/Moose Development/Moose/Process_Destroy.lua b/Moose Development/Moose/Process_Destroy.lua deleted file mode 100644 index 3a8c83113..000000000 --- a/Moose Development/Moose/Process_Destroy.lua +++ /dev/null @@ -1,180 +0,0 @@ ---- @module Process_Destroy - ---- PROCESS_DESTROY class --- @type PROCESS_DESTROY --- @field Unit#UNIT ProcessUnit --- @field Set#SET_UNIT TargetSetUnit --- @extends Process#PROCESS -PROCESS_DESTROY = { - ClassName = "PROCESS_DESTROY", - Fsm = {}, - TargetSetUnit = nil, -} - - ---- Creates a new DESTROY process. --- @param #PROCESS_DESTROY self --- @param Task#TASK Task --- @param Unit#UNIT ProcessUnit --- @param Set#SET_UNIT TargetSetUnit --- @return #PROCESS_DESTROY self -function PROCESS_DESTROY:New( Task, ProcessName, ProcessUnit, TargetSetUnit ) - - -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( ProcessName, Task, ProcessUnit ) ) -- #PROCESS_DESTROY - - self.TargetSetUnit = TargetSetUnit - - self.DisplayInterval = 30 - self.DisplayCount = 30 - self.DisplayMessage = true - self.DisplayTime = 10 -- 10 seconds is the default - self.DisplayCategory = "HQ" -- Targets is the default display category - - self.Fsm = STATEMACHINE_PROCESS:New( self, { - initial = 'Assigned', - events = { - { name = 'Start', from = 'Assigned', to = 'Waiting' }, - { name = 'Start', from = 'Waiting', to = 'Waiting' }, - { name = 'HitTarget', from = 'Waiting', to = 'Destroy' }, - { name = 'MoreTargets', from = 'Destroy', to = 'Waiting' }, - { name = 'Destroyed', from = 'Destroy', to = 'Success' }, - { name = 'Fail', from = 'Assigned', to = 'Failed' }, - { name = 'Fail', from = 'Waiting', to = 'Failed' }, - { name = 'Fail', from = 'Destroy', to = 'Failed' }, - }, - callbacks = { - onStart = self.OnStart, - onWaiting = self.OnWaiting, - onHitTarget = self.OnHitTarget, - onMoreTargets = self.OnMoreTargets, - onDestroyed = self.OnDestroyed, - onKilled = self.OnKilled, - }, - endstates = { 'Success', 'Failed' } - } ) - - - _EVENTDISPATCHER:OnDead( self.EventDead, self ) - - return self -end - ---- Process Events - ---- StateMachine callback function for a PROCESS --- @param #PROCESS_DESTROY self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To -function PROCESS_DESTROY:OnStart( Fsm, Event, From, To ) - - self:NextEvent( Fsm.Start ) -end - ---- StateMachine callback function for a PROCESS --- @param #PROCESS_DESTROY self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To -function PROCESS_DESTROY:OnWaiting( Fsm, Event, From, To ) - - local TaskGroup = self.ProcessUnit:GetGroup() - if self.DisplayCount >= self.DisplayInterval then - MESSAGE:New( "Your group with assigned " .. self.Task:GetName() .. " task has " .. self.TargetSetUnit:GetUnitTypesText() .. " targets left to be destroyed.", 5, "HQ" ):ToGroup( TaskGroup ) - self.DisplayCount = 1 - else - self.DisplayCount = self.DisplayCount + 1 - end - - return true -- Process always the event. - -end - - ---- StateMachine callback function for a PROCESS --- @param #PROCESS_DESTROY self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To --- @param Event#EVENTDATA Event -function PROCESS_DESTROY:OnHitTarget( Fsm, Event, From, To, Event ) - - - self.TargetSetUnit:Flush() - - if self.TargetSetUnit:FindUnit( Event.IniUnitName ) then - self.TargetSetUnit:RemoveUnitsByName( Event.IniUnitName ) - local TaskGroup = self.ProcessUnit:GetGroup() - MESSAGE:New( "You hit a target. Your group with assigned " .. self.Task:GetName() .. " task has " .. self.TargetSetUnit:Count() .. " targets ( " .. self.TargetSetUnit:GetUnitTypesText() .. " ) left to be destroyed.", 15, "HQ" ):ToGroup( TaskGroup ) - end - - - if self.TargetSetUnit:Count() > 0 then - self:NextEvent( Fsm.MoreTargets ) - else - self:NextEvent( Fsm.Destroyed ) - end -end - ---- StateMachine callback function for a PROCESS --- @param #PROCESS_DESTROY self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To -function PROCESS_DESTROY:OnMoreTargets( Fsm, Event, From, To ) - - -end - ---- StateMachine callback function for a PROCESS --- @param #PROCESS_DESTROY self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To --- @param Event#EVENTDATA DCSEvent -function PROCESS_DESTROY:OnKilled( Fsm, Event, From, To ) - - self:NextEvent( Fsm.Restart ) - -end - ---- StateMachine callback function for a PROCESS --- @param #PROCESS_DESTROY self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To -function PROCESS_DESTROY:OnRestart( Fsm, Event, From, To ) - - self:NextEvent( Fsm.Menu ) - -end - ---- StateMachine callback function for a PROCESS --- @param #PROCESS_DESTROY self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To -function PROCESS_DESTROY:OnDestroyed( Fsm, Event, From, To ) - -end - ---- DCS Events - ---- @param #PROCESS_DESTROY self --- @param Event#EVENTDATA Event -function PROCESS_DESTROY:EventDead( Event ) - - if Event.IniDCSUnit then - self:NextEvent( self.Fsm.HitTarget, Event ) - end -end - - diff --git a/Moose Development/Moose/Process_Route.lua b/Moose Development/Moose/Process_Route.lua deleted file mode 100644 index fd240a700..000000000 --- a/Moose Development/Moose/Process_Route.lua +++ /dev/null @@ -1,86 +0,0 @@ ---- @module Task_Route - ---- PROCESS_ROUTE class --- @type PROCESS_ROUTE --- @field Task#TASK TASK --- @field Unit#UNIT ProcessUnit --- @field Zone#ZONE_BASE TargetZone --- @extends Task2#TASK2 -PROCESS_ROUTE = { - ClassName = "PROCESS_ROUTE", -} - - ---- Creates a new routing state machine. The task will route a CLIENT to a ZONE until the CLIENT is within that ZONE. --- @param #PROCESS_ROUTE self --- @param Task#TASK Task --- @param Unit#UNIT Unit --- @return #PROCESS_ROUTE self -function PROCESS_ROUTE:New( Task, ProcessUnit, TargetZone ) - - -- Inherits from BASE - local self = BASE:Inherit( self, PROCESS:New( "ROUTE", Task, ProcessUnit ) ) -- #PROCESS_ROUTE - - self.TargetZone = TargetZone - self.DisplayInterval = 30 - self.DisplayCount = 30 - self.DisplayMessage = true - self.DisplayTime = 10 -- 10 seconds is the default - self.DisplayCategory = "HQ" -- Route is the default display category - - self.Fsm = STATEMACHINE_PROCESS:New( self, { - initial = 'UnArrived', - events = { - { name = 'Start', from = 'UnArrived', to = 'UnArrived' }, - { name = 'Fail', from = 'UnArrived', to = 'Failed' }, - }, - callbacks = { - onleaveUnArrived = self.OnLeaveUnArrived, - onFail = self.OnFail, - }, - endstates = { - 'Arrived', 'Failed' - }, - } ) - - return self -end - ---- Task Events - ---- StateMachine callback function for a TASK2 --- @param #PROCESS_ROUTE self --- @param StateMachine#STATEMACHINE_PROCESS Fsm --- @param #string Event --- @param #string From --- @param #string To -function PROCESS_ROUTE:OnLeaveUnArrived( Fsm, Event, From, To ) - - if self.ProcessUnit:IsAlive() then - local IsInZone = self.ProcessUnit:IsInZone( self.TargetZone ) - - if self.DisplayCount >= self.DisplayInterval then - if not IsInZone then - local ZoneVec2 = self.TargetZone:GetVec2() - local ZonePointVec2 = POINT_VEC2:New( ZoneVec2.x, ZoneVec2.y ) - local TaskUnitVec2 = self.ProcessUnit:GetVec2() - local TaskUnitPointVec2 = POINT_VEC2:New( TaskUnitVec2.x, TaskUnitVec2.y ) - local RouteText = self.ProcessUnit:GetCallsign() .. ": Route to " .. TaskUnitPointVec2:GetBRText( ZonePointVec2 ) .. " km to target." - MESSAGE:New( RouteText, self.DisplayTime, self.DisplayCategory ):ToGroup( self.ProcessUnit:GetGroup() ) - end - self.DisplayCount = 1 - else - self.DisplayCount = self.DisplayCount + 1 - end - - --if not IsInZone then - self:NextEvent( Fsm.Start ) - --end - - return IsInZone -- if false, then the event will not be executed... - end - - return false - -end - diff --git a/Moose Development/Moose/DetectionManager.lua b/Moose Development/Moose/Tasking/DetectionManager.lua similarity index 100% rename from Moose Development/Moose/DetectionManager.lua rename to Moose Development/Moose/Tasking/DetectionManager.lua diff --git a/Moose Development/Moose/Mission.lua b/Moose Development/Moose/Tasking/Mission.lua similarity index 100% rename from Moose Development/Moose/Mission.lua rename to Moose Development/Moose/Tasking/Mission.lua diff --git a/Moose Development/Moose/Task.lua b/Moose Development/Moose/Tasking/Task.lua similarity index 91% rename from Moose Development/Moose/Task.lua rename to Moose Development/Moose/Tasking/Task.lua index aa4b3521d..976932395 100644 --- a/Moose Development/Moose/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -59,14 +59,14 @@ TASK_BASE = { ClassName = "TASK_BASE", TaskScheduler = nil, - Processes = {}, + ProcessClasses = {}, -- The container of the Process classes that will be used to create and assign new processes for the task to ProcessUnits. + Processes = {}, -- The container of actual process objects instantiated and assigned to ProcessUnits. Players = nil, Scores = {}, Menu = {}, SetGroup = nil, } - --- Instantiates a new TASK_BASE. Should never be used. Interface Class. -- @param #TASK_BASE self -- @param Mission#MISSION The mission wherein the Task is registered. @@ -113,6 +113,7 @@ end --- Assign the @{Task}to a @{Group}. -- @param #TASK_BASE self -- @param Group#GROUP TaskGroup +-- @return #TASK_BASE function TASK_BASE:AssignToGroup( TaskGroup ) self:F2( TaskGroup:GetName() ) @@ -131,6 +132,8 @@ function TASK_BASE:AssignToGroup( TaskGroup ) self:AssignToUnit( TaskUnit ) end end + + return self end --- Send the briefng message of the @{Task} to the assigned @{Group}s. @@ -401,19 +404,61 @@ function TASK_BASE:GetTaskName() end ---- Add Process to @{Task} with key @{Unit}. +--- This is the key worker function for the class. Instantiate a new Process based on the ProcessName to @{Task} and assign it to the ProcessUnit. -- @param #TASK_BASE self --- @param Unit#UNIT TaskUnit --- @return #TASK_BASE self -function TASK_BASE:AddProcess( TaskUnit, Process ) - local TaskUnitName = TaskUnit:GetName() +-- @param Unit#UNIT ProcessUnit The unit to which the process should be assigned. +-- @param #string ProcessName The name of the Process. +-- @return Process#PROCESS The Process that was added. +function TASK_BASE:AssignProcess( ProcessUnit, ProcessName ) + self:F( { ProcessName } ) + local ProcessUnitName = ProcessUnit:GetName() + + -- Create the Process instance base on the ProcessClasses collection assigned to the Task + local ProcessClass, ProcessArguments + ProcessClass, ProcessArguments = self:GetProcessClass( ProcessName ) + + local Process = ProcessClass:New( unpack( ProcessArguments ) ) -- Process#PROCESS + Process:SetControllable( ProcessUnit ) + self.Processes = self.Processes or {} - self.Processes[TaskUnitName] = self.Processes[TaskUnitName] or {} - self.Processes[TaskUnitName][#self.Processes[TaskUnitName]+1] = Process + self.Processes[ProcessUnitName] = self.Processes[ProcessUnitName] or {} + + self.Processes[ProcessUnitName][ProcessName] = Process + return Process end +--- Get the default or currently assigned @{Process} class with key ProcessName. +-- @param #TASK_BASE self +-- @param #string ProcessName +-- @return Process#PROCESS +-- @return #table +function TASK_BASE:GetProcessClass( ProcessName ) + + local ProcessClass = self.ProcessClasses[ProcessName].Class + local ProcessArguments = self.ProcessClasses[ProcessName].Arguments + + return ProcessClass, ProcessArguments +end + + +--- Set the Process default class with key ProcessName providing the ProcessClass and the constructor initialization parameters when it is assigned to a Unit by the task. +-- @param #TASK_BASE self +-- @param #string ProcessName +-- @param Process#PROCESS ProcessClass +-- @param #table ... The parameters for the New() constructor of the ProcessClass, when the Task is assigning a new Process to the Unit. +-- @return Process#PROCESS +function TASK_BASE:SetProcessClass( ProcessName, ProcessClass, ... ) + + self.ProcessClasses[ProcessName] = self.ProcessClasses[ProcessName] or {} + self.ProcessClasses[ProcessName].Class = ProcessClass + self.ProcessClasses[ProcessName].Arguments = ... + + return ProcessClass +end + + --- Remove Processes from @{Task} with key @{Unit} -- @param #TASK_BASE self -- @param #string TaskUnitName @@ -749,6 +794,7 @@ function TASK_BASE:AddScore( TaskStatus, ScoreText, Score ) return self end + --- StateMachine callback function for a TASK -- @param #TASK_BASE self -- @param Unit#UNIT TaskUnit diff --git a/Moose Development/Moose/TaskMenu.lua b/Moose Development/Moose/Tasking/TaskMenu.lua similarity index 100% rename from Moose Development/Moose/TaskMenu.lua rename to Moose Development/Moose/Tasking/TaskMenu.lua diff --git a/Moose Development/Moose/Task_A2G.lua b/Moose Development/Moose/Tasking/Task_A2G.lua similarity index 99% rename from Moose Development/Moose/Task_A2G.lua rename to Moose Development/Moose/Tasking/Task_A2G.lua index e30cc205b..ec1a94e01 100644 --- a/Moose Development/Moose/Task_A2G.lua +++ b/Moose Development/Moose/Tasking/Task_A2G.lua @@ -1,4 +1,4 @@ ---- This module contains the TASK_A2G classes. +--- (AI) (SP) (MP) Tasking for Air to Ground Processes. -- -- 1) @{#TASK_A2G} class, extends @{Task#TASK_BASE} -- ================================================= diff --git a/Moose Development/Moose/Task_AIBalancer.lua b/Moose Development/Moose/Tasking/Task_AIBalancer.lua similarity index 100% rename from Moose Development/Moose/Task_AIBalancer.lua rename to Moose Development/Moose/Tasking/Task_AIBalancer.lua diff --git a/Moose Development/Moose/Task_Pickup.lua b/Moose Development/Moose/Tasking/Task_Pickup.lua similarity index 100% rename from Moose Development/Moose/Task_Pickup.lua rename to Moose Development/Moose/Tasking/Task_Pickup.lua diff --git a/Moose Development/Moose/Task_SEAD.lua b/Moose Development/Moose/Tasking/Task_SEAD.lua similarity index 69% rename from Moose Development/Moose/Task_SEAD.lua rename to Moose Development/Moose/Tasking/Task_SEAD.lua index 9cba080f9..301a7be40 100644 --- a/Moose Development/Moose/Task_SEAD.lua +++ b/Moose Development/Moose/Tasking/Task_SEAD.lua @@ -19,6 +19,7 @@ -- @module Task_SEAD + do -- TASK_SEAD --- The TASK_SEAD class @@ -43,6 +44,18 @@ do -- TASK_SEAD self.TargetSetUnit = TargetSetUnit self.TargetZone = TargetZone + + -- ASSIGN_ACCEPT:New(TaskBriefing) + self:SetProcessClass( "ASSIGN", ASSIGN_ACCEPT, self.TaskBriefing ) + + -- ROUTE_ZONE:New(TargetZone) + self:SetProcessClass( "ROUTE", ROUTE_ZONE, self.TargetZone ) + + -- ACCOUNT_DEADS:New(TargetSetUnit,TaskName) + self:SetProcessClass( "ACCOUNT", ACCOUNT_DEADS, self.TargetSetUnit, "SEAD" ) + + -- SMOKE_TARGETS_ZONE:New( self.TargetSetUnit, self.TargetZone ) + --self:SetProcessClass( "SMOKE", SMOKE_TARGETS_ZONE, self.TargetSetUnit, self.TargetZone ) _EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventPlayerLeaveUnit, self ) _EVENTDISPATCHER:OnDead( self._EventDead, self ) @@ -71,38 +84,31 @@ do -- TASK_SEAD function TASK_SEAD:AssignToUnit( TaskUnit ) self:F( TaskUnit:GetName() ) - local ProcessAssign = self:AddProcess( TaskUnit, PROCESS_ASSIGN_ACCEPT:New( self, TaskUnit, self.TaskBriefing ) ) - local ProcessRoute = self:AddProcess( TaskUnit, PROCESS_ROUTE:New( self, TaskUnit, self.TargetZone ) ) - local ProcessSEAD = self:AddProcess( TaskUnit, PROCESS_DESTROY:New( self, "SEAD", TaskUnit, self.TargetSetUnit ) ) - local ProcessSmoke = self:AddProcess( TaskUnit, PROCESS_SMOKE_TARGETS:New( self, TaskUnit, self.TargetSetUnit, self.TargetZone ) ) + local ProcessAssign = self:AssignProcess( TaskUnit, "ASSIGN" ) + local ProcessRoute = self:AssignProcess( TaskUnit, "ROUTE" ) + local ProcessSEAD = self:AssignProcess( TaskUnit, "ACCOUNT" ) + --local ProcessSmoke = self:AssignProcess( TaskUnit, "SMOKE" ) - local Process = self:AddStateMachine( TaskUnit, STATEMACHINE_TASK:New( self, TaskUnit, { + local FSMT = { initial = 'None', events = { - { name = 'Next', from = 'None', to = 'Planned' }, + { name = 'Next', from = 'None', to = 'Planned' }, { name = 'Next', from = 'Planned', to = 'Assigned' }, { name = 'Reject', from = 'Planned', to = 'Rejected' }, { name = 'Next', from = 'Assigned', to = 'Success' }, { name = 'Fail', from = 'Assigned', to = 'Failed' }, { name = 'Fail', from = 'Arrived', to = 'Failed' } }, - callbacks = { - onNext = self.OnNext, - onRemove = self.OnRemove, - }, subs = { - Assign = { onstateparent = 'Planned', oneventparent = 'Next', fsm = ProcessAssign.Fsm, event = 'Start', returnevents = { 'Next', 'Reject' } }, - Route = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessRoute.Fsm, event = 'Start' }, - Sead = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessSEAD.Fsm, event = 'Start', returnevents = { 'Next' } }, - Smoke = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessSmoke.Fsm, event = 'Start', } + Assign = { onstateparent = 'Planned', oneventparent = 'Next', fsm = ProcessAssign, event = 'Start', returnevents = { 'Next', 'Reject' } }, + Route = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessRoute, event = 'Start' }, + Sead = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessSEAD, event = 'Start', returnevents = { 'Next' } }, + --Smoke = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessSmoke, event = 'Start', } } - } ) ) - - ProcessRoute:AddScore( "Failed", "failed to destroy a radar", -100 ) - ProcessSEAD:AddScore( "Destroy", "destroyed a radar", 25 ) - ProcessSEAD:AddScore( "Failed", "failed to destroy a radar", -100 ) - self:AddScore( "Success", "Destroyed all target radars", 250 ) + } + local Process = self:AddStateMachine( TaskUnit, STATEMACHINE_TASK:New( FSMT, self, TaskUnit ) ) + Process:Next() return self @@ -115,32 +121,15 @@ do -- TASK_SEAD -- @param #string From -- @param #string To -- @param Event#EVENTDATA Event - function TASK_SEAD:OnNext( Fsm, Event, From, To ) + function TASK_SEAD:onafterNext( Fsm, Event, From, To ) self:SetState( self, "State", To ) end - --- @param #TASK_SEAD self function TASK_SEAD:GetPlannedMenuText() return self:GetStateString() .. " - " .. self:GetTaskName() .. " ( " .. self.TargetSetUnit:GetUnitTypesText() .. " )" end - --- @param #TASK_SEAD self - function TASK_SEAD:_Schedule() - self:F2() - - self.TaskScheduler = SCHEDULER:New( self, _Scheduler, {}, 15, 15 ) - return self - end - - - --- @param #TASK_SEAD self - function TASK_SEAD._Scheduler() - self:F2() - - return true - end - end diff --git a/Moose Development/Moose/Routines.lua b/Moose Development/Moose/Utilities/Routines.lua similarity index 100% rename from Moose Development/Moose/Routines.lua rename to Moose Development/Moose/Utilities/Routines.lua diff --git a/Moose Development/Moose/StatHandler.lua b/Moose Development/Moose/Utilities/StatHandler.lua similarity index 100% rename from Moose Development/Moose/StatHandler.lua rename to Moose Development/Moose/Utilities/StatHandler.lua diff --git a/Moose Development/Moose/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua similarity index 100% rename from Moose Development/Moose/Utils.lua rename to Moose Development/Moose/Utilities/Utils.lua diff --git a/Moose Development/Moose/Airbase.lua b/Moose Development/Moose/Wrapper/Airbase.lua similarity index 100% rename from Moose Development/Moose/Airbase.lua rename to Moose Development/Moose/Wrapper/Airbase.lua diff --git a/Moose Development/Moose/Client.lua b/Moose Development/Moose/Wrapper/Client.lua similarity index 100% rename from Moose Development/Moose/Client.lua rename to Moose Development/Moose/Wrapper/Client.lua diff --git a/Moose Development/Moose/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua similarity index 100% rename from Moose Development/Moose/Controllable.lua rename to Moose Development/Moose/Wrapper/Controllable.lua diff --git a/Moose Development/Moose/Group.lua b/Moose Development/Moose/Wrapper/Group.lua similarity index 100% rename from Moose Development/Moose/Group.lua rename to Moose Development/Moose/Wrapper/Group.lua diff --git a/Moose Development/Moose/Identifiable.lua b/Moose Development/Moose/Wrapper/Identifiable.lua similarity index 100% rename from Moose Development/Moose/Identifiable.lua rename to Moose Development/Moose/Wrapper/Identifiable.lua diff --git a/Moose Development/Moose/Object.lua b/Moose Development/Moose/Wrapper/Object.lua similarity index 100% rename from Moose Development/Moose/Object.lua rename to Moose Development/Moose/Wrapper/Object.lua diff --git a/Moose Development/Moose/Positionable.lua b/Moose Development/Moose/Wrapper/Positionable.lua similarity index 100% rename from Moose Development/Moose/Positionable.lua rename to Moose Development/Moose/Wrapper/Positionable.lua diff --git a/Moose Development/Moose/Static.lua b/Moose Development/Moose/Wrapper/Static.lua similarity index 100% rename from Moose Development/Moose/Static.lua rename to Moose Development/Moose/Wrapper/Static.lua diff --git a/Moose Development/Moose/Unit.lua b/Moose Development/Moose/Wrapper/Unit.lua similarity index 100% rename from Moose Development/Moose/Unit.lua rename to Moose Development/Moose/Wrapper/Unit.lua diff --git a/Moose Development/ReleaseNotes.txt b/Moose Development/ReleaseNotes.txt index e4d7d8a73..8872451a8 100644 --- a/Moose Development/ReleaseNotes.txt +++ b/Moose Development/ReleaseNotes.txt @@ -1,3 +1,13 @@ +2016-09-01 + + - Expanded the CARGO classes and implemented the CARGO_GROUPED classes. + -- Finished the correct state machine implementation to Board, UnBoard, Load, UnLoad cargo to and from carriers. + -- Created the CARGO_GROUPED class, which groups CARGO_UNITs into one group. The cargo behaves like groups, but can be transported by carriers. + -- Documented CARGO event functions, state transition functions + overall documentation. + -- Updated test missions located in the directory: Moose_Test_CARGO + + - Expanded the PROCESS_PATROLZONE class. + 2016-08-21 - Made a new STATEMACHINE_CONTROLLABLE object, which models a base state machine class to be inherited by AI controllable classes. @@ -8,9 +18,9 @@ -- Added immediate and delayed event processing as part of the STATEMACHINE_CONTROLLABLE class. --- Events that start with __Event are processed with a delay. The delay is given in seconds as a parameter. - - Created a new AI_PATROLZONE class, which inherites STATEMACHINE_CONTROLLABLE. + - Created a new PROCESS_PATROLZONE class, which inherites STATEMACHINE_CONTROLLABLE. -- This class implements a complete new revamped patrol zone AI pattern. - -- Created a new test directory: Moose_Test_AI_PATROLZONE with test missions. + -- Created a new test directory: Moose_Test_PROCESS_PATROLZONE with test missions. 2016-08-15 diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index 12ac8ffe3..833a726be 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160831_0559' ) +env.info( 'Moose Generation Timestamp: 20160902_0901' ) local base = _G diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 12ac8ffe3..833a726be 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160831_0559' ) +env.info( 'Moose Generation Timestamp: 20160902_0901' ) local base = _G diff --git a/Moose Test Missions/MOOSE_Test_Template.miz b/Moose Test Missions/MOOSE_Test_Template.miz index 101381aed4171c68228e8d5956655918242f47ca..4e6f8b3fca665dd8578e5e6d2d2c9fbbdb19d0ad 100644 GIT binary patch delta 460 zcmV;-0W|304lPCcre?3pbFc6&^DgWW*rAdeMV?d%(hth_s z5^X9H28620BsPuY*p=h3ApSeHTfl{YU~zQ5ckkVE?g)R5N=`)p-CnN;t0YNdnBT9b ztK|%q>)FlSJccxz-ezF(T?oPVoT8NwHGu`;L}FD64p~`|TH)$2hS6YnF}NIzcKR3| ze=B{Di5xR{#JXw%yM?)0@|-n=iCaL{}5&|?64J+)!7?IO2rG^LnLTr7r z+W7y+0~iHT{N)`wlBh;eiXlyjBf?Ex4Md@i>z>Ckam|4M54p&R^T^eC$lTo;w@!22e`_1QY-Q00;m8v&sUl z5(zU%B1tXmTby*0ffYLju4kp#=LD0&6+8jGlm8Vo0sNCR7Bm4*lW7(m2Hz9_0002Y C(a_ug delta 460 zcmV;-0WeFcdy-$^OGjFK!$LXfR5`0bvpn zVZ_aYF@)5ul_gzEy3UL7zuOknq0{K4%j^5z_r0%skMQTP;8gf<(&=a)%n(5sHen`2K&2?5nF?1@JV{)xu-e)doxNYGMQ~LS zseJ1_WCG_@^Z0F*ZCW9#F@nI7YU74+e+0Z>?*?_(QVIz^nuwa^_F;_3;g?dwgMJ~l zzFB4b|KkCS0?GgK4vr+MmK>Jm0sfOR7Bm4-lV=tk2H_L{00018 C>e%l9 diff --git a/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.lua b/Moose Test Missions/Moose_Test_AI_Balancer/Moose_Test_AIBALANCER.lua similarity index 100% rename from Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.lua rename to Moose Test Missions/Moose_Test_AI_Balancer/Moose_Test_AIBALANCER.lua diff --git a/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.miz b/Moose Test Missions/Moose_Test_AI_Balancer/Moose_Test_AIBALANCER.miz similarity index 94% rename from Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.miz rename to Moose Test Missions/Moose_Test_AI_Balancer/Moose_Test_AIBALANCER.miz index ca3fc42bcbe3e3828c25b14d519c4540a895002e..adf0909b946b3fe26a217963f9990317cd0a32e4 100644 GIT binary patch delta 657 zcmccriSh3z#to%Pn>(yRI5>?xlst9cM9(Ri{MJmderm9-|6v1xxzd{dA3j;?+5RQj zVNp=~rM6WF2!`-;` z?5kBglV{vtzkKymo@uXdp1o_+W-|L;TEeGTj)ULlESf4{+Q|CQB`K7PFEVms)WcT> zZ5IMrgkkhX1@02mFII=5?X?N?+s84fDTRY?9=34C1o4Iod?|I%*hUG1L z`D@n)2R(3V>|QT_E+9If`jF|CV!k4SXx)b`Y`M`EO^(+-9@A1A`w^T%k z$wZh}`^{mAiI?@4wz2&O4&%o40Yf1b)(OCycjIcgL({A1x+ZsB`*j@H(74b}s(* zyP7vXd*)e7e`X8tW@Zs#U|`_bJkjDi5bRJ9n@CQ!DHoW$zf6khcKqbqWjd36 g%B7fsiza83YfM(Glw!O$*``vG>n6~NeWf5{0Z`2kdH?_b delta 648 zcmezSiShm?#to%Pn_tFP2yL#6D`1@byFy@cVNo?-Sz(4s6(a*fIx_=<7{la*a*6uh zU`PK$1|oL(C;uHjt;fU1Y$Bohu)%<{)8NswgAz`!uAQ2+PBr%V(I5A7cWW}IA6k0$ z_3wM%zgE{CeRKG{#6!7~s=ab+4jFJI{M$5d-8AEfb?N=*KQk<<_$AVOu6zM^UvIyw z_Bn1I?lT)4j2`nm(mCGh@-vYqy!qkT2j8l8NZ0qcm4_}(4xXpLmG2Sio3Q~{Fcc5?5|MWH`cy;ww9#V#4&t34IyCDMOA>gJ-S zmxXq&YHtgvmkjR_PLTX-nvtlugW>$#kCT=yGmKhN7qpgjty)&n-35!0F&KWb@CTXl9#n&rN#%|%RkQ##%#bnlbgvTyao`uy^^FXw%CJ--~f<=mV{ zrdi9h`)cibn+kOTnw-Ui9yN+AooRpPTY23-pAGZO>&}=5cr$O#()r6cd1slx=2j&a zj?Kw>Vg{Sv6rE+B{4!pEhXDwHu>}O_N|Vo5=uFP5kYc)TGP$cl6BwmZO#Wt*^NS=V z>sJcMpvEj%4^-C^`xdzZyDW)o`$ydvqnQWXUOO?wp zF)&Py)ssT9_mb0Og$iSC!5jvL{DP9q{JdhIZCWZ%iWnHm6N^$a@=J?Tivzq_*+4e( O0pV6)%9>IN;sF2({R*}K diff --git a/Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE-DB.miz b/Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE-DB.miz similarity index 97% rename from Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE-DB.miz rename to Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE-DB.miz index 762b9bc34486797a4c93a076128f872d1211bbc4..4812f0a7f3f77d071c4ef42c0d561cc222732ffd 100644 GIT binary patch delta 510 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$uGe{yyE$myIbdyKII|i<2rP${LlZe7R0&gLcjUhCX`oby!I+G>CGy#s2TEjE} zu9J_$L;@bGlRT>&lV!mWlcv283jhEB009610001%lN`iD0U(oL#2p6FzyJUM0PBb4 ADgXcg delta 496 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^q zA;h2wbT1!Cc5!GVc9TWII|kW!9T+?VlZL`P0&yXeiy<_V_`)gyJd-2CGy#y4Si>{{ mu#=6$L;@hIlRB#$lkdYS0hp5-#6tlhlU~Ff2GhU*0000$XY0=Z diff --git a/Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE.miz b/Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE.miz similarity index 97% rename from Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE.miz rename to Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE.miz index 4c9f9ae77879f8f36afd6b132297c6e01aca171d..0b15234408ec799e9a11838007b56f8b8d1f01d0 100644 GIT binary patch delta 486 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$TH~;_u delta 496 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^9 zA=ZQmbT1!Cc5!GVc9SfoI|kW!9T+?VlWnFv0!AT|U?D4$)}|@}2$KP)Gyyo1Hm5WK mmyMILjTw`Lrz!ylldz{p0e_SDr$Ye=lRT&$2D+pG0001)?CK)` diff --git a/Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_CAUCASUS.lua b/Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_CAUCASUS.lua similarity index 100% rename from Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_CAUCASUS.lua rename to Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_CAUCASUS.lua diff --git a/Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_CAUCASUS.miz b/Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_CAUCASUS.miz similarity index 97% rename from Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_CAUCASUS.miz rename to Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_CAUCASUS.miz index c82a266eea2046784dd6742242c5badef04f97d0..1e6fb07000d3526e05869bca32a294adfd9d8c89 100644 GIT binary patch delta 518 zcmV+h0{Q*t&;sSq06DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$WoU18b7gZ-O9ci10000D01W_<0{{TN IqyPW_0QRfpZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^L zA<%>gbT1!Cc5!GVc9SxuI|kW!9T+?VlXIp#0aBB&rd9zIlLx0X0Yj5Kr!)bblX0g+ z0S%M3r$+&Wlm4eeBoCqh0C!<>WoU18b7gZ-O9ci10000D01W_<0{{TPqyPW_0LnG% AssI20 diff --git a/Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_NEVADA.lua b/Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_NEVADA.lua similarity index 100% rename from Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_NEVADA.lua rename to Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_NEVADA.lua diff --git a/Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_NEVADA.miz b/Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_NEVADA.miz similarity index 87% rename from Moose Test Missions/Moose_Test_AIRBASEPOLICE/Moose_Test_AIRBASEPOLICE_NEVADA.miz rename to Moose Test Missions/Moose_Test_Airbase_Police/Moose_Test_AIRBASEPOLICE_NEVADA.miz index ef4892277b5326912279b8458649f70a27e0c67d..723a6685ecce04bc8f72bc7c84a8d13b9a7d915d 100644 GIT binary patch delta 474 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 ZYgVu^=K`(}HZ}p^eGMp6-Lu%(`Y+DVKe+$^ diff --git a/Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_without_Moose.miz b/Moose Test Missions/Moose_Test_BASE/Moose_Test_AIRBLANCER_without_Moose.miz deleted file mode 100644 index 958f3a9a82e21ccde9d6a5577e2590e93f450ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19823 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 Mod)*57$ckgA4)U48UO$Q diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_Board/MOOSE_Test_CARGO_GROUPED_Board.miz b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_Board/MOOSE_Test_CARGO_GROUPED_Board.miz index bc954b8cc24ea3fc9a0b7b448d82f0d25d9d2121..7aa494e002d9cd338fe5b261d172a64a7108bc97 100644 GIT binary patch delta 4517 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 delta 4607 zcmZvgbx;&uyT_MS>4v3KVhQQ)?hpwD7Lbmm7M5H>L>gR>*oB`Wp_FuobSNdUbceKr zw9AX{y?5?AckVeeXP#%ydA{eF`Of*{a~4yv&Qh@|{b*`Ha22M1mtm$F&+E{4h>`QWM9WMc+%Tr8`)*8R>Ui6nm`alTwcpQw2iuzR&91m~aH;WVeuyrG4H@fDrJ${5^EW3bno43{KZVnqCsKmx z|A@QTu{8olbC2H^6+N*k2sbImE9Z8zUq{k3<~P@3Sz#4to^?`Kyo^R6ApS{g;r#5d059o#wPYd2AS!;7=~UbkhU zM9}wH9IW1=^eX3{)u)<_LIiQ<@nIP3LIzU>rcqQlLs6NH_ioXI& z*I~v-Zh9jj(y~hL;pDT3v=|PdFNK9Q#2B@>b%w#7+acfNS0=}X_(yMzG$IpJ>d5p$ zW_g;xRyYbV3(B=g>+-4PY3}xPy*-Fg^r3dX%cj3K!`szxz`Y6o;eoRAP5s)v7rQl~ zG{so(zqUx=dVb#^1^{Hd004sf+|$+1&lTczV7=&vl%ati*>+xj&W*Fi#h`M-yiwu$ z$a-YK@X~xpKSwm9dr~JqYs2BlpJj6`aCE8?ndHHuxM8xC%=J#Fw#?fB{8%=U(DkD} z#GTxepQnYCE}!*>4oQth{&~JVThjp@iI)>d+s<3W3&>A2JGuF~haZ-- z1!moJR(#-KyK%LhJ$?Wj2uuQJXPOxJ{$##NGx5fbPLwiVj_c-`ahV={ar!{ESnTjUhQ>U(d0jOf^oa2 zHy|W*jOaqrT4%vcXO$^@85L)VBIU^kzIi{SY`;}9UPv|g?tgaV>S0|yuo0BDR9D88 zpN`K)_eQ-wMclq>c)=shOTLl!inG;GB&`XuRrMJMvVwlOcHF1$&}j*`3fGL933L{t zN&Skrkt9*H7kXooGwKq`aqlC%4UlFRQ??5g6htT9q>BDMG~J`tL<`j@gL^) z$RS#X6IEfnyXw=80J0l4Cc|7FnA(dg2|TGzcC`)6lNf&&pcQ!-M{>^U|f@`NGL60@5_ivNIs2O2R7`oHKcS zYk%GOsnjRV7TO7p?5^caGHBf=vEeM(9w0pCR&nQ@N{lCHpvdP?+1c~O7gkGm9gGBP z9x@Acyruu6-%uf0#d_jneEnBxr?Vrn0#VbokGK(I=(k3vL*o)}8Qi#5x*7}iuz&6~ z_d^%z@FnM%c9Vr53eWr8Tc_Z{IrD;9S+tbv?5veosI=oB(HJ1PdhXlWkxYEy$9?l& zwlx`n)*&LMGIOW2)-COU|JVd}y01eM1BjVS?G|eySe;hMC}Y1mp530XEIzFBYSiy; zkvZ|E9Dk&sw`^)X$PCJoGcE$1AN9yxSo?;)C3G!fZe9+8!fUx{7!{TNX!l`eR@w$f zQ95-SW^}O$lWmwuA(IyUxl4Mj(YORX@pP;%Ac9FZqE#txBMlLoo7 zQZx>b)--TH1qFDVUS6T@xVZ^|FG4lfYE-&)ZUqh4J%-qhdFwDIpwr!7Q8VS1OtghB zv$>=eL6r6|BG1n|arKI!oM?xY+ z%G)BJS3Tp?NS}eP3duoTk%;jEbVFY>`OoJ;ZQ+DJavvB?n)R*xv+szm-}hPGEhOsu zu^OkWZ6}R&*28GZoSU-tX6(}FADjjcOZ=9Xm!LZj{Z~H}(A7pV;6f!HrfL&i9;PZ2 z^6o5c56*N0y7D(fS!FODnwq6qcKff*XxdJ!>5ld{B$Xua^Bemodv+a@oO}6Z_97)D zGz8Y0R2ImD%^}L0&R~Kblj)`^y})-CL%~jQ@(xTm`R^<`)S%u|aYR|WIw$ryI9xH< zKH#<9RtVRQ?{LParY)UT%R3#7&KvW!&LmTiqdX`Zcke^tQ{Qzl5lU>bsqS1;50q^2 zPr(Igb*n=q6uUs6K~-HEsP*(P!NhKnfU8r4_@Z~Z@pYt$#gM3W;K+_=#N&)nZZy+0R?a z4pQHZLt!NL4>ZEYg!Wc+xA|?s&ndz2xNB5l%N2lu*o#xo2wi82Z>c>Q))n?~&hN(T zv3W}$pL0~-kc7uh)X*wz3J|=UfJ^Do6w&Di(UPmWKJDg$~<|q;gNyQXZe(% zysJ4&H2uRh9jwxy?s=3B&5UyCfM5~G@l!>#lodS$Cra$KlO>FxeCg9~p)jXC{&pKZRWW{sn)b4I#j2!l!=!(>gg2&uLyHOi!UQ2Ep4pM33W<#TPAmZlHEFyEHN#VYzBM0{Act#XzGy(Z}H}#poN%vs$$ko}d>Uw=9mUVJvsFUx? z(ERoWP*g?*CT#$B;RU5npzaPNbOI>0KT0%bheXzRi8WGNG8(KB2S+b_v;dXRAN%ti z&Bkv2XngeEqtAA@K&G=Sc&=yEf27A?2j8Q=QUBM13brJ1mk!1?Ij13e;FBZb07-p1 z#i;7=Y|SQ^ubm)KhN;&;X$oN#7J`=UyW|>nai7$6E&{^+EF}C4g&w-;5d$rswNcmA zW(nm|2Uu@NBDebob8|i#pnq%r#y5>wcrTY5?nQBg5MY;Cp2g>kN+>B@=q5WUa?$mw zY~mIF^f`H-_rQnxQv7FdzIB+a!XzPj=G4SznFIUiDH3_IONtVc3+-Y>f;b!cXFTj? zJ_-4s)T+W?;{PFxIxg zE~h3kaAlNtSD2Kw0v1nwy89KR>IfvrQWQy1Z4qT8+Q*F5a#J1`Rqnb{%Q2LFF~C?{ zg_6SI9_iC^?-X-5l$^`DeSD8Paut&`x|h7g>JO@5#qBw&8H$*()?M;jV?X*YQr$u! z|6S)%36srNJRe?~0U`lV18dI@HWJwWC?3G^}5P zFy>r0aW_meckBx1f{EXW?`_H-FKQr}B03`%nn^)RvTbX)XShvBo2$cOqJ5O9U`!@< zw;zObZ#jRUCHYOH1slxjMf`^`Gl0?+^$^l=lWTqKt|S7U=ncl}kl)I%h9A4Di9FpN zh~}*52=c4tZ&~Y4efi#L@`&YlsN#}~o4!EOe*oTk)4XQ>{^gscE{J!VPP_CaED+jz zWHjjAR(#67$nUM$@}<-Vz0XIYN_-?c7iK-R^S-N4PK_od$lCmtD2s}+rR$Q7C~buL z_xj=-b%#24Z#{<$))_1_04}Z&{L57zd;)plW^4wRDF|5ja(6a|QDtF+DueV^VY712 zKXcUpDV&fsv*KVGfk%&)i_*g@K!w`wQcu_h4ChwL_E$L_xb<*u&M_f{9xThshq2{n zrrDc!hpENGQcC;11?Tf02&x~$w`>aT5_SgRSpR`{HKx4N_%$C?LU9nh!em7EDEDvd z1^^ss5T}|T@V`Gr?upMC2LPb?yL&(W0w4ge$O8a)JQ4O1Qd8GZHq(15qz{4kISP6} z?TmD>umOPohvDxvg#KOoKN<;qh(-D*2y0C;1d|33TLFZKq@hQcXz*d12_V8XnD4Ln zUzz{QoPU-6tCbT0M4YB5_Khr}U6UTcq6Op}Q2_t~?R*_wAW%O?KOZkUuUR4Ww z?e$c5t$M390VFL71WiE(3>+N*3V;Rx0K@>M>YqtFacE>f8M`%3Wd1e3k3Qm1F;Gb@ z#bo1`Sdm!PfqVq5`JRhBYWUTBo5osW1r;T#Kfuda&qsh@1!&{apGdM&PYULgSXx#8CCcJn` zKds3TyeAESvVB1yS}pfm49$t8tkoTAH|z2vqN08BeV5kc2{BhkP+GC9xJ-gy4R?)J zDoug7o102Z2G=>}_##FV=H(tzX0p@YDZ%$=u#zQvB;toqsBvhN(9?89v5&CC2QcvF zSQBG40kdMKZeFGnRSisDePrEKIcF=Dd_2szhtkEsl0ZAQz-{ALSxxM+pH7@DX3m5X z;YFJii-$-}fs@^CkWEyhg>%^xg7W7}kxFqIA01eTTr*p*gMm)lZD2cGtNgxdoY=ot zO3hIz91{3>iK|93YXGJ|D*LjH!_6U5wN-Q<2$flqZ_6vKSxi{g#HGgOlTE750Z~Rw z1xoqA`%D;?sOI@rVk2zk)BzCk2+>*`+`})hy}`wqnb+Wh_+&j()FF(~l(M;(oCsh= z!=P2x`7XIa-32hB!>bO>3i#lo1CrA<;9ynsFM`TAM#$blaSZybCIv){KOpGTK}vob zV*ZxL>D2D00k<9}<3p!28uoYm(vWj$K?5^<6iQJg`qP0fwapy zij8aR-N)D0ZfMAebQ}<_9Ih0_I4CLf3;f{<<)L6^IIOC|qSa@QC3@s%F#&nHFZ>Q> zUs28M$Z?A_!u-t2oM0<zX(OhyzUyst|U6<0ZYfDG-|A)S!H5jk^3!+{be6VyYgh-FzUbs zYCi%-R78K!Ru=o#4gPY#jTYtR;rl+qck-=UiD!tFcdB!zE;J&hWlutEC=#)BSBt<9 zdF;4KUyl|mD$_+dNnSxqPnrHc9o@dMQm!ZHZo<~wFFv2tjGN9{WnCvh7Z)~g99Vha zhdtv*aBYV=Rok|jY}arqZodq?U=v}NFf1U=4c!yyw}jQqvaG_JxEXa0|KJ9{HZ?iZEUOY+s7G9(DWmZq=-EP>}e3v09GCU zJOfa8g}k1G4(4xtryqRX`4#5skTAoCewXfQub1blRVFWa0F}n99<9U% zDi_yI;MBi07(DAT{kG&mavkdsS*Q@N)^_f+u`5ue6hk2GY?`4>kYk$RnxL&<1nk`Rw>j(jmGr>2v(QSx{{;G-vPd~-hxhco)!Q^8woOc+ z^Dwc%)5D;vLWElLK(+47on}S;+Ypaq%IaX*3A*!LQ!Cgm_PPJbmvvh;Ca>@G8-<3? zqdY?H?dcnOpi}2FR}K-SIv)*x96W79K;M;GxMblMa;V**U-fyyBAZI#c#`8Y z?TFV)f>F2kynT9Gll6;Y6TndIeLaVsBj>BVsno)qsc+3jd-l2O&CSV#x3XR}X4{E( zV}@#*%blZchi;DgTE@BUdu!|RmxJ<~{cm@ViaM9TD$KPL!=LbujuS?})PsOXc zmDMSS$ALFDVyz_`9qCy)3~DJ0mhV-q8XM!fC!wYh6Xg?UhUz}bJ`ZOV={lE-mi;>m z);}MBE^NR%r#s7zw9Bs^Tx*jL4=W#&x09EcrnY5n>P~Or8Fwx&{9PIq_Y53Fm+cxp z-W_Yek6ECOotvA$%bel+g>~oJPlGkfM(*lKwK|UDiSrktjd%W^73??XcaG|n47aW+ zbxW5f6ik*QuJ>vXmMmH4db~?xYgE9;mzA9N=OHTElaac+6GMk5^7Y%1(6)^IyR)l; zn69(66M-(@>q{&>fyy5Kw`Zc`-dza>{SRRvf=6BEdf~lJl^X`H@9n}lhR@x?_qVON zg(BG3#%t@d_b$7W=NEyGM0&mRYM&yk^Yw)64=R~ zTB*izNzAu`1&ELk4}h!*+&6Uc0s3dK+#d>g7g{obqQ21^uu)MU!|G8Z@!5Y}S6MAQJ4 zNC+8UNe~Zfa>f}LiL-s-AHehE5H^8ZyAMw-0^&CeXl(fa{tcqvM3e8!oA2z7h4tO{ zk|ODw0nzJ(qFhWD?Sf1m0BNWEIsN4!7A2}hx&WY;mcsw#}a{p8v9{(uHUtn&W=YccJAv?_X zL+Fz%grbEJNwSS7%fOw=7{cJF$zQXoUEM{9g})KmQ_d+qqgp_tv8L|M>R0O@eKWi# z?v9T5+UXQ_ptPYxturr6889eUgzl72mr7`B?ckMlA33s)2^44nkhV}kcH`-W3=)@- zYonNZ#WfBKmEmxlPevbMNVn8UI-M3YXCx~(r%NtLx8Y@C2J&Z?GKF7ltE|Iew~6~& zWd$KfU}-=q&w&pTVNF?K#Q+PLsOvb-OOi8dt`L*hm?13h`5p0daHMKr4Lf-cB|RXO z?w(^?GNm33`i{m+zrqOHbnhhIq9YhZuejV}@`!I*GgF}1$bYna#k zMNrdv-TrX7gd@C(wg1N1{`MJ+G->j06V+4;@7}^64rI%h@`nOOsYG(e0!GlWb5AjN z8_({{mpDC-m})snTo`LyRTyK+nAZI3GHp2W#T00M#lY6*CQ+A< zpR~NQIDpfPxq?pwiorAS@q0Y(d}xjhh~49TV&}{E^WJWK*KjU(>S7iI@fhWFE5nLH zaXu<@P0x-`+8zgFN3^z0yBlm|reb)=U14=~OT%&PrXEb#HU$pKA8HwI{aEmi2k5hn z?$RNYvc15EKZEE%!47Z=`hrLv)3+PZ&IgZ<5X)EG{9X6gW5#h3|1WAPeucxoA_G%C zL(7|(>6->`TNMG3UeKaPUudj6e31w@sfc-Du=Q&A8PvK`a;O+ql#^uUdTLNltf*@g z-wd@l_~pR`)6I{>Xj0>xPz(wfVIjn{zDU5pz*YIQ9M&b10&r}Wp8%0MIwM?Bw(VII zTVjgt*?gLN*v(J0VD=)K@zGhN9t`}xzzk#IEikm6t3hJ?`s8&ngwa#2rtaLz#+!&_ zHt)?i)k0%4<^7;;P8DEi9<75mCza3Ysl>!dc9s?FYsT>70mL5EjKP&VhCZ*oB+M6d zViOLX2AiSL1Sne4fR?o2Li3?a*zHMo$kn_X5X&Xm z-B@Yg!w;Z)KbK*S*f5g8sQJcGe1mHwiqi$1Wh!(1L|TQmP+aFpW?1T`#QimP5NN2F zA~ypY{OTDI>4r$0k`6W)#_Ef)ikD%EztpHd9}NBc8^~hjpSJ!u^~Dv@4?D^)<}3qF z*ICZpS<6`G)PK4CW36iZhX#HZ>mFN!JCJ2q3^pDqoagB2Q#yABCs=xKx>mjgCBLp zj_6ezs(=;sRA~;dwHG20SE>D^XJnxI*fsEP*_gmD%^LO&_}ZcfUE^OJ1Px|cP|X}> z^4+OF$u(PsJp%y|5Lj^ZhyfAXj|BAktc6d@<%z+Q$PvTf?9KYzZ<>tXp^I)MafeJv z(r3Z0&!8&F8!tjAv6>G@Mq@{tXXN#Pa5#~Oz?+wd_ze3pC64GpF?M>xTt&BlY{%Y{RWxK))_kd)Bp|Z|DO&69POA<|pxvfIqJKo_fcE2D z9hU>B{_sWCbUoQLm@CF8hdQBk56C^t98l%_E@85;>Y5IWlP}C576}Aj@qksLQbt5xz)Yv97SXa^+5(7+ z5rlAl(pg`ItJ*g&B(L|vB%KHX`@x+h%rJG&a#ld?;||udwhMU?!4uR`!=MnU!#b*f zv>9Q|YOZRx^3s z#m%KOvzYQzd@&GB&1_BUE$`e)-)(tjT$JhfRD`$^C~N}2e?2@P)8wqm@-xqp^jWb# zt2Gm&ErY0-xR9!>3WJS70w=wQ$OhlA0BiRG1%DwmQ#I$;21$kzRz)eOHk?68Q^AD= z+M^TN!h<5}y%L%|Qv6DG;|IGEuavgUuhlh7 z9*HiMh^;vr2>xH2(~GY-6F8}0v&r-{mAkAZruRiO7`tD`7e!z~Bm{Pp7aarEPRjKh+1O7plVL=wV zIdFwMHAbRt#Gba%cE}=0y$|J(zMiT%kviz2fv=gUgYW6a{uzJS^j8~DBHX(@qqf1^ zS!Aeuv`~l695{EAyLs+v(Gi4*uXdhOxGGTP$@W-sG9XokHKbbo@}WYIS;+lJc6u(a zT7vz?A`Tz5p^3%%p?!Tkfuu);)M9Dz2N|fQvWL+yFq2<29ivql?js<0-suC4UurZh zh|yig0W2+h8hgZ)x5BVPBDYaPdBt^yIBQ4_2um%nmO6 z+J=I}xsRf04v8nW)Ez7GLlZb4!k&+gB|Zzs`u52ABXZh9t_cjdRS!T#k?4Ek?eDc= zs7oQr;Q+9*CDzQL4uAZ~;UN`GEUKgcG_BY`iTa35l8(eH=26h!#NJXpwzQ-ti+(Sy zsADhP?Gbs6)|JscxcBuf^14*m!DG1k*D5+aXGSUo0RVUf0sv5-plidjW!%t&V8Nndb%d+ zxDm;W9cU48v-mC)Li_9$a|#JWDi++`Q6>~E7~Oe&(LQ;gIGd!fi#t?`c6uai6QbG0 z2FJ0tZO3@_Z^FdS0XZCG5MDyX&+Xm zaYBc`kfv`_=p~gAC(=SE&vDhl&ZdKhfo~VbO}iRluPkhhe%;WOJnb)riX%a~Cs*>r zVkpuNUl$2e(MzzEM#?e4a5rGn)d*1k*;lTztNO#8tIT^?5t7)!<>zKb0pR9sgJN}% zV2gL@kxrc4Hkg_7sQLQ0J`m>te##?(@}@8W^(<7bJ7@9x7yPw>Bw>bzNYaY13$@25 ztst>3^#d%9^Ps{+Q`PMr?zzn#Z$x+gyvepdPrh{U zSTrW-7VtpHquG}>)r@ak%hF74`ID_@!LPs?M5xawn_>vZVDIKXIy(^m z{D5OCJ_DIO+PHrY420%=zCqng$z=_(D}+f$(T;gSpl~05U;*L)6B@#59=|^O|2*f| zx!J-{MfgYxUc@urYrFHIKFfK&gZSb1oc=|Jb686%fr6AyXmZoD zKTU#`sss3$xrnfW>MT7`6cVvF82ZztFG{Aovl9j|t%N8(2qvo_=TMR9E^-!|f*8hN zi;-FmU5)w^@C+PWm{6zgsN(>Yc3Oif_O_5tArwLwo+;u$bW~4GjHIzYH6#I9N#ws( z?a}l-raNe!pVsZTpt~!7xvoOmkh&CZw=qwpSmnEij%LGO=_fTuX>Wa2-z;2>V*lyI z@W31X1DY#GV}nd_@`8;sEnhmkMb`IjO;Uj}&JL^CDiSCR_mr1gBH0*~L6NN6=H8KH zd#-QMw(xFvR%v!S%$Oo>{MGU@=lk-eFH7k{zG4}6lL`gz1IwMUH-_txwex$85d-F3 zAq&q<4`Jrm<+_1VEzQRt?Jw!2(gtI4izDR66`QC!bW&d+t)@1oZFvzI@w9n|eCpQI z$zWmOTOEMm5OVL3H-QDLDEeq|VH{b%1fh7@2x8@j);MW-Xed?^O<)tkm~yaOX2yHw zg58E5;Q7Tn57lJ&yRA-?6_HUh4~(SIgmGHEcl=J)SgSLkJRedrj2&;ch3Xm_G9g`S zp{BNT4>G3L+8WjY2~OeJ@3C}GVp~AcXL3e-5-Vz9;DA5ZgwyCQ=WI%+Uahoao-HzGh)X}ogBVKPcWmU%nCG-A!QhbS(j=1dL(){aO!eCWZ1)u zI%43#X0hy1-O>#B--qa1p*2Ii*J;HnjX0(7K#Y6e#P95&aJTh)PoqOM%tZM!3_Qp&GQ1Q0*`^H1PnJ6=sENmpHsyh=PY1n=*i5SxzduR zSr%+Y8p+JWLlYv6T)J7kO7J`TKfgE->*kCCm7sPY%4pZ{s};V=;xM3K#vUz98Zwkq zwk(Uf`%&=%+PSq-h6YX7SScNc2<(;Rf*dHG{OWE|I>B zATVnXm3r{rycT>$1Y8=4c&QaQ%#IsiJPGTMv^6y~u&=+PsR=^QEMj5O;Cf4#)NAR5 zvgr6z1b-dIM8?-y3jQ(6fJN)ex%I-hDARn?i4R1(p%>rHkv(Nd8y6nBy26a0*p0{UM?Rue@K|ZS909>g7c>P~M)u)g z5Q&YrD8ZYe|1DL~(DK?1I{76JgQbuF@ z%nFkn4m#GwKZ}P)dkGbSOO(b27{+{JflG!par#tfFRAoBTt0|$Cr?n&oi>!Z5<^i0 zB;Qxxs-^t<(rmGVIbNgEm!j-OnX@Vs%>`7pJ>;S$66x}iV}$U!4j1xc{P;*UZ`9cB z?`Ls5AOp;tqG>i^sQKX)acz}FBYV?{#x%H2(t@6sJ^{a!FZoRfRnK2rfnNkw{W3k} zK(dvg&fB>ws7{QWo230{v(=$0f49bb2c| z%Vz3BeHYTAqJC!$6Nshf?(Wd)9SEDc;33w9-7+wT!1;~n0Jk?m#mNbz1qjBf`X$|9 zhIL-j_K0W_`Jt<_$TpPJN~3OB;Fwac3d%1%F^1sOz9RDrIq)|a0vWxkDVeB*cIjkz zdEHJ=^KMhL5TZz0jO*8M*N?b255u53irsZLBS+~i7L+=>G?&`2b%2(<54{CLahy3g zI?ax*TrGoP(ObIFyIP2dqZX4Nu4tl3{XaLv*_DUt)S}oqT-8Tyw=KZFKG-d5{9dI0 zzVcG9A-P1D&Y`Q|0t|RceP@YE+xgzAtIcG)%gYg#+pw9r!*>Q|-^s!@F4>4F2_frraPvYV@2HfAg{)~w3$mS`5@j>Y}w|k@lNfS+sxL(HNOR1>nZdQ~8D65nGrJ@lcH*oIv_f2$4baaU{NcI2JD!42SbHfgoU0k_0qOS#ZtbpR1529I`*Q_y!5$cu>IomWhAq7YIHb1N~r%gU?g za_{cwHJ{T@7;3MNn_gC`wN_tdfygSRjG*8eRbRs={Fty-u*KB5hX^!_nd&8sqN_5lkHFxK)I!fRiRxT|9cz5v_MzU2HruA$=K= zUUPMkmQdcpSUuLsOkU?m$7i_Kej7#VvN{KKBTi#km~DcPi51U z0`&}-%YgbluXWE>4##K)Lobdx87WKX1ooFaW*|P*-^xFn;Lbznq7}FTd)1fFLHIjLyxxzqwUxnBZ$aJ!%S~=q!sdW{ zO~u&44E!)%hR*d=OW@gXt%yE)-OthYd+D@)B&Wd>R%rCJ!HSRQRC2tDBHEeV+e4RB zK(cbI!^6P%HrlK}FV%cCQP6$Dn~wXezCFA>FWtD=H9XIQ+fatctQMbKq==>2zSg z0zd33tn_l1!neG#*%EzgwQBYO_P;CozZdjSlBgTm2`YS~Ksm={Fn?qvFezBcgVE!(@@)0FuzQRSY6r<_BxkIbyyO{?9kUTL;> zX@Mf5Gc%d%;E!a54k}EXFUqn-=(Ez$Fv|9dhOx-Ze>gl((}sCwf7)@;(~(9hCH{$n z(MI*v&g95A1a=2Hp&V55J0Y{!v23D=FA@_;!sE3>RVOmVMny!vGP~>=qPy30f6!a$ z;&qP%Xr?C@3u=WSdClHLsR(nYp+19*!}-ybE#XDq2al!9w~x;jkxSJFR~udy*rh5e z<61WLbn2(kM2*Rj$>S8DG#P|#mx~@Wpn%M9j1!*i0bxd=5bp)a^2bVv9mQBVC)<_9 zu#|gKG^xe+owPtpQxYR;ztU&fmM@I5pd{s1V%BYT?!8xCYr~tEA!1l#BNTfypAU^x zES1+j-}=x?VJmeFe#^m$ik2H5@}vFMZ1-mA76C~XL7q6ZErQoF@P(2HLbJvoUG5iu zeJsl~C9uZYh6qhP9<=<2B(a)P|7e<4o`LlNSyCGdNiOZgI-%sYDK;-6N08c#x&f$a zFuk$pRApdYln!Ech1Sh&?F>rcRjtH#b%+T%+@oQoDxOMOWVNkJ573aPa^uD*%K?#w zgU+@u6pTUvG%%$#j$PWiIxcX>LqAcqei-XaqyoddL(5*ci5@`(RK}`QK3?)S8(8WJ z+dpR&uh5srj4-tPM5=h7a@!QVD<#-IFnP2V@N-2%SSS?;HDMzL&}2W}!SD%d39lz$YHy+yhr z8Lc7d2$pL$B!;1Jk-HL%?N@Mz$~o}-Vn?H)ml?7k-R319xZBIq@=_CPq%w>qb^_Z1)kg9>}Jg3$# zmU37iVW+Eax3CC|4@L=b5R9r#Ni_^c-|7`PMDMZD=%6iKcRTAK7Pm5l|H!;%N*1>4J<&Oj z;AGEyCSN#8jLUlvP9m}9cDM!>#)nupX_uPE$L12S$-v-t!`pG&u}Me?27f;eg&cwL zS~=Gl!(Y=mO8rwrvKEXjp|_dmSD;92mPyXjZzV_#TV~2Hy`y56BA-jqSvKZLDcadG zv0m{z4D)jd3sM-_z4K?q|YuHpct->X{8p$FnQI$SIn-vk0^K~%oNVze6P z7yd5b^ynliU{fclMscOFXoa4hDM{1345vA;6Ez;= zLXU!zw^U0sP@}z#BXcF}y3ypIW69KL`HmA3>d(IHZ@R8u>-WOm zRqpTalgbA;uI#k!uboxO=(E?uKOSw#o`r|~4ATQSa%ta$dJnczk8WzZX}%x9cgEO+ z8d=>63$NHZXh_{DND{Rp6KfFTXTOP&+NWHmzr^*2+z_nSKWyVNTXwu{oatW3C!N}QEDc9UNJP@Hd*DS7#4@!h26$RJN?INj9!;F z(7{3RN9V^j*0x@@@B1NwO)=*Q#A;Zllx7DygCA&+uLpxIa5O^?H*VnV!BljI}Ez$ExzdrKP6d-L8Q{s)KH z3Q-{6^aZ`(-Sukwwn9H`>LJd;88#H8!=5I_$+fKF$LEd)`DP#(XpCH&IJuns9lM*0 zG`uJE3#2om2BelFuAM1Z71I_BynBrQnT#v;>z#$(k%6E&(-sDNa|8&`!muodl0O;DxCrT(YmJh;xlE&Di#1IYiCrK;}v@w#E9i`i zx?4~ZIZL-`fUE#W+8Y@O-4G3}s_8TXU6n{pVc>;28=nl#$D}x=DSiF(5E>a%rI2v| zEa-hUZtVAzx5YFX`f+CAEn)kELJ=gV432|l$HAI{hLnS}a)qc^ZdnBlwSPHXa&UDS z*g*QPWpzvz%J4g77`oY=!p3DZEM)`MLFD#}Tk!~4&Grl6yag#ZB@2mvRXen}UJ#By z3T-e-Gp!Zb_K!#kA5*h&KZ+!jXJ#W!bn?1n0Ddzf?d`fS>k`odr=oreOmKY5^r^fP zm!eukKFaAnxJHfQBs{i_bPqkcxJ?jF3kq!qN+GQk65+g-s=G&iHCHl(im57?n4UAb z0c$?Nm(pk;BNb1tpc^=O)QVMGUGp%A(XFB7gasaV{P#K@4q*yJ zdn3_dk}zR@(ps%0?jR9%Z*0{RN(k%4MjAN%Ihg`F3B`e@85!nEDS=LYn!q;#Z!(j( z67iD?-DFEpQg?zKO*|N8Nd$lQa5WlURv)mbP^q$B;b1;LNLk~1M!+5>DqpU zqz0DY=K_gQ-C~XSuR>610Y>ZvHTNlm9xTkl9k;0o^g=HxrO6mS-3ctKC4PGA>faBQ zCeXOgSp=$o%9&v>5bq9>?h!2=U6qMBlL4+MP>P6;hESlOJ=0PKa-ViV;Gi8i%MQO4 zL0L|^ekflc5w(mHvUv(+7bCbnD@l%{bOm>L$DlB$_ZsQ6c zl13RdOG-!8MSMPFpKVwUG# z)SLPO7v4{)bJP7u-7oC(8}tzT+g>LQrp&<)U7(iAQ6nivoj)OPg~uTeejlT~%!WEL zH=HGaQZ0b8xU3?JrazPvco|}#`oxLuBc$w@Xg(MNA%u2#uaSSt68sCJ#o^aTZKM*d ztpZ;OH2%4`?ip;lIrz6s6xJG4R>kt#;w%4}7E;x*{`lN*hhH7EiBIkm{Q;lt=-bi@~jI<_t^CEDO_Tp!O8hoW~b5-5#B$txcjQ zo2Py@OpX-F#7wlOS(qlG2!3|mZq?hwyR^=wnTqQ(QOQiN_>Pz@UT-y@H{~&UQcfPF zX&k4am({xFPY>?&&9OL0P4#zXj|8kpsyF{aK|9=&1l;V)*3J{LL85{+O&*b+f%=R9LSzHBRtg`R>swz&Xhy=xujjX?19+IbAdiSY3kAF#Q@NaA{NP%MW$vs8$z;_K(p&_d2 zCl%H6K-*i(0L|$`ckv5wS&&>sfT zPQW84LJ{T!#DE?|1Pb;7fPZ|Th2mUsKh(K3H+G{Lk3 zH20*jvu0|`S*PnQizl+#fp9Z8cQkYBGTAP zUTcT!%s!g%Fg1sBlfoI_(U!p^S99{G2aqzSw2upcs|02e1QNtnc!+kG=W&22CfMmS z@DEv~k1X%;rboY`?Ac#vqY1&mbad(PI1KL%rhY{WFku?kUBEotb3nXhb;wgzZJ27Q zkq$HCIy`6q>nE7>80M0z5>zVG3CEG17(iaC4O2Uv};| zW=|qp4(!)h<~Z$|D`xKVBKk)GC%h=AU9*E)LPA*{S)uK7z$*gUalCJ{gPL#2`)3k< zWoft=dZtH8YZ5G`%VuV*_P-b8lB6b>qeCre$CA~H+QC-)ffT4W+)?*iTwT?ay-;gw zPfJF~V@);r$2q)GPw=z+^!XibxfD}Y`%V^TI-kJ`{fF{Js*L#180ZWI46VPFEZinD zV279vc#yQPwLkKRabC26OJB>nU-uI#dR4DhS#kYKjn4|+p~J+s^=Y6*Akcxvm%*&GY#kErRDvm|nqaQaelBEprTO@J` z2e>U1FW;*gNe4D{FrrUX_H9*a7x69}xps(gk0Bt-Wm+BU+oAhO~jeyN!?cb_yh!Oxo!)v7O6Ir}=-n5&vf2p@!=w*z885IaWh*nQ?pU)z#p%{g z-^`-a4(?IZ4iJw;N|MYn)pCXWWLnjPHazFs_!Cny)ecaOWo^e5XAl2wuHbtbTqI;8 zC*T6TS29ZM#GA4zTq@KKJZ4)e+ja%rrm&`}!;FkZt}7_UX4_ZOtz^T{sco2>=YRmTX=oMAFe-pZ2aMqr2 z*G^(BPdyI)*w>^>HhP)0jV9<0m7^Ql^&0|Gbnl{cr;Mvb!}&2}I`45px$`2rpXnZ8 z8C8MA-1xb9t3{*v4UudOa_nnvCMv(sJIZ}BchZ#X`jt?0&wcV%D9e5FYLxJrWjS&q zx}WIAPZ=`1r$e?Lm*2O-FMJiG9fg;Q_wBA z5Sml`El>PE*?L-wna0e`lVBTH(wbBNqVz&*S*2_?DXu1<1K<#GOC%xj#-aNLbxUG0 z|2kfN6wXZ1qlaprE9Wn=6Yvr)9iAVEn8ZU!a|qKNdQgh(q+&Xu2y?C%NSuez4FA~- z1xfh@+8hMtHx@5IyUn=;tlf$k&HQXKZq3$7^lAQ@+(In|Nr~p5HGpr1|E9=PTsoef z4|=Y5Ogs(ZZTRF;?514E&X0Jp zC!-}=t*Y~xWvne<6&HL>)ZgeE7S>kDZSK6;GomeRi#K}w&1RR!*b5dXGhNb`D=TGR zJ8hp=zMQM+VlvjK9%jvU!hxLs4b#Xk`?Tt<_r1zdWU9 zZ!A8e@>!wSU~@g7b28eg>e-pd=le~Obl>FR{zIl~C3(WIt#P5ck^FZ#^(n7>1;FM>ON47b=Qm9d)KD@!rU6h!{y8yy~KB1J5OG#z-VM@QDSgmV(?jX z>O@ciQe;pPWKauOXKD!UPvYP7BT3kL!T)KSlR$8b|A(#t>l`2m9V7@{NHZOdeuVCi z4DAm@mi%04lPEBX{5?tuy;Mj7npNUI?DP<%Xi7sL5ubMCC(HVm z>YuRWEHfZ!=6|VH!jLr02V&zqP5zIDbkN|>p7{Um`QMH*(7Uvww~jl3`pXadF1&ZI%lF-l^pb^A2Z%H`Cv{f{*|} zH10oW&;QG`Obr0o**kwiKb;il{`KzuNz4KOjsXC`C*$AcA1`JwB=}?EWBgmq-*Zrc gzZ3@fj^O`011ZQrd@2V3;66VnpI&wp`Rm*N0flnR!2kdN delta 17217 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 A;s5{u diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_UnBoard/MOOSE_Test_CARGO_GROUPED_UnBoard.miz b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_UnBoard/MOOSE_Test_CARGO_GROUPED_UnBoard.miz index 58ffbfda5702bdaa6c4a7078fc22cfd815261ed1..941b33450dd1dbfe18aa41695980ffdaa2a5c6fb 100644 GIT binary patch delta 15883 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 z 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 delta 16762 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 diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_UnBoard/Moose_Test_CARGO_GROUPED_UnBoard.lua b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_UnBoard/Moose_Test_CARGO_GROUPED_UnBoard.lua index 7360fc894..4849e658c 100644 --- a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_UnBoard/Moose_Test_CARGO_GROUPED_UnBoard.lua +++ b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_GROUPED_UnBoard/Moose_Test_CARGO_GROUPED_UnBoard.lua @@ -1,11 +1,9 @@ -local Mission = MISSION:New( "Transfer Cargo", "High", "Test for Cargo", coalition.side.RED ) - local CargoSet = SET_BASE:New() -CargoSet:Add( "Engineer1", CARGO_UNIT:New( Mission, UNIT:FindByName( "Engineer1" ), "Engineers", "Engineer", 81, 2000, 25 ) ) -CargoSet:Add( "Engineer2", CARGO_UNIT:New( Mission, UNIT:FindByName( "Engineer2" ), "Engineers", "Engineer", 64, 2000, 25 ) ) -CargoSet:Add( "Engineer3", CARGO_UNIT:New( Mission, UNIT:FindByName( "Engineer3" ), "Engineers", "Engineer", 72, 2000, 25 ) ) -CargoSet:Add( "Engineer4", CARGO_UNIT:New( Mission, UNIT:FindByName( "Engineer4" ), "Engineers", "Engineer", 69, 2000, 25 ) ) +CargoSet:Add( "Engineer1", CARGO_UNIT:New( UNIT:FindByName( "Engineer1" ), "Engineers", "Engineer", 81, 2000, 25 ) ) +CargoSet:Add( "Engineer2", CARGO_UNIT:New( UNIT:FindByName( "Engineer2" ), "Engineers", "Engineer", 64, 2000, 25 ) ) +CargoSet:Add( "Engineer3", CARGO_UNIT:New( UNIT:FindByName( "Engineer3" ), "Engineers", "Engineer", 72, 2000, 25 ) ) +CargoSet:Add( "Engineer4", CARGO_UNIT:New( UNIT:FindByName( "Engineer4" ), "Engineers", "Engineer", 69, 2000, 25 ) ) local InfantryCargo = CARGO_GROUPED:New( CargoSet, "Engineers", "Engineers", 2000, 25 ) diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_Board/MOOSE_Test_CARGO_PACKAGE_Board.miz b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_Board/MOOSE_Test_CARGO_PACKAGE_Board.miz index 6b658f681f36ab81881cf4f887c19a1de58a26d4..4207215beb983de711f17fba56a1f4426c792b81 100644 GIT binary patch delta 484 zcmV4y0k8=e2{T9{NiFPKoOF{C7$bi@Ps1<}of|3t;pC-BhxB7WqEd&_ zhN=>6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$0001lv)J(f delta 492 zcmVA!0k8=e5_B&gNp^8)Bz6G+0A~XL02Tm~p+gjtFBk@YK~KUk6h3ds z{=-WzZX5<^FiOG!VG-*mKy{~(Z@aM4L zRQPbx>2zQb$4La!`{j5spTK-Mxw)H0kfh_=6iogE0`S~M(L#udz>IJru_^?Iv?xiX zaJd`8X|I3YyEyA_dV|4#<-XE$naD7MN35$xu$h^wInP*~oA~9m5r@|WGncgHnW6UK zkg)fG=Q;%iE)+EJ)x!~L4QflchC0Wf24<}#8lk~{`a_4z5J4C=VJ1XCr6{493RhA* zNnEb5+S(SKy_>O0|XQR000QHuo-D733M+XNp^8)BzBV`Lpui9cpVr#1CwJzJOQbbphH{%D3kp| iGyz|eGDI{2k}Q*~EF6=BL@EIaldnV_2CzW@0001Z(BWDD diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_Board/Moose_Test_CARGO_PACKAGE_Board.lua b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_Board/Moose_Test_CARGO_PACKAGE_Board.lua index 773a96c7a..d68971c21 100644 --- a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_Board/Moose_Test_CARGO_PACKAGE_Board.lua +++ b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_Board/Moose_Test_CARGO_PACKAGE_Board.lua @@ -1,8 +1,6 @@ -local Mission = MISSION:New( "Pickup Cargo", "High", "Test for Cargo Pickup", coalition.side.RED ) - local DeliveryUnit = UNIT:FindByName( "Delivery" ) -local Letter = CARGO_PACKAGE:New( Mission, DeliveryUnit, "Letter", "Secret Orders", "0.3", 2000, 25 ) +local Letter = CARGO_PACKAGE:New( DeliveryUnit, "Letter", "Secret Orders", "0.3", 2000, 25 ) local CargoCarrier = UNIT:FindByName( "Carrier" ) diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_UnBoard/MOOSE_Test_CARGO_PACKAGE_UnBoard.miz b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_PACKAGE_UnBoard/MOOSE_Test_CARGO_PACKAGE_UnBoard.miz index d7618e7c22cf6c58a25660f28514464acd9613e2..85fac61127155b03c56b1d592b0327ecbe3c2950 100644 GIT binary patch delta 507 zcmVG$0kHoU2{T9{NiFPKoOF{27$bi@Ps1<}of|3t;pC-BhxB7WqEd&_ zhN=>6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$M&0kHoU33M+XNp^8)BzBVs7$bi{Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_D z8GR`UbT1!Cc5!GVc9SeaI|kW!9T+?VlWjvh0-qU^5f~Jcze7O*Pm=*eGy!RoHbgW5 toRe!rMQK7UUxw1Wi!}3>+N*3V;Rx0K@?1x{8#&1T-?BjQs`|GXIAE=Kyh-7^tMS zQmV;oyhuFTP$7c$V&6ppHT-&^ZA*iRqN+0074S0N>xrU6de4LrBR(DTNX%~=K8!=| zDXr04Qao_R6tt$)vfq?XADTZynyZTsY@|gOY->(xbjJ#14u^U|#Ih-P>%cwwc*`fUK7)?`+NLJ1@)Kk#s4rEXbZcXxAiORtvkb!kMeh+=Wmg zqGX$5`3UJ(&~&dm=(=O8B0l)|kmPJVI9M&itDp*wF|to^0;2(&X%P`qBm|uXNZD^A z%-;$)-8zFb;5L(F-_hxeM+2PboAWL$N#V4BV$b|ZsK!$M;vjcqJS(2@FjVG|NPpPI zv2jg&2EGq;8W}Mm{SAyziBOJV8kQ9L3I2GE@>n!C8eUs%+3vf~8aq}|ND(#Fe)O=4>>rjs-wc9tY?((KB%|byGbd3yiXXz zD!UqMlr-E|t(Fr2RH19=uVA&ZuB!4SZ^xX&Kf1&3&lDzaO1%)Qg()x7oS6l|u5~h1 ztA!q9B#v7qUe>SMO{Hg3V$jnV0VPsj)Lx&^6YU&bk_y$}U3p9?oGRzIMrV~Rr@Y5z zrE&EL(?WroPhlYnCcEsZ2hy0Jo&I6n2l0VnEgkj#2ROq?TK?qG6!AxZeN93dz`E1b z3jl>r$opC7aPiJ>_R-ISUvZ%k2{U3O^4#W3qSQ9Qjx(xtvnpS`CUwOVs61i)WGyyS zv%GNvry|PhehHq7t=VK*}GhfU0)nn5|!XRzSEC(AG4_V4l#l5 zqvRqlPs5&S5o)bNwZ=0Knl%Nv5niXX_2J4BbeH>I?O=bf&jU{AH|^A!y?-!l6&t;b z^9p%%W^U<&&YaI(J4Ti3el}k@dfA04tb7t(U9((nO@rz~AGG` zUE0y#pxaxq_Oh+6%$z(%^|U3ckJ@(4tx3I;Ftezss;M(04PO=C$Fu58-OFXG!M!D$ zibtR;JMiB5-l{9(@|!33#`NRk+UNA$^d+X5U8TE*^Ls?ry{jvKk7o4)BPY>ir>3t@ z*9P!&9;j>Y?k@1UVDxce)4fq)xM9`8Q#Y;N$oY5b{FP|ygTJDhy$t!HGf45FHAXa?m4A7mM3!c6^B2>9iNf_JaJ>+cW->Hwg2 zP{KDMMi7%(G4m1{KoA@;4oK=43n%Z+)`QBjpV=S9)i4!T032_pJJj9JyxVhN^k>le z3~}}~(4~(zt$rKAkz*e}ocedW&M!b7R(^N>cbR$(C~QKnw@?}mVBB(=&l7r#z+U0Z zS{;^aa-lUWK!k*N2xLRx;a5+|J3G*X8;ca)^84z?;R-)CGy`O&@aw?lWT#FYu-2@@ zid$p4T#u0>>;6zt<0rvDfAd{bll=IxbK!ikpg(rEXbP`lvzCtDd90F}f;8sVxbjmL zMXn4Bu2ZZq6~4~&hXNQ*9)=11sAhaUv9Zu_U^D~{91G?bV>LE5h&et}|y_?IlGgg3-1Ctuxpfpf_J=bUrON90?$)J*#++GKfSaGh~F`wu@wUOw}^fdO@FLze{eVzH}yV9 ziezpF#%>alFArj;8^RLI!V#?DRmmWZE5pR2MB#cN@eUKWcMOgwR=(sLmsM(;q9DV_ z2`&51UZ?jJ)gIlG{bJw_&!pu3V5(Xp%(HXru#;i|g^kU%0S<~P@(E2w52MtJ8v&!u(*tT z2gSl0u1R>945!m#D*6~>rj>5W>8zjy6Iqo7U20jTEgv%rkUzVeIpTU(brTM|L)_0g zCm2BjOA}IM0eqMUYsMNY4p_`g-Nsqg+uQSviUrSsE2R!{5uIoayWPF_Dh!o^Y`UmTUQ0a zm^Y5S-Eip89C>sWHJvkbH3g}qE{E%IN7gqHA={=WVCSq+!H{rN2qxS&Ol|rmO^f<} z80y+@yPvL?aD=z<4su+b?_b48lcDfFRY$e-;UoO%NVa;Za3o-yP9*&1iR5~uG8Q=MyQR58)YA6Z}rV)yx+*!z92c(C96W3-Szb1@Hs_!s4LC(D{b zX)z{yL*M?pv;z*vo@hgdPA}NlT=nRPhvNGBj;7PbZ4;QVT^bxz0Mshp=3l`pPtX@z zy_F*<6$gRO07lWFqCMaY^aYUure80jy)PaeA(o%G#fRR{r>wsz{6DFw_!W=-sSHeo zENvfRW;sp1j#>gD{orNKfv|W5_!1EwQW1;d5S#UgGpJ4F)G#ru7-z}s&Gg{Dcu}{Q z?{n1R;FpIN%(s!rv7{z>VHgxJ!a|4{1JQt?q3fzyd8|ujMc~9dKLH|jY*vJlY{!cz zw!{qGi^VL@sJp*t(fma$)02xx6BzhIkvYcFdr(*tceBLg&B@zxD3h0ZedD>ctq&2& ze8Ia(x~1lJ+Q(tzf*QccB32h|L8_3=OPQIA>?|k5&zv#x5yS!1oY9RZj-jBlEZh%t zY8wun2Ai?P6ewEOjFx0SypXTNWrp-COI*8NMNQ5Cw1A8kLhG?o*!@{=#Lc1?5YH{y z+fw7u#}A{$ByxjJIjL8 zbCLIO(KgXN4Os2`+^C(5)Wq+B++2ES=J1Q2lfmw}F6nt*XKhy`O`xoLbumJYlaESh zA`$uN8#^tPun^#E2ug7*f3$0W-4~E0c>7o-^y5$U_&8z3aCRo}`zH}R3GswuO!;YZ~x0hudE(cXA}T6e2uMB=xD6_`z~Dtq>;}a9zbS=rINZ7l-vZ@}NFGDbQ}@mv)pMdTQT}6z_}?|7 zvuNlO^gkXi8?8`4AQ1j{x4{c;EhPmdx79`6(*&sQM=k7UXZ+5}$leScC#@1LeKc5DC`%73 za?3*EhKq~L)WFqKPR`1{1s=ActQ?gT#R4bT?L1B+hag2i9m_dffO)7OLe?J|Qmn3$ zJcx(N5*`lLULPvQ^WmLI(#{sxXN-R_s0&KJgn3lCSNF9)|Q#UjV^TGV|HN*GJ62TuBee3ETWcHg7)qS zQ|O$52XiZawA%|1n~=^oE&`v`W3b%{v?HWV`zD(`Btl;=hpU|-qpcWW2Ei3j7Tks8 zTc@JDBODM_M>MVYL(#jRy~!ETiRs6;-C)SqzeqVO#^6f({j%Zy(nKaKo3Yd6Jr3n#w*AS2qF(%3U?2Xm7!}#1QJ6awKOTmL$BwW z+LWH}nYGw(AUr?VwIq;-r;RYN_HY6V@oXQ8>&d;@=(uSOTRi$1Hf)ZpDV__*%6Gu8 z?U{$kPx52%C9`co&k7E1Une%q1zBs8>i@bJFo$0|8d{>ox$9jnu-(7RPKN_St32yZ z@}}CgeL~DwZ4@elCD^SFO7iVPd9RmXT2Q$bsCeEu@;e$)nj)g|WG@s}Tnx}Bd$8+5 zou&(l-OmvQ7|g97bW*Ph(s9G2Pa##gRpS5r=8Wa%*2iw}Wa0M-d}t;5zbyPK2>^06 zwGwy$Ai@{`fC7H8Y%QIgE$!{jb+nu}xKRBb>kR(VR3w@NhQ+S0LupN`MWEFk4Du#r zC<~F38;YUe#=8{SOab+;5~-2Ng|wGVTK1`MEZF#6IB{bjd)XiOWOWYm#)p86=ns$0 z2P&Nw?}VwrpCcuX2u(iXr{{D?Fr=i&>Mc8qlqxfYK#xBPN2@}Nn4_PdIe<-)IPgVb zjg3c(*S%kuuX*q3v82-~`Jc;P&o@Lh4e4u41rqx&A%TCeiw83v)OVguzOC_7OgH60)l#hSP)@bD?i6Yt z@FT=a0&N4GzUxmLhqq70=CyL9vhzp2`L{Fn6Y53ERYVIj7VS{v1f(o14~8uwaWp5l zSP%TI4b(8Z@~Ex;!@Y?><>Zc(fYRwv@g%cPs7(HVtHH`=l#p_@H2!P_;d4*h?ZvJC zeMZAzJPh>!+DIeq={w$w$)T*R)3_&FeRD?LQh!0NQY)%uMO1!oHXbPA*;S%1X=F(YR3@b zH4rV6(IVm-)DUQf$cTuRh#7df&$%_TKo|kk-1#EuDZ7iUXcc+C9BT8oa=DnGs{MP? zlWeeX-ME^vR0a8Px(zC*ut`2qA_baa-?+|u)E5M0Z!a&&=Ug}{QJa85n!YtJ7BEnx zHO@gqM0if?&mu&{k#R8A911P!#+n;g1|WX1j=gT{u=?*~CRvjxYY7##qljCJC9$(5L#PjXP{ ztY;LuQt*4OBR&|3dL$zQ)YOr`O$>T&qy~SH&;jOUi1ds$6e}_4&qAeN5B>M zE6p==<>z7J1hi|sC$Rc9eVOS^88h6i5{MPNaI9K)&+oa^8fbEDB3TB91~NEQYW;_o zh9jyebWqxKrVYU^6g1CJ!UVi*+y|Q-4$*nKXWk8^Bj_~&bog^X!FaLKMKKb9T{U-s zSqhmg`QxN?Z?n_D1H^1f4q;M$5isL%9_$3(?xM$H{6}X3Q)U<k47_SS>egI5qIAcQ_i*m|1gY4Yf|q|=u0H>zyN(a*lL;K z>5m~2b4m3$F481D4+`(qJ$pY;I}SdKWS3c6On;`J=uS*OZb07J_h74P&rvf+Lz$rt zcA4hN+Vmry#@q|IUHRxC{v)5L*E7_j96itYXvUh?*c?||J9CIs*Wti@prLVgP}BB+QQ#lJ#!Fv}%MNRCq$O?#IV{tk&Y?sHdCepmR)gAy(o^N= z4kcaXs(++km1yD&k)^6?j2(JO1Ilyw!#xeZ|1 z%PNGYK;){q)vCEw%G(MQ9R)FHV~NtVBM7_!QEwswZxRq!1&usrB z8FdVLtDCYp3|nKrQ`rY1oV^ju6;%E=Os>^c={SOg?G|j9 z`DeV~#A-9p&#j$Beuay7^Xqo_}*c4sis88tV^yKo{y+1TsI*CggN*2)Dn z2j&ZgU1;V1Ak25+69)w;i^N^y!&k_!5%}feI5ExC3QLP=Ifi8?Rn*V&3Kd!1Vt_arplG8jy ze6;vUQlBWy9YwM^v|vVz;61tEyWp~uyPa;t6uQAFI}3dm?gqQlN_;J?&^>tmi=1G_ zQo7y(^~Mi~3Pyi63vwzLf^MN;26A|7VgS1hs5C5^u88}O2utc-baNUj8EIkfOFq~H zm2-Ze8cL;^pKglafk>IQvf%!r5NlnnTF?vjR!yQH#mz~6!VgYzQCAuK^p5Cnf)q|? z`3dHnyv@CJlIJ9f&1A5c?o?ZK!68%RV-9wz9t3ss?1 zPFMK}VQHGK7hvtesG*Eb*ZB!?oRvbpe)jS3*3a+(A^C{>}h;y>MWgQ44=<_)VW_fBDR z8tC-|1-+Lc`a{m68FX#>&pmERIVhaF3-wnLmW}Ib(SV;ff#MyT{mP5JwFJd0KT+8S z7LQF-B=|pjvtPR;X8VXmgys1@G#lI~R~?#!Gvb`5igR{OyW@@LtEJ6Uy(-O7)JX5Y zX1Uf>&25&g`_8~@#ENo{U-hRnPKYdv(l=t^!%X~6Xgzd+bbi7=*n@%nKW1trRzBlyMPFn_rbIE-IS zl~sM|OdwrZGzyCNyoBvluItG=J$ZxSmM!`_F1#P2lH!^Q5ycG+(zZifG)r2a z^q&!`rY$C19=opo6>%$)99z?aK$)5+oZy>;V5B5W41(qP;K9&`>>lnT`$U|TOQd$Q z#5fOap2E*2mqCTx797N8yBpbp$H68!WYr(foJyaOwI_+S}zQLZVSyU;PW}??n3e2v}~;WrDfsj z@kW7@^6@_I5oe5YhWL&jnUYAk1GIPl*Sf$6S-2uD6%Y)BoMA4`tcv2zahwV{ljI&8 zbiS8&6AikC(Xlyi>J^P27%)q*e;51hxy<`BUk3W`_csuYi7PyYGVj-Xq~cnA8GRc5 z^;f8fjt=*LBdN*mqAnm4x!svOa!$_8GZ^-`9?a*yr{v+-%(b2nHY$g}nlcWQSEmFr zYTPJ)9W}f_lmk^NxQAuK4?170qJHd3sG$&A`5t2+UzdhQL zf%%OJx*aib@9)^%|2a)t3>Q`DTYAnrGXKoZ`Lk{PC#PSU{X<%ygy_s%<|gDbRk4c- z6Ng?!wgi1%8X88$LCGi{ndOSp>ojAOcfP`&n}LorS~>YD0Y(SaPbZr*>j>Bz zoS0bo(Gh=IxmNpkEB7c!vMBQ8nOzaQwjp{-A_%Q|!%X>~{7vz!vy{Mk8(ShYjYQC@ zNJ(OK=fUv|?E*uaL$Z_(R+4<$sZB!3T{CPxM9yIKISoTlwGajq(V3c{#u#11+-mLH zyM{TG;_C*99~ux-bhyW(%C)>Tw8-i^m!6=ZF;yllF;+t&&4=9`^b|}&fiy7X^-euH zdb+M~e@7}%wIfY*r_zDpK4F!wJVZ~R0;&_Ws-Lfg+s&+v#hs-vciv&IPg&t;g~?Qj zzEyTqC{{6rl^`(c*1eWgDR4k8jZ25AIdM^Da^)|4_m zDInAhH+U%O!T*nH%VeC4`CHBfz_AzwP}-0Z^_sn?aOwy6OT=7YU`Y; z1T9age|-F37+5!4_0m|y4JXczw!r0aRC-G%5vg(Z?*H&+&ksGwAK=N}p2Y1Ma^mdv z!84Y1?btVYdfZE#Gm*G7<;i{4MF~JdY?A^w766Gi2hqS`m>|6H`Cl;!VUwD;Tff}f z<~J*KnwB5&akE0%Ki6!1>6+sWr>e%@N}P+y({pF5+KL^cp=AXnNXthswQT3@5%D8I zogRLQqK=DVE@8Lwk6tnrCeC;7c>FNtfV!GgkPO0zH(>zRTSaS5Ifmt)4~=7NS>~w$ zWB(b_rFsrLzu41kE|W8b51tW=8}=yOtZ6RY)7$i^oLc;Izh8ba8R6p!v~H>U5p=5G zczaPZk@3c7)gmEbmsEsy%h!BJBX{!>J9Kw@ya@WLp!K7QXG!Mm*DFma8m)le^>qB0 z;e85QM@`YUebvYAM7vW_13F27K1(IyZ+#XOU8FkTChw`utCc(!Ncidc`yDI-)1z@x z0tA!VuatU5W4R_JPSFQ!G&*Q2H+j*TYg6gsEc~Rw=TfoczsH_C{HjUtbukbrYtB7a z`_p={jOgl^#&7W#8+`qmhEf3tq^0eQ5s}$9%&Edw{U^HTQCu9^FXT(d$q5CI!YL#+ zJdQWO;>1v!UpnO$iShXa>@qO8z3}!t_UsZ;f+0WthCzI{H4#&KCC^z>YL-mMA z=2Zh>cND@HN~k_W8T76bbL@k7iH#6T#W#fjS`t;Qu^O)@_(#wi90bX9*wsr@Ad5;~ zDpIEayMH$#=FjH@cRZ01&lmCO1`;>1!!e+eC#+t`I@0Sc+U&yJySWF2o*cW`dk)cw zRE=ywu;O&qNRLmW0=9Ki>Xp`7O4b+{m{YVYDsftax=|A`F7zq5SkISzIE5C zpwHioMn2h*y$Fx`8)XJ@=F`3l^&jq}AK%vZ()>7v?~bz#Gq%1H7GAS+)RekclqBjz zCe|dz&wUpobx6C+d`%b(y(QRedfdfjETBcDvv-Dg#3a>BD^4lYj{LJ0htH0OZvJ1p zx#)S1I_P6YV}sqC>FD|;h{(TsegSV%M6GkWCPX~ne+0zKU?M^&di@7D_a zU7hV-_ZoHm6IdEVz^8?CsH>Zy2`ow@}Sb(e3B0?_mG;QV!j=O^Ry*el~Dq1_fAX3oc96XV<5>B=vAqOI+& zZttfh;~0tAjZ=4hUHy+eEc*++Z6D9aL*w{tb~>ll_bB8+-}}=Z z@7I^9&5f)uV28Usk;sjfno;D&sVc$8+2QWBD}Tr9i#|~;qd+ntf2dAzqqr={uXG(> z(a)!~qm?v;9FPKZLSB`wAoFi}+k85o3+LxO-$ReN_tVL_a@u@8?-?&AB$`~0%YI#6 zc6WEZ*RnduZxF5PQJxup>^>Zx-ydwaZ~K~JIZ?(B0{5CeE{VJW$pfrh-Ts+i={tZ2 z{GD!-kv^(2--2DinXx|rbuNDfsA?&YN+c*A{9tE~Hx=I-rVtPpChBb(!_Z*)iEoHk z@Wly420P-|G5Hy26Zn31hx{G1`#4*8Grz` zumIoipc&&3 z^F*jz#Vn65+81)jYRrjf#>3z{)nnFOV?x#3;b{1S-=Qq^=l6-d@X^Ojv+!)TkuFYw zgonfr+{mqu_#N@^W2k!!8 zG$Rv%fMu0V8I{r2@}6(d@N_t(Enx^ z-w}2`DwaTU$>2C@bscUfYDzgut5l1MQj&cmpwNb(w9;CW?M6mZ_?nqd z`ctH!ys#K+p_4bJ0`OZAY40|L*;a^_xReaiU_uhxW=|EIxs}wT3QN}-kq8&H)jT{4>$p=PRL#`D#PnUz4cQ6_=*we)OjNx6g6`nt zF>BTxjjf{~#&Nx_7vptase-a{hn z-P)-ymJrsDk2Z9^I++1F3nhSO7#rnFDT7Xbh46h0-gGW`EvkYF-E>D#Qg4a_O*|zS zM+=o!7qyAjx>ktfC2F?SRCi!7kpsrpQP~Km*SZXJ4;0P$gdBcfDzUmy56FWSIf`>` zMd1}uNUv;Dcnq6tfG(Y$KwU6TO`>6XE}HPxM+PZT8cdOc`T`U#vGAl}ozPLFHI%Om zX7e}7QVL&jlV}QsCNX6!pGF5K3H;HB5Q0K)C|(~d-7u(_(##t2QY101SE`x#O$aI@ z(3qpB{vnOfla)od>n=TsLFiSrJQbtDgTSgzqQXbd;9;aZiN<5WGDzdg&K#qmcyF+D zpJ@5`x=h@e3~)`6Qbc?_lmZ3qg_bgi=d=d`2kp>BcJ#dj%4*u}Q{@7QsBMyv-AgF9 z6v6FfPK|Z0JcFyq%&5eSRNZt+HJ~icYaaNVVOgX-GD*vN+C%e#5aIP}L1@ge8N%_n^wW))mtVKrMiqc7K8UH)7?=CE- z$}Dkxi#aOPtt<$;r;+JOF_oEF6gZ-I+~By~#uQ(Hc?b&}$fX?iMp1RMXs>mTTnI3M z)lqzUP(x0J+ix{NTz3qLX9u)Td z4SEDFx8IF}DRUU92h>(QZXv~J3?Kxq@j4d3A7FG=+EPd7N3aG`ss~b*R#xZG42F>c zFGCI0p1II{g;bo9Er#PDgwT#2Gz;%oLw;hkIsP1Lh*qYxQ~X{Ajejn#cLtkj0WOz~ z!d8#Urc~8XdL2;TM*6i)otPit__K>P`PpM?Fz}0xjacR6M;9BjZf_(O8wT1wmZ7OK zerF3EJzlb5HN2C}o@1?_XJ!5>)V`wn^TeWGcgLq08`J2i7U^Gv>9Jy^n5oVzEAvzg zK}FBqPLpk-Yx_cmnYaNnmCWp#-3#^V( zGlSi^V}Wau8m&K3(2n+Hfs1~Hz1WRja_)f9bCt zdah13wm%PhKAxuRKkqv1KQ5O(KOQy&-X4DepZ?^1+$>#ozvq3vy>r&>>^&13CM(*| z6cFhfYRm~BL^oq=r+sI4dmqRO%Sze^@{PF>27Wf49#O$M;e-3!051mKJCIg7AUGG_ zuOJ2Qr%4_t)-dhAOSx_MqO9Rh_CrWv#*pI`zp?8)l524v*=AYXWM0@n3c0wXp2;Pb zOeUQtuA`W^o91eJ$b0#3%iW)a@(4+=s>6B zE}P{$mo1ojHr7gW29|{ma3g{8O^a+INhp}O-f)IsOw+(~X{4SFv1tU?%g(_u=+r>d z$Ogz4AbH7W_MR&629(8z{Koc%6ezWr-dC~+`p`5J8ljqfR#iI>vb(bi)S4~u%+JaP zz(|I`!ikwlq;*Qi!_XN1|B;Tim)Uh2KFH$P;e9h z0;)@e7p3=tNabI1hbCNJkusFTIp?P-EMcRUdZN$ z!mZ#uu`KPYWCw6=fL;7!F3DqD^v==^m>lQ8W4Dp&c_x)b?LD$Hhgia+^gOO@3Kx7Q zJ4Vxdt?3F+AZ1?p05<}68O$^YB#52x2<<5E(-2Wyi1SzBAF)XvTRq^-j(3>e1zO9NiyI|ArQ5$~>vJgn6{@hhZ?Vhk&e9{c3`TU`?)}D@d zBpkChvjle<_q1toYkZEN3}>Fb#A_j*ajnN_YmELsaqcuVWKZ^(CgD=OFXpmCy7%)Y6QpBGss^A;n0SI@lBbVc5oc2>sNm%IV#lHpI|Q^)nF z4z{?ED};zkIpk9x_nl7xD_?Pu=mVjsdNFYyRzR=cnv^GqOVNqLxQ4m=DquGu^FQ@B z)g$8tzQ1Ed@LUKptNBbD=81b{{sL#*i5)C-)D8*OcPNrlBq*)rDG6@+r3iCxHM!xH zy;PmaD8l%UP1D(E(K}X9g-S=qs@4HHx^XExFn34F6kj275Yo+fRl}c?1;Z1}hEdYZ zq*voWfiN5^LvSzLonseel-?$ejguv@o3p0h29Aw8Q_>9p?ux~$_G`y7fxo(#(5Gq! zc4~A=_?C{{y2N-Ulla-R*3zr_tQ%Nb;>1|oB#GLq`3@TTiF+w>s)+5kjh`gjRa4@U zVh57#THsj`*>Dl*>*p;zrp-+83#NyOjLs%f@}YNzG+!e?2lv%%zj_|38UBi7rNm5) zH*(OayjD}GgxwX)jH~d|0g*s|YkAcMc5Y7y>B;NgXk~~ux-d1m=v`@L91528(dV#z z<(9Q_{_(@pb)P+o?|Jd z+}%jISUOs{&ZeFYTue~B2!FF0Dh~=6l+=2E6M9^5HJtG@Ok=IiJPk)4Xwjt_zs}pm z67+`2(~bP`9|2PI{z2(Yn^cd5^JmO<+2?}t;6wB{(>ug6t_6v^^>_DCk45tzA=w$` zJkZ)sR(WM`lK)cfrYZa5Uq;cp@TFU=BLAhUS;l9cKB@!mynoov zz)QGHczz&a3NIne5lnB`VL7(5s@aqh%(;FLaREXr{1+JplJ*m{H5kl)B2j>Lmum;u zuoE|){Y5hE%r{C5X#JetK`jMIi{+#>gl~nHQ(`VHpUf--J=gzBJPYDu5ebVAg`Wxt zBlBl`E(HCW_ERCtQPdZ+^OMd3`UIYV3CUvw6(b$sa~u+REo{0Bhhg*S2ix}*I-}|p z*G?-q7a@qx7$Sxaz-M>1VzN!JAaDfaGOK_j3qJNM+u4eJFuhrr$4dwI?;UyDsX(CX z?cu=r1Xh~H64J+ift$9UYj!M>ri8G*x)`$r(L;B;fDlIKsvP9<4Ws>0s+Gwt%1gC{ zwcNr&$yDEAM;^P$4azY*A=qJ*jT+OE%}*hyfZW}ZLE{q-urN5#ah_`OSk$0 z%;#4pIEt31vt2V+YieZQy6s-p=+D*lFq$)XN`9#5N?4{=w>+4uVb#@7zSCs0`%KEA zsBv_)GYQBxXs;Juo-%N>l%7%fu2F2UyB*Rw8}HTj?M)Sa|4otd@XOO9Ql@7ub;_ut zWvQ-({C5@gDW5_$%{cIUOslRHIQ_SEy0F-H-&W#t;5lt3FBPks_nK3shU32K_r&Y6 zg23VJ8o>%pco^6Mvg$<0y%ei+3i66N3 zUVPR;vB=b-#Nfij;PdFz$)E(J$e<+1pq8*M)DS#h%zyEZC1INcf&X)2K?1=e{=Wm7 zur7gu(7}Sx#Wb@K=*Q>*$j|}El3%aYB#KNT{}NJ0FBg)4W|R0|Z3YNZw3vTXDnZ9& zT?8p{|4~teNX$6)mu36Mbpl{di#XqiA{NEljK|{U<694}Lm7w<-$M0SD0!^2n4n24u z-j^SLwl+hkvww#dyatTvE6RX?0s#NjNSov;%1QRWVAp>)RsjG+@&7d1{`>fXAbuT~ zNi(8!Q2!&B1R{n98jhSqC`R~SI9Wz<4A6LtBm{b#BzwWMV{$A2z=oO0j!{%hTu4n;l~K;#-r1DF#?=t^e*yym zU;}E+OIDA-=Rw+-YAL5d|KH#Lp6LGvPKok`r~LQv?|DsPf1xWmg#R}I|A9ID55Z@g z{{tZYxA}kniFYZE!8t$)0N6XYe1R05|6Aza+ok}3Qy>6<`yZA=za<4=;wSltL5u%y w82?%wzOI#+J^%pwAHq}o0D!xplc|NhtF!5s69~wEhT;DCd?is==%2Iy2NG_B-~a#s delta 16466 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 LABl!yfA9Z4hIJ)l diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_UNIT_Board/Moose_Test_CARGO_UNIT_Board.lua b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_UNIT_Board/Moose_Test_CARGO_UNIT_Board.lua index b45425e7c..3025639fb 100644 --- a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_UNIT_Board/Moose_Test_CARGO_UNIT_Board.lua +++ b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_UNIT_Board/Moose_Test_CARGO_UNIT_Board.lua @@ -1,8 +1,6 @@ -local Mission = MISSION:New( "Transfer Cargo", "High", "Test for Cargo", coalition.side.RED ) - local CargoEngineer = UNIT:FindByName( "Engineer" ) -local InfantryCargo = CARGO_UNIT:New( Mission, CargoEngineer, "Engineer", "Engineer Sven", "81", 2000, 25 ) +local InfantryCargo = CARGO_UNIT:New( CargoEngineer, "Engineer", "Engineer Sven", "81", 2000, 25 ) local CargoCarrier = UNIT:FindByName( "Carrier" ) diff --git a/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_UNIT_Transfer/MOOSE_Test_CARGO_UNIT_Transfer.miz b/Moose Test Missions/Moose_Test_CARGO/Moose_Test_CARGO_UNIT_Transfer/MOOSE_Test_CARGO_UNIT_Transfer.miz index 8210ab21e05e91f81f9098afbb034760e37e9449..6f32457203098413d28fb9997960a6458a634fd4 100644 GIT binary patch delta 16007 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 EA1dBHEdT%j delta 16805 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 delta 16497 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 diff --git a/Moose Test Missions/Moose_Test_Cargo/Moose_Test_CARGO_GROUPED_Transfer/MOOSE_Test_CARGO_GROUPED_Transfer.miz b/Moose Test Missions/Moose_Test_Cargo/Moose_Test_CARGO_GROUPED_Transfer/MOOSE_Test_CARGO_GROUPED_Transfer.miz new file mode 100644 index 0000000000000000000000000000000000000000..e80f29f3fbedcd99e434ffe07c9b7ff34f8634f5 GIT binary patch literal 18810 zcmZU(W3(v2t}Z%l+qP}nHrF)Pv~AnAZQHhO+s0k{oN>o^`@SEIbdRpem!y(ZIttRj zASeI;01yCx|IUoH<;jnr005yl003zJXkl9$QwuYCH4770dSw#_7ZV3MD`$gijcwZv zE)-v|@ZbG1c=c)#hr>7!w=?18n#E-`YpmsN_{AU?#ywh+G5d}Ah+pr~8E`8&f?$J>Uu&>E=;vu7cbfyrsMTR{tEgI0=8Iml0eLrhWIqaP|i@rTm%mq&T zQPWEIK_f1xHD?xl#d515ST8yQp};git#;>q`nD7z2AgfQ$7$Db5s5(f!dfeu!`JyY zY^^vJ9A*Jp!+j&I>XSccygSN_CJ(uGNP>mNP0L*+j$~)N$N>*`$dSc+M&pGDNl_?} z5mPlnFi*&Z2O+ZNND>mX0O$G7p}dV^vs-E1hlG2HvM;pFIk=b~-n5IW{jC{4=3G%` zG!RQmq*=U79bp4&OSguPhn=4Wu4n6mpUfr;H&ds1r7wR&!o#M2cc3z}EbM#^`gFSi%z8q;ql*R^9s3;2(R9IMi<&Z;=rxts{E8sLsPit_rNo20*c) zs4z1gX;8EOBuY$`CzW;o8ITa7Yo;565Q901hree^v5Fbtg#P|hPDyUY69PFZamO4* z5H>)Ge8w#Wq)*9|OPy(sTXy?s2SwQ6f<%J~?(e{e=0uba%f1Sn7aqj`!8bCN%8*lk z&yFD;fLiJ2Xv2hzX9lBBR|w+8wx5p|(ad-xz?iZzyGoMMURChrCmCKpBp{3rMyPwn zBN2QEJsc{DR08v?+_Rr!pvTCl1L8D3)GkskhG0-cpb_=?7WFxAUL>Nv!m_>d$T@nX zvdD%c%Wr*fG^pxXojC89ja63ISnBU&@d|A{=_K7@n{s6|Bn+7ee^C%nIeM+*%q!&# zjJq}0`EJ)){HgoRoD@7&ocO6TP@HjgR3CTstz2TTxh}$`(JUH7BC}X^^g#ttFdAbP zE}_)C7V=V=+SyI|j%J#lzuq#heM`E|!ZSByWZ0Km$5U*|n8sF?l`aksBNpGQ0wNT{ zbMH=Mb|(-h!iYmjy6jnn#g_>+V%XF+z|RMmE=P$TG0}xfnL-<9%BTeRB{9ts2bueh z?o{4un6fASq0f*Wrl457yksi{lS$IALGt(**}T=b147dbEi*XzM9t^f_Le2tqwXYg z?#C6gPHJtq(am~AeOwS{TlXXEu6uB12*8A`FajipsgHX;gS&Bk8fM zhEZh03OY1*D~6-Sgq)VuEmaaV3p*Nk*3& z?%~VBw0?lXr-?=xbrsQk4*n0LGbg zI#=-DXTRL z>zfZP-Aan~70)dn1J26ZY&`7vHqF`KoyXJ7**nyy*|y}BteTZF4_G2Rt5mHMMVazW z%E1$A?#~65K_|Kem2ug~x2_G_%%0`0tr<+u_1`hQtXDo8naLk#RQau=5U?%5EyH|R zbnWHL-7pEdXG{0u9=+tfFS_KhJ+9da8XtGGa97pK$@Esk-qCI1+eq>~eQ1&vr}=A| z6s6nx`YB1l+E0h=E{t4s^i}#&lAV9jwWk|ClpNwPTC^QgH~K3qPo19G3PydZV_pQD zQ{?EY)4plZdy5S{Cb$LNTF~FH?zUEAViU!$-D-nlw_TOIJa&HlVlzElUD4jC-nN$A zhd72A6}PvRJ`0OKIDHTOI2-)6U%kX$MNg+r7UXR9TxNoDb5J*t*ERQ-?bJ}>aD8(t zqpzPo`KDfMriaV^zHIwQxrRPfPaCR;(>lm-JJ0p=wd#+8Wh+G>po%vuxg~Gu?a-$d zK)G?@!pf6cRiD5s{8yNe&mByBg8~4+j{^W8_`}x~{Y}5#LBd)sg4T`o>~-)w%0C>@`XGXl71P*-6y}i$YjZ_{N-oPpyWNdV#*?m% z;5+NCMVYX18vEf-UuI@zzTBUE9XnI>tC_2f+crLm-RZU$nahUix>GKVmaR2waeNoc64Xo*=<(YmxsR`>NkGd-rvR}mq&A5KYO3_**CYp zZ-2Vddbx9NU98qxGOFn+9+$6VJ?uY!Qd@iFsVb+vJR7%EFQtFlD%USx8xk;DjJZ80 zf!1YDKk;)O53kqpe|&yQdw=euM6-FdYw6I{&CZ2q`Mf%`cBXQ8e%?~O)xTd?!GC`b zGD}&{N_W4AdEFk~K(BoN2=CCCwT|~rKGy`0$Kr4E?&solAG7o6>elz&Qi)65{=T== z_`W^Pp5H(JtP}f`-R55JKJOoIw1vX|e9vy1wrsTQ*k!tZ^QW(}Umic~RE5I($o{$; zh&(bh9}kgXZ#WEB>=Y3}CbJzA|p53E-!M_qeI&}XOXIxhtXK@yKbgx;hWR}p? za(4ueH%X7dO{_>3Eadt9sh*>TQ#Zk?V2iB0+(uA+mK<+zZNT_34L?nYO34yDGbT@M z{A~@6nuTIQGo~5Sh^r?s5*!JL0>y;>_h5?n5T13;&iKgG2>>r}Evk=F727srpjtJn zK02u>S{PXp>1NL3b2xt<>zGvwr7?u?xPW*O&2QopU_*|Q061C~$RR#d50vB(#2jbV z2NSDWIWJo*0a;L?AN-+a8A$Fuk8@wXTwr7b0VU8yAPEJ4ngBPTFa)SBsy=UCmQr9u z3;G{59pCk%vtO{;ZKwdP?1Mlx??&>@psyL--t@pd#+wtb-DooK^XZd zmgo|}31`8b;|Zttn2v;8agl5k-;DKqe^{(GO+cu2-85PMKFriK^)Je36$E7nBh{KoboQ^=Au$R0h^d260m^76$m$(9Jqw@ zD)3;-G!XGBmNFX}F=#9?x#Yb(N@`91cB_gfngOm=A;KT)CM22AL+Va_ac|`7Z zHP8J(P^|UB`RiV0La;*Z)xnp_P<)9a3zL(t>$HYcEcQ?k;cO-wUK&mh6PI}Ilq^q0 zEcnk2*ILkA*}PpN#LX#5V70w%mjkiri!sDQQTd4`rzNTHuP^BsM^2d$ z(xF=g9MDKjPOdIFq3FCD(nxpwQj`CE>G0#m(7rYnFLUI+%fwPtGINS%Ve&&3(J7Ja zdJLwi$Ou)~!$X$f38qBls_Y39)qW^nTDzE$*b52B6kw#mf)R^VG9^;u8#*l8H#9ho-l#Im7&6p~zq~XxbREy#Gt|`e=RKw|cw`U%)*&c3S+M zvK7Fc{<)e@{kh=}dB;?{V&d=2e5U|n64wVCmLCN>nZKIN^1?*oA7$Wod@|Aa!V&g^ zi3~g#m9g!Hi4-n4g%~l@u-CZ58T=WD_*Jhu3nAG~G#GwV(xgcqKAbZwr%9POu+#WQ zC~4xzMHV+`nAfYIdCnc^TL#>MHyUE7tQCa9^KGA4F*Q*7=wVNkty%n(n&PedV4{Mz z@8b7+rK509|C876Ix`)Yv&VfBT%5diRrlZ7WS~MDl5?+a7q+*RYPv5E2EwpXoj$;j z{wfJ!A_`n<29%;h_bmWDu45s-J_xfyZeR#LT7lkVXKxS2;Zf=oxCnfXr5_k7xCwr7 zh+i0LI0(EkZeNy5$0`n*Z=C+`?mzdH7Rh{dYujqy^h=oX%Yt=pCeo3_;TD4j@3PkB zZ$vDy*fXB(3`un7VIV!_8y8MU>#`n2G9jYK$&6@{JZZ+=0|?_yGa{RLLUpf3uZ)-f z777sw`5;sx$i|=Y>tCl>2?qO#jtH5^5c1o3BU8&}k@B&zkJW6S5CQ64lPw;a)%h;@Aj<@C)Wwd1zrK>0J=^0lUUZ5Ab-FW|SUE>>q1BnvoJKno`c`atReYr@6;)!2*p()a4@G0#Ca7&x z&-NzhBsxSe1UjU-c1$|2lnfZ^pKC{|$eHyiDnq$e*;m#P3SD0&EoxJ={6+I{IlUoP z|K|I$oe2z_>@*wbEG83U7n+A9$_u{(lT~LeQFbr^s%gM=3SCdO48N=4NUmrO2dq6v zVtEm(%ZkvZ(<$WmbS8LXwfs&lfha1!$fc;fIGX?lgNbpalA19`UI?w2U!B)&b+rHu zG~CG#D_zFh&x~w*Bd7dvZE-uFmZ~)NT6_hmv@DY8McAcTqH$rkWeBfX~lr!M`RflSs8H#8RFk1=jP1dw{ZwO$fVx5j&(+ zrL5O&09-nH5(|fOq3F_KbL{|!DW`|^q%~J4iVy}MaqQ~PUrzrF2P?>EFHp3g z7cg4Kk+Yvm8NRTvV9E2^s)aN~VHe*zVNQR+P!%-HYrK0YLLp04E>&0B(^4W=^M5(q z-z&^hJN0i&0T!0AV66TKA*uxN$#tY;a_%OettdUW>`rgR`^o(w?O6PDPW@yY_}-Z- zJTOf4`=eraUI~!-!$0uKV9G}8lAarmm$Ng1VyDc-9~zmxKX@aaI#9}L?%25(YNT8` z7Rdt)6C*6XBUQcN2R>cK^-fHu=ubRW=dFZFvvKls*B8z2mpW#900(7 zN-qE3;>v$A=Ko~M*=p9xn_>t*Ro~|B^ur8C}2G@^Q*L;-%i)oIoSYhPG>)AJG zcRD15&=5B^!}6L`h}X&UyYClzbwj)kICytKlKLWKV|L)Q@T@aS)S4a2@@mb&ctQE19{o)tJx~B335^TVlNW+ zur16hRV1Yb6m5+So2CPzJ0f<=VslC5iO`bZr!t%mi>wOXcW`Y+sl`bHEh5W}$$Bio#u}&m@mKcNI8veD-PVU*Aio)h#!^L9 zOLjz&(5KV=fij6;H45kA|Lcjtjn8s1>t;h1HDP2BIm*veZ)S~!HCaIb>!2)lff@OC z=Q`hAKixHu{Q~+bh1t@o(WxKrX=|=|Q@}L;r=fx(vy6BkO}spTDU(_M@?04q<3Z|O z+&3mSe;o*|eZ&b1f^0sa`5p!P02o}{AK~zxq*80}7^AN^!LVMAU!D-vPJSuKa}t2z zfQb}zEyJMWj@QB)WQwZjk9?0#9>WPwk#!hw40lN(+HjpjzGyLkW%3MDGEtB%)iMz+ z(e6&lh^%P56?y#M#X|8|AB!c3_hi$!F11-~%Pn)I;q!`kznC|9XJ47#b$*5J9!mQh zg;HCK*vkm<+AGF7X!y>%wsN0RhT5!{g2LZp|VIDI<9t-`DGw+ zRFmx)!00A4IF_lub_yd`GZF^;iH$2bffz8`D%m0$(lQ{ziCnQ^fiFd7ZC>un^9W~ zt-TC0*83jfqxHILOlBswOTRTqdLmSTM&0F^rjD&otYn)Pp(kFI)Kb-AsVE|mI8^<= z{f2;gpKN}#u%2hWnp-*P zrxqrX-C3&iu`RUazxvO=3TocMs`8F4_3#xj-(vx!^8JIb_LAKXgP={S`cYoCpd3y{ z{>%v*wU?fH1sx|;V(|NbkI3W(IaW*2l~_Q`9hH~RcjmB~79#NBP!GJX=dh~;&fxq- z+;6@A?FXl!hPwoi000~U006N5`9WnP2MaqVM|yQz2P|M7;|y0)aF z_93_EYrl0It&rrp_}|X^&|)qD1Tj{TPyqrA5SFr(A}@n$#fTXGzm;By1a(HkFU|f% zr!?vZDyr)2p6cjYYOh)QQ_RcDx0}4D7Y~n@mA>5_KcD!&M~jn{mFWC#h&lY7A8&)X zH~fC5v;XehpFd8frzc-#f4`<5&Ct2LMCuTWZ*pdH%2D-jCb&sTr%PL3-(+1X!RZFjRem#UM} z95(pHv+m5;Ur%S>uWl}VJ9~S)c4zLkj)`nZ4dB{d%MXyguNr4->G9>jh>q>}Fz>N> zxDKADzn^=zc78tFrPqaIIl&H%>2|%pD_5_PuF0PkH(g!zcXxa^FxMV_LSJGbNBMr8 zJReU!9;P?pTd#<0Ko}iaVt(-PX93DW#O=HQ6M)n90Ag_V7#;TZ5*HcEI4HDRIQ&rI z`i}ji=>QH6{00Tr2Hs=a9vFfFIWU?$r8Ec&?T_%l+W?bA*3TS<2-uS-p?Tk;SaG+v}=e8@LrE(t*c~bE}=^%C=7EmGir!pc&QO6D@KB7+ zUv!f{7j}Kv%^eM6#%ieGuow`S3HB@A_Y&n{48+6%ONfF)9f@KL#Y1aIEu@6B7U6s0 z;U<;!r1+Y|ex+nDDkRdfOFVw$OyIR6a#3RVUtX(ezg>q zlJ-){C%B_q4-)hO!z@$-@zxWbY~i5ltNBv>peBHc=%gN67FwZEdk= z$rU(%1S%t|vEXGY2msafK#J)HqWU0&3_#H8`H)J+))vfIM_@FRF#A(6H;V`=+dmfB{~j3g;ak@JQ}+8F;VP=e}GByB)2I}k&3 zBNl``gTpI3Y?+~|<=nB3viVo&L<9_=;~E*O6yVa7#W0X_4+yw|6eTPbUO~oMJ17E^ zvF@24Ber^br+pAxTX`r+1ChKz84pNRB|Ha!KssWP zyb&3XgHW8t?3Kr%pB@F!WP{Z?jRh_F7+l_c^W-N5gBfCQlu>y?=0jvqasUhkh~oj%UA=X%7MCF7{`WlIwOHSkPK@X*3XPmQXr`> zHKNig++eA}a4EI{kx~RBnUY8$V3DdIUXnv8mlVCcVKI@?oG0x;C)YQ{Dyg0XC_y?Z zk-BLe!wu^xmT3l+s@@uXvC)4Tgf4PV%8h)dgV=BLx|U3l4px52(=EPcBcO zNH>tab(myElvIcr$+uYvyKP5D5tQONE|9uym=qQyu@NU%CiJP(m+R6iTpBfbg=61x zRUfP;(+i%bG7$d>P+&k5sp5ZTV4cGCu9BJvAw@*?LQTxac(AhhJg`uOwJg<+1 z$qANBWhXd2#L0@R%i1W5DP1NRW5%I@m+tUMOCnWvJoVBRtWvPv03ZCn!?cSeh*b6R z%&0K0zwp^hPK)SI%QQ~|EJHPdvLc@@$viDjB{8WE2lc8X{FR#k6s)&fgSQ8R-g!ZsJ33Xm0%{(p48!IPciQNqqI#1^)G%J{6W(?Qx zePVc?a=F223^A0P715uyLJpsz()IK>p(9{36trpW;}k^Z6>OBXQkv9R=n6yG&e-7uetZnZceGQ zja87Lfy_9A&VUrE93@4D4j|JCDCrL(H@_hQ9Vuw|6qpqm@qR9ymz3j`f(l<=8eC>p z{J+@hBQ$*P&S*N1jAePfcpdfA2N)^Iym%X7af6G>qM$v6Zq z#M)qgjjx-duOrj!-dch89RJVb^C2!MD=e4S!^`(&>uoJOvQ6Bn0j%HfM(CMz1Md!x zq>H|HyoUAE0H`EdG6}ZfXJy+9$$HzecY0Zc7LTY)>*M^KCX67PP5tt?hm(mXwKY!!`TWzUtNwNlcF%82*{ycmf=hYnwbYE{MJLhH{uhoT zC%YC#)?;4au=~IH&%$-0zGQpGwl;y!!>71Ug9|sd&useSt3_e3Jsl+tDA#+B2t z&sbAwBuV6rZJ0w8h||5F@V=4~Hxk7|#=OET=I#NV_`*y0&ZKHfa`dVN&@))W72usP z0&29)=cI9+7z9d*W(OJcusy-fdhB+9w~=RD=jz2YG3Ns8yb-@ceRc?PkstZ7KEZfF;%e+0Jrs>&TywBBW+=umL)S zLB@G-S)~W1$|b^MVVL(2l(USy_rBuh?8n-DD1~R$6|$gh2_qC@9kCq#p_u9CHzv<7 zJTtcbI=JiOj2w|a-D2jLf$T1O25WjqfiSUSnTTE$aRU>l&;OikW)7{WL>%1hqczNg znKaCS@jd)EJ}@r|ofDF*_e`>?5O1Z3J>69Ti4gCM`&he8J}3MSA@_ThC^>QNsj=!= zkJ;kk?4#ApJI=C{x0Xhr+(bkDW4qaU7W5O=)Z+Q+Bhto`-ZE{7$s&}H6|y4baDu@) zj$wxl<#k87*NpH?@~1HGtGGQKPToHu%^b!#ZV!x|a-994q9ftLeD`uCbLM-sF2nQ9 zfpu2X2~!QxuFIELS71B+A6f!^E(f;R7C=sr6VABnGO#7$^UZ|y+8$4K<`GPgite<8 z?{s3mAg8dHLtgk#@U5yy*(=EuuA4^xsUY~Hq`>@m#a`kw$=iu`tir4pH$UWOjA~(Q z>3GtbX{b`7;!URRhTDy{CyEq=B{`P+&1R3NA58wR+a{zfC_^5WBFyVGLMAf)tn9S- z{y~74mRFBk7fe*rp*ZiTJTJ2Yx-eS(Xe>y0+ONbJT8IZRzfH;7tfCW>%L}=q-Cg(S z4)MNwEIuA&Gld^om$=eSAuos94zaa~et>C?-0!wu{?JQqR(Xc4PdO(xSF8aqo?(g` z@TsIVM|jBz@_kwK17rEA5!F&~>bn~{x+Hy~$dtHlD}%x-{JLQFKlOZyUpku|aaZty z@QOc2aV1Q&K*vx~iZ9Fk

%k?kK2yM4y)3G^##khmU+(?|tF5muax`EDOst;^Bkf z{F}swu!u%2qgg{zt4ejqqX?c?tuR>eG)WM=ab~wsKvTxogY^WzkYuhvl&GN+`8$>L;xt1TH$K@*ctWz=3|R&bwmlGMg)#6`#U7VDi!#Y7Wk2SOO-vdds>UZAI*}tZVxRISEt?o5LIuGSozSwYoMZQi z&lOpGxXy`Fn@yXI)3((mu4_Z#aT4du-DXTpW=(kuXD09sXHBhDxllkfHyYnNJ|qAW zJnC>WldUtCNxaP)8yYm-S4>UXgCj+%#6RZDShX-Zc;LCxR6S6$t8R}8s7vYJt9b4- zAq7>>yY?CzjvKM^Jozs5ij^T7q|982F|GYA2bE8p2FT_SCPMo}mTbV3dxlGpmw^>hTPr$VnJysuabRywc zQ#vJ>R9p1y9@wAggdYJppH>6D3(k(Qa<2y4%URt3+-lUakS>?%gUxLQZ#!&kIB&#ap99xONCL!!zuyWgASq84k-tG+uIbN z>ErEfn&y-=u^Xhm2E1`Aw(=+*fqep0C!?IrD58;7LaN8x6HZ(*X9V$@A#3)K1@1XY zeCQ)*1=PQjbe|zNnI*plxLGgy9H2?=KYh(_IE-&NkN*b+l!wZZWhSFg(MK05QUm;s zgGD?Vjks@`PPor#6rU9^R{F;r=e-bY&%Pf&+VRKy=}Qs&?rgo#Ad-UFjpa2r!%ut^ zJGzA3a!UZ;&Lm<)Q<-I=)+hWwn9L*o2h)1N|6uZ(=XemM?L+@}J&hEbMgPZ+FDR`4 z)ZToZh^HTSia86d;vv|FA2mJ8j7PqrPrU5^K%)O&NU;9{$vAW*9@i4Er|z6(ragb& zQJCBB)6~3-DiB-F9NumeGP(r$A0Nnfm6MmNw!Ze8Ki|vKm9MR{xw?Ac_+R}0U3a3r z(#~@G*X3vi{J+hOR*Vcb^dh2Sf~qnq^s=_Ljwb)9IYle;{vBjM$hN-o<>(q3-}8bA z24gA;#|Dzsv2>*%1zAqP3Zwy*yixktr5?9AETS`x=h*IieUc-e;u{D+#1pV(!0023 zNrXtD-+VXi_Iq}@zw3%3kUW*AO!I>O*lT}NY1-E@)G!DERRT4OLnBRrN*<+@5j)JB zzcz1JoouUl(wSfu*@r!^z`RmFF`s7AIwt%1vK-#`7Mvz5*Dx&uHb;8tx^0&e^s@)G z?(*Ulz81h`SX4O0SsJ)%5}{^UOXTkzm+^)eWH!b95CEai&xXPW^+hl961n(Od$!~g zjwYyNm=AQxTZD5g@(7ZhjH^Xh9armVF4=59%>k@7rymH1761+L1zKxvgKZ>|LC&f* zXHh`d(o;Ufy4(!Q0L9T;0w2>?fdnI=AYHFx>(V@VzPy>te3vMLB2F6WG8fV#_|v^@ zGSAO`t}mB*mBl&zciBpv=hY@hWKks#W|W4E1b~!^+qdoV_UkL%ywmDC&Gx@_rJ@PT zKJZUhF8`WQnf}!X|NpwuS21yP(iav~5|`H(SCUs%5Eao^aWJrPH2vQu)nw&u`2hw5 zU-I=|yL}6iMSuhJaQHlP85rgU-b5*Ga~$;rXQUrb+wBuJ#H7@c)t%eQR?cb-S`C<2 z8Tw@zjJCjalC)Uy#&J8U7MoFvWc5MBQ@SSdwj_$6n`YiN{BGX&N4pQ4HPgCI@o=xM z%!X!jC*je`i6UKUbKk|syxnUTi|!ye9JTA*q7D8U57xKRi($zM^ikE?&tDbXtRk*A z;>&A!)l!UaW-*xP9ZhtWU!8~ZX?T5d_;yQ+I|N@fl_S*V;rW8%xmd00aBqHr>mF|i zoHC<10o1-mW(YMVz<|-ZyF!G9KzSuI)7r^OM9l|R zK>7&#enG=wEkrGP>}oV3Nxzn|7KCE^F5ncbW>YacORKJ5yQ;L4o1e+#cQ2hK;A#ya zHV~n&PDFT)V?<4JFl^D)zBu6sP2XW*wgMD%u?1+B?>CN!s5y7JR^YuR03<~5!FQga z0c-lkRQz0a02bDy`bDI%-@9CHB9WxxYEppKb!%`DZ_yc|@dU+uQo6^uC-S%U_KXw} z?Xs#ywz9*1;jb7yX}yydAD?2+TZIE``g_p-wuo@ktL5K+mJs!C^`ig37GZ2*aGiFlRZkQpHSbyHbMCn9Nt z@9CT6INM$wR~)Zpzm!u>}Qsng6K0uBpcx21uUkmY^kUb6Nk zF}0~O1?aw-2Nh59Yb|pH#*Na|z2KkWKbWaRi*aAvOJ`bTfBgLDXv8d$+Y^GX*68ar z=((M8ksv3WPW&d(an;khyuF-y99?$y?+WUwn1N}rDwl$>gv>R!c(5*a~sLdI^)-DPIuUlUk~9#=M@=g zjerDUX#B`!pAxZJt+IFN0_|Z15@__b$=7oB=TnAwc2zDcdvnItUiypwuZe9QD$?5C z8xy>Mzra@mFnUWb1kKge!0?3q{G&FCkH1Y2o#LMOno#4nXOr*G-_S4l9}OAG6Ho@9 z>n^wZ*cnZ{(wRe^JZ{%222s>s?;+>to?z%dQ1_Ux1@?W1Uym}EF04oE8NCw@l!Kg3 zp+hdA z*JV`rVg^Cor}q%_Llr7u21$ZCkb2Dq5yHQB zIJXwj_h=U1m;=&UF1+JB?e{(RGkP#{!of@qNdgT~L~JPVR`jcNMum%oQnkbo)kIw} zW98@jyfam(9`&K2IoZEp^9sa2F5?lg4ik_@98}_Ai~Zdp1A>P%2&_%igYv> zIUK!B0_=B=8ZX$3=y`g7fe*bL+)Gl$(6B<3_!A}WIq}x}Q3$*Q+lq4zPhb2tL4P=2 zhm_51^e(4(UZZw7$Gh~r?yb~olzOE}psm*I+$QRQd^mheT6yH_a%wZ4EiYl5Z9M71 ze2%-mu59c&LpmJ|6rS#LcL)1gHC^JRjdb^PW%w*rc<6B0cJ%3R2{I)Okm$Kit23U# zwEH*0&Wk~?l3xLCJk8wy1`c5G{5;}pODe>K);3eO4V7U%{uR2@xiVAwX=pF2e}nys z3Ayx#6~i^=6Bhfz_Dh0p?L4juRnA_$kM4>bg8Ye!4VK#gfg&_SjJJlz0Y zM;DM^=BX*DvC*TJFXQfM`ziQqo1Go7u;tWW=3IGi#j4o< zN5pd%mm=mtc{OdSIOOF)b+s&K`?OW}PR$cL-&=Mt$^3O|G|ZC2sV;b*%FF$}_9n=j zeT(!)_r^Uff`SvD>b9K9EEa1jghJVnFj4=92s;uy*1MBQ*AYXLAq<5VRGY14Rl@T) z|5~rpexUg<`7^S;S2uw+uv+$BZFz^EwXXNjP@!COQH0SZOzLfi{9t^D>MCJ=?9Fji zv${g^RPAI7E30bqzT_3nV7%aK`}N45ER@$j`MPSIV7$ziK{t^EZLk{uYV2Wq3#rUWMvJhp5)q&sHCQ)S;XZPo}QF_)q!>ZLa zZEHw2PCqk8*gKO4H+u{^kylClHvUu7pT=9`Q7L!gT>f=-8;BPHl7iZ7ZgRVnn9CrV z(Be!UzvwOkZ|;QCg)c9$l;N*cL_MU_15KdJW3ZG3TkiT$S%x7t(o}sk6E&O~{B_jM zL!Q(pAAfmGHWWQNgT6E72;6L3u@$-}sISvzf_$YTI(VqGk26*aiKq8Ao|1M@cu7|^ zoE;qF1y5*KuiBt!ij~1!&5MOId9lPD0sKs2hPg(E?;G-Dh`3bMh`rq>lhwKCdx2Y0 zh>?Ng@PvdollQq}M;Xlv9+cp;x6limHk&Y}HPGSGcQfySX1KJZcD2M7pc-chZRZ+i z5p8#@kt8GH8fPH`_X&YqHu!f_F7CimjJb1Iw*!FeUB6PeIY>A#FXrt1JO+~N0zCmH zDpxddO%o7}^hlF|!&5;s@HaKC_Ie2yu3ag!l1Ju3WZN<4)V%Z~sJ8PjD5?Gv^}hb3MB8F!nlg~=d^%KzYZfLGpuOS2s6_lM zOmbVgDGqlH(<~kuW;vgx__6NB^GBWhMR3p&B}n+U`LrPaB+UgUhm~v6oH?;7s%(|| zb)q=6*7j6rI}KD9kboh9T3mE*g8E^T;ROW{dN_V!qMnd`F)1OaItDmn;~hPs&L-Cf zpZv)ahD!EOO`F)j;&gEZEK0lYp+8-2%+yzi$h1eDBwYqLd(e3mqzHi14gw*Ze6xLE z$M70CK6eBKGO<-CaxP;f>*`jGsnh-=K_Z*Zt^qdggFaf*1MM)@rkA8ctOo|g! zGB~~ouynNa=pfju0%2#ENAi44&Ct8>aZO6u`C-#nMk=iU-J!``;xDR(e)xM;##wr+_L zpjpOT0SsjX`GZiGFF>bbLL<6>DXsWKi6Vln3@(Mjjgoh9*b|xYy|y}{CiBq_*L+I? zg|0x-d{CJ^tE}UhU}uJWh+mN)@qPJRkT(Vuge?KVgq6sWf`8fVm=^xUN^(;=&_+l! z%4Au|HIBP>7<;k^ET~9y27-y&;uF@Ql`X0yF`(q3n3q!AKK9X}Hs~-GbXW!pp;S0o zSMW|xLP@wESxRx)G$rVHH#CEYP4nkfWSQm3Dky0=kSd{5B`2te94^b_g$Ju5{z0QE zluCFPm-*4kdsco}g?tY*bZ9-ON;nR;`O*4&QgK)XH9yqqh9^F8aIxmmjv(x3zJd-@L@=gGBDup|UVNy!hI0*ZmmpLGy~BN8d@TCVIFDlP zt~xS_!);!?Z)!&basq+g=46g1qm@-!w<6Q*C!^I=E_0a&6?=pwE-L0!Zl%FVk-1mH zP~eq2)yk^>c&Zj_v_CEr7frODSJtiaRA2&57RGGlW%*T{8tL(9qI358(}U4X}T!t@JL1EbsC-BjU}zE2a1@|yQ!RXcals| zPNEb!6Xwr0EsIn>6w$9^i3#MXhSKm~8ACD;snt@{L$Vo1aK^0_JL>gPzGbVaG;!Ea zD?XasT2q!KvEkJP{#J8n$3yrSRpnP z%<-4j)nGu>;ds7aEOj{j=LM*l!K9eayg*N*#Y3`FVlGH^~~sw7z3kPwyrv{yaUf ze}~UAY^FQXcDw_;V*_k}$Yu7G<2B0eH9=-=K;lT+v+w51?%^o%IRTwcxLW^fMig>c z&WP6+4oJNbTHN4x;1`T1Lsx7kA~5G;S9$R9Ki!W%*lTh{|M>@D#Q^^=Uq|G zEj5b`2>d$6%~-;{v}Vn)Wt_N-Ni5ZMtqM~?AxdhwSwo=}{Z_BwZaE!E2D6xrZgn1g zh_T*g45VmI>EXnCCL3RDyWu#4$1l3!u(|yArru-f-&ZTRe^+snV`N*LM~Nq1_TCbw z_LeFbvM2%<87$j;hZOYet4jHNXA=)uMOSrkz@2o7bL$`4dU1Nq6_|~ua>+qPt2sH3GQ*H?O=b_Xyccl9-Bl}ES zE4bmB3ne!+kMwI%~5{rd$-lHc)kjvnP@%>E0DpG{iL2(SA=%iqfguuR)tvTUcgxMb{hYdsn z6rzy$nSG@Dqr>iv?r=OD=mt9%%;1cVY>&JK#=s9bLv_iUZ&H}R>uqCWv&`&tV*cpR zU$+e>#ei8f>BSZnP({UVt>nDB5~M|ml=-)PT>xzb9*xK5`fXm4(~~s1k_jT*Z&WXQ zZy}hhh50VnSI{Zx3vE{{4@r<%_Q)X^JyOPcScnMT(^vg+IeA`tf8be&IwGKmRz(62 zr?6F>IElTIgAH}~N=f}ZZd`y`;IZ5q=s#pwoU#fR%vtVeFOs+%7z3~wYYf^gkm4OGiV}his*qt zE~9cHB=#`C&9c3AxHDePC{2xyA&5@p-MBzyskO)>mTtdjsu0ld?>&XYV5>=Zr>j7P zUk>@aX-Mh=fixw_8=3faSif|JJ|8Vd(uy!vo=yw%3a$9$!hZweSDCC)`3)`DZDnpO z=qiDP`566ts|-UfNFq-VuAE7?OjlFFz;nwOLp6_mP~ga;szbu^M63hR>8|MupVkN! z8o>*>Sx)W|Z5NA7Grx#Xg)Ciq^b%y}USkCtop~5C1pg?-Ps=nd_2lxr_#rR$t-taSxsM1!uIl|x z`kI_XCT@*Z{<$H(T$MK!KcAtdtOIhy!pq!#xod;E;t!r=@>O5KPz;scz&9m>Xy|e5 z(qmeDXdOCRZFVu!?kO!UU+5{hXd7n7xdlJ1TwXZ+oVj!up|ENX+>+T#Vg$CDxC%=^ zBD4ZlIoTh^Dj#%=Htsr5cXYWnRhz)Z~I#% zvpju*`1z>pW-8pv+4pZtt=3?re&Zuv)nxh?i%rWYeizv&`H8#bv{A;3uoq zOK!ve*|xCKRnvd0FE{p45Bc};u(h*V`_=GEZ?@UxC@$aieQHUxI#aYG(~qve(kFi> z&3q-b=UZ`@SvjjoEQ`WA>F+N@r4rsHPM)Z0@I2~`fn@fg-d$>&&d-Qw7Ur8H)_Lne ziq{;0Jtj$$EYhP~X7k$$uuiyKQqQBGI#v zS7}+5LTA^UPlnT+vVxi;U%hfTvhm>+^_6bRdwBMyui{DEymGSoRFkCNPn}#Rx3Iij z5$Sb-;n|N%m1`}%m|o554Sczq?IdUQz4x)FWp>BDX!$Tzad)ePd;I+c4T}R6p3hOK zK9cRA!L=&Q&g)Ug`)U3QRQ;}|+6F7d-+h)Bp69|{`FUab4<(@=9aE}98BGfvMUQGn z>MC{c$8|qy;{Kv5d|Joy6xSuYu+8bmwkR_SM;`a$+ zSZd8#{?XlGiF@TP7RQWiu^1H(rH!{|KHB<%BWdfsy!96YWbex8tglGT_RiHZs$?z0KtIQPpKe-oB>Hr^&AtZ_GgTfM_=Mc0vAx9tw@UCLpmnz?kvv_}=+l-GGoiGjg2o`C_lVVj{mu_!eozqB~D`0bsud9xiv+8)}5H%3@bQu=zXqi%VyRwQAkr zzFt{y=U4gLR;%-u_UP<+?;k#Y-B#tZFV4JQ_s#v*R`bM($E*V5@~{0nQ}(UhW%_$< zQS;5|mtQV1e_r@VPIjkO=be(f+O{_~dnN6?xU|bItkia{+S`+-_XJHoc%@e>|FBB$ zbm_mV*L>P;@$8>ivvJM25V>hqJ9h@zhwh1aQ4?KWal>PE((ac#+-vk~Zmd5srRx^c z=km|b%x!`e{$Fu8I;Ofb+N$@9*Yy3fH4onFS#)Ys#Oggi!u^{+ca=7Gtv2bI?S3!h zi(PEp?_a5fPkGJv1wSo{-FtHHovCK_&rZwV-N(fJt$}#=8?)XL&dJ2?F(TH1@ph)48xxbtrXutjjgN_j z&Rq>`GozqcY;-fw=Ti}8bZTKUgV5|My7}m{a|rWi>!6vBn5#oK1bw;+VaR!1G((Uk zuh30FpHxDalCKA!VnWx1-t6%zwrz7_+qP}n$;8RT6WdO1=A7@l-#zD^dw+C4UHj>N z>#16+R=xe!-ttnQU}!)>@iMc6*s=2W%gOag> zi?IW}m9zf2`iAWq7n(0b*ym0uqFPnrA95n-tJ#q7>iI=gYwShuG;*U*U|S-===o&T zx68+sXF~r(!IX<`TE&R4nUwd}tUW^~ybt3$;9V+H8f4*;s#C^DRmQ=Y*}%nNU@qg6){Vfx~Yq=qQ(!&!G3b=0LFcf2cywF zRg>I+%f|OHFI)yQq|q`dPS0E;^x(R@&7t8#MAyB|m4*>l(_e)f+Vp}lW!|4*_1^mc z!-=LOY9AYC*rDsLu<&*=GMj`FiXd7Yg_D7sOU&v0*R$71F~y8rh8!qnBBn0N^)x2g zkxZ!Y10E&Okz?9jDPk~-8p`E_Sm+{H;sEGi<3GZk(cs$o_M*c4>NM*NLQ1+|s!7S$(IS_+go z_6UVx zi{c*x@|sw2*`)^fY2OC=Q8nBGjoXrgfqHs{XKJf5LyDC&dJjPMBb6>!vu!xu?#QmY*Z!!kKEKleTzYkARE=pG)6@tiAExiCuAc0p zb}8pIt88|bW9PXqE2@l6hdpwyUSPd1bo`J@J6Q3V*gSn8JfD*EcFLN4H4GB%5b7|< zab9k>VeWFG>6jhcn>qQ+e)Blya=+_3O&nAVv9;H`tgQCZr@639_FSO5{sU_jm*|2Y zo)zq{_I~dyq0uVBpKbZAVDF~?tthb(Ho5Jd){>q~EX<|@-nC4-vfM>htpz zIzcQ_2^aN#N~VEdb6od?268eE{&(}?yk`xUX}J`4oBujDs*i{2nXHj%@N%z)f`H4L zcQsQp$K@;Ix+na%f@~%`NU9AyOFh*H1=OZdrn3dXZ?C@vQE{9ksf3hqS0#5;99-Rd zw8Aa6k6qAtnrfZbK7r-`r8&su3?w|k009xi0s#^JdvmbSxBJ^A9KRcz=sR0E{i97} zS=-`_Adl#-`}GVE)o2p7tgU9PLgrHGaYpHa2}YDp;S^AsMZ~Yn778l5ED~>ZH8dJc zxHdp;uDTXxz{jfZgx$TFnwt7@zxK9oPBJWKEH`Y}_$YLx*`8!98mMVcx-?j{RO?Jv zET2YLcy??|>8hn<40$=%byj8bRG)6#8~o6wPreQR)T*l3_i$$0QeHp3pSmILviGSI z&l$_nnWCr1sHm`D^HtNPw>4#WmT4F|STu2ItLU!k_I1&jvT?CwH@LQF{xjq2%Z?bEnI( zzVUwf(V5!Aopb48wbGnkMPGiqcqZdv|N4>A(j!M*G3Dji@LT0n>Z7${_4Khm9<$kq z+j9bBRp#)OAp3Uje3jtC=cA0x0@&MGhaR7OHvxuf(_oC9Q>|*4nA$|y537_G0Dr% z=jLkPr`wt1>-&#Y5}(q`ob#>wo&B}e5X6u7nGKWXwdPH`4EJ~bv}KOd{hQ6o5JVrD zPj~(Aw@lQgnU7tQF`58aa)Wg*C~QNkblqFf)24yq_qX0ze~?PbUJGLq^B^4%c@5Mk z1Z&_W97I8+Txd3h4q$|40+H9S#5(`XPephE|480eV2>5K`p=L-{@Qmi|DdOqVQxdP z*C<3$Pbxp8ckNMUSi5?lXmA^i$S!PwxrO)Tocvc$H~!IM7P}8Ft#Od#O}#Y}5Oz zR5I(L5*wq0Q6*3=W<6eq^5(Gj*)-7_eiH5HlgwlIjlTk|$x;!5MrngM#D(a9lkS0; z;m-JAVOJ^TW{Jk53d;9E-c&Dw$Uf%+cI3(ghKG^R0$l_W(ST?O@d65dg49OV<<7}a z2@H#Zq08i&c?KgHb_|l*r- z9NEuUPG`}%xhj#_P_lWz9(g2yBKL8B;v}H*T)L7?lL1Q0DeoOaY8CIRWQ0MIF?^sqwXE%LgE2G=^eFA1m-(2aPAl~yHN?KWhAi#h( zvG*Vx3tGm_LE6;Q%fpuhBk3H(@Ld|gY3xWCPsJ#xu97cKDs$Od=n)7HT#$yP2^Y>S?#&j5 zWiOX=-FF2=TTYzcuBFEX%T*s8e5nn@7C1Ap0DPT?)nuYEdxA(u(^-g82s&7JB(sO) zxyqu!dKX+PL9?ZEb`4M$hopg3_O_i4Bq9$+P&b8T2O0oZcvw0UQjDs=535gKvQf_L zQbUwIw{irK;p*%hZ3-fhIX9HyuDFFp|Lc;W+qJ=+AK1Js5j!s93z11I$r=SoH<`qT z#4@YVSSH_xsY7pWG6fH?#4DC%4w$KTLikeKL=8nBNWmt7BlLe6vRWlkp)}l{X=vu+ zPkl(2G2JABTBE(^><(U|jWrHWdV?aB1VDouQAfQ7v@aP{q0v%8v}0y~2skc@9)cZU zPkq2K5yzweJjbVGjXe% zc)?}hGG2YuDZP$1@va_T!Q$nkqa;#b@xaDZ5LdGaQ-3Gu&KJe`W5cLM}PRITIJDC(v1ZDp<6`_+N7bqS%Wg#}uz>-@OtbH<;iXaIyAJ~1C zu{L`mW{ts__H1KJq(2S?>n>Y6aY9*@@hFu3DT12BgdxF`YSh(_G}bu%eLYvG_R;W> z>GZ2mh)F31U=qOA^vcdZonpip?Z?~0r6Yb)T+SJqSme+{!u?zeR>+XO4;E0uFHbR_ z6ESWAZUYulrak|F2@HYEhgZ*~lA>Xza(MEDJhrol$=v6BYI;z@STt5VyYrr!c10#; zKNk}TnjiK#xEZ3q9lN6K)!e%1pf1k%UQ$^)k$V&c^C!~Er@C}BYzu&>^sxSWBOENz}MBW<(>^ybdmbNNT@`g~;4kn*c`r@iE2X>QP5tD9z|kt;Y>D z)c|!2yonbpZKliD^eh5Hr@XNrVs<{wm8l##KYmh3Vrt?rYPE+V?18|~B@SyX zwYF2bz@=_gx2xMW=o<=%0RQGY(Rvh;V+TA$H8rForLja=h|~{_Ygc#taHuyFEHC}z z7iIIed?xEy3XWq*g9lbtY&l+A)t`-#I7OFESW|Cs)cN&u>d#&ZFsPCh3sn{NbX2HS z{BI7|*Ya~TPJL^Wzy+nOn9CnR$jU){vhB$kfUS6pCB^&Zt*PH}ezJOG?enkBDX&cZ z@0+s)y9OzKddhak6+jsu{QZxNChT-BX*pr|*_*>?c1m3QArVjvd<} zhDs%)5j>!9(ZXVzl2yO_Ag4;Xo=NBx{7FV@y%o`E*A70edc)ZJkLg4Zj{({p82%v& zTWAU0u|kHOubbrzq7h3NnzW5yy6{({;=s`UX%Lmq?k)>Ne1iV#u35rNM`Q^M2uKiWG>B;Itw)5hHz{| zBhD4&1d%EGy58aG>d^r2G6AW7etUM#SJAQ2K-+rrj9MtWJHl+eKnEKw(kc1&EF^T> z3f^VoI{T9;0}@wO6&co>;+*v)>ZQ&O-#}M(ka^z@idn;jL9SicVD7PJWwW^qULLrD$mF zq{=DPZdgwJtDhVRhLZg}mFHanV7Hi4SJ9`Rw;9ezmI-_^(92{_`Q}NQG!$+;0M20u zwXJ&Fiw!x3N0+)K2T$bb{zmJ$h~Ng=Q`Dfv5YcgM(Wf!|A`>ipsi1U|*+E%wI!%k5 zmUC}%Xs{McW-Q+w2L&0-8foWIwLk|pC~zylC>{&GJH)o9pIaHip^t=h5vuu^#t$4C zn{z47?FhKXuc@zz`p@Xp9&MtifnL4vlOQtdU8*2aLWJy*n9O@1FNb{gk-;ht&u_FR6taF_*Q954w)P=Mk3;5y7OM4RsQoPp3Ml27+IisM41tJ z_ge8f(|y@_;CZ&m0I{JmQKtvC3yPHI)QqbJRR`YnWlI`Vgm2=v1X>qs; zI0Hd}h2Ud>enKp_1lJ#mwH(jkjhKqkcKpfOvIR7Bj)v~FPj zV9p)$acv}p+J4zOJt}?^qV~%B!ucQ^fubv-{uQDaqhvjQC2#dV%9Okty0E_}F2-Q7 zRnS$F9MQye>9s##jKkRs!?^e@Ju$fnSWjl$Y{(u;`v1D$hL=ntOvyQWxsUb!+7^9`F=ehk{0P7Z+d*)r#kd6aiTzO*1DE2ia0D z64McHZ6*)Ph{Rb@#97W4h{gDrFF-vfnZ$Og&fr-5Hd7orE|2qzev)(cmF`*Pm+$JP zvd@+;u{Do54Hv69W2%Kk?6_(zbGw_sAMn|ko8Ys#~NSmvC*XyE#KYqRWt{Iv|{+u^IE38p*&=4IFh6z8k+D z`J1t&hjH3^$3twSPJ4yf)Yx|6vpP}dJ9VI8S6POMW6K>I`T9x7fma2MWR++N+V==t z>b}oD17Mw3_HANBk+Ev-CbiJfb=ff|>eLFUo4fPCa$<+YhKk5qE%ZQ7QDZtrnsxut8YbD^6jr%-}W5zaxgh-0(gg!!Hv$ zL-H4LKlS{p4hCDIV!(j{0qG$F0e$<@K`SOk8;0*9qJk>Y$_z&4hEC?THu?_kN$N7T z^8!d+hiaAmMMhYwzn zfy>0q*4y-y<7dw6rGYS}K)p3<^V@i^9zxz_%%$GvTogFo3AEU>M3u*bVtRY`06Mv) zp#9wSZ3%2 zmK{s`f@Dd*8wND85|?90MZEFDafvXDc>UNAoEiyEyAIzD9dWBV(osxr;Ux?Cx zg>0`{_&G~OK3nGvktwKy7hTi`BJvO=q1ro}4L(^gc{S^qk^x}}L!S~;UfE%*lDZFO zzHA5qJ-JSzjpd?Xgu&rlGU{i)vK=vB0g+MY3`1Dw(VihtyQf!w^qGsn`)WTM7KdQQ z2flx*`9ZWk5s)D$w7j<>>BL&jwWkd%fXuf7hJtHNmFeJ2M`+=j8c79N$F8-zVwWAa z6L+PHH*7mgU6{gyh&R9_(%nXt+XaB=b)a=ReR-?$vv#xsnFyGzzHfDiz7W?$j&JX* zBqPB)FC-yP9G32BP(r+!Bc1!1H$qoz!9)%|!xch%f21&A8HEpX*q{{c(sT>lz>v3s zr^k}K<4GrSeZ;M($fsvbZWPp=;{teDj7Vz{h0fZ-&)&ULmgR)s_~l1JN;H9_&po|! zf3%`T?(Cl49+LpF7O^){y{bqF+rCWfhN=lMYwFP{_)!}HTdWG({Lzo`l0zN%Zv`|9 zv)rTqRXCAfFU)^0AZvX)MPo->X9q*$2^m@_NxEqUI!RfTT9xhc14W2-FIWk>GcA%wPlFL7VfR1Nq>NWT>TcE6ABIQjkF`K zqXr9Uq?9PKYs2X`ukqdN;5@bU2<+SM{^gi9$`~kCSs_}RmR13nQP0YF+HXP*Sq5iG zX*@{Fd)SGsee^%%0tcr@W4&G+K(>IlkZS$OHIfTqQbmTH*XQ#h95RU{h{>)`{#~Gm zGA|8AO_4`JtGae=4I`^dw_L}m-sDde=H{N3Jr#)Dw-X(|lE33NP`GB=XMOY8EdRT&0nrvEp(ooV{zP|Z(xtW`Q z8CXSg)~5h-0|V@D_5?;^?~!pahIvbxgxj{i0BQ|^mi zV?^pAxke;uB~=vAFjJxWrMdy{U#wjh3RazjBVC7Pm6&RyG1#*l%@HQkK2c=B@CT^* zu#00RVY2ZDm6SZp9=C6N-8+JfKC`dZWG7Qz#p?i?bsab!GB~=A0N}!J!=}k{7s@fy zuD_HpCV=y5@5=t={DU5*lgg)_+8WYEYuQ=vYEuQK=qFlKJiN}iQYLiV=qGL@24Y|5 zwo*LTIfg*Za-bY{VqVqFFSEBNAYs9gH8S+{!-jOETk(~Xs)pi!UcWfs3ObalHRSty)4RM3Df zJpp=3yplWzkPeKp&C*EfKoOBbfO{bpHLN0`42=v6+4Pd&{o$UNGhZ9EMIJ&Gzmn0Y zX`(5uimo)>-g~d+=${%T*Gs=rWuhYaZbew z{u2u=ze>}+!$cq>hS!)j<(MNm5stZp9Xo%mBH;Q$Cz{O#KH=OA?P^@e$qsBpB9EtV zVre#;o$g!>Xc$PVz1-jD{zNNvP@>bt2=2XZD&|2))jt~7eN7T%Zk3HcC2f<9@8OX! zNDONaa!(s9lT9Y2*izEM57qg@w5s}AlgK+1l2u0#mr0V2nTa)Ve~uE-8ALF>QF_?? zjKCXD<8piz6~HNf`=UbhvcnV3uzd2gWugC&?)5R&>RmE?Zu>tP@pr7eebm9k^`%*c z55Pc>U$(WmqvKb*KhOH%xXzjEw{=US?r~Bbj(1%wWjz&mPMW2>Cc*CFYO>B!lux#H zkWSo0nq*^Y@$niDL?%RdQE1@qbrtJCy1k7A353W8BsM`gQ@~pHVbb-q3|k?s7Dyan z1Nm9WSN0LZKePpQn?ISsp?hH>kal)5A;|cnu)!-^q{6@jb!bPfMgQ6psb+vdKfAiY z-RGM9i=B=~&OX^9uBQ-X)Mq3f& zDFZ6iYZ@b)>4aBhi6h*ej)paNk-fFx_x41Gm4_a1o?i@lvToghWUW#tf>faSlOZgoW+DuIE#?J-17=QAqt#C|zgxt*AGNaqNh8R7`TDT7UeQx@&?ufow^sl2@fZ;ogsB3XxzSM=#4L^g35gww+H z6e(Cj*Pdqb(*OnBkktXJZ2ANt(82yPVyva+HgFd>wDb;*&UId;s4bOb~{wg`P6<<1vKB3BP zcQy~T|H%d?*+M7PF9|HUs#+0SRbkaLQQxyxQ+4~x93lS4kkGeNl93)|pWK46=l#p* zdwNYO_4m^_UcByX&6;`IS$R{duBgC2e3P8UnpO9waooIy;jiZ#aqrU}EeHgEPA;5$ zO``YIOwBQpl|(KJj?RKBpORxR5MMBXC2W|MpMM8@kJ z?$g28lQ~!U?&=H^84NK`sqHWCRJy4LpF7XwC=lBp2O21Le_MEq^g^%qhJL#z9#_U4 zZ0}FT?;$+g39+azt1pVUEm$91wMIShv=Z&F)<@AA**PQcGLG3b$kI;9;z*NH?Fzc5 zf~SgL>~_W^JKmHo6*Nl;5zHnxm?9=lkWteKnz-RbO5DA^1$d#e8;lN9g^Wkys&NY+ ze8zL%?YK4GUcc$%Tf$wFa}yP0y4Q9G)+i_jtx8pB9fF4?ZSlj6wzHe;v&$+}BV9@z z1J>EM@_E{$cT3%RtM=xxF!bYXyYX(JRof>7sp_=OF%<6cOFMKHd!CkvMB=0HN=}1~ zk~-EQrfU~r{s=dBcOp1c=B(3WR@K{eQ^%{G{$j6gGMd_3zi4uI|D8mz(ADJr!xmEz z#X(Ix@po3H^RaPlzSQCrrfS!j@0Fu0k1r>0_EOlH&DMPS1vhu`TH+`71^M*gLv&Uc ze{`H%%{wR3@U*emouCGJM>d5?Eu<^}*x39CoPovJo> zZU`F!>>dI&MbIAKP5bfS=u%UIPKjx@q#Q_MG}xPu)|D(Xhw4EmQ(Ja??Jsj4)jDix zC4wn08fd*Vcv8E$-1==k5CT#D#eXiat?|0<_~@{oH+4FKo6#EHh%09LM@IFc-ip)P z=5$g2pGLKrpa>+}+okpXC-mA?`r_`))pghY@=1jk4%-6GH}w~IT~dahE)OpECHt6N za5tXSFd1+xt`!j1=P7nXwA#M>j&3t{<&SVB+)_1>6NuJ%IRZ(BrUg?{ow_&@W|lnk zSvbEz?vi(Nop3PbcqmU=yt)#FJ^iXW!#nUJ5BE$5<0}Th)PYazK#M@tY+sB(TC|X+ z!exB*O!O;Ocu+TjxB<8d2p;c^bA?In90l)kaf|Mrl8d6E=I+0_dW!q{x#Z?~{@A>u zG;NnW0ed@&jZDy{&YL8-ZoNB8_(1MGROPdMo$*%gB-1#mf}0fY=SbzKW>mNY1HSjT z=ueZ8-X8o$o@{%cYJ0*&XmM@V%1%G8Om4wX-)VQU>x$mv@q$WvnFG2FiQ|2+s@bSk z3+$PF6q{ba|AlpgzSOKEnMeA>{-a3YG*b5m+1fb;OtX=VJh}yv2j$efv!W5AC#Ix= zw_iYAl8mJb_HfIb$JkMIKYr*SC%GgOocQV8I%F9af-v6l_pCUrEZu%9EK)?pEUlli z*>M|*iINTLl(E$NOo=y9i4OacT?h%ru^UoJH&~KUk%>277iJm=Ba67AFu9^+oYKct z+SS1oh!@Q!XUz=q=e}3ZX~crTy4$8RDyL&(O~;+y)p5y?5V$D)l*N=dq8?g2#^IAO z`NNod%R}R%U~f+v!24VQ+v|~Q9q>X_+C}e^H_qJ#wP&ZZKv?08ovB^xbtE*a=P_;= z_e`w^$le$vp1XlyN3|l<>H$%fI45pHwLM!KF>}?Qyh-{KP|LuUzSiu0X5CDE2PVM_ znFnE2Bb3n%yp^eiN5DqVMdA_Sq#0lX}&&+@~PKXP3 zKLj)k3~JwZo)+7;&m~np&zMuej#LS>>aeMmok}Hdv56~W9gHMvI#t|V9S-9*Q%qi*Hgx=^bBf+VlMm?I zC3yY5>vrQM=tdWlb2dK}bzh{_Y{?&+YI7Ao#;WNld-O*yoSj|zU{)m-Tq;T6x$;-1rgBra@T}ZW>CMYRg1MaS1niQ?T1Ksm>q|O#g-UBL*le!Uxund}#OX^S zN=Rtw#K|v}v4yEf^=}5%N3>NPeCj1p;9FiF_Y)#w6KsmF7WXnIhvpT^)fEBo=VyE% zE@TBsdk4(Q`~k;PyY1TC6DBCf(GIUmP4o3Z(hyQ;%y?&T)#BiTzaIF49Vw&QX;b@$ zxU6ZP%ohWXvFqdv5jgb7z3SFQ!VmIeQuH3!{YXKIPT2gKOZl>+^1_RQJQmHnoz6iC zm|FPI#}~cS{Yfo71T|^6pK%RV467kr=M0d^JsQ2WHX6t6J%h5tv<%@8-%vn2-iW^tT{Z`brsh{QU zm#tI0ywhR0-AEq?ipLkd4=7d)W2ZsqWGgz%vEWvUm8ez>_Y`ShG z4=w6Pc+gvF$QWYbNHnMJi=?k7U7JN{h*qMy49h%$nz(SqUXxFPu-wW9rADB-52h2* zFa{|Q;swuA>n7zty5+q;F+WpE$(ZZdBatV zPTM~hkM5t;ft;?0#yKC^_0ZmLeiN+J6Ia#y`ffb}o>gkm!WdUgzyvkeTb)LqvsJ+n zms6`@vO&)Lc&I~_`p(ytCoZQ(<78FSt%2vPdor!6nmsf6wGemh$K2%i`WchwvYJqvigm_8i#F?mq#?}xUMEaq0*mqmH1&Fh~cAul3@ez ziJ7A|$~cZG`e*gUjHuTwJ2K4dvZKvv!aA&7qakOckmAMyHmKqbAX~T>^^=c{e#qeAEhS_)@Se+HwZms= zL+orOu0N+16|)_8Y$LQo@L{(#vtU!b!1DW4NY1+qv!mLov_bluq0k4?kO~0uC4u(M z$OHg>4rs6-<3wQAVpF4>r0*_+Zo-~c*xkCJ4o}iH)#nieRLJ(*+r?VPb(Pw_%2aeDrvnU8~?1M3f~FdZ0Tm z=(+#5yOq;Ohu_z;PbuIclp_tm`#|Gy%g~gN^3flNY?L)He*1cHy$%S8`=w6%#d^Ao zBa`+=XRJ{A(Hvl@B(saNUlAqr;wEkN@lN9WDaCkr*I@>pWI~Vl4mxQL20S^33dSgw zh+vEaGI{*0C5y;t%C#m1B!F104m_z)imHdui|d^VDtNxgCPoZ=fJ;5;9;yED^B-)7 zbKH(k5?2#m$6A+$bL<4|F&cvU*{lT1O^=-hbdVY@k`H{q8US=~1Pzi(A{oLA1$=M^ z=NKtA^&xlA8v_9PKi20z$gKvTKrrWfLr3dEi)gC4QvV13Z(t2^}*3XZPqFuLp z&U>K}kf#4|mvEnossux}3Xod|7ni`1Go7trX%NSDApWp|8K}GMy zRV3}r6b=SpU;f6g(ZB*AWMx4xO)9jt&5L_9Gm6dpSJM1KW1t){dpcT_U|%VoM!^_I zlxb1m8B37Aawdn=i>ttuCi z_qDOl2Afo9CkOia=|6&uUZN|?){D;Dn_V?W>c`dHKaeFkZtKUD`DZS@l4AdQ9!5!J z0Zs*F6w`w4#jOHkgw%^R5cC5C<(_+bpFP?!m)ya7DG`CB7W}6$`Fe4Ur{cu@03k4r zXzgDr#gJ-v!0F_IJ;*3l^UCuh^`8{filsa(LEYjKb>%QwZ858aRQpnSTdq11LKb zpcA)JI2a!N4JruEw9ofAW9j4%UiihQFG-V^}W9fGESYgMUrxDkE+>%#0Rp7GBcN=0S%p7pEIW4rD_b zc!Sb1`a4KFK-sBaHYp>(I}e9tB(Gtf@FyqrHz#a~8I0Yd)#()zl*|H@^(!X(Xrp%* z;|@Q^uh?jSGYgV{4uPf>XrVYmkQ%)kWLNg{PH$boO67hXIC3+aWPw zjyzb?*T7$)A*+FKiqQa1e}$@!WQRah3UEDj>ak+`wMsB30*>@gXGoA_ew<&<2>&_* zwokmk02=&a&mcfKw7_|&tc6BZ^dcayf>4x$+SU1QN;i%)q~{e;^a_}(2~by_nDtmd z^gw$>wV;7;s=#_7{Gtp5f!Kp`$=9+j@#Rj9V65K8bn^G4oe;zf_5Ez*L7e{ffQ_#n zfN~_dvxso?6Ak+4Kz=UjXUdwPo*~J9+A_3}Qq%o%{$X~!(QF;NI&~^yhxI+Pcj!=T@9Itk3?@rMyO)V5IO~PkT zcG1)R=Cp8j2$Ft|U;Nz0{maioN)cC}%=u8TOvlnM99pGy|BEZ3_R%_z?#-P46wz(m zf1*atoXGFPdxWhqEgNs9|NYG$;ap;{JrA_ zWl;-3o=D{t$qVt~a$Gi3{NCU#c@6#baGuoTy1y*WBkQMqY?Wh~Vr1yH+8Ne-x4QyAXgCX6>U8Rr_~PKv3Oe9761S@%R!LhhEU3s!P6>$f*-Uw`2T8)X=T%Y)}( zO~weL8DZS~(I=&vh)s7ig|B>$31Ya#$nEm_$@~@X|w*Nv=awf5Ur*`Uehh(e5fakAz49(_dVhh@?Xab zyJUY>xgdam_P$08f5!{9c7JasaGX+?a>N!x>ONH~<;+MF5EKo;MZ%1$uhsVZBTU`2 zc=k|_IyG%I1xj1;wl)6>^uQD$A0OCOw=o}6L%_1Z%p?ut{k*S;7mlrCnA56*+8onXu^mi^jR@N zsS3=8%~2k>mLp3Sk}DzN0yo$v4U{Nrh+q=zQE=bWW;-;8MdIw@2?-JZ9t80t+cCb! zD@8tZ2=UKw57ZZ*J#e7}6B@&Pd%nJ?U+?;ktTkS%Ix7-IfvY3$9neKVfOS|JzDKGp zh@#Nmj?-%zZ+ssROsDe_KhZhKz5H&0O!Wr^A~?J!eG^b7}^KoKN1RO z6r5!PY4YVO1-ZN(H_g<`*jR!3)#{6OlDrIR4lQ!$242`vi$-T{`6_zP`+_gM1f_+y z*l>(s<CCS2WoKf*Z9A0YPFRb(Cj9hVQbDYm?fT%Wza zTwVijSCt;ODBr!OFT^5kXm|!*UOC2ky7^cfG&0ARkNn_MPo6K}qR?t`$@(9p9) z1K%TW0!yl9%Pmtk>zo-w+&Vr-p1CNc*Oj7cb0}K&Yx3;s#=?6}4v9>AoW%+AL7Y)C zkg@dOOJZvg{7&zJ$v#20Lr6kd+67w*oc#Wi3C%(;;Ot-WRaS?F%AJenf~?&@qVf2!r1SgBc^=QM2FCs3K+795jU1CuAXdd?*N>Gx%T+6mD9vTEo9##%Jc$%k4?i%15a<77)`fQjV!vY_lK`p?W_>ZST$RDLw7 zzV}o$Ncv?a0+W@fGwFel722EMHZi(Soht2L@rfw0n|}eQMb$)2X$4Wn-n)ab0}R`3 zqR$>(!)^AD2JG2XzIE1Bx?9n-(P1bgU9Ji_q!GScBw1QHGu1kKHVJN2!?WOS6nx53 z<0mdI#?sbyteE;g#LXvw7FmxKqgAWh{AeZtl|$MUzjU>$0qNJ7fjyr4^E`r~bC~wf zWksi*z4xj@q=tXi>)OGStOzdcCurO6)c!s(aSlAWA6Qtdu*&zu2YW;fc@fVp4{A?R`_+{{r=@(YHH$P=JRdp*7Vyqy1Na;9w>g_r{_ohr(LJ})5ph_8adCS zx$9_azW2pb2HUNy^hALT%p!3 zDF0|{{vJp59=d+7b-;SPcudV5;-}}V2WcmoLk7c_k?`I7&H4Fr@5XAd- zd|1~wJY2i?Q}6dZzc)W#+oV>7WB?F*M)X_W?-k4EDCZP+^Xsmzx?7t*oLDP2A0ZDh z&?9`GPM)_1FE>-`h%INtHegJStkE9?1T#RTKgI04fa5_^w}GN@x0xKaw-e@>N;xTi zG;{i)BlPb3NznuC?)nV~uJk|0wB9fV19M_FdP=Gj71;m5hinB-`o4PPFi6M&vkk0s z9pOSHAOS2Z?^ zB9VdFg9Nw*5#o_-^b@Xu8}#N9h0-8>Cjc3*8}BFN!wcX{g3aeAwHvK^V2wUQ4=vJ* z$NX+74OC6`L+sKamK4%FAkgU#ApwatLi~_m0nbHKpO5d=%EK5gX-=Rxof-^6JcokW zy%#hYI+KF9(kdam0AaWYaWVv9p)_zLpM|oYsykSi^o_tMN)QjQ5MO|NbQ~yDN{OMo z|E!6FStN`*c+gouto!FaIMnkoG?5%x(3u_3kFd7dO89zi1@Sb{F{7L+r`ght!-#g{ zlmKEXN>sE&67YM>V@3HhC;8HNNl4@1fL+B{Lb2olA$KltL&9T1Va3}od0&f{g))+m1S}v64z?$VG8PT4pfr;a z(V2&BhlLqe)R7Trkoc95KPZz*$t>{rQBX7^=lnP?vB7o=AhrfHH>e4v5>fVJtcOl8 zv-#CfT1ePSDxu{Q$A&tClQB9Ev0u{-`5DNl-z5!&1IVA1`@IqatRAD1ZmlFc3>3|h6^hfqW3F(7j)bXJdkFNYOWgCW5SH$W|!CEgQ ztY`ys0eIdaewl*C~B4N2+?iM5r7q7(?}6O2*6WM%w) z02s6*Ht7?w(HI!zVf1!c?6<=|0kl~VwN9f!3qJa%SMNM|iQ=ho#DZpVu_BeWO6d-N zsL)q6TgvnT{bsSrnU3SFaK?-?xG#nFRY?I1Z1bH1V$8tIS zzKF|&y40h7x5@sTKt3MBF|n`HZbqJT=_X9@Pi~1w^+0as6|pvZmug~%v=q0^0G?0Y zY*E0P9cW&AL|iJG+g%KDTtNI9*SsXFWpUxgSAh%Sa&xIuZ0PD|i56C~krpie7UFRG zncvzR%}ea=Ke1l4(vM6UtQbOwKWmL;bnnsRg;d=?)y93_4XN{HJLB~=dEcJFZeBy2 z_}7=vthnN`tFETCw{_tY3Grv12>JJm!^fZn`KcF0(b$w08->yv3TE@J&q9!bOTdch zQM7{2T)Lv@zaq^Px%A4l))iF@8oJT(3yTF!gE6fZ+yzI#NeTanypZV-;TT(q-2J$Q5$_Ne-y_V{S#BCm!enRtUd8q5>hW%wcT&Nmh!tvH~p0g_kQMRd_SbmNv_n! z&_q6+_m%|ik3cY|@*v^mdoNZQv7sTO?OX10TyfnzvRDcE^Y~k0sVF1{YczamFz0saIJ-|k&Q?lGnymA@S zTFE-$!5!quF-cqF9WyB%9uG!i-be{|u6YkuOY;4SFiK1wY&SqEL`P|e7bT!|g3&nJ z!4;W<8O@35wEx)tN~Gr^1P!~BqH<-bkbfm#7M9Pg?0c20cNXTtRsHl!#N(Q@D(^%y zBRQ5#DqAMYWo(By4_l;!ePr>g`;xFl5vKNh+>SO$uRV1ANuPlU2*QdS9B3U>GXE>L z>Nwkb%T&4gk8Z}G5Rku9#_RLa5+NWw2OzqzB%Tc+VUH+2e+Q0m&qDZ2@^=Y5`H-5y zqE_};946QNF~Km{hwx!D&kP|!q-IF18L^5CnerCr*lkW+VdgbNNNgh{z~zvaucMjcgL!p3qG1k($<-O+R>33Rt8_l%;I!oVI zV!ij4+P?4Yz0>-(NISO_?tPo){Bw_V@7tFwexEP!Br}NAMk+Zm*9Qh$V!kRJ(>>Dq z>gheW|2_W;q^XhoP_owE>iP!&lL`kgWM$*q{EMYZP9Co$iZe%e+gL2s5C@vnFu3Cs znr!Pyc+F&R0xc%!vV*PN5F4$fmANS?v)8zC=f!Ft*^XW3qF41`7XspW3>P~h>Fw0q zRNuUJrT&bth2_W#CQna|ILW@Xj=N41If6~!AC@dRB=z4ZeX;-{8hol38F;^Y+FxDO z{$%zlCaNun=AVkZ9=~hc)H(i+VGc>SM2RjKo1l8Nm{#a{*H%5^O0mc=CU;q82vSwj zYF4ZSt99nBXDaC0AdyJ4KH4F@dPPP~W`2+8)Ge#|QYxLfK(W zxLkgfzQ23xX{=Re+iqYmCW-~bAkZCw_L+Xp%Wf0l-*h?>Gx3v!R z((M_)+J#~O`KgPt4FAePxKMZwz=udR_m+05V$dI@zevpiR7tLJ$3ciWf^_w|j9nT4 z6~k6YsXj81U1{pLWwvYR)NT^lx3exxT9;&Fmd)mUHqI>3U%-!+1@V=Zn`B-A)y;Ev zdbvgYLAxnsTuF_{(pa+2{A?xd7}Q6(J7HK4&J0$_+v%xMiY>!(wf@;6?~=vd960 zdYia)dJqz7ZyROOjjLX*^BB!$TN5C>oujOBkF7Zl%Ev(8vR=N;V=mp6;yilV<)xSO z!pqVSqAn4=qYK&u`<^?Ep>-1RLz4f*>rRRq^85n zV=YkTi&;0u;EN8yypUtJBn5&N-!)wcXU}Vczhm)cQp5Old!Xe za@LtOwg&d)R&Nl6oFMChXmd)c&QUzED<5^X>*zDbmAa4B{VlHIdh3&7_RF?6iLT-# zSILB!+od2l(G^N^ov=j6d`d|D98}J+ zcF{))UzRZXsjzWVaey_NtNMS;uDMr>CMnizL>#5dVPrK|lYZOxl9AY_8HGI(v zrB_!6f(x@Gu*TbDHz*XhQr^|=SI-k?o4A(ObL*L+eyq+>RKSVH<$;OsMd!?w!+>+5 z={4>(ZjUBx^cN~)IZva=FgVd2N^%Dk5W9t4Nba6iKwd_>G5prcZGHL_L=_+l?U^+w z77D}TaCSjM?$EmE2YTh;ZL)`o{mGXaoWMs`2)@VVOEYI=pD1jVYb@Kb=vd7)OyO}e zcmYhX=DcH(B?}JXaaZ(|XT+^m%h`Zdm}ivu35!a4*A5u;Eo{OckqiZLCRh(uZsw}k z+btTpa?K}e2G}Q@V4kD>q6_)^x-t{(D>-MxpP-ML$eu-wQc4R+>J^{WD?IwKV{5Nz z!@p#3?$LwS!&UYU0+V1-^jiQHZHyh1X#Bm#@%ohZ-AevMC$5g}lo>n2v}kdME7UIx z5hAl%$9d8|&%JF9YUm|>&KG9E4u1y19sQs|)b3A#%MDZAE7`I=QN0l=)C+G^p@ug( z1Lwtogo+4{j%4WDWEC$=?iVy)58hg?N41!VYo7i`%(^X<25aoF@|2;wEN8DZ!*cZF zhqr?&n5S}v$LPoL_BRbnAuSxaHAibd;Bj+!0afzR>s!Sd^I5nxW1TmMaL!Q6g0|z! z>Xd;`DjZ)^0=sqR2k1gx0cX_bQ@>Rb6zMm!Ehp8=*u6%IK`nrHsmAXHY9lnKy5(o= zUZfT|#EA?sgizB2Az0B)0S%iH9zZBH-P%I z$}Z3^!i#PrirP8W=xrpVNtuOm#unVwLQ}e^0oZxQ5TZm4!kD4yBWk5ZQia}W*&v80 z2_;D`&@GM@?!1;mzoKmB;XWke=8|ctFlos6D-$yd%)@T5KCnHytfmZ3I3e27drr5- zwL@5iKGARwc6zITdCK>daDx9HY;D(EaG5$<;QT;J39h`En;8!75KJgmy)~{a>;sK! zx3g64t_(x&=LC!Uk<)1YkDNmK)K;#@xA4=hlm}Ny{IqcHF>yo?ruwS%g2OMR!Ib6A zKQM2H%PJ@n5qaie$;LlYQuvt?$B&fUV%w7ex9FRy=9Gzbd42x6m%?}4VI?wAf+jFd zpAMFUVjfx?Jj>Xg`C;#SzVG(F4fbL;UyyQdI3k62wf?!R@#j{>R2WUKbH#~{jwacm zyX))+g?R`1L;V-Vd%d!>d1Ky#Y$9wgp*fH!Ioz@cTBfMtS`D@Ymvl;!#~HJ$>{&1# z%%b)+{P9iEWV=Sk3rZfdbYa%HwVeKeS=P}q<7~r0KI7YW7ovfr{sy^*B~zQ+r!}Iz zRKn8J4e(fvs&jHX(A?2`XpeAbBUUecNtRC)@9}o7P?h34Ed;2OL5>GZ$bv@j5SPZj zqBu?KK+t1}g|40k3)HKD1R3vEv4nKNZ`ksc7izP6C!&->h}VSDfOT~iT2>9$sUZ$` z;UoH3m-@L{aL750k;=~0xUnOvcUNasH7xSJm$W)u4-RwyCagiyo3o@}O~&VU<7}}F zUu{gIR^tMr;;_o`S>VZQYnnI0cDA9uGaRZ-mNR}g8oL_D(HFI5dxS^X66=CP>p`52 zb?do)=-By{noW~(!D|gR&KtW^#C`fpKNLe1>+o){C+Q$T0zR_8W{Bo?pUgOIl#mkDNVzAcFYI&AQ{Axgs>f<3~=t1K3~$0B6a+JltET?Uuj)bZ43N1)c>I z^6I`%?2#^`XQmPY`_OV$F{M7u4A_1sIGH4Z-p>Em;OM^%inSvMdVe+c-2syRa_6bk zx6|mU1zWo9@Tn=ddH&OTGDN*Eh*!6so}yr8NKYG;|Gj7=ZK%@itA2iNzt%fAC?R>6 zak#eFzU@y2fVQyr55|9}Gvy$iek+w1?$^`(A#&f(gO@!jQBwR*S!5<&fzcb0Vl!q*YB{IArozM($TTec2=7HRmoz%^*{HU;N<`S diff --git a/Moose Test Missions/Moose_Test_DETECTION/Moose_Test_DETECTION.lua b/Moose Test Missions/Moose_Test_Detection/Moose_Test_Detection_Areas/Moose_Test_Detection_Areas.lua similarity index 100% rename from Moose Test Missions/Moose_Test_DETECTION/Moose_Test_DETECTION.lua rename to Moose Test Missions/Moose_Test_Detection/Moose_Test_Detection_Areas/Moose_Test_Detection_Areas.lua diff --git a/Moose Test Missions/Moose_Test_DETECTION/Moose_Test_DETECTION.miz b/Moose Test Missions/Moose_Test_Detection/Moose_Test_Detection_Areas/Moose_Test_Detection_Areas.miz similarity index 94% rename from Moose Test Missions/Moose_Test_DETECTION/Moose_Test_DETECTION.miz rename to Moose Test Missions/Moose_Test_Detection/Moose_Test_Detection_Areas/Moose_Test_Detection_Areas.miz index f593947bceeab7735d458b5d4dc48d541e75ab20..c9df34abcbcfb9127aba214b18756a8beb39ae6b 100644 GIT binary patch delta 488 zcmVEsr>o@*mh0Kg-8_ago8D$%@?8kQ_ne}Y5H*1X;Y4Cp3JzIWky_#E zFow}!crmyfjCT5e7#=HqkBJ;Jc*MGD0=tE|TJoGVg^6EYojAHKnYpA5&kc0|r-Z!^ zeXmne;6j0muOH4(TTpw#HMDaMaxhyh;e-bJ=?|SUV+2v;!c2&ON>PEEiZ)U_NnCBP z+S?X8N552y;JPMK1=f4S1TLuN3EC>#v?A7E1feC>#tq|t1bE5b4eG9?6cPe76Adfu z!x)j%FQtYD{X%Sgv)cIo#{(DzQvBr|I+CbHa-hLciWmB0PkZ=YTjc~$n#=N_>b@Pc zJ~GJj?!FiO*h%pl~X}a!Y~v*Z^{0{ zOD}F5252x!!U16t5@E#6gE55Et(7HROS;aB@xR*^)S=VprOWI4-uJz)dynwvu;5hq zaMI~?U=hbj1k?NFcrl;Ad^x$fn?{hN+(ywth>F0Ba3ZlP1c$UJNu_YP z8^UR?f8M(|>u-90gTdv#(sP-}FoQ>|t46SynX5U^Se={r<+Txq*99||wC0(i_TiAQ z_krg+1qCh?H1XBL5o!%;OSpzQ$DjsgttA?v!G8Kfhs+Q`7&c)hL_nn|p_vL-Qanjq zuCUtL7M;Ccszq>B5vhFZJ!AssRP*?4m2Fxft1*JWl4|3BhH(VEVDAQX*HQ`zKAMP{ z<@RBW$l;e#!-IYyw!T?q{Qu(ti~`C3@(zw9s+Jt6zn9{<{@BwVp4(PA0+eL3*r}>( z2d#??^0>S2ML%{De4VbUb>=j$RYPD4uEt3;OeM}p%wtM@P_nl3*S0$!I}@6aWB|)L|F1_#1ac33M+XNp^8)BzBW{VLJxdcpVr#1CzO7JOSL3_F+;1o|8#p dGy#c|equBM=##TzM*(1y`(hmi24DaH001|F6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$z(2CA$80001xZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^@e zQIK5;bT1!Cc5!GVc9XEKI|kW!9T+?Vlku)R0T7ceuS@|0lY6f;0Z5auuUr8ylMS#m b0*;rHsFxg*U$80x29t`g9R{qd00000ASUKm diff --git a/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz b/Moose Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz index 65dfac462abed31079a99a67521c3dee7d200d24..0abf3dc398fa393f23158ebd83f076a84c19cb57 100644 GIT binary patch delta 645 zcmV;00($+o(gU^91F-aN2{T9{NiFPKoOF}@ZX6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$9a9wi=Ge{yyE$myIbdwn5I|i<2rP${LlUd|E0+Mi(uy7=kyW}bYe{++aa~PBV zIb8N&boQeQYSIFnK69g|z;8VSV1 z002^7I5snrQRp3$o8}q_&BOozQ$a*blTqj$liKDQ0xrdqOvM?K59cZZp2m~B#vGGZ z=PCgflY-|x0fm#m=RE-zlm6#J0ubDjF5DZFUg#XV7+MghT-(C9-XOWptgcVTj6 fXm53MWphwV1qJ{B0015U9smyr000o-00000r}rWt delta 655 zcmV;A0&xAc(gU~B1F-aN33M+XNp^8)BzBYiZXZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00@(G zJRlkd4PlU3&slgPXf3jhEB009610002IlmF#32^+%z08(E#GB}e@ z=pB<;<{ARV!;|2{6q8)&5R==)5E1|Y0003100000&%^)#Q$a*blTYX!li21O0Wg#E z=0pOZ#*@0n9FunA5R+x+8UYxSfag5{hm*eNJpmb${O3af5|cpaMgi=Thv-HD!;{YF pLnKY!004Jka%E_5b#rBNP)h{{000009snKy4+sDN65#*<002-uDTV+5 diff --git a/Moose Test Missions/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.lua b/Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.lua similarity index 100% rename from Moose Test Missions/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.lua rename to Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.lua diff --git a/Moose Test Missions/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.miz b/Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.miz similarity index 94% rename from Moose Test Missions/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.miz rename to Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_CLIENT/Moose_Test_MENU_CLIENT.miz index 72176f821c920dc5c04fbce6bf7ed4631d539542..491ef97e22f6a45b6ef0ce525e2fdb78380bf2fc 100644 GIT binary patch delta 494 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_i z89p!xbT1!Cc5!GVc9RTBI|kW!9T+?VlTAuI0=^lOFc=h*pGrRgyp!KbGyyJ?6iYM$ z0Wy;tG8vP!N)VHCOBw-jla5PABWoU18b7gZ-O9ci10000C01N<20{{S; INB{r;07)X~TmS$7 diff --git a/Moose Test Missions/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.lua b/Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.lua similarity index 100% rename from Moose Test Missions/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.lua rename to Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.lua diff --git a/Moose Test Missions/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.miz b/Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.miz similarity index 94% rename from Moose Test Missions/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.miz rename to Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_COALITION/Moose_Test_MENU_COALITION.miz index 2c695a2b4cb381eb836058136cb84db46f59d61a..e1fcabf00323ade47c7cc97d623e50a56acfc984 100644 GIT binary patch delta 508 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$MF0SIVRB_?Z*_BJb5KhK1^@s601N;O08Rq{0P#lv0000T1K+Ly delta 513 zcmV+c0{;EgmI2q60k9Sr33M+XNp^8)BzBV@7$bi{Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00@)A zNfoow8Hz6nbT1!Cc5!GVc9UgEI|kW!9T+?Vlcq^L0=5~G&>1X~5K1Zm6_YzkGy#W` za7r`*T9c(pL;=c^>Pkl>LPY=ocVTj6Xm53MWphwV1qJ{B000aC3;<38008qx00000 DkQwNM diff --git a/Moose Test Missions/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.lua b/Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.lua similarity index 100% rename from Moose Test Missions/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.lua rename to Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.lua diff --git a/Moose Test Missions/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.miz b/Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.miz similarity index 94% rename from Moose Test Missions/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.miz rename to Moose Test Missions/Moose_Test_Menus/Moose_Test_MENU_GROUP/Moose_Test_MENU_GROUP.miz index a889a387972947469019cfefe99c069f0dd43ff0..b02e87abba6f4c9fb322e31d70dca5e68ad7d295 100644 GIT binary patch delta 504 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$c&HlkG}00XdT*OEdutlUGYb u0eq93OGhO1MF0SIVRB_?Z*_BJb5KhK1^@s601N;O07?S@0HsI(0000KKioC| delta 518 zcmV+h0{Q)gm;r~F0k9kx5_B&gNp^8)Bz6G+0A~XL02Tm~FiIGIl~X}a!Y~v*Z^{0{ zOD}F5252x!!U16t5@E#6gE55Et(7HROS;aB@xR*^)S=VprOWI4-uJz)dynwvu;5hq zaMI~?U=hbj1k?NFcrl;Ad^x$fn?{hN+(ywth>F0Ba3ZlP1c$UJNu_YP z8^UR?f8M(|>u-90gTdv#(sP-}FoQ>|t46SynX5U^Se={r<+Txq*99||wC0(i_TiAQ z_krg+1qCh?H1XBL5o!%;OSpzQ$DjsgttA?v!G8Kfhs+Q`7&c)hL_nn|p_vL-Qanjq zuCUtL7M;Ccszq>B5vhFZJ!AssRP*?4m2Fxft1*JWl4|3BhH(VEVDAQX*HQ`zKAMP{ z<@RBW$l;e#!-IYyw!T?q{Qu(ti~`C3@(zw9s+Jt6zn9{<{@BwVp4(PA0+eL3*r}>( z2d#??^0>S2ML%{De4VbUb>=j$RYPD4uEt3;OeM}p%wtM@P_nl3*S0$!I}@6aWCT!5L3533M+XNp^8)BzBV-N;?MGcpVr#1Cv@xJOaEKlQ2pYldMWU0m+l= zN;CmGlORhp0S=Q@OGE*FlbTCMB=$uB0C!<>WoU18b7gZ-O9ci10000C01N<10{{T0 INB{r;06xd(ApigX diff --git a/Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua b/Moose Test Missions/Moose_Test_Missile_Trainer/Moose_Test_MISSILETRAINER.lua similarity index 100% rename from Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.lua rename to Moose Test Missions/Moose_Test_Missile_Trainer/Moose_Test_MISSILETRAINER.lua diff --git a/Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz b/Moose Test Missions/Moose_Test_Missile_Trainer/Moose_Test_MISSILETRAINER.miz similarity index 99% rename from Moose Test Missions/Moose_Test_MISSILETRAINER/Moose_Test_MISSILETRAINER.miz rename to Moose Test Missions/Moose_Test_Missile_Trainer/Moose_Test_MISSILETRAINER.miz index 0ffc7a1c13fb047593f10f73fcd67c8b2e64e03e..28a946744d6df43dcac993de891e3910444974ab 100644 GIT binary patch delta 492 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$#0sYAdGe{yyE$myIbeBu(0Xqh+XQkNZ1ec8K0XzXXm&xk^R{;W_ZHkXU+0Ym|&m(c71M*$v}80`Ta2G!{S0002?k>IQV delta 531 zcmV+u0_^>{+6TMZ2e6tS5_B&gNp^8)Bz6G+0A~XL02Tn3VCw-Gf0a`~Pr@)1K5xnX z!%Hu290q7GO2PqQ5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z z_;AwcbYKz3Nd(jT<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDl zT&}R%+7_L?U#dlLRS~It>pf%w=T!6fZIx|WA*(Thz>;d?e}-`cykPGJb=Oh~2|k*L zn&tLkjL6}aQp1COA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>Dr zYX_~14Dz_U??pd$5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy z15ir?1QY-OgFhj+KOq4D$_aEYA4zs`Xe4%*N$UYS2HAKW7(4@)it7P90y-g=VCw-C zm)z?CLIE6?AM61%0oj*S>;W_ZIG2g+0Ym|)m(J_~MP| diff --git a/Moose Test Missions/Moose_Test_PROCESS_PATROLZONE/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.lua b/Moose Test Missions/Moose_Test_Patrolling/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.lua similarity index 100% rename from Moose Test Missions/Moose_Test_PROCESS_PATROLZONE/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.lua rename to Moose Test Missions/Moose_Test_Patrolling/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.lua diff --git a/Moose Test Missions/Moose_Test_PROCESS_PATROLZONE/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.miz b/Moose Test Missions/Moose_Test_Patrolling/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.miz similarity index 94% rename from Moose Test Missions/Moose_Test_PROCESS_PATROLZONE/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.miz rename to Moose Test Missions/Moose_Test_Patrolling/Moose_Test_PROCESS_PATROLZONE_Switching/Moose_Test_PROCESS_PATROLZONE_Switching.miz index a8421d310b4729eb411e8e2835d6e208f5c95c02..723555e63e0ed030ad024c7ecdb8a4678f3aed32 100644 GIT binary patch delta 474 zcmV<00VV#^nE}z60kG>B2{T9{NiFPKoOF})7$bi@Ps1<}of|3t;pC-BhxB7WqEd&_ zhN=>6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$ z8h|hfGe{yyE$myIbdw)TI|i<2rP${LlVD3c0g02HOJD&B33M+XNp^8)BzBYZ7$bi{Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^^ z8iFthbT1!Cc5!GVc9R`TI|kW!9T+?VlU_?a0gIEHOJD&>ll)6G0Zx-KOf&+AG?Sq; V9Fv1gDgpnKu1p;Ut4RO=007qO;x_;Q diff --git a/Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.lua b/Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.lua rename to Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.lua diff --git a/Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.miz b/Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.miz similarity index 93% rename from Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.miz rename to Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Nested/Moose_Test_SCHEDULER_Nested.miz index bdcf24a81dd8ffc2d66856dc554c9fe3ffb70437..3f660206f21eaa61776913e09a752cb3264f71b8 100644 GIT binary patch delta 499 zcmVEsr>o@*mh0Kg-8_ago8D$%@?8kQ_ne}Y5H*1X;Y4Cp3JzIW zky_#EFow}!crmzt9E^7Q7#=HqkBJ;Jc*MGD0=tE|TJoGVg^6EYojAHKnYpA5&kc0| zr-Z!^eXmne;6j0muOH4(TTpw#HMDaMaxhyh;e-bJ=?|SUV+2v;!c2&ON>PEEiZ)U_ zNnCBP+S?X8N552y;JPMK1=f4S1TLuN3EC>#v?A7E1feB=)y56u1bE5b4eG9?6cPe7 z6Adfu!x)j%FQtYD{X%Sgv)cIo#{(DzQvBr|I+CbHa-hLciWmB0PkZ=YTjc~$n#=N_ z>b@PcJ~GJj?!FiO*h%& p&P6l=vMiI(EE$s>Mk)d#E|Wkm9Ft{6Dgm04kVYK_OG5wv002py-LU`w delta 484 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_h z8S*L#bT1!Cc5!GVc9XwEI|kW!9T+?Vl0`fLy^}pfSpfu-mqj!Idy~vXGy$}e0Y*du aBrcOaE*z6%Mk)cEla59m22Dc%0002doZ#93 diff --git a/Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.lua b/Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.lua rename to Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.lua diff --git a/Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.miz b/Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.miz similarity index 91% rename from Moose Test Missions/Moose_Test_SCHEDULER/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.miz rename to Moose Test Missions/Moose_Test_Scheduling/Moose_Test_SCHEDULER_Repeated/Moose_Test_SCHEDULER_Repeated.miz index 0cd8202349a8f6bed2f9893925505f66f53172e9..37483f995bdc1dc3a644dc6bdbcdada84d1db955 100644 GIT binary patch delta 499 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$DglU-fJPk#IYR&d004oC-WC7= delta 490 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_j z8Qv-hbT1!Cc5!GVc9X3{I|kW!9T+?VlkP-30>2rPF&Gq+Kt)CY=#z&z#d0k9Vs2{T9{NiFPKoOF{Q7$bi@Ps1<}of|3t;pC-BhxB7WqEd&_ zhN=>6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$XX?@9R{0600000JF3}- delta 494 zcmVz*f0k9Vs33M+XNp^8)BzBV^7$bi{Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_b z8AvY)bT1!Cc5!GVc9RcDI|kW!9T+?VlTb-K0=F5H(HSR`wMi-ghLhk)GyyS_6-qP$ k1Tm8yF&UG!Nf48CN*V!llaESA0qm34N*xBBM*si-0GX5I_5c6? diff --git a/Moose Test Missions/Moose_Test_SEAD/MOOSE_Test_SEAD.miz b/Moose Test Missions/Moose_Test_Sead_Avoidance/MOOSE_Test_SEAD.miz similarity index 96% rename from Moose Test Missions/Moose_Test_SEAD/MOOSE_Test_SEAD.miz rename to Moose Test Missions/Moose_Test_Sead_Avoidance/MOOSE_Test_SEAD.miz index 865ba17815df208035b9c4911b61a1176228b06a..111b28b804abe885beb7d0ab5dcb67f15b07fc64 100644 GIT binary patch delta 508 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$AJF ylWAi_0p^pgV@D({UH|}hVRB_?Z*_BJb5KhK1^@s601N;O07L@-0KH%U00018zu+tY delta 508 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-Q00@(h zVimK38Ky`HbT1!Cc5!GVc9St;I|kW!9T+?VlX7A_0cMl0Vod=Dll@{e0VR_%V>AJH ylV@W@0qB#gV@D(}UH|}hVRB_?Z*_BJb5KhK1^@s601N;O07L@-0KZ@W0001LOXxoU diff --git a/Moose Test Missions/Moose_Test_SEAD/Moose_Test_SEAD.lua b/Moose Test Missions/Moose_Test_Sead_Avoidance/Moose_Test_SEAD.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SEAD/Moose_Test_SEAD.lua rename to Moose Test Missions/Moose_Test_Sead_Avoidance/Moose_Test_SEAD.lua diff --git a/Moose Test Missions/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.lua b/Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.lua rename to Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.lua diff --git a/Moose Test Missions/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.miz b/Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.miz similarity index 91% rename from Moose Test Missions/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.miz rename to Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_AIRBASE/Moose_Test_SET_AIRBASE.miz index 5b2ee3acefd26c0c2868fe87d1cffe139a10000f..444b2f4509f8999abe918a739c3a6dcb5b6ea201 100644 GIT binary patch delta 506 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$ zL=%&OL?^Sj89*utGe{yyE$myIbdv!@I|i<2rP${LlR`v10dbRmL{tG&lhi~s0ojuY wMKl38lRia9B(OgK0C!<>WoU18b7gZ-O9ci10000B01E&H0{{SvLI3~&0FZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^s z8GI@UbT1!Cc5!GVc9Z`@I|kW!9T+?VlR!i~0dtdmL{tG)lhQ;q0o#)YMKl3AlRQO7 oB(gsM0C!<>WoU18b7gZ-O9ci10000B01E&H0{{SxLI3~&0EOJ+CjbBd diff --git a/Moose Test Missions/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.lua b/Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.lua rename to Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.lua diff --git a/Moose Test Missions/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.miz b/Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.miz similarity index 94% rename from Moose Test Missions/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.miz rename to Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_CLIENT/Moose_Test_SET_CLIENT.miz index 5f00cf2bfca3b65408168ba30afa50ea1ab30ce6..42de28cb28e7ad4014684e31683f58b8c599b33a 100644 GIT binary patch delta 522 zcmV+l0`>itm;scS0kB>e5;I65NiFPKoOA&I0A~XL02Tm~K}r~Zl~X-W!!Qt?8!7+c zEsr>o@*mh0Kg-8_ago8D$%@?8kQ_ne}Y5H*1X;Y4Cp3JzIWky_#E zFow}!crmyfjCT5e7#=HqkBJ;Jc*MGD0=tE|TJoGVg^6EYojAHKnYpA5&kc0|r-Z!^ zeXmne;6j0muOH4(TTpw#HMDaMaxhyh;e-bJ=?|SUV+2v;!c2&ON>PEEiZ)U_NnCBP z+S?X8N552y;JPMK1=f4S1TLuN3EC>#v?A7E1feC>#tq|t1bE5b4eG9?6cPe76Adfu z!x)j%FQtYD{X%Sgv)cIo#{(DzQvBr|I+CbHa-hLciWmB0PkZ=YTjc~$n#=N_>b@Pc zJ~GJj?!FiO*h%WoU18b7gZ-O9ci10000C01N<1 M0{{TDNB{r;0B;lD)&Kwi delta 493 zcmVe33M+XNp^8)BzBW$7$bi{Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00@(Y zN)@vj8U-*3bT1!Cc5!GVc9SSdI|kW!9T+?VlW9sk0{$73a2OPmEE*J(&q^u*p_BSb jGy%VpFH1B59Ft^AL;;MGsY^!z1e5Vg9R{{Y00000BBA6X diff --git a/Moose Test Missions/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.lua b/Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.lua rename to Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.lua diff --git a/Moose Test Missions/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.miz b/Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.miz similarity index 97% rename from Moose Test Missions/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.miz rename to Moose Test Missions/Moose_Test_Sets/Moose_Test_SET_GROUP/Moose_Test_SET_GROUP.miz index 7358462139a46756869605fd1bf5279c3ea50ca7..04b19fc9b90d331a141ad91c09196e09d1b7ab13 100644 GIT binary patch delta 480 zcmV<60U!Rb!2+(q06DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^@u zQF~1ZbT1!Cc5!GVc9W}~I|kW!9T+?VlkA>60U(nppHcxLlYE~v0rr!zpIiamlMbLX W0XmaIphp3+lZ&7o2B(|=0001RVC3ll diff --git a/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.lua b/Moose Test Missions/Moose_Test_Spawning/MOOSE_Test_SPAWN.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.lua rename to Moose Test Missions/Moose_Test_Spawning/MOOSE_Test_SPAWN.lua diff --git a/Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz b/Moose Test Missions/Moose_Test_Spawning/MOOSE_Test_SPAWN.miz similarity index 97% rename from Moose Test Missions/Moose_Test_SPAWN/MOOSE_Test_SPAWN.miz rename to Moose Test Missions/Moose_Test_Spawning/MOOSE_Test_SPAWN.miz index 365a6bf2a0b5b455828fd8c25ff855fd055bee1b..aa66cc7e4bf73c151d8e7e4efff78ee7ce83f93c 100644 GIT binary patch delta 485 zcmV1F-2I2{T9{NiFPKoOF}&A0vM~Ps1<}of|3t;pC-BhxB7WqEd&_ zhN=>6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$k&rSgelMB#J0jZN(&@=(vlaJ6e b0z9~rTDTmO;m|4pw37_c9R|qF00000VnpGB delta 485 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^? zA)~DcbT1!Cc5!GVc9T5MI|kW!9T+?VlYP%T0g02k&rSgglL^pH0jrZ(&@=(xla0_c b0zSBtShyUM-_R-nwv!6c9R|wH00000tcB^4 diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.lua b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.lua rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.lua diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.miz b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.miz similarity index 95% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.miz rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_CleanUp/MOOSE_Test_SPAWN_CleanUp.miz index a494b6a0c6f62d03fa79a83d3e2548ebb4720abf..0fbad5640da89f2a9bf2dfb334fdabf294eda98b 100644 GIT binary patch delta 489 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$xYfb`|CzFwD6_d#)7LyBXDgiW; fHf%Hjcav*uGy$%YplnA0^^@pq9R{3f00000txVl1 delta 513 zcmV+c0{;Dp+5wB&0kC);33M+XNp^8)BzBX59wUE2Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-Q00^@m zAm~a7bT1!Cc5!GVc9RfmI|kW!9T+?VlTm9t0T`2xYfb`~CzFqB6_dv&7Ly5VDgic= zG;A~hd6Q{uGy$-ao@_@X_htY9cVTj6Xm53MWphwV1qJ{B000aC3;6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$lI|i<2rP${Llhc$u0gjUpl}-W>E0YnG6_a(9LIG5hxRo>k fsgv!MGy>v%l71YMKb9&1T9ay)9R?he00000a|YlJ delta 485 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^} zBk*tubT1!Cc5!GVc9W2lI|kW!9T+?VlhKqs0g#gpl}-W@E0YhE6_az7LIGBjwv{vi btCQ=MGy&w3AeKh~T$5;)9R?ng00000Gh*g+ diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.lua b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.lua rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.lua diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.miz b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.miz similarity index 96% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.miz rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeTemplate/MOOSE_Test_SPAWN_InitRandomizeTemplate.miz index d61f48736f3d0e791dfad839850d22f6238aecf7..4e68f87ac573b9cf37024976f125fa9fdc867ded 100644 GIT binary patch delta 499 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$;+2gb&lP!ca0TPp9gfs$6Y?Enh9Fw$!Dgncj--I0og@FJ7000wj;I9Ax delta 489 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^@Q zBge#MtD>;&cDgmUE fD}*!w6q8_tGyzSMm4rtD#gpBH9R`Pi00000q9o*X diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.lua b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.lua rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.lua diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.miz b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.miz similarity index 89% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.miz rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_InitRandomizeZones/Moose_Test_SPAWN_InitRandomizeZones.miz index 9098a3788ab948566ebe0343a0522f11ba4fdd85..22677aec724c0ec6dd35e75a10e67dec6419eec2 100644 GIT binary patch delta 479 zcmV<50U-Xr;{m6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00@(2 za22z29E?*5bT1!Cc5!GVc9RHjI|kW!9T+?VlSyzq0#_W9aU3?2y>Kc4(v#?LGyy-8 Z9dR@Pc#~3bM*;AYnsFTlmTmw50059l6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$s0j-mjV>AKg slgeX9Bwk(s0C!<>WoU18b7gZ-O9ci10000B01E&M0{{RLVE_OC013n0ssI20 delta 487 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00@)h zVimJv8yZImbT1!Cc5!GVc9Vu;I|kW!9T+?VlgDB_0!JH@VH+-!6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$4jVI*Xl5z_^OKWiGy&F= x$YwMF50m|7MZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^`B z8nQ|WbT1!Cc5!GVc9XPaI|kW!9T+?Vll5gh0`eM@3>!0(W@ah@^^=iiGy&L?#%44D t5tI97M6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^`0 z8#7V~bT1!Cc5!GVc9SY@I|kW!9T+?VlWT4~0_Pi(0UR-t+HNWV-;)JzGy&?9I&U-q VB9m`#M**6Xw{IN=xNHCb007Pd;x+&P diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.lua b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.lua similarity index 100% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.lua rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.lua diff --git a/Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.miz b/Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.miz similarity index 96% rename from Moose Test Missions/Moose_Test_SPAWN/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.miz rename to Moose Test Missions/Moose_Test_Spawning/Moose_Test_SPAWN_SpawnFromVec2/Moose_Test_SPAWN_SpawnFromVec2.miz index 344db0e5c406fc30fd684c5140dd617e47db6072..b9d49c61f80a7c3d3e5d6c13e805a6415bfb1a7c 100644 GIT binary patch delta 511 zcmV*2{T9{NiFPKoOF}e86$r^Ps1<}of|3t;pC-BhxB7WqEd&_ zhN=>6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$*33M+XNp^8)BzBY786$r|Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^o z8wgPebT1!Cc5!GVc9Vx}I|kW!9T+?VlgMm50&g3W;TaT@of{pKH*G2buajbJGy$uV zmu)lx6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$%I|i<2rP${LlecX=0&5$Si5oGKCT=PLqmxl?Gy$2DhHf+h y&sLM|RveSqZYm^4X#fCsVRB_?Z*_BJb5KhK1^@s601E&M01g8H003+N00012C*bw~ delta 484 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^^m z8~0HObT1!Cc5!GVc9V2%I|kW!9T+?VleKL;0&N?UhZ`}IByK7JrISx?Gy$8Fgl;qf a(N>e|RveSoZYlvulL2oX1_EpV0001lw&aZf diff --git a/Moose Test Missions/Moose_Test_TASK_SEAD/Moose_Test_TASK_SEAD.lua b/Moose Test Missions/Moose_Test_TASK_SEAD/Moose_Test_TASK_SEAD.lua deleted file mode 100644 index cb4f2a967..000000000 --- a/Moose Test Missions/Moose_Test_TASK_SEAD/Moose_Test_TASK_SEAD.lua +++ /dev/null @@ -1,16 +0,0 @@ - -local Mission = MISSION:New( 'SEAD Targets', "Strategic", "SEAD the enemy", coalition.side.RED ) -local Scoring = SCORING:New( "SEAD" ) - -Mission:AddScoring( Scoring ) - -local SEADGroup = GROUP:FindByName( "Test SEAD" ) -local TargetSet = SET_UNIT:New():FilterPrefixes( "US Hawk SR" ):FilterStart() - -local TargetZone = ZONE:New( "Target Zone" ) - -local TaskSEAD = TASK_SEAD:New( Mission, TargetSet, TargetZone ):SetName( "SEAD Radars" ):AssignToGroup( SEADGroup ) - - - - diff --git a/Moose Test Missions/Moose_Test_TASK_SEAD/Moose_Test_TASK_SEAD.miz b/Moose Test Missions/Moose_Test_TASK_SEAD/Moose_Test_TASK_SEAD.miz deleted file mode 100644 index 75de3ae1d37df34b2c28f833eca5d04132aa83a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25739 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 F3jl_+_xu0= delta 569 zcmV-90>=H~g97A(0+(ywth>F0Ba3ZlP1c$UJNu_YP z8^UR?f8M(|>u-90gTdv#(sP-}FoQ>|t46SynX5U^Se={r<+Txq*99||wC0(i_TiAQ z_krg+1qCh?H1XBL5o!%;OSpzQ$DjsgttA?v!G8Kfhs+Q`7&c)hL_nn|p_vL-Qanjq zuCUtL7M;Ccszq>B5vhFZJ!AssRP*?4m2Fxft1*JWl4|3BhH(VEVDAQX*HQ`zKAMP{ z<@RBW$l;e#!-IYyw!T?q{Qu(ti~`C3@(zw9s+Jt6zn9{<{@BwVp4(PA0+eL3*r}>( z2d#??^0>S2ML%{De4VbUb>=j$RYPD4uEt3;OeM}p%wtM@P_nl3*S0$!I}@6aWCTLL5(G33M+XNp^8)BzBXUeme%)cpVr#1C!f+JOMqE7=K>@7?XH^Gy(0C zt$#ELOkMy0QeQYSIFmtv9g_!u8UpuTlM!DOlTLvUlShCW0svr>8eklge}F0hc$2Dt zLjmrS?tnxB<#?0-cp8&Vfhq!Zd6SQM8k0_e5tABv4+{VQ00031000004U@lt9R}rm H00000n#KL~ diff --git a/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua b/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua new file mode 100644 index 000000000..c35d1b7c2 --- /dev/null +++ b/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua @@ -0,0 +1,28 @@ + +local Mission = MISSION:New( 'SEAD Targets', "Strategic", "SEAD the enemy", coalition.side.RED ) +local Scoring = SCORING:New( "SEAD" ) + +Mission:AddScoring( Scoring ) + +local SEADSet = SET_GROUP:New():FilterPrefixes( "Test SEAD"):FilterStart() +local TargetSet = SET_UNIT:New():FilterPrefixes( "US Hawk SR" ):FilterStart() + +local TargetZone = ZONE:New( "Target Zone" ) + +local TaskSEAD = TASK_SEAD + :New( Mission, SEADSet, "SEAD Radars", TargetSet, TargetZone ) + +TaskSEAD:AddScore( "Success", "Destroyed all target radars", 250 ) +TaskSEAD:AddScore( "Failed", "Failed to destroy all target radars", -100 ) + +-- ASSIGN_MENU_ACCEPT:New(TaskName,TaskBriefing) +local AssignProcess = TaskSEAD:SetProcessClass( "ASSIGN", ASSIGN_MENU_ACCEPT, "SEAD", "Hello World" ) +AssignProcess:AddScore( TaskSEAD, "Assign", "You are assigned to the task", 10 ) + +-- ACCOUNT_DEADS:New(ProcessUnit,TargetSetUnit,TaskName) +local AccountProcess = TaskSEAD:SetProcessClass( "ACCOUNT", ACCOUNT_DEADS, TargetSet, "SEAD" ) +AccountProcess:AddScore( TaskSEAD, "Account", "destroyed a radar", 25 ) +AccountProcess:AddScore( TaskSEAD, "Failed", "failed to destroy a radar", -100 ) + +TaskSEAD:AssignToGroup( SEADSet:Get( "Test SEAD" ) ) + diff --git a/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.miz b/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.miz new file mode 100644 index 0000000000000000000000000000000000000000..b6e9631e9e84630877cb345e4924a99dae879c0a GIT binary patch literal 26122 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 delta 485 zcmV#|0Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_- zO=eFCbT1!Cc5!GVc9Tz?I|kW!9T+?VlaQS}0ojwyolpU>lOCQl0_S{_0evx(g`O$_ b&Xcg7GyyG><(@|YrIRh69R^FA00000qps($ diff --git a/Moose Test Missions/Moose_Test_GROUP_SwitchWayPoint/MOOSE_Test_GROUP_SwitchWayPoint.miz b/Moose Test Missions/Moose_Test_Wrapper/Moose_Test_Group/Moose_Test_GROUP_SwitchWayPoint/MOOSE_Test_GROUP_SwitchWayPoint.miz similarity index 92% rename from Moose Test Missions/Moose_Test_GROUP_SwitchWayPoint/MOOSE_Test_GROUP_SwitchWayPoint.miz rename to Moose Test Missions/Moose_Test_Wrapper/Moose_Test_Group/Moose_Test_GROUP_SwitchWayPoint/MOOSE_Test_GROUP_SwitchWayPoint.miz index bf152456096042d8e23aa812153649ab4de373b5..b1794f99de878b3b39850c9f67376734fd190ca8 100644 GIT binary patch delta 474 zcmV<00VV#ulL5Pv0kHTN2{T9{NiFPKoOF``7$bi@Ps1<}of|3t;pC-BhxB7WqEd&_ zhN=>6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$Ntljuk^0YsA>Ni+dulTt}X Q0o;?CNgW23MgRZ+0B|AJ*#H0l delta 479 zcmV<50U-XnlL5Vx0kHTN33M+XNp^8)BzBVl7$bi{Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_6 z8DcI8bT1!Cc5!GVc9RN7I|kW!9T+?VlS@cE0+<<-AxIRHok&Ol=ac40Gyz7F8%Z<) VW|L4!M*-fGm`NQ5m_`5q006Nq;1vJ> diff --git a/Moose Test Missions/Moose_Test_GROUP_SwitchWayPoint/Moose_Test_GROUP_SwitchWayPoint.lua b/Moose Test Missions/Moose_Test_Wrapper/Moose_Test_Group/Moose_Test_GROUP_SwitchWayPoint/Moose_Test_GROUP_SwitchWayPoint.lua similarity index 100% rename from Moose Test Missions/Moose_Test_GROUP_SwitchWayPoint/Moose_Test_GROUP_SwitchWayPoint.lua rename to Moose Test Missions/Moose_Test_Wrapper/Moose_Test_Group/Moose_Test_GROUP_SwitchWayPoint/Moose_Test_GROUP_SwitchWayPoint.lua diff --git a/Moose Test Missions/Moose_Test_ZONE/Moose_Test_ZONE.lua b/Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE/Moose_Test_ZONE.lua similarity index 100% rename from Moose Test Missions/Moose_Test_ZONE/Moose_Test_ZONE.lua rename to Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE/Moose_Test_ZONE.lua diff --git a/Moose Test Missions/Moose_Test_ZONE/Moose_Test_ZONE.miz b/Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE/Moose_Test_ZONE.miz similarity index 95% rename from Moose Test Missions/Moose_Test_ZONE/Moose_Test_ZONE.miz rename to Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE/Moose_Test_ZONE.miz index 6ca796409257f07638e0640a5956beda92303bd3..378f323d377dd55ce662df77ce9755283976fe5e 100644 GIT binary patch delta 514 zcmV+d0{#8N%K^d50k8=f5;I65NiFPKoOA&I0A~XL02Tm~uwxj1l~X-W!!Qt?8!7+c zEsr>o@*mh0Kg-8_ago8D$%@?8kQ_ne}Y5H*1X;Y4Cp3JzIWky_#E zFow}!crmyfjCT5e7#=HqkBJ;Jc*MGD0=tE|TJoGVg^6EYojAHKnYpA5&kc0|r-Z!^ zeXmne;6j0muOH4(TTpw#HMDaMaxhyh;e-bJ=?|SUV+2v;!c2&ON>PEEiZ)U_NnCBP z+S?X8N552y;JPMK1=f4S1TLuN3EC>#v?A7E1feC>#tq|t1bE5b4eG9?6cPe76Adfu z!x)j%FQtYD{X%Sgv)cIo#{(DzQvBr|I+CbHa-hLciWmB0PkZ=YTjc~$n#=N_>b@Pc zJ~GJj?!FiO*h%R9Fuir5R*Y=8UpiPlM!DSlXYb(0ezF8WgP}1VgLXD E0EiOh=Kufz delta 518 zcmV+h0{Q*H%K^j70k8=f5_B&gNp^8)Bz6G+0A~XL02Tm~u45Q~l~X}a!Y~v*Z^{0{ zOD}F5252x!!U16t5@E#6gE55Et(7HROS;aB@xR*^)S=VprOWI4-uJz)dynwvu;5hq zaMI~?U=hbj1k?NFcrl;Ad^x$fn?{hN+(ywth>F0Ba3ZlP1c$UJNu_YP z8^UR?f8M(|>u-90gTdv#(sP-}FoQ>|t46SynX5U^Se={r<+Txq*99||wC0(i_TiAQ z_krg+1qCh?H1XBL5o!%;OSpzQ$DjsgttA?v!G8Kfhs+Q`7&c)hL_nn|p_vL-Qanjq zuCUtL7M;Ccszq>B5vhFZJ!AssRP*?4m2Fxft1*JWl4|3BhH(VEVDAQX*HQ`zKAMP{ z<@RBW$l;e#!-IYyw!T?q{Qu(ti~`C3@(zw9s+Jt6zn9{<{@BwVp4(PA0+eL3*r}>( z2d#??^0>S2ML%{De4VbUb>=j$RYPD4uEt3;OeM}p%wtM@P_nl3*S0$!I}@6aWB|^J5pY#Tv;-33M+XNp^8)BzBXRV><@fcpVr#1C!WeJOQbb6=Y2T^OIv_ zGy&I>m}E2o4U^4eL;-!15@kmM^6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$WoU18b7gZ- YO9ci10000D01W_+0{{S@NdN!<0Kci@iU0rr delta 500 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-Q00^@u z8sjhtbT1!Cc5!GVc9RoJI|kW!9T+?VlT=GQ0U(o+OH%=oljTb^0hyB;Of&(|lTS=U q0zfsBS~VP#^-K_x!Au$gheng3Mi`UzOez5plORnU2BAp+0002(r022# diff --git a/Moose Test Missions/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.lua b/Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.lua similarity index 100% rename from Moose Test Missions/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.lua rename to Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.lua diff --git a/Moose Test Missions/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.miz b/Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.miz similarity index 96% rename from Moose Test Missions/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.miz rename to Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_POLYGON/Moose_Test_ZONE_POLYGON.miz index 157f5066070cf6ac145839d75e59d521bb9d5afd..5d6bf9dc65023bb69fb50b84c3117c31aa110a4d 100644 GIT binary patch delta 496 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00^_k z8l6oEbT1!Cc5!GVc9U&rI|kW!9T+?Vldfny0l<^%XjK6}lR;@T0fduwX*2@kPm}#m h8I#3nDgjfI@M%W@%ab^2LjhHjd}6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$WoU18b7gZ-O9ci10000D01W_-0{{RJP5=M^ E0G!R?ga7~l delta 519 zcmV+i0{H#4qXD<00k9?+33M+XNp^8)BzBW886$r|Pr@)1K5xnX!%Hu290q7GO2PqQ z5)xs=&4V$7)UA~zT}!&oi}AnP7Sy5B=%vf+``-7xuX~U1=dj>Z_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-O00@)f zPZhJ`8ksZ+bT1!Cc5!GVc9VopI|kW!9T+?Vlf_Rw0>&DX;2J5DEKn)|Sd&*!Gy$EH zj8HTI`jf#>L;-4(22n==;*(BMLnLfV004Jka%E_5b#rBNP)h{{000004FC-Qj{^Vz J5>5aB005E>>t_G} diff --git a/Moose Test Missions/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.lua b/Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.lua similarity index 100% rename from Moose Test Missions/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.lua rename to Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.lua diff --git a/Moose Test Missions/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.miz b/Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.miz similarity index 92% rename from Moose Test Missions/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.miz rename to Moose Test Missions/Moose_Test_Zones/Moose_Test_ZONE_UNIT/Moose_Test_ZONE_UNIT.miz index e7290ad775a1b842ba65177e8a42379f47c5c1f7..4d7ab1558f54edb793ff1427e41f569f4c893fe4 100644 GIT binary patch delta 511 zcmV6DiQ{Ss>&objpW#sr@d>M(}UV0baO9E^7Q z7#@EseUFJ8GkC^UY$6)E}6Nc4bKgA0H=h#4}GswQs6>?i?1Kf zP+L%Y!ZoyW4stMCE#ZU)`{@szGGhc$(>q#mBaFZ5FGy%zzOG-2X z{xOq*N<#u}Gn0%n9FrzX5R=735DNeR0003100000wUZ4?LjgaNQA-^L&qn|N003|p B-rxWL delta 497 zcmVZ_;AwcbYKz3Nd(jT z<#;ilz6=I>(>}X00U}p}~IoLx;=|K^Qh+CPYA`D504OS5iDlT&}R%+7_L?U#dlL zRS~It>pf%w=T!6fZIx|WA*(Thz>;d?hH-xcykPGJb=Oh~2|k*Ln&tLkjL6}aQp1CO zA-29*W&Ho+0gM94|MCuwB&wDisK1xux&GMG9-iA)IRcbqve>DrYX_~14Dz_U??pd$ z5`3Mms&(cxuT?`}3$DgVG)yJVNX%nOeNeKt^VhaJA3GB*r;Uwy15ir?1QY-Q00^@L z8a6KpbT1!Cc5!GVc9TO%I|kW!9T+?VlY~h;0sWJ~Nm2oFlN3rc0n3v~N;CohGLwHw nLjrI!lZrDOli*4!0=Gny(L@-NBugp*L6c8Q9R|@y00000C4A-% diff --git a/Moose Training/Documentation/AIBalancer.html b/Moose Training/Documentation/AIBalancer.html index ecefed457..530e7a3be 100644 --- a/Moose Training/Documentation/AIBalancer.html +++ b/Moose Training/Documentation/AIBalancer.html @@ -18,8 +18,10 @@

diff --git a/Moose Training/Documentation/Account.html b/Moose Training/Documentation/Account.html new file mode 100644 index 000000000..fbd3a867e --- /dev/null +++ b/Moose Training/Documentation/Account.html @@ -0,0 +1,800 @@ + + + + + + +
+
+ +
+
+
+
+ +
+

Module Account

+ +

(SP) (MP) (FSM) Account for (Detect, count and report) DCS events occuring on DCS objects (units).

+ + + +
+ +

#ACCOUNT FSM class, extends Process#PROCESS

+ +

ACCOUNT state machine:

+ +

This class is a state machine: it manages a process that is triggered by events causing state transitions to occur. +All derived classes from this class will start with the class name, followed by a _. See the relevant derived class descriptions below. +Each derived class follows exactly the same process, using the same events and following the same state transitions, +but will have different implementation behaviour upon each event or state transition.

+ +

ACCOUNT Events:

+ +

These are the events defined in this class:

+ +
    +
  • Start: The process is started. The process will go into the Report state.
  • +
  • Event: A relevant event has occured that needs to be accounted for. The process will go into the Account state.
  • +
  • Report: The process is reporting to the player the accounting status of the DCS events.
  • +
  • More: There are more DCS events that need to be accounted for. The process will go back into the Report state.
  • +
  • NoMore: There are no more DCS events that need to be accounted for. The process will go into the Success state.
  • +
+ +

ACCOUNT Event methods:

+ +

Event methods are available (dynamically allocated by the state machine), that accomodate for state transitions occurring in the process. +There are two types of event methods, which you can use to influence the normal mechanisms in the state machine:

+ +
    +
  • Immediate: The event method has exactly the name of the event.
  • +
  • Delayed: The event method starts with a __ + the name of the event. The first parameter of the event method is a number value, expressing the delay in seconds when the event will be executed.
  • +
+ +

ACCOUNT States:

+ +
    +
  • Assigned: The player is assigned to the task. This is the initialization state for the process.
  • +
  • Waiting: the process is waiting for a DCS event to occur within the simulator. This state is set automatically.
  • +
  • Report: The process is Reporting to the players in the group of the unit. This state is set automatically every 30 seconds.
  • +
  • Account: The relevant DCS event has occurred, and is accounted for.
  • +
  • Success (*): All DCS events were accounted for.
  • +
  • Failed (*): The process has failed.
  • +
+ +

(*) End states of the process.

+ +

ACCOUNT state transition functions:

+ +

State transition functions can be set by the mission designer customizing or improving the behaviour of the state. +There are 2 moments when state transition functions will be called by the state machine:

+ +
    +
  • Before the state transition. + The state transition function needs to start with the name OnBefore + the name of the state. + If the state transition function returns false, then the processing of the state transition will not be done! + If you want to change the behaviour of the AIControllable at this event, return false, + but then you'll need to specify your own logic using the AIControllable!

  • +
  • After the state transition. + The state transition function needs to start with the name OnAfter + the name of the state. + These state transition functions need to provide a return value, which is specified at the function description.

  • +
+ +

1) #ACCOUNT_DEADS FSM class, extends Account#ACCOUNT

+ +

The ACCOUNT_DEADS class accounts (detects, counts and reports) successful kills of DCS units. +The process is given a Set of units that will be tracked upon successful destruction. +The process will end after each target has been successfully destroyed. +Each successful dead will trigger an Account state transition that can be scored, modified or administered.

+ + +

ACCOUNT_DEADS constructor:

+ + + +
+ + +

Global(s)

+ + + + + + + + + +
ACCOUNT + +
ACCOUNT_DEADS + +
+

Type ACCOUNT

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ACCOUNT.ClassName + +
ACCOUNT.DisplayCategory + +
ACCOUNT.DisplayCount + +
ACCOUNT.DisplayInterval + +
ACCOUNT.DisplayMessage + +
ACCOUNT.DisplayTime + +
ACCOUNT:New(ProcessUnit) +

Creates a new DESTROY process.

+
ACCOUNT.TargetSetUnit + +
ACCOUNT:onafterEvent(ProcessUnit, Event, From, To) +

StateMachine callback function

+
ACCOUNT:onafterStart(ProcessUnit, Event, From, To) +

StateMachine callback function

+
ACCOUNT:onenterWaiting(ProcessUnit, Event, From, To) +

StateMachine callback function

+
+ +

Type ACCOUNT_DEADS

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ACCOUNT_DEADS.ClassName + +
ACCOUNT_DEADS:EventDead(Event) + +
ACCOUNT_DEADS:New(ProcessUnit, TargetSetUnit, TaskName) +

Creates a new DESTROY process.

+
ACCOUNT_DEADS.TargetSetUnit + +
ACCOUNT_DEADS.TaskName + +
ACCOUNT_DEADS:onafterEvent(ProcessUnit, Event, From, To) +

StateMachine callback function

+
ACCOUNT_DEADS:onenterAccount(ProcessUnit, Event, From, To) +

StateMachine callback function

+
ACCOUNT_DEADS:onenterReport(ProcessUnit, Event, From, To) +

StateMachine callback function

+
+ +

Global(s)

+
+
+ + #ACCOUNT + +ACCOUNT + +
+
+ + + +
+
+
+
+ + #ACCOUNT_DEADS + +ACCOUNT_DEADS + +
+
+ + + +
+
+

Type Account

+ +

Type ACCOUNT

+ +

ACCOUNT class

+ +

Field(s)

+
+
+ + #string + +ACCOUNT.ClassName + +
+
+ + + +
+
+
+
+ + #string + +ACCOUNT.DisplayCategory + +
+
+ + + + +

Targets is the default display category

+ +
+
+
+
+ + #number + +ACCOUNT.DisplayCount + +
+
+ + + +
+
+
+
+ + #number + +ACCOUNT.DisplayInterval + +
+
+ + + +
+
+
+
+ + #boolean + +ACCOUNT.DisplayMessage + +
+
+ + + +
+
+
+
+ + #number + +ACCOUNT.DisplayTime + +
+
+ + + + +

10 seconds is the default

+ +
+
+
+
+ + +ACCOUNT:New(ProcessUnit) + +
+
+ +

Creates a new DESTROY process.

+ +

Parameter

+ +

Return value

+ +

#ACCOUNT:

+ + +
+
+
+
+ + Set#SET_UNIT + +ACCOUNT.TargetSetUnit + +
+
+ + + +
+
+
+
+ + +ACCOUNT:onafterEvent(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+
+
+ + +ACCOUNT:onafterStart(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+
+
+ + +ACCOUNT:onenterWaiting(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+ +

Type ACCOUNT_DEADS

+ +

ACCOUNT_DEADS class

+ +

Field(s)

+
+
+ + #string + +ACCOUNT_DEADS.ClassName + +
+
+ + + +
+
+
+
+ + +ACCOUNT_DEADS:EventDead(Event) + +
+
+ + + +

Parameter

+ +
+
+
+
+ + +ACCOUNT_DEADS:New(ProcessUnit, TargetSetUnit, TaskName) + +
+
+ +

Creates a new DESTROY process.

+ +

Parameters

+ +

Return value

+ +

#ACCOUNT_DEADS: +self

+ +
+
+
+
+ + Set#SET_UNIT + +ACCOUNT_DEADS.TargetSetUnit + +
+
+ + + +
+
+
+
+ + + +ACCOUNT_DEADS.TaskName + +
+
+ + + +
+
+
+
+ + +ACCOUNT_DEADS:onafterEvent(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+
+
+ + +ACCOUNT_DEADS:onenterAccount(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+
+
+ + +ACCOUNT_DEADS:onenterReport(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+ +

Type ASSIGN_MENU_ACCEPT

+ +
+ +
+ + diff --git a/Moose Training/Documentation/Airbase.html b/Moose Training/Documentation/Airbase.html index 00aa984aa..caebbfa9d 100644 --- a/Moose Training/Documentation/Airbase.html +++ b/Moose Training/Documentation/Airbase.html @@ -18,8 +18,10 @@
diff --git a/Moose Training/Documentation/AirbasePolice.html b/Moose Training/Documentation/AirbasePolice.html index a46739ec9..c8f0892d7 100644 --- a/Moose Training/Documentation/AirbasePolice.html +++ b/Moose Training/Documentation/AirbasePolice.html @@ -18,8 +18,10 @@
diff --git a/Moose Training/Documentation/Assign.html b/Moose Training/Documentation/Assign.html new file mode 100644 index 000000000..93eb68b42 --- /dev/null +++ b/Moose Training/Documentation/Assign.html @@ -0,0 +1,788 @@ + + + + + + +
+
+ +
+
+
+
+ +
+

Module Assign

+ +

(SP) (MP) (FSM) Accept or reject process for player (task) assignments.

+ + + +
+ +

1) #ASSIGN_ACCEPT class, extends Process#PROCESS

+

The #ASSIGN_ACCEPT class accepts by default a task for a player. No player intervention is allowed to reject the task.

+ +

1.1) ASSIGN_ACCEPT constructor:

+ + + +

1.2) ASSIGN_ACCEPT state machine:

+

The ASSIGN_ACCEPT is a state machine: it manages the different events and states of the Controllable it is controlling.

+ +

1.2.1) ASSIGN_ACCEPT Events:

+ + + +

1.2.2) ASSIGN_ACCEPT States:

+ +
    +
  • UnAssigned: The player has not accepted the task.
  • +
  • Assigned: The player has accepted the task.
  • +
+ +

1.2.3) ASSIGN_ACCEPT state transition functions:

+ +

State transition functions can be set by the mission designer customizing or improving the behaviour of the state. +There are 2 moments when state transition functions will be called by the state machine:

+ +
    +
  • Before the state transition. + The state transition function needs to start with the name OnBefore + the name of the state. + If the state transition function returns false, then the processing of the state transition will not be done! + If you want to change the behaviour of the AIControllable at this event, return false, + but then you'll need to specify your own logic using the AIControllable!

  • +
  • After the state transition. + The state transition function needs to start with the name OnAfter + the name of the state. + These state transition functions need to provide a return value, which is specified at the function description.

  • +
+ +

1.3) Manage the ASSIGN_ACCEPT parameters:

+

The following methods are available to modify the parameters of a ASSIGN_ACCEPT object:

+ +
+ +

2) #ASSIGNMENUACCEPT class, extends Process#PROCESS

+

The #ASSIGNMENUACCEPT class accepts a task when the player accepts the task through an added menu option. +This assignment type is useful to conditionally allow the player to choose whether or not he would accept the task. +The assignment type also allows to reject the task.

+ +

1.1) ASSIGNMENUACCEPT constructor:

+ + + +

1.2) ASSIGNMENUACCEPT state machine:

+

The ASSIGNMENUACCEPT is a state machine: it manages the different events and states of the Controllable it is controlling.

+ +

1.2.1) ASSIGNMENUACCEPT Events:

+ + + +

1.2.2) ASSIGNMENUACCEPT States:

+ +
    +
  • UnAssigned: The player has not accepted the task.
  • +
  • Assigned: The player has accepted the task.
  • +
  • Rejected: The player has rejected the task.
  • +
+ +

1.2.3) ASSIGNMENUACCEPT state transition functions:

+ +

State transition functions can be set by the mission designer customizing or improving the behaviour of the state. +There are 2 moments when state transition functions will be called by the state machine:

+ +
    +
  • Before the state transition. + The state transition function needs to start with the name OnBefore + the name of the state. + If the state transition function returns false, then the processing of the state transition will not be done! + If you want to change the behaviour of the AIControllable at this event, return false, + but then you'll need to specify your own logic using the AIControllable!

  • +
  • After the state transition. + The state transition function needs to start with the name OnAfter + the name of the state. + These state transition functions need to provide a return value, which is specified at the function description.

  • +
+ +

1.3) Manage the ASSIGNMENUACCEPT parameters:

+

The following methods are available to modify the parameters of a ASSIGNMENUACCEPT object:

+ + +

Global(s)

+ + + + + + + + + +
ASSIGN_ACCEPT + +
ASSIGN_MENU_ACCEPT + +
+

Type ASSIGN_ACCEPT

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ASSIGN_ACCEPT.ClassName + +
ASSIGN_ACCEPT:New(ProcessUnit, TaskBriefing) +

Creates a new task assignment state machine.

+
ASSIGN_ACCEPT.ProcessUnit + +
ASSIGN_ACCEPT.TargetZone + +
ASSIGN_ACCEPT.Task + +
ASSIGN_ACCEPT.TaskBriefing + +
+ +

Type ASSIGN_MENU_ACCEPT

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ASSIGN_MENU_ACCEPT.ClassName + +
ASSIGN_MENU_ACCEPT.Menu + +
ASSIGN_MENU_ACCEPT.MenuAcceptTask + +
ASSIGN_MENU_ACCEPT:MenuAssign() +

Menu function.

+
ASSIGN_MENU_ACCEPT:MenuReject() +

Menu function.

+
ASSIGN_MENU_ACCEPT.MenuRejectTask + +
ASSIGN_MENU_ACCEPT:New(ProcessUnit, TaskBriefing, TaskName) +

Creates a new task assignment state machine.

+
ASSIGN_MENU_ACCEPT.ProcessUnit + +
ASSIGN_MENU_ACCEPT.TargetZone + +
ASSIGN_MENU_ACCEPT.Task + +
ASSIGN_MENU_ACCEPT.TaskBriefing + +
ASSIGN_MENU_ACCEPT.TaskName + +
ASSIGN_MENU_ACCEPT:onafterAssign(ProcessUnit, Event, From, To) +

StateMachine callback function

+
ASSIGN_MENU_ACCEPT:onafterReject(ProcessUnit, Event, From, To) +

StateMachine callback function

+
ASSIGN_MENU_ACCEPT:onafterStart(ProcessUnit, Event, From, To) +

StateMachine callback function

+
+ +

Global(s)

+
+
+ + #ASSIGN_ACCEPT + +ASSIGN_ACCEPT + +
+
+ + + +
+
+
+
+ + #ASSIGN_MENU_ACCEPT + +ASSIGN_MENU_ACCEPT + +
+
+ + + +
+
+

Type Assign

+ +

Type ASSIGN_ACCEPT

+ +

ASSIGN_ACCEPT class

+ +

Field(s)

+
+
+ + #string + +ASSIGN_ACCEPT.ClassName + +
+
+ + + +
+
+
+
+ + +ASSIGN_ACCEPT:New(ProcessUnit, TaskBriefing) + +
+
+ +

Creates a new task assignment state machine.

+ + +

The process will accept the task by default, no player intervention accepted.

+ +

Parameters

+
    +
  • + +

    Unit#UNIT ProcessUnit :

    + +
  • +
  • + +

    #string TaskBriefing :

    + +
  • +
+

Return value

+ +

#ASSIGN_ACCEPT: +The task acceptance process.

+ +
+
+
+
+ + Unit#UNIT + +ASSIGN_ACCEPT.ProcessUnit + +
+
+ + + +
+
+
+
+ + Zone#ZONE_BASE + +ASSIGN_ACCEPT.TargetZone + +
+
+ + + +
+
+
+
+ + Task#TASK_BASE + +ASSIGN_ACCEPT.Task + +
+
+ + + +
+
+
+
+ + + +ASSIGN_ACCEPT.TaskBriefing + +
+
+ + + +
+
+ +

Type ASSIGN_MENU_ACCEPT

+ +

ASSIGNMENUACCEPT class

+ +

Field(s)

+
+
+ + #string + +ASSIGN_MENU_ACCEPT.ClassName + +
+
+ + + +
+
+
+
+ + + +ASSIGN_MENU_ACCEPT.Menu + +
+
+ + + +
+
+
+
+ + + +ASSIGN_MENU_ACCEPT.MenuAcceptTask + +
+
+ + + +
+
+
+
+ + +ASSIGN_MENU_ACCEPT:MenuAssign() + +
+
+ +

Menu function.

+ +
+
+
+
+ + +ASSIGN_MENU_ACCEPT:MenuReject() + +
+
+ +

Menu function.

+ +
+
+
+
+ + + +ASSIGN_MENU_ACCEPT.MenuRejectTask + +
+
+ + + +
+
+
+
+ + +ASSIGN_MENU_ACCEPT:New(ProcessUnit, TaskBriefing, TaskName) + +
+
+ +

Creates a new task assignment state machine.

+ + +

The process will request from the menu if it accepts the task, if not, the unit is removed from the simulator.

+ +

Parameters

+
    +
  • + +

    Unit#UNIT ProcessUnit :

    + +
  • +
  • + +

    #string TaskBriefing :

    + +
  • +
  • + +

    TaskName :

    + +
  • +
+

Return value

+ +

#ASSIGNMENUACCEPT: +self

+ +
+
+
+
+ + Unit#UNIT + +ASSIGN_MENU_ACCEPT.ProcessUnit + +
+
+ + + +
+
+
+
+ + Zone#ZONE_BASE + +ASSIGN_MENU_ACCEPT.TargetZone + +
+
+ + + +
+
+
+
+ + Task#TASK_BASE + +ASSIGN_MENU_ACCEPT.Task + +
+
+ + + +
+
+
+
+ + + +ASSIGN_MENU_ACCEPT.TaskBriefing + +
+
+ + + +
+
+
+
+ + + +ASSIGN_MENU_ACCEPT.TaskName + +
+
+ + + +
+
+
+
+ + +ASSIGN_MENU_ACCEPT:onafterAssign(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+
+
+ + +ASSIGN_MENU_ACCEPT:onafterReject(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+
+
+ + +ASSIGN_MENU_ACCEPT:onafterStart(ProcessUnit, Event, From, To) + +
+
+ +

StateMachine callback function

+ +

Parameters

+ +
+
+ +
+ +
+ + diff --git a/Moose Training/Documentation/Base.html b/Moose Training/Documentation/Base.html index 71298bbea..2fbced6cc 100644 --- a/Moose Training/Documentation/Base.html +++ b/Moose Training/Documentation/Base.html @@ -18,8 +18,10 @@
diff --git a/Moose Training/Documentation/CARGO.html b/Moose Training/Documentation/CARGO.html index 14877d168..ec3814ef4 100644 --- a/Moose Training/Documentation/CARGO.html +++ b/Moose Training/Documentation/CARGO.html @@ -18,8 +18,10 @@

Module Cargo

-

This module contains the CARGO classes.

+

Management of logical cargo objects, that can be transported from and to transportation carriers.


-

1) Cargo#CARGO_BASE class, extends Base#BASE

+

Cargo can be of various forms, always are composed out of ONE object ( one unit or one static or one slingload crate ):

+ +
    +
  • CARGO_UNIT, represented by a Unit in a Group: Cargo can be represented by a Unit in a Group. Destruction of the Unit will mean that the cargo is lost.

  • +
  • CARGO_STATIC, represented by a Static: Cargo can be represented by a Static. Destruction of the Static will mean that the cargo is lost.

  • +
  • CARGO_PACKAGE, contained in a Unit of a Group: Cargo can be contained within a Unit of a Group. The cargo can be delivered by the Unit. If the Unit is destroyed, the cargo will be destroyed also.

  • +
  • CARGO_PACKAGE, Contained in a Static: Cargo can be contained within a Static. The cargo can be collected from the @Static. If the Static is destroyed, the cargo will be destroyed.

  • +
  • CARGO_SLINGLOAD, represented by a Cargo that is transportable: Cargo can be represented by a Cargo object that is transportable. Destruction of the Cargo will mean that the cargo is lost.

  • +
  • CARGOGROUPED, represented by a Group of CARGOUNITs.

  • +
+ +

1) Cargo#CARGO_BASE class, extends StateMachine#STATEMACHINE_PROCESS

The #CARGO_BASE class defines the core functions that defines a cargo object within MOOSE. -A cargo is a logical object defined within a Mission, that is available for transport, and has a life status within a simulation.

+A cargo is a logical object defined that is available for transport, and has a life status within a simulation.

-

Cargo can be of various forms:

+

The CARGOBASE is a state machine: it manages the different events and states of the cargo. +All derived classes from CARGOBASE follow the same state machine, expose the same cargo event functions, and provide the same cargo states.

+ +

1.2.1) CARBO_BASE Events:

    -
  • CARGO_UNIT, represented by a Unit in a Group: Cargo can be represented by a Unit in a Group. Destruction of the Unit will mean that the cargo is lost.
  • -
  • CARGO_STATIC, represented by a Static: Cargo can be represented by a Static. Destruction of the Static will mean that the cargo is lost.
  • -
  • CARGO_PACKAGE, contained in a Unit of a Group: Cargo can be contained within a Unit of a Group. The cargo can be delivered by the Unit. If the Unit is destroyed, the cargo will be destroyed also.
  • -
  • CARGO_PACKAGE, Contained in a Static: Cargo can be contained within a Static. The cargo can be collected from the @Static. If the Static is destroyed, the cargo will be destroyed.
  • -
  • CARGO_SLINGLOAD, represented by a Cargo that is transportable: Cargo can be represented by a Cargo object that is transportable. Destruction of the Cargo will mean that the cargo is lost.
  • +
  • CARBO_BASE.Board( ToCarrier ): Boards the cargo to a carrier.
  • +
  • CARBO_BASE.Load( ToCarrier ): Loads the cargo into a carrier, regardless of its position.
  • +
  • CARBO_BASE.UnBoard( ToPointVec2 ): UnBoard the cargo from a carrier. This will trigger a movement of the cargo to the option ToPointVec2.
  • +
  • CARBO_BASE.UnLoad( ToPointVec2 ): UnLoads the cargo from a carrier.
  • +
  • CARBO_BASE.Dead( Controllable ): The cargo is dead. The cargo process will be ended.
-

1.2) CARGO state machine:

-

The CARGO is a state machine: it manages the different events and states of the Controllable it is controlling.

- -

1.2.1) CARGO Events:

- -
    -
  • CARGO.Board( ToCarrier ): Boards the cargo to a Carrier.
  • -
  • CARGO.Load( ToCarrier ): Loads the cargo into a Carrier, regardless of its position.
  • -
  • CARGO.UnBoard( ToPointVec2 ): UnBoard the cargo from a Carrier. This will trigger a movement of the cargo to the option ToPointVec2.
  • -
  • CARGO.UnLoad( ToPointVec2 ): UnLoads the cargo from a Carrier.
  • -
  • CARGO.Dead( Controllable ): The cargo is dead. The cargo process will be ended.
  • -
- -

1.2.2) PROCESS_PATROLZONE States:

+

1.2.2) CARBO_BASE States:

  • UnLoaded: The cargo is unloaded from a carrier.
  • @@ -129,7 +128,7 @@ A cargo is a logical object defined within a Mission,
  • End: The process has come to an end.
-

1.2.3) PROCESS_PATROLZONE state transition functions:

+

1.2.3) CARBO_BASE state transition functions:

State transition functions can be set by the mission designer customizing or improving the behaviour of the state. There are 2 moments when state transition functions will be called by the state machine:

@@ -142,14 +141,24 @@ There are 2 moments when state transition functions will be called by the state but then you'll need to specify your own logic using the AIControllable!

  • After the state transition. The state transition function needs to start with the name OnAfter + the name of the state. - These state transition functions need to provide a return value, which is specified at the function description.

    -
  • + These state transition functions need to provide a return value, which is specified at the function description.

    +

    2) #CARGO_UNIT class

    +

    The CARGOUNIT class defines a cargo that is represented by a UNIT object within the simulator, and can be transported by a carrier. +Use the event functions as described above to Load, UnLoad, Board, UnBoard the CARGOUNIT objects to and from carriers.

    + +

    5) #CARGO_GROUPED class

    +

    The CARGOGROUPED class defines a cargo that is represented by a group of UNIT objects within the simulator, and can be transported by a carrier. +Use the event functions as described above to Load, UnLoad, Board, UnBoard the CARGOUNIT objects to and from carriers.

    + +

    This module is still under construction, but is described above works already, and will keep working ...

    + +

    Global(s)

    - + @@ -158,6 +167,18 @@ There are 2 moments when state transition functions will be called by the state + + + + + + + + @@ -185,168 +206,284 @@ There are 2 moments when state transition functions will be called by the state
    CARGOCARBO_BASE CARGOS +
    CARGO_GROUP + +
    CARGO_GROUPED +
    -

    Type CARGO

    +

    Type CARBO_BASE

    - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + +
    CARGO:Board(ToPointVec2)CARBO_BASE:Board(ToCarrier) -

    Event Function.

    +

    Boards the cargo to a Carrier.

    CARGO.CargoCarrierCARBO_BASE.CargoCarrier

    The alive DCS object carrying the cargo. This value can be nil, meaning, that the cargo is not contained anywhere...

    CARGO.CargoObjectCARBO_BASE.CargoObject

    The alive DCS object representing the cargo. This value can be nil, meaning, that the cargo is not represented anywhere...

    CARGO.CargoSchedulerCARBO_BASE.CargoScheduler
    CARGO.ClassNameCARBO_BASE.ClassName
    CARGO.ContainableCARBO_BASE.Containable

    This flag defines if the cargo can be contained within a DCS Unit.

    CARGO:IsNear(PointVec2)CARBO_BASE:IsNear(PointVec2)

    Check if CargoCarrier is near the Cargo to be Loaded.

    CARGO:Load(ToCarrier)CARBO_BASE:Load(ToCarrier) -

    Event Function.

    +

    Loads the cargo to a Carrier.

    CARGO.MoveableCARBO_BASE.Moveable

    This flag defines if the cargo is moveable.

    CARGO.NameCARBO_BASE.Name

    A string defining the name of the cargo. The name is the unique identifier of the cargo.

    CARGO.NearRadiusCARBO_BASE.NearRadius

    (optional) A number defining the radius in meters when the cargo is near to a Carrier, so that it can be loaded.

    CARGO:New(Mission, Type, Name, Weight, ReportRadius, NearRadius)CARBO_BASE:New(Type, Name, Weight, ReportRadius, NearRadius) -

    CARGO Constructor.

    +

    CARBO_BASE Constructor.

    CARGO:OnAfterBoarding(Controllable)CARBO_BASE:OnAfterBoarding(Controllable)
    CARGO:OnAfterLoaded(Controllable)CARBO_BASE:OnAfterLoaded(Controllable)
    CARGO:OnAfterUnBoarding(Controllable)CARBO_BASE:OnAfterUnBoarding(Controllable)
    CARGO:OnAfterUnLoaded(Controllable)CARBO_BASE:OnAfterUnLoaded(Controllable)
    CARGO:OnBeforeBoarding(Controllable)CARBO_BASE:OnBeforeBoarding(Controllable)
    CARGO:OnBeforeLoaded(Controllable)CARBO_BASE:OnBeforeLoaded(Controllable)
    CARGO:OnBeforeUnBoarding(Controllable)CARBO_BASE:OnBeforeUnBoarding(Controllable)
    CARGO:OnBeforeUnLoaded(Controllable)CARBO_BASE:OnBeforeUnLoaded(Controllable)
    CARGO.ReportRadiusCARBO_BASE.ReportRadius

    (optional) A number defining the radius in meters when the cargo is signalling or reporting to a Carrier.

    CARGO.RepresentableCARBO_BASE.Representable

    This flag defines if the cargo can be represented by a DCS Unit.

    CARGO.SlingloadableCARBO_BASE.Slingloadable

    This flag defines if the cargo can be slingloaded.

    CARGO:Spawn(PointVec2)CARBO_BASE:Spawn(PointVec2) -

    Template method to spawn a new representation of the CARGO in the simulator.

    +

    Template method to spawn a new representation of the CARBO_BASE in the simulator.

    CARGO.TypeCARBO_BASE.Type

    A string defining the type of the cargo. eg. Engineers, Equipment, Screwdrivers.

    CARGO:UnBoard(ToPointVec2)CARBO_BASE:UnBoard(ToPointVec2) -

    Event Function.

    +

    UnBoards the cargo to a Carrier.

    CARGO.WeightCARBO_BASE:UnLoad(ToPointVec2) +

    UnLoads the cargo to a Carrier.

    +
    CARBO_BASE.Weight

    A number defining the weight of the cargo. The weight is expressed in kg.

    +
    CARBO_BASE:__Board(DelaySeconds, ToCarrier) +

    Boards the cargo to a Carrier.

    +
    CARBO_BASE:__Load(DelaySeconds, ToCarrier) +

    Loads the cargo to a Carrier.

    +
    CARBO_BASE:__UnBoard(DelaySeconds, ToPointVec2) +

    UnBoards the cargo to a Carrier.

    +
    CARBO_BASE:__UnLoad(DelaySeconds, ToPointVec2) +

    UnLoads the cargo to a Carrier.

    +
    + +

    Type CARGO_GROUP

    + + + + + + + + + + + + + + + + + +
    CARGO_GROUP.CargoSet +

    A set of cargo objects.

    +
    CARGO_GROUP.ClassName + +
    CARGO_GROUP.Name +

    A string defining the name of the cargo group. The name is the unique identifier of the cargo.

    +
    CARGO_GROUP:New(CargoSet, Type, Name, Weight, ReportRadius, NearRadius) +

    CARGO_GROUP constructor.

    +
    + +

    Type CARGO_GROUPED

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CARGO_GROUPED.ClassName + +
    CARGO_GROUPED:New(CargoSet, Type, Name, Weight, ReportRadius, NearRadius) +

    CARGO_GROUPED constructor.

    +
    CARGO_GROUPED:onafterUnBoarding(ToPointVec2, Event, From, To) +

    UnBoard Event.

    +
    CARGO_GROUPED:onenterBoarding(CargoCarrier, Event, From, To) +

    Enter Boarding State.

    +
    CARGO_GROUPED:onenterLoaded(CargoCarrier, Event, From, To) +

    Enter Loaded State.

    +
    CARGO_GROUPED:onenterUnBoarding(ToPointVec2, Event, From, To) +

    Enter UnBoarding State.

    +
    CARGO_GROUPED:onenterUnLoaded(Point, Event, From, To, ToPointVec2) +

    Enter UnLoaded State.

    +
    CARGO_GROUPED:onleaveBoarding(CargoCarrier, Event, From, To) +

    Leave Boarding State.

    +
    CARGO_GROUPED:onleaveUnBoarding(ToPointVec2, Event, From, To) +

    Leave UnBoarding State.

    @@ -378,7 +515,7 @@ There are 2 moments when state transition functions will be called by the state - CARGO_PACKAGE:New(Mission, CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius) + CARGO_PACKAGE:New(CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius)

    CARGO_PACKAGE Constructor.

    @@ -430,9 +567,15 @@ There are 2 moments when state transition functions will be called by the state - CARGO_REPRESENTABLE:New(Mission, CargoObject, Type, Name, Weight, ReportRadius, NearRadius) + CARGO_REPRESENTABLE:New(CargoObject, Type, Name, Weight, ReportRadius, NearRadius)

    CARGO_REPRESENTABLE Constructor.

    + + + + CARGO_REPRESENTABLE:RouteTo(ToPointVec2, Speed) + +

    Route a cargo unit to a PointVec2.

    @@ -464,15 +607,9 @@ There are 2 moments when state transition functions will be called by the state - CARGO_UNIT:New(Mission, CargoUnit, Type, Name, Weight, ReportRadius, NearRadius) + CARGO_UNIT:New(CargoUnit, Type, Name, Weight, ReportRadius, NearRadius)

    CARGO_UNIT Constructor.

    - - - - CARGO_UNIT.OnLoadedCallBack - - @@ -488,7 +625,7 @@ There are 2 moments when state transition functions will be called by the state - CARGO_UNIT:onafterUnBoarded(ToPointVec2, Event, From, To) + CARGO_UNIT:onafterUnBoarding(ToPointVec2, Event, From, To)

    UnBoard Event.

    @@ -535,9 +672,9 @@ There are 2 moments when state transition functions will be called by the state
    - #CARGO - -CARGO + #CARBO_BASE + +CARBO_BASE
    @@ -558,6 +695,34 @@ There are 2 moments when state transition functions will be called by the state +
    +
    +
    +
    + + #CARGO_GROUP + +CARGO_GROUP + +
    +
    + + + +
    +
    +
    +
    + + #CARGO_GROUPED + +CARGO_GROUPED + +
    +
    + + +
    @@ -618,29 +783,29 @@ There are 2 moments when state transition functions will be called by the state

    Type Cargo

    -

    Type CARGO

    +

    Type CARBO_BASE

    Field(s)

    - -CARGO:Board(ToPointVec2) + +CARBO_BASE:Board(ToCarrier)
    -

    Event Function.

    +

    Boards the cargo to a Carrier.

    -

    The cargo must be in the Loaded state. -UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier. There will be no movement simulated of the cargo loading.

    +

    The event will create a movement (= running or driving) of the cargo to the Carrier. +The cargo must be in the UnLoaded state.

    Parameter

    • -

      Point#POINT_VEC2 ToPointVec2 : -(optional) @{Point#POINT_VEC2) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location.

      +

      Controllable#CONTROLLABLE ToCarrier : +The Carrier that will hold the cargo.

    @@ -649,9 +814,9 @@ UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier
    - Positionable#POSITIONABLE - -CARGO.CargoCarrier + Controllable#CONTROLLABLE + +CARBO_BASE.CargoCarrier
    @@ -664,8 +829,8 @@ UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier
    Controllable#CONTROLLABLE - -CARGO.CargoObject + +CARBO_BASE.CargoObject
    @@ -678,8 +843,8 @@ UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier
    - -CARGO.CargoScheduler + +CARBO_BASE.CargoScheduler
    @@ -692,8 +857,8 @@ UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier
    #string - -CARGO.ClassName + +CARBO_BASE.ClassName
    @@ -706,8 +871,8 @@ UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier
    #boolean - -CARGO.Containable + +CARBO_BASE.Containable
    @@ -719,8 +884,8 @@ UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier
    - -CARGO:IsNear(PointVec2) + +CARBO_BASE:IsNear(PointVec2)
    @@ -745,17 +910,17 @@ UnLoads the cargo to a Carrier. The event will unload the cargo from the Carrier
    - -CARGO:Load(ToCarrier) + +CARBO_BASE:Load(ToCarrier)
    -

    Event Function.

    +

    Loads the cargo to a Carrier.

    -

    The cargo must be in the UnLoaded state. -Loads the cargo to a Carrier. The event will load the cargo into the Carrier regardless of its position. There will be no movement simulated of the cargo loading.

    +

    The event will load the cargo into the Carrier regardless of its position. There will be no movement simulated of the cargo loading. +The cargo must be in the UnLoaded state.

    Parameter

    diff --git a/Moose Training/Documentation/Client.html b/Moose Training/Documentation/Client.html index f56db52fd..de5906425 100644 --- a/Moose Training/Documentation/Client.html +++ b/Moose Training/Documentation/Client.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Controllable.html b/Moose Training/Documentation/Controllable.html index d2d171a3c..191cf6290 100644 --- a/Moose Training/Documentation/Controllable.html +++ b/Moose Training/Documentation/Controllable.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSAirbase.html b/Moose Training/Documentation/DCSAirbase.html index 6fcae9d48..d775cc55e 100644 --- a/Moose Training/Documentation/DCSAirbase.html +++ b/Moose Training/Documentation/DCSAirbase.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSCoalitionObject.html b/Moose Training/Documentation/DCSCoalitionObject.html index 52e2d8de0..144926d49 100644 --- a/Moose Training/Documentation/DCSCoalitionObject.html +++ b/Moose Training/Documentation/DCSCoalitionObject.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSCommand.html b/Moose Training/Documentation/DCSCommand.html index f185ce424..295c9acaa 100644 --- a/Moose Training/Documentation/DCSCommand.html +++ b/Moose Training/Documentation/DCSCommand.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSController.html b/Moose Training/Documentation/DCSController.html index 7418af16a..9eb61abd0 100644 --- a/Moose Training/Documentation/DCSController.html +++ b/Moose Training/Documentation/DCSController.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSGroup.html b/Moose Training/Documentation/DCSGroup.html index 577485f9d..018a45fd2 100644 --- a/Moose Training/Documentation/DCSGroup.html +++ b/Moose Training/Documentation/DCSGroup.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSObject.html b/Moose Training/Documentation/DCSObject.html index 4365238a3..36223acce 100644 --- a/Moose Training/Documentation/DCSObject.html +++ b/Moose Training/Documentation/DCSObject.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSTask.html b/Moose Training/Documentation/DCSTask.html index 67c46c206..ebdfa69ff 100644 --- a/Moose Training/Documentation/DCSTask.html +++ b/Moose Training/Documentation/DCSTask.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSTypes.html b/Moose Training/Documentation/DCSTypes.html index 51cb76092..13fa58122 100644 --- a/Moose Training/Documentation/DCSTypes.html +++ b/Moose Training/Documentation/DCSTypes.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSUnit.html b/Moose Training/Documentation/DCSUnit.html index 8fe5d7df4..dd27fefef 100644 --- a/Moose Training/Documentation/DCSUnit.html +++ b/Moose Training/Documentation/DCSUnit.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCSWorld.html b/Moose Training/Documentation/DCSWorld.html index 13679bd37..82e4b474a 100644 --- a/Moose Training/Documentation/DCSWorld.html +++ b/Moose Training/Documentation/DCSWorld.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCScountry.html b/Moose Training/Documentation/DCScountry.html index 5af1173fb..d593b5183 100644 --- a/Moose Training/Documentation/DCScountry.html +++ b/Moose Training/Documentation/DCScountry.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCStimer.html b/Moose Training/Documentation/DCStimer.html index a323f2703..9fe22609a 100644 --- a/Moose Training/Documentation/DCStimer.html +++ b/Moose Training/Documentation/DCStimer.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DCStrigger.html b/Moose Training/Documentation/DCStrigger.html index 8eb50b6e0..1fcec8753 100644 --- a/Moose Training/Documentation/DCStrigger.html +++ b/Moose Training/Documentation/DCStrigger.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Database.html b/Moose Training/Documentation/Database.html index d520b5f32..1180bccad 100644 --- a/Moose Training/Documentation/Database.html +++ b/Moose Training/Documentation/Database.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Detection.html b/Moose Training/Documentation/Detection.html index 98cff176e..ea14ce2b2 100644 --- a/Moose Training/Documentation/Detection.html +++ b/Moose Training/Documentation/Detection.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/DetectionManager.html b/Moose Training/Documentation/DetectionManager.html index 58dd14221..068bd6e39 100644 --- a/Moose Training/Documentation/DetectionManager.html +++ b/Moose Training/Documentation/DetectionManager.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Escort.html b/Moose Training/Documentation/Escort.html index 9a8917136..dd03c1027 100644 --- a/Moose Training/Documentation/Escort.html +++ b/Moose Training/Documentation/Escort.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Event.html b/Moose Training/Documentation/Event.html index a5af29791..b16fbdffa 100644 --- a/Moose Training/Documentation/Event.html +++ b/Moose Training/Documentation/Event.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Group.html b/Moose Training/Documentation/Group.html index 235ebbab8..76ea1c0cf 100644 --- a/Moose Training/Documentation/Group.html +++ b/Moose Training/Documentation/Group.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Identifiable.html b/Moose Training/Documentation/Identifiable.html index 0cd521d63..8447fcaf2 100644 --- a/Moose Training/Documentation/Identifiable.html +++ b/Moose Training/Documentation/Identifiable.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/MISSION.html b/Moose Training/Documentation/MISSION.html index e8399ef98..b9123d399 100644 --- a/Moose Training/Documentation/MISSION.html +++ b/Moose Training/Documentation/MISSION.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/MOVEMENT.html b/Moose Training/Documentation/MOVEMENT.html index 7674925b4..2a67261d7 100644 --- a/Moose Training/Documentation/MOVEMENT.html +++ b/Moose Training/Documentation/MOVEMENT.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Menu.html b/Moose Training/Documentation/Menu.html index 8a17d6768..99369d601 100644 --- a/Moose Training/Documentation/Menu.html +++ b/Moose Training/Documentation/Menu.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Message.html b/Moose Training/Documentation/Message.html index 3f200bc76..f99338672 100644 --- a/Moose Training/Documentation/Message.html +++ b/Moose Training/Documentation/Message.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/MissileTrainer.html b/Moose Training/Documentation/MissileTrainer.html index 3df1498eb..694e2fc70 100644 --- a/Moose Training/Documentation/MissileTrainer.html +++ b/Moose Training/Documentation/MissileTrainer.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Object.html b/Moose Training/Documentation/Object.html index fdd046664..f2fbf901d 100644 --- a/Moose Training/Documentation/Object.html +++ b/Moose Training/Documentation/Object.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Patrol.html b/Moose Training/Documentation/Patrol.html new file mode 100644 index 000000000..fdcbcd970 --- /dev/null +++ b/Moose Training/Documentation/Patrol.html @@ -0,0 +1,786 @@ + + + + + + +
    +
    + +
    +
    +
    +
    + +
    +

    Module Patrol

    + +

    (AI) (FSM) Make AI patrol routes or zones.

    + + + +
    + +

    1) #PATROLZONE class, extends StateMachine#STATEMACHINE

    +

    The #PATROLZONE class implements the core functions to patrol a Zone by an AIR Controllable Group. +The patrol algorithm works that for each airplane patrolling, upon arrival at the patrol zone, +a random point is selected as the route point within the 3D space, within the given boundary limits. +The airplane will fly towards the random 3D point within the patrol zone, using a random speed within the given altitude and speed limits. +Upon arrival at the random 3D point, a new 3D random point will be selected within the patrol zone using the given limits. +This cycle will continue until a fuel treshold has been reached by the airplane. +When the fuel treshold has been reached, the airplane will fly towards the nearest friendly airbase and will land.

    + +

    1.1) PATROLZONE constructor:

    + + + +

    1.2) PATROLZONE state machine:

    +

    The PATROLZONE is a state machine: it manages the different events and states of the AIControllable it is controlling.

    + +

    1.2.1) PATROLZONE Events:

    + +
      +
    • PATROLZONE.Route( AIControllable ): A new 3D route point is selected and the AIControllable will fly towards that point with the given speed.
    • +
    • PATROLZONE.Patrol( AIControllable ): The AIControllable reports it is patrolling. This event is called every 30 seconds.
    • +
    • PATROLZONE.RTB( AIControllable ): The AIControllable will report return to base.
    • +
    • PATROLZONE.End( AIControllable ): The end of the PATROLZONE process.
    • +
    • PATROLZONE.Dead( AIControllable ): The AIControllable is dead. The PATROLZONE process will be ended.
    • +
    + +

    1.2.2) PATROLZONE States:

    + +
      +
    • Route: A new 3D route point is selected and the AIControllable will fly towards that point with the given speed.
    • +
    • Patrol: The AIControllable is patrolling. This state is set every 30 seconds, so every 30 seconds, a state transition function can be used.
    • +
    • RTB: The AIControllable reports it wants to return to the base.
    • +
    • Dead: The AIControllable is dead ...
    • +
    • End: The process has come to an end.
    • +
    + +

    1.2.3) PATROLZONE state transition functions:

    + +

    State transition functions can be set by the mission designer customizing or improving the behaviour of the state. +There are 2 moments when state transition functions will be called by the state machine:

    + +
      +
    • Before the state transition. + The state transition function needs to start with the name OnBefore + the name of the state. + If the state transition function returns false, then the processing of the state transition will not be done! + If you want to change the behaviour of the AIControllable at this event, return false, + but then you'll need to specify your own logic using the AIControllable!

    • +
    • After the state transition. + The state transition function needs to start with the name OnAfter + the name of the state. + These state transition functions need to provide a return value, which is specified at the function description.

    • +
    + +

    An example how to manage a state transition for an PATROLZONE object Patrol for the state RTB:

    + +
     local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone" )
    + local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup )
    +
    + local PatrolSpawn = SPAWN:New( "Patrol Group" )
    + local PatrolGroup = PatrolSpawn:Spawn()
    +
    + local Patrol = PATROLZONE:New( PatrolZone, 3000, 6000, 300, 600 )
    + Patrol:SetControllable( PatrolGroup )
    + Patrol:ManageFuel( 0.2, 60 )
    +
    + +

    OnBeforeRTB( AIGroup ) will be called by the PATROLZONE object when the AIGroup reports RTB, but before the RTB default action is processed by the PATROLZONE object.

    + +
     --- State transition function for the PATROLZONE **Patrol** object
    + -- @param #PATROLZONE self 
    + -- @param Controllable#CONTROLLABLE AIGroup
    + -- @return #boolean If false is returned, then the OnAfter state transition function will not be called.
    + function Patrol:OnBeforeRTB( AIGroup )
    +   AIGroup:MessageToRed( "Returning to base", 20 )
    + end
    +
    + +

    OnAfterRTB( AIGroup ) will be called by the PATROLZONE object when the AIGroup reports RTB, but after the RTB default action was processed by the PATROLZONE object.

    + +
     --- State transition function for the PATROLZONE **Patrol** object
    + -- @param #PATROLZONE self 
    + -- @param Controllable#CONTROLLABLE AIGroup
    + -- @return #Controllable#CONTROLLABLE The new AIGroup object that is set to be patrolling the zone.
    + function Patrol:OnAfterRTB( AIGroup )
    +   return PatrolSpawn:Spawn()
    + end 
    +
    + +

    1.3) Manage the PATROLZONE parameters:

    +

    The following methods are available to modify the parameters of a PATROLZONE object:

    + + + +

    1.3) Manage the out of fuel in the PATROLZONE:

    +

    When the AIControllable is out of fuel, it is required that a new AIControllable is started, before the old AIControllable can return to the home base. +Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +When the fuel treshold is reached, the AIControllable will continue for a given time its patrol task in orbit, while a new AIControllable is targetted to the PATROLZONE. +Once the time is finished, the old AIControllable will return to the base. +Use the method PATROLZONE.ManageFuel() to have this proces in place.

    + +
    + +

    API CHANGE HISTORY

    + +

    The underlying change log documents the API changes. Please read this carefully. The following notation is used:

    + +
      +
    • Added parts are expressed in bold type face.
    • +
    • Removed parts are expressed in italic type face.
    • +
    + +

    Hereby the change log:

    + +

    2016-09-01: Initial class and API.

    + +
    + +

    AUTHORS and CONTRIBUTIONS

    + +

    Contributions:

    + +
      +
    • DutchBaron: Testing.
    • +
    • Pikey: Testing and API concept review.
    • +
    + +

    Authors:

    + +
      +
    • FlightControl: Design & Programming.
    • +
    + + + +

    Global(s)

    + + + + + + + + + +
    PATROLZONE + +
    _NewPatrolRoute(AIControllable) + +
    +

    Type PATROLZONE

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PATROLZONE.AIControllable +

    The Controllable patrolling.

    +
    PATROLZONE.ClassName + +
    PATROLZONE:ManageFuel(PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime) +

    When the AIControllable is out of fuel, it is required that a new AIControllable is started, before the old AIControllable can return to the home base.

    +
    PATROLZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed) +

    Creates a new PATROLZONE object

    +
    PATROLZONE:OnAfterRoute(Controllable) +

    OnAfter State Transition Function

    +
    PATROLZONE:OnBeforeRoute(Controllable) +

    OnBefore State Transition Function

    +
    PATROLZONE.PatrolCeilingAltitude +

    The highest altitude in meters where to execute the patrol.

    +
    PATROLZONE.PatrolFloorAltitude +

    The lowest altitude in meters where to execute the patrol.

    +
    PATROLZONE.PatrolFuelTresholdPercentage + +
    PATROLZONE.PatrolManageFuel + +
    PATROLZONE.PatrolMaxSpeed +

    The maximum speed of the Controllable in km/h.

    +
    PATROLZONE.PatrolMinSpeed +

    The minimum speed of the Controllable in km/h.

    +
    PATROLZONE.PatrolOutOfFuelOrbitTime + +
    PATROLZONE.PatrolZone +

    The Zone where the patrol needs to be executed.

    +
    PATROLZONE:SetAltitude(PatrolFloorAltitude, PatrolCeilingAltitude) +

    Sets the floor and ceiling altitude of the patrol.

    +
    PATROLZONE:SetSpeed(PatrolMinSpeed, PatrolMaxSpeed) +

    Sets (modifies) the minimum and maximum speed of the patrol.

    +
    PATROLZONE:onenterPatrol() + +
    PATROLZONE:onenterRoute() +

    Defines a new patrol route using the Process_PatrolZone parameters and settings.

    +
    + +

    Global(s)

    +
    +
    + + #PATROLZONE + +PATROLZONE + +
    +
    + + + +
    +
    +
    +
    + + +_NewPatrolRoute(AIControllable) + +
    +
    + + + +

    Parameter

    + +
    +
    +

    Type Patrol

    + +

    Type PATROLZONE

    + +

    PATROLZONE class

    + +

    Field(s)

    +
    +
    + + Controllable#CONTROLLABLE + +PATROLZONE.AIControllable + +
    +
    + +

    The Controllable patrolling.

    + +
    +
    +
    +
    + + #string + +PATROLZONE.ClassName + +
    +
    + + + +
    +
    +
    +
    + + +PATROLZONE:ManageFuel(PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime) + +
    +
    + +

    When the AIControllable is out of fuel, it is required that a new AIControllable is started, before the old AIControllable can return to the home base.

    + + +

    Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +When the fuel treshold is reached, the AIControllable will continue for a given time its patrol task in orbit, while a new AIControllable is targetted to the PATROLZONE. +Once the time is finished, the old AIControllable will return to the base.

    + +

    Parameters

    +
      +
    • + +

      #number PatrolFuelTresholdPercentage : +The treshold in percentage (between 0 and 1) when the AIControllable is considered to get out of fuel.

      + +
    • +
    • + +

      #number PatrolOutOfFuelOrbitTime : +The amount of seconds the out of fuel AIControllable will orbit before returning to the base.

      + +
    • +
    +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + +PATROLZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed) + +
    +
    + +

    Creates a new PATROLZONE object

    + +

    Parameters

    + +

    Return value

    + +

    #PATROLZONE: +self

    + +

    Usage:

    +
    -- Define a new PATROLZONE Object. This PatrolArea will patrol an AIControllable within PatrolZone between 3000 and 6000 meters, with a variying speed between 600 and 900 km/h.
    +PatrolZone = ZONE:New( 'PatrolZone' )
    +PatrolSpawn = SPAWN:New( 'Patrol Group' )
    +PatrolArea = PATROLZONE:New( PatrolZone, 3000, 6000, 600, 900 )
    + +
    +
    +
    +
    + + +PATROLZONE:OnAfterRoute(Controllable) + +
    +
    + +

    OnAfter State Transition Function

    + +

    Parameter

    + +
    +
    +
    +
    + + +PATROLZONE:OnBeforeRoute(Controllable) + +
    +
    + +

    OnBefore State Transition Function

    + +

    Parameter

    + +

    Return value

    + +

    #boolean:

    + + +
    +
    +
    +
    + + DCSTypes#Altitude + +PATROLZONE.PatrolCeilingAltitude + +
    +
    + +

    The highest altitude in meters where to execute the patrol.

    + +
    +
    +
    +
    + + DCSTypes#Altitude + +PATROLZONE.PatrolFloorAltitude + +
    +
    + +

    The lowest altitude in meters where to execute the patrol.

    + +
    +
    +
    +
    + + + +PATROLZONE.PatrolFuelTresholdPercentage + +
    +
    + + + +
    +
    +
    +
    + + #boolean + +PATROLZONE.PatrolManageFuel + +
    +
    + + + +
    +
    +
    +
    + + DCSTypes#Speed + +PATROLZONE.PatrolMaxSpeed + +
    +
    + +

    The maximum speed of the Controllable in km/h.

    + +
    +
    +
    +
    + + DCSTypes#Speed + +PATROLZONE.PatrolMinSpeed + +
    +
    + +

    The minimum speed of the Controllable in km/h.

    + +
    +
    +
    +
    + + + +PATROLZONE.PatrolOutOfFuelOrbitTime + +
    +
    + + + +
    +
    +
    +
    + + Zone#ZONE_BASE + +PATROLZONE.PatrolZone + +
    +
    + +

    The Zone where the patrol needs to be executed.

    + +
    +
    +
    +
    + + +PATROLZONE:SetAltitude(PatrolFloorAltitude, PatrolCeilingAltitude) + +
    +
    + +

    Sets the floor and ceiling altitude of the patrol.

    + +

    Parameters

    +
      +
    • + +

      DCSTypes#Altitude PatrolFloorAltitude : +The lowest altitude in meters where to execute the patrol.

      + +
    • +
    • + +

      DCSTypes#Altitude PatrolCeilingAltitude : +The highest altitude in meters where to execute the patrol.

      + +
    • +
    +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + +PATROLZONE:SetSpeed(PatrolMinSpeed, PatrolMaxSpeed) + +
    +
    + +

    Sets (modifies) the minimum and maximum speed of the patrol.

    + +

    Parameters

    + +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + +PATROLZONE:onenterPatrol() + +
    +
    + + + +
    +
    +
    +
    + + +PATROLZONE:onenterRoute() + +
    +
    + +

    Defines a new patrol route using the Process_PatrolZone parameters and settings.

    + +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    + +
    + +
    + + diff --git a/Moose Training/Documentation/Point.html b/Moose Training/Documentation/Point.html index 21e4f6634..f60d643ea 100644 --- a/Moose Training/Documentation/Point.html +++ b/Moose Training/Documentation/Point.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Positionable.html b/Moose Training/Documentation/Positionable.html index cde5cc60b..fa2fbcbb3 100644 --- a/Moose Training/Documentation/Positionable.html +++ b/Moose Training/Documentation/Positionable.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Process.html b/Moose Training/Documentation/Process.html index 83502b368..e6dee540c 100644 --- a/Moose Training/Documentation/Process.html +++ b/Moose Training/Documentation/Process.html @@ -18,8 +18,10 @@
    @@ -99,7 +97,7 @@

    Type PROCESS

    - + @@ -108,12 +106,6 @@ - - - - @@ -123,7 +115,7 @@ - + @@ -135,7 +127,7 @@ - + @@ -150,30 +142,12 @@ - - - - - - - - - - - - @@ -210,7 +184,7 @@
    -PROCESS:AddScore(ProcessStatus, ScoreText, Score) +PROCESS:AddScore(Task, State, ScoreText, Score, ProcessStatus)
    @@ -221,8 +195,14 @@
    • -

      #string ProcessStatus : -is the status of the PROCESS when the score needs to be given.

      +

      Task#TASK_BASE Task : +The task for which the process needs to account score.

      + +
    • +
    • + +

      #string State : +is the state of the process when the score needs to be given. (See the relevant state descriptions of the process).

    • @@ -236,6 +216,11 @@ is a text describing the score that is given according the status.

      #number Score : is a number providing the score of the status.

      +
    • +
    • + +

      ProcessStatus :

      +

    Return value

    @@ -257,20 +242,6 @@ self

    -
    - -
    -
    - - StateMachine#STATEMACHINE_TASK - -PROCESS.Fsm - -
    -
    - - -
    @@ -291,7 +262,7 @@ self

    -PROCESS:New(ProcessName, Task, ProcessUnit) +PROCESS:New(ProcessName, Task, ProcessUnit, FSMT)
    @@ -317,6 +288,11 @@ self

    Unit#UNIT ProcessUnit :

    + +
  • + +

    FSMT :

    +
  • Return value

    @@ -343,7 +319,7 @@ self

    -PROCESS:OnStateChange(Fsm, Event, From, To) +PROCESS:OnStateChange(ProcessUnit, Event, From, To)
    @@ -354,7 +330,7 @@ self

    -
    -
    -
    - - Scheduler#SCHEDULER - -PROCESS.ProcessScheduler - -
    -
    - - - -
    -
    -
    -
    - - Unit#UNIT - -PROCESS.ProcessUnit - -
    -
    - - -
    @@ -443,19 +391,6 @@ self

    - -
    -
    -
    - - -PROCESS:StopEvents() - -
    -
    - - -
    diff --git a/Moose Training/Documentation/Process_Destroy.html b/Moose Training/Documentation/Process_Destroy.html index 7984dab21..e7b84b99d 100644 --- a/Moose Training/Documentation/Process_Destroy.html +++ b/Moose Training/Documentation/Process_Destroy.html @@ -75,11 +75,9 @@
  • Task_Route
  • Task_SEAD
  • Unit
  • -
  • Utils
  • Zone
  • env
  • land
  • -
  • routines
  • diff --git a/Moose Training/Documentation/Process_JTAC.html b/Moose Training/Documentation/Process_JTAC.html index 1388e0865..bbe55b515 100644 --- a/Moose Training/Documentation/Process_JTAC.html +++ b/Moose Training/Documentation/Process_JTAC.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Process_PatrolZone.html b/Moose Training/Documentation/Process_PatrolZone.html index 9d8352104..6f663e3f1 100644 --- a/Moose Training/Documentation/Process_PatrolZone.html +++ b/Moose Training/Documentation/Process_PatrolZone.html @@ -75,24 +75,22 @@
  • Task_Route
  • Task_SEAD
  • Unit
  • -
  • Utils
  • Zone
  • env
  • land
  • -
  • routines
  • Module Process_PatrolZone

    -

    This module contains the PROCESS_PATROLZONE class.

    +

    (AI) Make AI patrol routes or zones.


    1) #PROCESS_PATROLZONE class, extends StateMachine#STATEMACHINE

    -

    The #PROCESS_PATROLZONE class implements the core functions to patrol a Zone by an AIR Controllable. +

    The #PROCESS_PATROLZONE class implements the core functions to patrol a Zone by an AIR Controllable Group. The patrol algorithm works that for each airplane patrolling, upon arrival at the patrol zone, a random point is selected as the route point within the 3D space, within the given boundary limits. The airplane will fly towards the random 3D point within the patrol zone, using a random speed within the given altitude and speed limits. @@ -210,9 +208,7 @@ Use the method PROCESS_PATROLZONE.Ma

    Hereby the change log:

    -

    2016-08-17: PROCESS_PATROLZONE:New( PatrolSpawn, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) replaces PROCESS_PATROLZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed )

    - -

    2016-07-01: Initial class and API.

    +

    2016-09-01: Initial class and API.


    diff --git a/Moose Training/Documentation/Process_Pickup.html b/Moose Training/Documentation/Process_Pickup.html index e69baace3..c88a1f059 100644 --- a/Moose Training/Documentation/Process_Pickup.html +++ b/Moose Training/Documentation/Process_Pickup.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Process_Smoke.html b/Moose Training/Documentation/Process_Smoke.html index 4fe6954cc..0115dd96c 100644 --- a/Moose Training/Documentation/Process_Smoke.html +++ b/Moose Training/Documentation/Process_Smoke.html @@ -18,8 +18,10 @@
    @@ -102,12 +100,6 @@
    - - - - @@ -224,20 +216,6 @@ - - -
    -
    - - - -PROCESS_SMOKE_TARGETS.Fsm - -
    -
    - - -
    diff --git a/Moose Training/Documentation/Route.html b/Moose Training/Documentation/Route.html new file mode 100644 index 000000000..418f30ebd --- /dev/null +++ b/Moose Training/Documentation/Route.html @@ -0,0 +1,459 @@ + + + + + + +
    +
    + +
    +
    +
    +
    + +
    +

    Module Route

    + +

    (SP) (MP) (FSM) Route AI or players to waypoints or zones.

    + + + +
    + +

    1) #ROUTEZONE class, extends StateMachine#STATEMACHINE

    +

    The #ROUTEZONE class implements the core functions to route an AIR Controllable player Unit to a Zone. +The player receives on perioding times messages with the coordinates of the route to follow. +Upon arrival at the zone, a confirmation of arrival is sent, and the process will be ended.

    + +

    1.1) ROUTEZONE constructor:

    + + + +

    1.2) ROUTEZONE state machine:

    +

    The ROUTEZONE is a state machine: it manages the different events and states of the Controllable it is controlling.

    + +

    1.2.1) ROUTEZONE Events:

    + +
      +
    • ROUTEZONE.Start( Controllable ): Start the route to the zone. Messages will appear within defined intervals.
    • +
    + +

    1.2.2) ROUTEZONE States:

    + +
      +
    • UnArrived: The player is still underway to the zone.
    • +
    • Arrived: The Controllable has arrived at the zone.
    • +
    + +

    1.2.3) ROUTEZONE state transition functions:

    + +

    State transition functions can be set by the mission designer customizing or improving the behaviour of the state. +There are 2 moments when state transition functions will be called by the state machine:

    + +
      +
    • Before the state transition. + The state transition function needs to start with the name OnBefore + the name of the state. + If the state transition function returns false, then the processing of the state transition will not be done! + If you want to change the behaviour of the AIControllable at this event, return false, + but then you'll need to specify your own logic using the AIControllable!

    • +
    • After the state transition. + The state transition function needs to start with the name OnAfter + the name of the state. + These state transition functions need to provide a return value, which is specified at the function description.

    • +
    + +

    1.3) Manage the ROUTEZONE parameters:

    +

    The following methods are available to modify the parameters of a ROUTEZONE object:

    + + + + +

    Global(s)

    +
    PROCESS:AddScore(ProcessStatus, ScoreText, Score)PROCESS:AddScore(Task, State, ScoreText, Score, ProcessStatus)

    Adds a score for the PROCESS to be achieved.

    PROCESS.ClassName -
    PROCESS.Fsm -
    PROCESS:New(ProcessName, Task, ProcessUnit)PROCESS:New(ProcessName, Task, ProcessUnit, FSMT)

    Instantiates a new TASK Base.

    PROCESS:OnStateChange(Fsm, Event, From, To)PROCESS:OnStateChange(ProcessUnit, Event, From, To)

    StateMachine callback function for a PROCESS

    PROCESS.ProcessName -
    PROCESS.ProcessScheduler - -
    PROCESS.ProcessUnit -
    PROCESS.Scores -
    PROCESS:StopEvents() -
    PROCESS_SMOKE_TARGETS.ClassName -
    PROCESS_SMOKE_TARGETS.Fsm -
    + + + + +
    ROUTEZONE + +
    +

    Type ROUTEZONE

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ROUTEZONE.ClassName + +
    ROUTEZONE.DisplayCategory + +
    ROUTEZONE.DisplayCount + +
    ROUTEZONE.DisplayInterval + +
    ROUTEZONE.DisplayMessage + +
    ROUTEZONE.DisplayTime + +
    ROUTEZONE:New(Task, Unit, ProcessUnit, TargetZone) +

    Creates a new routing state machine.

    +
    ROUTEZONE.ProcessUnit + +
    ROUTEZONE.TASK + +
    ROUTEZONE.TargetZone + +
    ROUTEZONE:onleaveUnArrived(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    + +

    Global(s)

    +
    +
    + + #ROUTEZONE + +ROUTEZONE + +
    +
    + + + +
    +
    +

    Type Route

    + +

    Type ROUTEZONE

    + +

    ROUTEZONE class

    + +

    Field(s)

    +
    +
    + + #string + +ROUTEZONE.ClassName + +
    +
    + + + +
    +
    +
    +
    + + #string + +ROUTEZONE.DisplayCategory + +
    +
    + + + + +

    Route is the default display category

    + +
    +
    +
    +
    + + #number + +ROUTEZONE.DisplayCount + +
    +
    + + + +
    +
    +
    +
    + + #number + +ROUTEZONE.DisplayInterval + +
    +
    + + + +
    +
    +
    +
    + + #boolean + +ROUTEZONE.DisplayMessage + +
    +
    + + + +
    +
    +
    +
    + + #number + +ROUTEZONE.DisplayTime + +
    +
    + + + + +

    10 seconds is the default

    + +
    +
    +
    +
    + + +ROUTEZONE:New(Task, Unit, ProcessUnit, TargetZone) + +
    +
    + +

    Creates a new routing state machine.

    + + +

    The task will route a CLIENT to a ZONE until the CLIENT is within that ZONE.

    + +

    Parameters

    +
      +
    • + +

      Task#TASK Task :

      + +
    • +
    • + +

      Unit#UNIT Unit :

      + +
    • +
    • + +

      ProcessUnit :

      + +
    • +
    • + +

      TargetZone :

      + +
    • +
    +

    Return value

    + +

    #ROUTEZONE: +self

    + +
    +
    +
    +
    + + Unit#UNIT + +ROUTEZONE.ProcessUnit + +
    +
    + + + +
    +
    +
    +
    + + Task#TASK + +ROUTEZONE.TASK + +
    +
    + + + +
    +
    +
    +
    + + Zone#ZONE_BASE + +ROUTEZONE.TargetZone + +
    +
    + + + +
    +
    +
    +
    + + +ROUTEZONE:onleaveUnArrived(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    + +
    + +
    + + diff --git a/Moose Training/Documentation/Scheduler.html b/Moose Training/Documentation/Scheduler.html index 9cc40d711..6ea2906a8 100644 --- a/Moose Training/Documentation/Scheduler.html +++ b/Moose Training/Documentation/Scheduler.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Scoring.html b/Moose Training/Documentation/Scoring.html index 205a30f14..f96f573a5 100644 --- a/Moose Training/Documentation/Scoring.html +++ b/Moose Training/Documentation/Scoring.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Sead.html b/Moose Training/Documentation/Sead.html index 7605ce791..8e6110ea4 100644 --- a/Moose Training/Documentation/Sead.html +++ b/Moose Training/Documentation/Sead.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Set.html b/Moose Training/Documentation/Set.html index a6ff9b331..a0445b1c8 100644 --- a/Moose Training/Documentation/Set.html +++ b/Moose Training/Documentation/Set.html @@ -18,8 +18,10 @@
    @@ -480,6 +478,12 @@ The following iterator methods are currently available within the SETAIRBAS SET_BASE:Add(ObjectName, Object) +

    Adds a Base#BASE object in the Set#SET_BASE, using a given ObjectName as the index.

    + + + + SET_BASE:AddObject(Object) +

    Adds a Base#BASE object in the Set#SET_BASE, using the Object Name as the index.

    @@ -1559,7 +1563,7 @@ A single name or an array of AIRBASE names.

    -

    Adds a Base#BASE object in the Set#SET_BASE, using the Object Name as the index.

    +

    Adds a Base#BASE object in the Set#SET_BASE, using a given ObjectName as the index.

    Parameters

      @@ -1579,6 +1583,32 @@ A single name or an array of AIRBASE names.

      Base#BASE: The added BASE Object.

      +
    + +
    +
    + + +SET_BASE:AddObject(Object) + +
    +
    + +

    Adds a Base#BASE object in the Set#SET_BASE, using the Object Name as the index.

    + +

    Parameter

    + +

    Return value

    + +

    Base#BASE: +The added BASE Object.

    +
    diff --git a/Moose Training/Documentation/Spawn.html b/Moose Training/Documentation/Spawn.html index b0ccb6e61..2ea2eb130 100644 --- a/Moose Training/Documentation/Spawn.html +++ b/Moose Training/Documentation/Spawn.html @@ -18,8 +18,10 @@
    @@ -2177,7 +2175,7 @@ when nothing was spawned.

    - + #number SPAWN.SpawnMaxGroups @@ -2194,7 +2192,7 @@ when nothing was spawned.

    - + #number SPAWN.SpawnMaxUnitsAlive @@ -2497,7 +2495,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) -

    When the first Spawn executes, all the Groups need to be made visible before start.

    +

    Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.

    diff --git a/Moose Training/Documentation/StateMachine.html b/Moose Training/Documentation/StateMachine.html index a7a3db451..ad966ec66 100644 --- a/Moose Training/Documentation/StateMachine.html +++ b/Moose Training/Documentation/StateMachine.html @@ -18,8 +18,10 @@
    @@ -338,7 +336,7 @@ It is a fantastic development, this module.

    - STATEMACHINE_TASK:New(Task, TaskUnit, options) + STATEMACHINE_TASK:New(FSMT, Task, TaskUnit)

    Creates a new STATEMACHINE_TASK object.

    @@ -1146,7 +1144,7 @@ FSMSet (optional) The Set object that the STATEMACHINE_SET governs.

    -STATEMACHINE_TASK:New(Task, TaskUnit, options) +STATEMACHINE_TASK:New(FSMT, Task, TaskUnit)
    @@ -1157,17 +1155,17 @@ FSMSet (optional) The Set object that the STATEMACHINE_SET governs.

    diff --git a/Moose Training/Documentation/Static.html b/Moose Training/Documentation/Static.html index e8efc6d36..9208e954b 100644 --- a/Moose Training/Documentation/Static.html +++ b/Moose Training/Documentation/Static.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/StaticObject.html b/Moose Training/Documentation/StaticObject.html index 217f194be..6033a6c3f 100644 --- a/Moose Training/Documentation/StaticObject.html +++ b/Moose Training/Documentation/StaticObject.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/TASK.html b/Moose Training/Documentation/TASK.html index c32771bf4..7b091b9fd 100644 --- a/Moose Training/Documentation/TASK.html +++ b/Moose Training/Documentation/TASK.html @@ -18,8 +18,10 @@
    @@ -643,8 +641,8 @@ Use the method TASK_BASE.AddScore() to add

    Return value

    -

    #TASK_BASE: -self

    +

    Process#PROCESS: +The process that was added.

    diff --git a/Moose Training/Documentation/Task_A2G.html b/Moose Training/Documentation/Task_A2G.html index 240475e51..7273829e6 100644 --- a/Moose Training/Documentation/Task_A2G.html +++ b/Moose Training/Documentation/Task_A2G.html @@ -18,8 +18,10 @@

    Module Task_A2G

    -

    This module contains the TASK_A2G classes.

    +

    (AI) (SP) (MP) Tasking for Air to Ground Processes.

    diff --git a/Moose Training/Documentation/Task_Assign.html b/Moose Training/Documentation/Task_Assign.html index b0b47a21c..122e20e49 100644 --- a/Moose Training/Documentation/Task_Assign.html +++ b/Moose Training/Documentation/Task_Assign.html @@ -75,11 +75,9 @@
  • Task_Route
  • Task_SEAD
  • Unit
  • -
  • Utils
  • Zone
  • env
  • land
  • -
  • routines
  • diff --git a/Moose Training/Documentation/Task_Client_Menu.html b/Moose Training/Documentation/Task_Client_Menu.html index fd545f44e..3d1bd3e84 100644 --- a/Moose Training/Documentation/Task_Client_Menu.html +++ b/Moose Training/Documentation/Task_Client_Menu.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Task_PICKUP.html b/Moose Training/Documentation/Task_PICKUP.html index 909f4947a..d9e9376cd 100644 --- a/Moose Training/Documentation/Task_PICKUP.html +++ b/Moose Training/Documentation/Task_PICKUP.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/Task_Route.html b/Moose Training/Documentation/Task_Route.html index 488a81092..9b4d7f746 100644 --- a/Moose Training/Documentation/Task_Route.html +++ b/Moose Training/Documentation/Task_Route.html @@ -75,11 +75,9 @@
  • Task_Route
  • Task_SEAD
  • Unit
  • -
  • Utils
  • Zone
  • env
  • land
  • -
  • routines
  • diff --git a/Moose Training/Documentation/Task_SEAD.html b/Moose Training/Documentation/Task_SEAD.html index 1d1582278..c734a3f23 100644 --- a/Moose Training/Documentation/Task_SEAD.html +++ b/Moose Training/Documentation/Task_SEAD.html @@ -18,8 +18,10 @@
    @@ -158,24 +156,6 @@ The TASK_SEAD is implemented using a TASK_SEAD.TargetSetUnit - - - - TASK_SEAD.TaskScheduler - - - - - - TASK_SEAD:_Schedule() - - - - - - TASK_SEAD:_Scheduler() - - @@ -379,46 +359,6 @@ self

    - - -
    -
    - - - -TASK_SEAD.TaskScheduler - -
    -
    - - - -
    -
    -
    -
    - - -TASK_SEAD:_Schedule() - -
    -
    - - - -
    -
    -
    -
    - - -TASK_SEAD:_Scheduler() - -
    -
    - - -
    diff --git a/Moose Training/Documentation/TrackHits.html b/Moose Training/Documentation/TrackHits.html new file mode 100644 index 000000000..806370aa5 --- /dev/null +++ b/Moose Training/Documentation/TrackHits.html @@ -0,0 +1,776 @@ + + + + + + +
    +
    + +
    +
    +
    +
    + +
    +

    Module TrackHits

    + +

    (SP) (MP) (FSM) Detect, count and report successful hits to DCS objects.

    + + + +
    + +

    #ACCOUNT FSM class, extends Process#PROCESS

    +

    The #ACCOUNT_DEADS class detects, counts and reports successful hits to DCS objects. +The process is given a Set of units that will be tracked upon successful destruction. +The process will end after each target has been successfully destroyed. +Each successful destruction will trigger a status change.

    + +

    1.1) ACCOUNT_DEADS constructor:

    + + + +

    1.2) ACCOUNT state machine:

    +

    The ACCOUNT is a state machine: it manages the different events and states of the Controllable it is controlling.

    + +

    1.2.1) ACCOUNT Events:

    + +

    Event methods are available (dynamically allocated by the state machine), that accomodate for state transitions to occur in the process. +There are two types of event methods:

    + +
      +
    • Immediate: The event method has exactly the name of the event.
    • +
    • Delayed: The event method starts with a __ + the name of the event. The first parameter of the event method is a number value, expressing the delay in seconds when the event will be executed.
    • +
    + +

    These are the events defined in this class:

    + +
      +
    • Start: The process is started. The process will go into the Waiting state.
    • +
    • Event: A relevant event has occured that needs to be accounted for. The process will go into the Account state.
    • +
    • More: There are more DCS events that need to be accounted for. The process will go back into the Waiting state.
    • +
    • NoMore: There are no more DCS events that need to be accounted for. The process will go into the Success state.
    • +
    + +

    1.2.2) ACCOUNT States:

    + +
      +
    • Assigned: The player is assigned to the task. This is the initialization state for the process.
    • +
    • Waiting: The process is awaiting an DCS event to occur within the simulator. This event is called automatically every 1 second.
    • +
    • Account: The relevant DCS event has occurred, and is accounted for.
    • +
    • Success (*): All DCS events were accounted for.
    • +
    • Failed (*): The process has failed.
    • +
    + +

    (*) End states of the process.

    + +

    1.2.3) ACCOUNT_DEADS state transition functions:

    + +

    State transition functions can be set by the mission designer customizing or improving the behaviour of the state. +There are 2 moments when state transition functions will be called by the state machine:

    + +
      +
    • Before the state transition. + The state transition function needs to start with the name OnBefore + the name of the state. + If the state transition function returns false, then the processing of the state transition will not be done! + If you want to change the behaviour of the AIControllable at this event, return false, + but then you'll need to specify your own logic using the AIControllable!

    • +
    • After the state transition. + The state transition function needs to start with the name OnAfter + the name of the state. + These state transition functions need to provide a return value, which is specified at the function description.

    • +
    + +

    1.3) Manage the ACCOUNT_DEADS parameters:

    +

    The following methods are available to modify the parameters of a ACCOUNT_DEADS object:

    + + + + +

    Global(s)

    + + + + + +
    ACCOUNT_DEADS + +
    +

    Type ACCOUNT_DEADS

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ACCOUNT_DEADS.ClassName + +
    ACCOUNT_DEADS.DisplayCategory + +
    ACCOUNT_DEADS.DisplayCount + +
    ACCOUNT_DEADS.DisplayInterval + +
    ACCOUNT_DEADS.DisplayMessage + +
    ACCOUNT_DEADS.DisplayTime + +
    ACCOUNT_DEADS:EventDead(Event) + +
    ACCOUNT_DEADS.Fsm + +
    ACCOUNT_DEADS:New(ProcessUnit, TargetSetUnit, TaskName) +

    Creates a new DESTROY process.

    +
    ACCOUNT_DEADS:OnDestroyed(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    ACCOUNT_DEADS:OnHitTarget(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    ACCOUNT_DEADS:OnKilled(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    ACCOUNT_DEADS:OnMoreTargets(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    ACCOUNT_DEADS:OnRestart(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    ACCOUNT_DEADS:OnStart(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    ACCOUNT_DEADS:OnWaiting(ProcessUnit, Event, From, To) +

    StateMachine callback function

    +
    ACCOUNT_DEADS.TargetSetUnit + +
    ACCOUNT_DEADS.TaskName + +
    + +

    Type ASSIGN_MENU_ACCEPT

    + + + + + +
    ASSIGN_MENU_ACCEPT.DisplayCount + +
    + +

    Global(s)

    +
    +
    + + #ACCOUNT_DEADS + +ACCOUNT_DEADS + +
    +
    + + + +
    +
    +

    Type TrackHits

    + +

    Type ACCOUNT_DEADS

    + +

    ACCOUNT_DEADS class

    + +

    Field(s)

    +
    +
    + + #string + +ACCOUNT_DEADS.ClassName + +
    +
    + + + +
    +
    +
    +
    + + #string + +ACCOUNT_DEADS.DisplayCategory + +
    +
    + + + + +

    Targets is the default display category

    + +
    +
    +
    +
    + + #number + +ACCOUNT_DEADS.DisplayCount + +
    +
    + + + +
    +
    +
    +
    + + #number + +ACCOUNT_DEADS.DisplayInterval + +
    +
    + + + +
    +
    +
    +
    + + #boolean + +ACCOUNT_DEADS.DisplayMessage + +
    +
    + + + +
    +
    +
    +
    + + #number + +ACCOUNT_DEADS.DisplayTime + +
    +
    + + + + +

    10 seconds is the default

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:EventDead(Event) + +
    +
    + + + +

    Parameter

    + +
    +
    +
    +
    + + + +ACCOUNT_DEADS.Fsm + +
    +
    + + + +
    +
    +
    +
    + + +ACCOUNT_DEADS:New(ProcessUnit, TargetSetUnit, TaskName) + +
    +
    + +

    Creates a new DESTROY process.

    + +

    Parameters

    + +

    Return value

    + +

    #ACCOUNT_DEADS: +self

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:OnDestroyed(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:OnHitTarget(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:OnKilled(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:OnMoreTargets(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:OnRestart(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:OnStart(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    +
    +
    + + +ACCOUNT_DEADS:OnWaiting(ProcessUnit, Event, From, To) + +
    +
    + +

    StateMachine callback function

    + +

    Parameters

    + +
    +
    +
    +
    + + Set#SET_UNIT + +ACCOUNT_DEADS.TargetSetUnit + +
    +
    + + + +
    +
    +
    +
    + + + +ACCOUNT_DEADS.TaskName + +
    +
    + + + +
    +
    + +

    Type ASSIGN_MENU_ACCEPT

    +

    Field(s)

    +
    +
    + + #number + +ASSIGN_MENU_ACCEPT.DisplayCount + +
    +
    + + + +
    +
    + +
    + +
    + + diff --git a/Moose Training/Documentation/Unit.html b/Moose Training/Documentation/Unit.html index 755314b50..34dceef48 100644 --- a/Moose Training/Documentation/Unit.html +++ b/Moose Training/Documentation/Unit.html @@ -18,8 +18,10 @@
    @@ -158,6 +156,12 @@ If you want to obtain the complete 3D position including ori� UNIT + + + + i + + @@ -524,6 +528,23 @@ If you want to obtain the complete 3D position including ori� + + +
    +
    + + #number + +i + +
    +
    + + + + +

    Remove obscolete units from the group structure

    +

    Type Unit

    diff --git a/Moose Training/Documentation/Zone.html b/Moose Training/Documentation/Zone.html index 35d7c2af9..7b4122923 100644 --- a/Moose Training/Documentation/Zone.html +++ b/Moose Training/Documentation/Zone.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/env.html b/Moose Training/Documentation/env.html index 9fc9e0528..05349fbea 100644 --- a/Moose Training/Documentation/env.html +++ b/Moose Training/Documentation/env.html @@ -18,8 +18,10 @@
    diff --git a/Moose Training/Documentation/index.html b/Moose Training/Documentation/index.html index 8e508ace4..a6cf3cf7d 100644 --- a/Moose Training/Documentation/index.html +++ b/Moose Training/Documentation/index.html @@ -18,8 +18,10 @@
    @@ -89,6 +87,12 @@ AIBalancer

    This module contains the AIBALANCER class.

    + + + + Account + +

    (SP) (MP) (FSM) Account for (Detect, count and report) DCS events occuring on DCS objects (units).

    @@ -101,6 +105,12 @@ AirbasePolice

    This module contains the AIRBASEPOLICE classes.

    + + + + Assign + +

    (SP) (MP) (FSM) Accept or reject process for player (task) assignments.

    @@ -112,7 +122,7 @@ Cargo -

    This module contains the CARGO classes.

    +

    Management of logical cargo objects, that can be transported from and to transportation carriers.

    @@ -287,6 +297,12 @@ Object

    This module contains the OBJECT class.

    + + + + Patrol + +

    (AI) (FSM) Make AI patrol routes or zones.

    @@ -305,24 +321,12 @@ Process - - - - Process_Destroy - - Process_JTAC - - - - Process_PatrolZone - -

    This module contains the PROCESS_PATROLZONE class.

    @@ -335,6 +339,12 @@ Process_Smoke + + + + Route + +

    (SP) (MP) (FSM) Route AI or players to waypoints or zones.

    @@ -394,13 +404,7 @@ Task_A2G -

    This module contains the TASK_A2G classes.

    - - - - Task_Assign - -

    This module contains the PROCESS_ASSIGN classes.

    +

    (AI) (SP) (MP) Tasking for Air to Ground Processes.

    @@ -413,12 +417,6 @@ Task_PICKUP

    This module contains the TASK_PICKUP classes.

    - - - - Task_Route - - @@ -431,13 +429,6 @@ Unit

    This module contains the UNIT class.

    - - - - Utils - -

    This module contains derived utilities taken from the MIST framework, -which are excellent tools to be reused in an OO environment!.

    @@ -456,12 +447,6 @@ which are excellent tools to be reused in an OO environment!.

    land - - - - routines - -

    Various routines

    diff --git a/Moose Training/Documentation/land.html b/Moose Training/Documentation/land.html index 2ab0e972e..17f1a7876 100644 --- a/Moose Training/Documentation/land.html +++ b/Moose Training/Documentation/land.html @@ -18,8 +18,10 @@