├── .gitattributes ├── .github └── workflows │ ├── build-docs.yml │ ├── build-includes.yml │ └── gh-pages.yml ├── .gitignore ├── .gitmodules ├── .luacheckrc ├── .scannerwork ├── .sonar_lock └── report-task.txt ├── .vs ├── VSWorkspaceState.json └── slnx.sqlite ├── LICENSE ├── Moose Development ├── Debugger │ ├── MissionScripting.lua │ ├── READ.ME │ └── debugger.lua ├── Moose │ ├── .editorconfig │ ├── .vscode │ │ └── settings.json │ ├── AI │ │ ├── AI_A2A_Cap.lua │ │ ├── AI_A2A_Dispatcher.lua │ │ ├── AI_A2A_Gci.lua │ │ ├── AI_A2A_Patrol.lua │ │ ├── AI_A2G_BAI.lua │ │ ├── AI_A2G_CAS.lua │ │ ├── AI_A2G_Dispatcher.lua │ │ ├── AI_A2G_SEAD.lua │ │ ├── AI_Air.lua │ │ ├── AI_Air_Dispatcher.lua │ │ ├── AI_Air_Engage.lua │ │ ├── AI_Air_Patrol.lua │ │ ├── AI_Air_Squadron.lua │ │ ├── AI_BAI.lua │ │ ├── AI_Balancer.lua │ │ ├── AI_CAP.lua │ │ ├── AI_CAS.lua │ │ ├── AI_Cargo.lua │ │ ├── AI_Cargo_APC.lua │ │ ├── AI_Cargo_Airplane.lua │ │ ├── AI_Cargo_Dispatcher.lua │ │ ├── AI_Cargo_Dispatcher_APC.lua │ │ ├── AI_Cargo_Dispatcher_Airplane.lua │ │ ├── AI_Cargo_Dispatcher_Helicopter.lua │ │ ├── AI_Cargo_Dispatcher_Ship.lua │ │ ├── AI_Cargo_Helicopter.lua │ │ ├── AI_Cargo_Ship.lua │ │ ├── AI_Escort.lua │ │ ├── AI_Escort_Dispatcher.lua │ │ ├── AI_Escort_Dispatcher_Request.lua │ │ ├── AI_Escort_Request.lua │ │ ├── AI_Formation.lua │ │ └── AI_Patrol.lua │ ├── Actions │ │ ├── Act_Account.lua │ │ ├── Act_Assign.lua │ │ ├── Act_Assist.lua │ │ └── Act_Route.lua │ ├── Cargo │ │ ├── Cargo.lua │ │ ├── CargoCrate.lua │ │ ├── CargoGroup.lua │ │ ├── CargoSlingload.lua │ │ └── CargoUnit.lua │ ├── Core │ │ ├── Astar.lua │ │ ├── Base.lua │ │ ├── Beacon.lua │ │ ├── Condition.lua │ │ ├── Database.lua │ │ ├── Event.lua │ │ ├── Fsm.lua │ │ ├── Goal.lua │ │ ├── MarkerOps_Base.lua │ │ ├── Menu.lua │ │ ├── Message.lua │ │ ├── Pathline.lua │ │ ├── Point.lua │ │ ├── Report.lua │ │ ├── ScheduleDispatcher.lua │ │ ├── Scheduler.lua │ │ ├── Set.lua │ │ ├── Settings.lua │ │ ├── Spawn.lua │ │ ├── SpawnStatic.lua │ │ ├── Spot.lua │ │ ├── TextAndSound.lua │ │ ├── Timer.lua │ │ ├── UserFlag.lua │ │ ├── Velocity.lua │ │ ├── Zone.lua │ │ └── Zone_Detection.lua │ ├── DCS.lua │ ├── Functional │ │ ├── ATC_Ground.lua │ │ ├── Artillery.lua │ │ ├── CleanUp.lua │ │ ├── ClientWatch.lua │ │ ├── Designate.lua │ │ ├── Detection.lua │ │ ├── DetectionZones.lua │ │ ├── Escort.lua │ │ ├── Fox.lua │ │ ├── Mantis.lua │ │ ├── MissileTrainer.lua │ │ ├── Movement.lua │ │ ├── PseudoATC.lua │ │ ├── RAT.lua │ │ ├── Range.lua │ │ ├── Scoring.lua │ │ ├── Sead.lua │ │ ├── Shorad.lua │ │ ├── Suppression.lua │ │ ├── Warehouse.lua │ │ ├── ZoneCaptureCoalition.lua │ │ ├── ZoneGoal.lua │ │ ├── ZoneGoalCargo.lua │ │ └── ZoneGoalCoalition.lua │ ├── Globals.lua │ ├── Modules.lua │ ├── Ops │ │ ├── ATIS.lua │ │ ├── Airboss.lua │ │ ├── CSAR.lua │ │ ├── CTLD.lua │ │ ├── RecoveryTanker.lua │ │ └── RescueHelo.lua │ ├── Shapes │ │ ├── Circle.lua │ │ ├── Cube.lua │ │ ├── Line.lua │ │ ├── Oval.lua │ │ ├── Polygon.lua │ │ ├── ShapeBase.lua │ │ └── Triangle.lua │ ├── Sound │ │ ├── Radio.lua │ │ ├── RadioQueue.lua │ │ ├── RadioSpeech.lua │ │ ├── SRS.lua │ │ ├── SoundOutput.lua │ │ └── UserSound.lua │ ├── Tasking │ │ ├── CommandCenter.lua │ │ ├── DetectionManager.lua │ │ ├── Mission.lua │ │ ├── Task.lua │ │ ├── TaskInfo.lua │ │ ├── Task_A2A.lua │ │ ├── Task_A2A_Dispatcher.lua │ │ ├── Task_A2G.lua │ │ ├── Task_A2G_Dispatcher.lua │ │ ├── Task_CARGO.lua │ │ ├── Task_Capture_Dispatcher.lua │ │ ├── Task_Capture_Zone.lua │ │ ├── Task_Cargo_CSAR.lua │ │ ├── Task_Cargo_Dispatcher.lua │ │ ├── Task_Cargo_Transport.lua │ │ └── Task_Manager.lua │ ├── Utilities │ │ ├── Enums.lua │ │ ├── FiFo.lua │ │ ├── Profiler.lua │ │ ├── Socket.lua │ │ └── Utils.lua │ └── Wrapper │ │ ├── Airbase.lua │ │ ├── Client.lua │ │ ├── Controllable.lua │ │ ├── DynamicCargo.lua │ │ ├── Group.lua │ │ ├── Identifiable.lua │ │ ├── Marker.lua │ │ ├── Net.lua │ │ ├── Object.lua │ │ ├── Positionable.lua │ │ ├── Scenery.lua │ │ ├── Static.lua │ │ ├── Storage.lua │ │ ├── Unit.lua │ │ └── Weapon.lua ├── Release Notes │ ├── Release Notes 2.2.0.docx │ └── Release Notes 2.2.0.pdf ├── docs-header.html └── docs-header.py ├── Moose Setup ├── Eclipse │ ├── Moose Loader Dynamic.launch │ └── Moose Loader Static.launch ├── Moose Templates │ ├── Moose_Dynamic_Loader.lua │ └── Moose_Static_Loader.lua ├── Moose.files ├── Moose_Create.lua └── build_missions.bat ├── README.md ├── docker ├── build-docs │ ├── Dockerfile │ ├── docker-compose.yml │ └── start.sh ├── build-includes │ ├── Dockerfile │ ├── docker-compose.yml │ └── start.sh ├── gh-pages-check │ ├── Dockerfile │ └── docker-compose.yml └── gh-pages │ ├── Dockerfile │ └── docker-compose.yml └── docs ├── .gitignore ├── Dockerfile ├── Gemfile ├── LICENSE ├── _config.yml ├── _sass └── color_schemes │ └── moose.scss ├── advanced ├── concepts.md ├── debugger.md ├── desanitize-dcs.md ├── eclipse-installation.md ├── index.md └── text-to-speech.md ├── archive ├── classes-ai.md ├── classes-cargo.md ├── classes-core.md ├── classes-functional.md ├── classes-tasking.md ├── classes-wrapper.md ├── guide-beta-tester.md ├── guide-communities.md ├── guide-contribution.md ├── guide-debug.md ├── guide-designers.md ├── guide-developers.md ├── guide-setup-ldt.md ├── guide-starters.md ├── guide-usage.md └── index.md ├── beginner ├── ask-for-help.md ├── demo-missions.md ├── hello-world-build.md ├── hello-world.md ├── index.md ├── introduction.md ├── problems.md └── tipps-and-tricks.md ├── developer ├── buildsystem │ ├── build-docs.md │ ├── build-includes.md │ ├── gh-pages.md │ ├── index.md │ └── local-test.md └── index.md ├── docker-compose.yml ├── favicon.ico ├── images ├── archive │ ├── debugging │ │ ├── DEBUG_Add_Favorites.JPG │ │ ├── DEBUG_Breakpoint.JPG │ │ ├── DEBUG_Breakpoint_List.JPG │ │ ├── DEBUG_Bug.JPG │ │ ├── DEBUG_Debugger.JPG │ │ ├── DEBUG_Dynamic.JPG │ │ ├── DEBUG_Engine.JPG │ │ ├── DEBUG_Favorites.JPG │ │ ├── DEBUG_Flag.JPG │ │ ├── DEBUG_Intro.JPG │ │ ├── DEBUG_LDT_Setup.JPG │ │ ├── DEBUG_Listener.JPG │ │ ├── DEBUG_Loader.JPG │ │ ├── DEBUG_MissionScripting.JPG │ │ ├── DEBUG_Run_Listener.JPG │ │ ├── DEBUG_Session.JPG │ │ ├── DEBUG_Source.JPG │ │ ├── DEBUG_Static.JPG │ │ └── DEBUG_Tracking.JPG │ └── installation │ │ ├── DCS_Triggers_Empty.JPG │ │ ├── DCS_Triggers_Load_Mission_Add.JPG │ │ ├── DCS_Triggers_Load_Mission_File_Added.JPG │ │ ├── DCS_Triggers_Load_Mission_File_Select.JPG │ │ ├── DCS_Triggers_Load_Moose_Add.JPG │ │ ├── DCS_Triggers_Load_Moose_File_Added.JPG │ │ ├── DCS_Triggers_Load_Moose_Select_File.JPG │ │ ├── GitHub_Clone.JPG │ │ ├── GitHub_Issue_example.JPG │ │ ├── LDT_Add_Folder.JPG │ │ ├── LDT_Delete_Src.JPG │ │ ├── LDT_Mission_Folder_Name.JPG │ │ ├── LDT_Mission_Lua_File_Name.JPG │ │ ├── LDT_Moose_Framework_Finish.JPG │ │ ├── LDT_New_Project.JPG │ │ ├── LDT_New_Project_Projects.JPG │ │ ├── LDT_Project.JPG │ │ ├── LDT_Project_Existing_Location.JPG │ │ ├── LDT_Project_My_Missions.JPG │ │ ├── LDT_Script_Explorer.JPG │ │ ├── LDT_Select_Moose_Framework.JPG │ │ ├── MOOSE_Release_Cycle.JPG │ │ └── intellisense.jpg ├── beginner │ ├── dcs-menu-mission.png │ ├── dcs-message.jpg │ ├── dcs-my-missions.png │ ├── dcs-triggers-mission-start-actions-conf.png │ ├── dcs-triggers-mission-start-actions.png │ ├── dcs-triggers-mission-start-conditions.png │ ├── dcs-triggers-mission-start-conf.png │ ├── dcs-triggers-mission-start.png │ ├── dcs-triggers-once-actions.png │ ├── dcs-triggers-once-conditions-conf.png │ ├── dcs-triggers-once-conditions.png │ ├── dcs-triggers-once-conf.png │ ├── dcs-triggers-once.png │ ├── dcs-triggers-toolbar.png │ ├── discord-format-logs.png │ ├── discord-multi-line-code.png │ └── discord-single-line-code.png ├── classes │ ├── ai │ │ ├── a2a-dispatcher.jpg │ │ ├── a2g-cas.jpg │ │ ├── bai.jpg │ │ ├── balancer.jpg │ │ ├── cap.jpg │ │ ├── cargo-dispatcher-airplanes.jpg │ │ ├── cargo-dispatcher-apc.jpg │ │ ├── cargo-dispatcher-helicopters.jpg │ │ ├── cargo-dispatcher.jpg │ │ ├── formation.jpg │ │ └── patrol.jpg │ ├── cargo │ │ ├── cargocrate.jpg │ │ ├── cargogroup.jpg │ │ └── cargoslingload.jpg │ ├── category-cargo.jpg │ ├── category-core.jpg │ ├── category-functional.jpg │ ├── category-tasking.jpg │ ├── category-wrapper.jpg │ ├── core │ │ ├── base.jpg │ │ ├── database.jpg │ │ ├── event.jpg │ │ ├── fsm.jpg │ │ ├── goal.jpg │ │ ├── menu.jpg │ │ ├── message.jpg │ │ ├── point.jpg │ │ ├── report.jpg │ │ ├── scheduler.jpg │ │ ├── sets.jpg │ │ ├── settings.jpg │ │ ├── spawn.jpg │ │ ├── spawnstatic.jpg │ │ ├── spot.jpg │ │ ├── userflag.jpg │ │ ├── velocity.jpg │ │ └── zones.jpg │ ├── functional │ │ ├── artillery.jpg │ │ ├── atc-ground.jpg │ │ ├── cleanup.jpg │ │ ├── designation.jpg │ │ ├── detection.jpg │ │ ├── escorting.jpg │ │ ├── missile-trainer.jpg │ │ ├── range.jpg │ │ ├── rat.jpg │ │ ├── scoring.jpg │ │ ├── sead.jpg │ │ ├── suppression.jpg │ │ ├── warehouse.jpg │ │ └── zonecapturecoalition.jpg │ ├── overview.jpg │ ├── sound │ │ ├── radio.jpg │ │ └── usersound.jpg │ ├── tasking │ │ ├── cargo-dispatcher.jpg │ │ ├── commandcenter.jpg │ │ ├── mission.jpg │ │ ├── task-a2a-dispatcher.jpg │ │ └── task-a2g-dispatcher.jpg │ └── wrapper │ │ ├── airbase.jpg │ │ ├── group.jpg │ │ ├── static.jpg │ │ └── unit.jpg ├── deployment-flow.png ├── install │ ├── eclipse │ │ ├── ldk-1.png │ │ ├── ldk-2.png │ │ ├── lua-1.png │ │ ├── lua-2.png │ │ ├── project-1.png │ │ ├── project-2.png │ │ ├── project-3.png │ │ ├── project-4.png │ │ └── project-5.png │ └── text-to-speech │ │ ├── powershell-1.png │ │ ├── powershell-2.png │ │ ├── powershell-3.png │ │ ├── srs-client.png │ │ ├── srs-executables.png │ │ ├── srs-overlay.png │ │ ├── srs-server.png │ │ ├── srs-status-1.png │ │ └── srs-status-2.png └── moosedoc.jpg ├── index.md ├── just-the-docs.gemspec └── repositories.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | 19 | # Avoid Windows line endings on shell scripts 20 | # Needed for dockerfile builds 21 | *.sh text eol=lf 22 | -------------------------------------------------------------------------------- /.github/workflows/build-includes.yml: -------------------------------------------------------------------------------- 1 | name: Moose-Includes 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | - develop 8 | - Apple/Develop 9 | 10 | paths: 11 | - 'Moose Setup/**/*.lua' 12 | - 'Moose Development/**/*.lua' 13 | - '.github/workflows/build-includes.yml' 14 | 15 | # Allows you to run this workflow manually from the Actions tab 16 | workflow_dispatch: 17 | 18 | jobs: 19 | Build: 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | - name: Extract branch name 24 | shell: bash 25 | run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT 26 | id: extract_branch 27 | 28 | - name: Build informations 29 | run: | 30 | echo "Triggered by: ${{ github.event_name }}" 31 | echo "Running on: ${{ runner.os }}" 32 | echo "Ref: ${{ github.ref }}" 33 | echo "Branch name: ${{ steps.extract_branch.outputs.branch }}" 34 | echo "Repository: ${{ github.repository }}" 35 | echo "Commit-Id: ${{ github.sha }}" 36 | echo "Owner: ${{ github.repository_owner }}" 37 | echo "FORCE_PUSH: ${{ vars.FORCE_PUSH }}" 38 | 39 | ######################################################################### 40 | # Prepare build environment 41 | ######################################################################### 42 | - name: Check out repository code 43 | uses: actions/checkout@v4 44 | 45 | - name: Prepare build output folders 46 | run: | 47 | mkdir -p build/result/Moose_Include_Dynamic 48 | mkdir -p build/result/Moose_Include_Static 49 | 50 | - name: Update apt-get (needed for act docker image) 51 | run: | 52 | sudo rm /etc/apt/sources.list.d/microsoft-prod.list 53 | sudo apt-get -qq update 54 | 55 | - name: Install tree 56 | run: | 57 | sudo apt-get -qq install tree 58 | 59 | ######################################################################### 60 | # Install all prerequisites 61 | ######################################################################### 62 | - name: Install Lua 5.3 63 | run: | 64 | sudo apt-get -qq install lua5.3 -y 65 | - name: Check Lua version 66 | run: | 67 | lua -v 68 | 69 | - name: Install LuaRocks 70 | run: | 71 | sudo apt-get -qq install luarocks -y 72 | - name: Check LuaRocks version 73 | run: | 74 | luarocks --version 75 | 76 | - name: Install Lua 5.3 Dev for prerequisites for LuaSrcDiet 77 | run: | 78 | sudo apt-get -qq install liblua5.3-dev -y 79 | 80 | - name: Install LuaSrcDiet 81 | run: | 82 | sudo luarocks install luasrcdiet 83 | 84 | - name: Install LuaCheck 85 | run: | 86 | sudo luarocks install luacheck 87 | 88 | ######################################################################### 89 | # Build Include files 90 | ######################################################################### 91 | - name: Build Include Static 92 | run: | 93 | export COMMIT_TIME=$(git show -s --format=%cd ${{ github.sha }} --date=iso-strict) 94 | lua5.3 "./Moose Setup/Moose_Create.lua" S "$COMMIT_TIME-${{ github.sha }}" "./Moose Development/Moose" "./Moose Setup" "./build/result/Moose_Include_Static" 95 | 96 | - name: Build Includes Dynamic 97 | run: | 98 | export COMMIT_TIME=$(git show -s --format=%cd ${{ github.sha }} --date=iso-strict) 99 | lua5.3 "./Moose Setup/Moose_Create.lua" D "$COMMIT_TIME-${{ github.sha }}" "./Moose Development/Moose" "./Moose Setup" "./build/result/Moose_Include_Dynamic" 100 | 101 | ######################################################################### 102 | # Run LuaCheck 103 | ######################################################################### 104 | - name: Run LuaCheck 105 | if: ${{ vars.SKIP_LUACHECK != true }} 106 | continue-on-error: true 107 | run: | 108 | luacheck --std=lua51c --config=.luacheckrc -gurasqq "Moose Development/Moose" 109 | 110 | - name: Run LuaSrcDiet 111 | run: | 112 | luasrcdiet --basic --opt-emptylines ./build/result/Moose_Include_Static/Moose.lua -o ./build/result/Moose_Include_Static/Moose_.lua 113 | 114 | ######################################################################### 115 | # Push to MOOSE_INCLUDE 116 | ######################################################################### 117 | - name: Checkout MOOSE_INCLUDE 118 | uses: actions/checkout@v4 119 | with: 120 | repository: ${{ github.repository_owner }}/MOOSE_INCLUDE 121 | path: './build/MOOSE_INCLUDE' 122 | fetch-depth: 0 123 | ref: ${{ steps.extract_branch.outputs.branch }} 124 | token: ${{ secrets.BOT_TOKEN }} 125 | 126 | - name: Create target folder (needed if checkout is deactivated) 127 | run: mkdir -p build/MOOSE_INCLUDE 128 | 129 | - name: Copy build reseult to MOOSE_INCLUDE 130 | run: | 131 | cp -r ./build/result/* ./build/MOOSE_INCLUDE/ 132 | 133 | - name: Push result to MOOSE_INCLUDE repository 134 | if: ${{ vars.FORCE_PUSH == 'true' }} 135 | run: | 136 | git config user.name "MooseBotter" 137 | git config user.email "MooseBotter@users.noreply.github.com" 138 | git add . 139 | git commit --allow-empty -m "Auto commit by GitHub Actions Workflow" 140 | git push --set-upstream origin ${{ steps.extract_branch.outputs.branch }} 141 | 142 | working-directory: ${{ github.workspace }}/build/MOOSE_INCLUDE 143 | 144 | ######################################################################### 145 | # Show the results 146 | ######################################################################### 147 | - name: List files in the repository 148 | run: | 149 | tree ${{ github.workspace }}/build 150 | 151 | - run: echo "This job's status is ${{ job.status }}." 152 | -------------------------------------------------------------------------------- /.github/workflows/gh-pages.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. 2 | # They are provided by a third-party and are governed by 3 | # separate terms of service, privacy policy, and support 4 | # documentation. 5 | 6 | # Sample workflow for building and deploying a Jekyll site to GitHub Pages 7 | name: Deploy Jekyll site to Pages 8 | 9 | on: 10 | push: 11 | branches: ["master"] 12 | paths: 13 | - 'docs/**' 14 | - '.github/workflows/gh-pages.yml' 15 | 16 | # Allows you to run this workflow manually from the Actions tab 17 | workflow_dispatch: 18 | 19 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 20 | permissions: 21 | contents: read 22 | pages: write 23 | id-token: write 24 | 25 | # Allow one concurrent deployment 26 | concurrency: 27 | group: "pages" 28 | cancel-in-progress: true 29 | 30 | jobs: 31 | # Build job 32 | build: 33 | runs-on: ubuntu-latest 34 | steps: 35 | - name: Checkout 36 | uses: actions/checkout@v4 37 | - name: Setup Ruby 38 | uses: ruby/setup-ruby@v1 39 | with: 40 | ruby-version: '3.1' # Not needed with a .ruby-version file 41 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 42 | cache-version: 0 # Increment this number if you need to re-download cached gems 43 | working-directory: docs/ 44 | - name: Setup Pages 45 | id: pages 46 | uses: actions/configure-pages@v4 47 | - name: Build with Jekyll 48 | # Outputs to the './_site' directory by default 49 | run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" 50 | env: 51 | JEKYLL_ENV: production 52 | working-directory: docs/ 53 | - name: Upload artifact 54 | # Automatically uploads an artifact from the './_site' directory by default 55 | uses: actions/upload-pages-artifact@v3 56 | with: 57 | path: docs/_site/ 58 | 59 | # Deployment job 60 | deploy: 61 | environment: 62 | name: github-pages 63 | url: ${{ steps.deployment.outputs.page_url }} 64 | runs-on: ubuntu-latest 65 | needs: build 66 | steps: 67 | - name: Deploy to GitHub Pages 68 | id: deployment 69 | uses: actions/deploy-pages@v4 70 | 71 | check: 72 | runs-on: ubuntu-latest 73 | needs: deploy 74 | steps: 75 | - name: Setup Node 76 | uses: actions/setup-node@v4 77 | - run: npm install linkinator 78 | - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --retry-errors --retry-errors-count 3 --retry-errors-jitter 79 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | .project 7 | .metadata 8 | tmp/ 9 | *.tmp 10 | *.bak 11 | *.swp 12 | *~.nib 13 | local.properties 14 | .classpath 15 | .settings/ 16 | .loadpath 17 | 18 | # External tool builders 19 | .externalToolBuilders/ 20 | 21 | # AppVeyor 22 | .appveyor/ 23 | 24 | # CDT-specific 25 | .cproject 26 | 27 | # PDT-specific 28 | .buildpath 29 | 30 | 31 | ################# 32 | ## Visual Studio 33 | ################# 34 | 35 | ## Ignore Visual Studio temporary files, build results, and 36 | ## files generated by popular Visual Studio add-ons. 37 | 38 | .vscode 39 | 40 | # User-specific files 41 | *.suo 42 | *.user 43 | *.sln.docstates 44 | 45 | # Build results 46 | 47 | [Dd]ebug/ 48 | [Rr]elease/ 49 | x64/ 50 | build/ 51 | [Oo]bj/ 52 | 53 | # MSTest test Results 54 | [Tt]est[Rr]esult*/ 55 | [Bb]uild[Ll]og.* 56 | 57 | *_i.c 58 | *_p.c 59 | *.ilk 60 | *.meta 61 | *.obj 62 | *.pch 63 | *.pdb 64 | *.pgc 65 | *.pgd 66 | *.rsp 67 | *.sbr 68 | *.tlb 69 | *.tli 70 | *.tlh 71 | *.tmp 72 | *.tmp_proj 73 | *.log 74 | *.vspscc 75 | *.vssscc 76 | .builds 77 | *.pidb 78 | *.log 79 | *.scc 80 | 81 | # Visual C++ cache files 82 | ipch/ 83 | *.aps 84 | *.ncb 85 | *.opensdf 86 | *.sdf 87 | *.cachefile 88 | 89 | # Visual Studio profiler 90 | *.psess 91 | *.vsp 92 | *.vspx 93 | 94 | # Guidance Automation Toolkit 95 | *.gpState 96 | 97 | # ReSharper is a .NET coding add-in 98 | _ReSharper*/ 99 | *.[Rr]e[Ss]harper 100 | 101 | # TeamCity is a build add-in 102 | _TeamCity* 103 | 104 | # DotCover is a Code Coverage Tool 105 | *.dotCover 106 | 107 | # NCrunch 108 | *.ncrunch* 109 | .*crunch*.local.xml 110 | 111 | # Installshield output folder 112 | [Ee]xpress/ 113 | 114 | # DocProject is a documentation generator add-in 115 | DocProject/buildhelp/ 116 | DocProject/Help/*.HxT 117 | DocProject/Help/*.HxC 118 | DocProject/Help/*.hhc 119 | DocProject/Help/*.hhk 120 | DocProject/Help/*.hhp 121 | DocProject/Help/Html2 122 | DocProject/Help/html 123 | 124 | # Click-Once directory 125 | publish/ 126 | 127 | # Publish Web Output 128 | *.Publish.xml 129 | *.pubxml 130 | *.publishproj 131 | 132 | # NuGet Packages Directory 133 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 134 | #packages/ 135 | 136 | # Windows Azure Build Output 137 | csx 138 | *.build.csdef 139 | 140 | # Windows Store app package directory 141 | AppPackages/ 142 | 143 | # Others 144 | sql/ 145 | *.Cache 146 | ClientBin/ 147 | [Ss]tyle[Cc]op.* 148 | ~$* 149 | *~ 150 | *.dbmdl 151 | *.[Pp]ublish.xml 152 | *.pfx 153 | *.publishsettings 154 | 155 | # RIA/Silverlight projects 156 | Generated_Code/ 157 | 158 | # Backup & report files from converting an old project file to a newer 159 | # Visual Studio version. Backup files are not needed, because we have git ;-) 160 | _UpgradeReport_Files/ 161 | Backup*/ 162 | UpgradeLog*.XML 163 | UpgradeLog*.htm 164 | 165 | # SQL Server files 166 | App_Data/*.mdf 167 | App_Data/*.ldf 168 | 169 | ############# 170 | ## Windows detritus 171 | ############# 172 | 173 | # Windows image file caches 174 | Thumbs.db 175 | ehthumbs.db 176 | 177 | # Folder config file 178 | Desktop.ini 179 | 180 | # Recycle Bin used on file shares 181 | $RECYCLE.BIN/ 182 | 183 | # Mac crap 184 | .DS_Store 185 | 186 | 187 | ############# 188 | ## Python 189 | ############# 190 | 191 | *.py[cod] 192 | 193 | # Packages 194 | *.egg 195 | *.egg-info 196 | dist/ 197 | build/ 198 | eggs/ 199 | parts/ 200 | var/ 201 | sdist/ 202 | develop-eggs/ 203 | .installed.cfg 204 | 205 | # Installer logs 206 | pip-log.txt 207 | 208 | # Unit test / coverage reports 209 | .coverage 210 | .tox 211 | 212 | #Translations 213 | *.mo 214 | 215 | #Mr Developer 216 | .mr.developer.cfg 217 | *.gss 218 | *._gs 219 | *.gsl 220 | 221 | #Goodsync 222 | _gsdata_/ 223 | 224 | # PyCharm 225 | .idea 226 | 227 | #GITHUB 228 | Moose Test Missions/MOOSE_Test_Template.miz 229 | Moose Development/Moose/.vscode/launch.json 230 | MooseCodeWS.code-workspace 231 | 232 | # Excludes for act (https://github.com/nektos/act) 233 | .secrets 234 | .env 235 | .actrc 236 | .vars 237 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/.gitmodules -------------------------------------------------------------------------------- /.luacheckrc: -------------------------------------------------------------------------------- 1 | ignore = { 2 | "011", -- A syntax error. 3 | "021", -- An invalid inline option. 4 | "022", -- An unpaired inline push directive. 5 | "023", -- An unpaired inline pop directive. 6 | "111", -- Setting an undefined global variable. 7 | "112", -- Mutating an undefined global variable. 8 | "113", -- Accessing an undefined global variable. 9 | "121", -- Setting a read-only global variable. 10 | "122", -- Setting a read-only field of a global variable. 11 | "131", -- Unused implicitly defined global variable. 12 | "142", -- Setting an undefined field of a global variable. 13 | "143", -- Accessing an undefined field of a global variable. 14 | "211", -- Unused local variable. 15 | "212", -- Unused argument. 16 | "213", -- Unused loop variable. 17 | "221", -- Local variable is accessed but never set. 18 | "231", -- Local variable is set but never accessed. 19 | "232", -- An argument is set but never accessed. 20 | "233", -- Loop variable is set but never accessed. 21 | "241", -- Local variable is mutated but never accessed. 22 | "311", -- Value assigned to a local variable is unused. 23 | "312", -- Value of an argument is unused. 24 | "313", -- Value of a loop variable is unused. 25 | "314", -- Value of a field in a table literal is unused. 26 | "321", -- Accessing uninitialized local variable. 27 | "331", -- Value assigned to a local variable is mutated but never accessed. 28 | "341", -- Mutating uninitialized local variable. 29 | "411", -- Redefining a local variable. 30 | "412", -- Redefining an argument. 31 | "413", -- Redefining a loop variable. 32 | "421", -- Shadowing a local variable. 33 | "422", -- Shadowing an argument. 34 | "423", -- Shadowing a loop variable. 35 | "431", -- Shadowing an upvalue. 36 | "432", -- Shadowing an upvalue argument. 37 | "433", -- Shadowing an upvalue loop variable. 38 | "511", -- Unreachable code. 39 | "512", -- Loop can be executed at most once. 40 | "521", -- Unused label. 41 | "531", -- Left-hand side of an assignment is too short. 42 | "532", -- Left-hand side of an assignment is too long. 43 | "541", -- An empty do end block. 44 | "542", -- An empty if branch. 45 | "551", -- An empty statement. 46 | "561", -- Cyclomatic complexity of a function is too high. 47 | "571", -- A numeric for loop goes from #(expr) down to 1 or less without negative step. 48 | "611", -- A line consists of nothing but whitespace. 49 | "612", -- A line contains trailing whitespace. 50 | "613", -- Trailing whitespace in a string. 51 | "614", -- Trailing whitespace in a comment. 52 | "621", -- Inconsistent indentation (SPACE followed by TAB). 53 | "631", -- Line is too long. 54 | } 55 | -------------------------------------------------------------------------------- /.scannerwork/.sonar_lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/.scannerwork/.sonar_lock -------------------------------------------------------------------------------- /.scannerwork/report-task.txt: -------------------------------------------------------------------------------- 1 | projectKey=Test 2 | serverUrl=http://localhost:9000 3 | serverVersion=8.1.0.31237 4 | dashboardUrl=http://localhost:9000/dashboard?id=Test 5 | ceTaskId=AXAlUJO97YLjwz1VUDXR 6 | ceTaskUrl=http://localhost:9000/api/ce/task?id=AXAlUJO97YLjwz1VUDXR 7 | -------------------------------------------------------------------------------- /.vs/VSWorkspaceState.json: -------------------------------------------------------------------------------- 1 | { 2 | "ExpandedNodes": [ 3 | "", 4 | "\\Moose Development", 5 | "\\Moose Development\\Moose", 6 | "\\Moose Development\\Moose\\Ops" 7 | ], 8 | "SelectedNode": "\\Moose Development\\Moose\\Ops\\Airboss.lua", 9 | "PreviewInSolutionExplorer": false 10 | } -------------------------------------------------------------------------------- /.vs/slnx.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/.vs/slnx.sqlite -------------------------------------------------------------------------------- /Moose Development/Debugger/MissionScripting.lua: -------------------------------------------------------------------------------- 1 | --Initialization script for the Mission lua Environment (SSE) 2 | 3 | dofile('Scripts/ScriptingSystem.lua') 4 | 5 | -- Add LuaSocket to the LUAPATH, so that it can be found. 6 | package.path = package.path..";.\\LuaSocket\\?.lua;" 7 | 8 | -- Connect to the debugger, first require it. 9 | local initconnection = require("debugger") 10 | 11 | -- Now make the connection.. 12 | -- "127.0.0.1" is the localhost. 13 | -- 10000 is the port. If you wanna use another port in LDT, change this number too! 14 | -- "dcsserver" is the name of the server. If you wanna use another name, change the name here too! 15 | -- nil (is for transport protocol, but not using this) 16 | -- "win" don't touch. But is important to indicate that we are in a windows environment to the debugger script. 17 | initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) 18 | 19 | 20 | --Sanitize Mission Scripting environment 21 | --This makes unavailable some unsecure functions. 22 | --Mission downloaded from server to client may contain potentialy harmful lua code that may use these functions. 23 | --You can remove the code below and make availble these functions at your own risk. 24 | 25 | local function sanitizeModule(name) 26 | _G[name] = nil 27 | package.loaded[name] = nil 28 | end 29 | 30 | 31 | do 32 | sanitizeModule('os') 33 | --sanitizeModule('io') 34 | sanitizeModule('lfs') 35 | require = nil 36 | loadlib = nil 37 | end -------------------------------------------------------------------------------- /Moose Development/Debugger/READ.ME: -------------------------------------------------------------------------------- 1 | 2 | -- If you want to use the debugger, add 3 lines of extra code into MissionScripting.lua of DCS world. 3 | -- De-sanitize the io module. The debugger needs it. 4 | 5 | 6 | --------------------------------------------------------------------------------------------------------------------------- 7 | -- MissionScripting.lua modifications 8 | --------------------------------------------------------------------------------------------------------------------------- 9 | 10 | -- --Initialization script for the Mission lua Environment (SSE) 11 | -- 12 | -- dofile('Scripts/ScriptingSystem.lua') 13 | -- 14 | -- package.path = package.path..";.\\LuaSocket\\?.lua;" 15 | -- local initconnection = require("debugger") 16 | -- initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) 17 | -- 18 | -- --Sanitize Mission Scripting environment 19 | -- --This makes unavailable some unsecure functions. 20 | -- --Mission downloaded from server to client may contain potentialy harmful lua code that may use these functions. 21 | -- --You can remove the code below and make availble these functions at your own risk. 22 | -- 23 | -- local function sanitizeModule(name) 24 | -- _G[name] = nil 25 | -- package.loaded[name] = nil 26 | -- end 27 | -- 28 | -- do 29 | -- sanitizeModule('os') 30 | -- --sanitizeModule('io') 31 | -- sanitizeModule('lfs') 32 | -- require = nil 33 | -- loadlib = nil 34 | -- end 35 | 36 | --------------------------------------------------------------------------------------------------------------------------- 37 | --------------------------------------------------------------------------------------------------------------------------- 38 | 39 | 40 | 41 | -- So for clarity, these are the three lines of code that matter! 42 | 43 | -- Add LuaSocket to the LUAPATH, so that it can be found. 44 | package.path = package.path..";.\\LuaSocket\\?.lua;" 45 | 46 | -- Connect to the debugger, first require it. 47 | local initconnection = require("debugger") 48 | 49 | -- Now make the connection.. 50 | -- "127.0.0.1" is the localhost. 51 | -- 10000 is the port. If you wanna use another port in LDT, change this number too! 52 | -- "dcsserver" is the name of the server. Ensure the same name is used at the Debug Configuration panel! 53 | -- nil (is for transport protocol, but not using this) 54 | -- "win" don't touch. But is important to indicate that we are in a windows environment to the debugger script. 55 | initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) 56 | 57 | -------------------------------------------------------------------------------- /Moose Development/Moose/.editorconfig: -------------------------------------------------------------------------------- 1 | # Repository: https://github.com/CppCXY/EmmyLuaCodeStyle 2 | # English documentation: https://github.com/CppCXY/EmmyLuaCodeStyle/blob/master/README_EN.md 3 | [*.lua] 4 | # [basic] 5 | 6 | # optional space/tab 7 | indent_style = space 8 | # if indent_style is space, this is valid 9 | indent_size = 4 10 | # if indent_style is tab, this is valid 11 | tab_width = 4 12 | # none/single/double 13 | quote_style = none 14 | 15 | # only support number 16 | continuation_indent_size = 0 17 | 18 | # optional crlf/lf/cr/auto, if it is 'auto', in windows it is crlf other platforms are lf 19 | end_of_line = auto 20 | 21 | detect_end_of_line = false 22 | 23 | # this mean utf8 length , if this is 'unset' then the line width is no longer checked 24 | # this option decides when to chopdown the code 25 | max_line_length = 9999 26 | 27 | # this will check text end with new line 28 | insert_final_newline = true 29 | 30 | # [function] 31 | 32 | # function call expression's args will align to first arg 33 | # optional true/false/only_after_more_indention_statement/only_not_exist_cross_row_expression 34 | align_call_args = false 35 | 36 | # if true, all function define params will align to first param 37 | align_function_define_params = true 38 | 39 | remove_expression_list_finish_comma = true 40 | 41 | # keep/remove/remove_table_only/remove_string_only/unambiguous_remove_string_only 42 | call_arg_parentheses = keep 43 | 44 | # [table] 45 | 46 | #optional none/comma/semicolon 47 | table_separator_style = none 48 | 49 | #optional keep/never/always/smart 50 | trailing_table_separator = keep 51 | 52 | # see document for detail 53 | continuous_assign_table_field_align_to_equal_sign = true 54 | 55 | # if true, format like this "local t = { 1, 2, 3 }" 56 | keep_one_space_between_table_and_bracket = true 57 | 58 | # if indent_style is tab, this option is invalid 59 | align_table_field_to_first_field = true 60 | 61 | # [statement] 62 | 63 | align_chained_expression_statement = false 64 | 65 | # continous line distance 66 | max_continuous_line_distance = 1 67 | 68 | # see document for detail 69 | continuous_assign_statement_align_to_equal_sign = true 70 | 71 | # if statement will align like switch case 72 | if_condition_align_with_each_other = false 73 | 74 | # if true, continuation_indent_size for local or assign statement is invalid 75 | # however, if the expression list has cross row expression, it will not be aligned to the first expression 76 | local_assign_continuation_align_to_first_expression = false 77 | 78 | statement_inline_comment_space = 1 79 | 80 | # [indentation] 81 | 82 | # if true, the label loses its current indentation 83 | label_no_indent = false 84 | # if true, there will be no indentation in the do statement 85 | do_statement_no_indent = false 86 | # if true, the conditional expression of the if statement will not be a continuation line indent 87 | if_condition_no_continuation_indent = false 88 | 89 | if_branch_comments_after_block_no_indent = false 90 | 91 | # [space] 92 | 93 | # if true, t[#t+1] will not space wrapper '+' 94 | table_append_expression_no_space = false 95 | 96 | long_chain_expression_allow_one_space_after_colon = false 97 | 98 | remove_empty_header_and_footer_lines_in_function = true 99 | 100 | space_before_function_open_parenthesis = false 101 | 102 | space_inside_function_call_parentheses = false 103 | 104 | space_inside_function_param_list_parentheses = false 105 | 106 | space_before_open_square_bracket = false 107 | 108 | space_inside_square_brackets = false 109 | 110 | # if true, ormat like this "local t = 1" 111 | keep_one_space_between_namedef_and_attribute = true 112 | 113 | # [row_layout] 114 | # The following configuration supports four expressions 115 | # minLine:${n} 116 | # keepLine 117 | # keepLine:${n} 118 | # maxLine:${n} 119 | 120 | keep_line_after_if_statement = minLine:0 121 | 122 | keep_line_after_do_statement = minLine:0 123 | 124 | keep_line_after_while_statement = minLine:0 125 | 126 | keep_line_after_repeat_statement = minLine:0 127 | 128 | keep_line_after_for_statement = minLine:0 129 | 130 | keep_line_after_local_or_assign_statement = keepLine 131 | 132 | keep_line_after_function_define_statement = keepLine:1 133 | 134 | keep_line_after_expression_statement = keepLine 135 | 136 | # [diagnostic] 137 | 138 | # the following is code diagnostic options 139 | enable_check_codestyle = true 140 | 141 | # [diagnostic.name_style] 142 | enable_name_style_check = false 143 | # the following is name style check rule 144 | # base option off/camel_case/snake_case/upper_snake_case/pascal_case/same(filename/first_param/'', snake_case/pascal_case/camel_case) 145 | # all option can use '|' represent or 146 | # for example: 147 | # snake_case | upper_snake_case 148 | # same(first_param, snake_case) 149 | # same('m') 150 | local_name_define_style = snake_case 151 | 152 | function_param_name_style = snake_case 153 | 154 | function_name_define_style = snake_case 155 | 156 | local_function_name_define_style = snake_case 157 | 158 | table_field_name_define_style = snake_case 159 | 160 | global_variable_name_define_style = snake_case|upper_snake_case 161 | 162 | module_name_define_style = same('m')|same(filename, snake_case) 163 | 164 | require_module_name_style = same(first_param, snake_case) 165 | 166 | class_name_define_style = same(filename, snake_case) 167 | -------------------------------------------------------------------------------- /Moose Development/Moose/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Lua.workspace.preloadFileSize": 1000, 3 | "Lua.diagnostics.disable": [ 4 | "undefined-doc-name" 5 | ], 6 | "Lua.diagnostics.globals": [ 7 | "BASE", 8 | "lfs", 9 | "__Moose", 10 | "trigger", 11 | "coord", 12 | "missionCommands" 13 | ], 14 | "Lua.completion.displayContext": 5, 15 | "Lua.runtime.version": "Lua 5.1", 16 | "Lua.completion.callSnippet": "Both" 17 | } -------------------------------------------------------------------------------- /Moose Development/Moose/AI/AI_A2G_BAI.lua: -------------------------------------------------------------------------------- 1 | --- **AI** - Models the process of air to ground BAI engagement for airplanes and helicopters. 2 | -- 3 | -- This is a class used in the @{AI.AI_A2G_Dispatcher}. 4 | -- 5 | -- === 6 | -- 7 | -- ### Author: **FlightControl** 8 | -- 9 | -- === 10 | -- 11 | -- @module AI.AI_A2G_BAI 12 | -- @image AI_Air_To_Ground_Engage.JPG 13 | 14 | --- @type AI_A2G_BAI 15 | -- @extends AI.AI_Air_Patrol#AI_AIR_PATROL 16 | -- @extends AI.AI_Air_Engage#AI_AIR_ENGAGE 17 | 18 | --- Implements the core functions to intercept intruders. Use the Engage trigger to intercept intruders. 19 | -- 20 | -- ![Banner Image](..\Images\deprecated.png) 21 | -- 22 | -- # Developer Note 23 | -- 24 | -- Note while this class still works, it is no longer supported as the original author stopped active development of MOOSE 25 | -- Therefore, this class is considered to be deprecated 26 | -- 27 | -- === 28 | -- 29 | -- @field #AI_A2G_BAI 30 | AI_A2G_BAI = { 31 | ClassName = "AI_A2G_BAI", 32 | } 33 | 34 | --- Creates a new AI_A2G_BAI object 35 | -- @param #AI_A2G_BAI self 36 | -- @param Wrapper.Group#GROUP AIGroup 37 | -- @param DCS#Speed EngageMinSpeed The minimum speed of the @{Wrapper.Group} in km/h when engaging a target. 38 | -- @param DCS#Speed EngageMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h when engaging a target. 39 | -- @param DCS#Altitude EngageFloorAltitude The lowest altitude in meters where to execute the engagement. 40 | -- @param DCS#Altitude EngageCeilingAltitude The highest altitude in meters where to execute the engagement. 41 | -- @param DCS#AltitudeType EngageAltType The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to "RADIO". 42 | -- @param Core.Zone#ZONE_BASE PatrolZone The @{Core.Zone} where the patrol needs to be executed. 43 | -- @param DCS#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. 44 | -- @param DCS#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. 45 | -- @param DCS#Speed PatrolMinSpeed The minimum speed of the @{Wrapper.Group} in km/h. 46 | -- @param DCS#Speed PatrolMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h. 47 | -- @param DCS#AltitudeType PatrolAltType The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to RADIO 48 | -- @return #AI_A2G_BAI 49 | function AI_A2G_BAI:New2( AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, EngageAltType, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType ) 50 | 51 | local AI_Air = AI_AIR:New( AIGroup ) 52 | local AI_Air_Patrol = AI_AIR_PATROL:New( AI_Air, AIGroup, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType ) 53 | local AI_Air_Engage = AI_AIR_ENGAGE:New( AI_Air_Patrol, AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, EngageAltType ) 54 | local self = BASE:Inherit( self, AI_Air_Engage ) 55 | 56 | return self 57 | end 58 | 59 | --- Creates a new AI_A2G_BAI object 60 | -- @param #AI_A2G_BAI self 61 | -- @param Wrapper.Group#GROUP AIGroup 62 | -- @param DCS#Speed EngageMinSpeed The minimum speed of the @{Wrapper.Group} in km/h when engaging a target. 63 | -- @param DCS#Speed EngageMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h when engaging a target. 64 | -- @param DCS#Altitude EngageFloorAltitude The lowest altitude in meters where to execute the engagement. 65 | -- @param DCS#Altitude EngageCeilingAltitude The highest altitude in meters where to execute the engagement. 66 | -- @param Core.Zone#ZONE_BASE PatrolZone The @{Core.Zone} where the patrol needs to be executed. 67 | -- @param DCS#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. 68 | -- @param DCS#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. 69 | -- @param DCS#Speed PatrolMinSpeed The minimum speed of the @{Wrapper.Group} in km/h. 70 | -- @param DCS#Speed PatrolMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h. 71 | -- @param DCS#AltitudeType PatrolAltType The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to RADIO 72 | -- @return #AI_A2G_BAI 73 | function AI_A2G_BAI:New( AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType ) 74 | 75 | return self:New2( AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, PatrolAltType, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType) 76 | end 77 | 78 | --- Evaluate the attack and create an AttackUnitTask list. 79 | -- @param #AI_A2G_BAI self 80 | -- @param Core.Set#SET_UNIT AttackSetUnit The set of units to attack. 81 | -- @param Wrapper.Group#GROUP DefenderGroup The group of defenders. 82 | -- @param #number EngageAltitude The altitude to engage the targets. 83 | -- @return #AI_A2G_BAI self 84 | function AI_A2G_BAI:CreateAttackUnitTasks( AttackSetUnit, DefenderGroup, EngageAltitude ) 85 | 86 | local AttackUnitTasks = {} 87 | 88 | local AttackSetUnitPerThreatLevel = AttackSetUnit:GetSetPerThreatLevel( 10, 0 ) 89 | for AttackUnitIndex, AttackUnit in ipairs( AttackSetUnitPerThreatLevel or {} ) do 90 | if AttackUnit then 91 | if AttackUnit:IsAlive() and AttackUnit:IsGround() then 92 | self:T( { "BAI Unit:", AttackUnit:GetName() } ) 93 | AttackUnitTasks[#AttackUnitTasks+1] = DefenderGroup:TaskAttackUnit( AttackUnit, true, false, nil, nil, EngageAltitude ) 94 | end 95 | end 96 | end 97 | 98 | return AttackUnitTasks 99 | end 100 | -------------------------------------------------------------------------------- /Moose Development/Moose/AI/AI_A2G_CAS.lua: -------------------------------------------------------------------------------- 1 | --- **AI** - Models the process of air to ground engagement for airplanes and helicopters. 2 | -- 3 | -- This is a class used in the @{AI.AI_A2G_Dispatcher}. 4 | -- 5 | -- === 6 | -- 7 | -- ### Author: **FlightControl** 8 | -- 9 | -- === 10 | -- 11 | -- @module AI.AI_A2G_CAS 12 | -- @image AI_Air_To_Ground_Engage.JPG 13 | 14 | --- @type AI_A2G_CAS 15 | -- @extends AI.AI_Air_Patrol#AI_AIR_PATROL 16 | -- @extends AI.AI_Air_Engage#AI_AIR_ENGAGE 17 | 18 | --- Implements the core functions to intercept intruders. Use the Engage trigger to intercept intruders. 19 | -- 20 | -- # Developer Note 21 | -- 22 | -- ![Banner Image](..\Images\deprecated.png) 23 | -- 24 | -- Note while this class still works, it is no longer supported as the original author stopped active development of MOOSE 25 | -- Therefore, this class is considered to be deprecated 26 | -- 27 | -- === 28 | -- 29 | -- @field #AI_A2G_CAS 30 | AI_A2G_CAS = { 31 | ClassName = "AI_A2G_CAS", 32 | } 33 | 34 | --- Creates a new AI_A2G_CAS object 35 | -- @param #AI_A2G_CAS self 36 | -- @param Wrapper.Group#GROUP AIGroup 37 | -- @param DCS#Speed EngageMinSpeed The minimum speed of the @{Wrapper.Group} in km/h when engaging a target. 38 | -- @param DCS#Speed EngageMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h when engaging a target. 39 | -- @param DCS#Altitude EngageFloorAltitude The lowest altitude in meters where to execute the engagement. 40 | -- @param DCS#Altitude EngageCeilingAltitude The highest altitude in meters where to execute the engagement. 41 | -- @param DCS#AltitudeType EngageAltType The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to "RADIO". 42 | -- @param Core.Zone#ZONE_BASE PatrolZone The @{Core.Zone} where the patrol needs to be executed. 43 | -- @param DCS#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. 44 | -- @param DCS#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. 45 | -- @param DCS#Speed PatrolMinSpeed The minimum speed of the @{Wrapper.Group} in km/h. 46 | -- @param DCS#Speed PatrolMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h. 47 | -- @param DCS#AltitudeType PatrolAltType The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to RADIO 48 | -- @return #AI_A2G_CAS 49 | function AI_A2G_CAS:New2( AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, EngageAltType, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType ) 50 | 51 | local AI_Air = AI_AIR:New( AIGroup ) 52 | local AI_Air_Patrol = AI_AIR_PATROL:New( AI_Air, AIGroup, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType ) 53 | local AI_Air_Engage = AI_AIR_ENGAGE:New( AI_Air_Patrol, AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, EngageAltType ) 54 | local self = BASE:Inherit( self, AI_Air_Engage ) 55 | 56 | return self 57 | end 58 | 59 | --- Creates a new AI_A2G_CAS object 60 | -- @param #AI_A2G_CAS self 61 | -- @param Wrapper.Group#GROUP AIGroup 62 | -- @param DCS#Speed EngageMinSpeed The minimum speed of the @{Wrapper.Group} in km/h when engaging a target. 63 | -- @param DCS#Speed EngageMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h when engaging a target. 64 | -- @param DCS#Altitude EngageFloorAltitude The lowest altitude in meters where to execute the engagement. 65 | -- @param DCS#Altitude EngageCeilingAltitude The highest altitude in meters where to execute the engagement. 66 | -- @param Core.Zone#ZONE_BASE PatrolZone The @{Core.Zone} where the patrol needs to be executed. 67 | -- @param DCS#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. 68 | -- @param DCS#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. 69 | -- @param DCS#Speed PatrolMinSpeed The minimum speed of the @{Wrapper.Group} in km/h. 70 | -- @param DCS#Speed PatrolMaxSpeed The maximum speed of the @{Wrapper.Group} in km/h. 71 | -- @param DCS#AltitudeType PatrolAltType The altitude type ("RADIO"=="AGL", "BARO"=="ASL"). Defaults to RADIO 72 | -- @return #AI_A2G_CAS 73 | function AI_A2G_CAS:New( AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType ) 74 | 75 | return self:New2( AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloorAltitude, EngageCeilingAltitude, PatrolAltType, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, PatrolAltType) 76 | end 77 | 78 | --- Evaluate the attack and create an AttackUnitTask list. 79 | -- @param #AI_A2G_CAS self 80 | -- @param Core.Set#SET_UNIT AttackSetUnit The set of units to attack. 81 | -- @param Wrapper.Group#GROUP DefenderGroup The group of defenders. 82 | -- @param #number EngageAltitude The altitude to engage the targets. 83 | -- @return #AI_A2G_CAS self 84 | function AI_A2G_CAS:CreateAttackUnitTasks( AttackSetUnit, DefenderGroup, EngageAltitude ) 85 | 86 | local AttackUnitTasks = {} 87 | 88 | local AttackSetUnitPerThreatLevel = AttackSetUnit:GetSetPerThreatLevel( 10, 0 ) 89 | for AttackUnitIndex, AttackUnit in ipairs( AttackSetUnitPerThreatLevel or {} ) do 90 | if AttackUnit then 91 | if AttackUnit:IsAlive() and AttackUnit:IsGround() then 92 | self:T( { "CAS Unit:", AttackUnit:GetName() } ) 93 | AttackUnitTasks[#AttackUnitTasks+1] = DefenderGroup:TaskAttackUnit( AttackUnit, true, false, nil, nil, EngageAltitude ) 94 | end 95 | end 96 | end 97 | 98 | return AttackUnitTasks 99 | end 100 | -------------------------------------------------------------------------------- /Moose Development/Moose/AI/AI_Escort_Dispatcher_Request.lua: -------------------------------------------------------------------------------- 1 | --- **AI** - Models the assignment of AI escorts to player flights upon request using the radio menu. 2 | -- 3 | -- ## Features: 4 | -- 5 | -- * Provides the facilities to trigger escorts when players join flight units. 6 | -- * Provide a menu for which escorts can be requested. 7 | -- 8 | -- === 9 | -- 10 | -- ### Author: **FlightControl** 11 | -- 12 | -- === 13 | -- 14 | -- @module AI.AI_Escort_Dispatcher_Request 15 | -- @image MOOSE.JPG 16 | 17 | 18 | --- @type AI_ESCORT_DISPATCHER_REQUEST 19 | -- @extends Core.Fsm#FSM 20 | 21 | 22 | --- Models the assignment of AI escorts to player flights upon request using the radio menu. 23 | -- 24 | -- ![Banner Image](..\Images\deprecated.png) 25 | -- 26 | -- # Developer Note 27 | -- 28 | -- Note while this class still works, it is no longer supported as the original author stopped active development of MOOSE 29 | -- Therefore, this class is considered to be deprecated 30 | -- 31 | -- === 32 | -- 33 | -- @field #AI_ESCORT_DISPATCHER_REQUEST 34 | AI_ESCORT_DISPATCHER_REQUEST = { 35 | ClassName = "AI_ESCORT_DISPATCHER_REQUEST", 36 | } 37 | 38 | --- @field #list 39 | AI_ESCORT_DISPATCHER_REQUEST.AI_Escorts = {} 40 | 41 | 42 | --- Creates a new AI_ESCORT_DISPATCHER_REQUEST object. 43 | -- @param #AI_ESCORT_DISPATCHER_REQUEST self 44 | -- @param Core.Set#SET_GROUP CarrierSet The set of @{Wrapper.Group#GROUP} objects of carriers for which escorts are requested. 45 | -- @param Core.Spawn#SPAWN EscortSpawn The spawn object that will spawn in the Escorts. 46 | -- @param Wrapper.Airbase#AIRBASE EscortAirbase The airbase where the escorts are spawned. 47 | -- @param #string EscortName Name of the escort, which will also be the name of the escort menu. 48 | -- @param #string EscortBriefing A text showing the briefing to the player. Note that if no EscortBriefing is provided, the default briefing will be shown. 49 | -- @return #AI_ESCORT_DISPATCHER_REQUEST 50 | function AI_ESCORT_DISPATCHER_REQUEST:New( CarrierSet, EscortSpawn, EscortAirbase, EscortName, EscortBriefing ) 51 | 52 | local self = BASE:Inherit( self, FSM:New() ) -- #AI_ESCORT_DISPATCHER_REQUEST 53 | 54 | self.CarrierSet = CarrierSet 55 | self.EscortSpawn = EscortSpawn 56 | self.EscortAirbase = EscortAirbase 57 | self.EscortName = EscortName 58 | self.EscortBriefing = EscortBriefing 59 | 60 | self:SetStartState( "Idle" ) 61 | 62 | self:AddTransition( "Monitoring", "Monitor", "Monitoring" ) 63 | 64 | self:AddTransition( "Idle", "Start", "Monitoring" ) 65 | self:AddTransition( "Monitoring", "Stop", "Idle" ) 66 | 67 | -- Put a Dead event handler on CarrierSet, to ensure that when a carrier is destroyed, that all internal parameters are reset. 68 | function self.CarrierSet.OnAfterRemoved( CarrierSet, From, Event, To, CarrierName, Carrier ) 69 | self:F( { Carrier = Carrier:GetName() } ) 70 | end 71 | 72 | return self 73 | end 74 | 75 | function AI_ESCORT_DISPATCHER_REQUEST:onafterStart( From, Event, To ) 76 | 77 | self:HandleEvent( EVENTS.Birth ) 78 | 79 | self:HandleEvent( EVENTS.PlayerLeaveUnit, self.OnEventExit ) 80 | self:HandleEvent( EVENTS.Crash, self.OnEventExit ) 81 | self:HandleEvent( EVENTS.Dead, self.OnEventExit ) 82 | 83 | end 84 | 85 | --- @param #AI_ESCORT_DISPATCHER_REQUEST self 86 | -- @param Core.Event#EVENTDATA EventData 87 | function AI_ESCORT_DISPATCHER_REQUEST:OnEventExit( EventData ) 88 | 89 | local PlayerGroupName = EventData.IniGroupName 90 | local PlayerGroup = EventData.IniGroup 91 | local PlayerUnit = EventData.IniUnit 92 | 93 | if self.CarrierSet:FindGroup( PlayerGroupName ) then 94 | if self.AI_Escorts[PlayerGroupName] then 95 | self.AI_Escorts[PlayerGroupName]:Stop() 96 | self.AI_Escorts[PlayerGroupName] = nil 97 | end 98 | end 99 | 100 | end 101 | 102 | --- @param #AI_ESCORT_DISPATCHER_REQUEST self 103 | -- @param Core.Event#EVENTDATA EventData 104 | function AI_ESCORT_DISPATCHER_REQUEST:OnEventBirth( EventData ) 105 | 106 | local PlayerGroupName = EventData.IniGroupName 107 | local PlayerGroup = EventData.IniGroup 108 | local PlayerUnit = EventData.IniUnit 109 | 110 | if self.CarrierSet:FindGroup( PlayerGroupName ) then 111 | if not self.AI_Escorts[PlayerGroupName] then 112 | local LeaderUnit = PlayerUnit 113 | self:ScheduleOnce( 0.1, 114 | function() 115 | self.AI_Escorts[PlayerGroupName] = AI_ESCORT_REQUEST:New( LeaderUnit, self.EscortSpawn, self.EscortAirbase, self.EscortName, self.EscortBriefing ) 116 | self.AI_Escorts[PlayerGroupName]:FormationTrail( 0, 100, 0 ) 117 | if PlayerGroup:IsHelicopter() then 118 | self.AI_Escorts[PlayerGroupName]:MenusHelicopters() 119 | else 120 | self.AI_Escorts[PlayerGroupName]:MenusAirplanes() 121 | end 122 | self.AI_Escorts[PlayerGroupName]:__Start( 0.1 ) 123 | end 124 | ) 125 | end 126 | end 127 | 128 | end 129 | 130 | 131 | --- Start Trigger for AI_ESCORT_DISPATCHER_REQUEST 132 | -- @function [parent=#AI_ESCORT_DISPATCHER_REQUEST] Start 133 | -- @param #AI_ESCORT_DISPATCHER_REQUEST self 134 | 135 | --- Start Asynchronous Trigger for AI_ESCORT_DISPATCHER_REQUEST 136 | -- @function [parent=#AI_ESCORT_DISPATCHER_REQUEST] __Start 137 | -- @param #AI_ESCORT_DISPATCHER_REQUEST self 138 | -- @param #number Delay 139 | 140 | --- Stop Trigger for AI_ESCORT_DISPATCHER_REQUEST 141 | -- @function [parent=#AI_ESCORT_DISPATCHER_REQUEST] Stop 142 | -- @param #AI_ESCORT_DISPATCHER_REQUEST self 143 | 144 | --- Stop Asynchronous Trigger for AI_ESCORT_DISPATCHER_REQUEST 145 | -- @function [parent=#AI_ESCORT_DISPATCHER_REQUEST] __Stop 146 | -- @param #AI_ESCORT_DISPATCHER_REQUEST self 147 | -- @param #number Delay 148 | 149 | 150 | 151 | 152 | 153 | 154 | -------------------------------------------------------------------------------- /Moose Development/Moose/Core/Goal.lua: -------------------------------------------------------------------------------- 1 | --- **Core** - Models the process to achieve goal(s). 2 | -- 3 | -- === 4 | -- 5 | -- ## Features: 6 | -- 7 | -- * Define the goal. 8 | -- * Monitor the goal achievement. 9 | -- * Manage goal contribution by players. 10 | -- 11 | -- === 12 | -- 13 | -- Classes that implement a goal achievement, will derive from GOAL to implement the ways how the achievements can be realized. 14 | -- 15 | -- === 16 | -- 17 | -- ### Author: **FlightControl** 18 | -- ### Contributions: **funkyfranky** 19 | -- 20 | -- === 21 | -- 22 | -- @module Core.Goal 23 | -- @image Core_Goal.JPG 24 | 25 | do -- Goal 26 | 27 | --- @type GOAL 28 | -- @extends Core.Fsm#FSM 29 | 30 | --- Models processes that have an objective with a defined achievement. Derived classes implement the ways how the achievements can be realized. 31 | -- 32 | -- # 1. GOAL constructor 33 | -- 34 | -- * @{#GOAL.New}(): Creates a new GOAL object. 35 | -- 36 | -- # 2. GOAL is a finite state machine (FSM). 37 | -- 38 | -- ## 2.1. GOAL States 39 | -- 40 | -- * **Pending**: The goal object is in progress. 41 | -- * **Achieved**: The goal objective is Achieved. 42 | -- 43 | -- ## 2.2. GOAL Events 44 | -- 45 | -- * **Achieved**: Set the goal objective to Achieved. 46 | -- 47 | -- # 3. Player contributions. 48 | -- 49 | -- Goals are most of the time achieved by players. These player achievements can be registered as part of the goal achievement. 50 | -- Use @{#GOAL.AddPlayerContribution}() to add a player contribution to the goal. 51 | -- The player contributions are based on a points system, an internal counter per player. 52 | -- So once the goal has been achieved, the player contributions can be queried using @{#GOAL.GetPlayerContributions}(), 53 | -- that retrieves all contributions done by the players. For one player, the contribution can be queried using @{#GOAL.GetPlayerContribution}(). 54 | -- The total amount of player contributions can be queried using @{#GOAL.GetTotalContributions}(). 55 | -- 56 | -- # 4. Goal achievement. 57 | -- 58 | -- Once the goal is achieved, the mission designer will need to trigger the goal achievement using the **Achieved** event. 59 | -- The underlying 2 examples will achieve the goals for the `Goal` object: 60 | -- 61 | -- Goal:Achieved() -- Achieve the goal immediately. 62 | -- Goal:__Achieved( 30 ) -- Achieve the goal within 30 seconds. 63 | -- 64 | -- # 5. Check goal achievement. 65 | -- 66 | -- The method @{#GOAL.IsAchieved}() will return true if the goal is achieved (the trigger **Achieved** was executed). 67 | -- You can use this method to check asynchronously if a goal has been achieved, for example using a scheduler. 68 | -- 69 | -- @field #GOAL 70 | GOAL = { 71 | ClassName = "GOAL", 72 | } 73 | 74 | --- @field #table GOAL.Players 75 | GOAL.Players = {} 76 | 77 | --- @field #number GOAL.TotalContributions 78 | GOAL.TotalContributions = 0 79 | 80 | --- GOAL Constructor. 81 | -- @param #GOAL self 82 | -- @return #GOAL 83 | function GOAL:New() 84 | 85 | local self = BASE:Inherit( self, FSM:New() ) -- #GOAL 86 | self:F( {} ) 87 | 88 | --- Achieved State for GOAL 89 | -- @field GOAL.Achieved 90 | 91 | --- Achieved State Handler OnLeave for GOAL 92 | -- @function [parent=#GOAL] OnLeaveAchieved 93 | -- @param #GOAL self 94 | -- @param #string From 95 | -- @param #string Event 96 | -- @param #string To 97 | -- @return #boolean 98 | 99 | --- Achieved State Handler OnEnter for GOAL 100 | -- @function [parent=#GOAL] OnEnterAchieved 101 | -- @param #GOAL self 102 | -- @param #string From 103 | -- @param #string Event 104 | -- @param #string To 105 | 106 | self:SetStartState( "Pending" ) 107 | self:AddTransition( "*", "Achieved", "Achieved" ) 108 | 109 | --- Achieved Handler OnBefore for GOAL 110 | -- @function [parent=#GOAL] OnBeforeAchieved 111 | -- @param #GOAL self 112 | -- @param #string From 113 | -- @param #string Event 114 | -- @param #string To 115 | -- @return #boolean 116 | 117 | --- Achieved Handler OnAfter for GOAL 118 | -- @function [parent=#GOAL] OnAfterAchieved 119 | -- @param #GOAL self 120 | -- @param #string From 121 | -- @param #string Event 122 | -- @param #string To 123 | 124 | --- Achieved Trigger for GOAL 125 | -- @function [parent=#GOAL] Achieved 126 | -- @param #GOAL self 127 | 128 | --- Achieved Asynchronous Trigger for GOAL 129 | -- @function [parent=#GOAL] __Achieved 130 | -- @param #GOAL self 131 | -- @param #number Delay 132 | 133 | self:SetEventPriority( 5 ) 134 | 135 | return self 136 | end 137 | 138 | --- Add a new contribution by a player. 139 | -- @param #GOAL self 140 | -- @param #string PlayerName The name of the player. 141 | function GOAL:AddPlayerContribution( PlayerName ) 142 | self:F( { PlayerName } ) 143 | self.Players[PlayerName] = self.Players[PlayerName] or 0 144 | self.Players[PlayerName] = self.Players[PlayerName] + 1 145 | self.TotalContributions = self.TotalContributions + 1 146 | end 147 | 148 | --- @param #GOAL self 149 | -- @param #number Player contribution. 150 | function GOAL:GetPlayerContribution( PlayerName ) 151 | return self.Players[PlayerName] or 0 152 | end 153 | 154 | --- Get the players who contributed to achieve the goal. 155 | -- The result is a list of players, sorted by the name of the players. 156 | -- @param #GOAL self 157 | -- @return #list The list of players, indexed by the player name. 158 | function GOAL:GetPlayerContributions() 159 | return self.Players or {} 160 | end 161 | 162 | --- Gets the total contributions that happened to achieve the goal. 163 | -- The result is a number. 164 | -- @param #GOAL self 165 | -- @return #number The total number of contributions. 0 is returned if there were no contributions (yet). 166 | function GOAL:GetTotalContributions() 167 | return self.TotalContributions or 0 168 | end 169 | 170 | --- Validates if the goal is achieved. 171 | -- @param #GOAL self 172 | -- @return #boolean true if the goal is achieved. 173 | function GOAL:IsAchieved() 174 | return self:Is( "Achieved" ) 175 | end 176 | 177 | end 178 | -------------------------------------------------------------------------------- /Moose Development/Moose/Core/Report.lua: -------------------------------------------------------------------------------- 1 | --- **Core** - Provides a handy means to create messages and reports. 2 | -- 3 | -- === 4 | -- 5 | -- ## Features: 6 | -- 7 | -- * Create text blocks that are formatted. 8 | -- * Create automatic indents. 9 | -- * Variate the delimiters between reporting lines. 10 | -- 11 | -- === 12 | -- 13 | -- ### Authors: FlightControl : Design & Programming 14 | -- 15 | -- @module Core.Report 16 | -- @image Core_Report.JPG 17 | 18 | --- @type REPORT 19 | -- @extends Core.Base#BASE 20 | 21 | --- Provides a handy means to create messages and reports. 22 | -- @field #REPORT 23 | REPORT = { 24 | ClassName = "REPORT", 25 | Title = "", 26 | } 27 | 28 | --- Create a new REPORT. 29 | -- @param #REPORT self 30 | -- @param #string Title 31 | -- @return #REPORT 32 | function REPORT:New( Title ) 33 | 34 | local self = BASE:Inherit( self, BASE:New() ) -- #REPORT 35 | 36 | self.Report = {} 37 | 38 | self:SetTitle( Title or "" ) 39 | self:SetIndent( 3 ) 40 | 41 | return self 42 | end 43 | 44 | --- Has the REPORT Text? 45 | -- @param #REPORT self 46 | -- @return #boolean 47 | function REPORT:HasText() -- R2.1 48 | 49 | return #self.Report > 0 50 | end 51 | 52 | --- Set indent of a REPORT. 53 | -- @param #REPORT self 54 | -- @param #number Indent 55 | -- @return #REPORT 56 | function REPORT:SetIndent( Indent ) -- R2.1 57 | self.Indent = Indent 58 | return self 59 | end 60 | 61 | --- Add a new line to a REPORT. 62 | -- @param #REPORT self 63 | -- @param #string Text 64 | -- @return #REPORT 65 | function REPORT:Add( Text ) 66 | self.Report[#self.Report + 1] = Text 67 | return self 68 | end 69 | 70 | --- Add a new line to a REPORT, but indented. A separator character can be specified to separate the reported lines visually. 71 | -- @param #REPORT self 72 | -- @param #string Text The report text. 73 | -- @param #string Separator (optional) The start of each report line can begin with an optional separator character. This can be a "-", or "#", or "*". You're free to choose what you find the best. 74 | -- @return #REPORT 75 | function REPORT:AddIndent( Text, Separator ) 76 | self.Report[#self.Report + 1] = ((Separator and Separator .. string.rep( " ", self.Indent - 1 )) or string.rep( " ", self.Indent )) .. Text:gsub( "\n", "\n" .. string.rep( " ", self.Indent ) ) 77 | return self 78 | end 79 | 80 | --- Produces the text of the report, taking into account an optional delimiter, which is \n by default. 81 | -- @param #REPORT self 82 | -- @param #string Delimiter (optional) A delimiter text. 83 | -- @return #string The report text. 84 | function REPORT:Text( Delimiter ) 85 | Delimiter = Delimiter or "\n" 86 | local ReportText = (self.Title ~= "" and self.Title .. Delimiter or self.Title) .. table.concat( self.Report, Delimiter ) or "" 87 | return ReportText 88 | end 89 | 90 | --- Sets the title of the report. 91 | -- @param #REPORT self 92 | -- @param #string Title The title of the report. 93 | -- @return #REPORT 94 | function REPORT:SetTitle( Title ) 95 | self.Title = Title 96 | return self 97 | end 98 | 99 | --- Gets the amount of report items contained in the report. 100 | -- @param #REPORT self 101 | -- @return #number Returns the number of report items contained in the report. 0 is returned if no report items are contained in the report. The title is not counted for. 102 | function REPORT:GetCount() 103 | return #self.Report 104 | end 105 | -------------------------------------------------------------------------------- /Moose Development/Moose/Core/UserFlag.lua: -------------------------------------------------------------------------------- 1 | --- **Core** - Manage user flags to interact with the mission editor trigger system and server side scripts. 2 | -- 3 | -- === 4 | -- 5 | -- ## Features: 6 | -- 7 | -- * Set or get DCS user flags within running missions. 8 | -- 9 | -- === 10 | -- 11 | -- ### Author: **FlightControl** 12 | -- 13 | -- === 14 | -- 15 | -- @module Core.UserFlag 16 | -- @image Core_Userflag.JPG 17 | -- 18 | 19 | do -- UserFlag 20 | 21 | --- @type USERFLAG 22 | -- @field #string ClassName Name of the class 23 | -- @field #string UserFlagName Name of the flag. 24 | -- @extends Core.Base#BASE 25 | 26 | 27 | --- Management of DCS User Flags. 28 | -- 29 | -- # 1. USERFLAG constructor 30 | -- 31 | -- * @{#USERFLAG.New}(): Creates a new USERFLAG object. 32 | -- 33 | -- @field #USERFLAG 34 | USERFLAG = { 35 | ClassName = "USERFLAG", 36 | UserFlagName = nil, 37 | } 38 | 39 | --- USERFLAG Constructor. 40 | -- @param #USERFLAG self 41 | -- @param #string UserFlagName The name of the userflag, which is a free text string. 42 | -- @return #USERFLAG 43 | function USERFLAG:New( UserFlagName ) --R2.3 44 | 45 | local self = BASE:Inherit( self, BASE:New() ) -- #USERFLAG 46 | 47 | self.UserFlagName = UserFlagName 48 | 49 | return self 50 | end 51 | 52 | --- Get the userflag name. 53 | -- @param #USERFLAG self 54 | -- @return #string Name of the user flag. 55 | function USERFLAG:GetName() 56 | return self.UserFlagName 57 | end 58 | 59 | --- Set the userflag to a given Number. 60 | -- @param #USERFLAG self 61 | -- @param #number Number The number value to set the flag to. 62 | -- @param #number Delay Delay in seconds, before the flag is set. 63 | -- @return #USERFLAG The userflag instance. 64 | -- @usage 65 | -- local BlueVictory = USERFLAG:New( "VictoryBlue" ) 66 | -- BlueVictory:Set( 100 ) -- Set the UserFlag VictoryBlue to 100. 67 | -- 68 | function USERFLAG:Set( Number, Delay ) --R2.3 69 | 70 | if Delay and Delay>0 then 71 | self:ScheduleOnce(Delay, USERFLAG.Set, self, Number) 72 | else 73 | --env.info(string.format("Setting flag \"%s\" to %d at T=%.1f", self.UserFlagName, Number, timer.getTime())) 74 | trigger.action.setUserFlag( self.UserFlagName, Number ) 75 | end 76 | 77 | return self 78 | end 79 | 80 | --- Get the userflag Number. 81 | -- @param #USERFLAG self 82 | -- @return #number Number The number value to be checked if it is the same as the userflag. 83 | -- @usage 84 | -- local BlueVictory = USERFLAG:New( "VictoryBlue" ) 85 | -- local BlueVictoryValue = BlueVictory:Get() -- Get the UserFlag VictoryBlue value. 86 | -- 87 | function USERFLAG:Get() --R2.3 88 | 89 | return trigger.misc.getUserFlag( self.UserFlagName ) 90 | end 91 | 92 | --- Check if the userflag has a value of Number. 93 | -- @param #USERFLAG self 94 | -- @param #number Number The number value to be checked if it is the same as the userflag. 95 | -- @return #boolean true if the Number is the value of the userflag. 96 | -- @usage 97 | -- local BlueVictory = USERFLAG:New( "VictoryBlue" ) 98 | -- if BlueVictory:Is( 1 ) then 99 | -- return "Blue has won" 100 | -- end 101 | function USERFLAG:Is( Number ) --R2.3 102 | 103 | return trigger.misc.getUserFlag( self.UserFlagName ) == Number 104 | 105 | end 106 | 107 | end 108 | -------------------------------------------------------------------------------- /Moose Development/Moose/Functional/Movement.lua: -------------------------------------------------------------------------------- 1 | --- **Functional** - Limit the movement of simulaneous moving ground vehicles. 2 | -- 3 | -- === 4 | -- 5 | -- Limit the simultaneous movement of Groups within a running Mission. 6 | -- This module is defined to improve the performance in missions, and to bring additional realism for GROUND vehicles. 7 | -- Performance: If in a DCSRTE there are a lot of moving GROUND units, then in a multi player mission, this WILL create lag if 8 | -- the main DCS execution core of your CPU is fully utilized. So, this class will limit the amount of simultaneous moving GROUND units 9 | -- on defined intervals (currently every minute). 10 | -- @module Functional.Movement 11 | -- @image MOOSE.JPG 12 | 13 | --- 14 | -- @type MOVEMENT 15 | -- @extends Core.Base#BASE 16 | 17 | --- 18 | --@field #MOVEMENT 19 | MOVEMENT = { 20 | ClassName = "MOVEMENT", 21 | } 22 | 23 | --- Creates the main object which is handling the GROUND forces movement. 24 | -- @param table{string,...}|string MovePrefixes is a table of the Prefixes (names) of the GROUND Groups that need to be controlled by the MOVEMENT Object. 25 | -- @param number MoveMaximum is a number that defines the maximum amount of GROUND Units to be moving during one minute. 26 | -- @return MOVEMENT 27 | -- @usage 28 | -- -- Limit the amount of simultaneous moving units on the ground to prevent lag. 29 | -- Movement_US_Platoons = MOVEMENT:New( { 'US Tank Platoon Left', 'US Tank Platoon Middle', 'US Tank Platoon Right', 'US CH-47D Troops' }, 15 ) 30 | 31 | function MOVEMENT:New( MovePrefixes, MoveMaximum ) 32 | local self = BASE:Inherit( self, BASE:New() ) -- #MOVEMENT 33 | self:F( { MovePrefixes, MoveMaximum } ) 34 | 35 | if type( MovePrefixes ) == 'table' then 36 | self.MovePrefixes = MovePrefixes 37 | else 38 | self.MovePrefixes = { MovePrefixes } 39 | end 40 | self.MoveCount = 0 -- The internal counter of the amount of Moving the has happened since MoveStart. 41 | self.MoveMaximum = MoveMaximum -- Contains the Maximum amount of units that are allowed to move. 42 | self.AliveUnits = 0 -- Contains the counter how many units are currently alive. 43 | self.MoveUnits = {} -- Reflects if the Moving for this MovePrefixes is going to be scheduled or not. 44 | 45 | self:HandleEvent( EVENTS.Birth ) 46 | 47 | -- self:AddEvent( world.event.S_EVENT_BIRTH, self.OnBirth ) 48 | -- 49 | -- self:EnableEvents() 50 | 51 | self:ScheduleStart() 52 | 53 | return self 54 | end 55 | 56 | --- Call this function to start the MOVEMENT scheduling. 57 | function MOVEMENT:ScheduleStart() 58 | self:F() 59 | self.MoveFunction = SCHEDULER:New( self, self._Scheduler, {}, 1, 120 ) 60 | end 61 | 62 | --- Call this function to stop the MOVEMENT scheduling. 63 | -- @todo need to implement it ... Forgot. 64 | function MOVEMENT:ScheduleStop() 65 | self:F() 66 | 67 | end 68 | 69 | --- Captures the birth events when new Units were spawned. 70 | -- @todo This method should become obsolete. The global _DATABASE object (an instance of @{Core.Database#DATABASE}) will handle the collection administration. 71 | -- @param #MOVEMENT self 72 | -- @param Core.Event#EVENTDATA self 73 | function MOVEMENT:OnEventBirth( EventData ) 74 | self:F( { EventData } ) 75 | 76 | if timer.getTime0() < timer.getAbsTime() then -- dont need to add units spawned in at the start of the mission if mist is loaded in init line 77 | if EventData.IniDCSUnit then 78 | self:T( "Birth object : " .. EventData.IniDCSUnitName ) 79 | if EventData.IniDCSGroup and EventData.IniDCSGroup:isExist() then 80 | for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do 81 | if string.find( EventData.IniDCSUnitName, MovePrefix, 1, true ) then 82 | self.AliveUnits = self.AliveUnits + 1 83 | self.MoveUnits[EventData.IniDCSUnitName] = EventData.IniDCSGroupName 84 | self:T( self.AliveUnits ) 85 | end 86 | end 87 | end 88 | end 89 | 90 | EventData.IniUnit:HandleEvent( EVENTS.DEAD, self.OnDeadOrCrash ) 91 | end 92 | 93 | end 94 | 95 | --- Captures the Dead or Crash events when Units crash or are destroyed. 96 | -- @todo This method should become obsolete. The global _DATABASE object (an instance of @{Core.Database#DATABASE}) will handle the collection administration. 97 | function MOVEMENT:OnDeadOrCrash( Event ) 98 | self:F( { Event } ) 99 | 100 | if Event.IniDCSUnit then 101 | self:T( "Dead object : " .. Event.IniDCSUnitName ) 102 | for MovePrefixID, MovePrefix in pairs( self.MovePrefixes ) do 103 | if string.find( Event.IniDCSUnitName, MovePrefix, 1, true ) then 104 | self.AliveUnits = self.AliveUnits - 1 105 | self.MoveUnits[Event.IniDCSUnitName] = nil 106 | self:T( self.AliveUnits ) 107 | end 108 | end 109 | end 110 | end 111 | 112 | --- This function is called automatically by the MOVEMENT scheduler. A new function is scheduled when MoveScheduled is true. 113 | function MOVEMENT:_Scheduler() 114 | self:F( { self.MovePrefixes, self.MoveMaximum, self.AliveUnits, self.MovementGroups } ) 115 | 116 | if self.AliveUnits > 0 then 117 | local MoveProbability = ( self.MoveMaximum * 100 ) / self.AliveUnits 118 | self:T( 'Move Probability = ' .. MoveProbability ) 119 | 120 | for MovementUnitName, MovementGroupName in pairs( self.MoveUnits ) do 121 | local MovementGroup = Group.getByName( MovementGroupName ) 122 | if MovementGroup and MovementGroup:isExist() then 123 | local MoveOrStop = math.random( 1, 100 ) 124 | self:T( 'MoveOrStop = ' .. MoveOrStop ) 125 | if MoveOrStop <= MoveProbability then 126 | self:T( 'Group continues moving = ' .. MovementGroupName ) 127 | trigger.action.groupContinueMoving( MovementGroup ) 128 | else 129 | self:T( 'Group stops moving = ' .. MovementGroupName ) 130 | trigger.action.groupStopMoving( MovementGroup ) 131 | end 132 | else 133 | self.MoveUnits[MovementUnitName] = nil 134 | end 135 | end 136 | end 137 | return true 138 | end 139 | -------------------------------------------------------------------------------- /Moose Development/Moose/Globals.lua: -------------------------------------------------------------------------------- 1 | --- GLOBALS: The order of the declarations is important here. Don't touch it. 2 | 3 | --- Declare the event dispatcher based on the EVENT class 4 | _EVENTDISPATCHER = EVENT:New() -- Core.Event#EVENT 5 | 6 | --- Declare the timer dispatcher based on the SCHEDULEDISPATCHER class 7 | _SCHEDULEDISPATCHER = SCHEDULEDISPATCHER:New() -- Core.ScheduleDispatcher#SCHEDULEDISPATCHER 8 | 9 | --- Declare the main database object, which is used internally by the MOOSE classes. 10 | _DATABASE = DATABASE:New() -- Core.Database#DATABASE 11 | 12 | --- Settings 13 | _SETTINGS = SETTINGS:Set() -- Core.Settings#SETTINGS 14 | _SETTINGS:SetPlayerMenuOn() 15 | 16 | --- Register cargos. 17 | _DATABASE:_RegisterCargos() 18 | 19 | --- Register zones. 20 | _DATABASE:_RegisterZones() 21 | _DATABASE:_RegisterAirbases() 22 | 23 | --- Check if os etc is available. 24 | BASE:I("Checking de-sanitization of os, io and lfs:") 25 | local __na = false 26 | if os then 27 | BASE:I("- os available") 28 | else 29 | BASE:I("- os NOT available! Some functions may not work.") 30 | __na = true 31 | end 32 | if io then 33 | BASE:I("- io available") 34 | else 35 | BASE:I("- io NOT available! Some functions may not work.") 36 | __na = true 37 | end 38 | if lfs then 39 | BASE:I("- lfs available") 40 | else 41 | BASE:I("- lfs NOT available! Some functions may not work.") 42 | __na = true 43 | end 44 | if __na then 45 | BASE:I("Check /Scripts/MissionScripting.lua and comment out the lines with sanitizeModule(''). Use at your own risk!)") 46 | end 47 | BASE.ServerName = "Unknown" 48 | if lfs and loadfile then 49 | local serverfile = lfs.writedir() .. 'Config/serverSettings.lua' 50 | if UTILS.FileExists(serverfile) then 51 | loadfile(serverfile)() 52 | if cfg and cfg.name then 53 | BASE.ServerName = cfg.name 54 | end 55 | end 56 | BASE.ServerName = BASE.ServerName or "Unknown" 57 | BASE:I("Server Name: " .. tostring(BASE.ServerName)) 58 | end 59 | -------------------------------------------------------------------------------- /Moose Development/Moose/Shapes/Cube.lua: -------------------------------------------------------------------------------- 1 | --- 2 | -- 3 | -- ### Author: **nielsvaes/coconutcockpit** 4 | -- 5 | -- === 6 | -- @module Shapes.CUBE 7 | -- @image MOOSE.JPG 8 | 9 | --- LINE class. 10 | -- @type CUBE 11 | -- @field #string ClassName Name of the class. 12 | -- @field #number Points points of the line 13 | -- @field #number Coords coordinates of the line 14 | 15 | -- 16 | -- === 17 | 18 | --- 19 | -- @field #CUBE 20 | CUBE = { 21 | ClassName = "CUBE", 22 | Points = {}, 23 | Coords = {} 24 | } 25 | 26 | --- Points need to be added in the following order: 27 | --- p1 -> p4 make up the front face of the cube 28 | --- p5 -> p8 make up the back face of the cube 29 | --- p1 connects to p5 30 | --- p2 connects to p6 31 | --- p3 connects to p7 32 | --- p4 connects to p8 33 | --- 34 | --- 8-----------7 35 | --- /| /| 36 | --- / | / | 37 | --- 4--+--------3 | 38 | --- | | | | 39 | --- | | | | 40 | --- | | | | 41 | --- | 5--------+--6 42 | --- | / | / 43 | --- |/ |/ 44 | --- 1-----------2 45 | --- 46 | function CUBE:New(p1, p2, p3, p4, p5, p6, p7, p8) 47 | local self = BASE:Inherit(self, SHAPE_BASE) 48 | self.Points = {p1, p2, p3, p4, p5, p6, p7, p8} 49 | for _, point in spairs(self.Points) do 50 | table.insert(self.Coords, COORDINATE:NewFromVec3(point)) 51 | end 52 | return self 53 | end 54 | 55 | function CUBE:GetCenter() 56 | local center = { x=0, y=0, z=0 } 57 | for _, point in pairs(self.Points) do 58 | center.x = center.x + point.x 59 | center.y = center.y + point.y 60 | center.z = center.z + point.z 61 | end 62 | 63 | center.x = center.x / 8 64 | center.y = center.y / 8 65 | center.z = center.z / 8 66 | return center 67 | end 68 | 69 | function CUBE:ContainsPoint(point, cube_points) 70 | cube_points = cube_points or self.Points 71 | local min_x, min_y, min_z = math.huge, math.huge, math.huge 72 | local max_x, max_y, max_z = -math.huge, -math.huge, -math.huge 73 | 74 | -- Find the minimum and maximum x, y, and z values of the cube points 75 | for _, p in ipairs(cube_points) do 76 | if p.x < min_x then min_x = p.x end 77 | if p.y < min_y then min_y = p.y end 78 | if p.z < min_z then min_z = p.z end 79 | if p.x > max_x then max_x = p.x end 80 | if p.y > max_y then max_y = p.y end 81 | if p.z > max_z then max_z = p.z end 82 | end 83 | 84 | return point.x >= min_x and point.x <= max_x and point.y >= min_y and point.y <= max_y and point.z >= min_z and point.z <= max_z 85 | end 86 | -------------------------------------------------------------------------------- /Moose Development/Moose/Shapes/Triangle.lua: -------------------------------------------------------------------------------- 1 | --- TRIANGLE class with properties and methods for handling triangles. This class is mostly used by the POLYGON class, but you can use it on its own as well 2 | -- 3 | -- ### Author: **nielsvaes/coconutcockpit** 4 | -- 5 | -- 6 | -- === 7 | -- @module Shapes.TRIANGLE 8 | -- @image MOOSE.JPG 9 | 10 | --- LINE class. 11 | -- @type CUBE 12 | -- @field #string ClassName Name of the class. 13 | -- @field #number Points points of the line 14 | -- @field #number Coords coordinates of the line 15 | 16 | -- 17 | -- === 18 | 19 | --- 20 | -- @field #TRIANGLE 21 | TRIANGLE = { 22 | ClassName = "TRIANGLE", 23 | Points = {}, 24 | Coords = {}, 25 | SurfaceArea = 0 26 | } 27 | 28 | --- Creates a new triangle from three points. The points need to be given as Vec2s 29 | -- @param #table p1 The first point of the triangle 30 | -- @param #table p2 The second point of the triangle 31 | -- @param #table p3 The third point of the triangle 32 | -- @return #TRIANGLE The new triangle 33 | function TRIANGLE:New(p1, p2, p3) 34 | local self = BASE:Inherit(self, SHAPE_BASE:New()) 35 | self.Points = {p1, p2, p3} 36 | 37 | local center_x = (p1.x + p2.x + p3.x) / 3 38 | local center_y = (p1.y + p2.y + p3.y) / 3 39 | self.CenterVec2 = {x=center_x, y=center_y} 40 | 41 | for _, pt in pairs({p1, p2, p3}) do 42 | table.add(self.Coords, COORDINATE:NewFromVec2(pt)) 43 | end 44 | 45 | self.SurfaceArea = math.abs((p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y)) * 0.5 46 | 47 | self.MarkIDs = {} 48 | return self 49 | end 50 | 51 | --- Checks if a point is contained within the triangle. 52 | -- @param #table pt The point to check 53 | -- @param #table points (optional) The points of the triangle, or 3 other points if you're just using the TRIANGLE class without an object of it 54 | -- @return #bool True if the point is contained, false otherwise 55 | function TRIANGLE:ContainsPoint(pt, points) 56 | points = points or self.Points 57 | 58 | local function sign(p1, p2, p3) 59 | return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y) 60 | end 61 | 62 | local d1 = sign(pt, self.Points[1], self.Points[2]) 63 | local d2 = sign(pt, self.Points[2], self.Points[3]) 64 | local d3 = sign(pt, self.Points[3], self.Points[1]) 65 | 66 | local has_neg = (d1 < 0) or (d2 < 0) or (d3 < 0) 67 | local has_pos = (d1 > 0) or (d2 > 0) or (d3 > 0) 68 | 69 | return not (has_neg and has_pos) 70 | end 71 | 72 | --- Returns a random Vec2 within the triangle. 73 | -- @param #table points The points of the triangle, or 3 other points if you're just using the TRIANGLE class without an object of it 74 | -- @return #table The random Vec2 75 | function TRIANGLE:GetRandomVec2(points) 76 | points = points or self.Points 77 | local pt = {math.random(), math.random()} 78 | table.sort(pt) 79 | local s = pt[1] 80 | local t = pt[2] - pt[1] 81 | local u = 1 - pt[2] 82 | 83 | return {x = s * points[1].x + t * points[2].x + u * points[3].x, 84 | y = s * points[1].y + t * points[2].y + u * points[3].y} 85 | end 86 | 87 | --- Draws the triangle on the map, just for debugging 88 | function TRIANGLE:Draw() 89 | for i=1, #self.Coords do 90 | local c1 = self.Coords[i] 91 | local c2 = self.Coords[i % #self.Coords + 1] 92 | table.add(self.MarkIDs, c1:LineToAll(c2)) 93 | end 94 | end 95 | 96 | --- Removes the drawing of the triangle from the map. 97 | function TRIANGLE:RemoveDraw() 98 | for _, mark_id in pairs(self.MarkIDs) do 99 | UTILS.RemoveMark(mark_id) 100 | end 101 | end 102 | -------------------------------------------------------------------------------- /Moose Development/Moose/Wrapper/Object.lua: -------------------------------------------------------------------------------- 1 | --- **Wrapper** - OBJECT wraps the DCS Object derived objects. 2 | -- 3 | -- === 4 | -- 5 | -- ### Author: **FlightControl** 6 | -- 7 | -- ### Contributions: **funkyfranky 8 | -- 9 | -- === 10 | -- 11 | -- @module Wrapper.Object 12 | -- @image MOOSE.JPG 13 | 14 | 15 | --- OBJECT class. 16 | -- @type OBJECT 17 | -- @extends Core.Base#BASE 18 | -- @field #string ObjectName The name of the Object. 19 | 20 | 21 | --- Wrapper class to handle the DCS Object objects. 22 | -- 23 | -- * Support all DCS Object APIs. 24 | -- * Enhance with Object specific APIs not in the DCS Object API set. 25 | -- * Manage the "state" of the DCS Object. 26 | -- 27 | -- ## OBJECT constructor: 28 | -- 29 | -- The OBJECT class provides the following functions to construct a OBJECT instance: 30 | -- 31 | -- * @{Wrapper.Object#OBJECT.New}(): Create a OBJECT instance. 32 | -- 33 | -- @field #OBJECT 34 | OBJECT = { 35 | ClassName = "OBJECT", 36 | ObjectName = "", 37 | } 38 | 39 | --- A DCSObject 40 | -- @type DCSObject 41 | -- @field id_ The ID of the controllable in DCS 42 | 43 | --- Create a new OBJECT from a DCSObject 44 | -- @param #OBJECT self 45 | -- @param DCS#Object ObjectName The Object name 46 | -- @return #OBJECT self 47 | function OBJECT:New( ObjectName) 48 | 49 | -- Inherit BASE class. 50 | local self = BASE:Inherit( self, BASE:New() ) 51 | 52 | -- Debug output. 53 | self:F2( ObjectName ) 54 | 55 | -- Set object name. 56 | self.ObjectName = ObjectName 57 | 58 | return self 59 | end 60 | 61 | 62 | --- Returns the unit's unique identifier. 63 | -- @param Wrapper.Object#OBJECT self 64 | -- @return DCS#Object.ID ObjectID or #nil if the DCS Object is not existing or alive. Note that the ID is passed as a string and not a number. 65 | function OBJECT:GetID() 66 | 67 | local DCSObject = self:GetDCSObject() 68 | 69 | if DCSObject then 70 | local ObjectID = DCSObject:getID() 71 | return ObjectID 72 | end 73 | 74 | self:E( { "Cannot GetID", Name = self.ObjectName, Class = self:GetClassName() } ) 75 | 76 | return nil 77 | end 78 | 79 | --- Destroys the OBJECT. 80 | -- @param #OBJECT self 81 | -- @return #boolean Returns `true` if the object is destroyed or #nil if the object is nil. 82 | function OBJECT:Destroy() 83 | 84 | local DCSObject = self:GetDCSObject() 85 | 86 | if DCSObject then 87 | --BASE:CreateEventCrash( timer.getTime(), DCSObject ) 88 | DCSObject:destroy( false ) 89 | return true 90 | end 91 | 92 | self:E( { "Cannot Destroy", Name = self.ObjectName, Class = self:GetClassName() } ) 93 | 94 | return nil 95 | end 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Moose Development/Release Notes/Release Notes 2.2.0.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/Moose Development/Release Notes/Release Notes 2.2.0.docx -------------------------------------------------------------------------------- /Moose Development/Release Notes/Release Notes 2.2.0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/Moose Development/Release Notes/Release Notes 2.2.0.pdf -------------------------------------------------------------------------------- /Moose Development/docs-header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Moose Development/docs-header.py: -------------------------------------------------------------------------------- 1 | # import required module 2 | from pathlib import Path 3 | import os 4 | import codecs 5 | 6 | # assign directory 7 | directory = '.' 8 | 9 | print( "Replacing head tag in all html files" ) 10 | 11 | # Read template file 12 | with open( os.path.dirname(__file__) + '/docs-header.html', 'r') as file: 13 | newhead = file.read() 14 | 15 | # iterate over files in 16 | # that directory 17 | files = Path(directory).glob('*.html') 18 | for file in files: 19 | #print(file) 20 | #with open(file, 'r') as fileread: 21 | with codecs.open(file, 'r', encoding='utf-8', errors='ignore') as fileread: 22 | filedata = fileread.read() 23 | # Replace the target string 24 | filedata = filedata.replace( '', newhead ) 25 | 26 | # Write the file out again 27 | with open(file, 'w') as filewrite: 28 | filewrite.write(filedata) 29 | -------------------------------------------------------------------------------- /Moose Setup/Eclipse/Moose Loader Dynamic.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Moose Setup/Eclipse/Moose Loader Static.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Moose Setup/Moose Templates/Moose_Dynamic_Loader.lua: -------------------------------------------------------------------------------- 1 | env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) 2 | 3 | local base = _G 4 | 5 | __Moose = {} 6 | 7 | __Moose.Include = function( IncludeFile ) 8 | if not __Moose.Includes[ IncludeFile ] then 9 | __Moose.Includes[IncludeFile] = IncludeFile 10 | local f = assert( base.loadfile( IncludeFile ) ) 11 | if f == nil then 12 | error ("Moose: Could not load Moose file " .. IncludeFile ) 13 | else 14 | env.info( "Moose: " .. IncludeFile .. " dynamically loaded." ) 15 | return f() 16 | end 17 | end 18 | end 19 | 20 | __Moose.Includes = {} 21 | if not MOOSE_DEVELOPMENT_FOLDER then 22 | MOOSE_DEVELOPMENT_FOLDER='Scripts' 23 | end 24 | __Moose.Include( MOOSE_DEVELOPMENT_FOLDER..'/Moose/Modules.lua' ) 25 | -------------------------------------------------------------------------------- /Moose Setup/Moose Templates/Moose_Static_Loader.lua: -------------------------------------------------------------------------------- 1 | 2 | -- Automatic dynamic loading of development files, if they exists. 3 | -- Try to load Moose as individual script files from \\Scripts\\Moose\" to the \"Moose Development\\Moose\" subdirectory of the Moose_Framework repository.") 95 | end 96 | -------------------------------------------------------------------------------- /Moose Setup/build_missions.bat: -------------------------------------------------------------------------------- 1 | git clone https://github.com/FlightControl-Master/MOOSE_MISSIONS.git missions 2 | 3 | appveyor DownloadFile https://github.com/FlightControl-Master/MOOSE_MISSIONS/archive/Release.zip 4 | 5 | 7z x Release.zip 6 | 7 | dir 8 | 9 | For /R MOOSE_MISSIONS-Release %%M IN (*.miz) do ( 10 | echo "Mission: %%M" 11 | mkdir Temp 12 | cd Temp 13 | mkdir l10n 14 | mkdir l10n\DEFAULT 15 | copy "..\Moose Mission Setup\Moose.lua" l10n\DEFAULT 16 | copy "%%~pM%%~nM.lua" l10n\DEFAULT\*.* 17 | 7z -bb0 u "%%M" "l10n\DEFAULT\*.lua" 18 | cd .. 19 | rmdir /S /Q Temp 20 | ) 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Moose-Includes](https://github.com/FlightControl-Master/MOOSE/actions/workflows/build-includes.yml/badge.svg?branch=master)](https://github.com/FlightControl-Master/MOOSE/actions/workflows/build-includes.yml) 2 | 3 | MOOSE 4 | 5 | You can find documentation for MOOSE in the following places: 6 | 7 | - Generated documentation of all MOOSE classes: 8 | - For the `master` branch: [MOOSE_DOCS] 9 | - For the `develop` branch: [MOOSE_DOCS_DEVELOP] 10 | - Documentation: 11 | - The old Guides can be found in our [archive]. 12 | - Visit our new documentation at the [MOOSE GitHub page]. 13 | - Overview of all [MOOSE repositories] on GitHub. 14 | 15 |
16 | 17 | [MOOSE_DOCS]: https://flightcontrol-master.github.io/MOOSE_DOCS/Documentation/index.html 18 | [MOOSE_DOCS_DEVELOP]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/index.html 19 | [archive]: https://flightcontrol-master.github.io/MOOSE/archive/ 20 | [MOOSE GitHub page]: https://flightcontrol-master.github.io/MOOSE/ 21 | [MOOSE repositories]: https://flightcontrol-master.github.io/MOOSE/repositories.html 22 | -------------------------------------------------------------------------------- /docker/build-docs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nickblah/lua:5.1.5-luarocks-ubuntu 2 | 3 | RUN apt-get -qq update 4 | RUN apt-get -qq install tree 5 | RUN apt-get -qq install build-essential 6 | RUN apt-get -qq install git 7 | RUN luarocks install markdown 0.32-2 8 | RUN luarocks install penlight 1.11.0-1 9 | RUN luarocks install metalua-compiler 0.7.3-1 10 | RUN luarocks install metalua-parser 0.7.3-2 11 | RUN luarocks install checks 12 | COPY start.sh /start.sh 13 | RUN chmod +x /start.sh 14 | -------------------------------------------------------------------------------- /docker/build-docs/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | services: 4 | lua: 5 | image: moose/build-docs 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | container_name: moose-build-docs 10 | volumes: 11 | - ../../:/moose 12 | stdin_open: true 13 | tty: true 14 | command: /bin/bash -c /start.sh 15 | -------------------------------------------------------------------------------- /docker/build-docs/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Prepare environment 4 | cd /moose/ 5 | mkdir -p build/tools 6 | mkdir -p build/doc 7 | rm -f build/doc/* 8 | 9 | # Checkout luadocumentor 10 | cd /moose/build/tools 11 | if [ ! -f /moose/build/tools/luadocumentor/luadocumentor.lua ] 12 | then 13 | git clone --branch patch-1 --single-branch https://github.com/Applevangelist/luadocumentor.git 14 | fi 15 | 16 | # Run luadocumentor 17 | cd /moose/build/tools/luadocumentor 18 | lua luadocumentor.lua -d /moose/build/doc '/moose/Moose Development/Moose' 19 | 20 | # Copy generated files in the MOOSE_DOCS repo if it is already there 21 | if [ -d /moose/build/MOOSE_DOCS/Documentation ]; then 22 | rm -f /moose/build/MOOSE_DOCS/Documentation/* 23 | cp /moose/build/doc/* /moose/build/MOOSE_DOCS/Documentation/ 24 | fi 25 | -------------------------------------------------------------------------------- /docker/build-includes/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nickblah/lua:5.3-luarocks-ubuntu 2 | 3 | RUN apt-get -qq update 4 | RUN apt-get -qq install tree 5 | RUN apt-get -qq install build-essential 6 | RUN apt-get -qq install git 7 | RUN luarocks install luasrcdiet 8 | RUN luarocks install luacheck 9 | COPY start.sh /start.sh 10 | RUN chmod +x /start.sh 11 | -------------------------------------------------------------------------------- /docker/build-includes/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | services: 4 | moose-build-includes: 5 | image: moose/build-includes 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | container_name: moose-build-includes 10 | volumes: 11 | - ../../:/moose 12 | stdin_open: true 13 | tty: true 14 | command: /bin/bash -c /start.sh 15 | -------------------------------------------------------------------------------- /docker/build-includes/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Prepare environment 4 | cd /moose/ 5 | mkdir -p build/result/Moose_Include_Dynamic 6 | mkdir -p build/result/Moose_Include_Static 7 | 8 | GIT_SHA=$(git rev-parse HEAD) 9 | GIT_SHA=$(echo $GIT_SHA|tr -d '\n') 10 | COMMIT_TIME=$(date +%Y-%m-%dT%H:%M:%S) 11 | 12 | # Create Includes 13 | lua "./Moose Setup/Moose_Create.lua" S "$COMMIT_TIME-$GIT_SHA" "./Moose Development/Moose" "./Moose Setup" "./build/result/Moose_Include_Static" 14 | lua "./Moose Setup/Moose_Create.lua" D "$COMMIT_TIME-$GIT_SHA" "./Moose Development/Moose" "./Moose Setup" "./build/result/Moose_Include_Dynamic" 15 | 16 | # Create Moose_.lua 17 | luasrcdiet --basic --opt-emptylines ./build/result/Moose_Include_Static/Moose.lua -o ./build/result/Moose_Include_Static/Moose_.lua 18 | 19 | # Run luacheck 20 | luacheck --std=lua51c --config=.luacheckrc -gurasqq "Moose Development/Moose" 21 | -------------------------------------------------------------------------------- /docker/gh-pages-check/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:latest 2 | 3 | WORKDIR /usr/app 4 | RUN npm install linkinator -------------------------------------------------------------------------------- /docker/gh-pages-check/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | services: 4 | moose-gh-pages-checks: 5 | image: moose/gh-pages-checks 6 | #image: node:latest 7 | #image: joskfg/np 8 | build: 9 | context: . 10 | dockerfile: Dockerfile 11 | container_name: moose-gh-pages-checks 12 | volumes: 13 | - .:/moose 14 | stdin_open: true 15 | tty: true 16 | #command: /bin/bash -c /moose/start.sh 17 | command: npx linkinator https://flightcontrol-master.github.io/MOOSE/ 18 | -------------------------------------------------------------------------------- /docker/gh-pages/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2.7 2 | 3 | ENV LC_ALL C.UTF-8 4 | ENV LANG en_US.UTF-8 5 | ENV LANGUAGE en_US.UTF-8 6 | 7 | WORKDIR /usr/src/app 8 | 9 | COPY Gemfile just-the-docs.gemspec ./ 10 | RUN gem install bundler && bundle install 11 | 12 | EXPOSE 4000 13 | -------------------------------------------------------------------------------- /docker/gh-pages/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | services: 4 | jekyll: 5 | build: 6 | context: ../../docs 7 | dockerfile: ./Dockerfile 8 | ports: 9 | - 4000:4000 10 | volumes: 11 | - ../../docs:/usr/src/app 12 | stdin_open: true 13 | tty: true 14 | command: bundle exec jekyll serve -H 0.0.0.0 -t --force_polling 15 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Copied from https://github.com/github/gitignore/blob/main/Jekyll.gitignore 2 | # Ignore metadata generated by Jekyll 3 | _site/ 4 | .sass-cache/ 5 | .jekyll-cache/ 6 | .jekyll-metadata 7 | 8 | # Ignore folders generated by Bundler 9 | .bundle/ 10 | vendor/ 11 | Gemfile.lock 12 | -------------------------------------------------------------------------------- /docs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2.7 2 | 3 | ENV LC_ALL C.UTF-8 4 | ENV LANG en_US.UTF-8 5 | ENV LANGUAGE en_US.UTF-8 6 | 7 | WORKDIR /usr/src/app 8 | 9 | COPY Gemfile just-the-docs.gemspec ./ 10 | RUN gem install bundler && bundle install 11 | 12 | EXPOSE 4000 13 | -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | gem "github-pages", group: :jekyll_plugins 3 | gem "jekyll" 4 | gem "json" 5 | gem "just-the-docs" 6 | 7 | gem "webrick", group: :development 8 | -------------------------------------------------------------------------------- /docs/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 just-the-docs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | baseurl: "" 2 | url: "https://flightcontrol-master.github.io" 3 | repository: FlightControl-Master/MOOSE 4 | title: MOOSE 5 | description: MOOSE is a Mission Object Oriented Scripting Environment for mission designers in DCS World 6 | theme: just-the-docs 7 | color_scheme: moose 8 | 9 | gh_edit_link: false 10 | gh_edit_link_text: "Edit this page on GitHub" 11 | gh_edit_repository: https://github.com/FlightControl-Master/MOOSE 12 | gh_edit_branch: master 13 | gh_edit_source: docs 14 | gh_edit_view_mode: edit 15 | 16 | callouts_level: quiet # or loud 17 | callouts: 18 | highlight: 19 | color: grey-dk 20 | important: 21 | title: Important 22 | color: red 23 | new: 24 | title: New 25 | color: grey-lt 26 | note: 27 | title: Note 28 | color: green 29 | warning: 30 | title: Warning 31 | color: yellow 32 | callouts_opacity: 0.4 33 | 34 | aux_links: 35 | GitHub: https://github.com/FlightControl-Master/MOOSE 36 | Discord: https://discord.gg/gj68fm969S 37 | 38 | kramdown: 39 | syntax_highlighter_opts: 40 | block: 41 | line_numbers: true 42 | 43 | compress_html: 44 | ignore: 45 | envs: all 46 | -------------------------------------------------------------------------------- /docs/_sass/color_schemes/moose.scss: -------------------------------------------------------------------------------- 1 | @import "./color_schemes/dark"; 2 | 3 | $green-300: #0d441b; 4 | $red-300: #440d0d; 5 | $grey-dk-300: #adadad; 6 | -------------------------------------------------------------------------------- /docs/advanced/debugger.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Debugger 3 | parent: Advanced 4 | nav_order: 100 5 | --- 6 | 7 | {: .warning } 8 | > THIS DOCUMENT IS STILL WORK IN PROGRESS! 9 | -------------------------------------------------------------------------------- /docs/advanced/desanitize-dcs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: De-Sanitize DCS 3 | parent: Advanced 4 | nav_order: 98 5 | --- 6 | # De-Sanitize the DCS scripting environment 7 | {: .no_toc } 8 | 9 | 1. Table of contents 10 | {:toc} 11 | 12 | De-Sanitize is the a modification performed by the user which disables some 13 | security features of DCS. Without de-sanitizing not all functions of Moose 14 | are available. Let's take a closer look and explain the details: 15 | 16 | - In the File-Explorer, navigate to your DCS main [installation folder]. 17 | - Navigate to the folder `Scripts` and open the file `MissionScripting.lua` with 18 | a good editor like [Notepad++]{:target="_blank"}. 19 | 20 | The original file should look like this: 21 | 22 | ```lua 23 | --Initialization script for the Mission lua Environment (SSE) 24 | 25 | dofile('Scripts/ScriptingSystem.lua') 26 | 27 | -- Sanitize Mission Scripting environment 28 | -- This makes unavailable some unsecure functions. 29 | -- Mission downloaded from server to client may contain potentialy harmful lua code 30 | -- that may use these functions. 31 | -- You can remove the code below and make availble these functions at your own risk. 32 | 33 | local function sanitizeModule(name) 34 | _G[name] = nil 35 | package.loaded[name] = nil 36 | end 37 | 38 | do 39 | sanitizeModule('os') 40 | sanitizeModule('io') 41 | sanitizeModule('lfs') 42 | _G['require'] = nil 43 | _G['loadlib'] = nil 44 | _G['package'] = nil 45 | end 46 | ``` 47 | 48 | In line 17, 18 and 19 the method `sanitizeModule` disables the modules `os`, `io` and `lfs`. 49 | 50 | {: .warning } 51 | > This is a security feature to avoid harmfull actions to be executed from 52 | > inside a mission. 53 | > 54 | > ***Disable this on your own risk!*** 55 | 56 | If the lines will be disabled the lua code inside of missions can use the 57 | following functionality again: 58 | 59 | - `os` (at line 17): 60 | - Execution of commands from the operation system is allowed again. 61 | This is needed by some Classes when using [Text-To-Speech] with [SRS]{:target="_blank"}. 62 | But in theory it can also run harmful commands. 63 | 64 | - `io` and `lfs` (at line 18 & 19): 65 | - Different libraries to access files on your hard disk or do other io 66 | operations. This is needed by some clases if you want to save and/or 67 | read data. Like persistance for CSAR. 68 | But it may be abused to access or modify sensitive files owned by the user. 69 | 70 | If you put two dashes (`--`) in front of each of the lines 17 - 19 the 71 | protection is disabled and the lower part of the file should look this: 72 | 73 | ```lua 74 | do 75 | --sanitizeModule('os') 76 | --sanitizeModule('io') 77 | --sanitizeModule('lfs') 78 | _G['require'] = nil 79 | _G['loadlib'] = nil 80 | _G['package'] = nil 81 | end 82 | ``` 83 | 84 | Save the file and it will enable the DCS Lua sandbox to access stuff on your computer. 85 | 86 | {: .note } 87 | > After each update of DCS you need to repeat this because each update will 88 | > overwrite this file by default. 89 | 90 | [installation folder]: ../beginner/tipps-and-tricks.md#find-the-installation-folder-of-dcs 91 | [Notepad++]: https://notepad-plus-plus.org/downloads/ 92 | [Text-To-Speech]: text-to-speech.md 93 | [SRS]: https://github.com/ciribob/DCS-SimpleRadioStandalone/releases/latest 94 | -------------------------------------------------------------------------------- /docs/advanced/eclipse-installation.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Advanced 3 | nav_order: 97 4 | --- 5 | # Eclipse Installation 6 | {: .no_toc } 7 | 8 | 1. Table of contents 9 | {:toc} 10 | 11 | This guide describes how to install [Eclipse] and install the necessary [Lua] 12 | environment. 13 | 14 | {: .note } 15 | > Note that the [Lua] environment is not actively supported any more 16 | > by Oracle. Especially the LDT plugin is not working when installed from the 17 | > market place. The problem and solution is nicely described [in this topic]. 18 | 19 | ## Prerequisites 20 | 21 | * Download Eclipse from [eclipse.org]. 22 | * Download [dltk-core]. 23 | * Download or clone [MOOSE repository] (select branch you want `master` or `develop`). 24 | 25 | ## Install Eclipse 26 | 27 | First you need to install [Eclipse]. It will ask you what kind of environment 28 | you use, *e.g.* C++ or Java or something else. This does not really matter since 29 | we want to use it for Lua and need to install the plugin for [Lua] later. 30 | 31 | ## Install dltk-core 32 | 33 | Before you can install the LDT plugin, you first need to add dltk-core zip file 34 | to the available software sites. Open eclipse, go to the help menu and follow 35 | the steps in the image: 36 | 37 | ![eclipse-install-ldk-1](../images/install/eclipse/ldk-1.png) 38 | 39 | This should then be in the available software sites. 40 | 41 | ![eclipse-install-ldk-2](../images/install/eclipse/ldk-2.png) 42 | 43 | ## Install LDT Plugin 44 | Open eclipse and from the "Help" menu open the "Eclipse Marketplase": 45 | 46 | ![Eclipse-Install_Lua_1](../images/install/eclipse/lua-1.png) 47 | 48 | In the "Search" tab find "lua" and install the "Lua Development Tools 1.4.x": 49 | 50 | ![Eclipse-Install_Lua_2](../images/install/eclipse/lua-2.png) 51 | 52 | ## Setup Lua Project for MOOSE 53 | Now that Eclipse and LDT are installed, we need to add MOOSE as a LUA project. 54 | Open Eclipse and from the "File" menu select "Other": 55 | 56 | ![Eclipse-Lua_Project_1](../images/install/eclipse/project-1.png) 57 | 58 | In the wizard window that opens select "Lua Project": 59 | 60 | ![Eclipse-Lua_Project_2](../images/install/eclipse/project-2.png) 61 | 62 | Setup the Lua project as described in the image. You need to specify the path to 63 | where you downloaded the MOOSE repository: 64 | 65 | ![Eclipse-Lua_Project_3a](../images/install/eclipse/project-3.png) 66 | 67 | From the "Project" tab select "Properties" and add `Moose/Moose Development/Moose` 68 | to the build path as shown below: 69 | 70 | ![Eclipse-Lua_Project_4](../images/install/eclipse/project-4.png) 71 | 72 | ## Finally 73 | Now you are done! 74 | Check that your script explorer looks like in the image below and that the 75 | intellisense is working when you open a MOOSE file: 76 | 77 | ![Eclipse-Lua_Project_5](../images/install/eclipse/project-5.png) 78 | 79 | [Eclipse]: https://www.eclipse.org 80 | [Lua]: https://www.lua.org/ 81 | [eclipse.org]: https://www.eclipse.org/downloads/ 82 | [dltk-core]: https://www.eclipse.org/downloads/download.php?file=/technology/dltk/downloads/drops/R5.7/R-5.7.1-201703020501/dltk-core-R-5.7.1-201703020501.zip 83 | [MOOSE repository]: https://github.com/FlightControl-Master/MOOSE/ 84 | [in this topic]: https://www.eclipse.org/forums/index.php/t/1101907/ -------------------------------------------------------------------------------- /docs/advanced/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | has_children: true 3 | nav_order: 3 4 | --- 5 | 6 | # Advanced 7 | 8 | In this section we will add the documentation for all subjects that go beyond 9 | the beginner topics, but which are interesting for mission builders or power 10 | users. 11 | 12 | {: .note } 13 | > This documentation is WIP (work in progress) and it will take some time to 14 | > fill it with usefull and up to date informations. Please be patient and check 15 | > back here from time to time to see if there is anything new for you. 16 | 17 | If you cannot find the information you are looking for here in the new 18 | documentation, please take a look at the [archive]. 19 | 20 | [archive]: ../archive/index.md 21 | -------------------------------------------------------------------------------- /docs/archive/classes-tasking.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Mission Designers Guide 3 | grand_parent: Archive 4 | nav_order: 2 5 | --- 6 | 7 | # Tasking classes guide 8 | 9 | ![MOOSE TASKING](../images/classes/category-tasking.jpg) 10 | 11 | This chapter explains the major principles behind the tasking concepts in MOOSE. 12 | Tasking is achieved through the utilization of various classes that fall in the category Tasking. 13 | 14 | MOOSE allows humans to achieve mission goals, through the execution of tasks. 15 | 16 | In order to setup the Tasking, you'll have to define: 17 | 18 | - At least one command center object for each coalition. 19 | - A mission or multiple missions for each command center. 20 | - A task dispatcher per mission. 21 | 22 | **Features:** 23 | 24 | * Each coalition must have a command center. 25 | * Each command center can govern multiple missions. 26 | * Each command center owns a player menu. 27 | * Each mission can contain multiple tasks of different categories. 28 | * Each mission has a goal to be achieved. 29 | * Each mission has a state, that indicates the fase of the mission. 30 | * Each task can be joined by multiple human players, thus, a task is done in co-op mode. 31 | * Each task has a state, that indicates the fase of the task. 32 | * Players have their own menu. When a player joins a task, only that player will have the menu of the task. 33 | 34 | ## 1. [Command Center] 35 | 36 | ![Tasking Command Center](../images/classes/tasking/commandcenter.jpg) 37 | 38 | A command center governs multiple missions, and takes care of the reporting and communications. 39 | 40 | **Features:** 41 | 42 | * Govern multiple missions. 43 | * Communicate to coalitions, groups. 44 | * Assign tasks. 45 | * Manage the menus. 46 | * Manage reference zones. 47 | 48 | ## 2. [Mission] 49 | 50 | ![Tasking Command Center](../images/classes/tasking/mission.jpg) 51 | 52 | A mission models a goal to be achieved through the execution and completion of tasks by human players. 53 | 54 | **Features:** 55 | 56 | * A mission has a goal to be achieved, through the execution and completion of tasks of different categories by human players. 57 | * A mission manages these tasks. 58 | * A mission has a state, that indicates the fase of the mission. 59 | * A mission has a menu structure, that facilitates mission reports and tasking menus. 60 | * A mission can assign a task to a player. 61 | 62 | 63 | ## 3. [A2A Task Dispatcher] 64 | 65 | ![Tasking A2A Dispatching](../images/classes/tasking/task-a2a-dispatcher.jpg) 66 | 67 | Dynamically allocates A2A tasks to human players, based on detected airborne targets through an EWR network. 68 | 69 | **Features:** 70 | 71 | * Dynamically assign tasks to human players based on detected targets. 72 | * Dynamically change the tasks as the tactical situation evolves during the mission. 73 | * Dynamically assign (CAP) Control Air Patrols tasks for human players to perform CAP. 74 | * Dynamically assign (GCI) Ground Control Intercept tasks for human players to perform GCI. 75 | * Dynamically assign Engage tasks for human players to engage on close-by airborne bogeys. 76 | * Define and use an EWR (Early Warning Radar) network. 77 | * Define different ranges to engage upon intruders. 78 | * Keep task achievements. 79 | * Score task achievements. 80 | 81 | 82 | ## 3. [A2G Task Dispatcher] 83 | 84 | ![Tasking A2G Dispatching](../images/classes/tasking/task-a2g-dispatcher.jpg) 85 | 86 | Dynamically allocates A2G tasks to human players, based on detected ground targets through reconnaissance. 87 | 88 | **Features:** 89 | 90 | * Dynamically assign tasks to human players based on detected targets. 91 | * Dynamically change the tasks as the tactical situation evolves during the mission. 92 | * Dynamically assign (CAS) Close Air Support tasks for human players. 93 | * Dynamically assign (BAI) Battlefield Air Interdiction tasks for human players. 94 | * Dynamically assign (SEAD) Supression of Enemy Air Defense tasks for human players to eliminate G2A missile threats. 95 | * Define and use an EWR (Early Warning Radar) network. 96 | * Define different ranges to engage upon intruders. 97 | * Keep task achievements. 98 | * Score task achievements. 99 | 100 | [Command Center]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Tasking.CommandCenter.html 101 | [Mission]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Tasking.Mission.html 102 | [A2A Task Dispatcher]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Tasking.Task_A2A_Dispatcher.html 103 | [A2G Task Dispatcher]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Tasking.Task_A2G_Dispatcher.html 104 | -------------------------------------------------------------------------------- /docs/archive/classes-wrapper.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Mission Designers Guide 3 | grand_parent: Archive 4 | nav_order: 5 5 | --- 6 | # Wrapper classes guide 7 | 8 | ![MOOSE WRAPPER](../images/classes/category-wrapper.jpg) 9 | 10 | This chapter lists the wrapper classes which enhances the functionality for mission designers on the mission objects. 11 | 12 | 13 | ## 1. [GROUP](https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Wrapper.Group.html) 14 | 15 | ![Group](../images/classes/wrapper/group.jpg) 16 | 17 | Wraps the DCS _Group_ objects. 18 | 19 | **Features:** 20 | 21 | * Support all DCS Group APIs. 22 | * Enhance with Group specific APIs not in the DCS Group API set. 23 | * Handle local Group Controller. 24 | * Manage the "state" of the DCS Group. 25 | 26 | 27 | ## 2. [UNIT](https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Wrapper.Unit.html) 28 | 29 | ![Unit](../images/classes/wrapper/unit.jpg) 30 | 31 | Wraps the DCS _Unit_ objects. 32 | 33 | **Features:** 34 | 35 | * Support all DCS Unit APIs. 36 | * Enhance with Unit specific APIs not in the DCS Unit API set. 37 | * Handle local Unit Controller. 38 | * Manage the "state" of the DCS Unit. 39 | 40 | 41 | ## 3. [STATIC](https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Wrapper.Static.html) 42 | 43 | ![Static](../images/classes/wrapper/static.jpg) 44 | 45 | Wraps the DCS _Static_ objects. 46 | Note that Statics are almost the same as Units, but they don't have a controller. 47 | 48 | **Features:** 49 | 50 | * Wraps the DCS Static objects. 51 | * Support all DCS Static APIs. 52 | * Enhance with Static specific APIs not in the DCS API set. 53 | 54 | 55 | ## 4. [AIRBASE](https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Wrapper.Airbase.html) 56 | 57 | ![Airbase](../images/classes/wrapper/airbase.jpg) 58 | 59 | Wraps the DCS _Airbase_ objects. 60 | 61 | **Features:** 62 | 63 | * Support all DCS Airbase APIs. 64 | * Enhance with Airbase specific APIs not in the DCS Airbase API set. 65 | 66 | -------------------------------------------------------------------------------- /docs/archive/guide-communities.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Archive 3 | nav_order: 7 4 | --- 5 | 6 | # Communities 7 | 8 | MOOSE is broadcasted, documented and supported through various social media channels. 9 | 10 | ## 1. MOOSE on YouTube 11 | 12 | MOOSE has a [broadcast channel](https://www.youtube.com/channel/UCjrA9j5LQoWsG4SpS8i79Qg) on youtube. 13 | These videos are grouped into playlists, which explain specific MOOSE capabilities, 14 | and gradually build up the "understanding" and "what is possible" to do with the MOOSE framework. 15 | I really, really encourage all to watch the explanation videos. 16 | 17 | Some mandatory videos to watch are: 18 | 19 | * [MOOSE Introduction](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl1JEtVcyf9sazUV5_fGICz4) 20 | * [MOOSE Setup](https://www.youtube.com/watch?v=-Hxae3mTCE8&t=159s&index=1&list=PL7ZUrU4zZUl0riB9ULVh-bZvFlw1_Wym2) 21 | * [MOOSE Spawning](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl1jirWIo4t4YxqN-HxjqRkL) 22 | * [MOOSE Tasking](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl3CgxN2iAViiGLTPpQ-Ajdg) 23 | * [MOOSE Task Dispatching](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl3I6ieFM-cjey-rncF1ktNI) 24 | 25 | ## 2. MOOSE on Eagle Dynamics forums 26 | 27 | This is a default thread at the Eagle Dynamics forums where the MOOSE framework can be discussed and supported. 28 | The thread is called [MOOSE - Mission Object Oriented Scripting Framework]. 29 | 30 | ## 3. MOOSE development on GitHub 31 | 32 | I encourage that you create also a user at [GitHub](https://github.com/FlightControl-Master/MOOSE). 33 | On the GitHub site, you can register issues, feedback and comments in the issues section of the site. 34 | This allows to track this feedback and issues, in order to provide a structured support and create a milestone plan. 35 | In other words, treat this development as a project. 36 | 37 | ## 4. MOOSE community on Discord 38 | 39 | Join our MOOSE community on [Discord](https://discord.gg/gj68fm969S). 40 | A place where mission designers and developers come together to discuss the latest features. 41 | We are now with about 5 people supporting Mission Designers on Discord. 42 | 43 | There are currently more than 300 members on our discord MOOSE channel. 44 | 45 | [MOOSE - Mission Object Oriented Scripting Framework]: https://forums.eagle.ru/showthread.php?t=138043 46 | -------------------------------------------------------------------------------- /docs/archive/guide-designers.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Archive 3 | nav_order: 2 4 | has_children: true 5 | --- 6 | 7 | # Mission Designers Guide 8 | 9 | MOOSE contains a lot of classes that can be used to enhance your missions. 10 | 11 | ![MOOSE framework](../images/classes/overview.jpg) 12 | 13 | Each section has an overview explanation on the different classes that mission designers can use to design compelling simulation scenarios. 14 | It provides a short explanation of the concepts and its features, as well as important information to know in order to understand how to use the classes. 15 | For more detailed information on the class, you will be guided to more detailed documentation on each individual class. 16 | 17 | Click on one of the next section links below to open the guides for each of the major areas that are covered by MOOSE. 18 | 19 | ## 1. [AI Classes] 20 | 21 | AI classes take control over the AI and makes the AI perform various processes. 22 | Some very complicated and enhanced classes are implemented to take control of AI. 23 | It uses the AI to create for you an enhanced simulation experience for your players. 24 | 25 | **Apply the AI classes to create a truly dynamic defense and attack system driven by AI.** 26 | 27 | 28 | ## 2. [Tasking Classes] 29 | 30 | Tasking classes provide a comprehensive Mission Orchestration System for human players. 31 | Command Centers govern multiple missions to achieve a mission goal. 32 | Within each mission, various tasks are defined, which can be assigned to human players. 33 | Upon completion of each task, a mission goal can be achieved, which will result in score points. 34 | 35 | **Join the forces and apply the tasking classes to create a truly dynamic co-operative combat scenario.** 36 | 37 | 38 | ## 3. [Cargo Classes] 39 | 40 | Cargo classes provide enhanced means to handle cargo transportation. 41 | Cargo requires a bit more explanation. MOOSE has implemented **a separate system for cargo handling**. 42 | It combines the capabilities of DCS world to combine infantry groups, cargo static objects and static objects 43 | as "cargo" objects. 44 | It also provides you with **AI cargo transportation** classes, 45 | and **Tasking classes for human players**, to transport cargo as part of a mission goal. 46 | In order to use these MOOSE cargo facilities, you'll have to declare those groups and static objects 47 | in a special way within your scripts and/or within the mission editor. 48 | It is not a rocket science, but requires a bit of reading to trying to learn this new method. 49 | Once you've learned this, a new world will open :-) 50 | 51 | **Add the cargo capabilities, so that your mission scenarios are dynamically managing the combat resources.** 52 | 53 | 54 | ## 4. [Functional Classes] 55 | 56 | MOOSE functional classes provide various functions that are useful in mission design. 57 | These classes vary and enhance the functionality of your simulation scenario. 58 | 59 | **Apply various functional classes, to enhance the functionality in your mission scenarios.** 60 | 61 | 62 | ## 5. [Wrapper Classes] 63 | 64 | MOOSE wrapper classes provide an object oriented hierarchical mechanism to manage the DCS objects within the simulator. 65 | Wrapper classes provide a greatly enhanced functionality to control groups, units, statics, scenery, airbases etc. 66 | 67 | **Make life easy and use the wrapper classes to take control of individual DCS world objects.** 68 | 69 | 70 | ## 6. [Core Classes] 71 | 72 | MOOSE core classes define the base building blocks of the MOOSE framework. 73 | The core classes utilize the DCS world core capability and greatly enhance its functionality. 74 | It also provides new mechanisms that provide you with new tools to create your simulation scenarios. 75 | Some of these methods are schedulers, event handlers, menu refreshing, enhanced messaging, sound, flags etc. 76 | 77 | **Learn and understand the different core classes, if you want to develop or enhance your mission scenarios.** 78 | 79 | [AI Classes]: classes-ai.md 80 | [Tasking Classes]: classes-tasking.md 81 | [Cargo Classes]: classes-cargo.md 82 | [Functional Classes]: classes-functional.md 83 | [Wrapper Classes]: classes-wrapper.md 84 | [Core Classes]: classes-core.md 85 | -------------------------------------------------------------------------------- /docs/archive/guide-developers.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Archive 3 | nav_order: 8 4 | --- 5 | 6 | # Developers Guide 7 | 8 | MOOSE contains a lot of classes that can be used to enhance your missions. 9 | 10 | ![MOOSE framework](../images/classes/overview.jpg) 11 | 12 | Each section has an overview explanation on the different classes that mission designers can use to design compelling simulation scenarios. 13 | It provides a short explanation of the concepts and its features, as well as important information to know in order to understand how to use the classes. 14 | For more detailed information on the class, you will be guided to more detailed documentation on each individual class. 15 | 16 | Click on one of the next section links below to open the guides for each of the major areas that are covered by MOOSE. 17 | 18 | ## 1. [MOOSE AI Classes](classes-ai.md) 19 | 20 | AI classes take control over the AI and makes the AI perform various processes. 21 | Some very complicated and enhanced classes are implemented to take control of AI. 22 | It uses the AI to create for you an enhanced simulation experience for your players. 23 | 24 | **Apply the AI classes to create a truly dynamic defense and attack system driven by AI.** 25 | 26 | 27 | ## 2. [MOOSE Tasking Classes](classes-tasking.md) 28 | 29 | Tasking classes provide a comprehensive Mission Orchestration System for human players. 30 | Command Centers govern multiple missions to achieve a mission goal. 31 | Within each mission, various tasks are defined, which can be assigned to human players. 32 | Upon completion of each task, a mission goal can be achieved, which will result in score points. 33 | 34 | **Join the forces and apply the tasking classes to create a truly dynamic co-operative combat scenario.** 35 | 36 | 37 | ## 3. [MOOSE Cargo Classes](classes-cargo.md) 38 | 39 | Cargo classes provide enhanced means to handle cargo transportation. 40 | Cargo requires a bit more explanation. MOOSE has implemented **a separate system for cargo handling**. 41 | It combines the capabilities of DCS world to combine infantry groups, cargo static objects and static objects 42 | as "cargo" objects. 43 | It also provides you with **AI cargo transportation** classes, 44 | and **Tasking classes for human players**, to transport cargo as part of a mission goal. 45 | In order to use these MOOSE cargo facilities, you'll have to declare those groups and static objects 46 | in a special way within your scripts and/or within the mission editor. 47 | It is not a rocket science, but requires a bit of reading to trying to learn this new method. 48 | Once you've learned this, a new world will open :-) 49 | 50 | **Add the cargo capabilities, so that your mission scenarios are dynamically managing the combat resources.** 51 | 52 | 53 | ## 4. [MOOSE Functional Classes](classes-functional.md) 54 | 55 | MOOSE functional classes provide various functions that are useful in mission design. 56 | These classes vary and enhance the functionality of your simulation scenario. 57 | 58 | **Apply various functional classes, to enhance the functionality in your mission scenarios.** 59 | 60 | 61 | ## 5. [MOOSE Wrapper Classes](classes-wrapper.md) 62 | 63 | MOOSE wrapper classes provide an object oriented hierarchical mechanism to manage the DCS objects within the simulator. 64 | Wrapper classes provide a greatly enhanced functionality to control groups, units, statics, scenery, airbases etc. 65 | 66 | **Make life easy and use the wrapper classes to take control of individual DCS world objects.** 67 | 68 | 69 | ## 6. [MOOSE Core Classes](classes-core.md) 70 | 71 | MOOSE core classes define the base building blocks of the MOOSE framework. 72 | The core classes utilize the DCS world core capability and greatly enhance its functionality. 73 | It also provides new mechanisms that provide you with new tools to create your simulation scenarios. 74 | Some of these methods are schedulers, event handlers, menu refreshing, enhanced messaging, sound, flags etc. 75 | 76 | **Learn and understand the different core classes, if you want to develop or enhance your mission scenarios.** 77 | -------------------------------------------------------------------------------- /docs/archive/guide-starters.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Archive 3 | nav_order: 1 4 | --- 5 | 6 | # Starters Guide 7 | 8 | ## 1. MOOSE is an Object Oriented system. 9 | 10 | MOOSE is an Object Oriented framework which provides different **classes** that take control of your simulation scenario. 11 | 12 | ### 1.1. Classes ... 13 | 14 | * **AI** - Take control of the AI controlled groups and units to execute specific tasks and processes. 15 | * **Tasking** - Assign tasks to human players, and let them achieve goals for logical missions setup in your simulation scenario. 16 | * **Functional** - Apply additional functionalities on top of the standard DCS simulation capabilities. 17 | * **Cargo** - Declare cargo objects, which are handled by moose in various ways. 18 | * **Wrapper** - The default dcs classes are wrapped by moose wrapper classes, and provide additional funtionality and easier access. 19 | * **Core** - The default dcs simulation capabilities are enhanced by moose, and provide additional functionality and easier access. 20 | 21 | You as a mission designer are required to study each class features, and evaluate whether you want to apply 22 | those features as part of your mission scenario. 23 | 24 | ### 1.2. Objects ... 25 | 26 | If you want to apply a class, you need to **instantiate** the class by creating an **object** of that class. 27 | Look at a **class** like the **definition of a process**, and the **object** **applies the process**. 28 | Multiple objects can be created of the same class, and this is the power of an Object Oriented system. 29 | These objects combine the combine **Methods** and **Variables**/**Properties** of the class as one encapsulated structure, that 30 | hold state and work independently from each other! 31 | 32 | Look at the following example: 33 | 34 | Here we use the SPAWN class, which you can use to spawn new groups into your running simulation scenario. 35 | The SPAWN class simplifies the process of spawning, and it has many methods to spawn new groups. 36 | 37 | ```lua 38 | -- This creates a new SpawnObject from the SPAWN class, 39 | -- using the constructor :New() to instantiate a new SPAWN object. 40 | -- It will search for the GroupName as the late activated group defined within your Mission Editor. 41 | -- If found, the object "SpawnObject" will now contain a "copy" of the SPAWN class to apply the spawning process. 42 | local SpawnObject = SPAWN:New( "GroupName" ) 43 | 44 | -- Nothing is spawned yet..., so let's use now the SpawnObject to spawn a new GROUP. 45 | -- We use the method :Spawn() to do that. 46 | -- This method creates a new group from the GroupName template as defined within the Mission Editor. 47 | local SpawnGroup = SpawnObject:Spawn() 48 | ``` 49 | 50 | ### 1.3. Inheritance ... 51 | 52 | MOOSE classes **derive or inherit** from each other, that means, 53 | within MOOSE there is an **inheritance** structure. 54 | The different moose classes are re-using properties and methods from its **parent classes**. 55 | 56 | This powerful concept is used everywhere within the MOOSE framework. 57 | The main (Parent) Class in the MOOSE framework is the BASE class. 58 | Every MOOSE Class is derived from this top BASE Class. 59 | So is also the SPAWN class derived from the BASE class. 60 | The BASE class provides powerful methods for debugging, 61 | event handling and implements the class handling logic. 62 | As a normal MOOSE user, you won't implement any code using inheritance, 63 | but just know that the inheritance structure is omni present in the intellisense and documentation. 64 | You'll need to browse to the right MOOSE Class within the inheritance tree structure, 65 | to identify which methods are properties are defined for which class. 66 | 67 | 68 | ## 2. MOOSE Demonstration Missions 69 | 70 | The framework comes with demonstration missions which can be downloaded [here](https://github.com/FlightControl-Master/MOOSE_MISSIONS/), that you can try out and helps you to code. 71 | These missions provide examples of defined use cases how the MOOSE framework can be utilized. Each test mission is located in a separate directory, which contains at least one .lua file and .miz file. 72 | The .lua file contains the mission script file that shows how the use case was implemented. 73 | You can copy/paste code the code snippets from this .lua file into your missions, as it will accellerate your mission developments. 74 | You will learn, see, and understand how the different MOOSE classes need to be applied, and how you can create 75 | more complex mission scenarios by combining these MOOSE classes into a complex but powerful mission engine. 76 | 77 | Some of these exact test missions are also demonstrated in a video format on the [YouTube channel](https://www.youtube.com/channel/UCjrA9j5LQoWsG4SpS8i79Qg). 78 | 79 | -------------------------------------------------------------------------------- /docs/archive/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Archive 3 | has_children: true 4 | nav_order: 99 5 | has_toc: false 6 | --- 7 | 8 | # Archive 9 | 10 | {: .important } 11 | > This documentation is outdated! We are working on new a documentation. 12 | 13 | Here you can find the guides written by FlightControl in the past. 14 | Most of the informations are still valid. But we want to create a more up-to-date 15 | documentation in the future. 16 | 17 | The first step to do this, is to consolidate the differents versions of the 18 | documentation from [MOOSE_DOCS] and [MOOSE_DOCS_DEVELOP] into this place. 19 | After that we can create a new documentation step by step. 20 | 21 | [MOOSE_DOCS]: https://github.com/FlightControl-Master/MOOSE_DOCS 22 | [MOOSE_DOCS_DEVELOP]: https://github.com/FlightControl-Master/MOOSE_DOCS_DEVELOP 23 | 24 | ![MOOSE](../images/classes/overview.jpg) 25 | 26 | MOOSE is a **M**ission **O**bject **O**riented **S**cripting **E**nvironment, and is meant for mission designers and 27 | mission hosters. It allows to quickly setup complex missions using pre-scripted scenarios using the available classes 28 | within the MOOSE Framework. MOOSE works with the current DCS world and earlier versions. 29 | 30 | ## Starters guide 31 | 32 | You need to write lua code (scripts) to apply the MOOSE framework. But it is not really that hard, if you understand 33 | a couple of principles. Read more in the [Starters Guide](guide-starters.md). 34 | 35 | ## Mission Designers Guide 36 | 37 | This section is meant for those who really want to start using MOOSE and write lua scripts for their missions. 38 | The section provides a comprehensive overview of the different classes that form the complete MOOSE framework. 39 | Here you find a high-level explanation and features, how to: 40 | 41 | * Setup AI dispatchers to create complex and coordinated AI behaviour. 42 | * Cargo handling 43 | * Setup task dispatchers for Mission completion 44 | * How to use MOOSE wrapper classes 45 | * The different components of the core MOOSE engine 46 | 47 | Read more in the [Mission Designers Guide](guide-designers.md). 48 | 49 | Each class will link you further down into the MOOSE Classes guide, for more detailed information on each MOOSE class. 50 | 51 | ## MOOSE Classes Guide 52 | 53 | Here you can find detailed documentation for each MOOSE class. 54 | Click on the hamburger menu on the left upper corner of each page to navigate to other MOOSE classes. 55 | 56 | - `master` branch: 57 | - `develop` branch: 58 | 59 | ## MOOSE Setup 60 | 61 | The delivery of MOOSE follows a structured release process. Over time, new features are added that can be used in your mission. 62 | 63 | The latest release of MOOSE can be downloaded [here](https://github.com/FlightControl-Master/MOOSE/releases). 64 | 65 | There are 3 different ways how you can use MOOSE, each with a different engagement and complexity level: 66 | 67 | ### Setup for Mission Designers 68 | 69 | This section shows how to setup a development environment for Mission Designers using the MOOSE framework. 70 | 71 | - Download and install Java. 72 | - Setup Lua Development Tools IDE (from the Eclipse suite). 73 | - Setup a logging tool. 74 | - Tweak your DCS environment. 75 | 76 | Please read the detailed [LDT Setup Guide](guide-setup-ldt.md) for more information. 77 | 78 | ### Setup for Beta tester guide 79 | 80 | Beta testers of MOOSE are requested to install additional software. 81 | 82 | As a return or as a reward, testers get: 83 | 84 | * Newly developed features planned for the next MOOSE release can be tested and incorporated in your missions early. 85 | * You can evaluate and contribute to the stability of the next release. 86 | * Your mission creation workflow becomes very flexible. New features are dynamically added to you missions. 87 | 88 | Please read the detailed [Beta Tester Guide](guide-beta-tester.md) for more information. 89 | 90 | ### Contribute on the MOOSE development 91 | 92 | Those people who have experience in lua development or are excited to contribute to the MOOSE project are welcome. 93 | 94 | Please consult the [Contribution Guide](guide-contribution.md) for more information. 95 | 96 | ### Debug your code interactively using LDT 97 | 98 | Have a look at the [Interactive Debugging](guide-debug.html) to setup your system so you can debug your mission code. 99 | 100 | 101 | ## MOOSE Support Channels 102 | 103 | MOOSE is broadcasted, documented and supported through various social media channels. 104 | 105 | Click here for the [Communities Guide](guide-communities.md) of the MOOSE framework. 106 | 107 | 108 | ## MOOSE framework goal 109 | 110 | The goal of MOOSE is to allow mission designers to **enhance the mission designs** by using **mission orchestration objects**, 111 | which can be _instantiated_ from defined classes within the framework. 112 | This will allow to write exciting missions and multi player cooperative operation scenarios. 113 | 114 | Of course, the richness of the framework will determine the richness of the misson scenarios. 115 | The MOOSE is a service that is produced while being consumed ... , 116 | it will evolve further as more classes are developed for the framework, and as more users are using it. 117 | 118 | MOOSE is NOT meant to be a one-man show, it is meant to evolve within a growing community around the framework. 119 | 120 | Within the community, key users will support, document, explain and even create new classes for the framework. 121 | It is the ambition to grow this framework as a de-facto standard for mission designers to use within the DCS World community. 122 | 123 | 124 | ## MOOSE community on Discord 125 | 126 | Join our MOOSE community on Discord. 127 | A place where mission designers and developers come together to discuss the latest features. 128 | There are a lot of people supporting Mission Designers on [Discord](https://discord.gg/gj68fm969S). 129 | 130 | 131 | Thank you! 132 | The Moose Team 133 | -------------------------------------------------------------------------------- /docs/beginner/ask-for-help.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Beginner 3 | nav_order: 06 4 | --- 5 | # How to ask for help 6 | {: .no_toc } 7 | 8 | 1. Table of contents 9 | {:toc} 10 | 11 | After you have tried to solve the problem on your own, you can also get help 12 | from the community. 13 | 14 | {: .highlight } 15 | > But it is important to follow certain rules! Read them below. 16 | 17 | ## Communities 18 | 19 | There are two ways to communicate with the community. 20 | The fastest way is to use Discord: 21 | 22 | - {:target="_blank"} 23 | 24 | But if you don't like Discord, you are able to post in the DCS forum. 25 | Check out the MOOSE thread here: 26 | 27 | - 28 | 29 | ## How to post requests 30 | 31 | MOOSE is a community project and support is community based. 32 | 33 | Please remember when posting a question: 34 | 35 | - Before posting anything follow the [troubleshooting steps]. 36 | - **Read your logs**. 37 | 38 | ### Formulate a good description 39 | 40 | A post should contain the following: 41 | 42 | - A description what you expected to happen and what actually happened. 43 | - Do not use vague words this stuff is hard to help with! Be specific. 44 | 45 | - Describe what happens instead. 46 | - The less detail you offer, the less chance you can be helped. 47 | - Don't say it doesn't work. Or is it broken. Say what it actually does. 48 | 49 | ### Format your code 50 | 51 | The easier your code is to read, the more likely you are to get a helpful answer. If your code is hard to read, some 52 | people who could help you may not even bother to read your code. Syntax Highlighting makes the code much clearer and 53 | easier to understand. Therefore: 54 | 55 | - Post your code in Discord as formatted code: 56 | 57 | - Wrap a single line of code in backticks \` like this: 58 | 59 | ![discord-single-line-code.png](../images/beginner/discord-single-line-code.png) 60 | 61 | - Multiple lines of code should be posted like this: 62 | 63 | ![discord-multi-line-code.png](../images/beginner/discord-multi-line-code.png) 64 | 65 | ### Do not post a screenshot of your code 66 | 67 | Your code is easy to read on a screenshot if you are using a good text editor or IDE, but if someone discovers an error 68 | in your code and wants to post a corrected version, they will have to type out the entire code. This could lead to them 69 | not helping you because it's too much work for them. 70 | 71 | ### Post your log 72 | 73 | If the error message in the `dcs.log` does not tell you anything, then post it in the Discord. 74 | 75 | - Post the important log lines with the error or warning messages. Format them like this: 76 | 77 | ![discord-format-logs.png](../images/beginner/discord-format-logs.png) 78 | 79 | ### Send your mission when requested 80 | 81 | Please don't just send your mission file. You have to manually extract the script from the file. 82 | It is better to send your script code and log lines beforehand. 83 | If this does not help, you may be asked to send your mission. 84 | 85 | - Some complex problems need the mission (.miz file) also. 86 | 87 | - But post your mission only when requested. 88 | - Try to simplify your mission if it is complex! 89 | - Try to avoid or delete MODs, because could prevent people from helping you. 90 | 91 | There are people in the Discord and in the forum, who spend their free time to 92 | help you.
93 | It is your responsibility to make their "work" as easy as possible. 94 | 95 | Welcome to MOOSE and good luck! 96 | 97 | ## Next step 98 | 99 | Last but not least some [tipps and tricks]. 100 | 101 | [troubleshooting steps]: problems.md 102 | [tipps and tricks]: tipps-and-tricks.md 103 | -------------------------------------------------------------------------------- /docs/beginner/demo-missions.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Beginner 3 | nav_order: 04 4 | --- 5 | 6 | # Demo missions 7 | {: .no_toc } 8 | 9 | 1. Table of contents 10 | {:toc} 11 | 12 | The best way to get comfortable with a Moose class is to try the demo missions 13 | of the class you want to learn. The Moose team created a lot of demo missions 14 | for most of the classes. 15 | 16 | ## Download demo missions 17 | 18 | Go to the repository [MOOSE_MISSIONS]{:target="_blank"}, search the folder of 19 | the class, download the mission (`.miz`) and run them. 20 | 21 | ## Read the mission script 22 | 23 | In the same folder a `.lua` file with the same name is placed which is the 24 | included mission script. You can watch these mission scripts easily online at 25 | GitHub to understand what is happening in the mission. 26 | 27 | ## Read documentation 28 | 29 | Next step is to read the [documentation]{:target="_blank"} of the class to 30 | understand the code of the demo mission. 31 | 32 | {: .note } 33 | > The documentation is quite long and might be confusing for beginners. 34 | > Start by looking at the description at the top of the documentation of a 35 | > class. It often contains examples and explanations.

