mission.lua hinzugefügt
This commit is contained in:
+179
@@ -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 ***')
|
||||
Reference in New Issue
Block a user