Cleaned out some files from Polar Shield that we don't need anymore.

This commit is contained in:
iTracerFacer 2025-10-09 20:54:16 -05:00
parent a2786f2325
commit fff98e1670
6 changed files with 0 additions and 1889 deletions

View File

@ -1,126 +0,0 @@
-- Simple AFAC Test Script
-- This is a minimal version to test if scripts load at all
-- Test if script loads
trigger.action.outText("TEST SCRIPT: Loading AFAC test...", 15)
env.info("AFAC TEST: Script is loading")
-- Basic data structure
AFAC = {
pilots = {},
debug = true
}
-- Simple logging
function AFAC.log(message)
env.info("AFAC TEST: " .. tostring(message))
trigger.action.outText("AFAC: " .. tostring(message), 5)
end
AFAC.log("Test script initialized")
-- Simple aircraft check
AFAC.afacTypes = {
"UH-1H"
}
function AFAC.isAFAC(unit)
if not unit then return false end
local unitType = unit:getTypeName()
AFAC.log("Checking aircraft type: " .. unitType)
for _, afacType in ipairs(AFAC.afacTypes) do
if unitType == afacType then
AFAC.log("MATCH FOUND: " .. unitType .. " is AFAC!")
return true
end
end
return false
end
function AFAC.addPilot(unit)
local unitName = unit:getName()
AFAC.log("Adding AFAC pilot: " .. unitName)
local groupId = unit:getGroup():getID()
trigger.action.outTextForGroup(groupId, "AFAC ACTIVE: " .. unit:getTypeName(), 20)
-- Add simple F10 menu
local mainMenu = missionCommands.addSubMenuForGroup(groupId, "AFAC TEST")
missionCommands.addCommandForGroup(groupId, "Test Command", mainMenu, function()
trigger.action.outTextForGroup(groupId, "AFAC Test Menu Works!", 10)
end)
AFAC.pilots[unitName] = unit
end
-- Event handler
AFAC.EventHandler = {}
function AFAC.EventHandler:onEvent(event)
AFAC.log("Event received: " .. tostring(event.id))
if event.id == world.event.S_EVENT_PLAYER_ENTER_UNIT then
AFAC.log("Player entered unit event")
local unit = event.initiator
if unit then
AFAC.log("Unit type: " .. unit:getTypeName())
if AFAC.isAFAC(unit) then
AFAC.log("AFAC detected, adding pilot")
AFAC.addPilot(unit)
end
end
end
if event.id == world.event.S_EVENT_BIRTH then
AFAC.log("Birth event")
local unit = event.initiator
if unit and Object.getCategory(unit) == Object.Category.UNIT then
local objDesc = unit:getDesc()
if objDesc.category == Unit.Category.AIRPLANE or objDesc.category == Unit.Category.HELICOPTER then
AFAC.log("Aircraft born: " .. unit:getTypeName())
if AFAC.isAFAC(unit) then
timer.scheduleFunction(function(args)
if args[1]:isActive() then
AFAC.addPilot(args[1])
end
end, {unit}, timer.getTime() + 2)
end
end
end
end
end
-- Add event handler
world.addEventHandler(AFAC.EventHandler)
AFAC.log("Event handler added")
-- Check existing units
timer.scheduleFunction(function()
AFAC.log("Checking existing units...")
for coalitionId = 1, 2 do
local heliGroups = coalition.getGroups(coalitionId, Group.Category.HELICOPTER)
AFAC.log("Found " .. #heliGroups .. " helicopter groups for coalition " .. coalitionId)
for _, group in ipairs(heliGroups) do
local units = group:getUnits()
if units then
for _, unit in ipairs(units) do
if unit and unit:isActive() then
AFAC.log("Found helicopter: " .. unit:getTypeName())
if AFAC.isAFAC(unit) and unit:getPlayerName() then
AFAC.log("Found player AFAC: " .. unit:getName())
AFAC.addPilot(unit)
end
end
end
end
end
end
end, nil, timer.getTime() + 3)
AFAC.log("AFAC Test Script loaded successfully!")
trigger.action.outText("AFAC Test Script loaded!", 10)

File diff suppressed because it is too large Load Diff

View File

@ -1,304 +0,0 @@
-- TADC Diagnostic Script
-- This script will run diagnostics on the TADC system to identify why no aircraft are launching
env.info("=== TADC DIAGNOSTIC SCRIPT STARTING ===")
-- Test 1: Check if zones exist and are properly defined
local function testZones()
env.info("=== ZONE DIAGNOSTIC ===")
local redBorderGroup = GROUP:FindByName("RED BORDER")
local heloBorderGroup = GROUP:FindByName("HELO BORDER")
if redBorderGroup then
env.info("✓ RED BORDER group found")
local redZone = ZONE_POLYGON:New("RED BORDER TEST", redBorderGroup)
if redZone then
env.info("✓ RED BORDER zone created successfully")
local coord = redZone:GetCoordinate()
if coord then
env.info("✓ RED BORDER zone coordinate: " .. coord:ToStringLLDMS())
else
env.info("✗ RED BORDER zone has no coordinate")
end
else
env.info("✗ Failed to create RED BORDER zone")
end
else
env.info("✗ RED BORDER group NOT found - this is likely the problem!")
end
if heloBorderGroup then
env.info("✓ HELO BORDER group found")
local heloZone = ZONE_POLYGON:New("HELO BORDER TEST", heloBorderGroup)
if heloZone then
env.info("✓ HELO BORDER zone created successfully")
local coord = heloZone:GetCoordinate()
if coord then
env.info("✓ HELO BORDER zone coordinate: " .. coord:ToStringLLDMS())
else
env.info("✗ HELO BORDER zone has no coordinate")
end
else
env.info("✗ Failed to create HELO BORDER zone")
end
else
env.info("✗ HELO BORDER group NOT found - this may be the problem!")
end
end
-- Test 2: Check if Blue aircraft exist on the map
local function testBlueAircraft()
env.info("=== BLUE AIRCRAFT DIAGNOSTIC ===")
local BlueAircraft = SET_GROUP:New():FilterCoalitions("blue"):FilterCategoryAirplane():FilterStart()
local blueCount = BlueAircraft:Count()
env.info("Total Blue aircraft on map: " .. blueCount)
if blueCount > 0 then
env.info("Blue aircraft found:")
BlueAircraft:ForEach(function(blueGroup)
if blueGroup and blueGroup:IsAlive() then
local coord = blueGroup:GetCoordinate()
local name = blueGroup:GetName()
if coord then
env.info(" - " .. name .. " at " .. coord:ToStringLLDMS())
else
env.info(" - " .. name .. " (no coordinate)")
end
end
end)
else
env.info("✗ NO BLUE AIRCRAFT FOUND - this is likely why no intercepts are launching!")
env.info("SOLUTION: Add Blue coalition aircraft to the mission or spawn some for testing")
end
end
-- Test 3: Check if Blue aircraft are in the detection zones
local function testBlueInZones()
env.info("=== BLUE AIRCRAFT IN ZONES DIAGNOSTIC ===")
local redBorderGroup = GROUP:FindByName("RED BORDER")
local heloBorderGroup = GROUP:FindByName("HELO BORDER")
if not redBorderGroup or not heloBorderGroup then
env.info("✗ Cannot test zones - border groups missing")
return
end
local redZone = ZONE_POLYGON:New("RED BORDER TEST", redBorderGroup)
local heloZone = ZONE_POLYGON:New("HELO BORDER TEST", heloBorderGroup)
local BlueAircraft = SET_GROUP:New():FilterCoalitions("blue"):FilterCategoryAirplane():FilterStart()
local blueCount = BlueAircraft:Count()
if blueCount == 0 then
env.info("✗ No Blue aircraft to test zone containment")
return
end
local inRedZone = 0
local inHeloZone = 0
BlueAircraft:ForEach(function(blueGroup)
if blueGroup and blueGroup:IsAlive() then
local coord = blueGroup:GetCoordinate()
local name = blueGroup:GetName()
if coord then
local inRed = redZone and redZone:IsCoordinateInZone(coord)
local inHelo = heloZone and heloZone:IsCoordinateInZone(coord)
if inRed then
inRedZone = inRedZone + 1
env.info("" .. name .. " is in RED BORDER zone")
elseif inHelo then
inHeloZone = inHeloZone + 1
env.info("" .. name .. " is in HELO BORDER zone")
else
env.info(" - " .. name .. " is NOT in any border zone")
end
end
end
end)
env.info("Summary: " .. inRedZone .. " in RED zone, " .. inHeloZone .. " in HELO zone")
if inRedZone == 0 and inHeloZone == 0 then
env.info("✗ NO BLUE AIRCRAFT IN DETECTION ZONES - this is why no intercepts are launching!")
env.info("SOLUTION: Move Blue aircraft into the border zones or expand the zone definitions")
end
end
-- Test 4: Check squadron templates
local function testSquadronTemplates()
env.info("=== SQUADRON TEMPLATE DIAGNOSTIC ===")
local squadronTemplates = {
"FIGHTER_SWEEP_RED_Kilpyavr",
"FIGHTER_SWEEP_RED_Severomorsk-1",
"FIGHTER_SWEEP_RED_Severomorsk-3",
"FIGHTER_SWEEP_RED_Murmansk",
"FIGHTER_SWEEP_RED_Monchegorsk",
"FIGHTER_SWEEP_RED_Olenya",
"HELO_SWEEP_RED_Afrikanda"
}
local found = 0
local total = #squadronTemplates
for _, templateName in pairs(squadronTemplates) do
local template = GROUP:FindByName(templateName)
if template then
env.info("✓ Found template: " .. templateName)
-- Check if template is alive (should NOT be for Late Activation)
local isAlive = template:IsAlive()
if isAlive then
env.info(" ⚠ WARNING: Template is ALIVE - should be set to Late Activation")
else
env.info(" ✓ Template correctly set to Late Activation")
end
-- Check coalition
local coalition = template:GetCoalition()
if coalition == 1 then
env.info(" ✓ Template is Red coalition")
else
env.info(" ✗ Template is NOT Red coalition (coalition=" .. coalition .. ")")
end
found = found + 1
else
env.info("✗ Missing template: " .. templateName)
end
end
env.info("Squadron templates found: " .. found .. "/" .. total)
if found == 0 then
env.info("✗ NO SQUADRON TEMPLATES FOUND - this is why no aircraft can launch!")
env.info("SOLUTION: Create squadron groups in Mission Editor with the correct names and set to Late Activation")
end
end
-- Test 5: Check airbases
local function testAirbases()
env.info("=== AIRBASE DIAGNOSTIC ===")
local airbases = {
"Kilpyavr", "Severomorsk-1", "Severomorsk-3",
"Murmansk International", "Monchegorsk", "Olenya", "Afrikanda"
}
local found = 0
local redBases = 0
for _, airbaseName in pairs(airbases) do
local airbase = AIRBASE:FindByName(airbaseName)
if airbase then
env.info("✓ Found airbase: " .. airbaseName)
local coalition = airbase:GetCoalition()
local coalitionName = coalition == 1 and "Red" or (coalition == 2 and "Blue" or "Neutral")
env.info(" Coalition: " .. coalitionName)
if coalition == 1 then
redBases = redBases + 1
end
found = found + 1
else
env.info("✗ Airbase not found: " .. airbaseName)
end
end
env.info("Airbases found: " .. found .. "/" .. #airbases .. " (Red: " .. redBases .. ")")
end
-- Test 6: Manual threat detection test
local function testThreatDetection()
env.info("=== THREAT DETECTION TEST ===")
-- Try to manually detect threats
local BlueAircraft = SET_GROUP:New():FilterCoalitions("blue"):FilterCategoryAirplane():FilterStart()
local blueCount = BlueAircraft:Count()
env.info("Manual threat scan - found " .. blueCount .. " blue aircraft")
if blueCount > 0 then
local redBorderGroup = GROUP:FindByName("RED BORDER")
local heloBorderGroup = GROUP:FindByName("HELO BORDER")
if redBorderGroup and heloBorderGroup then
local redZone = ZONE_POLYGON:New("RED BORDER TEST", redBorderGroup)
local heloZone = ZONE_POLYGON:New("HELO BORDER TEST", heloBorderGroup)
local threatsInZones = 0
BlueAircraft:ForEach(function(blueGroup)
if blueGroup and blueGroup:IsAlive() then
local coord = blueGroup:GetCoordinate()
local name = blueGroup:GetName()
if coord then
local inRed = redZone:IsCoordinateInZone(coord)
local inHelo = heloZone:IsCoordinateInZone(coord)
if inRed or inHelo then
threatsInZones = threatsInZones + 1
local classification = "UNKNOWN"
local category = blueGroup:GetCategory()
local typeName = blueGroup:GetTypeName() or "Unknown"
if category == Group.Category.AIRPLANE then
if string.find(typeName:upper(), "B-") or string.find(typeName:upper(), "BOMBER") then
classification = "BOMBER"
elseif string.find(typeName:upper(), "A-") or string.find(typeName:upper(), "ATTACK") then
classification = "ATTACK"
else
classification = "FIGHTER"
end
elseif category == Group.Category.HELICOPTER then
classification = "HELICOPTER"
end
env.info(" THREAT DETECTED: " .. name .. " (" .. classification .. ") in " .. (inRed and "RED BORDER" or "HELO BORDER"))
end
end
end
end)
if threatsInZones == 0 then
env.info("✗ No threats detected in border zones")
else
env.info("" .. threatsInZones .. " threats detected in border zones")
end
end
end
end
-- Run all diagnostic tests
local function runAllDiagnostics()
env.info("Starting comprehensive TADC diagnostic...")
testZones()
testBlueAircraft()
testBlueInZones()
testSquadronTemplates()
testAirbases()
testThreatDetection()
env.info("=== DIAGNOSTIC COMPLETE ===")
env.info("Check the log above for any ✗ (failed) items - these are likely the cause of the problem")
end
-- Schedule the diagnostic to run after a delay
SCHEDULER:New(nil, runAllDiagnostics, {}, 3)
-- Also create a repeating diagnostic every 60 seconds for ongoing monitoring
SCHEDULER:New(nil, function()
env.info("=== PERIODIC THREAT CHECK ===")
testBlueInZones()
end, {}, 10, 60) -- Start after 10 seconds, repeat every 60 seconds

View File

@ -1,164 +0,0 @@
-- TADC Manual Launch Test
-- This script will attempt to manually launch one aircraft to test if the spawn system works
env.info("=== TADC MANUAL LAUNCH TEST ===")
-- Wait a few seconds for MOOSE to initialize, then try a manual launch
SCHEDULER:New(nil, function()
env.info("Attempting manual aircraft launch...")
-- Test configuration - using the first squadron
local testConfig = {
templateName = "FIGHTER_SWEEP_RED_Severomorsk-1",
displayName = "Severomorsk-1 TEST",
airbaseName = "Severomorsk-1",
aircraft = 1,
skill = AI.Skill.GOOD,
altitude = 20000,
speed = 350,
patrolTime = 25,
type = "FIGHTER"
}
-- Manual launch function (simplified version)
local function manualLaunch(config)
env.info("=== MANUAL LAUNCH ATTEMPT ===")
env.info("Template: " .. config.templateName)
env.info("Airbase: " .. config.airbaseName)
local success, errorMsg = pcall(function()
-- Check if template exists
local templateGroup = GROUP:FindByName(config.templateName)
if not templateGroup then
env.info("✗ CRITICAL: Template group not found: " .. config.templateName)
env.info("DIAGNOSIS: This template does not exist in the mission!")
env.info("SOLUTION: Create a group named '" .. config.templateName .. "' in Mission Editor")
return
end
env.info("✓ Template group found: " .. config.templateName)
-- Check template properties
local coalition = templateGroup:GetCoalition()
local isAlive = templateGroup:IsAlive()
env.info("Template coalition: " .. (coalition == 1 and "Red" or (coalition == 2 and "Blue" or "Neutral")))
env.info("Template alive: " .. tostring(isAlive))
if coalition ~= 1 then
env.info("✗ CRITICAL: Template is not Red coalition!")
env.info("SOLUTION: Set '" .. config.templateName .. "' to Red coalition in Mission Editor")
return
end
if isAlive then
env.info("⚠ WARNING: Template is alive - Late Activation may not be set")
env.info("RECOMMENDATION: Set '" .. config.templateName .. "' to Late Activation in Mission Editor")
end
-- Check airbase
local airbaseObj = AIRBASE:FindByName(config.airbaseName)
if not airbaseObj then
env.info("✗ CRITICAL: Airbase not found: " .. config.airbaseName)
env.info("SOLUTION: Check airbase name spelling or use a different airbase")
return
end
env.info("✓ Airbase found: " .. config.airbaseName)
local airbaseCoalition = airbaseObj:GetCoalition()
env.info("Airbase coalition: " .. (airbaseCoalition == 1 and "Red" or (airbaseCoalition == 2 and "Blue" or "Neutral")))
-- Create SPAWN object
env.info("Creating SPAWN object...")
local spawner = SPAWN:New(config.templateName)
-- Try to spawn
env.info("Attempting to spawn aircraft...")
local spawnedGroup = nil
-- Method 1: Air spawn
local airbaseCoord = airbaseObj:GetCoordinate()
local spawnCoord = airbaseCoord:Translate(2000, math.random(0, 360)):SetAltitude(config.altitude * 0.3048)
env.info("Trying air spawn at " .. config.altitude .. "ft...")
spawnedGroup = spawner:SpawnFromCoordinate(spawnCoord, nil, SPAWN.Takeoff.Air)
if not spawnedGroup then
env.info("Air spawn failed, trying hot start at airbase...")
spawnedGroup = spawner:SpawnAtAirbase(airbaseObj, SPAWN.Takeoff.Hot)
end
if not spawnedGroup then
env.info("Hot start failed, trying cold start at airbase...")
spawnedGroup = spawner:SpawnAtAirbase(airbaseObj, SPAWN.Takeoff.Cold)
end
if spawnedGroup then
env.info("✓ SUCCESS: Aircraft spawned successfully!")
env.info("Spawned group: " .. spawnedGroup:GetName())
-- Set basic CAP task after a delay
SCHEDULER:New(nil, function()
if spawnedGroup and spawnedGroup:IsAlive() then
env.info("Setting up basic CAP task...")
local currentCoord = spawnedGroup:GetCoordinate()
if currentCoord then
env.info("Aircraft position: " .. currentCoord:ToStringLLDMS())
-- Clear tasks and set basic patrol
spawnedGroup:ClearTasks()
spawnedGroup:OptionROEOpenFire()
-- Simple patrol task
local patrolCoord = currentCoord:Translate(10000, math.random(0, 360)):SetAltitude(config.altitude * 0.3048)
local patrolTask = {
id = 'Orbit',
params = {
pattern = 'Circle',
point = {x = patrolCoord.x, y = patrolCoord.z},
radius = 5000,
altitude = config.altitude * 0.3048,
speed = config.speed * 0.514444,
}
}
spawnedGroup:PushTask(patrolTask, 1)
env.info("✓ Basic CAP task assigned")
-- Clean up after 10 minutes
SCHEDULER:New(nil, function()
if spawnedGroup and spawnedGroup:IsAlive() then
env.info("Test complete - cleaning up spawned aircraft")
spawnedGroup:Destroy()
end
end, {}, 600) -- 10 minutes
else
env.info("⚠ Could not get aircraft coordinate")
end
else
env.info("⚠ Aircraft not alive for task assignment")
end
end, {}, 5) -- 5 second delay
else
env.info("✗ CRITICAL: All spawn methods failed!")
env.info("DIAGNOSIS: There may be an issue with the template or MOOSE setup")
end
end)
if not success then
env.info("✗ CRITICAL ERROR in manual launch: " .. tostring(errorMsg))
end
end
-- Attempt the manual launch
manualLaunch(testConfig)
end, {}, 5) -- Wait 5 seconds for MOOSE initialization
env.info("Manual launch test scheduled - check log in 5 seconds")

View File

@ -1,100 +0,0 @@
-- TADC Verification Script
-- This script provides a simple way to verify that all TADC components are properly configured
-- Run this in DCS to check for missing functions, configuration errors, etc.
-- Verification function to check if all required elements exist
local function verifyTADC()
local errors = {}
local warnings = {}
-- Check if GCI_Config exists and has required values
if not GCI_Config then
table.insert(errors, "GCI_Config not found")
else
local requiredConfig = {
"threatRatio", "maxSimultaneousCAP", "useEWRDetection", "ewrDetectionRadius",
"mainLoopInterval", "mainLoopDelay", "squadronCooldown", "supplyMode",
"defaultSquadronSize", "reservePercent", "responseDelay", "capSetupDelay",
"capOrbitRadius", "capEngagementRange", "capZoneConstraint",
"statusReportInterval", "engagementUpdateInterval", "fighterVsFighter",
"fighterVsBomber", "fighterVsHelicopter", "threatTimeout", "debugLevel"
}
for _, configKey in pairs(requiredConfig) do
if GCI_Config[configKey] == nil then
table.insert(errors, "Missing config: GCI_Config." .. configKey)
end
end
end
-- Check if TADC data structure exists
if not TADC then
table.insert(errors, "TADC data structure not found")
else
local requiredTADC = {"squadrons", "activeCAPs", "threats", "missions"}
for _, key in pairs(requiredTADC) do
if TADC[key] == nil then
table.insert(errors, "Missing TADC." .. key)
end
end
end
-- Check if zones exist
if not CCCPBorderZone then
table.insert(errors, "CCCPBorderZone not found")
end
if not HeloBorderZone then
table.insert(errors, "HeloBorderZone not found")
end
-- Check if main functions exist
local requiredFunctions = {
"TADC_Log", "validateConfiguration", "mainTADCLoop", "simpleDetectThreats",
"launchCAP", "launchInterceptMission", "maintainPersistentCAP"
}
for _, funcName in pairs(requiredFunctions) do
if not _G[funcName] then
table.insert(errors, "Missing function: " .. funcName)
end
end
-- Count squadrons
local squadronCount = 0
if TADC and TADC.squadrons then
for _ in pairs(TADC.squadrons) do
squadronCount = squadronCount + 1
end
end
-- Print results
env.info("=== TADC VERIFICATION RESULTS ===")
if #errors > 0 then
env.error("VERIFICATION FAILED - " .. #errors .. " errors found:")
for _, error in pairs(errors) do
env.error("" .. error)
end
else
env.info("✅ All critical components verified successfully!")
end
if #warnings > 0 then
env.warning("Warnings found:")
for _, warning in pairs(warnings) do
env.warning(" ⚠️ " .. warning)
end
end
env.info("📊 Squadron count: " .. squadronCount)
env.info("📊 Config debug level: " .. (GCI_Config and GCI_Config.debugLevel or "N/A"))
env.info("=== VERIFICATION COMPLETE ===")
return #errors == 0
end
-- Run verification after a short delay to ensure everything is loaded
SCHEDULER:New(nil, function()
env.info("Starting TADC verification...")
verifyTADC()
end, {}, 10)

View File

@ -1,69 +0,0 @@
-- Add this at the very beginning after MOOSE loads
env.info("=== MOOSE DEBUG INFO ===")
env.info("MOOSE loaded: " .. tostring(MOOSE ~= nil))
env.info("OPS available: " .. tostring(OPS ~= nil))
env.info("_G.OPS available: " .. tostring(_G.OPS ~= nil))
-- Check what's in the global namespace
for k,v in pairs(_G) do
if string.find(k, "OPS") then
env.info("Found OPS-related: " .. k .. " = " .. tostring(v))
end
end
-- Debug airbase availability
env.info("=== AIRBASE DEBUG ===")
env.info("AIRBASE table exists: " .. tostring(AIRBASE ~= nil))
if AIRBASE then
env.info("AIRBASE.Kola exists: " .. tostring(AIRBASE.Kola ~= nil))
-- List all airbases found on the map
env.info("=== ALL AIRBASES ON MAP ===")
-- Method 1: Try using SET_AIRBASE to get all airbases
if SET_AIRBASE then
env.info("Using SET_AIRBASE method...")
local airbaseSet = SET_AIRBASE:New():FilterOnce()
if airbaseSet then
local count = airbaseSet:Count()
env.info("Total airbases found: " .. count)
airbaseSet:ForEach(function(airbase)
if airbase then
local name = airbase:GetName()
local coalition = airbase:GetCoalition()
local coalitionName = "Unknown"
if coalition == 0 then coalitionName = "Neutral"
elseif coalition == 1 then coalitionName = "Red"
elseif coalition == 2 then coalitionName = "Blue"
end
env.info("Airbase: '" .. name .. "' (" .. coalitionName .. ")")
end
end)
end
end
-- Method 2: Try specific airbase names we expect
env.info("=== TESTING SPECIFIC AIRBASES ===")
local testNames = {
"Severomorsk-1", "Severomorsk-3", "Kilpyavr", "Murmansk",
"Monchegorsk", "Olenya", "Afrikanda"
}
for _, name in pairs(testNames) do
local airbase = AIRBASE:FindByName(name)
env.info(name .. ": " .. tostring(airbase ~= nil))
if airbase then
env.info(" - Coalition: " .. airbase:GetCoalition())
end
end
-- Alternative method - check AIRBASE.Kola if it exists
if AIRBASE.Kola then
env.info("=== AIRBASE.Kola CONSTANTS ===")
for k,v in pairs(AIRBASE.Kola) do
env.info("AIRBASE.Kola." .. k .. " = " .. tostring(v))
end
end
end