This commit is contained in:
iTracerFacer 2025-10-04 14:35:21 -05:00
parent 06413684ca
commit ec4f5e375a
79 changed files with 9042 additions and 2158 deletions

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.dltk.core.codeComplete.visibilityCheck=enabled

View File

@ -0,0 +1,5 @@
eclipse.preferences.version=1
sourceHoverBackgroundColor=255,255,225
sourceHoverBackgroundColor.SystemDefault=true
useAnnotationsPrefPage=true
useQuickDiffPrefPage=true

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.team.ui.first_time=false

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
overviewRuler_migration=migrated_3.1

Binary file not shown.

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="ASCII"?>
<cache:CacheIndex xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:cache="http://eclipse.org/dltk/cache_model" lastIndex="8" environment="org.eclipse.dltk.core.environment.localEnvironment">
<entries path="C:/DCS_MissionDev/DCS_Caucasus/src/SSB_UnlockPlanesAtBlueBases.lua" timestamp="1648616270843" lastAccessTime="1759264286559"/>
<entries path="C:/DCS_MissionDev/DCS_Caucasus/src" timestamp="1648616270843" lastAccessTime="1759264286560">
<attributes name=".dltk.core.archive.cache.lastaccess" location="2838196607/3672975892/1.idx"/>
</entries>
<entries path="C:/DCS_MissionDev/DCS_Normandy/dogfight/moose_dogfight.lua" timestamp="1695308345613" lastAccessTime="1759264286561"/>
<entries path="C:/DCS_MissionDev/DCS_Normandy/dogfight" timestamp="1695306817872" lastAccessTime="1759264286561">
<attributes name=".dltk.core.archive.cache.lastaccess" location="2838196607/336605292/3.idx"/>
</entries>
<entries path="C:/DCS_MissionDev/DCS_Afgainistan/src/main.lua" timestamp="1728252263857" lastAccessTime="1759264286564"/>
<entries path="C:/DCS_MissionDev/DCS_Afgainistan/src" timestamp="1728252263857" lastAccessTime="1759264286564">
<attributes name=".dltk.core.archive.cache.lastaccess" location="2838196607/2210315311/5.idx"/>
</entries>
<entries path="C:/DCS_MissionDev/Moose_Framework/src/main.lua" timestamp="1695307917816" lastAccessTime="1759264286989"/>
<entries path="C:/DCS_MissionDev/Moose_Framework/src" timestamp="1695307917816" lastAccessTime="1759264286990">
<attributes name=".dltk.core.archive.cache.lastaccess" location="2838196607/2846345860/7.idx"/>
</entries>
</cache:CacheIndex>

View File

@ -0,0 +1,2 @@
C:\DCS_MissionDev\.metadata\.plugins\org.eclipse.dltk.core\2538043997.index
C:\DCS_MissionDev\.metadata\.plugins\org.eclipse.dltk.core\1505386533.index

View File

@ -7,4 +7,6 @@
<item value="1" key="rootMode"/>
<item value="false" key="linkWithEditor"/>
</section>
<section name="completion_proposal_size">
</section>
</section>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="ASCII"?>
<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_y6YEcaQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.e4.legacy.ide.application" contributorURI="platform:/plugin/org.eclipse.ui.workbench" selectedElement="_y6YEcqQ9Ee-dJ6jf0FqBhw" bindingContexts="_y6YEeKQ9Ee-dJ6jf0FqBhw">
<persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xD;&#xA;&lt;workbench>&#xD;&#xA;&lt;mruList/>&#xD;&#xA;&lt;/workbench>"/>
<persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xD;&#xA;&lt;workbench>&#xD;&#xA;&lt;mruList>&#xD;&#xA;&lt;file factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; id=&quot;org.eclipse.ldt.ui.editor&quot; name=&quot;Moose_SiegeofUshuaia.lua&quot; tooltip=&quot;DCS_Falklands/Siege of Ushuaia/Moose_SiegeofUshuaia.lua&quot;>&#xD;&#xA;&lt;persistable path=&quot;/DCS_Falklands/Siege of Ushuaia/Moose_SiegeofUshuaia.lua&quot;/>&#xD;&#xA;&lt;/file>&#xD;&#xA;&lt;file factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; id=&quot;org.eclipse.ldt.ui.editor&quot; name=&quot;moose_battleforgaza.lua&quot; tooltip=&quot;DCS_Sinai/Battle for Gaza/moose_battleforgaza.lua&quot;>&#xD;&#xA;&lt;persistable path=&quot;/DCS_Sinai/Battle for Gaza/moose_battleforgaza.lua&quot;/>&#xD;&#xA;&lt;/file>&#xD;&#xA;&lt;/mruList>&#xD;&#xA;&lt;/workbench>"/>
<tags>activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration</tags>
<tags>ModelMigrationProcessor.001</tags>
<children xsi:type="basic:TrimmedWindow" xmi:id="_y6YEcqQ9Ee-dJ6jf0FqBhw" elementId="IDEWindow" contributorURI="platform:/plugin/org.eclipse.ui.workbench" selectedElement="_zNXR46Q9Ee-dJ6jf0FqBhw" x="696" y="205" width="1024" height="768">
<children xsi:type="basic:TrimmedWindow" xmi:id="_y6YEcqQ9Ee-dJ6jf0FqBhw" elementId="IDEWindow" contributorURI="platform:/plugin/org.eclipse.ui.workbench" selectedElement="_zNXR46Q9Ee-dJ6jf0FqBhw" x="2552" y="0" width="2576" height="1388">
<persistedState key="coolBarVisible" value="true"/>
<persistedState key="perspectiveBarVisible" value="true"/>
<persistedState key="isRestored" value="true"/>
@ -39,7 +39,7 @@
<tags>persp.perspSC:org.eclipse.debug.ui.DebugPerspective</tags>
<tags>persp.actionSet:org.eclipse.debug.ui.launchActionSet</tags>
<children xsi:type="basic:PartSashContainer" xmi:id="_zNa8QaQ9Ee-dJ6jf0FqBhw" selectedElement="_zNa8QqQ9Ee-dJ6jf0FqBhw" horizontal="true">
<children xsi:type="basic:PartSashContainer" xmi:id="_zNa8QqQ9Ee-dJ6jf0FqBhw" containerData="2600" selectedElement="_zNa8Q6Q9Ee-dJ6jf0FqBhw">
<children xsi:type="basic:PartSashContainer" xmi:id="_zNa8QqQ9Ee-dJ6jf0FqBhw" containerData="1789" selectedElement="_zNa8Q6Q9Ee-dJ6jf0FqBhw">
<children xsi:type="basic:PartStack" xmi:id="_zNa8Q6Q9Ee-dJ6jf0FqBhw" elementId="topLeft" containerData="5000" selectedElement="_zNa8RKQ9Ee-dJ6jf0FqBhw">
<tags>active</tags>
<children xsi:type="advanced:Placeholder" xmi:id="_zNa8RKQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.dltk.ui.ScriptExplorer" ref="_zNUOkKQ9Ee-dJ6jf0FqBhw" closeable="true">
@ -66,7 +66,7 @@
</children>
</children>
</children>
<children xsi:type="basic:PartSashContainer" xmi:id="_zNa8SqQ9Ee-dJ6jf0FqBhw" containerData="7400">
<children xsi:type="basic:PartSashContainer" xmi:id="_zNa8SqQ9Ee-dJ6jf0FqBhw" containerData="8211" selectedElement="_zNa8S6Q9Ee-dJ6jf0FqBhw">
<children xsi:type="advanced:Placeholder" xmi:id="_zNa8S6Q9Ee-dJ6jf0FqBhw" elementId="org.eclipse.ui.editorss" containerData="6600" ref="_zNP9IKQ9Ee-dJ6jf0FqBhw"/>
<children xsi:type="basic:PartStack" xmi:id="_zNa8TKQ9Ee-dJ6jf0FqBhw" elementId="bottomRight" containerData="3400" selectedElement="_zNa8TaQ9Ee-dJ6jf0FqBhw">
<children xsi:type="advanced:Placeholder" xmi:id="_zNa8TaQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.ui.views.ProblemView" ref="_zNVctKQ9Ee-dJ6jf0FqBhw" closeable="true">
@ -200,10 +200,16 @@
</children>
</children>
</children>
<sharedElements xsi:type="advanced:Area" xmi:id="_zNP9IKQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.ui.editorss">
<children xsi:type="basic:PartStack" xmi:id="_zNP9IaQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.e4.primaryDataStack">
<sharedElements xsi:type="advanced:Area" xmi:id="_zNP9IKQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.ui.editorss" selectedElement="_zNP9IaQ9Ee-dJ6jf0FqBhw">
<children xsi:type="basic:PartStack" xmi:id="_zNP9IaQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.e4.primaryDataStack" selectedElement="_bZT-QJ49EfCrAJ_fZ8joTw">
<tags>org.eclipse.e4.primaryDataStack</tags>
<tags>EditorStack</tags>
<children xsi:type="basic:Part" xmi:id="_bZT-QJ49EfCrAJ_fZ8joTw" elementId="org.eclipse.e4.ui.compatibility.editor" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor" label="Moose_SiegeofUshuaia" iconURI="platform:/plugin/org.eclipse.ldt.ui/icons/obj16/lua-logo.gif" closeable="true">
<persistedState key="memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xD;&#xA;&lt;editor id=&quot;org.eclipse.ldt.ui.editor&quot; name=&quot;Moose_SiegeofUshuaia.lua&quot; partName=&quot;Moose_SiegeofUshuaia&quot; title=&quot;Moose_SiegeofUshuaia&quot; tooltip=&quot;DCS_Falklands/Siege of Ushuaia/Moose_SiegeofUshuaia.lua&quot;>&#xD;&#xA;&lt;input factoryID=&quot;org.eclipse.ui.part.FileEditorInputFactory&quot; path=&quot;/DCS_Falklands/Siege of Ushuaia/Moose_SiegeofUshuaia.lua&quot;/>&#xD;&#xA;&lt;editorState selectionHorizontalPixel=&quot;0&quot; selectionLength=&quot;0&quot; selectionOffset=&quot;2891&quot; selectionTopPixel=&quot;960&quot;/>&#xD;&#xA;&lt;/editor>"/>
<tags>Editor</tags>
<tags>org.eclipse.ldt.ui.editor</tags>
<tags>removeOnHide</tags>
</children>
</children>
</sharedElements>
<sharedElements xsi:type="basic:Part" xmi:id="_zNUOkKQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.dltk.ui.ScriptExplorer" contributionURI="bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView" label="Script Explorer" iconURI="platform:/plugin/org.eclipse.dltk.ui/icons/full/eview16/package.png" tooltip="" closeable="true">
@ -353,7 +359,7 @@
</children>
<children xsi:type="menu:ToolBar" xmi:id="_zP6PkKQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.ui.workbench.file">
<tags>Draggable</tags>
<children xsi:type="menu:HandledToolItem" xmi:id="_zP958KQ9Ee-dJ6jf0FqBhw" elementId="print" visible="false" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/print_edit.png" tooltip="Print" enabled="false" command="_y8AcV6Q9Ee-dJ6jf0FqBhw"/>
<children xsi:type="menu:HandledToolItem" xmi:id="_PsHMwJ48EfCrAJ_fZ8joTw" elementId="print" visible="false" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/print_edit.png" tooltip="Print" command="_y8AcV6Q9Ee-dJ6jf0FqBhw"/>
</children>
<children xsi:type="menu:ToolBar" xmi:id="_zP6PkaQ9Ee-dJ6jf0FqBhw" elementId="group.edit" toBeRendered="false">
<tags>toolbarSeparator</tags>
@ -381,7 +387,7 @@
</children>
<children xsi:type="menu:ToolBar" xmi:id="_zP6PmKQ9Ee-dJ6jf0FqBhw" elementId="org.eclipse.ui.workbench.navigate">
<tags>Draggable</tags>
<children xsi:type="menu:HandledToolItem" xmi:id="_zP-hA6Q9Ee-dJ6jf0FqBhw" elementId="org.eclipse.ui.window.pinEditor" visible="false" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/pin_editor.png" tooltip="Pin Editor" type="Check" command="_y7-m8KQ9Ee-dJ6jf0FqBhw"/>
<children xsi:type="menu:HandledToolItem" xmi:id="_PsKQEp48EfCrAJ_fZ8joTw" elementId="org.eclipse.ui.window.pinEditor" visible="false" iconURI="platform:/plugin/org.eclipse.ui/icons/full/etool16/pin_editor.png" tooltip="Pin Editor" type="Check" command="_y7-m8KQ9Ee-dJ6jf0FqBhw"/>
</children>
<children xsi:type="menu:ToolBar" xmi:id="_zP6PmaQ9Ee-dJ6jf0FqBhw" elementId="group.editor" toBeRendered="false">
<tags>toolbarSeparator</tags>

