-- ======================================================================== -- DCS DYNAMIC PVE MISSION SCRIPT V3.0 (MOOSE / MIST / CTLD) -- FEATURES: Airboss, Range, Foothold Zone Capture, CSAR, Dynamic CAP, Random Tasks -- ======================================================================== env.info('*** STARTE OPERATION DYNAMIC ANVIL SCRIPT ***') -- ======================================================================== -- 1. AIRBOSS SETUP (Carrier Ops) -- ======================================================================== local AirbossCVN = AIRBOSS:New("CVN-71", "Airboss_CVN71") AirbossCVN:SetMenuRecovery(30, 25, false, 0) AirbossCVN:SetMarshalRadio(260.000, "AM") AirbossCVN:SetLSORadio(265.000, "AM") AirbossCVN:SetSoundfilesFolder("Airboss Soundfiles/") AirbossCVN:SetRecoveryTanker("Arco") AirbossCVN:SetDespawnOnEngineShutdown() AirbossCVN:SetDefaultPlayerSkill(AIRBOSS.Skill.NORMAL) local RescueHelo = RESCUEHELO:New("CVN-71", "Rescue") RescueHelo:SetTakeoffAir() RescueHelo:Start() -- uturn = false: Carrier dreht sich nicht in den Wind AirbossCVN:AddRecoveryWindow("08:00", "22:00", 3, nil, false, 25, false) AirbossCVN:Start() -- ======================================================================== -- 2. FUNCTIONAL RANGE SETUP -- ======================================================================== local MyRange = RANGE:New("Kobuleti_Range") MyRange:SetRangeZone(ZONE:New("Range_Zone")) MyRange:AddStrafePit("Strafe_1", 3000, 300, nil, false, 20, 818) MyRange:AddStrafePit("Strafe_2", 3000, 300, nil, false, 20, 818) MyRange:AddBombingTargets({"Bomb_Target_1", "Bomb_Target_2", "Bomb_Target_3"}, 50) MyRange:SetInstructorRadio(255.000, "Instructor_Relay") MyRange:SetRangeControl(250.000, "Range_Control_Relay") MyRange:SetSoundfilesPath("Range Soundfiles/") MyRange:Start() -- ======================================================================== -- 3. FOOTHOLD DYNAMIC CAMPAIGN (ZONE CAPTURE) & LOGISTICS -- ======================================================================== -- CTLD Config (Helikopter Logistik) ctld.transportPilotNames = {"Helo_Logistics_1", "Helo_Logistics_2", "Helo_Logistics_3", "Helo_Logistics_4"} ctld.loadDistance = 150 -- Spawner Vorlagen für Belohnungen (Blau) und Bestrafungen/Gegenangriffe (Rot) local SpawnBlueAirDefense = SPAWN:New("Blue_Defenses_Template") local SpawnRedQRF = SPAWN:New("Red_QRF_Template") :InitLimit(6, 20) -- Erlaubt mehrere QRFs gleichzeitig :InitRandomizeRoute(1, 1, 2000) -- Funktion zur Initialisierung einer dynamischen Eroberungszone local function SetupCaptureZone(ZoneName) local CaptureZone = ZONE:New(ZoneName) -- Initiiert die Zone. Startbesitzer ist ROT. local ZoneCoalition = ZONE_CAPTURE_COALITION:New(CaptureZone, coalition.side.RED) -- EVENT: Zone wurde komplett von einer Seite erobert (Gegner vernichtet, eigene Truppen im Kreis) function ZoneCoalition:OnEnterCaptured(From, Event, To) if self:GetCoalition() == coalition.side.BLUE then MESSAGE:New("ERFOLG: " .. ZoneName .. " wurde gesichert! FlaRak-Stellungen werden errichtet.", 15, "HQ"):ToAll() -- Belohnung: Spawne sofort Verteidigungslinien für die blauen Truppen SpawnBlueAirDefense:SpawnInZone(CaptureZone) elseif self:GetCoalition() == coalition.side.RED then MESSAGE:New("WARNUNG: Wir haben " .. ZoneName .. " an den Feind verloren!", 15, "HQ"):ToAll() end end -- EVENT: Zone wird angegriffen / ist umkämpft (Blaue Truppen sind eingedrungen) function ZoneCoalition:OnEnterAttacked(From, Event, To) if self:GetCoalition() == coalition.side.RED then MESSAGE:New("INTEL: Rotes HQ alarmiert! Feindliche QRF-Verstärkung nähert sich " .. ZoneName .. "!", 15, "HQ"):ToAll() -- Bestrafung/Dynamik: Rot schickt sofort Helikopter oder Konvois aus dem Hinterland in die Zone local qrfGroup = SpawnRedQRF:SpawnInZone(ZONE:New("Red_Rear_Zone")) if qrfGroup then -- Leite die QRF per Tasking direkt in die attackierte Zone qrfGroup:RouteToZone(CaptureZone, 60, "Vee", "Off Road") end end end -- Starte die Überwachung der Zone (prüft alle 15 Sekunden, Status-Update alle 30 Sekunden) ZoneCoalition:Start(15, 30) end -- Aktiviere das Foothold-System für alle definierten Zonen SetupCaptureZone("Zone_Alpha") SetupCaptureZone("Zone_Bravo") SetupCaptureZone("Zone_Charlie") -- Random SAM Spawner zur permanenten Front-Harrasment (Unabhängig von den Zonen) local SamSpawn = SPAWN:New("Red_SAM_Template") :InitLimit(4, 12) :InitRandomizePosition(true, 4000, 500) :SpawnScheduled(2400, 0.5) -- ======================================================================== -- 4. COMBAT SEARCH AND RESCUE (CSAR) -- ======================================================================== -- Initialisiert CSAR für alle blauen Helikopter. Piloten spawnen mit Rauch/Flare. local MyCSAR = CSAR:New("CSAR", "Blue", "CSAR_Rescue_Helos") MyCSAR:SetAllowFarpRescue(true) MyCSAR:SetRescueHoverSpeed(20) MyCSAR:SetRescueHoverHeight(150) MyCSAR:Start() -- ======================================================================== -- 5. DYNAMIC ENEMY CAP (A2A DISPATCHER) -- ======================================================================== -- Sammelt alle Gruppen mit dem Präfix "Red_EWR" als Radarnetzwerk local RedEWR = SET_GROUP:New():FilterPrefixes("Red_EWR"):FilterStart() local A2ADispatcher = AI_A2A_DISPATCHER:New(RedEWR) -- Definition des Einsatzgebietes und der Grenze local BorderZone = ZONE:New("Border_Zone") A2ADispatcher:SetBorderZone(BorderZone) -- Richte das Feindgeschwader ein -- WICHTIG: Ändere "AIRBASE.Caucasus.Beslan" auf deine genutzte rote Airbase! A2ADispatcher:SetSquadron("Red_Fighters", AIRBASE.Caucasus.Beslan, {"Red_CAP_Template"}, 12) A2ADispatcher:SetSquadronCap("Red_Fighters", ZONE:New("Red_CAP_Zone"), 4000, 8000, 500, 600, 800, 1200) A2ADispatcher:SetSquadronCapInterval("Red_Fighters", 2, 600, 1200, 1) A2ADispatcher:SetSquadronGci("Red_Fighters", 900, 1200) -- ======================================================================== -- 6. RANDOM MISSION TASKS: JTAC CONVOY & SCUD HUNT -- ======================================================================== local ConvoyZone = ZONE:New("Convoy_Spawn_Zone") local ScudZone = ZONE:New("Scud_Zone") local JTAC_Unit = GROUP:FindByName("JTAC_Drone") local MyJTAC = DESIGNATE:New(JTAC_Unit) MyJTAC:SetLaserCodes(1688) MyJTAC:SetThreatLevelPrioritization(true) MyJTAC:GenerateLaserSpots() -- Zufälliger Konvoi local function SpawnRandomConvoy() local success, ConvoyGroup = pcall(function() return SPAWN:New("Enemy_Convoy_Template") :InitRandomizePosition(true, 3000, 100) :SpawnInZone(ConvoyZone) end) if success and ConvoyGroup then MyJTAC:AddTargetGroup(ConvoyGroup) MESSAGE:New("JTAC 'Reaper' meldet feindlichen Konvoi in Bewegung! Ziel markiert mit Laser Code 1688.", 15, "CAS TASKING"):ToAll() end end -- Zufällige SCUD-Jagd (HVT) local function SpawnScudEvent() local success, ScudGroup = pcall(function() return SPAWN:New("Red_Scud_Template") :InitRandomizePosition(true, 8000, 200) :SpawnInZone(ScudZone) end) if success and ScudGroup then MESSAGE:New("EMERGENCY INTEL: Satellitenaufklärung hat einen mobilen SCUD-Werfer im Hinterland entdeckt! Aufspüren und sofort vernichten, bevor er in Stellung geht!", 30, "HIGH COMMAND"):ToAll() end end -- Timer für Konvois (erster nach 10 Min, dann alle 20-40 Min) timer.scheduleFunction(function() SpawnRandomConvoy() return timer.getTime() + math.random(1200, 2400) end, nil, timer.getTime() + 600) -- Timer für Scud Hunt (seltenes Event: erster nach 45 Min, dann alle 60-90 Min) timer.scheduleFunction(function() SpawnScudEvent() return timer.getTime() + math.random(3600, 5400) end, nil, timer.getTime() + 2700) -- ======================================================================== env.info('*** DYNAMIC ANVIL SCRIPT LOADED SUCESSFULLY ***')