From ae2c4eb95ef08fca89316d74e66de1b10da59c05 Mon Sep 17 00:00:00 2001 From: weyne Date: Tue, 18 Aug 2026 06:59:14 +0000 Subject: [PATCH] =?UTF-8?q?mission.lua=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mission.lua | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 mission.lua diff --git a/mission.lua b/mission.lua new file mode 100644 index 0000000..39387c2 --- /dev/null +++ b/mission.lua @@ -0,0 +1,179 @@ +-- ======================================================================== +-- 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", 1, 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 ***') \ No newline at end of file