From a674c7a2fd61554d27e9f9e91e61dc7bca09264b Mon Sep 17 00:00:00 2001 From: iTracerFacer <134304944+iTracerFacer@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:56:35 -0600 Subject: [PATCH] Tanker and Ground Battle scirpts updated for bugs and features. --- .../F99th-Insurgent_Sandstorm_2.0.0.miz | Bin 5614161 -> 5614215 bytes .../Moose_DynamicGroundBattle_Plugin.lua | 271 +- Moose_Tanker/Moose_Tanker.lua | 2493 +++++++++++++++++ 3 files changed, 2695 insertions(+), 69 deletions(-) create mode 100644 Moose_Tanker/Moose_Tanker.lua diff --git a/DCS_Afgainistan/Insurgent_Sandstorm/F99th-Insurgent_Sandstorm_2.0.0.miz b/DCS_Afgainistan/Insurgent_Sandstorm/F99th-Insurgent_Sandstorm_2.0.0.miz index 541616fe0018f653f77368f8b0acc01fbaf537e4..c16267438e253d25301d9c9f28c92e4d0dedb360 100644 GIT binary patch delta 76746 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%0DO*1)+{0{| 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 u2@V1g{#V_~6(ADo>ueB|hmEzlhnuy!5 0 +end + +-- Validate unit templates exist +local function ValidateTemplates(templates, label) + local foundCount = 0 + local missingCount = 0 + + for i, templateName in ipairs(templates) do + local group = GROUP:FindByName(templateName) + if group then + foundCount = foundCount + 1 + env.info(string.format("[DGB PLUGIN] %s template %d: %s (OK)", label, i, templateName)) + else + missingCount = missingCount + 1 + env.warning(string.format("[DGB PLUGIN] %s template '%s' NOT FOUND in mission editor!", label, templateName)) + end + end + + env.info(string.format("[DGB PLUGIN] %s templates: %d found, %d missing", label, foundCount, missingCount)) + return foundCount > 0 +end + +env.info("[DGB PLUGIN] Validating configuration...") + +-- Validate all warehouses +local redWarehousesValid = ValidateWarehouses(redWarehouses, "Red") +local blueWarehousesValid = ValidateWarehouses(blueWarehouses, "Blue") + +if not redWarehousesValid then + env.warning("[DGB PLUGIN] WARNING: No valid Red warehouses found! Red spawning will be disabled.") +end + +if not blueWarehousesValid then + env.warning("[DGB PLUGIN] WARNING: No valid Blue warehouses found! Blue spawning will be disabled.") +end + +-- Validate all templates +local redInfantryValid = ValidateTemplates(redInfantryTemplates, "Red Infantry") +local redArmorValid = ValidateTemplates(redArmorTemplates, "Red Armor") +local blueInfantryValid = ValidateTemplates(blueInfantryTemplates, "Blue Infantry") +local blueArmorValid = ValidateTemplates(blueArmorTemplates, "Blue Armor") + +if not redInfantryValid then + env.warning("[DGB PLUGIN] WARNING: No valid Red Infantry templates found! Red Infantry spawning will fail.") +end + +if not redArmorValid then + env.warning("[DGB PLUGIN] WARNING: No valid Red Armor templates found! Red Armor spawning will fail.") +end + +if not blueInfantryValid then + env.warning("[DGB PLUGIN] WARNING: No valid Blue Infantry templates found! Blue Infantry spawning will fail.") +end + +if not blueArmorValid then + env.warning("[DGB PLUGIN] WARNING: No valid Blue Armor templates found! Blue Armor spawning will fail.") +end + env.info("[DGB PLUGIN] Found " .. #zoneCaptureObjects .. " zones from DualCoalitionZoneCapture") -- Track active markers to prevent memory leaks @@ -196,41 +291,44 @@ local function GetZonesByCoalition(targetCoalition) return zones end --- Function to calculate spawn frequency based on warehouse survival -local function CalculateSpawnFrequency(warehouses, baseFrequency) - local totalWarehouses = #warehouses - local aliveWarehouses = 0 +-- Helper to count warehouse availability +local function GetWarehouseStats(warehouses) + local alive = 0 + local total = 0 for _, warehouse in ipairs(warehouses) do if warehouse then + total = total + 1 local life = warehouse:GetLife() if life and life > 0 then - aliveWarehouses = aliveWarehouses + 1 + alive = alive + 1 end end end - if totalWarehouses == 0 or aliveWarehouses == 0 then - return math.huge -- Stop spawning if no warehouses remain + return alive, total +end + +-- Function to calculate spawn frequency based on warehouse survival +local function CalculateSpawnFrequency(warehouses, baseFrequency, cadenceScalar) + local aliveWarehouses, totalWarehouses = GetWarehouseStats(warehouses) + cadenceScalar = cadenceScalar or 1 + + if totalWarehouses == 0 then + return baseFrequency * cadenceScalar end - local frequency = baseFrequency * (totalWarehouses / aliveWarehouses) + if aliveWarehouses == 0 then + return nil -- Pause spawning until logistics return + end + + local frequency = baseFrequency * cadenceScalar * (totalWarehouses / aliveWarehouses) return frequency end -- Function to calculate spawn frequency as a percentage local function CalculateSpawnFrequencyPercentage(warehouses) - local totalWarehouses = #warehouses - local aliveWarehouses = 0 - - for _, warehouse in ipairs(warehouses) do - if warehouse then - local life = warehouse:GetLife() - if life and life > 0 then - aliveWarehouses = aliveWarehouses + 1 - end - end - end + local aliveWarehouses, totalWarehouses = GetWarehouseStats(warehouses) if totalWarehouses == 0 then return 0 @@ -297,8 +395,7 @@ local function IsInfantryGroup(group) return false end --- Function to assign tasks to a group -local function AssignTasks(group) +local function AssignTasks(group, currentZoneCapture) if not group or not group.GetCoalition or not group.GetCoordinate or not group.GetVelocityVec3 then return end @@ -312,6 +409,19 @@ local function AssignTasks(group) local groupCoalition = group:GetCoalition() local groupCoordinate = group:GetCoordinate() + local currentZone = currentZoneCapture and currentZoneCapture:GetZone() or nil + + -- If the group is sitting inside a friendly zone that is currently under attack, + -- keep them local so they fight for the objective instead of leaving it exposed. + if currentZoneCapture and currentZone and currentZoneCapture.GetCoalition and currentZoneCapture:GetCoalition() == groupCoalition then + local zoneState = currentZoneCapture.GetCurrentState and currentZoneCapture:GetCurrentState() or nil + if zoneState == "Attacked" then + env.info(string.format("[DGB PLUGIN] %s defending contested zone %s", group:GetName(), currentZone:GetName())) + group:PatrolZones({ currentZone }, 20, "Cone", 30, 60) + return + end + end + local closestZone = nil local closestDistance = math.huge @@ -350,12 +460,14 @@ local function AssignTasksToGroups() -- Check if group is in a friendly zone local groupCoalition = group:GetCoalition() local inFriendlyZone = false + local currentZoneCapture = nil for idx, zoneCapture in ipairs(zoneCaptureObjects) do if zoneCapture:GetCoalition() == groupCoalition then local zone = zoneCapture:GetZone() if zone and group:IsCompletelyInZone(zone) then inFriendlyZone = true + currentZoneCapture = zoneCapture break end end @@ -367,7 +479,7 @@ local function AssignTasksToGroups() return end - AssignTasks(group) + AssignTasks(group, currentZoneCapture) tasksAssigned = tasksAssigned + 1 end end @@ -378,20 +490,8 @@ end -- Function to monitor and announce warehouse status local function MonitorWarehouses() - local blueWarehousesAlive = 0 - local redWarehousesAlive = 0 - - for _, warehouse in ipairs(blueWarehouses) do - if warehouse and warehouse:IsAlive() then - blueWarehousesAlive = blueWarehousesAlive + 1 - end - end - - for _, warehouse in ipairs(redWarehouses) do - if warehouse and warehouse:IsAlive() then - redWarehousesAlive = redWarehousesAlive + 1 - end - end + local blueWarehousesAlive, blueWarehouseTotal = GetWarehouseStats(blueWarehouses) + local redWarehousesAlive, redWarehouseTotal = GetWarehouseStats(redWarehouses) local redSpawnFrequencyPercentage = CalculateSpawnFrequencyPercentage(redWarehouses) local blueSpawnFrequencyPercentage = CalculateSpawnFrequencyPercentage(blueWarehouses) @@ -402,8 +502,8 @@ local function MonitorWarehouses() MESSAGE:New(msg, 30):ToAll() env.info(string.format("[DGB PLUGIN] Warehouse status - Red: %d/%d (%d%%), Blue: %d/%d (%d%%)", - redWarehousesAlive, #redWarehouses, redSpawnFrequencyPercentage, - blueWarehousesAlive, #blueWarehouses, blueSpawnFrequencyPercentage)) + redWarehousesAlive, redWarehouseTotal, redSpawnFrequencyPercentage, + blueWarehousesAlive, blueWarehouseTotal, blueSpawnFrequencyPercentage)) end ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -414,12 +514,6 @@ end local redZones = GetZonesByCoalition(coalition.side.RED) local blueZones = GetZonesByCoalition(coalition.side.BLUE) --- Calculate initial spawn frequencies -local redInfantrySpawnFrequency = CalculateSpawnFrequency(redWarehouses, SPAWN_SCHED_RED_INFANTRY) -local redArmorSpawnFrequency = CalculateSpawnFrequency(redWarehouses, SPAWN_SCHED_RED_ARMOR) -local blueInfantrySpawnFrequency = CalculateSpawnFrequency(blueWarehouses, SPAWN_SCHED_BLUE_INFANTRY) -local blueArmorSpawnFrequency = CalculateSpawnFrequency(blueWarehouses, SPAWN_SCHED_BLUE_ARMOR) - -- Calculate and display initial spawn frequency percentages local redSpawnFrequencyPercentage = CalculateSpawnFrequencyPercentage(redWarehouses) local blueSpawnFrequencyPercentage = CalculateSpawnFrequencyPercentage(blueWarehouses) @@ -440,46 +534,85 @@ local function GetBlueZones() return GetZonesByCoalition(coalition.side.BLUE) end +-- Validate spawn groups exist before creating spawners +local spawnGroups = { + {name = RED_INFANTRY_SPAWN_GROUP, label = "Red Infantry Spawn Group"}, + {name = RED_ARMOR_SPAWN_GROUP, label = "Red Armor Spawn Group"}, + {name = BLUE_INFANTRY_SPAWN_GROUP, label = "Blue Infantry Spawn Group"}, + {name = BLUE_ARMOR_SPAWN_GROUP, label = "Blue Armor Spawn Group"} +} + +for _, spawnGroup in ipairs(spawnGroups) do + local group = GROUP:FindByName(spawnGroup.name) + if group then + env.info(string.format("[DGB PLUGIN] %s '%s' found (OK)", spawnGroup.label, spawnGroup.name)) + else + env.error(string.format("[DGB PLUGIN] ERROR: %s '%s' NOT FOUND! Create this group in mission editor as LATE ACTIVATE.", spawnGroup.label, spawnGroup.name)) + end +end + -- Red Infantry Spawner -redInfantrySpawn = SPAWN:New("RedInfantryGroup") +redInfantrySpawn = SPAWN:New(RED_INFANTRY_SPAWN_GROUP) :InitRandomizeTemplate(redInfantryTemplates) :InitLimit(INIT_RED_INFANTRY, MAX_RED_INFANTRY) -- Red Armor Spawner -redArmorSpawn = SPAWN:New("RedArmorGroup") +redArmorSpawn = SPAWN:New(RED_ARMOR_SPAWN_GROUP) :InitRandomizeTemplate(redArmorTemplates) :InitLimit(INIT_RED_ARMOR, MAX_RED_ARMOR) -- Blue Infantry Spawner -blueInfantrySpawn = SPAWN:New("BlueInfantryGroup") +blueInfantrySpawn = SPAWN:New(BLUE_INFANTRY_SPAWN_GROUP) :InitRandomizeTemplate(blueInfantryTemplates) :InitLimit(INIT_BLUE_INFANTRY, MAX_BLUE_INFANTRY) -- Blue Armor Spawner -blueArmorSpawn = SPAWN:New("BlueArmorGroup") +blueArmorSpawn = SPAWN:New(BLUE_ARMOR_SPAWN_GROUP) :InitRandomizeTemplate(blueArmorTemplates) :InitLimit(INIT_BLUE_ARMOR, MAX_BLUE_ARMOR) --- Custom spawn function that updates zones dynamically -local function SpawnWithDynamicZones() - local currentRedZones = GetRedZones() - local currentBlueZones = GetBlueZones() - - if #currentRedZones > 0 then - local randomRedZone = currentRedZones[math.random(#currentRedZones)] - redInfantrySpawn:SpawnInZone(randomRedZone, false) - redArmorSpawn:SpawnInZone(randomRedZone, false) - end - - if #currentBlueZones > 0 then - local randomBlueZone = currentBlueZones[math.random(#currentBlueZones)] - blueInfantrySpawn:SpawnInZone(randomBlueZone, false) - blueArmorSpawn:SpawnInZone(randomBlueZone, false) +-- Helper to schedule spawns per category so each uses its intended cadence. +local function ScheduleSpawner(spawnObject, getZonesFn, warehouses, baseFrequency, label, cadenceScalar) + local scheduler + + local function spawnCycle() + local nextInterval = CalculateSpawnFrequency(warehouses, baseFrequency, cadenceScalar) + + if not nextInterval then + env.info(string.format("[DGB PLUGIN] %s spawn paused (no warehouses alive)", label)) + if scheduler then + scheduler:Stop() + scheduler:Start(NO_WAREHOUSE_RECHECK_DELAY, NO_WAREHOUSE_RECHECK_DELAY) + end + return + end + + local friendlyZones = getZonesFn() + local zonesAvailable = #friendlyZones + + if zonesAvailable > 0 then + local chosenZone = friendlyZones[math.random(zonesAvailable)] + spawnObject:SpawnInZone(chosenZone, false) + else + env.info(string.format("[DGB PLUGIN] %s spawn skipped (no friendly zones)", label)) + end + + if scheduler then + scheduler:Stop() + scheduler:Start(nextInterval, nextInterval) + end end + + local initialFrequency = baseFrequency * (cadenceScalar or 1) + scheduler = SCHEDULER:New(nil, spawnCycle, {}, math.random(5, 15), initialFrequency) + return scheduler end --- Schedule spawns -SCHEDULER:New(nil, SpawnWithDynamicZones, {}, 10, math.max(SPAWN_SCHED_RED_INFANTRY, SPAWN_SCHED_BLUE_INFANTRY)) +-- Schedule spawns (each spawner now runs at its own configured cadence) +ScheduleSpawner(redInfantrySpawn, GetRedZones, redWarehouses, SPAWN_SCHED_RED_INFANTRY, "Red Infantry", RED_INFANTRY_CADENCE_SCALAR) +ScheduleSpawner(redArmorSpawn, GetRedZones, redWarehouses, SPAWN_SCHED_RED_ARMOR, "Red Armor", RED_ARMOR_CADENCE_SCALAR) +ScheduleSpawner(blueInfantrySpawn, GetBlueZones, blueWarehouses, SPAWN_SCHED_BLUE_INFANTRY, "Blue Infantry", BLUE_INFANTRY_CADENCE_SCALAR) +ScheduleSpawner(blueArmorSpawn, GetBlueZones, blueWarehouses, SPAWN_SCHED_BLUE_ARMOR, "Blue Armor", BLUE_ARMOR_CADENCE_SCALAR) -- Schedule warehouse marker updates if ENABLE_WAREHOUSE_MARKERS then diff --git a/Moose_Tanker/Moose_Tanker.lua b/Moose_Tanker/Moose_Tanker.lua new file mode 100644 index 0000000..85baf7f --- /dev/null +++ b/Moose_Tanker/Moose_Tanker.lua @@ -0,0 +1,2493 @@ +-- ============================================================================ +-- MOOSE TANKER MANAGEMENT SYSTEM +-- Comprehensive tanker lifecycle management with auto-respawn, fuel monitoring, +-- TACAN/frequency announcements, and menu controls +-- ============================================================================ + +-- ============================================================================ +-- USER CONFIGURATION +-- ============================================================================ + +-- Tanker Configuration +local TANKER_CONFIG = { + KC135 = { + groupName = "TANKER 135", + unitName = "TANKER 135-1", + displayName = "TANKER KC-135", + aircraftType = "KC-135", -- DCS aircraft type name + livery = nil, -- nil for default, or livery_id string + callsign = "SHELL", -- Map marker prefix for custom routes + tacan = "50X", -- Set to match ME or nil if none + frequency = "251.000", -- Set to match ME or nil if none + respawnDelay = 180, -- seconds before auto-respawn after destruction + emergencyRespawnDelay = 60, -- Emergency spawn delay + fuelWarningPercent = 25, -- Warn when fuel drops below this % + fuelBingoPercent = 15, -- RTB fuel level + defaultAltitude = 22000, -- Default altitude in feet (FL220) + defaultSpeed = 330, -- Default speed in knots + }, + KC135_MPRS = { + groupName = "TANKER 135 MPRS", + unitName = "TANKER 135 MPRS-1", + displayName = "TANKER KC-135 MPRS", + aircraftType = "KC135MPRS", -- DCS aircraft type name + livery = nil, + callsign = "ARCO", -- Map marker prefix for custom routes + tacan = "51X", + frequency = "252.000", + respawnDelay = 180, + emergencyRespawnDelay = 60, + fuelWarningPercent = 25, + fuelBingoPercent = 15, + defaultAltitude = 22000, + defaultSpeed = 330, + } +} + +-- Custom Route Configuration +local ROUTE_CONFIG = { + minWaypoints = 2, -- Minimum waypoints required + maxWaypoints = 10, -- Maximum waypoints allowed + deleteMarkersAfterUse = true, -- Delete markers after route creation + waypointPrefix = { -- Recognized marker prefixes + SHELL = "KC135", -- SHELL1, SHELL2, etc. → KC-135 + ARCO = "KC135_MPRS", -- ARCO1, ARCO2, etc. → KC-135 MPRS + } +} + +-- Monitoring Configuration +local FUEL_CHECK_INTERVAL = 60 -- Check fuel every 60 seconds +local DAMAGE_RTB_THRESHOLD = 50 -- RTB if hull damage exceeds this % + +-- Default Spawn Location (for non-custom route spawns) +-- Note: Using lat/lon with SetAltitude to ensure proper altitude MSL +local DEFAULT_SPAWN_COORD = COORDINATE:NewFromLLDD(34.564, 69.212):SetAltitude(22000 * 0.3048, true) -- Kabul area, FL220 + +-- ============================================================================ +-- GLOBAL STATE TRACKING +-- ============================================================================ + +TANKER_STATE = { + KC135 = { + active = false, + group = nil, + fuelWarned = false, + bingoWarned = false, + respawnScheduler = nil, + fuelMonitor = nil, + }, + KC135_MPRS = { + active = false, + group = nil, + fuelWarned = false, + bingoWarned = false, + respawnScheduler = nil, + fuelMonitor = nil, + } +} + +-- ============================================================================ +-- MENU REFERENCES (for enable/disable) +-- ============================================================================ + +local MENU_TANKER_ROOT = nil +local MENU_KC135_LAUNCH = nil +local MENU_KC135_MPRS_LAUNCH = nil + +-- ============================================================================ +-- MESSAGE POOLS FOR VARIETY +-- Randomized messages provide immersive variety across tanker operations. +-- Each category contains 100 variations selected randomly via GetRandomMessage() +-- ============================================================================ + +local TANKER_MESSAGES = { + -- Spawn Confirmation (success) + SPAWN_SUCCESS = { + "%s is airborne and ready for refueling operations.", + "%s has launched and is standing by for fuel.", + "%s is now on station and ready to pump gas.", + "%s has departed and is available for refueling.", + "%s is up and ready to service aircraft.", + "%s is airborne. Refueling services now available.", + "%s has checked in on station.", + "%s is overhead and ready for business.", + "%s is now available for aerial refueling.", + "%s has arrived on station. Ready to refuel.", + "%s is up! Time to get your drink on.", + "%s has joined the party. Bring your cups!", + "%s reporting. The bar is now open.", + "%s is flying. Get in line for your juice.", + "%s on station. Don't be shy, we got plenty.", + "%s airborne. Unlike Mo's last attempt at flying.", + "%s has successfully launched. No thanks to Mo.", + "%s is ready. Mo said he could do this but we know better.", + "%s in position. Fuel truck of the sky is open for business!", + "%s has arrived fashionably late but ready to pump.", + "%s checking in. Your gas station with wings is here.", + "%s is up there doing tanker things.", + "%s launched without hitting anything. Good start!", + "%s airborne and hasn't broken anything yet.", + "%s is ready to make it rain... JP-8.", + "%s in the pattern. Come get some dinosaur juice!", + "%s reporting for duty. Time to feed some thirsty birds.", + "%s has spawned successfully. Mo's jealous.", + "%s is flying high and ready to share the wealth.", + "%s on station. Dispensary is OPEN.", + "%s has graced you with its presence. You're welcome.", + "%s is here to save your ass from flameout.", + "%s launched. The sky gas station is open 24/7.", + "%s airborne. Better than Mo's last tanker spawn attempt.", + "%s ready to refuel. Unlike your love life, this actually works.", + "%s has arrived to keep you from embarrassing yourself.", + "%s on station and totally not judging your fuel planning.", + "%s is up. Try not to break the boom this time.", + "%s launched successfully. Mo couldn't get his off the ground.", + "%s airborne. Your aerial bartender has arrived!", + "%s ready for action. The juice is loose!", + "%s has spawned. Time to get wet... with fuel.", + "%s on station. We promise not to tell anyone you needed us.", + "%s reporting. Because someone forgot to fuel before takeoff.", + "%s is here! The flying fuel truck has arrived!", + "%s airborne and ready to fill your tanks. That's what she said.", + "%s launched. Even Mo could refuel from this... maybe.", + "%s on station. Your poor planning is our opportunity!", + "%s has arrived. The aerial milk truck is ready.", + "%s ready to pump. Get your minds out of the gutter.", + "%s airborne because you can't manage fuel apparently.", + "%s is up there waiting. Don't keep us hovering forever.", + "%s has joined the fight. By 'fight' we mean 'hovering lazily.'", + "%s on station. Premium unleaded is on tap!", + "%s launched and looking sexy up here.", + "%s ready to refuel. Try not to scratch the paint this time.", + "%s has arrived. Mo said this was impossible but here we are.", + "%s airborne. The sky's full service station is open!", + "%s on station ready to save your bacon.", + "%s has launched into the wild blue yonder!", + "%s reporting for gas pumping duty.", + "%s is up and Mo isn't. Winner: us.", + "%s airborne. Fuel flows like wine at a wedding!", + "%s on station. Unlike Mo, we actually showed up.", + "%s ready to top you off. No phrasing.", + "%s has successfully taken off. Mo's still taxiing.", + "%s airborne and operational. The real MVP.", + "%s on station doing the lord's work.", + "%s has arrived to prevent your walk of shame.", + "%s ready for refueling ops. Try to connect this time.", + "%s launched because someone has to be the adult here.", + "%s airborne. Probably more reliable than your ex.", + "%s on station ready to give you the good stuff.", + "%s has spawned. Mo's tanker is still in the hangar.", + "%s reporting. Your airborne gas station awaits!", + "%s is up! Time for some hot refueling action.", + "%s airborne and Mo's not invited to this party.", + "%s on station. We have fuel, you have need. Let's dance.", + "%s ready to dispense freedom molecules!", + "%s has arrived to fix your fuel management issues.", + "%s launched. The flying gas can is ready for customers.", + "%s airborne because apparently nobody can calculate bingo.", + "%s on station. Come get your fix!", + "%s ready to pump premium into your thirsty bird.", + "%s has spawned successfully. Suck it, Mo.", + "%s reporting. Your aerial enabler is on station.", + "%s is up there waiting like a patient parent.", + "%s airborne and ready to make your fuel gauge happy.", + "%s on station. Mo said we couldn't do it. We did it.", + "%s launched with more grace than Mo's last landing.", + "%s ready for business. The boom is ready to boom.", + "%s has arrived fashionably and ready to serve.", + "%s airborne. Your fuel problems are about to be solved!", + "%s on station doing God's work up here.", + "%s ready to refuel. We got the good stuff.", + "%s has spawned. Time to feed the hungry jets!", + "%s reporting for duty with full tanks!", + "%s launched successfully without Mo's help, thank God.", + "%s airborne. The flying filling station is OPEN!", + }, + + -- Already Active Warning + ALREADY_ACTIVE = { + "%s is already airborne!", + "%s is currently active.", + "%s is already on station.", + "%s is already flying. Check status for details.", + "%s is already up - can't spawn another.", + "%s is currently operating.", + "Cannot spawn - %s already active.", + "%s is already out there!", + "%s already flying. One at a time, please.", + "%s is already working the pattern.", + "%s is already up there, genius.", + "Dude, %s is ALREADY flying. Pay attention.", + "%s is currently active. Are you even looking?", + "Hey Einstein, %s is already airborne!", + "%s is up there right now. Use your eyes.", + "What part of '%s is active' don't you understand?", + "%s is already flying. Did Mo program this button?", + "Seriously? %s is already up. Check your radar.", + "%s is currently operational. Nice try though.", + "Negative. %s is already in the air.", + "%s is already active. Mo would have known that.", + "Can't spawn two, buttercup. %s is already flying.", + "%s is already out there doing tanker things.", + "Nice try. %s is already airborne, hotshot.", + "%s is currently flying. One's enough.", + "Hold your horses! %s is already active.", + "%s is already up. We're not running a bus service here.", + "Bruh. %s is already flying.", + "%s is currently active. Maybe learn to read?", + "Negative ghostrider. %s is already up.", + "%s is already airborne. Unlike your awareness.", + "Um, %s is ALREADY flying. Hello?", + "%s is currently on station. Wake up.", + "You can't spawn %s twice. Physics doesn't work that way.", + "%s is already active. Not sure what you expected.", + "Denied! %s is already in the pattern.", + "%s is currently flying around. Look outside.", + "News flash: %s is already airborne!", + "%s is already up there. Mo makes better decisions than this.", + "Request denied. %s is already active, chief.", + "%s is currently operational. Check your instruments.", + "Already got one! %s is flying right now.", + "%s is already airborne. Reading is fundamental.", + "Uh, no. %s is currently active.", + "%s is already out there. Situational awareness: zero.", + "Can't spawn %s again. Not a video game, buddy.", + "%s is currently flying. We only get one.", + "That's a negative. %s is already up.", + "%s is already on station. Did you even check?", + "Seriously? %s has been flying for 20 minutes.", + "%s is already active. This isn't rocket science.", + "Request rejected. %s is currently airborne.", + "%s is already up there pumping gas. Pay attention!", + "Nope. %s is already flying. Check the status board.", + "%s is currently active. Even Mo knew this.", + "Cannot comply. %s is already operational.", + "%s is already airborne. Try the status menu next time.", + "That's a no-go. %s is currently flying.", + "%s is already up. Did you think we had two?", + "Denied. %s is already on station doing its thing.", + "%s is currently active. Surprised you didn't notice.", + "Can't do it. %s is already flying around up there.", + "%s is already operational. One tanker at a time, pal.", + "Negative. %s has been active for a while now.", + "%s is already up there. Spawn button isn't a toy.", + "Request denied. %s is currently on station.", + "%s is already flying. Not cloning aircraft today.", + "Can't spawn another. %s is already airborne.", + "%s is currently active. Stop button mashing.", + "That's not happening. %s is already up.", + "%s is already operational. One's all you get.", + "No can do. %s is already in the pattern.", + "%s is currently flying. Check before clicking, maybe?", + "Request rejected. %s is already on duty.", + "%s is already airborne. Unlike your attention span.", + "Nope! %s is currently active and doing fine.", + "%s is already up there. Stop spamming the spawn button.", + "Cannot spawn duplicate. %s is already flying.", + "%s is currently operational. Mo's spawn would work better.", + "Denied! %s is already on station, genius.", + "%s is already flying. Check your tanker status!", + "That's a negative. %s is currently active.", + "%s is already airborne. One tanker per customer.", + "Can't do that. %s is already up and working.", + "%s is currently on station. Read the room.", + "Request denied. %s is already operational, chief.", + "%s is already active. Try paying attention.", + "No dice. %s is already flying the pattern.", + "%s is currently airborne. Spawn limit: 1.", + "Negative. %s is already up there doing tanker stuff.", + "%s is already active. Maybe check the status screen?", + "Can't spawn %s again. We're not made of tankers here.", + "%s is currently flying. One at a time, hotshot.", + "Request rejected. %s is already on station.", + "%s is already operational. Even Mo knows you only get one.", + "That's not possible. %s is currently airborne.", + "%s is already up there. Better situational awareness needed.", + "Denied. %s is currently active and wondering why you asked.", + "%s is already flying. The spawn button isn't for spam.", + "Cannot comply. %s is already operational, Einstein.", + }, + + -- Spawn Failure + SPAWN_FAILURE = { + "Failed to spawn %s!", + "Unable to launch %s. Try again.", + "%s spawn aborted!", + "Cannot spawn %s at this time.", + "%s failed to launch!", + "Error spawning %s. Contact support.", + "%s launch unsuccessful.", + "Unable to activate %s. Retry required.", + "%s spawn failed. Check logs.", + "Launch failure for %s!", + "%s spawn went sideways. Oops.", + "Well that didn't work. %s failed to spawn.", + "%s couldn't get off the ground. Awkward.", + "Houston, we have a problem. %s didn't spawn.", + "%s spawn failed harder than Mo's last landing.", + "Oof. %s spawn went to hell.", + "%s launch aborted. This is embarrassing.", + "Yeah, %s didn't spawn. Our bad.", + "Spawn failed for %s. Not our finest moment.", + "%s couldn't launch. Try again, genius.", + "That's a big negative on %s spawn.", + "%s failed to spawn. Did Mo write this code?", + "Error: %s spawn went boom. The bad kind.", + "%s launch unsuccessful. Better luck next time.", + "Spawn failed. %s is still in the hangar.", + "%s didn't want to fly today apparently.", + "Well crap. %s spawn totally failed.", + "%s launch aborted. Something broke.", + "That didn't work. %s spawn failed miserably.", + "%s couldn't spawn. Technical difficulties.", + "Negative spawn for %s. Try again maybe?", + "%s spawn went tits up. Sorry.", + "Launch failure! %s is grounded.", + "%s spawn crashed and burned. Not literally.", + "Unable to spawn %s. Computer says no.", + "%s launch failed. Mo could have done better.", + "Spawn error for %s. This is awkward.", + "%s didn't spawn. The universe said no.", + "Failed to launch %s. Not our day.", + "%s spawn aborted. Probably for the best.", + "Yeah... %s spawn didn't happen.", + "%s failed to spawn. Check your setup.", + "Spawn unsuccessful for %s. Womp womp.", + "%s launch went south. Way south.", + "That's a no-go. %s failed to spawn.", + "%s spawn error. Better call tech support.", + "Launch failure! %s stayed on the ground.", + "%s couldn't spawn. Even we're confused.", + "Spawn failed for %s. Mo's laughing right now.", + "%s launch aborted. Something went wrong.", + "Unable to activate %s. Try turning it off and on again.", + "%s spawn went nowhere fast.", + "Failed spawn alert: %s is still parked.", + "%s launch unsuccessful. This is fine. Everything's fine.", + "Spawn error for %s. Not ideal.", + "%s couldn't get airborne. Rough.", + "Launch aborted. %s is taking a day off.", + "%s spawn failed spectacularly.", + "Cannot spawn %s. System said 'nah.'", + "%s launch went sideways. Try again.", + "Spawn failure! %s is grounded indefinitely.", + "%s didn't spawn. Murphy's Law in effect.", + "Failed to launch %s. Mo's spawn worked better.", + "%s spawn unsuccessful. Check the logs.", + "Error spawning %s. This shouldn't happen.", + "%s launch aborted. Technical difficulties ahead.", + "Spawn failed. %s is staying home today.", + "%s couldn't spawn. Better luck next time, champ.", + "Launch failure for %s. Not sure why.", + "%s spawn went wrong. Very wrong.", + "Unable to spawn %s. Try again later.", + "%s launch failed. Mo would be disappointed.", + "Spawn error: %s didn't make it.", + "%s failed to spawn. Computer threw a tantrum.", + "Launch aborted for %s. Sorry about that.", + "%s spawn unsuccessful. Try again maybe?", + "Cannot activate %s. Spawn failed.", + "%s launch went nowhere. Like Mo's career.", + "Spawn failure! %s is MIA.", + "%s couldn't spawn. System error.", + "Failed to launch %s. This is awkward.", + "%s spawn aborted. Not today, apparently.", + "Launch error for %s. Check your setup.", + "%s didn't spawn. Computer says no way.", + "Spawn unsuccessful. %s is grounded.", + "%s launch failed. Mo's code was better.", + "Cannot spawn %s. Technical issues.", + "%s failed to activate. Try again.", + "Launch aborted. %s spawn went south.", + "%s spawn error. This isn't good.", + "Failed to spawn %s. Maybe next time.", + "%s launch unsuccessful. Something broke.", + "Spawn failure for %s. Not our best work.", + "%s couldn't get off the ground. Awkward moment.", + "Launch error! %s is still parked.", + "%s spawn went wrong. Very, very wrong.", + "Unable to spawn %s. System malfunction.", + "%s launch failed harder than expected.", + "Spawn aborted. %s is taking a sick day.", + }, + + -- Custom Route Accepted + ROUTE_ACCEPTED = { + "%s accepting custom route with %d waypoints.%s", + "%s has your route. %d waypoints loaded.%s", + "%s acknowledges custom flight plan. %d waypoints.%s", + "%s route confirmed. %d waypoints programmed.%s", + "%s copy your route. %d waypoints accepted.%s", + "%s roger. %d waypoint route loaded.%s", + "%s has the route. %d points confirmed.%s", + "%s flight plan accepted. %d waypoints.%s", + "%s confirms route. %d waypoints in the box.%s", + "%s routing confirmed with %d waypoints.%s", + "%s has your custom route. %d waypoints loaded.%s", + "%s accepts your flight plan. %d points confirmed.%s", + "%s copies custom route with %d waypoints.%s", + "%s acknowledges %d waypoint route.%s", + "%s route programmed. %d waypoints locked in.%s", + "%s flight plan confirmed with %d points.%s", + "%s roger your route. %d waypoints loaded.%s", + "%s accepts %d waypoint custom plan.%s", + "%s has your %d waypoint route locked in.%s", + "%s confirms %d waypoint flight plan.%s", + "%s copy that. %d waypoint route programmed.%s", + "%s routing accepted. %d points confirmed.%s", + "%s has the route. %d waypoints ready.%s", + "%s acknowledges %d point route.%s", + "%s flight plan loaded with %d waypoints.%s", + "%s custom route confirmed. %d points.%s", + "%s accepts your %d waypoint plan.%s", + "%s roger. %d waypoints programmed.%s", + "%s has your %d waypoint custom route.%s", + "%s routing confirmed with %d points.%s", + "%s copies %d waypoint route. Unlike Mo's attempt.%s", + "%s accepts your custom %d waypoint plan.%s", + "%s has loaded %d waypoint route.%s", + "%s confirms %d waypoint routing.%s", + "%s flight plan locked in. %d waypoints.%s", + "%s roger your %d waypoint route.%s", + "%s accepts custom route with %d points.%s", + "%s has programmed %d waypoint plan.%s", + "%s acknowledges %d waypoint custom route.%s", + "%s routing confirmed. %d waypoints ready.%s", + "%s copies %d waypoint flight plan.%s", + "%s accepts your %d point custom route.%s", + "%s has %d waypoint route confirmed.%s", + "%s roger custom plan with %d waypoints.%s", + "%s routing accepted. %d points programmed.%s", + "%s flight plan confirmed. %d waypoints loaded.%s", + "%s has your custom %d waypoint routing.%s", + "%s accepts %d waypoint plan.%s", + "%s confirms custom route. %d waypoints.%s", + "%s roger that. %d waypoint route accepted.%s", + "%s has %d waypoint custom plan loaded.%s", + "%s acknowledges %d point custom route.%s", + "%s routing programmed. %d waypoints confirmed.%s", + "%s flight plan accepted with %d points.%s", + "%s copies your %d waypoint custom route.%s", + "%s has %d waypoint route ready.%s", + "%s accepts custom plan. %d waypoints.%s", + "%s confirms %d point flight plan.%s", + "%s roger custom %d waypoint route.%s", + "%s routing locked in. %d waypoints.%s", + "%s has %d waypoint plan confirmed.%s", + "%s flight plan loaded. %d waypoints accepted.%s", + "%s acknowledges custom %d waypoint route.%s", + "%s accepts %d waypoint routing.%s", + "%s copies custom %d waypoint plan.%s", + "%s has %d waypoint route programmed.%s", + "%s confirms your %d waypoint custom route.%s", + "%s roger. %d waypoint custom plan loaded.%s", + "%s routing accepted with %d points.%s", + "%s flight plan programmed. %d waypoints.%s", + "%s has custom route with %d waypoints.%s", + "%s accepts %d waypoint custom plan.%s", + "%s acknowledges %d waypoint routing.%s", + "%s copies %d waypoint custom route.%s", + "%s has %d waypoint flight plan confirmed.%s", + "%s roger custom route. %d waypoints.%s", + "%s routing confirmed with %d waypoints.%s", + "%s flight plan accepted. %d points loaded.%s", + "%s has your %d waypoint custom plan.%s", + "%s accepts custom %d waypoint route.%s", + "%s confirms %d waypoint custom plan.%s", + "%s acknowledges %d waypoint flight plan.%s", + "%s copies %d waypoint route confirmed.%s", + "%s has custom %d waypoint routing ready.%s", + "%s roger. %d waypoints accepted and locked.%s", + "%s routing programmed with %d waypoints.%s", + "%s flight plan confirmed with %d points.%s", + "%s has %d waypoint custom route loaded.%s", + "%s accepts your custom %d waypoint routing.%s", + "%s confirms %d waypoint plan confirmed.%s", + "%s acknowledges custom route with %d points.%s", + "%s copies %d waypoint custom flight plan.%s", + "%s has %d waypoint route locked and loaded.%s", + "%s roger that. %d waypoint custom route ready.%s", + "%s routing accepted. %d waypoints programmed.%s", + "%s flight plan loaded with %d waypoints.%s", + }, + + -- Emergency Spawn + EMERGENCY_SPAWN = { + "EMERGENCY: %s launching immediately!", + "PRIORITY LAUNCH: %s is scrambling now!", + "EMERGENCY TANKER: %s departing expedited!", + "URGENT: %s is launching on priority status!", + "EMERGENCY RESPONSE: %s airborne ASAP!", + "PRIORITY: %s scrambling for emergency fuel!", + "EMERGENCY: %s launching hot!", + "URGENT LAUNCH: %s is wheels up now!", + "EMERGENCY TANKER: %s responding immediately!", + "PRIORITY STATUS: %s emergency launch in progress!", + "EMERGENCY! %s wheels up NOW!", + "SCRAMBLE SCRAMBLE: %s launching immediately!", + "PRIORITY LAUNCH: %s getting airborne right now!", + "EMERGENCY TANKER: %s departing hot and fast!", + "URGENT: %s scrambling for emergency refuel!", + "PRIORITY: %s launching on expedited status!", + "EMERGENCY RESPONSE: %s airborne immediately!", + "URGENT LAUNCH: %s departing NOW!", + "EMERGENCY: %s getting up there ASAP!", + "PRIORITY STATUS: %s scrambling right now!", + "EMERGENCY TANKER: %s wheels up immediately!", + "URGENT: %s launching on priority!", + "SCRAMBLE: %s departing expedited!", + "EMERGENCY: %s getting airborne fast!", + "PRIORITY LAUNCH: %s launching NOW!", + "URGENT TANKER: %s scrambling immediately!", + "EMERGENCY: %s departing hot!", + "PRIORITY: %s wheels up ASAP!", + "URGENT LAUNCH: %s airborne right now!", + "EMERGENCY TANKER: %s launching immediately!", + "SCRAMBLE SCRAMBLE: %s getting up there now!", + "PRIORITY: %s launching on emergency status!", + "URGENT: %s departing immediately!", + "EMERGENCY: %s scrambling for urgent refuel!", + "PRIORITY LAUNCH: %s wheels up hot!", + "URGENT TANKER: %s airborne ASAP!", + "EMERGENCY: %s launching right now!", + "PRIORITY: %s scrambling expedited!", + "URGENT LAUNCH: %s departing NOW NOW NOW!", + "EMERGENCY TANKER: %s getting airborne fast!", + "PRIORITY STATUS: %s launching immediately!", + "URGENT: %s wheels up on priority!", + "EMERGENCY: %s scrambling now!", + "PRIORITY LAUNCH: %s departing fast!", + "URGENT TANKER: %s launching ASAP!", + "EMERGENCY: %s airborne immediately!", + "PRIORITY: %s scrambling hot!", + "URGENT LAUNCH: %s wheels up right now!", + "EMERGENCY TANKER: %s departing expedited!", + "PRIORITY: %s launching on urgent status!", + "URGENT: %s getting airborne now!", + "EMERGENCY SCRAMBLE: %s departing immediately!", + "PRIORITY TANKER: %s wheels up fast!", + "URGENT: %s launching right now!", + "EMERGENCY: %s airborne ASAP!", + "PRIORITY LAUNCH: %s scrambling now!", + "URGENT TANKER: %s departing hot!", + "EMERGENCY: %s wheels up immediately!", + "PRIORITY: %s getting airborne fast!", + "URGENT LAUNCH: %s scrambling ASAP!", + "EMERGENCY TANKER: %s launching on priority!", + "PRIORITY: %s departing right now!", + "URGENT: %s airborne expedited!", + "EMERGENCY: %s scrambling immediately!", + "PRIORITY LAUNCH: %s wheels up NOW!", + "URGENT TANKER: %s launching fast!", + "EMERGENCY: %s departing ASAP!", + "PRIORITY: %s airborne right now!", + "URGENT LAUNCH: %s scrambling hot!", + "EMERGENCY TANKER: %s wheels up expedited!", + "PRIORITY: %s launching immediately!", + "URGENT: %s getting airborne ASAP!", + "EMERGENCY: %s scrambling fast!", + "PRIORITY LAUNCH: %s departing NOW!", + "URGENT TANKER: %s wheels up right now!", + "EMERGENCY: %s airborne hot!", + "PRIORITY: %s scrambling ASAP!", + "URGENT LAUNCH: %s launching immediately!", + "EMERGENCY TANKER: %s departing fast!", + "PRIORITY: %s wheels up expedited!", + "URGENT: %s airborne NOW!", + "EMERGENCY: %s launching hot and fast!", + "PRIORITY LAUNCH: %s scrambling expedited!", + "URGENT TANKER: %s departing immediately!", + "EMERGENCY: %s wheels up ASAP!", + "PRIORITY: %s getting airborne now!", + "URGENT LAUNCH: %s airborne fast!", + "EMERGENCY TANKER: %s scrambling NOW!", + "PRIORITY: %s launching expedited!", + "URGENT: %s departing hot!", + "EMERGENCY: %s airborne immediately unlike Mo!", + "PRIORITY LAUNCH: %s wheels up faster than Mo!", + "URGENT TANKER: %s scrambling (Mo couldn't do this)!", + "EMERGENCY: %s launching while Mo watches!", + "PRIORITY: %s departing - Mo take notes!", + "URGENT LAUNCH: %s airborne (unlike Mo's attempts)!", + "EMERGENCY TANKER: %s scrambling successfully!", + "PRIORITY: %s wheels up for real!", + "URGENT: %s launching like professionals do!", + }, + + -- Low Fuel Warning + LOW_FUEL = { + "%s reports fuel at %d%%. Recommend expedite refueling.", + "%s low on fuel - %d%% remaining. RTB soon.", + "%s fuel state: %d%%. Time is limited.", + "%s down to %d%% fuel. Get your gas quick.", + "%s running low - %d%% remaining.", + "%s fuel advisory: %d%% left. Don't delay.", + "%s reports %d%% fuel state. Limited time remaining.", + "%s low fuel warning at %d%%. RTB imminent.", + "%s fuel: %d%%. Better hurry up.", + "%s getting thirsty at %d%% fuel remaining.", + "%s fuel down to %d%%. Time's ticking.", + "%s running on fumes at %d%%. Get moving.", + "%s reports %d%% fuel. Clock is running.", + "%s fuel state critical at %d%%.", + "%s getting low at %d%%. Don't dawdle.", + "%s fuel: %d%%. Window is closing.", + "%s reports %d%% remaining. Hurry it up.", + "%s fuel advisory: %d%%. Time's short.", + "%s down to %d%%. Better move fast.", + "%s fuel at %d%%. RTB soon or refuel now.", + "%s running thin at %d%%. Expedite.", + "%s reports %d%% fuel. Not much time left.", + "%s fuel state %d%%. Don't mess around.", + "%s getting low - %d%% and dropping.", + "%s fuel: %d%%. Better get some quick.", + "%s reports %d%%. Running out of time.", + "%s fuel down to %d%%. Tick tock.", + "%s low on gas at %d%%. Move it.", + "%s reports %d%% fuel state. Limited window.", + "%s fuel: %d%%. Don't be slow about it.", + "%s getting thirsty - %d%% remaining.", + "%s reports %d%%. Better hurry your ass up.", + "%s fuel at %d%%. Time ain't on your side.", + "%s running low - %d%%. Get in here.", + "%s fuel state: %d%%. Mo could refuel faster.", + "%s reports %d%%. Don't be a hero, get fuel.", + "%s fuel down to %d%%. Unlike Mo we're warning you.", + "%s getting low at %d%%. Stop screwing around.", + "%s reports %d%% fuel. This isn't a drill.", + "%s fuel: %d%%. Better not screw this up.", + "%s running thin - %d%% remaining.", + "%s reports %d%%. Time to get your ass over here.", + "%s fuel state %d%%. Seriously, hurry up.", + "%s getting thirsty at %d%%. Don't be stupid.", + "%s fuel: %d%%. We're leaving soon.", + "%s reports %d%%. Better expedite refueling.", + "%s fuel down to %d%%. Window closing fast.", + "%s low on juice - %d%% remaining.", + "%s reports %d%% fuel. Get moving or RTB.", + "%s fuel state: %d%%. Don't drag ass.", + "%s getting low at %d%%. Time's running out.", + "%s reports %d%%. Stop dicking around.", + "%s fuel: %d%%. Get in the basket.", + "%s running thin at %d%%. Move faster.", + "%s reports %d%% remaining. Chop chop.", + "%s fuel down to %d%%. Unlike Mo's planning.", + "%s getting thirsty - %d%%. Don't be slow.", + "%s reports %d%% fuel state. Hurry.", + "%s fuel: %d%%. Better not flame out.", + "%s low on gas at %d%%. Get over here.", + "%s reports %d%%. Time to move it.", + "%s fuel state %d%%. We don't have all day.", + "%s getting low - %d%% and dropping fast.", + "%s reports %d%%. Stop being a pussy.", + "%s fuel: %d%%. Refuel or die trying.", + "%s running thin - %d%%. Better hurry.", + "%s reports %d%% fuel. Move your ass.", + "%s fuel down to %d%%. Not kidding here.", + "%s getting thirsty at %d%%. Expedite.", + "%s reports %d%%. Don't be like Mo.", + "%s fuel state: %d%%. Get fuel or get bent.", + "%s low at %d%%. Time's wasting.", + "%s reports %d%% remaining. Hurry up.", + "%s fuel: %d%%. Stop fucking around.", + "%s running low - %d%%. Get here now.", + "%s reports %d%%. We're not waiting forever.", + "%s fuel down to %d%%. Better get moving.", + "%s getting low at %d%%. Tick tock motherfucker.", + "%s reports %d%% fuel state. Move it.", + "%s fuel: %d%%. Don't be a jackass.", + "%s running thin at %d%%. Expedite refuel.", + "%s reports %d%%. Time's running short.", + "%s fuel state %d%%. Get in the pattern.", + "%s getting thirsty - %d%%. Don't delay.", + "%s reports %d%%. Unlike Mo we're still here.", + "%s fuel: %d%%. Better not screw this up.", + "%s low on gas - %d%% remaining.", + "%s reports %d%% fuel. Window closing.", + "%s fuel down to %d%%. Get your shit together.", + "%s getting low at %d%%. Seriously move.", + "%s reports %d%%. Don't make us leave.", + "%s fuel state: %d%%. Better expedite.", + "%s running thin - %d%%. Time's up soon.", + "%s reports %d%% remaining. Get here.", + "%s fuel: %d%%. Stop dragging ass.", + "%s getting thirsty at %d%%. Hurry.", + "%s reports %d%%. Mo would have flamed out by now.", + }, + + -- Bingo Fuel (RTB) + BINGO_FUEL = { + "%s is BINGO fuel. Returning to base immediately!", + "%s has reached BINGO. RTB in progress!", + "%s calling BINGO fuel. Departing the pattern now!", + "%s is at BINGO state. Returning to base!", + "%s BINGO fuel - heading home now!", + "%s has hit BINGO. No more refueling available!", + "%s fuel critical - RTB initiated!", + "%s at BINGO state. Breaking off now!", + "%s calling BINGO. Pattern is clear!", + "%s BINGO fuel declared. Returning to base!", + "%s is BINGO. Getting the hell out!", + "%s calling BINGO fuel. We're done here!", + "%s has reached BINGO state. Leaving NOW!", + "%s BINGO declared. RTB in progress!", + "%s at BINGO fuel. Heading home!", + "%s calling BINGO. Pattern clear!", + "%s has hit BINGO. See ya!", + "%s BINGO fuel state. Departing!", + "%s is at BINGO. RTB immediately!", + "%s calling BINGO. We're out!", + "%s has reached BINGO. Breaking off!", + "%s BINGO fuel declared. Leaving!", + "%s at BINGO state. Going home!", + "%s calling BINGO. Adios!", + "%s has hit BINGO fuel. Departing now!", + "%s BINGO declared. RTB active!", + "%s is at BINGO. Bye bye!", + "%s calling BINGO fuel. Out of here!", + "%s has reached BINGO state. Later!", + "%s BINGO fuel. Heading back!", + "%s at BINGO. Returning immediately!", + "%s calling BINGO. Pattern's yours!", + "%s has hit BINGO. Going home!", + "%s BINGO declared. Leaving the AO!", + "%s is at BINGO fuel. RTB now!", + "%s calling BINGO. Peace out!", + "%s has reached BINGO. Departing!", + "%s BINGO fuel state. We're done!", + "%s at BINGO. Heading to base!", + "%s calling BINGO. Catch you later!", + "%s has hit BINGO fuel. RTB!", + "%s BINGO declared. Getting out!", + "%s is at BINGO state. Later gator!", + "%s calling BINGO. We out!", + "%s has reached BINGO. Returning!", + "%s BINGO fuel. Leaving now!", + "%s at BINGO. Going home finally!", + "%s calling BINGO. Done pumping gas!", + "%s has hit BINGO. RTB initiated!", + "%s BINGO declared. Out of here!", + "%s is at BINGO fuel. Bye!", + "%s calling BINGO. Pattern clear!", + "%s has reached BINGO state. Departing!", + "%s BINGO fuel. Heading back!", + "%s at BINGO. RTB in progress!", + "%s calling BINGO. See ya later!", + "%s has hit BINGO fuel. Leaving!", + "%s BINGO declared. Going home!", + "%s is at BINGO. Out!", + "%s calling BINGO fuel. We're outta here!", + "%s has reached BINGO. RTB now!", + "%s BINGO fuel state. Later!", + "%s at BINGO. Returning to base!", + "%s calling BINGO. Adios amigos!", + "%s has hit BINGO. Departing!", + "%s BINGO declared. Heading home!", + "%s is at BINGO fuel. Peace!", + "%s calling BINGO. We done!", + "%s has reached BINGO state. Leaving!", + "%s BINGO fuel. RTB active!", + "%s at BINGO. Going back!", + "%s calling BINGO. That's it folks!", + "%s has hit BINGO fuel. Out of here!", + "%s BINGO declared. Returning!", + "%s is at BINGO. Later suckers!", + "%s calling BINGO fuel. Bye!", + "%s has reached BINGO. Heading home!", + "%s BINGO fuel state. Departing!", + "%s at BINGO. RTB initiated!", + "%s calling BINGO. We're gone!", + "%s has hit BINGO. Leaving now!", + "%s BINGO declared. Getting out of dodge!", + "%s is at BINGO fuel. Later!", + "%s calling BINGO. Don't wait up!", + "%s has reached BINGO state. Out!", + "%s BINGO fuel. Going home!", + "%s at BINGO. Returning immediately!", + "%s calling BINGO. Unlike Mo we planned this!", + "%s has hit BINGO fuel. Peace out!", + "%s BINGO declared. Heading back!", + "%s is at BINGO. Bye felicia!", + "%s calling BINGO fuel. That's a wrap!", + "%s has reached BINGO. We're out!", + "%s BINGO fuel state. Later gator!", + "%s at BINGO. RTB right now!", + "%s calling BINGO. Smell ya later!", + "%s has hit BINGO. Departing!", + "%s BINGO declared. Mo would've flamed out!", + "%s is at BINGO fuel. Catch you on the flip side!", + }, + + -- Tanker Destroyed + DESTROYED = { + "%s has been destroyed!", + "%s is down! Aircraft lost!", + "%s has been shot down!", + "%s destroyed in combat!", + "%s is gone - aircraft destroyed!", + "%s has been lost!", + "We've lost %s!", + "%s destroyed! No survivors!", + "%s is down and out!", + "%s has been eliminated!", + "%s has been blown to hell!", + "%s is toast! Aircraft destroyed!", + "%s went down in flames!", + "%s has been obliterated!", + "%s is scrap metal now!", + "%s got smoked!", + "RIP %s. Aircraft destroyed!", + "%s has been vaporized!", + "%s is no more!", + "%s went down hard!", + "%s has been wasted!", + "%s is KIA! Aircraft lost!", + "%s got shot the fuck down!", + "%s has been annihilated!", + "%s is sleeping with the fishes!", + "%s went boom!", + "%s has been terminated!", + "%s is dead! No survivors!", + "%s got fucked up!", + "%s has ceased to exist!", + "%s went down like Mo's career!", + "%s is destroyed! Total loss!", + "%s got hammered!", + "%s has been neutralized!", + "%s is history!", + "%s went down in a ball of fire!", + "%s has been taken out!", + "%s is gone forever!", + "%s got massacred!", + "%s has been deleted!", + "%s is pushing up daisies!", + "%s went down screaming!", + "%s has been liquidated!", + "%s is scattered across the landscape!", + "%s got wrecked!", + "%s has been erased!", + "%s is no longer operational!", + "%s went down like a brick!", + "%s has been dispatched!", + "%s is gone to the great hangar in the sky!", + "%s got absolutely demolished!", + "%s has been removed from existence!", + "%s is dead as fuck!", + "%s went down faster than Mo!", + "%s has been exterminated!", + "%s is now a smoking crater!", + "%s got absolutely destroyed!", + "%s has been converted to debris!", + "%s is no longer with us!", + "%s went down in a spectacular fashion!", + "%s has been sent to hell!", + "%s is totally fucked!", + "%s got blown out of the sky!", + "%s has been utterly destroyed!", + "%s is burning on the ground!", + "%s went down like a sack of shit!", + "%s has been wiped out!", + "%s is permanently grounded!", + "%s got turned into confetti!", + "%s has been removed from service!", + "%s is now spare parts!", + "%s went down hard and fast!", + "%s has been completely destroyed!", + "%s is toast and then some!", + "%s got absolutely annihilated!", + "%s has been blown to smithereens!", + "%s is no longer flying!", + "%s went down like the Hindenburg!", + "%s has been totally wrecked!", + "%s is deader than dead!", + "%s got straight up murdered!", + "%s has been completely obliterated!", + "%s is scattered across three counties!", + "%s went down in flames like Mo's reputation!", + "%s has been catastrophically destroyed!", + "%s is now a fireball!", + "%s got absolutely smoked!", + "%s has been reduced to atoms!", + "%s is gone gone gone!", + "%s went down and ain't coming back!", + "%s has been utterly annihilated!", + "%s is now a lawn dart!", + "%s got completely fucked!", + "%s has been sent to the shadow realm!", + "%s is now in aircraft heaven!", + "%s went down faster than your hopes and dreams!", + "%s has been totally destroyed!", + "%s is no longer a thing!", + }, + + -- Hostile Fire + TAKING_FIRE = { + "%s is taking fire!", + "%s under attack!", + "%s receiving hostile fire!", + "%s taking hits!", + "%s is being engaged!", + "%s under hostile fire!", + "Hostile fire on %s!", + "%s taking enemy fire!", + "%s is under attack!", + "%s being fired upon!", + "%s is getting shot at!", + "%s under hostile fire!", + "%s taking incoming!", + "%s is being lit up!", + "%s receiving enemy fire!", + "%s getting hammered!", + "%s under attack right now!", + "%s taking fire from hostiles!", + "%s is being engaged by enemy!", + "%s getting shot to shit!", + "%s under hostile attack!", + "%s taking heavy fire!", + "%s is being targeted!", + "%s receiving hostile rounds!", + "%s getting fucked up!", + "%s under enemy fire!", + "%s taking hits from hostiles!", + "%s is being shot at!", + "%s receiving incoming fire!", + "%s getting attacked!", + "%s under hostile engagement!", + "%s taking enemy rounds!", + "%s is being hit!", + "%s receiving fire!", + "%s getting lit up!", + "%s under attack from enemy!", + "%s taking hostile fire!", + "%s is being engaged!", + "%s receiving enemy rounds!", + "%s getting shot!", + "%s under fire right now!", + "%s taking incoming rounds!", + "%s is being attacked!", + "%s receiving hostile fire!", + "%s getting hammered by hostiles!", + "%s under enemy attack!", + "%s taking fire from below!", + "%s is being targeted by enemy!", + "%s receiving heavy fire!", + "%s getting shot at hard!", + "%s under hostile fire!", + "%s taking enemy fire now!", + "%s is being engaged by hostiles!", + "%s receiving incoming!", + "%s getting attacked by enemy!", + "%s under fire from hostiles!", + "%s taking hits!", + "%s is being shot up!", + "%s receiving hostile rounds!", + "%s getting fucked up by enemy!", + "%s under hostile engagement!", + "%s taking fire!", + "%s is being hammered!", + "%s receiving enemy fire!", + "%s getting shot at!", + "%s under enemy fire!", + "%s taking hostile rounds!", + "%s is being lit up!", + "%s receiving fire from hostiles!", + "%s getting attacked hard!", + "%s under hostile attack!", + "%s taking incoming fire!", + "%s is being engaged!", + "%s receiving hostile fire!", + "%s getting shot to hell!", + "%s under fire!", + "%s taking enemy rounds!", + "%s is being targeted!", + "%s receiving fire!", + "%s getting hammered!", + "%s under attack by hostiles!", + "%s taking fire from enemy!", + "%s is being shot at!", + "%s receiving incoming rounds!", + "%s getting attacked!", + "%s under hostile fire right now!", + "%s taking hits from enemy!", + "%s is being engaged by hostiles!", + "%s receiving hostile fire!", + "%s getting lit up by enemy!", + "%s under fire from below!", + "%s taking enemy fire!", + "%s is being attacked by hostiles!", + "%s receiving fire from enemy!", + "%s getting shot at hard!", + "%s under enemy attack!", + "%s taking hostile fire unlike Mo who'd be dead!", + "%s is being hammered by hostiles!", + "%s receiving enemy rounds!", + }, + + -- Invalid Waypoint Count (too few) + TOO_FEW_WAYPOINTS = { + "Custom route requires at least %d waypoints!\nPlace markers: %s1, %s2, etc.", + "Not enough waypoints! Need at least %d.\nUse markers: %s1, %s2, etc.", + "Insufficient waypoints - need %d minimum.\nCreate markers: %s1, %s2, etc.", + "Route rejected: need %d waypoints minimum.\nPlace %s1, %s2, etc.", + "At least %d waypoints required!\nDrop markers: %s1, %s2, etc.", + "Need more waypoints - minimum is %d.\nUse: %s1, %s2, etc.", + "Route incomplete. Need %d waypoints.\nCreate: %s1, %s2, etc.", + "Waypoint count too low - need %d.\nPlace: %s1, %s2, etc.", + "Minimum %d waypoints required!\nMark: %s1, %s2, etc.", + "Can't route with less than %d points.\nAdd markers: %s1, %s2, etc.", + }, + + -- Too Many Waypoints + TOO_MANY_WAYPOINTS = { + "Too many waypoints! Maximum is %d", + "Waypoint limit exceeded. Max: %d", + "Can't route with more than %d waypoints!", + "Route rejected - too many points. Max: %d", + "Waypoint overflow! Maximum is %d", + "Too complex - max %d waypoints allowed!", + "Exceeded waypoint limit of %d!", + "Route too long! Maximum: %d waypoints", + "Cannot accept more than %d waypoints!", + "Waypoint maximum is %d. Route rejected.", + }, + + -- No RTB Airbase Found + NO_RTB_AIRBASE = { + "No friendly airbase found for RTB!", + "Cannot locate RTB destination!", + "No suitable airbase available for recovery!", + "Unable to find friendly base for RTB!", + "No recovery airfield located!", + "RTB destination unavailable!", + "Cannot identify friendly airbase for return!", + "No airbase in range for RTB!", + "Recovery base not found!", + "Unable to locate RTB airfield!", + }, + -- EMERGENCY SPAWN MESSAGES (100 total) + EMERGENCY_SPAWN = { + "EMERGENCY: %s launching immediately!", + "PRIORITY LAUNCH: %s is scrambling now!", + "EMERGENCY TANKER: %s departing expedited!", + "URGENT: %s is launching on priority status!", + "EMERGENCY RESPONSE: %s airborne ASAP!", + "PRIORITY: %s scrambling for emergency fuel!", + "EMERGENCY: %s launching hot!", + "URGENT LAUNCH: %s is wheels up now!", + "EMERGENCY TANKER: %s responding immediately!", + "PRIORITY STATUS: %s emergency launch in progress!", + "EMERGENCY! %s wheels up NOW!", + "SCRAMBLE SCRAMBLE: %s launching immediately!", + "PRIORITY LAUNCH: %s getting airborne right now!", + "EMERGENCY TANKER: %s departing hot and fast!", + "URGENT: %s scrambling for emergency refuel!", + "PRIORITY: %s launching on expedited status!", + "EMERGENCY RESPONSE: %s airborne immediately!", + "URGENT LAUNCH: %s departing NOW!", + "EMERGENCY: %s getting up there ASAP!", + "PRIORITY STATUS: %s scrambling right now!", + "EMERGENCY TANKER: %s wheels up immediately!", + "URGENT: %s launching on priority!", + "SCRAMBLE: %s departing expedited!", + "EMERGENCY: %s getting airborne fast!", + "PRIORITY LAUNCH: %s launching NOW!", + "URGENT TANKER: %s scrambling immediately!", + "EMERGENCY: %s departing hot!", + "PRIORITY: %s wheels up ASAP!", + "URGENT LAUNCH: %s airborne right now!", + "EMERGENCY TANKER: %s launching immediately!", + "SCRAMBLE SCRAMBLE: %s getting up there now!", + "PRIORITY: %s launching on emergency status!", + "URGENT: %s departing immediately!", + "EMERGENCY: %s scrambling for urgent refuel!", + "PRIORITY LAUNCH: %s wheels up hot!", + "URGENT TANKER: %s airborne ASAP!", + "EMERGENCY: %s launching right now!", + "PRIORITY: %s scrambling expedited!", + "URGENT LAUNCH: %s departing NOW NOW NOW!", + "EMERGENCY TANKER: %s getting airborne fast!", + "PRIORITY STATUS: %s launching immediately!", + "URGENT: %s wheels up on priority!", + "EMERGENCY: %s scrambling now!", + "PRIORITY LAUNCH: %s departing fast!", + "URGENT TANKER: %s launching ASAP!", + "EMERGENCY: %s airborne immediately!", + "PRIORITY: %s scrambling hot!", + "URGENT LAUNCH: %s wheels up right now!", + "EMERGENCY TANKER: %s departing expedited!", + "PRIORITY: %s launching on urgent status!", + "URGENT: %s getting airborne now!", + "EMERGENCY SCRAMBLE: %s departing immediately!", + "PRIORITY TANKER: %s wheels up fast!", + "URGENT: %s launching right now!", + "EMERGENCY: %s airborne ASAP!", + "PRIORITY LAUNCH: %s scrambling now!", + "URGENT TANKER: %s departing hot!", + "EMERGENCY: %s wheels up immediately!", + "PRIORITY: %s getting airborne fast!", + "URGENT LAUNCH: %s scrambling ASAP!", + "EMERGENCY TANKER: %s launching on priority!", + "PRIORITY: %s departing right now!", + "URGENT: %s airborne expedited!", + "EMERGENCY: %s scrambling immediately!", + "PRIORITY LAUNCH: %s wheels up NOW!", + "URGENT TANKER: %s launching fast!", + "EMERGENCY: %s departing ASAP!", + "PRIORITY: %s airborne right now!", + "URGENT LAUNCH: %s scrambling hot!", + "EMERGENCY TANKER: %s wheels up expedited!", + "PRIORITY: %s launching immediately!", + "URGENT: %s getting airborne ASAP!", + "EMERGENCY: %s scrambling fast!", + "PRIORITY LAUNCH: %s departing NOW!", + "URGENT TANKER: %s wheels up right now!", + "EMERGENCY: %s airborne hot!", + "PRIORITY: %s scrambling ASAP!", + "URGENT LAUNCH: %s launching immediately!", + "EMERGENCY TANKER: %s departing fast!", + "PRIORITY: %s wheels up expedited!", + "URGENT: %s airborne NOW!", + "EMERGENCY: %s launching hot and fast!", + "PRIORITY LAUNCH: %s scrambling expedited!", + "URGENT TANKER: %s departing immediately!", + "EMERGENCY: %s wheels up ASAP!", + "PRIORITY: %s getting airborne now!", + "URGENT LAUNCH: %s airborne fast!", + "EMERGENCY TANKER: %s scrambling NOW!", + "PRIORITY: %s launching expedited!", + "URGENT: %s departing hot!", + "EMERGENCY: %s airborne immediately unlike Mo!", + "PRIORITY LAUNCH: %s wheels up faster than Mo!", + "URGENT TANKER: %s scrambling (Mo couldn't do this)!", + "EMERGENCY: %s launching while Mo watches!", + "PRIORITY: %s departing - Mo take notes!", + "URGENT LAUNCH: %s airborne (unlike Mo's attempts)!", + "EMERGENCY TANKER: %s scrambling successfully!", + "PRIORITY: %s wheels up for real!", + "URGENT: %s launching like professionals do!", + }, +} + +--- Get a random message from a category +--- @param category string Message category key +--- @param ... any Format arguments for string.format +--- @return string Formatted message +local function GetRandomMessage(category, ...) + local pool = TANKER_MESSAGES[category] + if not pool or #pool == 0 then + return "Message unavailable" + end + + local template = pool[math.random(1, #pool)] + + if select("#", ...) > 0 then + return string.format(template, ...) + else + return template + end +end + +-- ============================================================================ +-- UTILITY FUNCTIONS +-- ============================================================================ + +--- Update menu state based on tanker availability +local function UpdateTankerMenus() + if MENU_KC135_LAUNCH then + if TANKER_STATE.KC135.active then + MENU_KC135_LAUNCH:Remove() + MENU_KC135_LAUNCH = nil + elseif not MENU_KC135_LAUNCH then + MENU_KC135_LAUNCH = MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + "Launch " .. TANKER_CONFIG.KC135.displayName, + MENU_TANKER_ROOT, + SpawnTanker + ) + end + end + + if MENU_KC135_MPRS_LAUNCH then + if TANKER_STATE.KC135_MPRS.active then + MENU_KC135_MPRS_LAUNCH:Remove() + MENU_KC135_MPRS_LAUNCH = nil + elseif not MENU_KC135_MPRS_LAUNCH then + MENU_KC135_MPRS_LAUNCH = MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + "Launch " .. TANKER_CONFIG.KC135_MPRS.displayName, + MENU_TANKER_ROOT, + SpawnTankerMPRS + ) + end + end +end + +--- Announce tanker information to coalition +local function AnnounceTankerInfo(config, spawned) + local msg = GetRandomMessage("SPAWN_SUCCESS", config.displayName) .. "\n" + + if config.tacan then + msg = msg .. string.format("TACAN: %s\n", config.tacan) + end + + if config.frequency then + msg = msg .. string.format("Radio: %s MHz", config.frequency) + end + + MESSAGE:New(msg, 20):ToBlue() + env.info(string.format("[TANKER] %s spawned successfully", config.displayName)) +end + +--- Monitor tanker fuel levels +local function MonitorTankerFuel(stateKey, config) + return function() + local state = TANKER_STATE[stateKey] + + if not state.active or not state.group then + return + end + + -- Check if group still exists + if not state.group:IsAlive() then + return + end + + local fuelPercent = state.group:GetFuel() * 100 + + -- Bingo fuel check + if fuelPercent <= config.fuelBingoPercent and not state.bingoWarned then + MESSAGE:New(GetRandomMessage("BINGO_FUEL", config.displayName), 15, "WARNING"):ToBlue() + state.bingoWarned = true + env.info(string.format("[TANKER] %s bingo fuel: %.1f%%", config.displayName, fuelPercent)) + + -- Low fuel warning + elseif fuelPercent <= config.fuelWarningPercent and not state.fuelWarned then + MESSAGE:New(GetRandomMessage("LOW_FUEL", config.displayName, math.floor(fuelPercent)), 15):ToBlue() + state.fuelWarned = true + env.info(string.format("[TANKER] %s low fuel warning: %.1f%%", config.displayName, fuelPercent)) + end + end +end + +--- Start (or restart) the fuel monitor scheduler for a tanker +local function StartFuelMonitor(stateKey, config) + local state = TANKER_STATE[stateKey] + if not state then + return + end + + if state.fuelMonitor then + state.fuelMonitor:Stop() + state.fuelMonitor = nil + end + + state.fuelMonitor = SCHEDULER:New( + nil, + MonitorTankerFuel(stateKey, config), + {}, + FUEL_CHECK_INTERVAL, + FUEL_CHECK_INTERVAL + ) +end + +--- Schedule auto-respawn after tanker loss +local function ScheduleRespawn(stateKey, config, spawnFunc) + local state = TANKER_STATE[stateKey] + + -- Cancel existing respawn if any + if state.respawnScheduler then + state.respawnScheduler:Stop() + end + + local countdown = config.respawnDelay + + MESSAGE:New(string.format("%s will respawn in %d seconds", + config.displayName, countdown), 10):ToBlue() + + -- Respawn scheduler + state.respawnScheduler = SCHEDULER:New(nil, function() + env.info(string.format("[TANKER] Auto-respawning %s", config.displayName)) + spawnFunc() + end, {}, config.respawnDelay) +end + +--- Clean up tanker state +local function CleanupTankerState(stateKey) + local state = TANKER_STATE[stateKey] + + state.active = false + state.group = nil + state.fuelWarned = false + state.bingoWarned = false + + if state.fuelMonitor then + state.fuelMonitor:Stop() + state.fuelMonitor = nil + end + + if state.respawnScheduler then + state.respawnScheduler:Stop() + state.respawnScheduler = nil + end +end + +-- ============================================================================ +-- CUSTOM ROUTE FUNCTIONS +-- ============================================================================ + +--- Parse waypoint marker text for altitude and speed overrides +--- Supports formats: SHELL1, SHELL1:FL220, SHELL1:FL220:SP330, SHELL1::SP300, SHELL1:RTB +--- @param markerText string The text from the map marker +--- @param defaultAlt number Default altitude in feet +--- @param defaultSpeed number Default speed in knots +--- @return table Parsed waypoint data {altitude, speed, rtb, isValid} +local function ParseWaypointMarker(markerText, defaultAlt, defaultSpeed) + local result = { + altitude = defaultAlt, + speed = defaultSpeed, + rtb = false, + isValid = true, + originalText = markerText + } + + -- Split by colon + local parts = {} + for part in string.gmatch(markerText, "[^:]+") do + table.insert(parts, part) + end + + -- Check for RTB command + for _, part in ipairs(parts) do + if string.upper(part) == "RTB" then + result.rtb = true + return result + end + end + + -- Parse FL (Flight Level) + for _, part in ipairs(parts) do + local fl = string.match(part, "FL(%d+)") + if fl then + result.altitude = tonumber(fl) * 100 -- Convert FL to feet + end + end + + -- Parse SP (Speed) + for _, part in ipairs(parts) do + local sp = string.match(part, "SP(%d+)") + if sp then + result.speed = tonumber(sp) + end + end + + return result +end + +--- Scan map for waypoint markers matching callsign pattern +--- @param callsign string The callsign prefix to search for (e.g., "SHELL", "ARCO") +--- @return table Array of waypoint data sorted by sequence number +local function ScanForWaypointMarkers(callsign) + local waypoints = {} + local markerIds = {} + + -- Iterate through all possible marker IDs (DCS markers are numbered) + -- We'll scan up to 1000 markers (should be more than enough) + for i = 1, 1000 do + local markerData = world.getMarkPanels() + if markerData and markerData[i] then + local marker = markerData[i] + local markerText = marker.text + + if markerText then + -- Check if marker matches pattern: CALLSIGN + number + local upperText = string.upper(markerText) + local upperCallsign = string.upper(callsign) + local sequence = string.match(upperText, "^" .. upperCallsign .. "(%d+)") + + if sequence then + local seqNum = tonumber(sequence) + local pos = marker.pos + + table.insert(waypoints, { + sequence = seqNum, + coordinate = COORDINATE:NewFromVec3(pos), + markerId = marker.idx, + markerText = markerText + }) + + table.insert(markerIds, marker.idx) + + env.info(string.format("[TANKER] Found waypoint marker: %s at seq %d (ID: %d)", + markerText, seqNum, marker.idx)) + end + end + end + end + + -- Sort by sequence number + table.sort(waypoints, function(a, b) return a.sequence < b.sequence end) + + return waypoints, markerIds +end + +-- ============================================================================ + +--- Spawn a tanker directly from config (no Mission Editor template required) +--- @param config table Tanker configuration +--- @param coord COORDINATE Where to spawn +--- @param heading number Initial heading in degrees +--- @return GROUP The spawned tanker group +local function SpawnTankerFromConfig(config, coord, heading) + -- Generate unique group/unit IDs + local groupId = math.random(10000, 99999) + local unitId = math.random(10000, 99999) + + -- Ensure we have valid altitude (coord.y is altitude in meters MSL) + local spawnAlt = coord.y + env.info(string.format("[TANKER] Spawn altitude: %.1f meters (FL%03d)", spawnAlt, spawnAlt * 3.28084 / 100)) + + -- Create group data structure + local groupData = { + ["visible"] = false, + ["taskSelected"] = true, + ["route"] = { + ["points"] = { + [1] = { + ["alt"] = spawnAlt, + ["type"] = "Turning Point", + ["action"] = "Turning Point", + ["alt_type"] = "BARO", + ["speed"] = config.defaultSpeed * 0.514444, + ["task"] = { + ["id"] = "ComboTask", + ["params"] = { + ["tasks"] = { + [1] = { + ["id"] = "Tanker", + ["params"] = {} + } + } + } + }, + ["x"] = coord.x, + ["y"] = coord.z, + } + } + }, + ["hidden"] = false, + ["units"] = { + [1] = { + ["alt"] = spawnAlt, + ["alt_type"] = "BARO", + ["livery_id"] = config.livery, + ["skill"] = "High", + ["speed"] = config.defaultSpeed * 0.514444, + ["type"] = config.aircraftType, + ["unitId"] = unitId, + ["psi"] = -heading, -- Negative for correct heading + ["unitName"] = config.unitName, + ["x"] = coord.x, + ["y"] = coord.z, + ["heading"] = math.rad(heading), + ["onboard_num"] = "010", + }, + }, + ["groupId"] = groupId, + ["y"] = coord.z, + ["x"] = coord.x, + ["name"] = config.groupName, + ["task"] = "Refueling", + } + + -- Spawn the group using coalition.addGroup + local spawnedGroup = coalition.addGroup(country.id.USA, Group.Category.AIRPLANE, groupData) + + if spawnedGroup then + env.info(string.format("[TANKER] Spawned %s (ID: %d)", config.groupName, groupId)) + return GROUP:Find(spawnedGroup:getName()) + else + env.error(string.format("[TANKER] Failed to spawn %s", config.groupName)) + return nil + end +end + +--- Ensure default spawns immediately enter a holding pattern so they do not RTB +--- @param group GROUP The spawned tanker group +--- @param coord COORDINATE Center point for the orbit +--- @param config table Tanker configuration for speed/altitude +local function ApplyDefaultOrbitRoute(group, coord, config) + if not group or not coord or not config then + return + end + + local orbitCenter = coord:SetAltitude(config.defaultAltitude * 0.3048, true) + local orbitWP = orbitCenter:WaypointAirTurningPoint( + COORDINATE.WaypointAltType.BARO, + config.defaultSpeed * 0.514444, + config.defaultAltitude * 0.3048, + {}, + "DEFAULT-ORBIT" + ) + + orbitWP.task = { + id = "ComboTask", + params = { + tasks = { + { + id = "Tanker", + params = {} + }, + { + id = "Orbit", + params = { + pattern = "Circle", + speed = config.defaultSpeed * 0.514444, + altitude = config.defaultAltitude * 0.3048, + point = { + x = orbitCenter.x, + y = orbitCenter.z + } + } + } + } + } + } + + group:Route({ orbitWP }) + env.info(string.format("[TANKER] Applied default orbit for %s", config.displayName)) +end + +--- Create custom route tanker spawn +--- @param callsign string Callsign prefix used for markers +--- @param config table Tanker configuration +--- @param stateKey string State key for tracking +--- @param isEmergency boolean Whether this is an emergency spawn +--- @return boolean Success status +local function SpawnCustomRouteTanker(callsign, config, stateKey, isEmergency) + local state = TANKER_STATE[stateKey] + + -- Check if already active + if state.active then + MESSAGE:New(GetRandomMessage("ALREADY_ACTIVE", config.displayName), 10):ToBlue() + return false + end + + -- Scan for waypoint markers + local waypoints, markerIds = ScanForWaypointMarkers(callsign) + + -- Validate waypoint count + if #waypoints < ROUTE_CONFIG.minWaypoints then + MESSAGE:New(GetRandomMessage("TOO_FEW_WAYPOINTS", + ROUTE_CONFIG.minWaypoints, callsign, callsign), 15, "ERROR"):ToBlue() + return false + end + + if #waypoints > ROUTE_CONFIG.maxWaypoints then + MESSAGE:New(GetRandomMessage("TOO_MANY_WAYPOINTS", + ROUTE_CONFIG.maxWaypoints), 15, "ERROR"):ToBlue() + return false + end + + -- Build route description and validate waypoints + local routeDesc = "" + local routePoints = {} + local hasRTB = false + + for i, wp in ipairs(waypoints) do + local parsed = ParseWaypointMarker(wp.markerText, config.defaultAltitude, config.defaultSpeed) + + if parsed.rtb then + hasRTB = true + -- Find nearest friendly airbase from last waypoint position + local lastPos = #routePoints > 0 and routePoints[#routePoints].coord or wp.coordinate + local nearestAirbase = lastPos:GetClosestAirbase(Airbase.Category.AIRDROME, coalition.side.BLUE) + + if nearestAirbase then + local airbaseName = nearestAirbase:GetName() + local airbaseCoord = nearestAirbase:GetCoordinate() + routeDesc = routeDesc .. string.format("\n WP%d: RTB to %s", i, airbaseName) + + table.insert(routePoints, { + coord = airbaseCoord, + altitude = 0, -- Will land + speed = parsed.speed, + rtb = true, + airbase = nearestAirbase, + airbaseName = airbaseName + }) + + env.info(string.format("[TANKER] RTB destination: %s", airbaseName)) + else + routeDesc = routeDesc .. string.format("\n WP%d: RTB (no airbase found)", i) + env.warning("[TANKER] No friendly airbase found for RTB") + end + break -- RTB is terminal command + else + routeDesc = routeDesc .. string.format("\n WP%d: FL%03d @ %d kts", + i, math.floor(parsed.altitude / 100), parsed.speed) + + table.insert(routePoints, { + coord = wp.coordinate, + altitude = parsed.altitude, + speed = parsed.speed, + rtb = false + }) + end + end + + -- Confirm route to player + local emergencyText = isEmergency and " [EMERGENCY]" or "" + local routeMsg = GetRandomMessage("ROUTE_ACCEPTED", config.displayName, #routePoints, routeDesc) + if isEmergency then + routeMsg = GetRandomMessage("EMERGENCY_SPAWN", config.displayName) .. "\n" .. routeMsg + end + MESSAGE:New(routeMsg, 20):ToBlue() + + env.info(string.format("[TANKER] Spawning %s with custom route: %d waypoints", + config.displayName, #routePoints)) + + -- Debug: log route point data + for i, rp in ipairs(routePoints) do + env.info(string.format("[TANKER] RoutePoint %d: coord=%s, alt=%.0f, spd=%.0f, rtb=%s", + i, tostring(rp.coord), rp.altitude, rp.speed, tostring(rp.rtb))) + end + + -- Delete markers if configured + if ROUTE_CONFIG.deleteMarkersAfterUse then + for _, markerId in ipairs(markerIds) do + trigger.action.removeMark(markerId) + end + env.info(string.format("[TANKER] Deleted %d waypoint markers", #markerIds)) + end + + -- Spawn tanker with custom route + -- Calculate initial heading + local headingCoord + if routePoints[2] and routePoints[2].coord then + headingCoord = routePoints[2].coord + else + headingCoord = routePoints[1].coord + end + + local initialHeading = routePoints[1].coord:HeadingTo(headingCoord) + + -- Set the spawn coordinate with correct altitude (convert feet to meters) + local spawnCoord = routePoints[1].coord:SetAltitude(routePoints[1].altitude * 0.3048) + + local spawnedGroup = SpawnTankerFromConfig( + config, + spawnCoord, + initialHeading + ) + + if not spawnedGroup then + MESSAGE:New(GetRandomMessage("SPAWN_FAILURE", config.displayName), 10, "ERROR"):ToBlue() + return false + end + + -- Route the group through all waypoints + local taskRoute = {} + for i, rp in ipairs(routePoints) do + local wp + + -- RTB waypoint - land at airbase + if rp.rtb and rp.airbase then + wp = rp.coord:WaypointAirLanding( + rp.speed * 0.514444, + rp.airbase:GetDCSObject(), + {}, + "RTB" + ) + else + -- Normal waypoint + wp = rp.coord:WaypointAirFlyOverPoint( + COORDINATE.WaypointAltType.BARO, + rp.speed * 0.514444, -- Convert knots to m/s + rp.altitude * 0.3048, -- Convert feet to meters + {}, + "WP" .. i + ) + + -- Add tanker task to all waypoints + wp.task = { + id = "ComboTask", + params = { + tasks = { + { + id = "Tanker", + params = {} + } + } + } + } + end + + table.insert(taskRoute, wp) + end + + -- If last waypoint is not RTB, loop back to first waypoint to create continuous patrol + if not hasRTB and #routePoints > 1 then + local firstPoint = routePoints[1] + local loopWP = firstPoint.coord:WaypointAirFlyOverPoint( + COORDINATE.WaypointAltType.BARO, + firstPoint.speed * 0.514444, + firstPoint.altitude * 0.3048, + {}, + "LOOP-WP1" + ) + + -- Add tanker task to loop waypoint + loopWP.task = { + id = "ComboTask", + params = { + tasks = { + { + id = "Tanker", + params = {} + } + } + } + } + + table.insert(taskRoute, loopWP) + env.info(string.format("[TANKER] Added loop waypoint back to WP1 for continuous patrol")) + elseif not hasRTB and #routePoints == 1 then + -- Single waypoint - add circular orbit pattern + local singlePoint = routePoints[1] + local orbitWP = singlePoint.coord:WaypointAirTurningPoint( + COORDINATE.WaypointAltType.BARO, + singlePoint.speed * 0.514444, + singlePoint.altitude * 0.3048, + {}, + "ORBIT" + ) + orbitWP.task = { + id = "ComboTask", + params = { + tasks = { + { + id = "Tanker", + params = {} + }, + { + id = "Orbit", + params = { + pattern = "Circle", + speed = singlePoint.speed * 0.514444, + altitude = singlePoint.altitude * 0.3048 + } + } + } + } + } + table.insert(taskRoute, orbitWP) + env.info(string.format("[TANKER] Single waypoint - added circular orbit pattern")) + end + + -- Apply route to group + spawnedGroup:Route(taskRoute) + + -- Update state + local state = TANKER_STATE[stateKey] + state.active = true + state.group = spawnedGroup + state.fuelWarned = false + state.bingoWarned = false + + -- Announce spawn with details + AnnounceTankerInfo(config, true) + + -- Start fuel monitoring + StartFuelMonitor(stateKey, config) + + -- Update menus + UpdateTankerMenus() + + return true +end + +-- ============================================================================ +-- EVENT HANDLER +-- ============================================================================ + +BlueTankerEventHandler = EVENTHANDLER:New() + +function BlueTankerEventHandler:OnEventBirth(EventData) + local groupName = EventData.IniDCSGroupName + + if groupName and string.find(groupName, "TANKER 135") then + env.info(string.format("[TANKER] Birth event: %s", groupName)) + + -- Determine which tanker spawned + local stateKey, config + if string.find(groupName, "MPRS") then + stateKey = "KC135_MPRS" + config = TANKER_CONFIG.KC135_MPRS + else + stateKey = "KC135" + config = TANKER_CONFIG.KC135 + end + + -- Update state + local state = TANKER_STATE[stateKey] + state.active = true + state.group = GROUP:FindByName(groupName) + state.fuelWarned = false + state.bingoWarned = false + + -- Announce spawn with details + AnnounceTankerInfo(config, true) + + -- Start fuel monitoring + StartFuelMonitor(stateKey, config) + + -- Update menus + UpdateTankerMenus() + end +end + +function BlueTankerEventHandler:OnEventDead(EventData) + local groupName = EventData.IniDCSGroupName + + if groupName and string.find(groupName, "TANKER 135") then + env.info(string.format("[TANKER] Dead event: %s", groupName)) + + -- Determine which tanker died + local stateKey, config, spawnFunc + if string.find(groupName, "MPRS") then + stateKey = "KC135_MPRS" + config = TANKER_CONFIG.KC135_MPRS + spawnFunc = SpawnTankerMPRS + else + stateKey = "KC135" + config = TANKER_CONFIG.KC135 + spawnFunc = SpawnTanker + end + + MESSAGE:New(GetRandomMessage("DESTROYED", config.displayName), + 15, "ALERT"):ToBlue() + + -- Clean up and schedule respawn + CleanupTankerState(stateKey) + ScheduleRespawn(stateKey, config, spawnFunc) + + -- Update menus + UpdateTankerMenus() + end +end + +function BlueTankerEventHandler:OnEventCrash(EventData) + -- Treat crash same as dead + self:OnEventDead(EventData) +end + +function BlueTankerEventHandler:OnEventEngineShutdown(EventData) + local groupName = EventData.IniDCSGroupName + + if groupName and string.find(groupName, "TANKER 135") then + env.info(string.format("[TANKER] Engine shutdown event: %s", groupName)) + + -- Determine which tanker + local stateKey, config, spawnFunc + if string.find(groupName, "MPRS") then + stateKey = "KC135_MPRS" + config = TANKER_CONFIG.KC135_MPRS + spawnFunc = SpawnTankerMPRS + else + stateKey = "KC135" + config = TANKER_CONFIG.KC135 + spawnFunc = SpawnTanker + end + + MESSAGE:New(string.format("%s has returned to base", config.displayName), + 10):ToBlue() + + -- Clean up and schedule respawn + CleanupTankerState(stateKey) + ScheduleRespawn(stateKey, config, spawnFunc) + + -- Update menus + UpdateTankerMenus() + end +end + +function BlueTankerEventHandler:OnEventHit(EventData) + local groupName = EventData.IniDCSGroupName + + if groupName and string.find(groupName, "TANKER 135") then + local config = string.find(groupName, "MPRS") and TANKER_CONFIG.KC135_MPRS or TANKER_CONFIG.KC135 + + MESSAGE:New(GetRandomMessage("TAKING_FIRE", config.displayName), + 15, "WARNING"):ToBlue() + + env.info(string.format("[TANKER] %s hit by hostile fire", config.displayName)) + end +end + +-- ============================================================================ +-- SPAWN OBJECTS AND FUNCTIONS +-- ============================================================================ + +-- Function to spawn KC-135 +function SpawnTanker() + if TANKER_STATE.KC135.active then + MESSAGE:New(GetRandomMessage("ALREADY_ACTIVE", TANKER_CONFIG.KC135.displayName), 10):ToBlue() + return + end + + env.info("[TANKER] Spawning KC-135") + local spawnedGroup = SpawnTankerFromConfig( + TANKER_CONFIG.KC135, + DEFAULT_SPAWN_COORD, + 0 -- heading north + ) + + if spawnedGroup then + ApplyDefaultOrbitRoute(spawnedGroup, DEFAULT_SPAWN_COORD, TANKER_CONFIG.KC135) + TANKER_STATE.KC135.active = true + TANKER_STATE.KC135.group = spawnedGroup + AnnounceTankerInfo(TANKER_CONFIG.KC135, true) + + -- Start fuel monitoring + StartFuelMonitor("KC135", TANKER_CONFIG.KC135) + + UpdateTankerMenus() + else + MESSAGE:New(GetRandomMessage("SPAWN_FAILURE", TANKER_CONFIG.KC135.displayName), 10, "ERROR"):ToBlue() + end +end + +-- Function to spawn KC-135 MPRS +function SpawnTankerMPRS() + if TANKER_STATE.KC135_MPRS.active then + MESSAGE:New(GetRandomMessage("ALREADY_ACTIVE", TANKER_CONFIG.KC135_MPRS.displayName), 10):ToBlue() + return + end + + env.info("[TANKER] Spawning KC-135 MPRS") + local spawnedGroup = SpawnTankerFromConfig( + TANKER_CONFIG.KC135_MPRS, + DEFAULT_SPAWN_COORD, + 0 -- heading north + ) + + if spawnedGroup then + ApplyDefaultOrbitRoute(spawnedGroup, DEFAULT_SPAWN_COORD, TANKER_CONFIG.KC135_MPRS) + TANKER_STATE.KC135_MPRS.active = true + TANKER_STATE.KC135_MPRS.group = spawnedGroup + AnnounceTankerInfo(TANKER_CONFIG.KC135_MPRS, true) + + -- Start fuel monitoring + StartFuelMonitor("KC135_MPRS", TANKER_CONFIG.KC135_MPRS) + + UpdateTankerMenus() + else + MESSAGE:New(GetRandomMessage("SPAWN_FAILURE", TANKER_CONFIG.KC135_MPRS.displayName), 10, "ERROR"):ToBlue() + end +end + +-- Function to spawn KC-135 with custom route +function SpawnCustomTanker() + SpawnCustomRouteTanker( + TANKER_CONFIG.KC135.callsign, + TANKER_CONFIG.KC135, + "KC135", + false + ) +end + +-- Function to spawn KC-135 MPRS with custom route +function SpawnCustomTankerMPRS() + SpawnCustomRouteTanker( + TANKER_CONFIG.KC135_MPRS.callsign, + TANKER_CONFIG.KC135_MPRS, + "KC135_MPRS", + false + ) +end + +-- Function to spawn emergency KC-135 with custom route +function SpawnEmergencyTanker() + -- Use emergency respawn delay + local originalDelay = TANKER_CONFIG.KC135.respawnDelay + TANKER_CONFIG.KC135.respawnDelay = TANKER_CONFIG.KC135.emergencyRespawnDelay + + local success = SpawnCustomRouteTanker( + TANKER_CONFIG.KC135.callsign, + TANKER_CONFIG.KC135, + "KC135", + true + ) + + -- Restore original delay + TANKER_CONFIG.KC135.respawnDelay = originalDelay + + return success +end + +-- Function to spawn emergency KC-135 MPRS with custom route +function SpawnEmergencyTankerMPRS() + local originalDelay = TANKER_CONFIG.KC135_MPRS.respawnDelay + TANKER_CONFIG.KC135_MPRS.respawnDelay = TANKER_CONFIG.KC135_MPRS.emergencyRespawnDelay + + local success = SpawnCustomRouteTanker( + TANKER_CONFIG.KC135_MPRS.callsign, + TANKER_CONFIG.KC135_MPRS, + "KC135_MPRS", + true + ) + + TANKER_CONFIG.KC135_MPRS.respawnDelay = originalDelay + + return success +end + +-- Function to display tanker status +function ShowTankerStatus() + local msg = "=== TANKER STATUS ===\n\n" + + -- KC-135 Status + local kc135State = TANKER_STATE.KC135 + if kc135State.active and kc135State.group and kc135State.group:IsAlive() then + local fuel = kc135State.group:GetFuel() * 100 + local coord = kc135State.group:GetCoordinate() + local alt = coord:GetLandHeight() + coord.y + msg = msg .. string.format("%s: ACTIVE\n", TANKER_CONFIG.KC135.displayName) + msg = msg .. string.format(" Fuel: %.0f%%\n", fuel) + msg = msg .. string.format(" Altitude: FL%03d\n", math.floor(alt * 3.28084 / 100)) + if TANKER_CONFIG.KC135.tacan then + msg = msg .. string.format(" TACAN: %s\n", TANKER_CONFIG.KC135.tacan) + end + if TANKER_CONFIG.KC135.frequency then + msg = msg .. string.format(" Radio: %s MHz\n", TANKER_CONFIG.KC135.frequency) + end + else + msg = msg .. string.format("%s: NOT ACTIVE\n", TANKER_CONFIG.KC135.displayName) + end + + msg = msg .. "\n" + + -- KC-135 MPRS Status + local mprsState = TANKER_STATE.KC135_MPRS + if mprsState.active and mprsState.group and mprsState.group:IsAlive() then + local fuel = mprsState.group:GetFuel() * 100 + local coord = mprsState.group:GetCoordinate() + local alt = coord:GetLandHeight() + coord.y + msg = msg .. string.format("%s: ACTIVE\n", TANKER_CONFIG.KC135_MPRS.displayName) + msg = msg .. string.format(" Fuel: %.0f%%\n", fuel) + msg = msg .. string.format(" Altitude: FL%03d\n", math.floor(alt * 3.28084 / 100)) + if TANKER_CONFIG.KC135_MPRS.tacan then + msg = msg .. string.format(" TACAN: %s\n", TANKER_CONFIG.KC135_MPRS.tacan) + end + if TANKER_CONFIG.KC135_MPRS.frequency then + msg = msg .. string.format(" Radio: %s MHz\n", TANKER_CONFIG.KC135_MPRS.frequency) + end + else + msg = msg .. string.format("%s: NOT ACTIVE\n", TANKER_CONFIG.KC135_MPRS.displayName) + end + + MESSAGE:New(msg, 25):ToBlue() +end + +-- Function to show custom route help +function ShowCustomRouteHelp() + local msg = "╔════════════════════════════════════════════╗\n" + msg = msg .. "║ TANKER MANAGEMENT SYSTEM - GUIDE ║\n" + msg = msg .. "╚════════════════════════════════════════════╝\n\n" + + msg = msg .. "━━━ QUICK START ━━━\n\n" + msg = msg .. "1. SIMPLE SPAWN:\n" + msg = msg .. " • F10 → Tanker Management → Launch KC-135\n" + msg = msg .. " • Tanker spawns at default location (FL220)\n" + msg = msg .. " • Automatically orbits and provides refueling\n\n" + + msg = msg .. "2. CUSTOM ROUTE SPAWN:\n" + msg = msg .. " • Place numbered F10 map markers\n" + msg = msg .. " • Launch from Custom Route menu\n" + msg = msg .. " • Tanker follows your waypoints\n\n" + + msg = msg .. "━━━ AVAILABLE TANKERS ━━━\n\n" + msg = msg .. string.format("• %s (SHELL)\n", TANKER_CONFIG.KC135.displayName) + msg = msg .. string.format(" TACAN: %s | Radio: %s MHz\n", + TANKER_CONFIG.KC135.tacan or "N/A", TANKER_CONFIG.KC135.frequency or "N/A") + msg = msg .. string.format(" Marker Prefix: %s\n\n", TANKER_CONFIG.KC135.callsign) + + msg = msg .. string.format("• %s (ARCO)\n", TANKER_CONFIG.KC135_MPRS.displayName) + msg = msg .. string.format(" TACAN: %s | Radio: %s MHz\n", + TANKER_CONFIG.KC135_MPRS.tacan or "N/A", TANKER_CONFIG.KC135_MPRS.frequency or "N/A") + msg = msg .. string.format(" Marker Prefix: %s\n\n", TANKER_CONFIG.KC135_MPRS.callsign) + + msg = msg .. "━━━ CUSTOM ROUTE MARKERS ━━━\n\n" + msg = msg .. "BASIC USAGE:\n" + msg = msg .. " Place markers in sequence: SHELL1, SHELL2, SHELL3\n" + msg = msg .. " Minimum 2 waypoints required\n" + msg = msg .. " Defaults: FL220 @ 330 knots\n\n" + + msg = msg .. "ADVANCED SYNTAX:\n" + msg = msg .. " SHELL1:FL180 → Altitude override\n" + msg = msg .. " SHELL2::SP300 → Speed override\n" + msg = msg .. " SHELL3:FL200:SP280 → Both overrides\n" + msg = msg .. " SHELL4:RTB → Return to nearest base\n\n" + + msg = msg .. "EXAMPLES:\n" + msg = msg .. " Simple 3-point orbit:\n" + msg = msg .. " ARCO1, ARCO2, ARCO3\n\n" + msg = msg .. " High altitude route with RTB:\n" + msg = msg .. " SHELL1:FL280, SHELL2:FL280, SHELL3:RTB\n\n" + msg = msg .. " Low-level tanker track:\n" + msg = msg .. " ARCO1:FL120:SP250, ARCO2:FL120:SP250\n\n" + + msg = msg .. "━━━ REROUTING ACTIVE TANKERS ━━━\n\n" + msg = msg .. "Change an active tanker's route mid-mission:\n" + msg = msg .. " 1. Place new waypoint markers\n" + msg = msg .. " 2. F10 → Custom Route → Reroute Active Tanker\n" + msg = msg .. " 3. Tanker immediately follows new route\n\n" + + msg = msg .. "Use cases:\n" + msg = msg .. " • Reposition for different theater\n" + msg = msg .. " • Avoid threat areas\n" + msg = msg .. " • Send tanker home (use :RTB)\n\n" + + msg = msg .. "━━━ NOTES ━━━\n\n" + msg = msg .. "• Markers are auto-deleted after use\n" + msg = msg .. "• Tankers auto-respawn after 3 minutes if lost\n" + msg = msg .. "• Use Emergency Tanker for 1-minute respawn\n" + msg = msg .. "• RTB finds nearest friendly airbase & lands\n" + msg = msg .. "• Check Tanker Status for current position/fuel\n" + + MESSAGE:New(msg, 45):ToBlue() +end + +-- Function to reroute an active tanker with new waypoints +function RerouteTanker() + if not TANKER_STATE.KC135.active or not TANKER_STATE.KC135.group then + MESSAGE:New("KC-135 is not active! Spawn it first.", 10):ToBlue() + return + end + + -- Scan for waypoint markers + local waypoints, markerIds = ScanForWaypointMarkers(TANKER_CONFIG.KC135.callsign) + + if #waypoints < ROUTE_CONFIG.minWaypoints then + MESSAGE:New(string.format("Reroute requires at least %d waypoints!\nPlace markers: %s1, %s2, etc.", + ROUTE_CONFIG.minWaypoints, TANKER_CONFIG.KC135.callsign, TANKER_CONFIG.KC135.callsign), 15, "ERROR"):ToBlue() + return + end + + -- Build new route + local routePoints = {} + local routeDesc = "" + local hasRTB = false + + for i, wp in ipairs(waypoints) do + local parsed = ParseWaypointMarker(wp.markerText, TANKER_CONFIG.KC135.defaultAltitude, TANKER_CONFIG.KC135.defaultSpeed) + + if parsed.rtb then + hasRTB = true + local lastPos = #routePoints > 0 and routePoints[#routePoints].coord or TANKER_STATE.KC135.group:GetCoordinate() + local nearestAirbase = lastPos:GetClosestAirbase(Airbase.Category.AIRDROME, coalition.side.BLUE) + + if nearestAirbase then + local airbaseName = nearestAirbase:GetName() + local airbaseCoord = nearestAirbase:GetCoordinate() + routeDesc = routeDesc .. string.format("\n WP%d: RTB to %s", i, airbaseName) + + table.insert(routePoints, { + coord = airbaseCoord, + altitude = 0, + speed = parsed.speed, + rtb = true, + airbase = nearestAirbase, + airbaseName = airbaseName + }) + end + break + else + routeDesc = routeDesc .. string.format("\n WP%d: FL%03d @ %d kts", + i, math.floor(parsed.altitude / 100), parsed.speed) + table.insert(routePoints, { + coord = wp.coordinate, + altitude = parsed.altitude, + speed = parsed.speed, + rtb = false + }) + end + end + + -- Build task route + local taskRoute = {} + for i, rp in ipairs(routePoints) do + local wp + + if rp.rtb and rp.airbase then + wp = rp.coord:WaypointAirLanding( + rp.speed * 0.514444, + rp.airbase:GetDCSObject(), + {}, + "RTB" + ) + else + wp = rp.coord:WaypointAirFlyOverPoint( + COORDINATE.WaypointAltType.BARO, + rp.speed * 0.514444, + rp.altitude * 0.3048, + {}, + "WP" .. i + ) + + if not rp.rtb then + wp.task = { + id = "ComboTask", + params = { + tasks = { + {id = "Tanker", params = {}} + } + } + } + end + end + + table.insert(taskRoute, wp) + end + + -- Apply new route + TANKER_STATE.KC135.group:Route(taskRoute) + + MESSAGE:New(string.format("%s accepting new route with %d waypoints:%s", + TANKER_CONFIG.KC135.displayName, #routePoints, routeDesc), 20):ToBlue() + + -- Delete markers + if ROUTE_CONFIG.deleteMarkersAfterUse then + for _, markerId in ipairs(markerIds) do + trigger.action.removeMark(markerId) + end + end + + env.info(string.format("[TANKER] Rerouted %s with %d waypoints", TANKER_CONFIG.KC135.displayName, #routePoints)) +end + +-- Function to reroute KC-135 MPRS +function RerouteTankerMPRS() + if not TANKER_STATE.KC135_MPRS.active or not TANKER_STATE.KC135_MPRS.group then + MESSAGE:New("KC-135 MPRS is not active! Spawn it first.", 10):ToBlue() + return + end + + local waypoints, markerIds = ScanForWaypointMarkers(TANKER_CONFIG.KC135_MPRS.callsign) + + if #waypoints < ROUTE_CONFIG.minWaypoints then + MESSAGE:New(string.format("Reroute requires at least %d waypoints!\nPlace markers: %s1, %s2, etc.", + ROUTE_CONFIG.minWaypoints, TANKER_CONFIG.KC135_MPRS.callsign, TANKER_CONFIG.KC135_MPRS.callsign), 15, "ERROR"):ToBlue() + return + end + + local routePoints = {} + local routeDesc = "" + local hasRTB = false + + for i, wp in ipairs(waypoints) do + local parsed = ParseWaypointMarker(wp.markerText, TANKER_CONFIG.KC135_MPRS.defaultAltitude, TANKER_CONFIG.KC135_MPRS.defaultSpeed) + + if parsed.rtb then + hasRTB = true + local lastPos = #routePoints > 0 and routePoints[#routePoints].coord or TANKER_STATE.KC135_MPRS.group:GetCoordinate() + local nearestAirbase = lastPos:GetClosestAirbase(Airbase.Category.AIRDROME, coalition.side.BLUE) + + if nearestAirbase then + local airbaseName = nearestAirbase:GetName() + local airbaseCoord = nearestAirbase:GetCoordinate() + routeDesc = routeDesc .. string.format("\n WP%d: RTB to %s", i, airbaseName) + + table.insert(routePoints, { + coord = airbaseCoord, + altitude = 0, + speed = parsed.speed, + rtb = true, + airbase = nearestAirbase, + airbaseName = airbaseName + }) + end + break + else + routeDesc = routeDesc .. string.format("\n WP%d: FL%03d @ %d kts", + i, math.floor(parsed.altitude / 100), parsed.speed) + table.insert(routePoints, { + coord = wp.coordinate, + altitude = parsed.altitude, + speed = parsed.speed, + rtb = false + }) + end + end + + local taskRoute = {} + for i, rp in ipairs(routePoints) do + local wp + + if rp.rtb and rp.airbase then + wp = rp.coord:WaypointAirLanding( + rp.speed * 0.514444, + rp.airbase:GetDCSObject(), + {}, + "RTB" + ) + else + wp = rp.coord:WaypointAirFlyOverPoint( + COORDINATE.WaypointAltType.BARO, + rp.speed * 0.514444, + rp.altitude * 0.3048, + {}, + "WP" .. i + ) + + if not rp.rtb then + wp.task = { + id = "ComboTask", + params = { + tasks = { + {id = "Tanker", params = {}} + } + } + } + end + end + + table.insert(taskRoute, wp) + end + + TANKER_STATE.KC135_MPRS.group:Route(taskRoute) + + MESSAGE:New(string.format("%s accepting new route with %d waypoints:%s", + TANKER_CONFIG.KC135_MPRS.displayName, #routePoints, routeDesc), 20):ToBlue() + + if ROUTE_CONFIG.deleteMarkersAfterUse then + for _, markerId in ipairs(markerIds) do + trigger.action.removeMark(markerId) + end + end + + env.info(string.format("[TANKER] Rerouted %s with %d waypoints", TANKER_CONFIG.KC135_MPRS.displayName, #routePoints)) +end + +-- ============================================================================ +-- MISSION MENU SETUP +-- ============================================================================ + +-- Create mission menu for tanker requests +-- Integrates with MenuManager to place under "Mission Options" +-- This keeps CTLD at F2 and AFAC at F3 as intended +if MenuManager and MenuManager.CreateCoalitionMenu then + -- Use MenuManager to create menu under "Mission Options" + MENU_TANKER_ROOT = MenuManager.CreateCoalitionMenu(coalition.side.BLUE, "Tanker Operations") + env.info("[TANKER] Using MenuManager - menu created under Mission Options") +else + -- Fallback: create root menu if MenuManager not available + MENU_TANKER_ROOT = MENU_COALITION:New(coalition.side.BLUE, "Tanker Operations") + env.warning("[TANKER] MenuManager not found - creating root menu (load MenuManager first!)") +end + +-- Standard tanker spawns +MENU_KC135_LAUNCH = MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + "Launch " .. TANKER_CONFIG.KC135.displayName, + MENU_TANKER_ROOT, + SpawnTanker +) + +MENU_KC135_MPRS_LAUNCH = MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + "Launch " .. TANKER_CONFIG.KC135_MPRS.displayName, + MENU_TANKER_ROOT, + SpawnTankerMPRS +) + +-- Custom route submenu +local MENU_CUSTOM_ROUTE = MENU_COALITION:New( + coalition.side.BLUE, + "Custom Route", + MENU_TANKER_ROOT +) + +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + "How to Use Custom Routes", + MENU_CUSTOM_ROUTE, + ShowCustomRouteHelp +) + +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + string.format("Launch %s (%s markers)", TANKER_CONFIG.KC135.displayName, TANKER_CONFIG.KC135.callsign), + MENU_CUSTOM_ROUTE, + SpawnCustomTanker +) + +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + string.format("Launch %s (%s markers)", TANKER_CONFIG.KC135_MPRS.displayName, TANKER_CONFIG.KC135_MPRS.callsign), + MENU_CUSTOM_ROUTE, + SpawnCustomTankerMPRS +) + +-- Reroute submenu for changing active tanker routes +local MENU_REROUTE = MENU_COALITION:New( + coalition.side.BLUE, + "Reroute Active Tanker", + MENU_CUSTOM_ROUTE +) + +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + string.format("Reroute %s (%s markers)", TANKER_CONFIG.KC135.displayName, TANKER_CONFIG.KC135.callsign), + MENU_REROUTE, + RerouteTanker +) + +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + string.format("Reroute %s (%s markers)", TANKER_CONFIG.KC135_MPRS.displayName, TANKER_CONFIG.KC135_MPRS.callsign), + MENU_REROUTE, + RerouteTankerMPRS +) + +-- Emergency spawns submenu +local MENU_EMERGENCY = MENU_COALITION:New( + coalition.side.BLUE, + "Emergency Tanker", + MENU_TANKER_ROOT +) + +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + string.format("Emergency %s (%s markers)", TANKER_CONFIG.KC135.displayName, TANKER_CONFIG.KC135.callsign), + MENU_EMERGENCY, + SpawnEmergencyTanker +) + +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + string.format("Emergency %s (%s markers)", TANKER_CONFIG.KC135_MPRS.displayName, TANKER_CONFIG.KC135_MPRS.callsign), + MENU_EMERGENCY, + SpawnEmergencyTankerMPRS +) + +-- Status and info +MENU_COALITION_COMMAND:New( + coalition.side.BLUE, + "Tanker Status Report", + MENU_TANKER_ROOT, + ShowTankerStatus +) + +-- ============================================================================ +-- EVENT HANDLER REGISTRATION +-- ============================================================================ + +BlueTankerEventHandler:HandleEvent(EVENTS.Birth) +BlueTankerEventHandler:HandleEvent(EVENTS.Dead) +BlueTankerEventHandler:HandleEvent(EVENTS.Crash) +BlueTankerEventHandler:HandleEvent(EVENTS.EngineShutdown) +BlueTankerEventHandler:HandleEvent(EVENTS.Hit) + +env.info("[TANKER] Tanker Management System initialized") +MESSAGE:New("Tanker Management System online - Use F10 menu to request tankers", 15):ToBlue() \ No newline at end of file