mission.lua hinzugefügt

This commit is contained in:
2026-08-18 06:59:14 +00:00
commit ae2c4eb95e
+179
View File
@@ -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 ***')