View File

@ -1,3 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
<list key="org.eclipse.ui.internal.wizards.datatransfer.SmartImportRootWizardPage.knownSources">
<item value="C:\DCS_MissionDev"/>
</list>
<list key="installedFeatures">
<item value="org.eclipse.dltk.core:5.9.0.201803230529"/>
<item value="org.eclipse.emf.common:2.14.0.v20180308-1144"/>
<item value="org.eclipse.emf.ecore:2.14.0.v20180213-0937"/>
<item value="org.eclipse.help:2.2.200.v20180308-0630"/>
<item value="org.eclipse.ldt.core:1.4.2.201804031433"/>
<item value="org.eclipse.ldt.lua52:1.4.2.201804031433"/>
<item value="org.eclipse.ldt.product:1.4.2.201804031433"/>
<item value="org.eclipse.ldt:1.4.2.201804031433"/>
<item value="org.eclipse.platform:4.8.0.v20180308-0630"/>
<item value="org.eclipse.rcp:4.8.0.v20180308-0630"/>
</list>
</section>

View File

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
<section name="WorkbenchPreferenceDialogSettings">
<item value="657" key="DIALOG_X_ORIGIN"/>
<item value="0" key="DIALOG_Y_ORIGIN"/>
</section>
<section name="org.eclipse.ui.internal.QuickAccess">
<item value="-1" key="dialogHeight"/>
<item value="-1" key="dialogWidth"/>

View File

@ -1,3 +1,3 @@
#Sat Nov 16 11:11:18 CST 2024
#Tue Sep 30 15:30:00 CDT 2025
org.eclipse.core.runtime=2
org.eclipse.platform=4.8.0.v20180308-0630

Binary file not shown.

View File

