From 09849c7a44c9f5ffcecf9f11febe2692674919a4 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 10:45:34 +0100 Subject: [PATCH 01/22] Update Intelligence.lua --- Moose Development/Moose/Ops/Intelligence.lua | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Moose Development/Moose/Ops/Intelligence.lua b/Moose Development/Moose/Ops/Intelligence.lua index 09462393d..781ca1bed 100644 --- a/Moose Development/Moose/Ops/Intelligence.lua +++ b/Moose Development/Moose/Ops/Intelligence.lua @@ -111,12 +111,12 @@ INTEL = { DetectAccoustic = false, DetectAccousticRadius = 1000, DetectAccousticUnitTypes = {Unit.Category.HELICOPTER}, - DopplerRadar = true, + DopplerRadar = false, DopplerMinAltAGL = 500, DopplerNotchSin = math.sin(math.rad(15)), DopplerMinSpeedMps = 50, DopplerRCS = true, - DopplerRadarRangeM = 200 * 1000, + RangeM = 200 * 1000, } --- Detected item info. @@ -2629,7 +2629,7 @@ end -- Default true. -- @return #INTEL self function INTEL:SetDopplerRadar(MinAltAGL, NotchHalfDeg, MinSpeedMps, RadarRangeKm, RCS) - self:I(self.lid .. "SetDopplerRadar") + self:T(self.lid .. "SetDopplerRadar") self.DopplerRadar = true self.DopplerMinAltAGL = MinAltAGL or 500 self.DopplerNotchSin = math.sin(math.rad(NotchHalfDeg or 15)) @@ -2643,7 +2643,7 @@ end -- @param #INTEL self -- @return #INTEL self function INTEL:SetDopplerRadarOff() - self:I(self.lid .. "SetDopplerRadarOff") + self:T(self.lid .. "SetDopplerRadarOff") self.DopplerRadar = false return self end @@ -2655,7 +2655,7 @@ end -- @param #number RCS_m2 Side-on RCS in m² -- @return #INTEL self function INTEL:SetTypeRCS(TypeName, RCS_m2) - self:I(self.lid .. "SetTypeRCS") + self:T(self.lid .. "SetTypeRCS") INTEL.RCS_Table[TypeName] = RCS_m2 return self end @@ -2678,7 +2678,7 @@ end -- @param DCS#Vec3 tvel Target velocity vector (pre-computed) -- @return #number Effective RCS in m² function INTEL:_GetAspectRCS(TargetUnit, rpos, spd, tvel) - self:I(self.lid .. "_GetAspectRCS") + self:T(self.lid .. "_GetAspectRCS") -- Look up base (side-on) RCS local typename = TargetUnit:GetTypeName() local base_rcs = INTEL.RCS_Table[typename] @@ -2716,7 +2716,7 @@ end -- @return #boolean true = detected -- @return #string rejection reason: "speed" | "clutter" | "notch" | "rcs" function INTEL:_CheckDopplerDetection(TargetUnit, RadarUnit) - self:I(self.lid .. "_CheckDopplerDetection") + self:T(self.lid .. "_CheckDopplerDetection") -- Pre-compute common geometry (shared by notch + RCS checks) local spd = TargetUnit:GetVelocityMPS() local rpos = RadarUnit:GetVec3() @@ -2799,7 +2799,7 @@ end -- @param #boolean DetectRWR (Optional) If *false*, do not include targets detected by RWR. -- @param #boolean DetectDLINK (Optional) If *false*, do not include targets detected by data link. function INTEL:GetDetectedUnitsDoppler(Unit, DetectedUnits, RecceDetecting,DetectVisual, DetectOptical, DetectRadar,DetectIRST, DetectRWR, DetectDLINK) - self:I(self.lid .. "GetDetectedUnitsDoppler") + self:T(self.lid .. "GetDetectedUnitsDoppler") -- Run the original detection self:GetDetectedUnits(Unit,DetectedUnits,RecceDetecting,DetectVisual,DetectOptical,DetectRadar,DetectIRST,DetectRWR,DetectDLINK) @@ -2815,7 +2815,7 @@ function INTEL:GetDetectedUnitsDoppler(Unit, DetectedUnits, RecceDetecting,Detec if not ok then table.insert(remove, name) --if self.verbose and self.verbose >= 2 then - self:I(string.format("%sDoppler: suppressed %s [%s] by %s",self.lid, name, reason, Unit:GetName())) + self:T(string.format("%sDoppler: suppressed %s [%s] by %s",self.lid, name, reason, Unit:GetName())) --end end end @@ -3027,7 +3027,7 @@ end -- @return #INTEL_DLINK self function INTEL_DLINK:SetDLinkCacheTime(seconds) self.cachetime = math.abs(seconds or 120) - self:I(self.lid.."Caching for "..self.cachetime.." seconds.") + self:T(self.lid.."Caching for "..self.cachetime.." seconds.") return self end @@ -3117,7 +3117,7 @@ end function INTEL_DLINK:onafterStop(From, Event, To) self:T({From, Event, To}) local text = string.format("Version %s stopped.", self.version) - self:I(self.lid .. text) + self:T(self.lid .. text) return self end From a9c616120f2c7efdf93c934d890df2382e89f0b1 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 10:51:03 +0100 Subject: [PATCH 02/22] Update Intelligence.lua --- Moose Development/Moose/Ops/Intelligence.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Moose Development/Moose/Ops/Intelligence.lua b/Moose Development/Moose/Ops/Intelligence.lua index a78217ac3..6ac130dc1 100644 --- a/Moose Development/Moose/Ops/Intelligence.lua +++ b/Moose Development/Moose/Ops/Intelligence.lua @@ -111,7 +111,7 @@ INTEL = { DetectAccoustic = false, DetectAccousticRadius = 1000, DetectAccousticUnitTypes = {Unit.Category.HELICOPTER}, - DopplerRadar = true, + DopplerRadar = false, DopplerMinAltAGL = 500, DopplerNotchSin = math.sin(math.rad(15)), DopplerMinSpeedMps = 50, @@ -439,6 +439,7 @@ function INTEL:New(DetectionSet, Coalition, Alias) self:SetRejectZones() self:SetCorridorZones() self:SetConflictZones() + self:DopplerRadar = false ------------------------ --- Pseudo Functions --- @@ -1082,7 +1083,7 @@ function INTEL:UpdateIntel() local recce=_recce --Wrapper.Unit#UNIT -- Get detected units. - if self.DopplerRadar then + if self.DopplerRadar == true then self:GetDetectedUnitsDoppler(recce, DetectedUnits, RecceDetecting, self.DetectVisual, self.DetectOptical, self.DetectRadar, self.DetectIRST, self.DetectRWR, self.DetectDLINK) else self:GetDetectedUnits(recce, DetectedUnits, RecceDetecting, self.DetectVisual, self.DetectOptical, self.DetectRadar, self.DetectIRST, self.DetectRWR, self.DetectDLINK) From d77886d586e7ed5956c69fad953dad7ebaf9ee54 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 10:56:54 +0100 Subject: [PATCH 03/22] Update Intelligence.lua --- Moose Development/Moose/Ops/Intelligence.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Moose Development/Moose/Ops/Intelligence.lua b/Moose Development/Moose/Ops/Intelligence.lua index 6ac130dc1..eff429490 100644 --- a/Moose Development/Moose/Ops/Intelligence.lua +++ b/Moose Development/Moose/Ops/Intelligence.lua @@ -319,7 +319,7 @@ INTEL.RCS_CategoryDefault = { } --- --- Reference RCS (m²) for range scaling. Detection range in SetDopplerRadar +-- Reference RCS (m²) for range scaling. Detection range in Set -- is the range at which this reference aircraft is reliably detected. -- @field INTEL.RCS_Reference INTEL.RCS_Reference = 5.0 -- m² @@ -439,7 +439,7 @@ function INTEL:New(DetectionSet, Coalition, Alias) self:SetRejectZones() self:SetCorridorZones() self:SetConflictZones() - self:DopplerRadar = false + self.DopplerRadar = false ------------------------ --- Pseudo Functions --- From 5819c31b5e047b3f96b9a47465f6352a4709c1cb Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:33:56 +0100 Subject: [PATCH 04/22] Update build-includes.yml --- .github/workflows/build-includes.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-includes.yml b/.github/workflows/build-includes.yml index 1cf75c086..3e62bd5bb 100644 --- a/.github/workflows/build-includes.yml +++ b/.github/workflows/build-includes.yml @@ -40,7 +40,7 @@ jobs: # Prepare build environment ######################################################################### - name: Check out repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Prepare build output folders run: | @@ -115,7 +115,7 @@ jobs: # Push to MOOSE_INCLUDE ######################################################################### - name: Checkout MOOSE_INCLUDE - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: ${{ github.repository_owner }}/MOOSE_INCLUDE path: './build/MOOSE_INCLUDE' From b48035fb37f54a79dad12e462e8a2f2a346ee0cc Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:36:18 +0100 Subject: [PATCH 05/22] Update build-includes.yml --- .github/workflows/build-includes.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-includes.yml b/.github/workflows/build-includes.yml index 1cf75c086..3e62bd5bb 100644 --- a/.github/workflows/build-includes.yml +++ b/.github/workflows/build-includes.yml @@ -40,7 +40,7 @@ jobs: # Prepare build environment ######################################################################### - name: Check out repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Prepare build output folders run: | @@ -115,7 +115,7 @@ jobs: # Push to MOOSE_INCLUDE ######################################################################### - name: Checkout MOOSE_INCLUDE - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: ${{ github.repository_owner }}/MOOSE_INCLUDE path: './build/MOOSE_INCLUDE' From c4cb9fb82c14fdb544652b3430c8a6f469d3671a Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:37:24 +0100 Subject: [PATCH 06/22] Update build-docs.yml --- .github/workflows/build-docs.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index f3eba25c2..fecbf12e1 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -40,7 +40,7 @@ jobs: # Prepare build environment ######################################################################### - name: Check out repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Prepare build output folders run: | @@ -48,7 +48,7 @@ jobs: mkdir -p build/doc - name: Checkout FlightControls modified luadocumentor - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: Applevangelist/luadocumentor path: './build/tools/luadocumentor' @@ -129,7 +129,7 @@ jobs: fi - name: Checkout ${{ steps.set_doc_repo.outputs.docrepo }} to folder MOOSE_DOCS - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: ${{ github.repository_owner }}/${{ steps.set_doc_repo.outputs.docrepo }} path: './build/MOOSE_DOCS' From 054e362e8c2dcbb37d3b001988931db5a70f0192 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:39:18 +0100 Subject: [PATCH 07/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 207ef105d..7e2ff091a 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -33,7 +33,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Ruby uses: ruby/setup-ruby@v1 with: @@ -43,7 +43,7 @@ jobs: working-directory: docs/ - name: Setup Pages id: pages - uses: actions/configure-pages@v4 + uses: actions/configure-pages@v5 - name: Build with Jekyll # Outputs to the './_site' directory by default run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" @@ -52,7 +52,7 @@ jobs: working-directory: docs/ - name: Upload artifact # Automatically uploads an artifact from the './_site' directory by default - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: path: docs/_site/ @@ -66,13 +66,13 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 check: runs-on: ubuntu-latest needs: deploy steps: - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 - run: npm install linkinator - 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 From 1811e28fbb3b96b9f3b2aa666fd57953c1529609 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:42:15 +0100 Subject: [PATCH 08/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 7e2ff091a..5fcb0af06 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -66,7 +66,7 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v5 + uses: actions/deploy-pages@v4 check: runs-on: ubuntu-latest From f32b5878edd64837d4ec96848646e29f4b713df5 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:45:46 +0100 Subject: [PATCH 09/22] Update build-docs.yml --- .github/workflows/build-docs.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index f3eba25c2..fecbf12e1 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -40,7 +40,7 @@ jobs: # Prepare build environment ######################################################################### - name: Check out repository code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Prepare build output folders run: | @@ -48,7 +48,7 @@ jobs: mkdir -p build/doc - name: Checkout FlightControls modified luadocumentor - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: Applevangelist/luadocumentor path: './build/tools/luadocumentor' @@ -129,7 +129,7 @@ jobs: fi - name: Checkout ${{ steps.set_doc_repo.outputs.docrepo }} to folder MOOSE_DOCS - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: repository: ${{ github.repository_owner }}/${{ steps.set_doc_repo.outputs.docrepo }} path: './build/MOOSE_DOCS' From a5f4272ab7620a135150ef980540c5b684754fd1 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:47:01 +0100 Subject: [PATCH 10/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 207ef105d..5fcb0af06 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -33,7 +33,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Ruby uses: ruby/setup-ruby@v1 with: @@ -43,7 +43,7 @@ jobs: working-directory: docs/ - name: Setup Pages id: pages - uses: actions/configure-pages@v4 + uses: actions/configure-pages@v5 - name: Build with Jekyll # Outputs to the './_site' directory by default run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" @@ -52,7 +52,7 @@ jobs: working-directory: docs/ - name: Upload artifact # Automatically uploads an artifact from the './_site' directory by default - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: path: docs/_site/ @@ -73,6 +73,6 @@ jobs: needs: deploy steps: - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 - run: npm install linkinator - 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 From 44136b23b10a60e5f5b2d5a59878850c504a3919 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:52:29 +0100 Subject: [PATCH 11/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 5fcb0af06..012e581f2 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - 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 + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI_*" --skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter From 781a2043b748edb012a59a8ecf4443d0bd75aef9 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:55:11 +0100 Subject: [PATCH 12/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 012e581f2..90e3eae6a 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI_*" --skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI.AI*" --skip-files "*CARGO*--skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter From 9e329abcfa4c56101dcec20be81a683431230823 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 11:57:22 +0100 Subject: [PATCH 13/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 90e3eae6a..d229f7d4c 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI.AI*" --skip-files "*CARGO*--skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI.AI*" --skip-files "*CARGO* --skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter From d28477a65578d9d6a30d5ae2cfad43f9abcb7226 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:00:15 +0100 Subject: [PATCH 14/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index d229f7d4c..b8e751060 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI.AI*" --skip-files "*CARGO* --skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI.AI*" --skip-files "*CARGO*" --skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter From bd5816e451700cde1121b7352ddc1862e1742ff9 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:15:13 +0100 Subject: [PATCH 15/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index b8e751060..948944098 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip-files "*AI.AI*" --skip-files "*CARGO*" --skip-files "archive" --retry-errors --retry-errors-count 3 --retry-errors-jitter + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip 'https:\/\/flightcontrol-master\.github\.io\/MOOSE_DOCS_DEVELOP\/Documentation\/(?:AI|Tasking|Cargo)\.[^\/\s]+\.html$' --retry-errors --retry-errors-count 3 --retry-errors-jitter From 80c55a451d2611590ce1c4aee3e7143a8357e7f4 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:17:40 +0100 Subject: [PATCH 16/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 948944098..60bc66749 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip 'https:\/\/flightcontrol-master\.github\.io\/MOOSE_DOCS_DEVELOP\/Documentation\/(?:AI|Tasking|Cargo)\.[^\/\s]+\.html$' --retry-errors --retry-errors-count 3 --retry-errors-jitter + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip 'https:\/\/flightcontrol-master\.github\.io\/MOOSE_DOCS_DEVELOP\/Documentation\/(?:AI|Tasking|Cargo|MissileTrainer)\.[^\/\s]+\.html$' --retry-errors --retry-errors-count 3 --retry-errors-jitter From ff957b72c47fa631b65b3b82d843218d46cfe9d7 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:20:15 +0100 Subject: [PATCH 17/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 60bc66749..05cbd405c 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip 'https:\/\/flightcontrol-master\.github\.io\/MOOSE_DOCS_DEVELOP\/Documentation\/(?:AI|Tasking|Cargo|MissileTrainer)\.[^\/\s]+\.html$' --retry-errors --retry-errors-count 3 --retry-errors-jitter + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip 'https:\/\/flightcontrol-master\.github\.io\/MOOSE_DOCS_DEVELOP\/Documentation\/(?:AI|Tasking|Cargo|MissileTrainer)\.[^\/\s]+\.html$' --status-code "404:skip" --retry-errors --retry-errors-count 3 --retry-errors-jitter From 548a959e7252944ca34e5d84c6132052b9a7a971 Mon Sep 17 00:00:00 2001 From: Thomas <72444570+Applevangelist@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:29:42 +0100 Subject: [PATCH 18/22] Update gh-pages.yml --- .github/workflows/gh-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 5fcb0af06..05cbd405c 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -75,4 +75,4 @@ jobs: - name: Setup Node uses: actions/setup-node@v5 - run: npm install linkinator - - 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 + - run: npx linkinator https://flightcontrol-master.github.io/MOOSE/ --verbosity error --timeout 5000 --recurse --skip "(java.com)" --skip 'https:\/\/flightcontrol-master\.github\.io\/MOOSE_DOCS_DEVELOP\/Documentation\/(?:AI|Tasking|Cargo|MissileTrainer)\.[^\/\s]+\.html$' --status-code "404:skip" --retry-errors --retry-errors-count 3 --retry-errors-jitter From 685c7ac77747ee470b64e01c31b26820214a752a Mon Sep 17 00:00:00 2001 From: smiki Date: Thu, 26 Mar 2026 01:04:02 +0100 Subject: [PATCH 19/22] [ADDED] Unload Troops Restriction Options --- Moose Development/Moose/Ops/CTLD.lua | 49 ++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/Ops/CTLD.lua b/Moose Development/Moose/Ops/CTLD.lua index 3695a62c2..88d2cb95e 100644 --- a/Moose Development/Moose/Ops/CTLD.lua +++ b/Moose Development/Moose/Ops/CTLD.lua @@ -197,6 +197,7 @@ do -- my_ctld.onestepmenu = false -- When set to true, the menu will create Drop and build, Get and load, Pack and remove, Pack and load, Pack. it will be a 1 step solution. -- my_ctld.VehicleMoveFormation = AI.Task.VehicleFormation.VEE -- When a group moves to a MOVE zone, then it takes this formation. Can be a table of formations, which are then randomly chosen. Defaults to "Vee". -- my_ctld.validateAndRepositionUnits = false -- Uses Disposition and other logic to find better ground positions for ground units avoiding trees, water, roads, runways, map scenery, statics and other units in the area. (Default is false) +-- my_ctld.maxUnloadTroopsAllowed = -1 -- Max troops allowed to be unloaded at once. Set to -1 for unlimited (Default). This is a soft limit, that is, if you have more troops in the heli, it will still unload them. Ex. prevent players from spamming troops on the ground and causing performance issues. -- my_ctld.loadSavedCrates = true -- Load back crates (STATIC) from the save file. Useful for mission restart cleanup. (Default is true) -- my_ctld.UseC130LoadAndUnload = false -- When set to true, forces the C-130 player to use the C-130J built system to load the cargo onboard and to unload. (Default is false) -- my_ctld.UseC130DynamicCargoAutoBuild = false -- When true (and UseC130LoadAndUnload is true), C-130 DynamicCargo unload completion is bridged to CTLD engineer-path auto-build. @@ -1028,6 +1029,7 @@ function CTLD:New(Coalition, Prefixes, Alias) self.FixedMaxSpeed = 77 -- 280 kph or 150kn eq 77 mps self.validateAndRepositionUnits = false -- 280 kph or 150kn eq 77 mps + self.maxUnloadTroopsAllowed = -1 -- message suppression self.suppressmessages = false @@ -4994,6 +4996,18 @@ function CTLD:_GetUnitPositions(Coordinate,Radius,Heading,Template) return Positions end +--- Override this function to check if troops can be unloaded. This does not prevent returning troops to base. +-- @param #CTLD self +-- @param Wrapper.Group#GROUP The group trying to unload +-- @param Wrapper.Unit#UNIT The unit trying to unload +-- @param #table LoadedCargo Table of loaded cargo, see #CTLD.LoadedCargo +-- @param #boolean IsGrounded Is the unit on the ground +-- @param #boolean IsHoverUnload Is the unit hovering in parameters for hover unload +-- @return #boolean True if troops can be unloaded, false to prevent unloading +function CTLD:CanUnloadAllTroops(Group, Unit, LoadedCargo, IsGrounded, IsHoverUnload) + return true +end + --- (Internal) Function to unload troops from heli. -- @param #CTLD self -- @param Wrapper.Group#GROUP Group @@ -5029,8 +5043,13 @@ function CTLD:_UnloadTroops(Group, Unit) -- Get what we have loaded local unitname = Unit:GetName() if self.Loaded_Cargo[unitname] and (grounded or hoverunload) then + local loadedcargo = self.Loaded_Cargo[unitname] or {} -- #CTLD.LoadedCargo + if not self:CanUnloadAllTroops(Group, Unit, loadedcargo, grounded, hoverunload) then + -- User can post their own message in the function + return self + end if not droppingatbase or self.debug then - local loadedcargo = self.Loaded_Cargo[unitname] or {} -- #CTLD.LoadedCargo + -- looking for troops local cargotable = loadedcargo.Cargo local deployedTroopsByName = {} @@ -6374,8 +6393,11 @@ function CTLD:_RefreshF10Menus() end end local dropTroopsMenu=MENU_GROUP:New(_group,self.gettext:GetEntry("MENU_DROP_TROOPS",self.locale),toptroops):Refresh() - MENU_GROUP_COMMAND:New(_group,self.gettext:GetEntry("MENU_DROP_ALL_TROOPS",self.locale),dropTroopsMenu,self._UnloadTroops,self,_group,_unit):Refresh() + if self.maxUnloadTroopsAllowed > 0 then + MENU_GROUP_COMMAND:New(_group,self.gettext:GetEntry("MENU_DROP_ALL_TROOPS",self.locale),dropTroopsMenu,self._UnloadTroops,self,_group,_unit):Refresh() + end MENU_GROUP_COMMAND:New(_group,self.gettext:GetEntry("MENU_EXTRACT_TROOPS",self.locale),toptroops,self._ExtractTroops,self,_group,_unit):Refresh() + local uName=_unit:GetName() local loadedData=self.Loaded_Cargo[uName] if loadedData and loadedData.Cargo then @@ -7300,6 +7322,19 @@ function CTLD:_RefreshDropCratesMenu(Group, Unit) end end +--- Function to check if we can unload a single Troop group by ID. +-- @param #CTLD self +-- @param Wrapper.Group#GROUP Group The aircraft group. +-- @param Wrapper.Unit#UNIT Unit The aircraft unit. +-- @param #number ChunkID the Cargo ID +-- @param #number Quantity the quantity to unload +-- @param #table LoadedCargo the current loaded cargo table for this unit +-- @param #boolean IsGrounded whether the unit is currently grounded +-- @param #boolean IsHoverUnload whether the unit is currently in hover-unload state +-- @return #boolean true if we can unload, false if not +function CTLD:CanUnloadSingleTroopByID(Group, Unit, ChunkID, Quantity, LoadedCargo, IsGrounded, IsHoverUnload) + return true +end --- (Internal) Function to unload a single Troop group by ID. -- @param #CTLD self @@ -7338,6 +7373,11 @@ function CTLD:_UnloadSingleTroopByID(Group, Unit, chunkID, qty) local unitName = Unit:GetName() if self.Loaded_Cargo[unitName] and (grounded or hoverunload) then + local loadedcargo = self.Loaded_Cargo[unitName] or {} -- #CTLD.LoadedCargo + if not self:CanUnloadSingleTroopByID(Group, Unit, chunkID, qty, loadedcargo, grounded, hoverunload) then + -- User can post their own message in the function + return self + end if not droppingatbase or self.debug then if not self.TroopsIDToChunk or not self.TroopsIDToChunk[chunkID] then local msg = self.gettext:GetEntry("NO_TROOP_CHUNK",self.locale) @@ -7532,7 +7572,9 @@ function CTLD:_RefreshDropTroopsMenu(Group, Unit) dropTroopsMenu = MENU_GROUP:New(theGroup, self.gettext:GetEntry("MENU_DROP_TROOPS",self.locale), topTroops) topTroops.DropTroopsMenu = dropTroopsMenu end - MENU_GROUP_COMMAND:New(theGroup, self.gettext:GetEntry("MENU_DROP_ALL_TROOPS",self.locale), dropTroopsMenu, self._UnloadTroops, self, theGroup, theUnit) + if self.maxUnloadTroopsAllowed > 0 then + MENU_GROUP_COMMAND:New(theGroup, self.gettext:GetEntry("MENU_DROP_ALL_TROOPS",self.locale), dropTroopsMenu, self._UnloadTroops, self, theGroup, theUnit) + end local loadedData = self.Loaded_Cargo[theUnit:GetName()] if not loadedData or not loadedData.Cargo then return end @@ -7565,6 +7607,7 @@ function CTLD:_RefreshDropTroopsMenu(Group, Unit) else local parentMenu = MENU_GROUP:New(theGroup, label, dropTroopsMenu) for q = 1, count do + if q > self.maxUnloadTroopsAllowed then break end MENU_GROUP_COMMAND:New(theGroup, string.format(self.gettext:GetEntry("MENU_DROP_N_TROOPS",self.locale), q, tName), parentMenu, self._UnloadSingleTroopByID, self, theGroup, theUnit, chunkID, q) --MENU_GROUP_COMMAND:New(theGroup, string.format("Drop (%d) %s", q, tName), parentMenu, self._UnloadSingleTroopByID, self, theGroup, theUnit, chunkID, q) end From 3b4be5396e733d9da3daed928407877df2f5259c Mon Sep 17 00:00:00 2001 From: smiki Date: Thu, 26 Mar 2026 01:13:28 +0100 Subject: [PATCH 20/22] [ADDED] Unload Troops Restriction Options --- Moose Development/Moose/Ops/CTLD.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Moose Development/Moose/Ops/CTLD.lua b/Moose Development/Moose/Ops/CTLD.lua index 88d2cb95e..ccf2c23cb 100644 --- a/Moose Development/Moose/Ops/CTLD.lua +++ b/Moose Development/Moose/Ops/CTLD.lua @@ -6393,7 +6393,7 @@ function CTLD:_RefreshF10Menus() end end local dropTroopsMenu=MENU_GROUP:New(_group,self.gettext:GetEntry("MENU_DROP_TROOPS",self.locale),toptroops):Refresh() - if self.maxUnloadTroopsAllowed > 0 then + if self.maxUnloadTroopsAllowed == -1 then MENU_GROUP_COMMAND:New(_group,self.gettext:GetEntry("MENU_DROP_ALL_TROOPS",self.locale),dropTroopsMenu,self._UnloadTroops,self,_group,_unit):Refresh() end MENU_GROUP_COMMAND:New(_group,self.gettext:GetEntry("MENU_EXTRACT_TROOPS",self.locale),toptroops,self._ExtractTroops,self,_group,_unit):Refresh() @@ -7572,7 +7572,7 @@ function CTLD:_RefreshDropTroopsMenu(Group, Unit) dropTroopsMenu = MENU_GROUP:New(theGroup, self.gettext:GetEntry("MENU_DROP_TROOPS",self.locale), topTroops) topTroops.DropTroopsMenu = dropTroopsMenu end - if self.maxUnloadTroopsAllowed > 0 then + if self.maxUnloadTroopsAllowed == -1 then MENU_GROUP_COMMAND:New(theGroup, self.gettext:GetEntry("MENU_DROP_ALL_TROOPS",self.locale), dropTroopsMenu, self._UnloadTroops, self, theGroup, theUnit) end From fe44e966e06f8b1d49a40f9c556bcb292df90582 Mon Sep 17 00:00:00 2001 From: smiki Date: Thu, 26 Mar 2026 02:43:06 +0100 Subject: [PATCH 21/22] [ADDED] CHIEF:AddLegionRecruitMinRange --- Moose Development/Moose/Ops/Chief.lua | 14 ++++++++++++-- Moose Development/Moose/Ops/Commander.lua | 5 +++-- Moose Development/Moose/Ops/Legion.lua | 14 +++++++++----- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Moose Development/Moose/Ops/Chief.lua b/Moose Development/Moose/Ops/Chief.lua index d88d39955..3a7961778 100644 --- a/Moose Development/Moose/Ops/Chief.lua +++ b/Moose Development/Moose/Ops/Chief.lua @@ -257,6 +257,7 @@ CHIEF = { tacview = false, Nsuccess = 0, Nfailure = 0, + LegionRecruitMinRange = {} } --- Defence condition. @@ -2465,9 +2466,9 @@ function CHIEF:CheckTargetQueue() -- Debug info. self:T2(self.lid..string.format("Recruiting assets for mission type %s [performance=%d] of target %s", mp.MissionType, mp.Performance, target:GetName())) - + local minRange = self.LegionRecruitMinRange[target.category] -- Recruit assets. - local recruited, assets, legions=self.commander:RecruitAssetsForTarget(target, mp.MissionType, NassetsMin, NassetsMax) + local recruited, assets, legions=self.commander:RecruitAssetsForTarget(target, mp.MissionType, NassetsMin, NassetsMax, minRange) if recruited then @@ -3369,6 +3370,15 @@ function CHIEF:CanMission(Mission) return self.commander and self.commander:CanMission(Mission) end +--- Exclude legion recruitment that are below a minimum range to target based on the target category. +--- Ex. Prevent intercepts from spawning too close to the target. +-- @param #CHIEF self +-- @param #string TargetCategory The target category. +-- @param #number MinRange Minimum range in meters. +function CHIEF:AddLegionRecruitMinRange(TargetCategory, MinRange) + self.LegionRecruitMinRange[TargetCategory] = MinRange +end + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/Moose Development/Moose/Ops/Commander.lua b/Moose Development/Moose/Ops/Commander.lua index f4637b281..3db6f3bab 100644 --- a/Moose Development/Moose/Ops/Commander.lua +++ b/Moose Development/Moose/Ops/Commander.lua @@ -1914,10 +1914,11 @@ end -- @param #string MissionType Mission Type. -- @param #number NassetsMin Min number of required assets. -- @param #number NassetsMax Max number of required assets. +-- @param #number (optional) RangeMin Minimum range to target. (Default is 0, which means no minimum range) -- @return #boolean If `true` enough assets could be recruited. -- @return #table Assets that have been recruited from all legions. -- @return #table Legions that have recruited assets. -function COMMANDER:RecruitAssetsForTarget(Target, MissionType, NassetsMin, NassetsMax) +function COMMANDER:RecruitAssetsForTarget(Target, MissionType, NassetsMin, NassetsMax, RangeMin) -- Cohorts. local Cohorts=self:_GetCohorts() @@ -1926,7 +1927,7 @@ function COMMANDER:RecruitAssetsForTarget(Target, MissionType, NassetsMin, Nasse local TargetVec2=Target:GetVec2() -- Recruite assets. - local recruited, assets, legions=LEGION.RecruitCohortAssets(Cohorts, MissionType, nil, NassetsMin, NassetsMax, TargetVec2) + local recruited, assets, legions=LEGION.RecruitCohortAssets(Cohorts, MissionType, nil, NassetsMin, NassetsMax, TargetVec2, nil, nil, nil , nil, nil, nil, nil, nil, nil, nil, RangeMin) return recruited, assets, legions diff --git a/Moose Development/Moose/Ops/Legion.lua b/Moose Development/Moose/Ops/Legion.lua index 9995da864..1576a40d5 100644 --- a/Moose Development/Moose/Ops/Legion.lua +++ b/Moose Development/Moose/Ops/Legion.lua @@ -2577,8 +2577,11 @@ end -- @param #number RefuelSystem Refueling system (boom or probe). -- @param #number CargoWeight Cargo weight [kg]. This checks the cargo bay of the cohort assets and ensures that it is large enough to carry the given cargo weight. -- @param #number MaxWeight Max weight [kg]. This checks whether the cohort asset group is not too heavy. +-- @param RangeMin Min range in meters. (Default is 0, i.e. no minimum range.) -- @return #boolean Returns `true` if given cohort can meet all requirements. -function LEGION._CohortCan(Cohort, MissionType, Categories, Attributes, Properties, WeaponTypes, TargetVec2, RangeMax, RefuelSystem, CargoWeight, MaxWeight) +function LEGION._CohortCan(Cohort, MissionType, Categories, Attributes, Properties, WeaponTypes, TargetVec2, RangeMax, RefuelSystem, CargoWeight, MaxWeight, RangeMin) + + RangeMin = RangeMin or 0 --- Function to check category. local function CheckCategory(_cohort) @@ -2656,8 +2659,8 @@ function LEGION._CohortCan(Cohort, MissionType, Categories, Attributes, Properti -- Is in range? local Rmax=cohort:GetMissionRange(WeaponTypes) local RangeMax = RangeMax or 0 - local InRange=(RangeMax and math.max(RangeMax, Rmax) or Rmax) >= TargetDistance - + local InRange=(RangeMax and math.max(RangeMax, Rmax) or Rmax) >= TargetDistance and TargetDistance > RangeMin + --env.info(string.format("Range TargetDist=%.1f Rmax=%.1f RangeMax=%.1f InRange=%s", TargetDistance, Rmax, RangeMax, tostring(InRange))) return InRange @@ -2803,10 +2806,11 @@ end -- @param #table Attributes Group attributes. See `GROUP.Attribute.` -- @param #table Properties DCS attributes. -- @param #table WeaponTypes Bit of weapon types. +-- @param #number RangeMin Min range in meters. (Default is 0, i.e. no minimum range.) -- @return #boolean If `true` enough assets could be recruited. -- @return #table Recruited assets. **NOTE** that we set the `asset.isReserved=true` flag so it cant be recruited by anyone else. -- @return #table Legions of recruited assets. -function LEGION.RecruitCohortAssets(Cohorts, MissionTypeRecruit, MissionTypeOpt, NreqMin, NreqMax, TargetVec2, Payloads, RangeMax, RefuelSystem, CargoWeight, TotalWeight, MaxWeight, Categories, Attributes, Properties, WeaponTypes) +function LEGION.RecruitCohortAssets(Cohorts, MissionTypeRecruit, MissionTypeOpt, NreqMin, NreqMax, TargetVec2, Payloads, RangeMax, RefuelSystem, CargoWeight, TotalWeight, MaxWeight, Categories, Attributes, Properties, WeaponTypes, RangeMin) -- The recruited assets. local Assets={} @@ -2824,7 +2828,7 @@ function LEGION.RecruitCohortAssets(Cohorts, MissionTypeRecruit, MissionTypeOpt, local cohort=_cohort --Ops.Cohort#COHORT -- Check if cohort can do the mission. - local can=LEGION._CohortCan(cohort, MissionTypeRecruit, Categories, Attributes, Properties, WeaponTypes, TargetVec2, RangeMax, RefuelSystem, CargoWeight, MaxWeight) + local can=LEGION._CohortCan(cohort, MissionTypeRecruit, Categories, Attributes, Properties, WeaponTypes, TargetVec2, RangeMax, RefuelSystem, CargoWeight, MaxWeight, RangeMin) --env.info(string.format("RecruitCohortAssets %s Cohort=%s can=%s", MissionTypeRecruit, cohort:GetName(), tostring(can))) From 36957dce85cb0ca35ade012d62f8ab030b5658e6 Mon Sep 17 00:00:00 2001 From: smiki Date: Thu, 26 Mar 2026 02:46:04 +0100 Subject: [PATCH 22/22] [ADDED] CHIEF:AddLegionRecruitMinRange --- Moose Development/Moose/Ops/CTLD.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Moose Development/Moose/Ops/CTLD.lua b/Moose Development/Moose/Ops/CTLD.lua index ccf2c23cb..c2f15d819 100644 --- a/Moose Development/Moose/Ops/CTLD.lua +++ b/Moose Development/Moose/Ops/CTLD.lua @@ -7322,7 +7322,7 @@ function CTLD:_RefreshDropCratesMenu(Group, Unit) end end ---- Function to check if we can unload a single Troop group by ID. +--- Override this function to check if we can unload a single Troop group by ID. -- @param #CTLD self -- @param Wrapper.Group#GROUP Group The aircraft group. -- @param Wrapper.Unit#UNIT Unit The aircraft unit.