DonCalzone Posted June 21, 2020 Posted June 21, 2020 (edited) Hey, I wrote a scipt that plays a radio transmission via the comms menu, giving information about the location of the base. Everything works fine but I'm certain that my code could be 300+ lines shorter. Currently I'm using following code. bearing2_display is calculated by another function that I won't add to keep the initial post clear. I'll add it as answer if anybody wants to know the syntax. local function digit_0() trigger.action.radioTransmission("l10n/DEFAULT/BASE_digits_0.ogg", trigger.misc.getZone("ATC1").point, radio.modulation.AM, false, 39600000, 420, "ATC1") end local function digit_1() trigger.action.radioTransmission("l10n/DEFAULT/BASE_digits_1.ogg", trigger.misc.getZone("ATC1").point, radio.modulation.AM, false, 39600000, 420, "ATC1") end local function digit_2() trigger.action.radioTransmission("l10n/DEFAULT/BASE_digits_2.ogg", trigger.misc.getZone("ATC1").point, radio.modulation.AM, false, 39600000, 420, "ATC1") end ... ... local function digit_9() trigger.action.radioTransmission("l10n/DEFAULT/BASE_digits_9.ogg", trigger.misc.getZone("ATC1").point, radio.modulation.AM, false, 39600000, 420, "ATC1") end if bearing2_display == 000 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_0, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 001 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_1, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 002 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_2, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 003 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_3, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 004 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_4, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 005 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_5, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 006 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_6, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 007 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_7, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 008 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_8, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end if bearing2_display == 009 then timer.scheduleFunction(digit_0, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_0, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_9, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end ... ... ... if bearing2_display == 360 then timer.scheduleFunction(digit_3, {}, timer.getTime() + 5.8) timer.scheduleFunction(digit_6, {}, timer.getTime() + 6.4) timer.scheduleFunction(digit_0, {}, timer.getTime() + 7.0) timer.scheduleFunction(Base_Distance_voice(), timer.getTime() + 7.9) end I'm pretty sure that this is not too good for the perfomance to run 360 if/else functions at the same time. Please correct me if I'm wrong. That'd be awesome because I could leave my script as it is. So I have a number variable that always has 3 digits (bearing2_display) and I want to get every digit as seperate variable This pseudocode is what I'm looking for in lua (I'm no coder so I hope this is understable) a(xyz)= (x=a[1],(y=a[2],(z=a[3] I think I want to merge the digits into a table (or string?) but I'm not sure. Does anyone know how I could achieve that? Edit: typos Edited June 21, 2020 by DonCalzone
Grimes Posted June 22, 2020 Posted June 22, 2020 For questions like this please create threads in the dedicated forum section: https://forums.eagle.ru/forumdisplay.php?f=210 http://lua-users.org/wiki/StringLibraryTutorial I think I understood what you wanted. local function playAudio(index) local filePath = "l10n/DEFAULT/BASE_digits_" .. index .. ".ogg" trigger.action.radioTransmission(filePath, trigger.misc.getZone("ATC1").point, radio.modulation.AM, false, 39600000, 420, "ATC1") end local timeDelay = {5.8, 6.4, 7.9} for i = 1, #timeDelay do local playIndex = string.sub(bearing2_display, i, i) timer.scheduleFunction(playAudio, {playIndex}, timer.getTime() + timeDelay[i]) end The right man in the wrong place makes all the difference in the world. Current Projects: Grayflag Server, Scripting Wiki Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread) SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum
DonCalzone Posted June 22, 2020 Author Posted June 22, 2020 Oops, I didn't realized that there's another forum for ME, sorry! Is it possible to move threads to another section? Thanks a lot for the fast reply tho, I think this is exactly what I was looking for! I'm going to test it immediately when I get home.
Recommended Posts