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 new file mode 100644 index 0000000..2a19302 --- /dev/null +++ b/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.lua @@ -0,0 +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 diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.miz b/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.miz new file mode 100644 index 0000000..8197eb9 Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/RAD-002-Transmission-Tips-and-Tricks.miz differ diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Clear to land.ogg b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Clear to land.ogg new file mode 100644 index 0000000..55fa5c7 Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Clear to land.ogg differ diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Enter left base.ogg b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Enter left base.ogg new file mode 100644 index 0000000..f0c027a Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Enter left base.ogg differ diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Taxi to parking.ogg b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Taxi to parking.ogg new file mode 100644 index 0000000..730dce0 Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Batumi Tower - Taxi to parking.ogg differ diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Clear to land ack.ogg b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Clear to land ack.ogg new file mode 100644 index 0000000..3b31ff6 Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Clear to land ack.ogg differ diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Enter left base ack.ogg b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Enter left base ack.ogg new file mode 100644 index 0000000..d9b9d53 Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Enter left base ack.ogg differ diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Request landing clearance.ogg b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Request landing clearance.ogg new file mode 100644 index 0000000..3e71859 Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Request landing clearance.ogg differ diff --git a/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Touchdown.ogg b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Touchdown.ogg new file mode 100644 index 0000000..f69955f Binary files /dev/null and b/Sound/Radio/002-Transmission-Tips-and-Tricks/sounds/Viktor - Touchdown.ogg differ