mirror of
https://github.com/iTracerFacer/Moose_DualCoalitionZoneCapture.git
synced 2025-12-03 04:12:31 +00:00
Updated miz with updated scirpt and added DBG to example mission.
This commit is contained in:
parent
3a7017a516
commit
0b1e435c5c
@ -69,6 +69,18 @@ local function GetZoneColor(zoneCapture)
|
|||||||
return ZONE_COLORS.EMPTY
|
return ZONE_COLORS.EMPTY
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- ==========================================
|
||||||
|
-- COALITION TITLES CONFIGURATION
|
||||||
|
-- ==========================================
|
||||||
|
-- Mission makers: Customize the display names for each coalition
|
||||||
|
-- These will be used in messages, mission names, and UI elements
|
||||||
|
local COALITION_TITLES = {
|
||||||
|
BLUE = "USA", -- Display name for Blue coalition (e.g., "USA", "NATO", "Allied Forces")
|
||||||
|
RED = "Russia", -- Display name for Red coalition (e.g., "Russia", "Germany", "Axis Powers")
|
||||||
|
BLUE_OPERATION = "Operation Polar Shield", -- Name of Blue coalition's operation
|
||||||
|
RED_OPERATION = "Defend the Motherland" -- Name of Red coalition's operation
|
||||||
|
}
|
||||||
|
|
||||||
-- ==========================================
|
-- ==========================================
|
||||||
-- ZONE CONFIGURATION
|
-- ZONE CONFIGURATION
|
||||||
-- ==========================================
|
-- ==========================================
|
||||||
@ -80,7 +92,6 @@ end
|
|||||||
-- Note: Red/Blue/Neutral zones defined below are only setting their initial ownership state.
|
-- Note: Red/Blue/Neutral zones defined below are only setting their initial ownership state.
|
||||||
-- If there are existing units in the zone at mission start, ownership may change based on unit presence.
|
-- If there are existing units in the zone at mission start, ownership may change based on unit presence.
|
||||||
|
|
||||||
|
|
||||||
local ZONE_CONFIG = {
|
local ZONE_CONFIG = {
|
||||||
-- Zones that start under RED coalition control
|
-- Zones that start under RED coalition control
|
||||||
-- IMPORTANT: Use the EXACT zone names from the mission editor (including "Capture " prefix if present)
|
-- IMPORTANT: Use the EXACT zone names from the mission editor (including "Capture " prefix if present)
|
||||||
@ -119,7 +130,7 @@ local ZONE_SETTINGS = {
|
|||||||
-- Build Command Center and Mission for Blue Coalition
|
-- Build Command Center and Mission for Blue Coalition
|
||||||
local blueHQ = GROUP:FindByName("BLUEHQ")
|
local blueHQ = GROUP:FindByName("BLUEHQ")
|
||||||
if blueHQ then
|
if blueHQ then
|
||||||
US_CC = COMMANDCENTER:New(blueHQ, "USA HQ")
|
US_CC = COMMANDCENTER:New(blueHQ, COALITION_TITLES.BLUE .. " HQ")
|
||||||
US_Mission = MISSION:New(US_CC, "Zone Capture Example Mission", "Primary", "", coalition.side.BLUE)
|
US_Mission = MISSION:New(US_CC, "Zone Capture Example Mission", "Primary", "", coalition.side.BLUE)
|
||||||
US_Score = SCORING:New("Zone Capture Example Mission")
|
US_Score = SCORING:New("Zone Capture Example Mission")
|
||||||
--US_Mission:AddScoring(US_Score)
|
--US_Mission:AddScoring(US_Score)
|
||||||
@ -132,7 +143,7 @@ end
|
|||||||
--Build Command Center and Mission Red
|
--Build Command Center and Mission Red
|
||||||
local redHQ = GROUP:FindByName("REDHQ")
|
local redHQ = GROUP:FindByName("REDHQ")
|
||||||
if redHQ then
|
if redHQ then
|
||||||
RU_CC = COMMANDCENTER:New(redHQ, "Russia HQ")
|
RU_CC = COMMANDCENTER:New(redHQ, COALITION_TITLES.RED .. " HQ")
|
||||||
RU_Mission = MISSION:New(RU_CC, "Zone Capture Example Mission", "Primary", "Hold what we have, take what we don't.", coalition.side.RED)
|
RU_Mission = MISSION:New(RU_CC, "Zone Capture Example Mission", "Primary", "Hold what we have, take what we don't.", coalition.side.RED)
|
||||||
--RU_Score = SCORING:New("Zone Capture Example Mission")
|
--RU_Score = SCORING:New("Zone Capture Example Mission")
|
||||||
--RU_Mission:AddScoring(RU_Score)
|
--RU_Mission:AddScoring(RU_Score)
|
||||||
@ -148,7 +159,7 @@ do -- BLUE Mission
|
|||||||
|
|
||||||
US_Mission_Capture_Airfields = MISSION:New( US_CC, "Capture the Zones", "Primary",
|
US_Mission_Capture_Airfields = MISSION:New( US_CC, "Capture the Zones", "Primary",
|
||||||
"Capture the Zones marked on your F10 map.\n" ..
|
"Capture the Zones marked on your F10 map.\n" ..
|
||||||
"Destroy enemy ground forces in the surrounding area, " ..
|
"Destroy " .. COALITION_TITLES.RED .. " ground forces in the surrounding area, " ..
|
||||||
"then occupy each capture zone with a platoon.\n " ..
|
"then occupy each capture zone with a platoon.\n " ..
|
||||||
"Your orders are to hold position until all capture zones are taken.\n" ..
|
"Your orders are to hold position until all capture zones are taken.\n" ..
|
||||||
"Use the map (F10) for a clear indication of the location of each capture zone.\n" ..
|
"Use the map (F10) for a clear indication of the location of each capture zone.\n" ..
|
||||||
@ -166,13 +177,13 @@ end
|
|||||||
-- Setup RED Missions
|
-- Setup RED Missions
|
||||||
do -- RED Mission
|
do -- RED Mission
|
||||||
|
|
||||||
RU_Mission_Capture_Airfields = MISSION:New( RU_CC, "Defend the Motherland", "Primary",
|
RU_Mission_Capture_Airfields = MISSION:New( RU_CC, "Defend the Territory", "Primary",
|
||||||
"Defend Russian airfields and recapture lost territory.\n" ..
|
"Defend " .. COALITION_TITLES.RED .. " territory and recapture lost zones.\n" ..
|
||||||
"Eliminate enemy forces in capture zones and " ..
|
"Eliminate " .. COALITION_TITLES.BLUE .. " forces in capture zones and " ..
|
||||||
"maintain control with ground units.\n" ..
|
"maintain control with ground units.\n" ..
|
||||||
"Your orders are to prevent the enemy from capturing all strategic zones.\n" ..
|
"Your orders are to prevent the " .. COALITION_TITLES.BLUE .. " from capturing all strategic zones.\n" ..
|
||||||
"Use the map (F10) for a clear indication of the location of each capture zone.\n" ..
|
"Use the map (F10) for a clear indication of the location of each capture zone.\n" ..
|
||||||
"Expect heavy NATO resistance!\n"
|
"Expect heavy " .. COALITION_TITLES.BLUE .. " resistance!\n"
|
||||||
, coalition.side.RED)
|
, coalition.side.RED)
|
||||||
|
|
||||||
--RU_Score = SCORING:New( "Defend Territory" )
|
--RU_Score = SCORING:New( "Defend Territory" )
|
||||||
@ -182,8 +193,6 @@ do -- RED Mission
|
|||||||
RU_Mission_Capture_Airfields:Start()
|
RU_Mission_Capture_Airfields:Start()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Logging configuration: toggle logging behavior for this module
|
-- Logging configuration: toggle logging behavior for this module
|
||||||
-- Set `CAPTURE_ZONE_LOGGING.enabled = false` to silence module logs
|
-- Set `CAPTURE_ZONE_LOGGING.enabled = false` to silence module logs
|
||||||
if not CAPTURE_ZONE_LOGGING then
|
if not CAPTURE_ZONE_LOGGING then
|
||||||
@ -582,16 +591,16 @@ local function OnEnterGuarded(ZoneCapture, From, Event, To)
|
|||||||
ZoneCapture:UndrawZone()
|
ZoneCapture:UndrawZone()
|
||||||
local color = ZONE_COLORS.BLUE_CAPTURED
|
local color = ZONE_COLORS.BLUE_CAPTURED
|
||||||
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
||||||
US_CC:MessageTypeToCoalition( string.format( "%s is under protection of the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
US_CC:MessageTypeToCoalition( string.format( "%s is under protection of the %s", ZoneCapture:GetZoneName(), COALITION_TITLES.BLUE ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of the %s", ZoneCapture:GetZoneName(), COALITION_TITLES.BLUE ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
else
|
else
|
||||||
ZoneCapture:Smoke( SMOKECOLOR.Red )
|
ZoneCapture:Smoke( SMOKECOLOR.Red )
|
||||||
-- Update zone visual markers to RED
|
-- Update zone visual markers to RED
|
||||||
ZoneCapture:UndrawZone()
|
ZoneCapture:UndrawZone()
|
||||||
local color = ZONE_COLORS.RED_CAPTURED
|
local color = ZONE_COLORS.RED_CAPTURED
|
||||||
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
||||||
RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
RU_CC:MessageTypeToCoalition( string.format( "%s is under protection of the %s", ZoneCapture:GetZoneName(), COALITION_TITLES.RED ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
US_CC:MessageTypeToCoalition( string.format( "%s is under protection of Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
US_CC:MessageTypeToCoalition( string.format( "%s is under protection of the %s", ZoneCapture:GetZoneName(), COALITION_TITLES.RED ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
end
|
end
|
||||||
-- Create/update tactical information marker
|
-- Create/update tactical information marker
|
||||||
CreateTacticalInfoMarker(ZoneCapture)
|
CreateTacticalInfoMarker(ZoneCapture)
|
||||||
@ -618,11 +627,11 @@ local function OnEnterAttacked(ZoneCapture)
|
|||||||
local color
|
local color
|
||||||
if Coalition == coalition.side.BLUE then
|
if Coalition == coalition.side.BLUE then
|
||||||
color = ZONE_COLORS.BLUE_ATTACKED
|
color = ZONE_COLORS.BLUE_ATTACKED
|
||||||
US_CC:MessageTypeToCoalition( string.format( "%s is under attack by Russia", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
US_CC:MessageTypeToCoalition( string.format( "%s is under attack by %s", ZoneCapture:GetZoneName(), COALITION_TITLES.RED ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
||||||
RU_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
RU_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
||||||
else
|
else
|
||||||
color = ZONE_COLORS.RED_ATTACKED
|
color = ZONE_COLORS.RED_ATTACKED
|
||||||
RU_CC:MessageTypeToCoalition( string.format( "%s is under attack by the USA", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
RU_CC:MessageTypeToCoalition( string.format( "%s is under attack by %s", ZoneCapture:GetZoneName(), COALITION_TITLES.BLUE ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
||||||
US_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
US_CC:MessageTypeToCoalition( string.format( "We are attacking %s", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.ATTACK_MESSAGE_DURATION )
|
||||||
end
|
end
|
||||||
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
||||||
@ -655,15 +664,15 @@ local function CheckVictoryCondition()
|
|||||||
log("[VICTORY] All zones captured by BLUE! Triggering victory sequence...")
|
log("[VICTORY] All zones captured by BLUE! Triggering victory sequence...")
|
||||||
|
|
||||||
US_CC:MessageTypeToCoalition(
|
US_CC:MessageTypeToCoalition(
|
||||||
"VICTORY! All capture zones have been secured by coalition forces!\n\n" ..
|
"VICTORY! All capture zones have been secured by " .. COALITION_TITLES.BLUE .. " forces!\n\n" ..
|
||||||
"Operation Polar Shield is complete. Outstanding work!\n" ..
|
COALITION_TITLES.BLUE_OPERATION .. " is complete. Outstanding work!\n" ..
|
||||||
"Mission will end in 60 seconds.",
|
"Mission will end in 60 seconds.",
|
||||||
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
||||||
)
|
)
|
||||||
|
|
||||||
RU_CC:MessageTypeToCoalition(
|
RU_CC:MessageTypeToCoalition(
|
||||||
"DEFEAT! All strategic positions have been lost to coalition forces.\n\n" ..
|
"DEFEAT! All strategic positions have been lost to " .. COALITION_TITLES.BLUE .. " forces.\n\n" ..
|
||||||
"Operation Polar Shield has failed. Mission ending in 60 seconds.",
|
COALITION_TITLES.BLUE_OPERATION .. " has failed. Mission ending in 60 seconds.",
|
||||||
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -696,15 +705,15 @@ local function CheckVictoryCondition()
|
|||||||
log("[VICTORY] All zones captured by RED! Triggering victory sequence...")
|
log("[VICTORY] All zones captured by RED! Triggering victory sequence...")
|
||||||
|
|
||||||
RU_CC:MessageTypeToCoalition(
|
RU_CC:MessageTypeToCoalition(
|
||||||
"VICTORY! All strategic positions secured for the Motherland!\n\n" ..
|
"VICTORY! All strategic positions secured for " .. COALITION_TITLES.RED_OPERATION .. "!\n\n" ..
|
||||||
"NATO forces have been repelled. Outstanding work!\n" ..
|
COALITION_TITLES.BLUE .. " forces have been repelled. Outstanding work!\n" ..
|
||||||
"Mission will end in 60 seconds.",
|
"Mission will end in 60 seconds.",
|
||||||
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
||||||
)
|
)
|
||||||
|
|
||||||
US_CC:MessageTypeToCoalition(
|
US_CC:MessageTypeToCoalition(
|
||||||
"DEFEAT! All capture zones have been lost to Russian forces.\n\n" ..
|
"DEFEAT! All capture zones have been lost to " .. COALITION_TITLES.RED .. " forces.\n\n" ..
|
||||||
"Operation Polar Shield has failed. Mission ending in 60 seconds.",
|
COALITION_TITLES.BLUE_OPERATION .. " has failed. Mission ending in 60 seconds.",
|
||||||
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -742,14 +751,14 @@ local function OnEnterCaptured(ZoneCapture)
|
|||||||
ZoneCapture:UndrawZone()
|
ZoneCapture:UndrawZone()
|
||||||
local color = ZONE_COLORS.BLUE_CAPTURED
|
local color = ZONE_COLORS.BLUE_CAPTURED
|
||||||
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
||||||
RU_CC:MessageTypeToCoalition( string.format( "%s is captured by the USA, we lost it!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
RU_CC:MessageTypeToCoalition( string.format( "%s is captured by the %s, we lost it!", ZoneCapture:GetZoneName(), COALITION_TITLES.BLUE ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
US_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
US_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
else
|
else
|
||||||
-- Update zone visual markers to RED for captured
|
-- Update zone visual markers to RED for captured
|
||||||
ZoneCapture:UndrawZone()
|
ZoneCapture:UndrawZone()
|
||||||
local color = ZONE_COLORS.RED_CAPTURED
|
local color = ZONE_COLORS.RED_CAPTURED
|
||||||
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
ZoneCapture:DrawZone(-1, {0, 0, 0}, 1, color, 0.2, 2, true)
|
||||||
US_CC:MessageTypeToCoalition( string.format( "%s is captured by Russia, we lost it!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
US_CC:MessageTypeToCoalition( string.format( "%s is captured by the %s, we lost it!", ZoneCapture:GetZoneName(), COALITION_TITLES.RED ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
RU_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
RU_CC:MessageTypeToCoalition( string.format( "We captured %s, Excellent job!", ZoneCapture:GetZoneName() ), MESSAGE.Type.Information, MESSAGE_CONFIG.CAPTURE_MESSAGE_DURATION )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -930,8 +939,8 @@ local ZoneMonitorScheduler = SCHEDULER:New( nil, function()
|
|||||||
)
|
)
|
||||||
|
|
||||||
RU_CC:MessageTypeToCoalition(
|
RU_CC:MessageTypeToCoalition(
|
||||||
string.format("CRITICAL SITUATION! Coalition forces control %d/%d zones! We must recapture territory!",
|
string.format("CRITICAL SITUATION! %s forces control %d/%d zones! We must recapture territory!",
|
||||||
status.blue, status.total),
|
COALITION_TITLES.BLUE, status.blue, status.total),
|
||||||
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@ -945,8 +954,8 @@ local ZoneMonitorScheduler = SCHEDULER:New( nil, function()
|
|||||||
)
|
)
|
||||||
|
|
||||||
US_CC:MessageTypeToCoalition(
|
US_CC:MessageTypeToCoalition(
|
||||||
string.format("CRITICAL SITUATION! Russian forces control %d/%d zones! We must recapture territory!",
|
string.format("CRITICAL SITUATION! %s forces control %d/%d zones! We must recapture territory!",
|
||||||
status.red, status.total),
|
COALITION_TITLES.RED, status.red, status.total),
|
||||||
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
MESSAGE.Type.Information, MESSAGE_CONFIG.VICTORY_MESSAGE_DURATION
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|||||||
Binary file not shown.
@ -144,58 +144,46 @@ local ATTACK_RETRY_COOLDOWN = 1800 -- Seconds a group will wait before re-atte
|
|||||||
|
|
||||||
-- Define warehouses for each side
|
-- Define warehouses for each side
|
||||||
local redWarehouses = {
|
local redWarehouses = {
|
||||||
STATIC:FindByName("RedWarehouse1-1"),
|
STATIC:FindByName("RedWarehouse-1-1"),
|
||||||
STATIC:FindByName("RedWarehouse2-1"),
|
STATIC:FindByName("RedWarehouse-2-1"),
|
||||||
STATIC:FindByName("RedWarehouse3-1"),
|
STATIC:FindByName("RedWarehouse-3-1"),
|
||||||
STATIC:FindByName("RedWarehouse4-1"),
|
STATIC:FindByName("RedWarehouse-4-1"),
|
||||||
STATIC:FindByName("RedWarehouse5-1"),
|
STATIC:FindByName("RedWarehouse-5-1"),
|
||||||
STATIC:FindByName("RedWarehouse6-1"),
|
STATIC:FindByName("RedWarehouse-6-1"),
|
||||||
STATIC:FindByName("RedWarehouse7-1"),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local blueWarehouses = {
|
local blueWarehouses = {
|
||||||
STATIC:FindByName("BlueWarehouse1-1"),
|
STATIC:FindByName("BlueWarehouse-1-1"),
|
||||||
STATIC:FindByName("BlueWarehouse2-1"),
|
STATIC:FindByName("BlueWarehouse-2-1"),
|
||||||
STATIC:FindByName("BlueWarehouse3-1"),
|
STATIC:FindByName("BlueWarehouse-3-1"),
|
||||||
STATIC:FindByName("BlueWarehouse4-1"),
|
STATIC:FindByName("BlueWarehouse-4-1"),
|
||||||
STATIC:FindByName("BlueWarehouse5-1"),
|
STATIC:FindByName("BlueWarehouse-5-1"),
|
||||||
STATIC:FindByName("BlueWarehouse6-1"),
|
STATIC:FindByName("BlueWarehouse-6-1"),
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Define unit templates (these groups must exist in mission editor as LATE ACTIVATE)
|
-- Define unit templates (these groups must exist in mission editor as LATE ACTIVATE)
|
||||||
local redInfantryTemplates = {
|
local redInfantryTemplates = {
|
||||||
"RedInfantry1",
|
"RedInfantry1",
|
||||||
"RedInfantry2",
|
"RedInfantry2",
|
||||||
"RedInfantry3",
|
|
||||||
"RedInfantry4",
|
|
||||||
"RedInfantry5",
|
|
||||||
"RedInfantry6"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local redArmorTemplates = {
|
local redArmorTemplates = {
|
||||||
"RedArmor1",
|
"RedArmor1",
|
||||||
"RedArmor2",
|
"RedArmor2",
|
||||||
"RedArmor3",
|
|
||||||
"RedArmor4",
|
|
||||||
"RedArmor5",
|
|
||||||
"RedArmor6"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local blueInfantryTemplates = {
|
local blueInfantryTemplates = {
|
||||||
"BlueInfantry1",
|
"BlueInfantry1",
|
||||||
"BlueInfantry2",
|
"BlueInfantry2",
|
||||||
"BlueInfantry3",
|
|
||||||
"BlueInfantry4",
|
|
||||||
"BlueInfantry5",
|
|
||||||
"BlueInfantry6"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local blueArmorTemplates = {
|
local blueArmorTemplates = {
|
||||||
"BlueArmor1",
|
"BlueArmor1",
|
||||||
"BlueArmor2",
|
"BlueArmor2",
|
||||||
"BlueArmor3",
|
|
||||||
"BlueArmor4",
|
|
||||||
"BlueArmor5"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -290,8 +278,39 @@ end
|
|||||||
|
|
||||||
env.info("[DGB PLUGIN] Found " .. #zoneCaptureObjects .. " zones from DualCoalitionZoneCapture")
|
env.info("[DGB PLUGIN] Found " .. #zoneCaptureObjects .. " zones from DualCoalitionZoneCapture")
|
||||||
|
|
||||||
-- Track active markers to prevent memory leaks
|
-- Track warehouse markers per warehouse and coalition
|
||||||
local activeMarkers = {}
|
local warehouseMarkers = {}
|
||||||
|
|
||||||
|
-- Add event handlers for warehouse destruction
|
||||||
|
local function SetupWarehouseEventHandlers()
|
||||||
|
local allWarehouses = {}
|
||||||
|
for _, wh in ipairs(redWarehouses) do table.insert(allWarehouses, wh) end
|
||||||
|
for _, wh in ipairs(blueWarehouses) do table.insert(allWarehouses, wh) end
|
||||||
|
|
||||||
|
for _, warehouse in ipairs(allWarehouses) do
|
||||||
|
if warehouse then
|
||||||
|
warehouse:HandleEvent(EVENTS.Dead, function(event)
|
||||||
|
-- Add large smoke effect on destroyed warehouse
|
||||||
|
warehouse:Smoke(SMOKECOLOR.Red)
|
||||||
|
|
||||||
|
-- Remove markers for this warehouse from both coalitions
|
||||||
|
local name = warehouse:GetName()
|
||||||
|
for _, coalition in ipairs({1, 2}) do
|
||||||
|
local key = name .. "_coalition_" .. coalition
|
||||||
|
if warehouseMarkers[key] then
|
||||||
|
warehouseMarkers[key]:Remove()
|
||||||
|
warehouseMarkers[key] = nil
|
||||||
|
env.info(string.format("[DGB PLUGIN] Removed marker for destroyed warehouse %s (coalition %d)", name, coalition))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
env.info(string.format("[DGB PLUGIN] Warehouse %s destroyed - smoke applied, markers removed", name))
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
SetupWarehouseEventHandlers()
|
||||||
|
|
||||||
-- Zone Garrison Tracking System
|
-- Zone Garrison Tracking System
|
||||||
-- Structure: zoneGarrisons[zoneName] = { defenders = {groupName1, groupName2, ...}, lastUpdate = timestamp }
|
-- Structure: zoneGarrisons[zoneName] = { defenders = {groupName1, groupName2, ...}, lastUpdate = timestamp }
|
||||||
@ -396,7 +415,7 @@ end
|
|||||||
-- Function to add warehouse markers on the map
|
-- Function to add warehouse markers on the map
|
||||||
local function addMarkPoints(warehouses, coalition)
|
local function addMarkPoints(warehouses, coalition)
|
||||||
for _, warehouse in ipairs(warehouses) do
|
for _, warehouse in ipairs(warehouses) do
|
||||||
if warehouse then
|
if warehouse and warehouse:GetLife() > 0 then
|
||||||
local warehousePos = warehouse:GetVec3()
|
local warehousePos = warehouse:GetVec3()
|
||||||
local details
|
local details
|
||||||
|
|
||||||
@ -416,7 +435,8 @@ local function addMarkPoints(warehouses, coalition)
|
|||||||
|
|
||||||
local coordinate = COORDINATE:NewFromVec3(warehousePos)
|
local coordinate = COORDINATE:NewFromVec3(warehousePos)
|
||||||
local marker = MARKER:New(coordinate, details):ToCoalition(coalition):ReadOnly()
|
local marker = MARKER:New(coordinate, details):ToCoalition(coalition):ReadOnly()
|
||||||
table.insert(activeMarkers, marker)
|
local key = warehouse:GetName() .. "_coalition_" .. coalition
|
||||||
|
warehouseMarkers[key] = marker
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -424,12 +444,9 @@ end
|
|||||||
-- Function to update warehouse markers
|
-- Function to update warehouse markers
|
||||||
local function updateMarkPoints()
|
local function updateMarkPoints()
|
||||||
-- Clean up old markers first
|
-- Clean up old markers first
|
||||||
for i = #activeMarkers, 1, -1 do
|
for key, marker in pairs(warehouseMarkers) do
|
||||||
local marker = activeMarkers[i]
|
marker:Remove()
|
||||||
if marker then
|
warehouseMarkers[key] = nil
|
||||||
marker:Remove()
|
|
||||||
end
|
|
||||||
activeMarkers[i] = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
addMarkPoints(redWarehouses, 2) -- Blue coalition sees red warehouses
|
addMarkPoints(redWarehouses, 2) -- Blue coalition sees red warehouses
|
||||||
@ -437,7 +454,9 @@ local function updateMarkPoints()
|
|||||||
addMarkPoints(redWarehouses, 1) -- Red coalition sees red warehouses
|
addMarkPoints(redWarehouses, 1) -- Red coalition sees red warehouses
|
||||||
addMarkPoints(blueWarehouses, 1) -- Red coalition sees blue warehouses
|
addMarkPoints(blueWarehouses, 1) -- Red coalition sees blue warehouses
|
||||||
|
|
||||||
env.info(string.format("[DGB PLUGIN] Updated warehouse markers (%d total)", #activeMarkers))
|
local markerCount = 0
|
||||||
|
for _ in pairs(warehouseMarkers) do markerCount = markerCount + 1 end
|
||||||
|
env.info(string.format("[DGB PLUGIN] Updated warehouse markers (%d total)", markerCount))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Function to check if a group contains infantry units
|
-- Function to check if a group contains infantry units
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user