@ -0,0 +1,239 @@
-- Setup Capture Missions & Zones
-- Setup BLUE Missions
do -- Missions
US_Mission_Capture_Airfields = MISSION:New( US_CC, "Capture the Airfields", "Primary",
"Capture the Air Bases marked on your F10 map.\n" ..
"Destroy enemy ground forces in the surrounding area, " ..
"then occupy each capture zone with a platoon.\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" ..
"Note that heavy resistance can be expected at the airbases!\n"
, coalition.side.BLUE)
US_Score = SCORING:New( "Capture Airfields" )
US_Mission_Capture_Airfields:AddScoring( US_Score )
US_Mission_Capture_Airfields:Start()
end
-- Red Airbases (from TADC configuration)
env.info("[DEBUG] Initializing Capture Zone: Kilpyavr")
CaptureZone_Kilpyavr = ZONE:New( "Capture Kilpyavr" )
ZoneCapture_Kilpyavr = ZONE_CAPTURE_COALITION:New( CaptureZone_Kilpyavr, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_Kilpyavr:__Guard( 1 )
ZoneCapture_Kilpyavr:Start( 30, 30 )
env.info("[DEBUG] Kilpyavr zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: Severomorsk-1")
CaptureZone_Severomorsk_1 = ZONE:New( "Capture Severomorsk-1" )
ZoneCapture_Severomorsk_1 = ZONE_CAPTURE_COALITION:New( CaptureZone_Severomorsk_1, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_Severomorsk_1:__Guard( 1 )
ZoneCapture_Severomorsk_1:Start( 30, 30 )
env.info("[DEBUG] Severomorsk-1 zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: Severomorsk-3")
CaptureZone_Severomorsk_3 = ZONE:New( "Capture Severomorsk-3" )
ZoneCapture_Severomorsk_3 = ZONE_CAPTURE_COALITION:New( CaptureZone_Severomorsk_3, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_Severomorsk_3:__Guard( 1 )
ZoneCapture_Severomorsk_3:Start( 30, 30 )
env.info("[DEBUG] Severomorsk-3 zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: Murmansk International")
CaptureZone_Murmansk_International = ZONE:New( "Capture Murmansk International" )
ZoneCapture_Murmansk_International = ZONE_CAPTURE_COALITION:New( CaptureZone_Murmansk_International, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_Murmansk_International:__Guard( 1 )
ZoneCapture_Murmansk_International:Start( 30, 30 )
env.info("[DEBUG] Murmansk International zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: Monchegorsk")
CaptureZone_Monchegorsk = ZONE:New( "Capture Monchegorsk" )
ZoneCapture_Monchegorsk = ZONE_CAPTURE_COALITION:New( CaptureZone_Monchegorsk, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_Monchegorsk:__Guard( 1 )
ZoneCapture_Monchegorsk:Start( 30, 30 )
env.info("[DEBUG] Monchegorsk zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: Olenya")
CaptureZone_Olenya = ZONE:New( "Capture Olenya" )
ZoneCapture_Olenya = ZONE_CAPTURE_COALITION:New( CaptureZone_Olenya, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_Olenya:__Guard( 1 )
ZoneCapture_Olenya:Start( 30, 30 )
env.info("[DEBUG] Olenya zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: Afrikanda")
CaptureZone_Afrikanda = ZONE:New( "Capture Afrikanda" )
ZoneCapture_Afrikanda = ZONE_CAPTURE_COALITION:New( CaptureZone_Afrikanda, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_Afrikanda:__Guard( 1 )
ZoneCapture_Afrikanda:Start( 30, 30 )
env.info("[DEBUG] Afrikanda zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: The Mountain")
CaptureZone_The_Mountain = ZONE:New( "Capture The Mountain" )
ZoneCapture_The_Mountain = ZONE_CAPTURE_COALITION:New( CaptureZone_The_Mountain, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_The_Mountain:__Guard( 1 )
ZoneCapture_The_Mountain:Start( 30, 30 )
env.info("[DEBUG] The Mountain zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: The River")
CaptureZone_The_River = ZONE:New( "Capture The River" )
ZoneCapture_The_River = ZONE_CAPTURE_COALITION:New( CaptureZone_The_River, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_The_River:__Guard( 1 )
ZoneCapture_The_River:Start( 30, 30 )
env.info("[DEBUG] The River zone initialization complete")
env.info("[DEBUG] Initializing Capture Zone: The Gulf")
CaptureZone_The_Gulf = ZONE:New( "Capture The Gulf" )
ZoneCapture_The_Gulf = ZONE_CAPTURE_COALITION:New( CaptureZone_The_Gulf, coalition.side.RED )
-- SetMarkReadOnly method not available in this MOOSE version - feature disabled
ZoneCapture_The_Gulf:__Guard( 1 )
ZoneCapture_The_Gulf:Start( 30, 30 )
env.info("[DEBUG] The Gulf zone initialization complete")
-- Event handler functions - define them separately for each zone
local function OnEnterGuarded(ZoneCapture, From, Event, To)
if From ~= To then
local Coalition = ZoneCapture:GetCoalition()
if Coalition == coalition.side.BLUE then
ZoneCapture:Smoke( SMOKECOLOR.Blue )
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 )
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
end
end
local function OnEnterEmpty(ZoneCapture)
ZoneCapture:Smoke( SMOKECOLOR.Green )
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 )
end
local function OnEnterAttacked(ZoneCapture)
ZoneCapture:Smoke( SMOKECOLOR.White )
local Coalition = ZoneCapture:GetCoalition()
if Coalition == coalition.side.BLUE then
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
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
end
local function OnEnterCaptured(ZoneCapture)
local Coalition = ZoneCapture:GetCoalition()
if Coalition == coalition.side.BLUE then
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
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
ZoneCapture:AddScore( "Captured", "Zone captured: Extra points granted.", 200 )
ZoneCapture:__Guard( 30 )
end
-- Apply event handlers to all zone capture objects
local zoneCaptureObjects = {
ZoneCapture_Kilpyavr,
ZoneCapture_Severomorsk_1,
ZoneCapture_Severomorsk_3,
ZoneCapture_Murmansk_International,
ZoneCapture_Monchegorsk,
ZoneCapture_Olenya,
ZoneCapture_Afrikanda,
ZoneCapture_The_Mountain,
ZoneCapture_The_River,
ZoneCapture_The_Gulf
}
-- Set up event handlers for each zone with proper MOOSE methods and debugging
local zoneNames = {
"Kilpyavr", "Severomorsk-1", "Severomorsk-3", "Murmansk International",
"Monchegorsk", "Olenya", "Afrikanda", "The Mountain", "The River", "The Gulf"
}
for i, zoneCapture in ipairs(zoneCaptureObjects) do
if zoneCapture then
local zoneName = zoneNames[i] or ("Zone " .. i)
-- Proper MOOSE event handlers for ZONE_CAPTURE_COALITION
zoneCapture.OnEnterGuarded = OnEnterGuarded
zoneCapture.OnEnterEmpty = OnEnterEmpty
zoneCapture.OnEnterAttacked = OnEnterAttacked
zoneCapture.OnEnterCaptured = OnEnterCaptured
-- Debug: Check if the underlying zone exists
local success, zone = pcall(function() return zoneCapture:GetZone() end)
if success and zone then
env.info("✓ Zone 'Capture " .. zoneName .. "' successfully created and linked")
-- Try to make zone borders visible with different approach
local drawSuccess, drawError = pcall(function()
zone:DrawZone(-1, {1, 0, 0}, 0.5, {1, 0, 0}, 0.2, 2, true)
end)
if not drawSuccess then
env.info("⚠ Zone 'Capture " .. zoneName .. "' border drawing failed: " .. tostring(drawError))
-- Alternative: Try simpler zone marking
pcall(function()
zone:SmokeZone(SMOKECOLOR.Red, 30)
end)
else
env.info("✓ Zone 'Capture " .. zoneName .. "' border drawn successfully")
end
else
env.info("✗ ERROR: Zone 'Capture " .. zoneName .. "' not found in mission editor!")
env.info(" Make sure you have a trigger zone named exactly: 'Capture " .. zoneName .. "'")
end
else
env.info("✗ ERROR: Zone capture object " .. i .. " (" .. (zoneNames[i] or "Unknown") .. ") is nil!")
end
end
-- Additional specific check for Olenya
env.info("=== OLENYA SPECIFIC DEBUG ===")
if ZoneCapture_Olenya then
env.info("✓ ZoneCapture_Olenya object exists")
local success, result = pcall(function() return ZoneCapture_Olenya:GetZoneName() end)
if success then
env.info("✓ Zone name: " .. tostring(result))
else
env.info("✗ Could not get zone name: " .. tostring(result))
end
local success2, zone = pcall(function() return ZoneCapture_Olenya:GetZone() end)
if success2 and zone then
env.info("✓ Underlying zone object exists")
local coord = zone:GetCoordinate()
if coord then
env.info("✓ Zone coordinate: " .. coord:ToStringLLDMS())
end
else
env.info("✗ Underlying zone object missing: " .. tostring(zone))
end
else
env.info("✗ ZoneCapture_Olenya object is nil!")
end

View File

@ -0,0 +1,295 @@
-- Operation Polar Shield Mission Script using MOOSE
-- Set Spawn Limits - These limits can be adjusted to change the number of ground units that will spawn for each type.
-- These are max units, not groups. For example, the manpad group in the mission editor is 2 units. So if MAX_RU_MANPADS = 10, then 5 groups of manpads will spawn.
-- So you have to knnow how many units are in each group to set these limits effectively.
MAX_RU_MANPADS = 10 -- Each group has 2 units, so 10 = 5 groups of 2.
MAX_RU_AAA = 25 -- Each group has 1 units, so 25 = 25 groups of 1.
MAX_RU_TANK_T90 = 10 -- The rest of these groups have 1 unit each.
MAX_RU_TANK_T55 = 10
MAX_RU_IFV = 35
MAX_RU_IFV_Technicals = 45
MAX_RU_SA08 = 5
MAX_RU_SA19 = 5
MAX_RU_SA15 = 5
-- MAX_RU_ARTY = 10 -- Disabled lower regardless of this setting. Will fix later.
-- Build Command Center and Mission for Blue Coalition
local blueHQ = GROUP:FindByName("BLUEHQ")
if blueHQ then
US_CC = COMMANDCENTER:New(blueHQ, "USA HQ")
US_Mission = MISSION:New(US_CC, "Operation Polar Hammer", "Primary", "", coalition.side.BLUE)
US_Score = SCORING:New("Operation Polar Hammer")
--US_Mission:AddScoring(US_Score)
--US_Mission:Start()
env.info("Blue Coalition Command Center and Mission started successfully")
else
env.info("ERROR: BLUEHQ group not found! Blue mission will not start.")
end
--Build Command Center and Mission Red
local redHQ = GROUP:FindByName("REDHQ")
if redHQ then
RU_CC = COMMANDCENTER:New(redHQ, "Russia HQ")
RU_Mission = MISSION:New(RU_CC, "Operation Polar Shield", "Primary", "Destroy the City of Ushuaia and its supporting FARPS", coalition.side.RED)
--RU_Score = SCORING:New("Operation Polar Shield")
--RU_Mission:AddScoring(RU_Score)
RU_Mission:Start()
env.info("Red Coalition Command Center and Mission started successfully")
else
env.info("ERROR: REDHQ group not found! Red mission will not start.")
end
-- Table of Zones to spread red ground forces randomly around.
RandomSpawnZoneTable = {
ZONE:New("sp-1"), ZONE:New("sp-2"), ZONE:New("sp-3"), ZONE:New("sp-4"), ZONE:New("sp-5"),
ZONE:New("sp-6"), ZONE:New("sp-7"), ZONE:New("sp-8"), ZONE:New("sp-9"), ZONE:New("sp-10"),
ZONE:New("sp-11"), ZONE:New("sp-12"), ZONE:New("sp-13"), ZONE:New("sp-14"), ZONE:New("sp-15"),
ZONE:New("sp-16"), ZONE:New("sp-17"), ZONE:New("sp-18"), ZONE:New("sp-19"), ZONE:New("sp-20"),
ZONE:New("sp-21"), ZONE:New("sp-22"), ZONE:New("sp-23"), ZONE:New("sp-24"), ZONE:New("sp-25"),
ZONE:New("sp-26"), ZONE:New("sp-27"), ZONE:New("sp-28"), ZONE:New("sp-29"), ZONE:New("sp-30"),
ZONE:New("sp-31"), ZONE:New("sp-32"), ZONE:New("sp-33"), ZONE:New("sp-34"), ZONE:New("sp-35"),
ZONE:New("sp-36"), ZONE:New("sp-37"), ZONE:New("sp-38"), ZONE:New("sp-39"), ZONE:New("sp-40"),
ZONE:New("sp-41"), ZONE:New("sp-42"), ZONE:New("sp-43"), ZONE:New("sp-44"), ZONE:New("sp-45"),
ZONE:New("sp-46"), ZONE:New("sp-47"), ZONE:New("sp-48"), ZONE:New("sp-49"), ZONE:New("sp-50"),
ZONE:New("sp-51"), ZONE:New("sp-52"), ZONE:New("sp-53"), ZONE:New("sp-54"), ZONE:New("sp-55"),
ZONE:New("sp-56"), ZONE:New("sp-57"), ZONE:New("sp-58"), ZONE:New("sp-59"), ZONE:New("sp-60"),
ZONE:New("sp-61"), ZONE:New("sp-62"), ZONE:New("sp-63"), ZONE:New("sp-64"), ZONE:New("sp-65"),
ZONE:New("sp-66"), ZONE:New("sp-67"), ZONE:New("sp-68"), ZONE:New("sp-69"), ZONE:New("sp-70"),
ZONE:New("sp-71"), ZONE:New("sp-72"), ZONE:New("sp-73"), ZONE:New("sp-74"), ZONE:New("sp-75"),
ZONE:New("sp-76"), ZONE:New("sp-77"), ZONE:New("sp-78"), ZONE:New("sp-79"), ZONE:New("sp-80"),
ZONE:New("sp-81"), ZONE:New("sp-82"), ZONE:New("sp-83"), ZONE:New("sp-84"), ZONE:New("sp-85"),
ZONE:New("sp-86"), ZONE:New("sp-87"), ZONE:New("sp-88"), ZONE:New("sp-89"), ZONE:New("sp-90"),
ZONE:New("sp-91"), ZONE:New("sp-92"), ZONE:New("sp-93"), ZONE:New("sp-94"), ZONE:New("sp-95"),
ZONE:New("sp-96"), ZONE:New("sp-97"), ZONE:New("sp-98"), ZONE:New("sp-99"), ZONE:New("sp-100"),
ZONE:New("sp-101"), ZONE:New("sp-102"), ZONE:New("sp-103"), ZONE:New("sp-104"), ZONE:New("sp-105"),
ZONE:New("sp-106"), ZONE:New("sp-107"), ZONE:New("sp-108"), ZONE:New("sp-109"), ZONE:New("sp-110"),
ZONE:New("sp-111"), ZONE:New("sp-112"), ZONE:New("sp-113"), ZONE:New("sp-114"), ZONE:New("sp-115"),
ZONE:New("sp-116"), ZONE:New("sp-117"), ZONE:New("sp-118"), ZONE:New("sp-119"), ZONE:New("sp-120"),
ZONE:New("sp-121"), ZONE:New("sp-122"), ZONE:New("sp-123"), ZONE:New("sp-124"), ZONE:New("sp-125"),
ZONE:New("sp-126"), ZONE:New("sp-127"), ZONE:New("sp-128"), ZONE:New("sp-129"), ZONE:New("sp-130"),
ZONE:New("sp-131"), ZONE:New("sp-132"), ZONE:New("sp-133"), ZONE:New("sp-134"), ZONE:New("sp-135"),
ZONE:New("sp-136"), ZONE:New("sp-137"), ZONE:New("sp-138"), ZONE:New("sp-139"), ZONE:New("sp-140"),
ZONE:New("sp-141"), ZONE:New("sp-142"), ZONE:New("sp-143"), ZONE:New("sp-144"), ZONE:New("sp-145"),
ZONE:New("sp-146"), ZONE:New("sp-147"), ZONE:New("sp-148"), ZONE:New("sp-149"), ZONE:New("sp-150"),
ZONE:New("sp-151"), ZONE:New("sp-152"), ZONE:New("sp-153"), ZONE:New("sp-154"), ZONE:New("sp-155"),
ZONE:New("sp-156"), ZONE:New("sp-157"), ZONE:New("sp-158"), ZONE:New("sp-159"), ZONE:New("sp-160"),
ZONE:New("sp-161"), ZONE:New("sp-162"), ZONE:New("sp-163"), ZONE:New("sp-164"), ZONE:New("sp-165"),
ZONE:New("sp-166"), ZONE:New("sp-167"), ZONE:New("sp-168"), ZONE:New("sp-169"), ZONE:New("sp-170"),
ZONE:New("sp-171"), ZONE:New("sp-172"), ZONE:New("sp-173"), ZONE:New("sp-174"), ZONE:New("sp-175"),
ZONE:New("sp-176"), ZONE:New("sp-177"), ZONE:New("sp-178"), ZONE:New("sp-179"), ZONE:New("sp-180"),
ZONE:New("sp-181"), ZONE:New("sp-182"), ZONE:New("sp-183"), ZONE:New("sp-184"), ZONE:New("sp-185"),
ZONE:New("sp-186"), ZONE:New("sp-187"), ZONE:New("sp-188"), ZONE:New("sp-189"), ZONE:New("sp-190"),
ZONE:New("sp-191"), ZONE:New("sp-192"), ZONE:New("sp-193"), ZONE:New("sp-194"), ZONE:New("sp-195"),
ZONE:New("sp-196"), ZONE:New("sp-197"), ZONE:New("sp-198"), ZONE:New("sp-199"), ZONE:New("sp-200"),
ZONE:New("sp-201"), ZONE:New("sp-202"), ZONE:New("sp-203"), ZONE:New("sp-204"), ZONE:New("sp-205"),
ZONE:New("sp-206"), ZONE:New("sp-207"), ZONE:New("sp-208"), ZONE:New("sp-209"), ZONE:New("sp-210"),
ZONE:New("sp-211"), ZONE:New("sp-212"), ZONE:New("sp-213"), ZONE:New("sp-214"), ZONE:New("sp-215"),
ZONE:New("sp-216"), ZONE:New("sp-217"), ZONE:New("sp-218"), ZONE:New("sp-219"), ZONE:New("sp-220"),
ZONE:New("sp-221"), ZONE:New("sp-222"), ZONE:New("sp-223"), ZONE:New("sp-224"), ZONE:New("sp-225"),
ZONE:New("sp-226"), ZONE:New("sp-227"), ZONE:New("sp-228"), ZONE:New("sp-229"), ZONE:New("sp-230"),
ZONE:New("sp-231"), ZONE:New("sp-232"), ZONE:New("sp-233"), ZONE:New("sp-234"), ZONE:New("sp-235"),
ZONE:New("sp-236"), ZONE:New("sp-237"), ZONE:New("sp-238"), ZONE:New("sp-239"), ZONE:New("sp-240"),
ZONE:New("sp-241"), ZONE:New("sp-242"), ZONE:New("sp-243"), ZONE:New("sp-244"), ZONE:New("sp-245"),
ZONE:New("sp-246"), ZONE:New("sp-247"), ZONE:New("sp-248"), ZONE:New("sp-249"), ZONE:New("sp-250"),
ZONE:New("sp-251"), ZONE:New("sp-252"), ZONE:New("sp-253"), ZONE:New("sp-254"), ZONE:New("sp-255"),
ZONE:New("sp-256"), ZONE:New("sp-257"), ZONE:New("sp-258"), ZONE:New("sp-259"), ZONE:New("sp-260"),
ZONE:New("sp-261"), ZONE:New("sp-262"), ZONE:New("sp-263"), ZONE:New("sp-264"), ZONE:New("sp-265"),
ZONE:New("sp-266"), ZONE:New("sp-267"), ZONE:New("sp-268"), ZONE:New("sp-269"), ZONE:New("sp-270"),
ZONE:New("sp-271"), ZONE:New("sp-272"), ZONE:New("sp-273"), ZONE:New("sp-274"), ZONE:New("sp-275"),
ZONE:New("sp-276"), ZONE:New("sp-277"), ZONE:New("sp-278"), ZONE:New("sp-279"), ZONE:New("sp-280"),
ZONE:New("sp-281"), ZONE:New("sp-282"), ZONE:New("sp-283"), ZONE:New("sp-284"), ZONE:New("sp-285"),
ZONE:New("sp-286"), ZONE:New("sp-287"), ZONE:New("sp-288"), ZONE:New("sp-289"), ZONE:New("sp-290"),
ZONE:New("sp-291"), ZONE:New("sp-292"), ZONE:New("sp-293"), ZONE:New("sp-294"), ZONE:New("sp-295"),
ZONE:New("sp-296"), ZONE:New("sp-297"), ZONE:New("sp-298"), ZONE:New("sp-299"), ZONE:New("sp-300"),
ZONE:New("sp-301"), ZONE:New("sp-302"), ZONE:New("sp-303"), ZONE:New("sp-304"), ZONE:New("sp-305"),
ZONE:New("sp-306"), ZONE:New("sp-307"), ZONE:New("sp-308"), ZONE:New("sp-309"), ZONE:New("sp-310"),
ZONE:New("sp-311"), ZONE:New("sp-312"), ZONE:New("sp-313"), ZONE:New("sp-314"), ZONE:New("sp-315"),
ZONE:New("sp-316"), ZONE:New("sp-317"), ZONE:New("sp-318"), ZONE:New("sp-319"), ZONE:New("sp-320"),
ZONE:New("sp-321"), ZONE:New("sp-322"), ZONE:New("sp-323"), ZONE:New("sp-324"), ZONE:New("sp-325"),
ZONE:New("sp-326"), ZONE:New("sp-327"), ZONE:New("sp-328"), ZONE:New("sp-329"), ZONE:New("sp-330"),
ZONE:New("sp-331"), ZONE:New("sp-332"), ZONE:New("sp-333"), ZONE:New("sp-334"), ZONE:New("sp-335"),
ZONE:New("sp-336"), ZONE:New("sp-337"), ZONE:New("sp-338"), ZONE:New("sp-339"), ZONE:New("sp-340"),
ZONE:New("sp-341"), ZONE:New("sp-342"), ZONE:New("sp-343"), ZONE:New("sp-344"), ZONE:New("sp-345"),
ZONE:New("sp-346"), ZONE:New("sp-347"), ZONE:New("sp-348"), ZONE:New("sp-349"), ZONE:New("sp-350"),
ZONE:New("sp-351"), ZONE:New("sp-352"), ZONE:New("sp-353"), ZONE:New("sp-354"), ZONE:New("sp-355"),
ZONE:New("sp-356"), ZONE:New("sp-357"), ZONE:New("sp-358"), ZONE:New("sp-359"), ZONE:New("sp-360"),
ZONE:New("sp-361"), ZONE:New("sp-362"), ZONE:New("sp-363"), ZONE:New("sp-364"), ZONE:New("sp-365"),
ZONE:New("sp-366"), ZONE:New("sp-367"), ZONE:New("sp-368"), ZONE:New("sp-369"), ZONE:New("sp-370"),
ZONE:New("sp-371"), ZONE:New("sp-372"), ZONE:New("sp-373"), ZONE:New("sp-374"), ZONE:New("sp-375"),
ZONE:New("sp-376"), ZONE:New("sp-377"), ZONE:New("sp-378"), ZONE:New("sp-379"), ZONE:New("sp-380"),
ZONE:New("sp-381"), ZONE:New("sp-382"), ZONE:New("sp-383"), ZONE:New("sp-384"), ZONE:New("sp-385"),
ZONE:New("sp-386"), ZONE:New("sp-387"), ZONE:New("sp-388"), ZONE:New("sp-389"), ZONE:New("sp-390"),
ZONE:New("sp-391"), ZONE:New("sp-392"), ZONE:New("sp-393"), ZONE:New("sp-394"), ZONE:New("sp-395"),
ZONE:New("sp-396"), ZONE:New("sp-397"), ZONE:New("sp-398"), ZONE:New("sp-399"), ZONE:New("sp-400"),
ZONE:New("sp-401"), ZONE:New("sp-402"), ZONE:New("sp-403"), ZONE:New("sp-404"), ZONE:New("sp-405"),
ZONE:New("sp-406"), ZONE:New("sp-407"), ZONE:New("sp-408"), ZONE:New("sp-409"), ZONE:New("sp-410"),
ZONE:New("sp-411"), ZONE:New("sp-412"), ZONE:New("sp-413"), ZONE:New("sp-414"), ZONE:New("sp-415"),
ZONE:New("sp-416"), ZONE:New("sp-417"), ZONE:New("sp-418"), ZONE:New("sp-419"), ZONE:New("sp-420"),
ZONE:New("sp-421"), ZONE:New("sp-422"), ZONE:New("sp-423"), ZONE:New("sp-424"), ZONE:New("sp-425"),
ZONE:New("sp-426"), ZONE:New("sp-427"), ZONE:New("sp-428"), ZONE:New("sp-429"), ZONE:New("sp-430"),
ZONE:New("sp-431"), ZONE:New("sp-432"), ZONE:New("sp-433"), ZONE:New("sp-434"), ZONE:New("sp-435"),
ZONE:New("sp-436"), ZONE:New("sp-437"), ZONE:New("sp-438"), ZONE:New("sp-439"), ZONE:New("sp-440"),
ZONE:New("sp-441"), ZONE:New("sp-442"), ZONE:New("sp-443"), ZONE:New("sp-444"), ZONE:New("sp-445"),
ZONE:New("sp-446"), ZONE:New("sp-447"), ZONE:New("sp-448"), ZONE:New("sp-449"), ZONE:New("sp-450"),
ZONE:New("sp-451"), ZONE:New("sp-452"), ZONE:New("sp-453"), ZONE:New("sp-454"), ZONE:New("sp-455"),
ZONE:New("sp-456"), ZONE:New("sp-457"), ZONE:New("sp-458"), ZONE:New("sp-459"), ZONE:New("sp-460"),
ZONE:New("sp-461"), ZONE:New("sp-462"), ZONE:New("sp-463"), ZONE:New("sp-464"), ZONE:New("sp-465"),
ZONE:New("sp-466"), ZONE:New("sp-467"), ZONE:New("sp-468"), ZONE:New("sp-469"), ZONE:New("sp-470"),
ZONE:New("sp-471"), ZONE:New("sp-472"), ZONE:New("sp-473"), ZONE:New("sp-474"), ZONE:New("sp-475"),
ZONE:New("sp-476"), ZONE:New("sp-477"), ZONE:New("sp-478"), ZONE:New("sp-479"), ZONE:New("sp-480"),
ZONE:New("sp-481"), ZONE:New("sp-482"), ZONE:New("sp-483"), ZONE:New("sp-484"), ZONE:New("sp-485"),
ZONE:New("sp-486"), ZONE:New("sp-487"), ZONE:New("sp-488"), ZONE:New("sp-489"), ZONE:New("sp-490"),
ZONE:New("sp-491"), ZONE:New("sp-492"), ZONE:New("sp-493"), ZONE:New("sp-494"), ZONE:New("sp-495"),
ZONE:New("sp-496"), ZONE:New("sp-497"), ZONE:New("sp-498"), ZONE:New("sp-499"), ZONE:New("sp-500"),
ZONE:New("sp-501"), ZONE:New("sp-502"), ZONE:New("sp-503"), ZONE:New("sp-504"), ZONE:New("sp-505"),
ZONE:New("sp-506"), ZONE:New("sp-507"), ZONE:New("sp-508"), ZONE:New("sp-509"), ZONE:New("sp-510"),
ZONE:New("sp-511"), ZONE:New("sp-512"), ZONE:New("sp-513"), ZONE:New("sp-514"), ZONE:New("sp-515"),
ZONE:New("sp-516"), ZONE:New("sp-517"), ZONE:New("sp-518"), ZONE:New("sp-519"), ZONE:New("sp-520"),
ZONE:New("sp-521"), ZONE:New("sp-522"), ZONE:New("sp-523"), ZONE:New("sp-524"), ZONE:New("sp-525"),
ZONE:New("sp-526"), ZONE:New("sp-527"), ZONE:New("sp-528"), ZONE:New("sp-529"), ZONE:New("sp-530"),
ZONE:New("sp-531"), ZONE:New("sp-532"), ZONE:New("sp-533"), ZONE:New("sp-534"), ZONE:New("sp-535"),
ZONE:New("sp-536"), ZONE:New("sp-537"), ZONE:New("sp-538"), ZONE:New("sp-539"), ZONE:New("sp-540"),
ZONE:New("sp-541"), ZONE:New("sp-542"), ZONE:New("sp-543"), ZONE:New("sp-544"), ZONE:New("sp-545"),
ZONE:New("sp-546"), ZONE:New("sp-547"), ZONE:New("sp-548"), ZONE:New("sp-549"), ZONE:New("sp-550"),
ZONE:New("sp-551"), ZONE:New("sp-552"), ZONE:New("sp-553"), ZONE:New("sp-554"), ZONE:New("sp-555"),
ZONE:New("sp-556"), ZONE:New("sp-557"), ZONE:New("sp-558"), ZONE:New("sp-559"), ZONE:New("sp-560"),
ZONE:New("sp-561"), ZONE:New("sp-562"), ZONE:New("sp-563"), ZONE:New("sp-564"), ZONE:New("sp-565"),
ZONE:New("sp-566"), ZONE:New("sp-567"), ZONE:New("sp-568"), ZONE:New("sp-569"), ZONE:New("sp-570"),
ZONE:New("sp-571"), ZONE:New("sp-572"), ZONE:New("sp-573"), ZONE:New("sp-574"), ZONE:New("sp-575"),
ZONE:New("sp-576"), ZONE:New("sp-577"), ZONE:New("sp-578"), ZONE:New("sp-579"), ZONE:New("sp-580"),
ZONE:New("sp-581"), ZONE:New("sp-582"), ZONE:New("sp-583"), ZONE:New("sp-584"), ZONE:New("sp-585"),
ZONE:New("sp-586"), ZONE:New("sp-587"), ZONE:New("sp-588"), ZONE:New("sp-589"), ZONE:New("sp-590"),
ZONE:New("sp-591"), ZONE:New("sp-592"), ZONE:New("sp-593"), ZONE:New("sp-594"), ZONE:New("sp-595"),
ZONE:New("sp-596"), ZONE:New("sp-597"), ZONE:New("sp-598"), ZONE:New("sp-599"), ZONE:New("sp-600"),
ZONE:New("sp-601"), ZONE:New("sp-602"), ZONE:New("sp-603"), ZONE:New("sp-604"), ZONE:New("sp-605"),
ZONE:New("sp-606"), ZONE:New("sp-607"), ZONE:New("sp-608"), ZONE:New("sp-609"), ZONE:New("sp-610"),
ZONE:New("sp-611"), ZONE:New("sp-612"), ZONE:New("sp-613"), ZONE:New("sp-614"), ZONE:New("sp-615"),
ZONE:New("sp-616"), ZONE:New("sp-617"), ZONE:New("sp-618"), ZONE:New("sp-619"), ZONE:New("sp-620"),
ZONE:New("sp-621"), ZONE:New("sp-622"), ZONE:New("sp-623"), ZONE:New("sp-624"), ZONE:New("sp-625"),
ZONE:New("sp-626"), ZONE:New("sp-627"), ZONE:New("sp-628"), ZONE:New("sp-629"), ZONE:New("sp-630"),
ZONE:New("sp-631"), ZONE:New("sp-632"), ZONE:New("sp-633"), ZONE:New("sp-634"), ZONE:New("sp-635"),
ZONE:New("sp-636"), ZONE:New("sp-637"), ZONE:New("sp-638"), ZONE:New("sp-639"), ZONE:New("sp-640"),
ZONE:New("sp-641"), ZONE:New("sp-642"), ZONE:New("sp-643"), ZONE:New("sp-644"), ZONE:New("sp-645"),
ZONE:New("sp-646"), ZONE:New("sp-647"), ZONE:New("sp-648"), ZONE:New("sp-649"), ZONE:New("sp-650"),
ZONE:New("sp-651"), ZONE:New("sp-652"), ZONE:New("sp-653"), ZONE:New("sp-654"), ZONE:New("sp-655"),
ZONE:New("sp-656"), ZONE:New("sp-657"), ZONE:New("sp-658"), ZONE:New("sp-659"), ZONE:New("sp-660"),
ZONE:New("sp-661"), ZONE:New("sp-662"), ZONE:New("sp-663"), ZONE:New("sp-664"), ZONE:New("sp-665"),
ZONE:New("sp-666"), ZONE:New("sp-667"), ZONE:New("sp-668"), ZONE:New("sp-669"), ZONE:New("sp-670"),
ZONE:New("sp-671"), ZONE:New("sp-672"), ZONE:New("sp-673"), ZONE:New("sp-674"), ZONE:New("sp-675"),
ZONE:New("sp-676"), ZONE:New("sp-677"), ZONE:New("sp-678"), ZONE:New("sp-679"), ZONE:New("sp-680"),
ZONE:New("sp-681"), ZONE:New("sp-682"), ZONE:New("sp-683"), ZONE:New("sp-684"), ZONE:New("sp-685"),
ZONE:New("sp-686"), ZONE:New("sp-687"), ZONE:New("sp-688"), ZONE:New("sp-689"), ZONE:New("sp-690"),
ZONE:New("sp-691"), ZONE:New("sp-692"), ZONE:New("sp-693"), ZONE:New("sp-694"), ZONE:New("sp-695"),
ZONE:New("sp-696"), ZONE:New("sp-697"), ZONE:New("sp-698"), ZONE:New("sp-699"), ZONE:New("sp-700")
}
-- Spawn Ground Units for Red Coalition
env.info("=== GROUND UNIT SPAWN DEBUG ===")
env.info("MAX_RU_MANPADS: " .. MAX_RU_MANPADS)
env.info("RandomSpawnZoneTable size: " .. #RandomSpawnZoneTable)
-- Check if template groups exist
local templateGroups = {
"RU_MANPADS-1", "RU_AAA-1", "RU_TANK_T90", "RU_TANK_T55",
"RU_IFV-1", "RU_IFV-Technicals", "RU_SA-08", "RU_SA-19", "RU_SA-15"
}
for _, templateName in pairs(templateGroups) do
local template = GROUP:FindByName(templateName)
if template then
env.info("✓ Found template: " .. templateName)
else
env.info("✗ Missing template: " .. templateName)
end
end
-- Check spawn zones
local validZones = 0
for i, zone in pairs(RandomSpawnZoneTable) do
if zone then
validZones = validZones + 1
else
env.info("✗ Invalid zone at index " .. i)
end
end
env.info("Valid spawn zones: " .. validZones .. "/" .. #RandomSpawnZoneTable)
-- MANPADS Systems
env.info("Spawning MANPADS...")
RandomSpawns_RU_MANPADS = SPAWN:New( "RU_MANPADS-1" )
:InitLimit( MAX_RU_MANPADS, MAX_RU_MANPADS )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
-- Anti-Aircraft Artillery
env.info("Spawning AAA...")
RandomSpawns_RU_AAA = SPAWN:New( "RU_AAA-1" )
:InitLimit( MAX_RU_AAA, MAX_RU_AAA )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
-- Main Battle Tanks
env.info("Spawning T-90 tanks...")
RandomSpawns_RU_TANK_T90 = SPAWN:New( "RU_TANK_T90" )
:InitLimit( MAX_RU_TANK_T90, MAX_RU_TANK_T90 )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
env.info("Spawning T-55 tanks...")
RandomSpawns_RU_TANK_T55 = SPAWN:New( "RU_TANK_T55" )
:InitLimit( MAX_RU_TANK_T55, MAX_RU_TANK_T55 )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
-- Infantry Fighting Vehicles
env.info("Spawning IFVs...")
RandomSpawns_RU_IFV = SPAWN:New( "RU_IFV-1" )
:InitLimit( MAX_RU_IFV, MAX_RU_IFV )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
env.info("Spawning Technical vehicles...")
RandomSpawns_RU_IFV_Technicals = SPAWN:New( "RU_IFV-Technicals" )
:InitLimit( MAX_RU_IFV_Technicals, MAX_RU_IFV_Technicals )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
-- Short Range SAM Systems
env.info("Spawning SA-08 SAMs...")
RandomSpawns_RU_SA08 = SPAWN:New( "RU_SA-08" )
:InitLimit( MAX_RU_SA08, MAX_RU_SA08 )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
-- Medium Range SAM Systems
env.info("Spawning SA-19 SAMs...")
RandomSpawns_RU_SA19 = SPAWN:New( "RU_SA-19" )
:InitLimit( MAX_RU_SA19, MAX_RU_SA19 )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
-- Long Range SAM Systems
env.info("Spawning SA-15 SAMs...")
RandomSpawns_RU_SA15 = SPAWN:New( "RU_SA-15" )
:InitLimit( MAX_RU_SA15, MAX_RU_SA15 )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
-- Artillery Systems
--[[
RandomSpawns_RU_ARTY = SPAWN:New( "RU_ARTY-1" )
:InitLimit( MAX_RU_ARTY, MAX_RU_ARTY )
:InitRandomizeTemplate( RandomSpawnZoneTable )
:InitRandomizeZones( RandomSpawnZoneTable )
:SpawnScheduled( .1, .5 )
--]]
env.info("Red Ground Forces Spawned")

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,213 @@
-- Immediate test to confirm script is loading
env.info("=== OnBirthMessage.lua LOADING ===")
trigger.action.outText("OnBirthMessage script is loading...", 10)
-- Player preferences storage
local playerWelcomeSettings = {}
local processedPlayers = {} -- Track players to prevent double processing
-- F10 Menu Functions
local function enableWelcomeMessage(playerUnitID, playerName)
env.info("OnBirthMessage: enableWelcomeMessage called for " .. playerName)
playerWelcomeSettings[playerName] = true
trigger.action.outTextForUnit(playerUnitID, "✅ Welcome messages ENABLED", 10)
env.info("OnBirthMessage: Enabled for " .. playerName)
end
local function disableWelcomeMessage(playerUnitID, playerName)
env.info("OnBirthMessage: disableWelcomeMessage called for " .. playerName)
playerWelcomeSettings[playerName] = false
trigger.action.outTextForUnit(playerUnitID, "❌ Welcome messages DISABLED", 10)
env.info("OnBirthMessage: Disabled for " .. playerName)
end
local function addWelcomeMenuForPlayer(playerUnit, playerName)
env.info("OnBirthMessage: Adding menu for " .. playerName)
local success, errorMsg = pcall(function()
local playerGroup = playerUnit:getGroup()
local playerUnitID = playerUnit:getID()
local groupID = playerGroup:getID()
env.info("OnBirthMessage: Group ID: " .. groupID .. ", Unit ID: " .. playerUnitID)
-- Remove existing menus to prevent duplicates
env.info("OnBirthMessage: Cleaning up existing menus")
missionCommands.removeItemForGroup(groupID, {"Welcome Messages", "Enable Welcome Message"})
missionCommands.removeItemForGroup(groupID, {"Welcome Messages", "Disable Welcome Message"})
missionCommands.removeItemForGroup(groupID, {"Welcome Messages", "Test Menu Works"})
missionCommands.removeItemForGroup(groupID, {"Welcome Messages"})
-- Create main menu
env.info("OnBirthMessage: Creating new menu")
missionCommands.addSubMenuForGroup(groupID, "Welcome Messages")
-- Add commands with simpler functions to avoid freezing
missionCommands.addCommandForGroup(groupID, "Enable Welcome Message", {"Welcome Messages"},
function()
playerWelcomeSettings[playerName] = true
trigger.action.outTextForGroup(groupID, "✅ Welcome messages ENABLED for " .. playerName, 10)
end)
missionCommands.addCommandForGroup(groupID, "Disable Welcome Message", {"Welcome Messages"},
function()
playerWelcomeSettings[playerName] = false
trigger.action.outTextForGroup(groupID, "❌ Welcome messages DISABLED for " .. playerName, 10)
end)
-- Add a test command
missionCommands.addCommandForGroup(groupID, "Test Menu Works", {"Welcome Messages"},
function()
trigger.action.outTextForGroup(groupID, "✅ F10 Menu is working for " .. playerName, 10)
end)
env.info("OnBirthMessage: Menu added successfully for " .. playerName)
end)
if not success then
env.info("OnBirthMessage: Menu creation failed: " .. tostring(errorMsg))
end
end
onPlayerJoin = {}
function onPlayerJoin:onEvent(event)
env.info("OnBirthMessage: Event triggered - ID: " .. tostring(event.id))
-- Trigger on both BIRTH and ENGINE_STARTUP events for better coverage
if (event.id == world.event.S_EVENT_BIRTH or event.id == world.event.S_EVENT_ENGINE_STARTUP) then
env.info("OnBirthMessage: Correct event type detected")
if event.initiator then
env.info("OnBirthMessage: Initiator exists")
local playerName = event.initiator:getPlayerName()
if playerName then
env.info("OnBirthMessage: Player name found: " .. playerName)
-- Check if we've already processed this player to prevent doubles
local playerKey = playerName .. "_" .. event.id
if processedPlayers[playerKey] then
env.info("OnBirthMessage: Already processed " .. playerName .. " for event " .. event.id .. " - skipping")
return
end
processedPlayers[playerKey] = true
-- Add error handling to prevent script crashes
local success, errorMsg = pcall(function()
local playerGroup = event.initiator:getGroup()
local playerUnit = playerGroup:getUnit(1)
local playerSide = playerGroup:getCoalition()
local playerID = playerGroup:getID()
local playerAircraft = playerUnit:getTypeName()
local playerUnitID = playerUnit:getID()
-- Debug message to confirm script is running
env.info("OnBirthMessage: Player " .. playerName .. " joined in " .. playerAircraft .. " (Coalition: " .. playerSide .. ")")
-- Send immediate test message
trigger.action.outTextForUnit(playerUnitID, "OnBirthMessage: Script detected you joining as " .. playerName, 15)
-- Initialize player preference if not set (default to enabled)
if playerWelcomeSettings[playerName] == nil then
playerWelcomeSettings[playerName] = true
end
-- Add F10 menu for welcome message control (only once per player)
env.info("OnBirthMessage: About to create menu for " .. playerName)
addWelcomeMenuForPlayer(playerUnit, playerName)
-- Only show welcome message if player has it enabled
if not playerWelcomeSettings[playerName] then
env.info("OnBirthMessage: Skipping welcome message for " .. playerName .. " (disabled by player)")
return
end
-- Prepare welcome message content
local MissionName =
"=====[ Fighting 99th - Operation Polar Shield / Polar Hammer]===="
local Discord =
"Please join our Discord Server @ https://discord.gg/WDZqAzAs for improved comms and a better mission experience!\n" ..
"You can turn off this message in the F10 menu under 'Welcome Messages'.\n"
local ObjectiveRed =
"==============[ OPERATION POLAR SHIELD ]=============\n" ..
"🛡️ DEFENSIVE MISSION - HOLD THE ARCTIC FRONTIER 🛡️\n\n" ..
"SITUATION: Russian forces have secured key strategic positions across the Kola Peninsula. Your mission is to maintain this defensive shield against NATO's 'Polar Hammer' offensive operations.\n\n" ..
"PRIMARY OBJECTIVES:\n" ..
"🎯 CAP - Maintain air superiority over the RED BORDER zone\n" ..
"🎯 INTERCEPT - Eliminate all NATO penetrations of Russian airspace\n" ..
"🎯 DEFEND - Protect airbases: Severomorsk, Murmansk, Olenya, Kilpyavr, Monchegorsk, Afrikanda\n\n" ..
"⚠️ INTELLIGENCE BRIEFING ⚠️\n" ..
"• Advanced TADC system provides automated threat response\n" ..
"• Persistent CAP flights maintain 24/7 border patrol\n" ..
"• AI squadrons will launch coordinated intercepts\n" ..
"• EWR network provides early warning coverage\n\n" ..
"WEATHER: Arctic conditions - limited visibility, icing risk\n" ..
"TERRAIN: Mountainous, frozen terrain - emergency landing sites scarce\n\n"
local ObjectiveBlue =
"==============[ OPERATION POLAR HAMMER ]=============\n" ..
"⚔️ OFFENSIVE MISSION - BREAK THE RUSSIAN SHIELD ⚔️\n\n" ..
"SITUATION: Russian forces have established a defensive 'Polar Shield' across the Kola Peninsula. NATO forces must execute 'Polar Hammer' - a coordinated offensive to break Russian air superiority and penetrate their defensive perimeter.\n\n" ..
"PRIMARY OBJECTIVES:\n" ..
"🎯 CAP - Establish air superiority within the RED BORDER zone\n" ..
"🎯 SWEEP - Clear Russian interceptors and defensive CAP flights\n" ..
"🎯 SEAD - Suppress Russian EWR network and SAM systems\n" ..
"🎯 STRIKE - Attack Russian airbases and defensive positions\n\n" ..
"⚠️ INTELLIGENCE BRIEFING ⚠️\n" ..
"• Enemy operates advanced Tactical Air Defense Controller (TADC)\n" ..
"• Expect coordinated multi-squadron intercepts\n" ..
"• Russians maintain persistent CAP along border zones\n" ..
"• Enemy response times: ~15 seconds from detection\n" ..
"• Multiple threats will trigger proportional defensive response\n\n" ..
"WEATHER: Arctic conditions - limited visibility, icing risk\n" ..
"TERRAIN: Mountainous, frozen terrain - plan fuel carefully\n\n" ..
"🔥 BREAK THE SHIELD - EXECUTE POLAR HAMMER! 🔥\n\n"
local TacticalInfo =
"================[ TACTICAL NOTES ]===============\n" ..
"RED SMOKE : Target areas or supply zones\n" ..
"BLUE SMOKE : Friendly pickup/drop zones\n" ..
"GREEN SMOKE: Medical evacuation points\n\n" ..
"COMMS: Use proper brevity codes for air-to-air combat\n" ..
"FUEL: Monitor fuel carefully in Arctic conditions\n\n"
local EndBrief = "==============[ END MISSION BRIEF ]==============\n\n"
-- Send appropriate message to each coalition (only to the individual player)
env.info("OnBirthMessage: Sending welcome message to " .. playerName)
if playerSide == coalition.side.BLUE then --blue team
trigger.action.outTextForUnit(playerUnitID, "" .. MissionName .. "\n\n" .. "Welcome to the Arctic Theater, " .. playerName .. "!" .. "\n\n" .. Discord .. "\n\n" .. ObjectiveBlue .. TacticalInfo .. EndBrief, 45)
env.info("OnBirthMessage: Blue team message sent to " .. playerName)
elseif playerSide == coalition.side.RED then -- red team
trigger.action.outTextForUnit(playerUnitID, "" .. MissionName .. "\n\n" .. "Добро пожаловать, " .. playerName .. "!" .. "\n\n" .. Discord .. "\n\n" .. ObjectiveRed .. TacticalInfo .. EndBrief, 45)
env.info("OnBirthMessage: Red team message sent to " .. playerName)
else
env.info("OnBirthMessage: Unknown coalition for " .. playerName .. " (coalition=" .. playerSide .. ")")
end
-- trigger.action.outSoundForGroup(playerID, "l10n/DEFAULT/battlemusic.ogg") -- Damn Cry Babbies
end)
if not success then
env.info("OnBirthMessage Error: " .. tostring(errorMsg))
end
else
env.info("OnBirthMessage: No player name found")
end
else
env.info("OnBirthMessage: No initiator found")
end
else
-- Uncomment next line if you want to see all events (very spammy)
-- env.info("OnBirthMessage: Ignoring event ID: " .. tostring(event.id))
end
end
-- Register event handler
env.info("OnBirthMessage: Registering event handler...")
world.addEventHandler(onPlayerJoin)
env.info("OnBirthMessage: Event handler registered successfully")
env.info("=== OnBirthMessage.lua LOADED SUCCESSFULLY ===")
trigger.action.outText("OnBirthMessage script loaded - check for welcome messages when joining aircraft", 15)

View File

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

8858
Moose_.lua

File diff suppressed because it is too large Load Diff