From 853a3114eec867e3507484b8b56eef81672450ee Mon Sep 17 00:00:00 2001 From: iTracerFacer <134304944+iTracerFacer@users.noreply.github.com> Date: Mon, 27 Oct 2025 20:22:30 -0500 Subject: [PATCH] Fixed the syntax error in ZONE_CONFIG.BLUE (missing comma). Added centralized color config ZONE_COLORS and helper GetZoneColor. Replaced all hard-coded color draws with ZONE_COLORS/GetZoneColor: OnEnterGuarded, OnEnterEmpty, OnEnterAttacked, OnEnterCaptured. ZoneColorVerification (periodic). RefreshAllZoneColors (manual). Hardened scanners with nil/pcall guards: GetZoneForceStrengths now checks ZoneCapture and safely gets the zone. CreateTacticalInfoMarker now pcall-guards zone access and avoids nils. Made tactical text coalition-specific: BLUE sees RED TGTS (<=10 units). RED sees BLUE TGTS (<=10 units). Both markers include the same force summary, but TGTS is tailored per viewer coalition. --- .../Moose_DualCoalitionZoneCapture.lua | 227 ++++++++---------- .../Moose_DualCoalitionZoneCapture.miz | Bin 804735 -> 804957 bytes 2 files changed, 103 insertions(+), 124 deletions(-) diff --git a/Moose_DualCoalitionZoneCapture/Moose_DualCoalitionZoneCapture.lua b/Moose_DualCoalitionZoneCapture/Moose_DualCoalitionZoneCapture.lua index 82c6f59..e70944a 100644 --- a/Moose_DualCoalitionZoneCapture/Moose_DualCoalitionZoneCapture.lua +++ b/Moose_DualCoalitionZoneCapture/Moose_DualCoalitionZoneCapture.lua @@ -270,8 +270,14 @@ local function InitializeCachedUnitSet() end local function GetZoneForceStrengths(ZoneCapture) - local zone = ZoneCapture:GetZone() - if not zone then return {red = 0, blue = 0, neutral = 0} end + if not ZoneCapture then + return {red = 0, blue = 0, neutral = 0} + end + + local success, zone = pcall(function() return ZoneCapture:GetZone() end) + if not success or not zone then + return {red = 0, blue = 0, neutral = 0} + end local redCount = 0 local blueCount = 0 @@ -394,135 +400,107 @@ local function GetEnemyUnitMGRSCoords(ZoneCapture, enemyCoalition) end local function CreateTacticalInfoMarker(ZoneCapture) - local zone = ZoneCapture:GetZone() - if not zone then return end - + -- Validate ZoneCapture + if not ZoneCapture then + log("[TACTICAL ERROR] ZoneCapture object is nil") + return + end + + -- Safely get the zone with error handling + local ok, zone = pcall(function() return ZoneCapture:GetZone() end) + if not ok or not zone then + log("[TACTICAL ERROR] Failed to get zone from ZoneCapture object") + return + end + local forces = GetZoneForceStrengths(ZoneCapture) local zoneName = ZoneCapture:GetZoneName() - local zoneCoalition = ZoneCapture:GetCoalition() - - -- Build tactical info text - local tacticalText = string.format("TACTICAL: %s\nForces: R:%d B:%d", - zoneName, forces.red, forces.blue) - - if forces.neutral > 0 then - tacticalText = tacticalText .. string.format(" C:%d", forces.neutral) - end - - -- Determine enemy coalition based on zone ownership - local enemyCoalition = nil - if zoneCoalition == coalition.side.BLUE then - enemyCoalition = coalition.side.RED - elseif zoneCoalition == coalition.side.RED then - enemyCoalition = coalition.side.BLUE - end - - -- Add MGRS coordinates if enemy forces <= 10 - if enemyCoalition then - local enemyCount = (enemyCoalition == coalition.side.RED) and forces.red or forces.blue - + + -- Build coalition-specific tactical info text + local function buildTacticalText(viewerCoalition) + local text = string.format("TACTICAL: %s\nForces: R:%d B:%d", zoneName, forces.red, forces.blue) + if forces.neutral and forces.neutral > 0 then + text = text .. string.format(" C:%d", forces.neutral) + end + + -- Append TGTS for the enemy of the viewer, capped at 10 units + local enemyCoalition = (viewerCoalition == coalition.side.BLUE) and coalition.side.RED or coalition.side.BLUE + local enemyCount = (enemyCoalition == coalition.side.RED) and (forces.red or 0) or (forces.blue or 0) if enemyCount > 0 and enemyCount <= 10 then local enemyCoords = GetEnemyUnitMGRSCoords(ZoneCapture, enemyCoalition) - log(string.format("[TACTICAL DEBUG] Building marker text for %d enemy units", #enemyCoords)) + log(string.format("[TACTICAL DEBUG] Building marker text for %s viewer: %d enemy units", (viewerCoalition==coalition.side.BLUE and "BLUE" or "RED"), #enemyCoords)) if #enemyCoords > 0 then - tacticalText = tacticalText .. "\nTGTS:" + text = text .. "\nTGTS:" for i, unit in ipairs(enemyCoords) do - if i <= 10 then -- Show up to 10 units (the threshold) - -- Shorten unit type names to fit better - local shortType = unit.type:gsub("^%w+%-", ""):gsub("%s.*", "") - -- Clean up MGRS string - remove "MGRS " prefix and compress spacing - local cleanMgrs = unit.mgrs:gsub("^MGRS%s+", ""):gsub("%s+", " ") - -- Ultra-compact: comma-separated on same line + if i <= 10 then + local shortType = (unit.type or "Unknown"):gsub("^%w+%-", ""):gsub("%s.*", "") + local cleanMgrs = (unit.mgrs or ""):gsub("^MGRS%s+", ""):gsub("%s+", " ") if i == 1 then - tacticalText = tacticalText .. string.format(" %s@%s", shortType, cleanMgrs) + text = text .. string.format(" %s@%s", shortType, cleanMgrs) else - tacticalText = tacticalText .. string.format(", %s@%s", shortType, cleanMgrs) + text = text .. string.format(", %s@%s", shortType, cleanMgrs) end - log(string.format("[TACTICAL DEBUG] Added unit %d: %s at %s", i, shortType, cleanMgrs)) end end if #enemyCoords > 10 then - tacticalText = tacticalText .. string.format(" (+%d)", #enemyCoords - 10) + text = text .. string.format(" (+%d)", #enemyCoords - 10) end end end + + return text end - - -- Debug: Log the complete marker text that will be displayed - log(string.format("[TACTICAL DEBUG] Complete marker text for %s:\n%s", zoneName, tacticalText)) - log(string.format("[TACTICAL DEBUG] Marker text length: %d characters", string.len(tacticalText))) - + + local tacticalTextBLUE = buildTacticalText(coalition.side.BLUE) + local tacticalTextRED = buildTacticalText(coalition.side.RED) + + -- Debug: Log what will be displayed + log(string.format("[TACTICAL DEBUG] Marker text (BLUE) for %s:\n%s", zoneName, tacticalTextBLUE)) + log(string.format("[TACTICAL DEBUG] Marker text (RED) for %s:\n%s", zoneName, tacticalTextRED)) + -- Create tactical marker offset from zone center local coord = zone:GetCoordinate() if coord then - -- Offset the tactical marker slightly northeast of the main zone marker - local offsetCoord = coord:Translate(200, 45) -- 200m northeast - - -- Remove any existing tactical marker first + local offsetCoord = coord:Translate(200, 45) -- 200m NE + + -- Remove legacy single marker if present if ZoneCapture.TacticalMarkerID then log(string.format("[TACTICAL] Removing old marker ID %d for %s", ZoneCapture.TacticalMarkerID, zoneName)) - -- Try multiple removal methods - local success1 = pcall(function() - offsetCoord:RemoveMark(ZoneCapture.TacticalMarkerID) - end) - if not success1 then - local success2 = pcall(function() - trigger.action.removeMark(ZoneCapture.TacticalMarkerID) - end) - if not success2 then - -- Try using coordinate removal - pcall(function() - coord:RemoveMark(ZoneCapture.TacticalMarkerID) - end) - end - end + pcall(function() offsetCoord:RemoveMark(ZoneCapture.TacticalMarkerID) end) + pcall(function() trigger.action.removeMark(ZoneCapture.TacticalMarkerID) end) + pcall(function() coord:RemoveMark(ZoneCapture.TacticalMarkerID) end) ZoneCapture.TacticalMarkerID = nil end - - -- Create tactical markers for BOTH coalitions - -- Each coalition sees their enemies marked - + -- BLUE Coalition Marker if ZoneCapture.TacticalMarkerID_BLUE then log(string.format("[TACTICAL] Removing old BLUE marker ID %d for %s", ZoneCapture.TacticalMarkerID_BLUE, zoneName)) - pcall(function() - offsetCoord:RemoveMark(ZoneCapture.TacticalMarkerID_BLUE) - end) + pcall(function() offsetCoord:RemoveMark(ZoneCapture.TacticalMarkerID_BLUE) end) ZoneCapture.TacticalMarkerID_BLUE = nil end - local successBlue, markerIDBlue = pcall(function() - return offsetCoord:MarkToCoalition(tacticalText, coalition.side.BLUE) + return offsetCoord:MarkToCoalition(tacticalTextBLUE, coalition.side.BLUE) end) - if successBlue and markerIDBlue then ZoneCapture.TacticalMarkerID_BLUE = markerIDBlue - pcall(function() - offsetCoord:SetMarkReadOnly(markerIDBlue, true) - end) + pcall(function() offsetCoord:SetMarkReadOnly(markerIDBlue, true) end) log(string.format("[TACTICAL] Created BLUE marker for %s", zoneName)) else log(string.format("[TACTICAL] Failed to create BLUE marker for %s", zoneName)) end - - -- RED Coalition Marker + + -- RED Coalition Marker if ZoneCapture.TacticalMarkerID_RED then log(string.format("[TACTICAL] Removing old RED marker ID %d for %s", ZoneCapture.TacticalMarkerID_RED, zoneName)) - pcall(function() - offsetCoord:RemoveMark(ZoneCapture.TacticalMarkerID_RED) - end) + pcall(function() offsetCoord:RemoveMark(ZoneCapture.TacticalMarkerID_RED) end) ZoneCapture.TacticalMarkerID_RED = nil end - local successRed, markerIDRed = pcall(function() - return offsetCoord:MarkToCoalition(tacticalText, coalition.side.RED) + return offsetCoord:MarkToCoalition(tacticalTextRED, coalition.side.RED) end) - if successRed and markerIDRed then ZoneCapture.TacticalMarkerID_RED = markerIDRed - pcall(function() - offsetCoord:SetMarkReadOnly(markerIDRed, true) - end) + pcall(function() offsetCoord:SetMarkReadOnly(markerIDRed, true) end) log(string.format("[TACTICAL] Created RED marker for %s", zoneName)) else log(string.format("[TACTICAL] Failed to create RED marker for %s", zoneName)) @@ -538,14 +516,14 @@ local function OnEnterGuarded(ZoneCapture, From, Event, To) ZoneCapture:Smoke( SMOKECOLOR.Blue ) -- Update zone visual markers to BLUE ZoneCapture:UndrawZone() - ZoneCapture:DrawZone(-1, {0, 0, 1}, 0.5, {0, 0, 1}, 0.2, 2, true) -- Blue zone boundary + ZoneCapture:DrawZone(-1, ZONE_COLORS.BLUE_CAPTURED, 0.5, ZONE_COLORS.BLUE_CAPTURED, 0.2, 2, true) US_CC:MessageTypeToCoalition( string.format( "%s is under protection of the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) else ZoneCapture:Smoke( SMOKECOLOR.Red ) -- Update zone visual markers to RED ZoneCapture:UndrawZone() - ZoneCapture:DrawZone(-1, {1, 0, 0}, 0.5, {1, 0, 0}, 0.2, 2, true) -- Red zone boundary + ZoneCapture:DrawZone(-1, ZONE_COLORS.RED_CAPTURED, 0.5, ZONE_COLORS.RED_CAPTURED, 0.2, 2, true) RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) US_CC:MessageTypeToCoalition( string.format( "%s is under protection of Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) end @@ -558,7 +536,7 @@ local function OnEnterEmpty(ZoneCapture) ZoneCapture:Smoke( SMOKECOLOR.Green ) -- Update zone visual markers to GREEN (neutral) ZoneCapture:UndrawZone() - ZoneCapture:DrawZone(-1, {0, 1, 0}, 0.5, {0, 1, 0}, 0.2, 2, true) -- Green zone boundary + ZoneCapture:DrawZone(-1, ZONE_COLORS.EMPTY, 0.5, ZONE_COLORS.EMPTY, 0.2, 2, true) US_CC:MessageTypeToCoalition( string.format( "%s is unprotected, and can be captured!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) RU_CC:MessageTypeToCoalition( string.format( "%s is unprotected, and can be captured!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) -- Create/update tactical information marker @@ -567,17 +545,20 @@ end local function OnEnterAttacked(ZoneCapture) ZoneCapture:Smoke( SMOKECOLOR.White ) - -- Update zone visual markers to ORANGE (contested) + -- Update zone visual markers based on owner (attacked state) ZoneCapture:UndrawZone() - ZoneCapture:DrawZone(-1, {1, 0.5, 0}, 0.5, {1, 0.5, 0}, 0.2, 2, true) -- Orange zone boundary for contested local Coalition = ZoneCapture:GetCoalition() + local color if Coalition == coalition.side.BLUE then + color = ZONE_COLORS.BLUE_ATTACKED US_CC:MessageTypeToCoalition( string.format( "%s is under attack by Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) RU_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) else + color = ZONE_COLORS.RED_ATTACKED RU_CC:MessageTypeToCoalition( string.format( "%s is under attack by the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) US_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) end + ZoneCapture:DrawZone(-1, color, 0.5, color, 0.2, 2, true) -- Create/update tactical information marker CreateTacticalInfoMarker(ZoneCapture) end @@ -692,13 +673,13 @@ local function OnEnterCaptured(ZoneCapture) if Coalition == coalition.side.BLUE then -- Update zone visual markers to BLUE for captured ZoneCapture:UndrawZone() - ZoneCapture:DrawZone(-1, {0, 0, 1}, 0.5, {0, 0, 1}, 0.2, 2, true) -- Blue zone boundary + ZoneCapture:DrawZone(-1, ZONE_COLORS.BLUE_CAPTURED, 0.5, ZONE_COLORS.BLUE_CAPTURED, 0.2, 2, true) RU_CC:MessageTypeToCoalition( string.format( "%s is captured by the USA, we lost it!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) US_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) else -- Update zone visual markers to RED for captured ZoneCapture:UndrawZone() - ZoneCapture:DrawZone(-1, {1, 0, 0}, 0.5, {1, 0, 0}, 0.2, 2, true) -- Red zone boundary + ZoneCapture:DrawZone(-1, ZONE_COLORS.RED_CAPTURED, 0.5, ZONE_COLORS.RED_CAPTURED, 0.2, 2, true) US_CC:MessageTypeToCoalition( string.format( "%s is captured by Russia, we lost it!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) RU_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information ) end @@ -912,32 +893,27 @@ local ZoneColorVerificationScheduler = SCHEDULER:New( nil, function() local zoneCoalition = zoneCapture:GetCoalition() local zoneName = zoneNames[i] or ("Zone " .. i) local currentState = zoneCapture:GetCurrentState() + + local zoneColor = GetZoneColor(zoneCapture) -- Force redraw the zone with correct color based on CURRENT STATE zoneCapture:UndrawZone() - - -- Color priority: State (Attacked/Empty) overrides coalition ownership + zoneCapture:DrawZone(-1, zoneColor, 0.5, zoneColor, 0.2, 2, true) + + -- Log the color assignment for debugging + local colorName = "UNKNOWN" if currentState == "Attacked" then - -- Orange for contested zones (highest priority) - zoneCapture:DrawZone(-1, {1, 0.5, 0}, 0.5, {1, 0.5, 0}, 0.2, 2, true) - log(string.format("[ZONE COLORS] %s: Set to ORANGE (Attacked)", zoneName)) + colorName = (zoneCoalition == coalition.side.BLUE) and "LIGHT BLUE (Blue Attacked)" or "ORANGE (Red Attacked)" elseif currentState == "Empty" then - -- Green for neutral/empty zones - zoneCapture:DrawZone(-1, {0, 1, 0}, 0.5, {0, 1, 0}, 0.2, 2, true) - log(string.format("[ZONE COLORS] %s: Set to GREEN (Empty)", zoneName)) + colorName = "GREEN (Empty)" elseif zoneCoalition == coalition.side.BLUE then - -- Blue for BLUE-owned zones (Guarded or Captured state) - zoneCapture:DrawZone(-1, {0, 0, 1}, 0.5, {0, 0, 1}, 0.2, 2, true) - log(string.format("[ZONE COLORS] %s: Set to BLUE (Owned)", zoneName)) + colorName = "BLUE (Owned)" elseif zoneCoalition == coalition.side.RED then - -- Red for RED-owned zones (Guarded or Captured state) - zoneCapture:DrawZone(-1, {1, 0, 0}, 0.5, {1, 0, 0}, 0.2, 2, true) - log(string.format("[ZONE COLORS] %s: Set to RED (Owned)", zoneName)) + colorName = "RED (Owned)" else - -- Fallback to green for any other state - zoneCapture:DrawZone(-1, {0, 1, 0}, 0.5, {0, 1, 0}, 0.2, 2, true) - log(string.format("[ZONE COLORS] %s: Set to GREEN (Fallback)", zoneName)) + colorName = "GREEN (Fallback)" end + log(string.format("[ZONE COLORS] %s: Set to %s", zoneName, colorName)) end end @@ -965,27 +941,30 @@ local function RefreshAllZoneColors() local zoneCoalition = zoneCapture:GetCoalition() local zoneName = zoneNames[i] or ("Zone " .. i) local currentState = zoneCapture:GetCurrentState() - + + -- Get color for current state/ownership + local zoneColor = GetZoneColor(zoneCapture) + -- Clear existing drawings zoneCapture:UndrawZone() - - -- Redraw with correct color based on CURRENT STATE (priority over coalition) + + -- Redraw with correct color + zoneCapture:DrawZone(-1, zoneColor, 0.5, zoneColor, 0.2, 2, true) + + -- Log the color assignment for debugging + local colorName = "UNKNOWN" if currentState == "Attacked" then - zoneCapture:DrawZone(-1, {1, 0.5, 0}, 0.5, {1, 0.5, 0}, 0.2, 2, true) -- Orange - log(string.format("[ZONE COLORS] %s: Set to ORANGE (Attacked)", zoneName)) + colorName = (zoneCoalition == coalition.side.BLUE) and "LIGHT BLUE (Blue Attacked)" or "ORANGE (Red Attacked)" elseif currentState == "Empty" then - zoneCapture:DrawZone(-1, {0, 1, 0}, 0.5, {0, 1, 0}, 0.2, 2, true) -- Green - log(string.format("[ZONE COLORS] %s: Set to GREEN (Empty)", zoneName)) + colorName = "GREEN (Empty)" elseif zoneCoalition == coalition.side.BLUE then - zoneCapture:DrawZone(-1, {0, 0, 1}, 0.5, {0, 0, 1}, 0.2, 2, true) -- Blue - log(string.format("[ZONE COLORS] %s: Set to BLUE (Owned)", zoneName)) + colorName = "BLUE (Owned)" elseif zoneCoalition == coalition.side.RED then - zoneCapture:DrawZone(-1, {1, 0, 0}, 0.5, {1, 0, 0}, 0.2, 2, true) -- Red - log(string.format("[ZONE COLORS] %s: Set to RED (Owned)", zoneName)) + colorName = "RED (Owned)" else - zoneCapture:DrawZone(-1, {0, 1, 0}, 0.5, {0, 1, 0}, 0.2, 2, true) -- Green (neutral) - log(string.format("[ZONE COLORS] %s: Set to NEUTRAL/GREEN (Fallback)", zoneName)) + colorName = "GREEN (Fallback)" end + log(string.format("[ZONE COLORS] %s: Set to %s", zoneName, colorName)) end end diff --git a/Moose_DualCoalitionZoneCapture/Moose_DualCoalitionZoneCapture.miz b/Moose_DualCoalitionZoneCapture/Moose_DualCoalitionZoneCapture.miz index 1b64c7f10e946a318b95b0f4c6a7209c27518d4b..38d0f8c4d394d4eef3420ec75c692dcf6d16a38c 100644 GIT binary patch delta 21767 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