Jump to content

Recommended Posts

Posted (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 by DonCalzone
Posted

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 ServerScripting Wiki

Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread)

 SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum

Posted

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.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...