From 599bafe4a8ce933b311664277462fa2f45975791 Mon Sep 17 00:00:00 2001 From: funkyfranky Date: Thu, 22 Feb 2024 21:44:33 +0000 Subject: [PATCH] ExtractMissionScripts --- .../RAD-002-Transmission-Tips-and-Tricks.lua | 274 +++++++++--------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.lua b/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.lua index 2a19302..22f9c86 100644 --- a/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.lua +++ b/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.lua @@ -1,137 +1,137 @@ ---- --- Author: FlightControl --- Created: 20.10.2018 --- Contributors: kaltokri --- Modified: 22.02.2024 --- --- # Documentation: --- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Sound.Radio.html --- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Core.Event.html --- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Core.Scheduler.html --- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Core.Timer.html --- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Wrapper.Group.html --- --- # Description: --- --- This test mission demonstrates the RADIO class in a more complex scenario. --- It also focuses on how to create transmissions faster and more efficiently. --- Please Read and try the other radio example mission first. --- --- The Player is in a Su-25T parked on Batumi. --- A Russian command center named "Batumi Tower" placed near Batumi will act as Batumi's Radio Tower. --- This mission also features the "Viktor" flight, a Russian Su-25, who is inbound for landing on Batumi. --- The goal of this script is to manage the dialog between Viktor and Batumi Tower. --- --- In an older version all radio calls was done by delays. But behaviour of ai units may change on in future. --- Some we changed the mission to check if the plane is within the 5km zone and to check for the event land. --- --- The (short) conversation between Viktor and Batumi Tower will happen on 115 AM. --- Start +10 : Batumi Tower "Viktor flight, this is Batumi Tower, enter left base runway one two five, report 5 kilometers final. Over." --- Start +20 : Viktor "Report 5 kilometers final, one two five, viktor" --- InZone : Viktor "Batumi Tower, Viktor is 5 kilomters final, request landing clearance. Over?" --- InZone +10 : Batumi Tower "Viktor flight, you are claer to land, runway one two five. Check gear down." --- InZone +17 : Viktor "Clear to land, One two five, Viktor" --- Land +2 : Viktor "Viktor, touchdown" --- Land +7 : Batumi Tower "Viktor, confirmed touchdown, taxi to parking area, Batumi Tower out." --- --- # Guide: --- --- 1. Enter the Su-25T and listen to the radio. --- 2. After Viktor has left the runway you can end the mission. - --- Get all needed objects. -BatumiRadio = STATIC:FindByName("Batumi Tower"):GetRadio() -Viktor = UNIT:FindByName("Viktor") -ViktorRadio = Viktor:GetRadio() -ZoneToCheck = ZONE:New( "Zone5km" ) -ZoneToCheck:DrawZone() -- Show the zone in F10 map, so it is easy to see. - --- Let's first explore different shortcuts to setup a transmission before broadcastiong it. ------------------------------------------------------------------------------------------------------------------------------------------------------- --- First, the long way, using several lines of code. -BatumiRadio:SetFileName("Batumi Tower - Enter left base.ogg") -BatumiRadio:SetFrequency(115) -BatumiRadio:SetModulation(radio.modulation.AM) -BatumiRadio:SetPower(100) - --- Every RADIO:SetXXX() function returns the radio, so we can rewrite the code above to look like this: -BatumiRadio:SetFileName("Batumi Tower - Enter left base.ogg"):SetFrequency(115):SetModulation(radio.modulation.AM):SetPower(100) - --- We can also use the shortcut RADIO:NewGenericTransmission() to set multiple parameters in one function call. --- If our broadcaster was a UNIT or a GROUP, the more appropriate shortcut to use would be NewUnitTransmission() --- Note: NewUnitTransmission() will work for both UNIT and GROUP objects, despite its name! -BatumiRadio:NewGenericTransmission("Batumi Tower - Enter left base.ogg", 115, radio.modulation.AM, 100) - --- If you already set some parameters previously, you don't have to redo it. --- NewGenericTransmission's paramter have to be set in order. -BatumiRadio:NewGenericTransmission("Batumi Tower - Enter left base.ogg", 115) -- Modulation is still AM and power is still 100 (set previously). - --- You can mix the format if you want. This will still work: -BatumiRadio:NewGenericTransmission("Batumi Tower - Enter left base.ogg", 115):SetPower(100) - --- Now is the time to broadcast it after 5 sec delay to avoid conflicts with a RTB radio call from Victor. --- We use a simple SCHEDULER with an inline function: -CommunitcationScheduler = SCHEDULER:New( nil, - function() - BatumiRadio:Broadcast() - end, {}, 10 -- 10s delay from mission script start. -) - --- If Viktor answered imedately, the two radio broadcasts would overlap. We need to delay Viktor's answer a little bit. -CommunitcationScheduler = SCHEDULER:New( nil, - function() - ViktorRadio:SetFileName("Viktor - Enter left base ack.ogg"):SetFrequency(115):SetModulation(radio.modulation.AM):Broadcast() -- We don't specify a subtitle since we don't want one. - end, {}, 20 -- 20s delay from mission script start. -) - --- We need a function to check if Viktor is within the 5km zone. -NeedToSendRequest = true -- We want to send it only once. - -function checkZone() - GroupToCheck = GROUP:FindByName( "Viktor Flight" ) - if GroupToCheck then - if GroupToCheck:IsCompletelyInZone( ZoneToCheck ) and NeedToSendRequest then - - -- We only specify the new file name, since frequency and modulation didn't change. - ViktorRadio:SetFileName("Viktor - Request landing clearance.ogg"):Broadcast() - - -- The request is send, so we skip it from now on when function is triggered. - NeedToSendRequest = false - - -- After reaching the 5km zone we start a timer to wait 10 seconds and send the next message. - TIMER:New( - function() - BatumiRadio:SetFileName("Batumi Tower - Clear to land.ogg"):Broadcast() - end - ):Start(10) -- 10s delay after reaching zone. - - -- After reaching the 5km zone we start a timer to wait 17 seconds and send the answer. - TIMER:New( - function() - ViktorRadio:SetFileName("Viktor - Clear to land ack.ogg"):Broadcast() - end - ):Start(17) -- 17s delay after reaching zone. - end - end -end - --- We need a timer to check regularly if the plane is within 5 km using the function checkZone defined above. -checkZoneTimer = TIMER:New( checkZone ) --- Start timer after 10 seconds and repeat the check every 1 second. -checkZoneTimer:Start(10, 1) - --- To send radio calls after landing, we use EVENTS: -Viktor:HandleEvent( EVENTS.Land ) - -function Viktor:OnEventLand( EventData ) - TIMER:New( - function() - ViktorRadio:SetFileName("Viktor - Touchdown.ogg"):Broadcast() - end - ):Start(2) -- 2s delay after touchdown. - TIMER:New( - function() - BatumiRadio:SetFileName("Batumi Tower - Taxi to parking.ogg"):Broadcast() - end - ):Start(7) -- 7s delay after touchdown. -end +--- +-- Author: FlightControl +-- Created: 20.10.2018 +-- Contributors: kaltokri +-- Modified: 22.02.2024 +-- +-- # Documentation: +-- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Sound.Radio.html +-- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Core.Event.html +-- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Core.Scheduler.html +-- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Core.Timer.html +-- https://flightcontrol-master.github.io/MOOSE_DOCS_DEVELOP/Documentation/Wrapper.Group.html +-- +-- # Description: +-- +-- This test mission demonstrates the RADIO class in a more complex scenario. +-- It also focuses on how to create transmissions faster and more efficiently. +-- Please Read and try the other radio example mission first. +-- +-- The Player is in a Su-25T parked on Batumi. +-- A Russian command center named "Batumi Tower" placed near Batumi will act as Batumi's Radio Tower. +-- This mission also features the "Viktor" flight, a Russian Su-25, who is inbound for landing on Batumi. +-- The goal of this script is to manage the dialog between Viktor and Batumi Tower. +-- +-- In an older version all radio calls was done by delays. But behaviour of ai units may change on in future. +-- Some we changed the mission to check if the plane is within the 5km zone and to check for the event land. +-- +-- The (short) conversation between Viktor and Batumi Tower will happen on 115 AM. +-- Start +10 : Batumi Tower "Viktor flight, this is Batumi Tower, enter left base runway one two five, report 5 kilometers final. Over." +-- Start +20 : Viktor "Report 5 kilometers final, one two five, viktor" +-- InZone : Viktor "Batumi Tower, Viktor is 5 kilomters final, request landing clearance. Over?" +-- InZone +10 : Batumi Tower "Viktor flight, you are claer to land, runway one two five. Check gear down." +-- InZone +17 : Viktor "Clear to land, One two five, Viktor" +-- Land +2 : Viktor "Viktor, touchdown" +-- Land +7 : Batumi Tower "Viktor, confirmed touchdown, taxi to parking area, Batumi Tower out." +-- +-- # Guide: +-- +-- 1. Enter the Su-25T and listen to the radio. +-- 2. After Viktor has left the runway you can end the mission. + +-- Get all needed objects. +BatumiRadio = STATIC:FindByName("Batumi Tower"):GetRadio() +Viktor = UNIT:FindByName("Viktor") +ViktorRadio = Viktor:GetRadio() +ZoneToCheck = ZONE:New( "Zone5km" ) +ZoneToCheck:DrawZone() -- Show the zone in F10 map, so it is easy to see. + +-- Let's first explore different shortcuts to setup a transmission before broadcastiong it. +------------------------------------------------------------------------------------------------------------------------------------------------------ +-- First, the long way, using several lines of code. +BatumiRadio:SetFileName("Batumi Tower - Enter left base.ogg") +BatumiRadio:SetFrequency(115) +BatumiRadio:SetModulation(radio.modulation.AM) +BatumiRadio:SetPower(100) + +-- Every RADIO:SetXXX() function returns the radio, so we can rewrite the code above to look like this: +BatumiRadio:SetFileName("Batumi Tower - Enter left base.ogg"):SetFrequency(115):SetModulation(radio.modulation.AM):SetPower(100) + +-- We can also use the shortcut RADIO:NewGenericTransmission() to set multiple parameters in one function call. +-- If our broadcaster was a UNIT or a GROUP, the more appropriate shortcut to use would be NewUnitTransmission() +-- Note: NewUnitTransmission() will work for both UNIT and GROUP objects, despite its name! +BatumiRadio:NewGenericTransmission("Batumi Tower - Enter left base.ogg", 115, radio.modulation.AM, 100) + +-- If you already set some parameters previously, you don't have to redo it. +-- NewGenericTransmission's paramter have to be set in order. +BatumiRadio:NewGenericTransmission("Batumi Tower - Enter left base.ogg", 115) -- Modulation is still AM and power is still 100 (set previously). + +-- You can mix the format if you want. This will still work: +BatumiRadio:NewGenericTransmission("Batumi Tower - Enter left base.ogg", 115):SetPower(100) + +-- Now is the time to broadcast it after 5 sec delay to avoid conflicts with a RTB radio call from Victor. +-- We use a simple SCHEDULER with an inline function: +CommunitcationScheduler = SCHEDULER:New( nil, + function() + BatumiRadio:Broadcast() + end, {}, 10 -- 10s delay from mission script start. +) + +-- If Viktor answered imedately, the two radio broadcasts would overlap. We need to delay Viktor's answer a little bit. +CommunitcationScheduler = SCHEDULER:New( nil, + function() + ViktorRadio:SetFileName("Viktor - Enter left base ack.ogg"):SetFrequency(115):SetModulation(radio.modulation.AM):Broadcast() -- We don't specify a subtitle since we don't want one. + end, {}, 20 -- 20s delay from mission script start. +) + +-- We need a function to check if Viktor is within the 5km zone. +NeedToSendRequest = true -- We want to send it only once. + +function checkZone() + GroupToCheck = GROUP:FindByName( "Viktor Flight" ) + if GroupToCheck then + if GroupToCheck:IsCompletelyInZone( ZoneToCheck ) and NeedToSendRequest then + + -- We only specify the new file name, since frequency and modulation didn't change. + ViktorRadio:SetFileName("Viktor - Request landing clearance.ogg"):Broadcast() + + -- The request is send, so we skip it from now on when function is triggered. + NeedToSendRequest = false + + -- After reaching the 5km zone we start a timer to wait 10 seconds and send the next message. + TIMER:New( + function() + BatumiRadio:SetFileName("Batumi Tower - Clear to land.ogg"):Broadcast() + end + ):Start(10) -- 10s delay after reaching zone. + + -- After reaching the 5km zone we start a timer to wait 17 seconds and send the answer. + TIMER:New( + function() + ViktorRadio:SetFileName("Viktor - Clear to land ack.ogg"):Broadcast() + end + ):Start(17) -- 17s delay after reaching zone. + end + end +end + +-- We need a timer to check regularly if the plane is within 5 km using the function checkZone defined above. +checkZoneTimer = TIMER:New( checkZone ) +-- Start timer after 10 seconds and repeat the check every 1 second. +checkZoneTimer:Start(10, 1) + +-- To send radio calls after landing, we use EVENTS: +Viktor:HandleEvent( EVENTS.Land ) + +function Viktor:OnEventLand( EventData ) + TIMER:New( + function() + ViktorRadio:SetFileName("Viktor - Touchdown.ogg"):Broadcast() + end + ):Start(2) -- 2s delay after touchdown. + TIMER:New( + function() + BatumiRadio:SetFileName("Batumi Tower - Taxi to parking.ogg"):Broadcast() + end + ):Start(7) -- 7s delay after touchdown. +end