36 | > Then search for the function names and look at the description of the 37 | > functions and its parameters. 38 | 39 | ## Make small changes to the script 40 | 41 | Download the `.lua` file, change the parameters to suit your needs in 42 | [Notepad++]{:target="_blank"}, add it to the mission and rerun the mission. 43 | Observe what happens and adapt the code. 44 | 45 | If you want to use more functions combine them all up. 46 | 47 | {: .note } 48 | > But it is wise to do this in small steps. So it is easier to find errors. 49 | 50 | ## Next step 51 | 52 | If the mission does not show the expected behaviour take a look at section 53 | [problems]. 54 | 55 | [MOOSE_MISSIONS]: https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/develop 56 | [documentation]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/index.html 57 | [Notepad++]: https://notepad-plus-plus.org/downloads/ 58 | [problems]: problems.md 59 | -------------------------------------------------------------------------------- /docs/beginner/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | has_children: true 3 | nav_order: 2 4 | --- 5 | 6 | # Beginner 7 | 8 | In this section we will add all informations needed for your first steps using 9 | MOOSE. 10 | 11 | {: .note } 12 | > This documentation is WIP (work in progress) and it will take some time to 13 | > fill it with usefull and up to date informations. Please be patient and check 14 | > back here from time to time to see if there is anything new for you. 15 | 16 | If you cannot find the information you are looking for here in the new 17 | documentation, please take a look at the [archive]. 18 | 19 | [archive]: ../archive/index.md 20 | -------------------------------------------------------------------------------- /docs/beginner/introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Beginner 3 | nav_order: 01 4 | --- 5 | # Introduction 6 | {: .no_toc } 7 | 8 | 1. Table of contents 9 | {:toc} 10 | 11 | This very short chapter is for people identifying as a consumer of MOOSE and not 12 | wishing to learn to script. This is a condensed FAQ and set of links to get you 13 | up and running. It specifically avoids any complexity. 14 | 15 | ## What is MOOSE? 16 | 17 | [DCS] has included a [Simulator Scripting Engine] (short SSE). This SSE gives 18 | mission designers access to objects in the game using [Lua] scripts. 19 | 20 | **M**ission **O**bject **O**riented **S**cripting **E**nvironment, is a 21 | scripting framework written in [Lua] that attempts to make the scripting of 22 | missions within DCS easier, simpler and shorter than with the standard methods. 23 | 24 | MOOSE is over 5 MB of code, with as many words as the Bible and the core of it 25 | was written over several years by one person. 26 | 27 | MOOSE is the brain-child of an talented programmer with the alias FlightControl. 28 | If you want to know more about this topic, check out FC’s [MOOSE for Dummies] 29 | videos on YouTube. 30 | 31 | {: .note } 32 | > We recommend video playback at 1.5x speed, as FC speaks slowly and distinctly. 33 | 34 | ## What is Lua? 35 | 36 | [Lua] is a lightweight, programming language designed primarily to be embedded 37 | in applications. It's main advantages are: 38 | 39 | - It is fast, 40 | - it is portable (Windows, Linux, MacOS), 41 | - it is easy to use. 42 | 43 | [Lua] is embedded in DCS, so we can use it without any modification to the game. 44 | 45 | ## What are scripts, frameworks and classes? 46 | 47 | A script is a set of instructions in plain text read by a computer and processed 48 | on the fly. Scripts do not need to be compiled before execution, unlike exe 49 | files. 50 | 51 | A framework is a structure that you can build software (or in this case missions) 52 | on. It serves as a foundation, so you're not starting entirely from scratch. 53 | It takes a lot of work off your hands because someone else has thought about it 54 | and provides ready-made building blocks for many situations. 55 | 56 | These building blocks are called classes in object oriented programming. 57 | 58 | ## What can MOOSE do for me? 59 | 60 | Whilst MOOSE can be used to write customised [Lua] scripts, you are probably not 61 | caring for learning [Lua] right now. Instead you can use a MOOSE script written 62 | by someone else by just copy and paste it. You can configure the basic settings 63 | of the classes to fit your needs in your mission. 64 | 65 | Here are a few suggestions for well-known and popular classes: 66 | 67 | - [Ops.Airboss] manages recoveries of human pilots and AI aircraft on aircraft 68 | carriers. 69 | - [Functional.RAT] creates random airtraffic in your missions. 70 | - [Functional.Range] (which counts hits on targets so you can practice), 71 | - [Functional.Fox] to practice to evade missiles without being destroyed. 72 | - and many more! 73 | 74 | You will need to look through examples to know what functionallity you want to 75 | add to your missions. 76 | 77 | ## What if I don’t want to learn scripting? 78 | 79 | The good news for you: You don't need to become a professional [Lua] programmer 80 | to use MOOSE. As explained already, you can copy and paste the code from example 81 | missions. You need some basics how to add triggers in the mission editor. But we 82 | will cover this later. 83 | 84 | If you want to modify the behaviour of the classes slightly, some basics about 85 | the [Lua] synthax (the rules how to write the code) will help you to avoid 86 | errors. 87 | 88 | The more customizations you want to make, the more knowledge about [Lua] you 89 | will need. But you can learn this step by step. 90 | 91 | ## Next step 92 | 93 | We will start with a very simple demonstartion of MOOSE in the next section 94 | [Hello world mission]. 95 | 96 | [DCS]: https://www.digitalcombatsimulator.com/en/ 97 | [Simulator Scripting Engine]: https://wiki.hoggitworld.com/view/Simulator_Scripting_Engine_Documentation 98 | [Lua]: https://www.lua.org/ 99 | [MOOSE for Dummies]: https://www.youtube.com/watch?v=ZqvdUFhKX4o&list=PL7ZUrU4zZUl04jBoOSX_rmqE6cArquhM4&index=2&t=618s 100 | 101 | [Ops.Airboss]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Ops.Airboss.html 102 | [Functional.RAT]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Functional.RAT.html 103 | [Functional.Range]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Functional.Range.html 104 | [Functional.Fox]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Functional.Fox.html 105 | 106 | [Hello world mission]: hello-world.md 107 | -------------------------------------------------------------------------------- /docs/beginner/problems.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Beginner 3 | nav_order: 05 4 | --- 5 | 6 | # Problems 7 | {: .no_toc } 8 | 9 | 1. Table of contents 10 | {:toc} 11 | 12 | ## Something went wrong 13 | 14 | If the mission shows not the expected behavior do the following steps: 15 | 16 | 1. Double check if you added the changed mission script to the mission again! 17 | 1. Check if the triggers are configured as requested in the last sections: 18 | - To load MOOSE: `4 MISSION START`, nothing on `CONDITIONS`, `DO SCRIPT FILE` to load `Moose_.lua`. 19 | - To load mission script(s): `1 ONCE`, in `CONDITIONS` add `TIME MORE` = 1, `DO SCRIPT FILE` to load `yourscript.lua`. 20 | 1. Double check if you have the right version of MOOSE (some classes need the develop branch). 21 | 1. Try the newest version of MOOSE. 22 | 23 | ## Read the logs 24 | 25 | The DCS log is a super important and useful log for the entire of DCS World. 26 | All scripting and other errors are recorded here. It is the one stop shop for 27 | things that occurred in your mission. It will tell you if there was a mistake. 28 | 29 | 1. Open the file `dcs.log` in the `Logs` subfolder in your DCS [Saved Games folder]. 30 | 31 | 1. Search for the following line: `*** MOOSE INCLUDE END ***` 32 | - If it is included in the log, Moose was loaded. 33 | - If the line is not in the log check the triggers again! 34 | 35 | 1. Search for lines with `SCRIPTING` and `WARNING` or `ERROR` and read them. 36 | - This might help to find your error. 37 | 38 | {: .note } 39 | > You will find a lot of warning and error lines in the log which are not 40 | > related to `SCRIPTING`. They are related to stuff from Eagle Dynamics or 41 | > Third Parties and you have to ignore them. EA does the same. ;o) 42 | 43 | ## Next step 44 | 45 | If you don't find the error and/or don't understand the messages in the log file 46 | you can [ask for help]. 47 | 48 | [Saved Games folder]: tipps-and-tricks.md#find-the-saved-games-folder 49 | [ask for help]: ask-for-help.md 50 | -------------------------------------------------------------------------------- /docs/beginner/tipps-and-tricks.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Beginner 3 | nav_order: 99 4 | --- 5 | # Tipps and tricks 6 | {: .no_toc } 7 | 8 | 1. Table of contents 9 | {:toc} 10 | 11 | This section we put a lot of usefull informations needed by beginners. 12 | 13 | ## Find the installation folder of DCS 14 | 15 | It depends on the platform and the version you choosed to install: 16 | 17 | - [DCS World Steam Edition]{:target="_blank"} from Steam. 18 | - To find the folder right click on the game in Steam. 19 | - Open Properties / Installed Files / Browse 20 | 21 | - [DCS World Standalone installer]{:target="_blank"} from Eagle Dynamics website. 22 | - Default installation locations: 23 | - Stable: C:\Program Files\Eagle Dynamics\DCS World 24 | - OpenBeta: C:\Program Files\Eagle Dynamics\DCS World.Openbeta 25 | - If you changed the installation folder of the Standalone version, right 26 | click on the game icon, open Properties and click on `Open File Location`. 27 | 28 | ## Find the Saved Games folder 29 | 30 | DCS creates a folder to store all user specific configuration and data. 31 | This folder can be found in your userprofile as subfolder of `Saved Games`. 32 | 33 | The easiest way to find it, is to open search and paste the text below into it 34 | and press Enter: 35 | 36 | ``` 37 | %userprofile%\Saved Games 38 | ``` 39 | 40 | {: .note } 41 | > The text will work even if your Windows is installed with another language, 42 | > e.g. German. This is really usefull. 43 | 44 | Depending on the DCS version you will find one of the following folders: 45 | 46 | - DCS 47 | - DCS.openbeta 48 | 49 | {: .note } 50 | > It is good idea to add the folder to the quick access area in the windows 51 | > explorer. You will use it very often! 52 | 53 | For MOOSE users the folders `Missions`, `Logs` and `Config` are most important! 54 | 55 | [DCS World Steam Edition]: https://store.steampowered.com/app/223750/DCS_World_Steam_Edition/ 56 | [DCS World Standalone installer]: https://www.digitalcombatsimulator.com/en/downloads/world/ 57 | -------------------------------------------------------------------------------- /docs/developer/buildsystem/build-docs.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Build system 3 | grand_parent: Developer 4 | nav_order: 2 5 | --- 6 | 7 | # Build class documentation 8 | 9 | The documentation of all classes are included in the code as comments. 10 | This kind of documentation process is called [LuaDoc]. But we build the 11 | html files for the documentation with [LuaDocumentor]. It is a tool 12 | similar to [LuaDoc], but with some additional features the Moose team 13 | decided to use. 14 | 15 | {: .important } 16 | > The team created also some modifications, which are not part of the 17 | > official [LuaDocumentor] tool. So we use the code in the git repository 18 | > [Applevangelist/luadocumentor] in the branch `patch-1`. 19 | 20 | There are two git repositories which are used to save the generated 21 | documentation: 22 | 23 | - [MOOSE_DOCS] is the repository for the `master` branch of [MOOSE] 24 | - A configured GitHub Pages job will deploy the result to:
25 | 26 | - [MOOSE_DOCS_DEVELOP] is the repository for the `develop` branch of [MOOSE] 27 | - A configured GitHub Pages job will deploy the result to:
28 | 29 | 30 | Main build steps to create the class documentation are defined in [.github/workflows/build-docs.yml]: 31 | 32 | - Checkout of the git repository [MOOSE]. 33 | - Create output folders. 34 | - Checkout of the git repository [Applevangelist/luadocumentor] with 35 | branch `patch-1` into a subdirectory. 36 | - Update the Linux system software. 37 | - Install needed tools: 38 | - [tree] - A tool to output a tree view of a folder structure. 39 | - [lua] - Package to run [Lua] scripts. This time [Lua] 5.1, 40 | because it matches the DCS environment. 41 | - [LuaRocks] - This is the package manager for Lua modules. 42 | - [markdown] - Dependency for [LuaDocumentor] 43 | - [penlight] - Dependency for [LuaDocumentor] 44 | - [metalua-compiler] - Dependency for [LuaDocumentor] 45 | - [metalua-parser] - Dependency for [metalua-compiler] 46 | - [checks] - Dependency for [metalua-parser] 47 | 48 | - Run the build steps: 49 | - Run `luadocumentor.lua` to create the html files. 50 | 51 | - Deploy build results: 52 | - Checkout [MOOSE_DOCS] or [MOOSE_DOCS_DEVELOP] git repository in a subdirectory. 53 | - Use the matching git repository for the branch of [MOOSE]. 54 | - `master` -> [MOOSE_DOCS]. 55 | - `develop` -> [MOOSE_DOCS_DEVELOP]. 56 | - Use a `TOKEN` for checkout, so a `push` is possible later on. 57 | - Copy build result to `MOOSE_DOCS` folder. 58 | - Push results to the target repository. 59 | 60 | # Build a preview locally 61 | 62 | To generate a preview of the class documentation go into the folder 63 | `docker/build-docks` and run `docker compose up`. It will create a Docker image 64 | and start a Docker container. Within this container all needed software packages 65 | are included to build to class documentation. 66 | 67 | - You need a working installation of [Docker]. 68 | - In the main repository folder a new folder `build` will be created. 69 | - Subfolders `build/docs` and `build/tools` will be generated. 70 | - Repo `Applevangelist/luadocumentor` will be checked out to `build/tools/luadocumentor` 71 | - `luadocumentor.lua` will be executed and writes the output to `build/docs`. 72 | 73 | {: .note } 74 | > If [MOOSE_DOCS] is checked out to `/moose/build/MOOSE_DOCS` by the developer 75 | > manually, then the generated files are also copied into `/moose/build/MOOSE_DOCS/Documentation/`. 76 | > This allows to run `docker compose up` in `/moose/build/MOOSE_DOCS/docker/`, 77 | > so the full result can be checked. 78 | 79 | [tree]: https://wiki.ubuntuusers.de/tree/ 80 | [LuaDoc]: https://keplerproject.github.io/luadoc/ 81 | [LuaDocumentor]: https://luarocks.org/modules/luarocks/luadocumentor 82 | [Applevangelist/luadocumentor]: https://github.com/Applevangelist/luadocumentor/tree/patch-1 83 | [markdown]: https://luarocks.org/modules/mpeterv/markdown 84 | [penlight]: https://luarocks.org/modules/tieske/penlight 85 | [metalua-compiler]: https://luarocks.org/modules/luarocks/metalua-compiler 86 | [metalua-parser]: https://luarocks.org/modules/luarocks/metalua-parser 87 | [checks]: https://luarocks.org/modules/fab13n/checks 88 | [MOOSE]: https://github.com/FlightControl-Master/MOOSE 89 | [MOOSE_DOCS]: https://github.com/FlightControl-Master/MOOSE_DOCS 90 | [MOOSE_DOCS_DEVELOP]: https://github.com/FlightControl-Master/MOOSE_DOCS_DEVELOP 91 | [Lua]: https://www.lua.org/ 92 | [LuaRocks]: https://luarocks.org/ 93 | [.github/workflows/build-docs.yml]: https://github.com/FlightControl-Master/MOOSE/blob/master/.github/workflows/build-docs.yml 94 | [Docker]: https://www.docker.com/ 95 | -------------------------------------------------------------------------------- /docs/developer/buildsystem/build-includes.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Build system 3 | grand_parent: Developer 4 | nav_order: 1 5 | --- 6 | 7 | # Build include files 8 | 9 | Main build steps to create the include files are defined in [.github/workflows/build-includes.yml]: 10 | 11 | - Checkout of the git repository [MOOSE]. 12 | - Create output folders. 13 | - Update the Linux system software. 14 | - Install needed tools: 15 | - [tree] - A tool to output a tree view of a folder structure. 16 | - [lua5.3] - Package to run [Lua] scripts. Version 5.3 is needed, because we 17 | need liblua5.3-dev for [LuaSrcDiet]. 18 | - [LuaRocks] - LuaRocks is the package manager for Lua modules. 19 | - liblua5.3-dev - Header file of [Lua] needed for [LuaSrcDiet] to work. 20 | - [LuaSrcDiet] - To compress the [Lua] code and create `Moose_.lua`. 21 | - [LuaCheck] - This is a static code analyzer and a linter for [Lua]. 22 | 23 | - Run the build steps: 24 | - Run `./Moose Setup/Moose_Create.lua` to create `Moose.lua`. 25 | - Run `./Moose Setup/Moose_Create.lua` to create dynamic `Moose.lua` which 26 | loads individual Lua class files used by Moose developers. 27 | - Run [LuaSrcDiet] to compress the [Lua] code and create `Moose_.lua` 28 | - Run [LuaCheck] to find errors in the code. Warnings are ignored, because 29 | there are a lot of warnings, which cannot be resolved by the Moose team. 30 | 31 | - Deploy build results: 32 | - Checkout [MOOSE_INCLUDE] git repository in a subdirectory. 33 | - Use the same branch used to checkout [MOOSE] git repository. 34 | - Use a `TOKEN` for checkout, so a `push` is possible later on. 35 | - Copy build result to `MOOSE_INCLUDE` folder 36 | - Push results to [MOOSE_INCLUDE] repository 37 | 38 | # Build a preview locally 39 | 40 | To generate a preview of the include files go into the folder 41 | `docker/build-includes` and run `docker compose up`. It will create a Docker 42 | image and start a Docker container. 43 | Within this container all needed software packages are included to build the 44 | include files. 45 | 46 | - You need a working installation of [Docker]. 47 | - In the main repository folder a new folder `build` will be created. 48 | - The following subfolders will be generated: 49 | - `build/result/Moose_Include_Dynamic` and 50 | - `build/result/Moose_Include_Static` 51 | - `./Moose Setup/Moose_Create.lua` will be executed to generate the target files 52 | - [LuaSrcDiet] will be executed to generate the target file `Moose_.lua` 53 | - [LuaCheck] runs to find errors 54 | 55 | [.github/workflows/build-includes.yml]: https://github.com/FlightControl-Master/MOOSE/blob/master/.github/workflows/build-includes.yml 56 | [tree]: https://wiki.ubuntuusers.de/tree/ 57 | [lua5.3]: https://www.lua.org/manual/5.3/ 58 | [LuaRocks]: https://luarocks.org/ 59 | [LuaCheck]: https://github.com/mpeterv/luacheck 60 | [MOOSE]: https://github.com/FlightControl-Master/MOOSE 61 | [MOOSE_INCLUDE]: https://github.com/FlightControl-Master/MOOSE_INCLUDE 62 | [LuaSrcDiet]: https://github.com/jirutka/luasrcdiet 63 | [Lua]: https://www.lua.org/ 64 | [Docker]: https://www.docker.com/ 65 | -------------------------------------------------------------------------------- /docs/developer/buildsystem/gh-pages.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Build system 3 | grand_parent: Developer 4 | nav_order: 3 5 | --- 6 | 7 | # Build GitHub Pages 8 | 9 | This documentation is created by [GitHub Pages]. The source files are 10 | stored in the repository [MOOSE] in the subfolder `docs`. 11 | We use [Just the Docs], which is a modern, highly customizable, and responsive 12 | [Jekyll] theme for documentation. 13 | 14 | {: .note } 15 | > The class documentation is created by its own [build] and is not the scope for this page! 16 | 17 | The build steps to create this documentation are defined in [.github/workflows/gh-pages.yml]. 18 | 19 | It is divided into two jobs: 20 | - build: 21 | - Only changes to in the subfolder `docs` or `gh-pages.yml` will trigger a build. 22 | - Checkout of the git repository [MOOSE]. 23 | - Setup [Ruby] version 3.1, which is needed by [Jekyll]. 24 | - Run action [configure-pages]. 25 | - Build with [Jekyll]. 26 | - Run action [upload-pages-artifact]. 27 | - deploy: 28 | - Run action [deploy-pages]. 29 | 30 | # Preview of this documentation 31 | 32 | When enhancing this documentation it is very useful to see a 1on1 preview of the pages. 33 | This can be displayed as follows: 34 | 35 | - You need a working installation of [Docker]. 36 | - Go to the `docs` subfolder. 37 | - Run `docker compose up`. 38 | - Open a browser with the following URL: `http://127.0.0.1:4000/`. 39 | - After a change of the [Markdown] files, wait some seconds and press F5 in the browser. 40 | 41 | {: .warning } 42 | > Some changes are not processed properly with this procedure. It is then 43 | > necessary to stop and restart the container once. On startup everything is 44 | > always regenerated. 45 | 46 | # Run linkinator to find brocken links 47 | 48 | When changing this documentation it is very useful to run linkinator to find broken links. 49 | This can be done as follows: 50 | 51 | - You need a working installation of [Docker]. 52 | - Go to the `docker/gh-pages-check` subfolder. 53 | - Run `docker compose up`. 54 | 55 | [GitHub Pages]: https://pages.github.com/ 56 | [MOOSE]: https://github.com/FlightControl-Master/MOOSE 57 | [Just the Docs]: https://github.com/just-the-docs/just-the-docs 58 | [Jekyll]: https://jekyllrb.com/ 59 | [Ruby]: https://www.ruby-lang.org/en/ 60 | [build]: build-docs.md 61 | [.github/workflows/gh-pages.yml]: https://github.com/FlightControl-Master/MOOSE/blob/master/.github/workflows/gh-pages.yml 62 | [configure-pages]: https://github.com/actions/configure-pages/ 63 | [upload-pages-artifact]: https://github.com/actions/upload-pages-artifact 64 | [deploy-pages]: https://github.com/actions/deploy-pages/ 65 | [Docker]: https://www.docker.com/ 66 | [Markdown]: https://www.markdownguide.org/ 67 | -------------------------------------------------------------------------------- /docs/developer/buildsystem/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Build system 4 | parent: Developer 5 | has_children: true 6 | nav_order: 99 7 | --- 8 | 9 | # Build system 10 | 11 | {: .note } 12 | > This documentation is not needed for end users. Only the people of the 13 | > development team, who must maintain the build system need to read this. 14 | 15 | In this document we want to describe our build system for MOOSE. 16 | MOOSE consists of multiple [Lua] files. Each class is stored in its own file. 17 | This is needed for MOOSE developers to maintain clarity. 18 | For users this is not practical, because they want to include the whole framework 19 | as a single file into their missions. 20 | 21 | Because of this the build will collect all needed files and merge them together 22 | in one file with the name `Moose.lua`. It includes also all comments and the 23 | class documentation. Because of this its size is about 6-7 MB. 24 | 25 | To reduce the size of the file and make mission files smaller, the Moose team 26 | decided to create a version without all comments and documentation. This file 27 | is named `Moose_.lua`. It is created by a tool with the name [LuaSrcDiet]. 28 | 29 | Both files will be called static includes. In other programming languages includes 30 | are dependencies. For Moose it is easier to memorize, that these files must be 31 | included in your mission to use Moose. It is an static approach because you need 32 | to add it once and it is only read from inside of the mission file after that. 33 | A dynamic approach is to load all the single class files on each mission start 34 | from the hard disk. But this is more for advanced Moose users and Moose developers. 35 | 36 | ## Details 37 | 38 | In the past [AppVeyor] was used to run the build on a Windows system. 39 | We decided to migrate this build to [GitHub Actions]. Installation of 40 | dependencies was not stable on Windows with [GitHub Actions]. So we switched 41 | to Ubuntu Linux. 42 | 43 | ### GitHub Actions yml files 44 | 45 | The build configuration is stored in the folder `.github/workflows`. You will find 46 | multiple files in this directory: 47 | 48 | - [build-docs.yml] - Job definition to generate the class documentation 49 | - [build-includes.yml] - Job definition to build the static includes 50 | - [gh-pages.yml] - Job to build this documentation page 51 | 52 | We decided to use different files for each job for separation of duties and easier 53 | maintenance. 54 | 55 | [Lua]: https://www.lua.org/ 56 | [LuaSrcDiet]: https://github.com/jirutka/luasrcdiet 57 | [AppVeyor]: https://www.appveyor.com/ 58 | [GitHub Actions]: https://docs.github.com/en/actions 59 | [build-docs.yml]: build-docs.md 60 | [build-includes.yml]: build-includes.md 61 | [gh-pages.yml]: gh-pages.md 62 | -------------------------------------------------------------------------------- /docs/developer/buildsystem/local-test.md: -------------------------------------------------------------------------------- 1 | --- 2 | parent: Build system 3 | grand_parent: Developer 4 | nav_order: 4 5 | --- 6 | 7 | # Run builds locally 8 | 9 | When creating or enhancing [GitHub Actions] builds it is a problem to test the 10 | build. After each change you need to commit and check the build result. This 11 | leads to a lot of unnecessary commits. 12 | 13 | Therefor it is needed to run the build locally on the developer PC. The tool 14 | which enabled this is [act]. It uses [Docker] to create a build runner and 15 | executes the [GitHub Actions] build with it. 16 | 17 | [act] can by installed by [Chocolatey] by this single command: `choco install act-cli`. 18 | 19 | We use the `Medium Docker Image` for our MOOSE builds to work properly. 20 | Unfortunately the docker images used by [act] are not as up to date as the 21 | images used by [GitHub Actions]. So we needed to add a build step with 22 | `sudo apt-get -qq update`. 23 | 24 | The build jobs needs `TOKENS` to run properly. So you have to create a PAT 25 | ([Personal Access Token]). A classic Token with read rights is enough to run 26 | the build, as long as don't want to push the results. 27 | 28 | {: .important } 29 | > The push step is only executed if the variable `FORCE_PUSH` with value `true` is set. 30 | > - This is only needed if the push step itself must be change and tested! 31 | > - Add parameter `--var FORCE_PUSH=true` to your [act] commando. 32 | > - You and your PAT needs write access to the target repos, too. 33 | 34 | Save your PAT in the file `.secrets` in the main folder 35 | of the MOOSE repository. This file is added to `.gitignore`, so it is not 36 | recognized by git for commits. Add the following line to `.secrets`: 37 | 38 | ``` 39 | BOT_TOKEN= 40 | ``` 41 | 42 | To run the builds use these commands: 43 | - `act push -W .github/workflows/build-includes.yml` 44 | - `act push -W .github/workflows/build-docs.yml` 45 | 46 | [GitHub Actions]: https://docs.github.com/en/actions 47 | [act]: https://github.com/nektos/act 48 | [Docker]: https://www.docker.com/ 49 | [Chocolatey]: https://community.chocolatey.org/ 50 | [Personal Access Token]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens 51 | -------------------------------------------------------------------------------- /docs/developer/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Developer 3 | has_children: true 4 | nav_order: 4 5 | --- 6 | 7 | # Developer 8 | 9 | All information in this section is primarily intended for developers who extend 10 | or maintain the Moose program code. Of course, this information may also be of 11 | interest to others who want to learn more about the background of MOOSE. 12 | 13 | {: .note } 14 | > This documentation is WIP (work in progress) and it will take some time to 15 | > fill it with usefull and up to date informations. Please be patient and check 16 | > back here from time to time to see if there is anything new for you. 17 | 18 | If you cannot find the information you are looking for here in the new 19 | documentation, please take a look at the [archive]. 20 | 21 | [archive]: ../archive/index.md 22 | -------------------------------------------------------------------------------- /docs/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | services: 4 | jekyll: 5 | build: 6 | context: ./ 7 | image: moose/docs 8 | ports: 9 | - 4000:4000 10 | volumes: 11 | - .:/usr/src/app 12 | stdin_open: true 13 | tty: true 14 | command: bundle exec jekyll serve -H 0.0.0.0 -t --force_polling 15 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/favicon.ico -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Add_Favorites.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Add_Favorites.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Breakpoint.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Breakpoint.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Breakpoint_List.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Breakpoint_List.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Bug.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Bug.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Debugger.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Debugger.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Dynamic.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Dynamic.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Engine.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Engine.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Favorites.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Favorites.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Flag.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Flag.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Intro.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Intro.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_LDT_Setup.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_LDT_Setup.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Listener.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Listener.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Loader.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Loader.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_MissionScripting.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_MissionScripting.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Run_Listener.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Run_Listener.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Session.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Session.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Source.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Source.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Static.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Static.JPG -------------------------------------------------------------------------------- /docs/images/archive/debugging/DEBUG_Tracking.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/debugging/DEBUG_Tracking.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/DCS_Triggers_Empty.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/DCS_Triggers_Empty.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/DCS_Triggers_Load_Mission_Add.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/DCS_Triggers_Load_Mission_Add.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/DCS_Triggers_Load_Mission_File_Added.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/DCS_Triggers_Load_Mission_File_Added.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/DCS_Triggers_Load_Mission_File_Select.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/DCS_Triggers_Load_Mission_File_Select.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/DCS_Triggers_Load_Moose_Add.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/DCS_Triggers_Load_Moose_Add.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/DCS_Triggers_Load_Moose_File_Added.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/DCS_Triggers_Load_Moose_File_Added.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/DCS_Triggers_Load_Moose_Select_File.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/DCS_Triggers_Load_Moose_Select_File.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/GitHub_Clone.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/GitHub_Clone.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/GitHub_Issue_example.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/GitHub_Issue_example.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Add_Folder.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Add_Folder.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Delete_Src.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Delete_Src.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Mission_Folder_Name.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Mission_Folder_Name.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Mission_Lua_File_Name.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Mission_Lua_File_Name.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Moose_Framework_Finish.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Moose_Framework_Finish.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_New_Project.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_New_Project.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_New_Project_Projects.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_New_Project_Projects.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Project.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Project.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Project_Existing_Location.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Project_Existing_Location.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Project_My_Missions.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Project_My_Missions.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Script_Explorer.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Script_Explorer.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/LDT_Select_Moose_Framework.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/LDT_Select_Moose_Framework.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/MOOSE_Release_Cycle.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/MOOSE_Release_Cycle.JPG -------------------------------------------------------------------------------- /docs/images/archive/installation/intellisense.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/archive/installation/intellisense.jpg -------------------------------------------------------------------------------- /docs/images/beginner/dcs-menu-mission.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-menu-mission.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-message.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-message.jpg -------------------------------------------------------------------------------- /docs/images/beginner/dcs-my-missions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-my-missions.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-mission-start-actions-conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-mission-start-actions-conf.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-mission-start-actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-mission-start-actions.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-mission-start-conditions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-mission-start-conditions.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-mission-start-conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-mission-start-conf.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-mission-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-mission-start.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-once-actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-once-actions.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-once-conditions-conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-once-conditions-conf.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-once-conditions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-once-conditions.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-once-conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-once-conf.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-once.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-once.png -------------------------------------------------------------------------------- /docs/images/beginner/dcs-triggers-toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/dcs-triggers-toolbar.png -------------------------------------------------------------------------------- /docs/images/beginner/discord-format-logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/discord-format-logs.png -------------------------------------------------------------------------------- /docs/images/beginner/discord-multi-line-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/discord-multi-line-code.png -------------------------------------------------------------------------------- /docs/images/beginner/discord-single-line-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/beginner/discord-single-line-code.png -------------------------------------------------------------------------------- /docs/images/classes/ai/a2a-dispatcher.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/a2a-dispatcher.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/a2g-cas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/a2g-cas.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/bai.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/bai.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/balancer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/balancer.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/cap.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/cap.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/cargo-dispatcher-airplanes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/cargo-dispatcher-airplanes.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/cargo-dispatcher-apc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/cargo-dispatcher-apc.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/cargo-dispatcher-helicopters.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/cargo-dispatcher-helicopters.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/cargo-dispatcher.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/cargo-dispatcher.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/formation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/formation.jpg -------------------------------------------------------------------------------- /docs/images/classes/ai/patrol.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/ai/patrol.jpg -------------------------------------------------------------------------------- /docs/images/classes/cargo/cargocrate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/cargo/cargocrate.jpg -------------------------------------------------------------------------------- /docs/images/classes/cargo/cargogroup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/cargo/cargogroup.jpg -------------------------------------------------------------------------------- /docs/images/classes/cargo/cargoslingload.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/cargo/cargoslingload.jpg -------------------------------------------------------------------------------- /docs/images/classes/category-cargo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/category-cargo.jpg -------------------------------------------------------------------------------- /docs/images/classes/category-core.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/category-core.jpg -------------------------------------------------------------------------------- /docs/images/classes/category-functional.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/category-functional.jpg -------------------------------------------------------------------------------- /docs/images/classes/category-tasking.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/category-tasking.jpg -------------------------------------------------------------------------------- /docs/images/classes/category-wrapper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/category-wrapper.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/base.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/base.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/database.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/database.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/event.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/event.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/fsm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/fsm.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/goal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/goal.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/menu.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/message.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/message.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/point.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/point.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/report.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/report.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/scheduler.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/scheduler.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/sets.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/sets.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/settings.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/spawn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/spawn.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/spawnstatic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/spawnstatic.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/spot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/spot.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/userflag.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/userflag.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/velocity.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/velocity.jpg -------------------------------------------------------------------------------- /docs/images/classes/core/zones.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/core/zones.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/artillery.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/artillery.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/atc-ground.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/atc-ground.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/cleanup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/cleanup.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/designation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/designation.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/detection.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/detection.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/escorting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/escorting.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/missile-trainer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/missile-trainer.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/range.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/range.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/rat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/rat.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/scoring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/scoring.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/sead.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/sead.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/suppression.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/suppression.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/warehouse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/warehouse.jpg -------------------------------------------------------------------------------- /docs/images/classes/functional/zonecapturecoalition.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/functional/zonecapturecoalition.jpg -------------------------------------------------------------------------------- /docs/images/classes/overview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/overview.jpg -------------------------------------------------------------------------------- /docs/images/classes/sound/radio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/sound/radio.jpg -------------------------------------------------------------------------------- /docs/images/classes/sound/usersound.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/sound/usersound.jpg -------------------------------------------------------------------------------- /docs/images/classes/tasking/cargo-dispatcher.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/tasking/cargo-dispatcher.jpg -------------------------------------------------------------------------------- /docs/images/classes/tasking/commandcenter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/tasking/commandcenter.jpg -------------------------------------------------------------------------------- /docs/images/classes/tasking/mission.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/tasking/mission.jpg -------------------------------------------------------------------------------- /docs/images/classes/tasking/task-a2a-dispatcher.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/tasking/task-a2a-dispatcher.jpg -------------------------------------------------------------------------------- /docs/images/classes/tasking/task-a2g-dispatcher.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/tasking/task-a2g-dispatcher.jpg -------------------------------------------------------------------------------- /docs/images/classes/wrapper/airbase.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/wrapper/airbase.jpg -------------------------------------------------------------------------------- /docs/images/classes/wrapper/group.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/wrapper/group.jpg -------------------------------------------------------------------------------- /docs/images/classes/wrapper/static.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/wrapper/static.jpg -------------------------------------------------------------------------------- /docs/images/classes/wrapper/unit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/classes/wrapper/unit.jpg -------------------------------------------------------------------------------- /docs/images/deployment-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/deployment-flow.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/ldk-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/ldk-1.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/ldk-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/ldk-2.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/lua-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/lua-1.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/lua-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/lua-2.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/project-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/project-1.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/project-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/project-2.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/project-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/project-3.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/project-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/project-4.png -------------------------------------------------------------------------------- /docs/images/install/eclipse/project-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/eclipse/project-5.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/powershell-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/powershell-1.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/powershell-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/powershell-2.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/powershell-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/powershell-3.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/srs-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/srs-client.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/srs-executables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/srs-executables.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/srs-overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/srs-overlay.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/srs-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/srs-server.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/srs-status-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/srs-status-1.png -------------------------------------------------------------------------------- /docs/images/install/text-to-speech/srs-status-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/install/text-to-speech/srs-status-2.png -------------------------------------------------------------------------------- /docs/images/moosedoc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlightControl-Master/MOOSE/f5881eda533a97bae379e3b5d5b81cd6895fa0d1/docs/images/moosedoc.jpg -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Overview 3 | nav_order: 1 4 | layout: home 5 | --- 6 | 7 | [![Moose-Includes](https://github.com/FlightControl-Master/MOOSE/actions/workflows/build-includes.yml/badge.svg?branch=master)](https://github.com/FlightControl-Master/MOOSE/actions/workflows/build-includes.yml)   8 | [![Moose-Docs](https://github.com/FlightControl-Master/MOOSE/actions/workflows/build-docs.yml/badge.svg?branch=master)](https://github.com/FlightControl-Master/MOOSE/actions/workflows/build-docs.yml) 9 | 10 | # MOOSE framework 11 | 12 | ![MOOSE](./images/classes/overview.jpg) 13 | 14 | MOOSE is a **M**ission **O**bject **O**riented **S**cripting **E**nvironment for mission designers in [DCS World]. 15 | It allows to quickly setup complex missions using pre-scripted scenarios using the available classes within the MOOSE Framework. 16 | MOOSE is written in [Lua] which is a small and fast programming language, which is embedded in [DCS World]. 17 | 18 | ## Goal of MOOSE 19 | 20 | The goal of MOOSE is to allow mission designers to enhance their scripting with mission orchestration objects, 21 | which can be instantiated from defined classes within the framework. This will allow to write mission scripts with 22 | minimal code embedded. Of course, the richness of the framework will determine the richness of the misson scenarios. 23 | The MOOSE is a service that is produced while being consumed. It will evolve further as more classes are developed 24 | for the framework and as more users are using it. 25 | MOOSE is not a one-man show, it is a collaborative effort and meant to evolve within a growing community around the framework. 26 | Within the community, key users will start supporting, documenting, explaining and even creating new classes for the framework. 27 | It is the ambition to grow this framework as a de-facto standard for mission designers to use. 28 | 29 | ## Two branches - Choose wisely 30 | 31 | In [DCS World] there is a `Stable` version and an `OpenBeta`. New features are released to the `OpenBeta` first and applied to `Stable` later. 32 | People who choose to use `OpenBeta` can use the newest featuest and module, but accept the risk of bugs and unstable updates. 33 | In MOOSE there is a `master` branch, which is comparable to the `Stable` version. 34 | And there is the `development` branch, which is more like the `OpenBeta`. 35 | New modules (called classes in [Lua], like [OPS.Auftrag]) will only available in the `development` branch. 36 | 37 | Releases are the most stable approach to use MOOSE. 38 | From time to time the current state of the `master` branch is used to create release. 39 | A release gets a spefific version number and will not be changed later on. 40 | 41 | ## Documentation 42 | 43 | Documentation on the MOOSE class hierarchy will be automatically generated from [LuaDoc] comments inside of the source code of MOOOSE. 44 | You can find the results on these websites: 45 | 46 | - Stable `master` branch: 47 | - `develop` branch: 48 | 49 | ## YouTube Tutorials 50 | 51 | There are different tutorial playlists available on YouTube: 52 | 53 | - AnyTimeBaby (Pene) has kindly created a [tutorial series for MOOSE](https://youtube.com/playlist?list=PLLkY2GByvtC2ME0Q9wrKRDE6qnXJYV3iT) 54 | with various videos that you can watch. 55 | - FlightControl (initiator of the project) has created a lot of [videos](https://www.youtube.com/@flightcontrol5350/featured) on how to use MOOSE. 56 | They are a little bit outdated, but they still contain a lot of valuable information. 57 | 58 | ## MOOSE on Discord 59 | 60 | MOOSE has a living community of users, beta testers and contributors. 61 | The gathering point is a service provided by [Discord]. 62 | If you want to join this community, just click the link below and you'll be on board in no time: 63 | 64 | - [Moose Discord server](https://discord.gg/gj68fm969S) 65 | 66 | [DCS World]: https://www.digitalcombatsimulator.com/de/ 67 | [Lua]: https://www.lua.org/ 68 | [LuaDoc]: https://keplerproject.github.io/luadoc/ 69 | [Ops.Auftrag]: https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Ops.Auftrag.html 70 | [Discord]: https://discord.com/ 71 | -------------------------------------------------------------------------------- /docs/just-the-docs.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | Gem::Specification.new do |spec| 4 | spec.name = "just-the-docs" 5 | spec.version = "0.4.1" 6 | spec.authors = ["Patrick Marsceill", "Matthew Wang"] 7 | spec.email = ["patrick.marsceill@gmail.com", "matt@matthewwang.me"] 8 | 9 | spec.summary = %q{A modern, highly customizable, and responsive Jekyll theme for documentation with built-in search.} 10 | spec.homepage = "https://github.com/just-the-docs/just-the-docs" 11 | spec.license = "MIT" 12 | spec.metadata = { 13 | "bug_tracker_uri" => "https://github.com/just-the-docs/just-the-docs/issues", 14 | "changelog_uri" => "https://github.com/just-the-docs/just-the-docs/blob/main/CHANGELOG.md", 15 | "documentation_uri" => "https://just-the-docs.github.io/just-the-docs/", 16 | "source_code_uri" => "https://github.com/just-the-docs/just-the-docs", 17 | } 18 | 19 | spec.files = `git ls-files -z ':!:*.jpg' ':!:*.png'`.split("\x0").select { |f| f.match(%r{^(assets|bin|_layouts|_includes|lib|Rakefile|_sass|LICENSE|README|CHANGELOG|favicon)}i) } 20 | spec.executables << 'just-the-docs' 21 | 22 | spec.add_development_dependency "bundler", ">= 2.3.5" 23 | spec.add_runtime_dependency "jekyll", ">= 3.8.5" 24 | spec.add_runtime_dependency "jekyll-seo-tag", ">= 2.0" 25 | spec.add_runtime_dependency "rake", ">= 12.3.1" 26 | end 27 | -------------------------------------------------------------------------------- /docs/repositories.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Repositories 3 | nav_order: 5 4 | --- 5 | 6 | # MOOSE Repositories 7 | 8 | The underlying picture documents the different repositories in the MOOSE framework. 9 | The white ones are edited and are the source of the framework. 10 | The red ones contain generated artefacts. See further the explanation for each repository. 11 | 12 | ![Graphic](/images/deployment-flow.png) 13 | 14 | ## [MOOSE](https://github.com/FlightControl-Master/MOOSE) - For development and static documentation 15 | 16 | This repository contains the source lua code of the MOOSE framework. 17 | Also the source files for this documentation are included in this repository. 18 | 19 | ## [MOOSE_INCLUDE](https://github.com/FlightControl-Master/MOOSE_INCLUDE) - For users (provides generated files) 20 | 21 | This repository contains the `Moose.lua` and `Moose\_.lua` file to be included within your missions. 22 | Note that the `Moose\_.lua` is technically the same as `Moose.lua`, but without any commentary or unnecessary whitespace in it. 23 | You only need to load **one** of those files at the beginning of your mission. 24 | 25 | ## [MOOSE_DOCS](https://github.com/FlightControl-Master/MOOSE_DOCS) - Only to generate documentation website 26 | 27 | This repository contains the generated documentation and pictures and other references. 28 | The generated documentation is reflected in html and is published at: 29 | - `master` branch: 30 | - `develop` branch: 31 | 32 | ## [MOOSE_GUIDES](https://github.com/FlightControl-Master/MOOSE_GUIDES) - For external documentation and help 33 | 34 | This repository will be removed in future. 35 | 36 | ## [MOOSE_PRESENTATIONS](https://github.com/FlightControl-Master/MOOSE_PRESENTATIONS) 37 | 38 | A collection of presentations used in the videos on the youtube channel of FlightControl. 39 | 40 | ## [MOOSE_MISSIONS](https://github.com/FlightControl-Master/MOOSE_MISSIONS) - For users (provides demo missions) 41 | 42 | This repository contains all the demonstration missions in packed format (*.miz), 43 | and can be used without any further setup in DCS WORLD. 44 | 45 | ## [Moose_Community_Scripts](https://github.com/FlightControl-Master/Moose_Community_Scripts) 46 | 47 | This repository is for Moose based helper scripts, snippets, functional demos. 48 | 49 | ## [MOOSE_SOUND](https://github.com/FlightControl-Master/MOOSE_SOUND) 50 | 51 | Sound packs for different MOOSE framework classes. 52 | 53 | ## [MOOSE_MISSIONS_DYNAMIC](https://github.com/FlightControl-Master/MOOSE_MISSIONS_DYNAMIC) - Outdated 54 | 55 | This repository will be removed in future. 56 | 57 | ## [MOOSE_MISSIONS_UNPACKED](https://github.com/FlightControl-Master/MOOSE_MISSIONS_UNPACKED) - Outdated 58 | 59 | This repository will be removed in future. 60 | 61 | ## [MOOSE_COMMUNITY_MISSIONS](https://github.com/FlightControl-Master/MOOSE_COMMUNITY_MISSIONS) - Outdated 62 | 63 | A database of missions created by the community, using MOOSE. 64 | 65 | ## [MOOSE_TOOLS](https://github.com/FlightControl-Master/MOOSE_TOOLS) - Outdated 66 | 67 | A collection of the required tools to develop and contribute in the MOOSE framework for DCS World. 68 | --------------------------------------------------------------------------------