Compare commits

...

32 Commits

Author SHA1 Message Date
Thomas e0a5727ac5 Merge pull request #2615 from FlightControl-Master/master-ng
Merge
2026-07-22 08:05:50 +02:00
Thomas 7587119843 Merge pull request #2614 from leka1986/agent/escort-dynamic-cargo-mantis
Fix Escort follow tasks, Dynamic Cargo tracking, and MANTIS checks
2026-07-22 08:05:10 +02:00
leka1986 a5880b89c1 Fix escort, cargo, and MANTIS behavior 2026-07-22 05:07:21 +02:00
Thomas b33890ff03 Merge pull request #2613 from FlightControl-Master/master-ng
Merge
2026-07-17 07:20:29 +02:00
Thomas 1be2c92a5c Merge pull request #2612 from shaji-Dev/master-ng
CTLD + ENUMS
2026-07-17 07:19:31 +02:00
shafik 4c8a17fe57 Merge remote-tracking branch 'origin/master-ng' into master-ng 2026-07-16 19:58:51 +02:00
shafik 64dea17982 [FIXED] Hardcoded "blue" coalition in SET filters (Doesn't work for redfor in PvP).
[FIXED] Unnecessary new COORDINATE objects that don't hold reference (used only for distance calc).
2026-07-16 19:58:36 +02:00
shafik b1f86c702d [ADDED] F-100 weapons enums 2026-07-16 19:48:35 +02:00
Thomas 1a9540d0d4 Merge pull request #2611 from FlightControl-Master/develop
Develop
2026-07-16 06:45:05 +02:00
Thomas 4e3bf9969b Merge pull request #2610 from FlightControl-Master/master-ng
Merge from master
2026-07-15 19:52:43 +02:00
Thomas b31fb7ece3 Merge pull request #2608 from FlightControl-Master/master-ng
Merge from master
2026-07-15 18:35:50 +02:00
Thomas efa08c1280 Merge pull request #2605 from FlightControl-Master/master-ng
Merge from master
2026-07-12 17:58:28 +02:00
Applevangelist b1b8630d21 Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-28 09:31:16 +02:00
Applevangelist 4ba81cb8bc Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-27 10:57:53 +02:00
Thomas 36c0297344 Merge pull request #2603 from FlightControl-Master/master-ng
Update ScheduleDispatcher.lua
2026-06-26 12:35:03 +02:00
Thomas 6829d75464 Merge pull request #2602 from FlightControl-Master/master-ng
Merge
2026-06-24 06:30:19 +02:00
Applevangelist 4efd71e36a Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-23 12:30:14 +02:00
Applevangelist fed9174bcb Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-21 12:53:35 +02:00
Thomas 9963c737a3 Merge pull request #2599 from FlightControl-Master/master-ng
Merge from master
2026-06-14 17:53:05 +02:00
Applevangelist 73d3ed119c Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-14 16:11:05 +02:00
Applevangelist 23112c9954 Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-14 13:45:08 +02:00
Applevangelist 23c59d906f Merge remote-tracking branch 'origin/develop' into develop 2026-06-14 12:07:31 +02:00
Applevangelist cc62655ffe Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-14 12:07:25 +02:00
Thomas 401e9d9e8e Merge pull request #2597 from FlightControl-Master/master-ng
Merge from master
2026-06-14 09:57:46 +02:00
Applevangelist 9b1a3e4894 Merge remote-tracking branch 'origin/master-ng' into develop
# Conflicts:
#	Moose Development/Moose/Core/Spawn.lua
2026-06-11 17:34:53 +02:00
Thomas 6c32aa6044 Merge pull request #2595 from geofffranks/fix/spawn-air-takeoff-event-args
fix(Spawn): air-spawn takeoff event never fired (wrong arg packing)
2026-06-11 07:59:43 +02:00
Geoff Franks edf70e971c fix(Spawn): air-spawn takeoff event never fired (wrong arg packing)
SPAWN:SpawnAtAirbase scheduled the synthetic takeoff event for air-spawned
groups with:

    self:ScheduleOnce(5, BASE.CreateEventTakeoff,
                      {GroupSpawned, timer.getTime(), UnitSpawned:GetDCSObject()})

BASE:ScheduleOnce(Start, SchedulerFunction, ...) forwards its trailing
arguments to the scheduled function as varargs (it wraps `...` in a table
internally). Wrapping the arguments in a table here made that table argument
number one, so CreateEventTakeoff ran with the {group, time, dcs} table as
`self`. A plain table has no :F(), the very first line errored, and the
S_EVENT_TAKEOFF event was never raised. Air-spawned AI_A2A_DISPATCHER GCI
defenders therefore never activated (observed: zero QRA scrambled with
takeoff = Air).

The sibling call site in SpawnAtParkingSpot is correct because it uses
SCHEDULER:New(nil, fn, {args}, 5), which DOES take a single argument table.
Drop the braces so the args pass as varargs, matching CreateEventTakeoff's
(self=group, EventTime, Initiator) signature.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 21:02:40 -04:00
Thomas 7c5af54473 Merge pull request #2594 from FlightControl-Master/master-ng
Merge from master
2026-06-07 20:04:55 +02:00
Applevangelist 2aa9b91ce5 Merge remote-tracking branch 'origin/master-ng' into develop 2026-06-05 14:25:35 +02:00
Applevangelist fdc19a6898 Merge remote-tracking branch 'origin/develop' into develop 2026-05-24 13:01:26 +02:00
Applevangelist d3ebf023fb Merge remote-tracking branch 'origin/master-ng' into develop 2026-05-24 13:01:22 +02:00
Thomas d40c559d2d Merge pull request #2592 from FlightControl-Master/master-ng
Merge
2026-05-21 20:04:54 +02:00
4 changed files with 120 additions and 57 deletions
+56 -38
View File
@@ -2043,35 +2043,31 @@ do
-- @param #MANTIS self
-- @param #number height
-- @param Core.Point#COORDINATE SamCoordinate
-- @param #table contactSnapshot Contact facts captured once for the current check.
-- @return #table set
function MANTIS:_PreFilterHeight(height,SamCoordinate)
function MANTIS:_PreFilterHeight(height,SamCoordinate,contactSnapshot)
self:T(self.lid.."_PreFilterHeight")
local set = {}
local dlink = self.Detection -- Ops.Intel#INTEL_DLINK
local detectedgroups = dlink:GetContactTable()
for _,_contact in pairs(detectedgroups) do
local contact = _contact -- Ops.Intel#INTEL.Contact
for _,contact in pairs(contactSnapshot) do
local grp = contact.group -- Wrapper.Group#GROUP
if grp:IsAlive() then
local coord = grp:GetCoordinate()
local dist = 0
local include = true
if grp:IsGround() then include = false end
if grp:IsShip() then include = false end -- MANTIS is anti-air: surface contacts are not engageable targets
if grp:GetCoalition() == self.coalition then include = false end
if coord and SamCoordinate and grp:IsHelicopter() then
dist = coord:Get2DDistance(SamCoordinate) or 0
if dist > self.ShoradActDistance then include = false end -- we do not want long range shooting at helos
end
if self.debug then
local text = "Looking at Group: "..grp:GetName() or "N/A"
text = text .. " Include = "..tostring(include)
MESSAGE:New(text,10,"MANTIS"):ToAllIf(self.verbose):ToLog()
end
local grpalt = grp:GetHeight(true)
if grpalt < height and grpalt > 10 and include == true then
table.insert(set,coord)
end
local coord = contact.coordinate
local dist = 0
local include = true
if contact.isGround then include = false end
if contact.isShip then include = false end -- MANTIS is anti-air: surface contacts are not engageable targets
if contact.coalition == self.coalition then include = false end
if coord and SamCoordinate and contact.isHelicopter then
dist = coord:Get2DDistance(SamCoordinate) or 0
if dist > self.ShoradActDistance then include = false end -- we do not want long range shooting at helos
end
if self.debug then
local text = "Looking at Group: "..grp:GetName() or "N/A"
text = text .. " Include = "..tostring(include)
MESSAGE:New(text,10,"MANTIS"):ToAllIf(self.verbose):ToLog()
end
local grpalt = contact.height
if grpalt < height and grpalt > 10 and include == true then
table.insert(set,coord)
end
end
return set
@@ -2084,16 +2080,17 @@ do
-- @param #number radius Radius to check.
-- @param #number height Height to check.
-- @param #boolean dlink Data from DLINK.
-- @param #table contactSnapshot Contact facts captured once for the current check.
-- @return #boolean True if in any zone, else false
-- @return #number Distance Target distance in meters or zero when no object is in zone
function MANTIS:_CheckObjectInZone(dectset, samcoordinate, radius, height, dlink)
function MANTIS:_CheckObjectInZone(dectset, samcoordinate, radius, height, dlink, contactSnapshot)
self:T(self.lid.."_CheckObjectInZone")
-- check if non of the coordinate is in the given defense zone
local rad = radius or self.checkradius
local set = dectset
if dlink then
-- DEBUG
set = self:_PreFilterHeight(height,samcoordinate)
set = self:_PreFilterHeight(height,samcoordinate,contactSnapshot)
end
--self.friendlyset -- Core.Set#SET_GROUP
if self.checkforfriendlies == true and self.friendlyset == nil then
@@ -2732,7 +2729,8 @@ do
group:OptionEngageRange(engagerange) --engagement will be 95% of firing range
if (group:IsGround() or group:IsShip()) and group:IsAlive() then
local grpname = group:GetName()
local grpcoord = group:GetCoordinate()
local grpcoord = group:GetCoord()
if grpcoord then grpcoord.Heading = group:GetHeading() or 0 end
if group:IsShip() and self.NavalPerUnit
and self:_BuildNavalUnitEntries(group, grpname, SAM_Tbl, SAM_Tbl_lg, SAM_Tbl_md, SAM_Tbl_sh, SAM_Tbl_pt, SEAD_Grps) then
self:T(grpname.." handled as per-unit naval group")
@@ -2944,10 +2942,11 @@ function MANTIS:SeadAllowSuppression(targetGroup, targetName, attackerGroup, wea
-- @param #table detset Table of COORDINATES
-- @param #boolean dlink Using DLINK
-- @param #number limit of SAM sites to go active on a contact
-- @param #table contactSnapshot Contact facts captured once for the current check.
-- @return #number instatusred
-- @return #number instatusgreen
-- @return #number activeshorads
function MANTIS:_CheckLoop(samset,detset,dlink,limit)
function MANTIS:_CheckLoop(samset,detset,dlink,limit,contactSnapshot)
self:T(self.lid .. "CheckLoop " .. #detset .. " Coordinates")
local switchedon = 0
local instatusred = 0
@@ -2976,7 +2975,7 @@ function MANTIS:SeadAllowSuppression(targetGroup, targetName, attackerGroup, wea
local samalive = false
if navalparent then samalive = (samunit ~= nil) and samunit:IsAlive() or false
elseif samgroup then samalive = samgroup:IsAlive() or false end
local IsInZone, Distance = self:_CheckObjectInZone(detset, samcoordinate, radius, height, dlink)
local IsInZone, Distance = self:_CheckObjectInZone(detset, samcoordinate, radius, height, dlink, contactSnapshot)
-- Naval surface wake-up: quiet ships activate when enemy surface combatants
-- close within the trigger radius. Jamming has precedence and holds them down.
if (not IsInZone) and self.NavalSurfaceWakeup and self._navalSAMs and self._navalSAMs[name]
@@ -3095,22 +3094,41 @@ function MANTIS:SeadAllowSuppression(targetGroup, targetName, attackerGroup, wea
self:_RefreshSAMTable()
end
self.checkcounter = self.checkcounter + 1
local contactSnapshot = nil
if dlink then
contactSnapshot = {}
for _,contact in pairs(detection:GetContactTable()) do
local grp = contact.group -- Wrapper.Group#GROUP
if grp:IsAlive() then
local coord = grp:GetCoord()
contactSnapshot[#contactSnapshot + 1] = {
group = grp,
coordinate = coord,
height = grp:GetHeight(true),
coalition = grp:GetCoalition(),
isGround = grp:IsGround(),
isShip = grp:IsShip(),
isHelicopter = grp:IsHelicopter(),
}
end
end
end
local instatusred = 0
local instatusgreen = 0
local activeshorads = 0
-- switch SAMs on/off if (n)one of the detected groups is inside their reach
if self.automode then
local samset = self.SAM_Table_Long -- table of i.1=names, i.2=coordinates, i.3=firing range, i.4=firing height
local instatusredl, instatusgreenl, activeshoradsl = self:_CheckLoop(samset,detset,dlink,self.maxlongrange)
local instatusredl, instatusgreenl, activeshoradsl = self:_CheckLoop(samset,detset,dlink,self.maxlongrange,contactSnapshot)
local samset = self.SAM_Table_Medium -- table of i.1=names, i.2=coordinates, i.3=firing range, i.4=firing height
local instatusredm, instatusgreenm, activeshoradsm = self:_CheckLoop(samset,detset,dlink,self.maxmidrange)
local instatusredm, instatusgreenm, activeshoradsm = self:_CheckLoop(samset,detset,dlink,self.maxmidrange,contactSnapshot)
local samset = self.SAM_Table_Short -- table of i.1=names, i.2=coordinates, i.3=firing range, i.4=firing height
local instatusreds, instatusgreens, activeshoradss = self:_CheckLoop(samset,detset,dlink,self.maxshortrange)
local instatusreds, instatusgreens, activeshoradss = self:_CheckLoop(samset,detset,dlink,self.maxshortrange,contactSnapshot)
local samset = self.SAM_Table_PointDef -- table of i.1=names, i.2=coordinates, i.3=firing range, i.4=firing height
local instatusred, instatusgreen, activeshorads = self:_CheckLoop(samset,detset,dlink,self.maxpointdefrange)
local instatusred, instatusgreen, activeshorads = self:_CheckLoop(samset,detset,dlink,self.maxpointdefrange,contactSnapshot)
else
local samset = self:_GetSAMTable() -- table of i.1=names, i.2=coordinates, i.3=firing range, i.4=firing height
local instatusred, instatusgreen, activeshorads = self:_CheckLoop(samset,detset,dlink,self.maxclassic)
local instatusred, instatusgreen, activeshorads = self:_CheckLoop(samset,detset,dlink,self.maxclassic,contactSnapshot)
end
local function GetReport()
@@ -4090,8 +4108,8 @@ function MANTIS:SeadAllowSuppression(targetGroup, targetName, attackerGroup, wea
end
--- [Internal] Override: _CheckLoop with jammer suppression.
function MANTIS:_CheckLoop(samset, detset, dlink, limit)
local r, g, s = self:_CheckLoopOriginal(samset, detset, dlink, limit)
function MANTIS:_CheckLoop(samset, detset, dlink, limit, contactSnapshot)
local r, g, s = self:_CheckLoopOriginal(samset, detset, dlink, limit, contactSnapshot)
if self._jammerEnabled and self._jammedSAMs then
for _, _data in pairs(samset) do
local name = _data[1]
@@ -4355,4 +4373,4 @@ end
-----------------------------------------------------------------------
-- MANTIS end
-----------------------------------------------------------------------
-----------------------------------------------------------------------
+7 -1
View File
@@ -6466,7 +6466,13 @@ function AUFTRAG:GetDCSMissionTask(MissionGroup)
-- ESCORT Mission --
--------------------
local DCStask=CONTROLLABLE.TaskEscort(nil, self.engageTarget:GetObject(), self.escortVec3, nil, self.engageMaxDistance, self.engageTargetTypes)
local FollowGroup=self.engageTarget:GetObject()
local DCStask=nil
if next(self.engageTargetTypes)==nil then
DCStask=FollowGroup:TaskFollow(FollowGroup, self.escortVec3)
else
DCStask=CONTROLLABLE.TaskEscort(nil, FollowGroup, self.escortVec3, nil, self.engageMaxDistance, self.engageTargetTypes)
end
table.insert(DCStasks, DCStask)
+16 -18
View File
@@ -2748,16 +2748,14 @@ function CTLD:_EventHandler(EventData)
loaded = self.Loaded_Cargo[unitname] -- #CTLD.LoadedCargo
loaded.Cratesloaded = loaded.Cratesloaded - 1
if loaded.Cratesloaded < 0 then loaded.Cratesloaded = 0 end
-- TODO zap cargo from list
local Loaded = {}
for _,_item in pairs (loaded.Cargo or {}) do
self:T(self.lid.."UNLOAD checking: ".._item:GetName())
self:T(self.lid.."UNLOAD state: ".. tostring(_item:WasDropped()))
if _item and _item:GetType() == CTLD_CARGO.Enum.GCLOADABLE and event.IniDynamicCargoName and event.IniDynamicCargoName ~= _item:GetName() and not _item:WasDropped() then
local unloadedItem = _item and _item:GetType() == CTLD_CARGO.Enum.GCLOADABLE and event.IniDynamicCargoName and event.IniDynamicCargoName == _item:GetName()
if not unloadedItem then
table.insert(Loaded,_item)
else
table.insert(Loaded,_item)
end
end
end
loaded.Cargo = nil
loaded.Cargo = Loaded
@@ -3747,16 +3745,16 @@ function CTLD:_C130GetUnits(Group, Unit, Name)
return self
end
local coord = Unit:GetCoordinate() or Group:GetCoordinate()
local coord = Unit:GetCoord() or Group:GetCoord()
local capabilities = self:_GetUnitCapabilities(Unit)
local innerDist = (capabilities.length and capabilities.length/2) or 15
local maxUnitsNearby = self.maxUnitsNearby or 3
local searchRadius = self.UnitDistance or 90
local checkZone = ZONE_RADIUS:New("CTLD_C130UnitsZone",coord:GetVec2(),searchRadius,false)
local nearGroups = SET_GROUP:New():FilterCoalitions("blue"):FilterZones({checkZone}):FilterOnce()
local nearGroups = SET_GROUP:New():FilterCoalitions(self.coalitiontxt):FilterZones({checkZone}):FilterOnce()
local nearbyCount = 0
for _,gr in pairs(nearGroups.Set) do
local gc = gr:GetCoordinate()
local gc = gr:GetCoord()
if gc then
local dist = coord:Get2DDistance(gc)
if dist > innerDist then
@@ -3925,7 +3923,7 @@ function CTLD:_GetCrates(Group, Unit, Cargo, number, drop, pack, quiet, suppress
-- Check cargo location if available
local location = Cargo:GetLocation()
if location then
local unitcoord = Unit:GetCoordinate() or Group:GetCoordinate()
local unitcoord = Unit:GetCoord() or Group:GetCoord()
if unitcoord then
if not location:IsCoordinateInZone(unitcoord) then
-- no we're not at the right spot
@@ -4136,8 +4134,8 @@ function CTLD:_GetCrates(Group, Unit, Cargo, number, drop, pack, quiet, suppress
if type(ship) == "string" then
self:T("Spawning on ship "..ship)
local Ship = UNIT:FindByName(ship)
local shipcoord = Ship:GetCoordinate()
local unitcoord = Unit:GetCoordinate()
local shipcoord = Ship:GetCoord()
local unitcoord = Unit:GetCoord()
local dist = shipcoord:Get2DDistance(unitcoord)
dist = dist - (20 + math.random(1, 10))
local halfwidth = (width or 20) / 2
@@ -4395,11 +4393,11 @@ function CTLD:_C130RemoveUnitsNearby(_group,_unit)
local innerDist = (capabilities.length and capabilities.length/2) or 15
local finddist = self.PackDistance or (self.CrateDistance or 35)
local zone = ZONE_RADIUS:New("CTLD_C130RemoveZone",location:GetVec2(),finddist,false)
local nearestGroups = SET_GROUP:New():FilterCoalitions("blue"):FilterZones({zone}):FilterOnce()
local nearestGroups = SET_GROUP:New():FilterCoalitions(self.coalitiontxt):FilterZones({zone}):FilterOnce()
local removedAny = false
local removedTable = {}
for _, gr in pairs(nearestGroups.Set) do
local gc = gr:GetCoordinate()
local gc = gr:GetCoord()
if gc then
local dist = location:Get2DDistance(gc)
if dist > innerDist then
@@ -5683,18 +5681,18 @@ end
-- @return #number Number
function CTLD:_FindPackableGroupsNearby(Group, Unit)
self:T(self.lid .. " _FindPackableGroupsNearby")
local location = Group:GetCoordinate()
local location = Group:GetCoord()
if not location then return {}, 0 end
local capabilities = self:_GetUnitCapabilities(Unit)
local innerDist = (capabilities.length and capabilities.length/2) or 15
local finddist = self.PackDistance or (self.CrateDistance or 35)
local zone = ZONE_RADIUS:New("CTLD_PackableZone", location:GetVec2(), finddist, false)
local nearestGroups = SET_GROUP:New():FilterCoalitions("blue"):FilterZones({zone}):FilterOnce()
local nearestGroups = SET_GROUP:New():FilterCoalitions(self.coalitiontxt):FilterZones({zone}):FilterOnce()
local packable = {}
for _, gr in pairs(nearestGroups.Set) do
if gr and gr:GetName() ~= Group:GetName() then
local gc = gr:GetCoordinate()
local gc = gr:GetCoord()
if gc then
local dist = location:Get2DDistance(gc)
if dist > innerDist and dist <= finddist then
@@ -9011,7 +9009,7 @@ function CTLD:IsUnitInZone(Unit,Zonetype)
local zoneret = nil
local zonewret = nil
local zonenameret = nil
local unitcoord = Unit:GetCoordinate()
local unitcoord = Unit:GetCoord()
if not unitcoord then
if Zonetype == CTLD.CargoZoneType.SHIP then
return false, nil, nil, 1000000, nil
@@ -9032,7 +9030,7 @@ function CTLD:IsUnitInZone(Unit,Zonetype)
self:T("Checking Type Ship: "..zonename)
local ZoneUNIT = UNIT:FindByName(zonename)
if not ZoneUNIT then return false end
zonecoord = ZoneUNIT:GetCoordinate()
zonecoord = ZoneUNIT:GetCoord()
zoneradius = czone.shiplength
zonewidth = czone.shipwidth
zone = ZONE_UNIT:New( ZoneUNIT:GetName(), ZoneUNIT, zoneradius/2)
@@ -2126,6 +2126,47 @@ ENUMS.Storage.weapons.containers.UH60_GAU19_RIGHT = 'weapons.containers.{UH60_GA
ENUMS.Storage.weapons.containers.UH60_M230_RIGHT = 'weapons.containers.{UH60_M230_RIGHT}'
ENUMS.Storage.weapons.containers.UH60L_M2_GUNNER = 'weapons.containers.{UH60L_M2_GUNNER}'
ENUMS.Storage.weapons.adapters.GD_F100_SUU_13 = 'weapons.adapters.GD_F100_SUU-13'
ENUMS.Storage.weapons.containers.GPU_5_POD = 'weapons.containers.{GPU_5_POD}'
ENUMS.Storage.weapons.bombs.BOLT_117 = 'weapons.bombs.BOLT-117'
ENUMS.Storage.weapons.shells.F100_M39_20_TP_T = 'weapons.shells.F100_M39_20_TP_T'
ENUMS.Storage.weapons.gunmounts.M_39_F_100 = 'weapons.gunmounts.M-39 F-100'
ENUMS.Storage.weapons.droptanks.GD_F100_TANK_275_L = 'weapons.droptanks.GD_F100_TANK_275_L'
ENUMS.Storage.weapons.bombs.BLU_4B_R_GROUP_R = 'weapons.bombs.BLU-4B_R_GROUP_R'
ENUMS.Storage.weapons.containers.F100_CAMERA_P2 = 'weapons.containers.F100_CAMERA_P2'
ENUMS.Storage.weapons.containers.HB_ORD_SUU_7 = 'weapons.containers.HB_ORD_SUU_7'
ENUMS.Storage.weapons.adapters.SidewinderPylon = 'weapons.adapters.SidewinderPylon'
ENUMS.Storage.weapons.adapters.apu_470 = 'weapons.adapters.apu_470'
ENUMS.Storage.weapons.droptanks.GD_F100_TANK_335_R = 'weapons.droptanks.GD_F100_TANK_335_R'
ENUMS.Storage.weapons.bombs.BLU_3B_R_GROUP_R = 'weapons.bombs.BLU-3B_R_GROUP_R'
ENUMS.Storage.weapons.droptanks.GD_F100_TANK_335_L = 'weapons.droptanks.GD_F100_TANK_335_L'
ENUMS.Storage.weapons.adapters.mbdz_u2t = 'weapons.adapters.mbdz_u2t'
ENUMS.Storage.weapons.containers.ZellRocket = 'weapons.containers.ZellRocket'
ENUMS.Storage.weapons.containers.apu_73 = 'weapons.containers.apu-73'
ENUMS.Storage.weapons.gunmounts.GAU_13 = 'weapons.gunmounts.GAU-13'
ENUMS.Storage.weapons.shells.F100_M39_20_TP = 'weapons.shells.F100_M39_20_TP'
ENUMS.Storage.weapons.shells.F100_M39_20_API = 'weapons.shells.F100_M39_20_API'
ENUMS.Storage.weapons.adapters.bdz_umk2b = 'weapons.adapters.bdz_umk2b'
ENUMS.Storage.weapons.droptanks.GD_F100_TANK_450 = 'weapons.droptanks.GD_F100_TANK_450'
ENUMS.Storage.weapons.droptanks.GD_F100_TANK_275_R = 'weapons.droptanks.GD_F100_TANK_275_R'
ENUMS.Storage.weapons.bombs.BLU_18_B_GROUP = 'weapons.bombs.BLU-18/B_GROUP'
ENUMS.Storage.weapons.containers.ZELL_Booster = 'weapons.containers.ZELL Booster'
ENUMS.Storage.weapons.adapters.apu_60 = 'weapons.adapters.apu_60'
ENUMS.Storage.weapons.gunmounts.GPU_5_POD = 'weapons.gunmounts.{GPU_5_POD}'
ENUMS.Storage.weapons.containers.F100_CAMERA_KA71A = 'weapons.containers.F100_CAMERA_KA71A'
ENUMS.Storage.weapons.bombs.BLU_3_R_GROUP_R = 'weapons.bombs.BLU-3_R_GROUP_R'
ENUMS.Storage.weapons.shells.F100_M39_20_HEI = 'weapons.shells.F100_M39_20_HEI'
ENUMS.Storage.weapons.droptanks.GD_F100_TANK_200 = 'weapons.droptanks.GD_F100_TANK_200'
ENUMS.Storage.weapons.adapters.apu_73 = 'weapons.adapters.apu-73'
ENUMS.Storage.weapons.gunmounts.AKAN_NO_TRC = 'weapons.gunmounts.AKAN_NO_TRC'
ENUMS.Storage.weapons.gunmounts.AKAN = 'weapons.gunmounts.AKAN'
ENUMS.Storage.weapons.shells.F100_M39_20_HEI_T = 'weapons.shells.F100_M39_20_HEI_T'
ENUMS.Storage.weapons.shells.F100_M39_20_API_T = 'weapons.shells.F100_M39_20_API_T'
ENUMS.Storage.weapons.containers.GD_F100_STRIKE_CAMERA = 'weapons.containers.GD_F100_STRIKE_CAMERA'
ENUMS.Storage.weapons.bombs.BLU_49_B = 'weapons.bombs.BLU-49/B'
ENUMS.Storage.weapons.containers.GD_F100_SUU_13 = 'weapons.containers.GD_F100_SUU-13'
---
-- @type ENUMS.FARPType
-- @field #string FARP